From 402c5d348a1b7e68fe4de330db1ea7f8b1edc4fd Mon Sep 17 00:00:00 2001 From: Hirototensho Date: Fri, 23 Jan 2026 19:43:34 +0900 Subject: [PATCH 01/19] =?UTF-8?q?quarto=20=E3=81=AE=E4=BD=9C=E6=88=90?= =?UTF-8?q?=E3=81=AB=E5=90=91=E3=81=91=E3=81=9F=E3=83=87=E3=82=A3=E3=83=AC?= =?UTF-8?q?=E3=82=AF=E3=83=88=E3=83=AA=E6=A7=8B=E9=80=A0=E3=81=AE=E5=A4=89?= =?UTF-8?q?=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../man/Blinder_Oaxaca.qmd | 0 .../man/Heckit_from_formula.qmd | 0 man/Pareto_plot.md => docs/man/Pareto_plot.qmd | 0 man/arg_match.md => docs/man/arg_match.qmd | 0 man/assert_dtype.md => docs/man/assert_dtype.qmd | 0 man/coefplot.md => docs/man/coefplot.qmd | 0 .../man/compare_df_cols.qmd | 0 .../man/compare_group_stats.qmd | 0 man/compare_mfx.md => docs/man/compare_mfx.qmd | 0 man/compare_ols.md => docs/man/compare_ols.qmd | 0 man/diagnose.md => docs/man/diagnose.qmd | 0 .../man/diagnose_category.qmd | 0 man/filtering_out.md => docs/man/filtering_out.qmd | 0 man/freq_table.md => docs/man/freq_table.qmd | 0 man/glance.md => docs/man/glance.qmd | 0 .../man/heckitmfx_compute.qmd | 0 {man => docs/man}/image/Pareto_plot1.png | Bin {man => docs/man}/image/Pareto_plot2.png | Bin {man => docs/man}/image/Pareto_plot3.png | Bin {man => docs/man}/image/plot_category1.png | Bin {man => docs/man}/image/plot_category2.png | Bin {man => docs/man}/image/plot_miss_var1.png | Bin {man => docs/man}/image/plot_miss_var2.png | Bin {man => docs/man}/image/set_miss.png | Bin man/is_dtype.md => docs/man/is_dtype.qmd | 0 man/is_dummy.md => docs/man/is_dummy.qmd | 0 man/miscellaneous.md => docs/man/miscellaneous.qmd | 0 man/oxford_comma.md => docs/man/oxford_comma.qmd | 0 man/plot_category.md => docs/man/plot_category.qmd | 0 man/plot_miss_var.md => docs/man/plot_miss_var.qmd | 0 man/point_range.md => docs/man/point_range.qmd | 0 man/predicate_str.md => docs/man/predicate_str.qmd | 0 man/relocate.md => docs/man/relocate.qmd | 0 .../man/remove_empty_constant.qmd | 0 man/scale_wmean.md => docs/man/scale_wmean.qmd | 0 man/set_miss.md => docs/man/set_miss.qmd | 0 man/style_pvalue.md => docs/man/style_pvalue.qmd | 0 man/tabyl.md => docs/man/tabyl.qmd | 0 man/tidy.md => docs/man/tidy.qmd | 0 man/tidy_heckit.md => docs/man/tidy_heckit.qmd | 0 man/tidy_test.md => docs/man/tidy_test.qmd | 0 man/varidate.md => docs/man/varidate.qmd | 0 42 files changed, 0 insertions(+), 0 deletions(-) rename man/Blinder_Oaxaca.md => docs/man/Blinder_Oaxaca.qmd (100%) rename man/Heckit_from_formula.md => docs/man/Heckit_from_formula.qmd (100%) rename man/Pareto_plot.md => docs/man/Pareto_plot.qmd (100%) rename man/arg_match.md => docs/man/arg_match.qmd (100%) rename man/assert_dtype.md => docs/man/assert_dtype.qmd (100%) rename man/coefplot.md => docs/man/coefplot.qmd (100%) rename man/compare_df_cols.md => docs/man/compare_df_cols.qmd (100%) rename man/compare_group_stats.md => docs/man/compare_group_stats.qmd (100%) rename man/compare_mfx.md => docs/man/compare_mfx.qmd (100%) rename man/compare_ols.md => docs/man/compare_ols.qmd (100%) rename man/diagnose.md => docs/man/diagnose.qmd (100%) rename man/diagnose_category.md => docs/man/diagnose_category.qmd (100%) rename man/filtering_out.md => docs/man/filtering_out.qmd (100%) rename man/freq_table.md => docs/man/freq_table.qmd (100%) rename man/glance.md => docs/man/glance.qmd (100%) rename man/heckitmfx_compute.md => docs/man/heckitmfx_compute.qmd (100%) rename {man => docs/man}/image/Pareto_plot1.png (100%) rename {man => docs/man}/image/Pareto_plot2.png (100%) rename {man => docs/man}/image/Pareto_plot3.png (100%) rename {man => docs/man}/image/plot_category1.png (100%) rename {man => docs/man}/image/plot_category2.png (100%) rename {man => docs/man}/image/plot_miss_var1.png (100%) rename {man => docs/man}/image/plot_miss_var2.png (100%) rename {man => docs/man}/image/set_miss.png (100%) rename man/is_dtype.md => docs/man/is_dtype.qmd (100%) rename man/is_dummy.md => docs/man/is_dummy.qmd (100%) rename man/miscellaneous.md => docs/man/miscellaneous.qmd (100%) rename man/oxford_comma.md => docs/man/oxford_comma.qmd (100%) rename man/plot_category.md => docs/man/plot_category.qmd (100%) rename man/plot_miss_var.md => docs/man/plot_miss_var.qmd (100%) rename man/point_range.md => docs/man/point_range.qmd (100%) rename man/predicate_str.md => docs/man/predicate_str.qmd (100%) rename man/relocate.md => docs/man/relocate.qmd (100%) rename man/remove_empty_constant.md => docs/man/remove_empty_constant.qmd (100%) rename man/scale_wmean.md => docs/man/scale_wmean.qmd (100%) rename man/set_miss.md => docs/man/set_miss.qmd (100%) rename man/style_pvalue.md => docs/man/style_pvalue.qmd (100%) rename man/tabyl.md => docs/man/tabyl.qmd (100%) rename man/tidy.md => docs/man/tidy.qmd (100%) rename man/tidy_heckit.md => docs/man/tidy_heckit.qmd (100%) rename man/tidy_test.md => docs/man/tidy_test.qmd (100%) rename man/varidate.md => docs/man/varidate.qmd (100%) diff --git a/man/Blinder_Oaxaca.md b/docs/man/Blinder_Oaxaca.qmd similarity index 100% rename from man/Blinder_Oaxaca.md rename to docs/man/Blinder_Oaxaca.qmd diff --git a/man/Heckit_from_formula.md b/docs/man/Heckit_from_formula.qmd similarity index 100% rename from man/Heckit_from_formula.md rename to docs/man/Heckit_from_formula.qmd diff --git a/man/Pareto_plot.md b/docs/man/Pareto_plot.qmd similarity index 100% rename from man/Pareto_plot.md rename to docs/man/Pareto_plot.qmd diff --git a/man/arg_match.md b/docs/man/arg_match.qmd similarity index 100% rename from man/arg_match.md rename to docs/man/arg_match.qmd diff --git a/man/assert_dtype.md b/docs/man/assert_dtype.qmd similarity index 100% rename from man/assert_dtype.md rename to docs/man/assert_dtype.qmd diff --git a/man/coefplot.md b/docs/man/coefplot.qmd similarity index 100% rename from man/coefplot.md rename to docs/man/coefplot.qmd diff --git a/man/compare_df_cols.md b/docs/man/compare_df_cols.qmd similarity index 100% rename from man/compare_df_cols.md rename to docs/man/compare_df_cols.qmd diff --git a/man/compare_group_stats.md b/docs/man/compare_group_stats.qmd similarity index 100% rename from man/compare_group_stats.md rename to docs/man/compare_group_stats.qmd diff --git a/man/compare_mfx.md b/docs/man/compare_mfx.qmd similarity index 100% rename from man/compare_mfx.md rename to docs/man/compare_mfx.qmd diff --git a/man/compare_ols.md b/docs/man/compare_ols.qmd similarity index 100% rename from man/compare_ols.md rename to docs/man/compare_ols.qmd diff --git a/man/diagnose.md b/docs/man/diagnose.qmd similarity index 100% rename from man/diagnose.md rename to docs/man/diagnose.qmd diff --git a/man/diagnose_category.md b/docs/man/diagnose_category.qmd similarity index 100% rename from man/diagnose_category.md rename to docs/man/diagnose_category.qmd diff --git a/man/filtering_out.md b/docs/man/filtering_out.qmd similarity index 100% rename from man/filtering_out.md rename to docs/man/filtering_out.qmd diff --git a/man/freq_table.md b/docs/man/freq_table.qmd similarity index 100% rename from man/freq_table.md rename to docs/man/freq_table.qmd diff --git a/man/glance.md b/docs/man/glance.qmd similarity index 100% rename from man/glance.md rename to docs/man/glance.qmd diff --git a/man/heckitmfx_compute.md b/docs/man/heckitmfx_compute.qmd similarity index 100% rename from man/heckitmfx_compute.md rename to docs/man/heckitmfx_compute.qmd diff --git a/man/image/Pareto_plot1.png b/docs/man/image/Pareto_plot1.png similarity index 100% rename from man/image/Pareto_plot1.png rename to docs/man/image/Pareto_plot1.png diff --git a/man/image/Pareto_plot2.png b/docs/man/image/Pareto_plot2.png similarity index 100% rename from man/image/Pareto_plot2.png rename to docs/man/image/Pareto_plot2.png diff --git a/man/image/Pareto_plot3.png b/docs/man/image/Pareto_plot3.png similarity index 100% rename from man/image/Pareto_plot3.png rename to docs/man/image/Pareto_plot3.png diff --git a/man/image/plot_category1.png b/docs/man/image/plot_category1.png similarity index 100% rename from man/image/plot_category1.png rename to docs/man/image/plot_category1.png diff --git a/man/image/plot_category2.png b/docs/man/image/plot_category2.png similarity index 100% rename from man/image/plot_category2.png rename to docs/man/image/plot_category2.png diff --git a/man/image/plot_miss_var1.png b/docs/man/image/plot_miss_var1.png similarity index 100% rename from man/image/plot_miss_var1.png rename to docs/man/image/plot_miss_var1.png diff --git a/man/image/plot_miss_var2.png b/docs/man/image/plot_miss_var2.png similarity index 100% rename from man/image/plot_miss_var2.png rename to docs/man/image/plot_miss_var2.png diff --git a/man/image/set_miss.png b/docs/man/image/set_miss.png similarity index 100% rename from man/image/set_miss.png rename to docs/man/image/set_miss.png diff --git a/man/is_dtype.md b/docs/man/is_dtype.qmd similarity index 100% rename from man/is_dtype.md rename to docs/man/is_dtype.qmd diff --git a/man/is_dummy.md b/docs/man/is_dummy.qmd similarity index 100% rename from man/is_dummy.md rename to docs/man/is_dummy.qmd diff --git a/man/miscellaneous.md b/docs/man/miscellaneous.qmd similarity index 100% rename from man/miscellaneous.md rename to docs/man/miscellaneous.qmd diff --git a/man/oxford_comma.md b/docs/man/oxford_comma.qmd similarity index 100% rename from man/oxford_comma.md rename to docs/man/oxford_comma.qmd diff --git a/man/plot_category.md b/docs/man/plot_category.qmd similarity index 100% rename from man/plot_category.md rename to docs/man/plot_category.qmd diff --git a/man/plot_miss_var.md b/docs/man/plot_miss_var.qmd similarity index 100% rename from man/plot_miss_var.md rename to docs/man/plot_miss_var.qmd diff --git a/man/point_range.md b/docs/man/point_range.qmd similarity index 100% rename from man/point_range.md rename to docs/man/point_range.qmd diff --git a/man/predicate_str.md b/docs/man/predicate_str.qmd similarity index 100% rename from man/predicate_str.md rename to docs/man/predicate_str.qmd diff --git a/man/relocate.md b/docs/man/relocate.qmd similarity index 100% rename from man/relocate.md rename to docs/man/relocate.qmd diff --git a/man/remove_empty_constant.md b/docs/man/remove_empty_constant.qmd similarity index 100% rename from man/remove_empty_constant.md rename to docs/man/remove_empty_constant.qmd diff --git a/man/scale_wmean.md b/docs/man/scale_wmean.qmd similarity index 100% rename from man/scale_wmean.md rename to docs/man/scale_wmean.qmd diff --git a/man/set_miss.md b/docs/man/set_miss.qmd similarity index 100% rename from man/set_miss.md rename to docs/man/set_miss.qmd diff --git a/man/style_pvalue.md b/docs/man/style_pvalue.qmd similarity index 100% rename from man/style_pvalue.md rename to docs/man/style_pvalue.qmd diff --git a/man/tabyl.md b/docs/man/tabyl.qmd similarity index 100% rename from man/tabyl.md rename to docs/man/tabyl.qmd diff --git a/man/tidy.md b/docs/man/tidy.qmd similarity index 100% rename from man/tidy.md rename to docs/man/tidy.qmd diff --git a/man/tidy_heckit.md b/docs/man/tidy_heckit.qmd similarity index 100% rename from man/tidy_heckit.md rename to docs/man/tidy_heckit.qmd diff --git a/man/tidy_test.md b/docs/man/tidy_test.qmd similarity index 100% rename from man/tidy_test.md rename to docs/man/tidy_test.qmd diff --git a/man/varidate.md b/docs/man/varidate.qmd similarity index 100% rename from man/varidate.md rename to docs/man/varidate.qmd From 348439f7713579bf9968e9b1c85c2baf0aab8183 Mon Sep 17 00:00:00 2001 From: Hirototensho Date: Fri, 23 Jan 2026 22:38:08 +0900 Subject: [PATCH 02/19] =?UTF-8?q?quarto=20book=20=E3=81=AB=E3=82=88?= =?UTF-8?q?=E3=82=8B=E3=83=89=E3=82=AD=E3=83=A5=E3=83=A1=E3=83=B3=E3=83=88?= =?UTF-8?q?=E3=81=AE=E4=BD=9C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 12 +- docs/.gitignore | 2 + docs/_quarto.yml | 68 + .../articles/eda_tools_development_status.qmd | 1 + ...\347\231\272\347\212\266\346\263\201.xlsx" | Bin 0 -> 22411 bytes ...3\347\224\250\346\226\271\351\207\235.png" | Bin .../articles/narwhals_in_py4stats.qmd | 4 +- ...6\343\201\256\350\200\203\345\257\237.qmd" | 4 +- .../articles/scaling_up_regression.qmd | 0 ...3\347\231\272\350\250\230\351\214\262.qmd" | 0 .../eda_tools_development_status.html | 1193 ++++++++++ docs/docs/articles/narwhals_in_py4stats.html | 975 ++++++++ ...\343\201\256\350\200\203\345\257\237.html" | 1028 ++++++++ docs/docs/index.html | 1058 +++++++++ docs/docs/introduction.html | 1358 +++++++++++ docs/docs/man/Blinder_Oaxaca.html | 1141 +++++++++ docs/docs/man/Heckit_from_formula.html | 1001 ++++++++ docs/docs/man/Pareto_plot.html | 970 ++++++++ docs/docs/man/arg_match.html | 985 ++++++++ docs/docs/man/assert_dtype.html | 1060 +++++++++ docs/docs/man/coefplot.html | 1011 ++++++++ docs/docs/man/compare_df_cols.html | 977 ++++++++ docs/docs/man/compare_group_stats.html | 1063 +++++++++ docs/docs/man/compare_mfx.html | 1093 +++++++++ docs/docs/man/compare_ols.html | 1413 +++++++++++ docs/docs/man/diagnose.html | 943 ++++++++ docs/docs/man/diagnose_category.html | 988 ++++++++ docs/docs/man/filtering_out.html | 988 ++++++++ docs/docs/man/freq_table.html | 984 ++++++++ docs/docs/man/glance.html | 949 ++++++++ docs/docs/man/heckitmfx_compute.html | 1029 ++++++++ docs/docs/man/image/Pareto_plot1.png | Bin 0 -> 25849 bytes docs/docs/man/image/Pareto_plot2.png | Bin 0 -> 27946 bytes docs/docs/man/image/Pareto_plot3.png | Bin 0 -> 28448 bytes docs/docs/man/image/coefplot1.png | Bin 0 -> 17557 bytes docs/docs/man/image/coefplot2.png | Bin 0 -> 24639 bytes docs/docs/man/image/coefplot3.png | Bin 0 -> 23963 bytes docs/docs/man/image/plot_Blinder_Oaxaca1.png | Bin 0 -> 21792 bytes docs/docs/man/image/plot_Blinder_Oaxaca2.png | Bin 0 -> 16077 bytes docs/docs/man/image/plot_category1.png | Bin 0 -> 23258 bytes docs/docs/man/image/plot_category2.png | Bin 0 -> 27997 bytes docs/docs/man/image/plot_mean_diff1.png | Bin 0 -> 13213 bytes docs/docs/man/image/plot_mean_diff2.png | Bin 0 -> 13819 bytes docs/docs/man/image/plot_median_diff1.png | Bin 0 -> 13379 bytes docs/docs/man/image/plot_miss_var1.png | Bin 0 -> 16981 bytes docs/docs/man/image/plot_miss_var2.png | Bin 0 -> 13189 bytes docs/docs/man/image/set_miss.png | Bin 0 -> 15691 bytes docs/docs/man/is_dtype.html | 962 ++++++++ docs/docs/man/is_dummy.html | 972 ++++++++ docs/docs/man/miscellaneous.html | 957 ++++++++ docs/docs/man/oxford_comma.html | 941 ++++++++ docs/docs/man/plot_category.html | 992 ++++++++ docs/docs/man/plot_miss_var.html | 957 ++++++++ docs/docs/man/point_range.html | 972 ++++++++ docs/docs/man/predicate_str.html | 1003 ++++++++ docs/docs/man/relocate.html | 994 ++++++++ docs/docs/man/remove_empty_constant.html | 1017 ++++++++ docs/docs/man/scale_wmean.html | 1013 ++++++++ docs/docs/man/set_miss.html | 976 ++++++++ docs/docs/man/style_pvalue.html | 964 ++++++++ docs/docs/man/tabyl.html | 971 ++++++++ docs/docs/man/tidy.html | 1026 ++++++++ docs/docs/man/tidy_heckit.html | 1018 ++++++++ docs/docs/man/tidy_test.html | 958 ++++++++ docs/docs/man/varidate.html | 1040 ++++++++ docs/docs/reference.html | 996 ++++++++ docs/docs/search.json | 2050 ++++++++++++++++ ...p-322e28c2ea576fd4147837fb8c5b7a3d.min.css | 12 + .../site_libs/bootstrap/bootstrap-icons.css | 2106 +++++++++++++++++ .../site_libs/bootstrap/bootstrap-icons.woff | Bin 0 -> 180288 bytes .../docs/site_libs/bootstrap/bootstrap.min.js | 7 + .../docs/site_libs/clipboard/clipboard.min.js | 7 + docs/docs/site_libs/quarto-html/anchor.min.js | 9 + .../site_libs/quarto-html/axe/axe-check.js | 145 ++ docs/docs/site_libs/quarto-html/popper.min.js | 6 + ...hting-ed96de9b727972fe78a7b5d16c58bf87.css | 236 ++ docs/docs/site_libs/quarto-html/quarto.js | 847 +++++++ .../site_libs/quarto-html/tabsets/tabsets.js | 95 + docs/docs/site_libs/quarto-html/tippy.css | 1 + .../site_libs/quarto-html/tippy.umd.min.js | 2 + .../docs/site_libs/quarto-nav/headroom.min.js | 7 + docs/docs/site_libs/quarto-nav/quarto-nav.js | 325 +++ .../quarto-search/autocomplete.umd.js | 3 + docs/docs/site_libs/quarto-search/fuse.min.js | 9 + .../site_libs/quarto-search/quarto-search.js | 1290 ++++++++++ docs/docs/theme.scss | 31 + docs/index.qmd | 89 + INTRODUCTION.md => docs/introduction.qmd | 34 +- docs/man/Blinder_Oaxaca.qmd | 6 +- docs/man/Heckit_from_formula.qmd | 2 +- docs/man/Pareto_plot.qmd | 2 +- docs/man/arg_match.qmd | 4 +- docs/man/assert_dtype.qmd | 4 +- docs/man/coefplot.qmd | 10 +- docs/man/compare_df_cols.qmd | 2 +- docs/man/compare_group_stats.qmd | 9 +- docs/man/compare_mfx.qmd | 6 +- docs/man/compare_ols.qmd | 6 +- docs/man/diagnose.qmd | 2 +- docs/man/diagnose_category.qmd | 2 +- docs/man/filtering_out.qmd | 2 +- docs/man/freq_table.qmd | 2 +- docs/man/glance.qmd | 2 +- docs/man/heckitmfx_compute.qmd | 4 +- docs/man/image/coefplot1.png | Bin 0 -> 17557 bytes docs/man/image/coefplot2.png | Bin 0 -> 24639 bytes docs/man/image/coefplot3.png | Bin 0 -> 23963 bytes docs/man/image/plot_Blinder_Oaxaca1.png | Bin 0 -> 21792 bytes docs/man/image/plot_Blinder_Oaxaca2.png | Bin 0 -> 16077 bytes docs/man/image/plot_mean_diff1.png | Bin 0 -> 13213 bytes docs/man/image/plot_mean_diff2.png | Bin 0 -> 13819 bytes docs/man/image/plot_median_diff1.png | Bin 0 -> 13379 bytes docs/man/is_dtype.qmd | 2 +- docs/man/is_dummy.qmd | 2 +- docs/man/miscellaneous.qmd | 2 +- docs/man/oxford_comma.qmd | 2 +- docs/man/plot_miss_var.qmd | 4 +- docs/man/point_range.qmd | 2 +- docs/man/predicate_str.qmd | 2 +- docs/man/relocate.qmd | 2 +- docs/man/remove_empty_constant.qmd | 2 +- docs/man/style_pvalue.qmd | 2 +- docs/man/tabyl.qmd | 2 +- docs/man/tidy.qmd | 4 +- docs/man/tidy_heckit.qmd | 4 +- docs/man/tidy_test.qmd | 4 +- docs/man/varidate.qmd | 2 +- docs/reference.qmd | 158 ++ docs/theme.scss | 31 + reference.md | 158 -- 130 files changed, 48552 insertions(+), 236 deletions(-) create mode 100644 docs/.gitignore create mode 100644 docs/_quarto.yml rename "articles/eda_tools\351\226\213\347\231\272\347\212\266\346\263\201.md" => docs/articles/eda_tools_development_status.qmd (99%) create mode 100644 "docs/articles/eda_tools\351\226\213\347\231\272\347\212\266\346\263\201.xlsx" rename "articles/image/Py4Stats\343\203\252\343\203\235\343\202\270\343\203\210\343\203\252\343\201\256\351\201\213\347\224\250\346\226\271\351\207\235.png" => "docs/articles/image/Py4Stats\343\203\252\343\203\235\343\202\270\343\203\210\343\203\252\343\201\256\351\201\213\347\224\250\346\226\271\351\207\235.png" (100%) rename articles/narwhals_in_py4stats.md => docs/articles/narwhals_in_py4stats.qmd (95%) rename "articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.md" => "docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.qmd" (95%) rename articles/scaling_up_regression.md => docs/articles/scaling_up_regression.qmd (100%) rename "articles/\351\226\213\347\231\272\350\250\230\351\214\262.md" => "docs/articles/\351\226\213\347\231\272\350\250\230\351\214\262.qmd" (100%) create mode 100644 docs/docs/articles/eda_tools_development_status.html create mode 100644 docs/docs/articles/narwhals_in_py4stats.html create mode 100644 "docs/docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.html" create mode 100644 docs/docs/index.html create mode 100644 docs/docs/introduction.html create mode 100644 docs/docs/man/Blinder_Oaxaca.html create mode 100644 docs/docs/man/Heckit_from_formula.html create mode 100644 docs/docs/man/Pareto_plot.html create mode 100644 docs/docs/man/arg_match.html create mode 100644 docs/docs/man/assert_dtype.html create mode 100644 docs/docs/man/coefplot.html create mode 100644 docs/docs/man/compare_df_cols.html create mode 100644 docs/docs/man/compare_group_stats.html create mode 100644 docs/docs/man/compare_mfx.html create mode 100644 docs/docs/man/compare_ols.html create mode 100644 docs/docs/man/diagnose.html create mode 100644 docs/docs/man/diagnose_category.html create mode 100644 docs/docs/man/filtering_out.html create mode 100644 docs/docs/man/freq_table.html create mode 100644 docs/docs/man/glance.html create mode 100644 docs/docs/man/heckitmfx_compute.html create mode 100644 docs/docs/man/image/Pareto_plot1.png create mode 100644 docs/docs/man/image/Pareto_plot2.png create mode 100644 docs/docs/man/image/Pareto_plot3.png create mode 100644 docs/docs/man/image/coefplot1.png create mode 100644 docs/docs/man/image/coefplot2.png create mode 100644 docs/docs/man/image/coefplot3.png create mode 100644 docs/docs/man/image/plot_Blinder_Oaxaca1.png create mode 100644 docs/docs/man/image/plot_Blinder_Oaxaca2.png create mode 100644 docs/docs/man/image/plot_category1.png create mode 100644 docs/docs/man/image/plot_category2.png create mode 100644 docs/docs/man/image/plot_mean_diff1.png create mode 100644 docs/docs/man/image/plot_mean_diff2.png create mode 100644 docs/docs/man/image/plot_median_diff1.png create mode 100644 docs/docs/man/image/plot_miss_var1.png create mode 100644 docs/docs/man/image/plot_miss_var2.png create mode 100644 docs/docs/man/image/set_miss.png create mode 100644 docs/docs/man/is_dtype.html create mode 100644 docs/docs/man/is_dummy.html create mode 100644 docs/docs/man/miscellaneous.html create mode 100644 docs/docs/man/oxford_comma.html create mode 100644 docs/docs/man/plot_category.html create mode 100644 docs/docs/man/plot_miss_var.html create mode 100644 docs/docs/man/point_range.html create mode 100644 docs/docs/man/predicate_str.html create mode 100644 docs/docs/man/relocate.html create mode 100644 docs/docs/man/remove_empty_constant.html create mode 100644 docs/docs/man/scale_wmean.html create mode 100644 docs/docs/man/set_miss.html create mode 100644 docs/docs/man/style_pvalue.html create mode 100644 docs/docs/man/tabyl.html create mode 100644 docs/docs/man/tidy.html create mode 100644 docs/docs/man/tidy_heckit.html create mode 100644 docs/docs/man/tidy_test.html create mode 100644 docs/docs/man/varidate.html create mode 100644 docs/docs/reference.html create mode 100644 docs/docs/search.json create mode 100644 docs/docs/site_libs/bootstrap/bootstrap-322e28c2ea576fd4147837fb8c5b7a3d.min.css create mode 100644 docs/docs/site_libs/bootstrap/bootstrap-icons.css create mode 100644 docs/docs/site_libs/bootstrap/bootstrap-icons.woff create mode 100644 docs/docs/site_libs/bootstrap/bootstrap.min.js create mode 100644 docs/docs/site_libs/clipboard/clipboard.min.js create mode 100644 docs/docs/site_libs/quarto-html/anchor.min.js create mode 100644 docs/docs/site_libs/quarto-html/axe/axe-check.js create mode 100644 docs/docs/site_libs/quarto-html/popper.min.js create mode 100644 docs/docs/site_libs/quarto-html/quarto-syntax-highlighting-ed96de9b727972fe78a7b5d16c58bf87.css create mode 100644 docs/docs/site_libs/quarto-html/quarto.js create mode 100644 docs/docs/site_libs/quarto-html/tabsets/tabsets.js create mode 100644 docs/docs/site_libs/quarto-html/tippy.css create mode 100644 docs/docs/site_libs/quarto-html/tippy.umd.min.js create mode 100644 docs/docs/site_libs/quarto-nav/headroom.min.js create mode 100644 docs/docs/site_libs/quarto-nav/quarto-nav.js create mode 100644 docs/docs/site_libs/quarto-search/autocomplete.umd.js create mode 100644 docs/docs/site_libs/quarto-search/fuse.min.js create mode 100644 docs/docs/site_libs/quarto-search/quarto-search.js create mode 100644 docs/docs/theme.scss create mode 100644 docs/index.qmd rename INTRODUCTION.md => docs/introduction.qmd (76%) create mode 100644 docs/man/image/coefplot1.png create mode 100644 docs/man/image/coefplot2.png create mode 100644 docs/man/image/coefplot3.png create mode 100644 docs/man/image/plot_Blinder_Oaxaca1.png create mode 100644 docs/man/image/plot_Blinder_Oaxaca2.png create mode 100644 docs/man/image/plot_mean_diff1.png create mode 100644 docs/man/image/plot_mean_diff2.png create mode 100644 docs/man/image/plot_median_diff1.png create mode 100644 docs/reference.qmd create mode 100644 docs/theme.scss delete mode 100644 reference.md diff --git a/README.md b/README.md index d3d3594..c2e22a3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # `Py4Stats` - `Py4Stats` は、主に実証研究で用いられる、探索的データ分析および回帰結果レポート用のユーティリティライブラリで、回帰分析を中心とする分析でよく使われるR言語の機能を、Python で実装しています。本ライブラリの主な機能は [**Get started**](./INTRODUCTION.md) を、実装されている関数の一覧は [**Function reference**](./reference.md) を参照してください。 + `Py4Stats` は、主に実証研究で用いられる、探索的データ分析および回帰結果レポート用のユーティリティライブラリで、回帰分析を中心とする分析でよく使われるR言語の機能を、Python で実装しています。本ライブラリの主な機能は [**Get started**](./docs/introduction.html) を、実装されている関数の一覧は [**Function reference**](./docs/reference.html) を参照してください。 ## Installation @@ -22,7 +22,7 @@ import py4stats as py4st ``` -[`py4stats.diagnose()`](man/diagnose.md) 関数はデータの全般的な状態についての要約を提供します。 +[`py4stats.diagnose()`](docs/docs/man/diagnose.html) 関数はデータの全般的な状態についての要約を提供します。 ``` python import pandas as pd @@ -41,7 +41,7 @@ print(py4st.diagnose(penguins).round(4)) #> 7 year int64 0 0.0000 3 0.8721 ``` -[`py4stats.compare_ols()`](man/compare_ols.md) 関数は、計量経済学の実証論文でよく用いられる、回帰分析の結果を列方向に並べて比較する表を作成します。 +[`py4stats.compare_ols()`](docs/docs/man/compare_ols.html) 関数は、計量経済学の実証論文でよく用いられる、回帰分析の結果を列方向に並べて比較する表を作成します。 ``` python @@ -75,9 +75,9 @@ compare_tab1 | df | 3 | 4 | 5 | -詳細は、[`py4stats.compare_ols()`](man//compare_ols.md) を参照してください。  +詳細は、[`py4stats.compare_ols()`](docs/docs/man/compare_ols.html) を参照してください。  *** -[Jump to **Function Get started**.](./INTRODUCTION.md) -[Jump to **Function reference**.](./reference.md) +[Jump to **Get started**.](./docs/introduction.html) +[Jump to **Function reference**.](./docs/reference.html) diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000..ad29309 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,2 @@ +/.quarto/ +**/*.quarto_ipynb diff --git a/docs/_quarto.yml b/docs/_quarto.yml new file mode 100644 index 0000000..ac5ed0b --- /dev/null +++ b/docs/_quarto.yml @@ -0,0 +1,68 @@ +project: + type: book + output-dir: docs +book: + title: "Py4Stats" + chapters: + - index.qmd + - introduction.qmd + - reference.qmd + - part: "eda_tools" + chapters: + - man/diagnose.qmd + - man/tabyl.qmd + - man/freq_table.qmd + - man/Pareto_plot.qmd + - man/plot_category.qmd + - man/diagnose_category.qmd + - man/point_range.qmd + - man/remove_empty_constant.qmd + - man/filtering_out.qmd + - man/relocate.qmd + - man/compare_df_cols.qmd + - man/compare_group_stats.qmd + - man/plot_miss_var.qmd + - man/set_miss.qmd + - man/scale_wmean.qmd + - man/predicate_str.qmd + - man/is_dummy.qmd + - man/varidate.qmd + - part: "regression_tools" + chapters: + - man/compare_ols.qmd + - man/compare_mfx.qmd + - man/coefplot.qmd + - man/tidy.qmd + - man/tidy_test.qmd + - man/glance.qmd + - man/Blinder_Oaxaca.qmd + - part: "heckit_helper" + chapters: + - man/tidy_heckit.qmd + - man/Heckit_from_formula.qmd + - man/heckitmfx_compute.qmd + - part: "building_block" + chapters: + - man/arg_match.qmd + - man/assert_dtype.qmd + - man/is_dtype.qmd + - man/miscellaneous.qmd + - man/style_pvalue.qmd + - man/oxford_comma.qmd + - part: "articles" + chapters: + - articles/narwhals_in_py4stats.qmd + - articles/eda_tools_development_status.qmd + - articles/narwhalsについての考察.qmd + # repo-url: https://github.com/Hirototensho/Portfolio + # repo-actions: [source] +format: + html: + theme: cosmo + css: theme.scss + code-link: true + callout-appearance: default # callout については https://quarto.org/docs/authoring/callouts.html を参照 + grid: + sidebar-width: 250px # サイドバー幅の最大値 + body-width: 1000px # メイン本文幅の最大値 + margin-width: 150px # 余白幅の最大値 \ No newline at end of file diff --git "a/articles/eda_tools\351\226\213\347\231\272\347\212\266\346\263\201.md" b/docs/articles/eda_tools_development_status.qmd similarity index 99% rename from "articles/eda_tools\351\226\213\347\231\272\347\212\266\346\263\201.md" rename to docs/articles/eda_tools_development_status.qmd index ee32c7e..9c337a8 100644 --- "a/articles/eda_tools\351\226\213\347\231\272\347\212\266\346\263\201.md" +++ b/docs/articles/eda_tools_development_status.qmd @@ -2,6 +2,7 @@ 2026年1月22日 **eda_toolsの開発状況** + | functions | Input | Pandas | Polars | Pyarrow | 補足 | |:---------------------|:-----------------|:---------|:---------|:----------|:------------------------------------------| | Mean | pd.Series | ✅ | ❌ | ❌ | pd.DataFrame.eval() での使用を想定した関数 | diff --git "a/docs/articles/eda_tools\351\226\213\347\231\272\347\212\266\346\263\201.xlsx" "b/docs/articles/eda_tools\351\226\213\347\231\272\347\212\266\346\263\201.xlsx" new file mode 100644 index 0000000000000000000000000000000000000000..edb6accc4cb9bbbe4b6926e644c1ae229aa53a22 GIT binary patch literal 22411 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 +`py4stats.eda_tools` モジュールの関数のうち、[`py4stats.diagnose()`](../man/diagnose.qmd) など、第一引数にデータフレームを取る関数の返り値の型は、`to_native` 引数の値によって変化します。
 初期設定である `to_nativ = True` の場合には、第一引数に入力されたデータフレームと同じ型のデータフレームが出力され、`to_nativ = False` の場合には `narwhals.DataFrame` 型のデータフレームが出力されます。`to_nativ = False` のオプションは、主にライブラリ内部での利用や、データフレームのバックエンドに依存しない後続処理を行いたい場合を想定したオプションです。 ``` python diff --git "a/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.md" "b/docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.qmd" similarity index 95% rename from "articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.md" rename to "docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.qmd" index c90165d..ba789bd 100644 --- "a/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.md" +++ "b/docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.qmd" @@ -10,7 +10,7 @@ Pandas の場合、2つのデータフレーム `df1` と `df2` が共通の col Pandas の場合、`df.loc[i, j] = x` という形でデータフレーム `df` の i, j 要素に値 `x` を代入することができますが、narwhals ではこれに相当する演算 `df[i, j] = x` は禁止されています。 -異なるデータフレーム間の二項演算に制約があること、そしてデータフレームへの値の代入が難しいことから、[`tabyl()`](../man/tabyl.md) 関数では、集計後の作表処理の一部を Pandas に依存しています。 +異なるデータフレーム間の二項演算に制約があること、そしてデータフレームへの値の代入が難しいことから、[`tabyl()`](../man/tabyl.qmd) 関数では、集計後の作表処理の一部を Pandas に依存しています。 ### 任意の関数でグループ別集計を行う @@ -28,7 +28,7 @@ data_nw.group_by(nw.col(group)).agg(nw.col('x').my_func()) data_nw.group_by(nw.col(group)).agg(my_func(nw.col('x'))) ```` -例えば Py4Stats では、[`Pareto_plot()`](../man/Pareto_plot.md) 関数の内部実装に使用している [`make_rank_table()`](../py4stats/eda_tools/_nw.py) 関数において、任意の `aggfunc()` 関数をグループ別集計に使うために、サブセッティングを使って `group_by()` メソッドの使用を回避するという変則的(かつ、おそらく非効率な)な実装を行なっています。 +例えば Py4Stats では、[`Pareto_plot()`](../man/Pareto_plot.qmd) 関数の内部実装に使用している [`make_rank_table()`](..../py4stats/eda_tools/_nw.py) 関数において、任意の `aggfunc()` 関数をグループ別集計に使うために、サブセッティングを使って `group_by()` メソッドの使用を回避するという変則的(かつ、おそらく非効率な)な実装を行なっています。 ``` python stat_values = [ diff --git a/articles/scaling_up_regression.md b/docs/articles/scaling_up_regression.qmd similarity index 100% rename from articles/scaling_up_regression.md rename to docs/articles/scaling_up_regression.qmd diff --git "a/articles/\351\226\213\347\231\272\350\250\230\351\214\262.md" "b/docs/articles/\351\226\213\347\231\272\350\250\230\351\214\262.qmd" similarity index 100% rename from "articles/\351\226\213\347\231\272\350\250\230\351\214\262.md" rename to "docs/articles/\351\226\213\347\231\272\350\250\230\351\214\262.qmd" diff --git a/docs/docs/articles/eda_tools_development_status.html b/docs/docs/articles/eda_tools_development_status.html new file mode 100644 index 0000000..0f996c7 --- /dev/null +++ b/docs/docs/articles/eda_tools_development_status.html @@ -0,0 +1,1193 @@ + + + + + + + + + +39  eda_toolsの開発状況 – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

39  eda_toolsの開発状況

+
+ + + +
+ + + + +
+ + + +
+ + +

2026年1月22日

+

eda_toolsの開発状況

+ ++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
functionsInputPandasPolarsPyarrow補足
Meanpd.Seriespd.DataFrame.eval() での使用を想定した関数
Medianpd.Seriespd.DataFrame.eval() での使用を想定した関数
Maxpd.Seriespd.DataFrame.eval() での使用を想定した関数
Minpd.Seriespd.DataFrame.eval() での使用を想定した関数
Pareto_plotDataFrame
Sumpd.Seriespd.DataFrame.eval() での使用を想定した関数
check_thatDataFrame⭕️⭕️実装に pd.DataFrame.eval() を使用
check_viorateDataFrame⭕️⭕️実装に pd.DataFrame.eval() を使用
compare_df_colsDataFrame
compare_df_recordDataFrame
compare_df_statsDataFrame
compare_group_meansDataFrame
compare_group_medianDataFrame
crosstabDataFrame⭕️Pyarrow は Polars 依存の実装
diagnoseDataFrame
diagnose_categoryDataFrame
filtering_outDataFrame
freq_tableDataFrame
implies_experpd.Seriespd.DataFrame.eval() での使用を想定した関数
is_dummyDataFrame/Series
is_numberSeries
is_ymd_likeSeries
is_ymdSeries
mean_ciDataFrame/Series
mean_qiDataFrame/Series
median_qiDataFrame/Series
min_maxSeries
plot_mean_diffDataFrame
plot_median_diffDataFrame
plot_miss_varDataFrame
scaleSeries
set_missSeries
relocateDataFrame
remove_constantDataFrame
remove_emptyDataFrame
tabylDataFrame⭕️⭕️一部の処理が Pandas 依存
weighted_meanSeries
+
+

39.1 凡例

+
    +
  • ✅ 実装済/テスト済
  • +
  • ⭕️ 実装済/テスト済(異なるバックエンドに依存)
  • +
  • 🔼 実装済/テスト未
  • +
  • ❌ 未実装
  • +
+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/articles/narwhals_in_py4stats.html b/docs/docs/articles/narwhals_in_py4stats.html new file mode 100644 index 0000000..d1b855b --- /dev/null +++ b/docs/docs/articles/narwhals_in_py4stats.html @@ -0,0 +1,975 @@ + + + + + + + + + +38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装 – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装

+
+ + + +
+ + + + +
+ + + +
+ + +
+

38.1 概要

+

py4stats.eda_tools モジュールは、複数の DataFrame バックエンドに対して共通の API を提供することを目的として、narwhals ライブラリを用いて実装されています。

+

本ドキュメントでは、本モジュールの内部実装に関する前提条件や、バックエンドの違いに起因する挙動上の注意点について説明します。

+

通常の利用にあたって本ドキュメントを読む必要はありませんが、実装の詳細や挙動の違いが気になる場合には参考にしてください。

+
+
+

38.2 対応している DataFrame バックエンドについて

+

 py4stats.eda_tools モジュールの関数は、第一引数として narwhals.from_native() によって nw.DataFrame 型へ変換可能な DataFrame オブジェクトを受け取ります。

+

具体的には、以下のようなバックエンドを想定しています。

+
    +
  • pandas.DataFrame(主に動作検証を行っているバックエンド)
  • +
  • polars.DataFrame(簡易的な動作確認のみ)
  • +
  • pyarrow.Table(簡易的な動作確認のみ)
  • +
+

本ライブラリの動作確認は、基本的に pandas.DataFrame を用いて実施しています。そのため、polarspyarrow を使用した場合には、バックエンド固有の仕様差や未検証の挙動により、一部の関数でエラーが発生する可能性があります。そのような挙動が確認された場合は、Issue 等での報告を歓迎します。

+

 また、バックエンド別の実装状況については eda_tools開発状況 も参照して下さい。

+
+
+

38.3 narwhals を用いた関数の返り値の型について

+

py4stats.eda_tools モジュールの関数のうち、py4stats.diagnose() など、第一引数にデータフレームを取る関数の返り値の型は、to_native 引数の値によって変化します。
 初期設定である to_nativ = True の場合には、第一引数に入力されたデータフレームと同じ型のデータフレームが出力され、to_nativ = False の場合には narwhals.DataFrame 型のデータフレームが出力されます。to_nativ = False のオプションは、主にライブラリ内部での利用や、データフレームのバックエンドに依存しない後続処理を行いたい場合を想定したオプションです。

+
import py4stats as py4st
+import pandas as pd
+import polars as pl
+import pyarrow as pa
+import wooldridge
+mroz_pd = wooldridge.data('mroz')       # pd.DataFrame
+mroz_pl = pl.from_pandas(mroz_pd)       # pl.DataFrame
+mroz_pa = pa.Table.from_pandas(mroz_pd) # pyarrow.lib.Table
+
# to_nativ = True の場合(初期設定): 入力されたデータフレームと同じ型
+
+print(type(py4st.diagnose(mroz_pd, to_native = True)))
+#> <class 'pandas.core.frame.DataFrame'>
+
+print(type(py4st.diagnose(mroz_pl, to_native = True)))
+#> <class 'polars.dataframe.frame.DataFrame'>
+
+print(type(py4st.diagnose(mroz_pa, to_native = True)))
+#> <class 'pyarrow.lib.Table'>
+
# to_nativ = False の場合: narwhals.DataFrame 型
+
+print(type(py4st.diagnose(mroz_pd, to_native = False)))
+#> <class 'narwhals.dataframe.DataFrame'>
+
+print(type(py4st.diagnose(mroz_pl, to_native = False)))
+#> <class 'narwhals.dataframe.DataFrame'>
+
+print(type(py4st.diagnose(mroz_pa, to_native = False)))
+#> <class 'narwhals.dataframe.DataFrame'>
+
+
+

38.4 narwhals を用いた実装方針について

+

 内部実装では、関数の冒頭で

+
nw.from_native(data)
+

を用いて入力データを nw.DataFrame に変換し、以降の処理を narwhals の抽象 API 上で行っています。

+

この設計により、DataFrame バックエンドごとの差異を最小限に抑えつつ、将来的な拡張性を確保することを目的としています。

+

一方で、narwhals は各バックエンドの完全な互換性を保証するものではないため、特定の操作や型変換についてはバックエンドごとに挙動が異なる場合があります。

+
+
+

38.5  pandas_flavor を用いた DataFrame メソッド登録について

+

py4stats.eda_tools の関数のうち、単一の DataFrame オブジェクトを引数として受け取る関数については、pandas_flavor.register_dataframe_method を用いて DataFrame メソッドとして登録されています。その結果、以下のような使い方が可能です。

+
df.diagnose()
+

ただし、pandas_flavor は pandas の拡張を前提とした仕組みであるため、このメソッド形式の呼び出しは、pandas.DataFrame を対象としています。  polars.DataFrame や pyarrow ベースのオブジェクトを使用する場合には、関数として直接呼び出す形での利用を推奨します。

+
import py4stats as py4st
+
+py4st.diagnose(df)
+
+
+

38.6 今後について

+

 py4stats.eda_tools モジュールは、今後も narwhals ベースの実装を主軸として改良・拡張を行っていく予定です。一方で、従来の pandas ベースの実装については、互換性のために当面は保持される予定ですが、機能追加は行わない予定です。バックエンドごとの挙動差や制限事項については、必要に応じて本ドキュメントを更新していきます。

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git "a/docs/docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.html" "b/docs/docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.html" new file mode 100644 index 0000000..5f797bc --- /dev/null +++ "b/docs/docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.html" @@ -0,0 +1,1028 @@ + + + + + + + + + +40  narwhals についての考察 – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

40  narwhals についての考察

+
+ + + +
+ + + + +
+ + + +
+ + +
+

40.1 narwhals での再現が難しい Pandas の機能

+
+

40.1.1 異なるデータフレーム間の二項演算

+

Pandas の場合、2つのデータフレーム df1df2 が共通の columns と index をもつ限り、df3 = df1 + df2 によって二項演算を行うことができ、このとき、columns と index をもつ要素同士が加算されます。しかし、narwhals には Pandas のような index が存在しないため、この計算は再現が困難です。

+
+
+

40.1.2 データフレームへの値の代入

+

Pandas の場合、df.loc[i, j] = x という形でデータフレーム df の i, j 要素に値 x を代入することができますが、narwhals ではこれに相当する演算 df[i, j] = x は禁止されています。

+

異なるデータフレーム間の二項演算に制約があること、そしてデータフレームへの値の代入が難しいことから、tabyl() 関数では、集計後の作表処理の一部を Pandas に依存しています。

+
+
+

40.1.3 任意の関数でグループ別集計を行う

+

自作関数を使ってグループ別集計を行いたい場合、Pandas であれば df.groupby(group)[x].agg(my_func) で行うことができます。同じく narwhals でも

+
data_nw.group_by(nw.col(group)).agg(nw.col('x').mean())
+

という形でグループ別の集計がサポートされているものの、ここで使用できる集計関数は narwhals で実装されているものに限定されるようで、次のような方法で自作関数を使用することはできません。

+
data_nw.group_by(nw.col(group)).agg(nw.col('x').my_func())
+data_nw.group_by(nw.col(group)).agg(my_func(nw.col('x')))
+

例えば Py4Stats では、Pareto_plot() 関数の内部実装に使用している make_rank_table() 関数において、任意の aggfunc() 関数をグループ別集計に使うために、サブセッティングを使って group_by() メソッドの使用を回避するという変則的(かつ、おそらく非効率な)な実装を行なっています。

+
stat_values = [
+            aggfunc(
+                data_nw.filter(nw.col(group) == g)[values]
+                .drop_nulls().to_native()
+                ) 
+            for g in group_value
+            ]
+

また、上記の回避策のもう1つの問題として、data_nw.filter(nw.col(group) == g) では、複数の変数に基づくグループ化に対応できないことも挙げられます。make_rank_table() 関数については、Pareto_plot() 関数でパレート図を作図するときに横軸になる group が多変数だと対応できないので、group が1変数(= 引数として1つの文字列だけを受け付ける)とすることで妥協しています。

+

ただ、現時点で narwhals.GroupBy クラスに実装されているメソッドは .agg() しかなく、開発が進めばより柔軟な関数適用が可能になるのではないかと期待しています。

+
+
+
+

40.2 narwhals におけるバックエンドとその書き換え

+
+

40.2.1 バックエンドの基本的な理解

+

narwhals におけるバックエンドによる型変換の基本的な理解として(不正確かもしれませんが)、nw.from_native(data) の実行時に data の型に応じて backend が記録され、.to_native() メソッドを呼び出すと、記録された backend に応じて元の型に変換されます。

+

backend の情報は .select() .filter() などのメソッドを使って data_nw を加工しても保持され、これによって入力された input_pd と同じ型のデータフレームを返すことが可能になっています。

+
data_nw = nw.from_native(input_pd) # ここで backend が記録される
+data_nw.implementation       # -> Pandas
+result = data_nw.to_native() # -> pd.DataFrame が出力される
+

一方で、処理の途中で pd.DataFrame や pl.DataFrame などの native オブジェクトを経由した場合、改めて nw.from_native() を使って nw.DataFrame に変換し直したとしても、その時点で backend が上書きされるので、.to_native() メソッドを使用しても引数として入力された input_pd と同じ型に復元される保証はありません。

+
data_nw = nw.from_native(input_pd)              # ここで backend が記録される
+data_nw2 = nw.from_native(data_nw.to_polars())  # ここで backend が上書きされる
+data_nw2.implementation        # -> polars
+result = data_nw2.to_native()  # -> pl.DataFrame が出力される
+

従って、resultinput_pd と同じ型をもつことを保証するには、data_nw を nw.DataFrame クラスのまま維持する(≒ narwhals ベースのメソッドだけで処理を書く)必要があり、これが narwhals ベースの実装としてのあるべき姿だと思われます。

+

一方で、一部の処理が特定のバックエンド(e.g. Pandas)に依存している場合にはどうするべきでしょうか。これには次のような2つの選択肢があると考えています。

+
    +
  1. 処理が依存しているバックエンドのオブジェクト(e.g. pd.DataFrame)として出力する〔推奨〕
  2. +
  3. narwhals の仕様を迂回してバックエンドを書き換える〔非推奨ですが次節で考察〕
  4. +
+

これら2つの可能性の間での選択は、技術的な問題であると同時にユーザーとのコミュニケーションの問題です。入力と同型のデータフレームを返す関数の中に pd.DataFrame を返す関数が混ざっていることをユーザーにどう説明するのか。あるいは、narwhals の仕様を迂回をしたことで非効率性やカラムレベルでデータ型(dtype)の一貫性が失われる問題が生じたとして、それをユーザーにどう説明するのか、という問いです。

+
+
+

40.2.2 バックエンドの書き換え (非推奨)

+

いま、some_computation() として実装された処理の一部が Pandas に依存しており、結果が result_pd という pd.DataFrame 型のオブジェクトとして得られているとします。このとき、result_pd をもとのデータフレーム data_pl と同型にする方法の1つとして、result_pdpd.Series.to_dict() などを使って辞書のリスト(list of dict)に変換したのち、nw.from_dicts() を使って data_pl と同じバックエンドをもつ nw.DataFrame に変換するという方法があります。

+

以上の変換の実例を見てみましょう。まずは、data_pl

+
data_pl = pl.from_pandas(load_penguins())[:10, :2]
+
+data_pl = data_pl.with_columns(
+        pl.all().cast(pl.Categorical)
+    )
+print(type(data_pl))
+#> <class 'polars.dataframe.frame.DataFrame'>
+print(data_pl.schema)
+#> Schema({'species': Categorical, 'island': Categorical})
+
+data_nw_pl = nw.from_native(data_pl) # ここでバックエンドを記録、後ほど復元に使います。
+
+# 何かしらの処理の結果 pd.DataFrame に変換されたとする
+result_pd = data_nw_pl.to_pandas()
+print(type(result_pd))
+#> <class 'pandas.core.frame.DataFrame'>
+

次に、pl.DataFrame 型をもつ result_pd を pl.DataFrame に変換します。

+

ここでポイントとなるのが、nw.from_dicts() 関数の引数の (1)schema 引数と、(2)backend引数に、それぞれ data_nw_pl から取得した値を入力することで、result_pl の列が data_pl と同じく Categorical 型になるようにしています(指定しないと String 型として解釈されてしまいます)。

+
# Pandas -> polars の変換
+dict_list = [result_pd.loc[i, :].to_dict() for i in result_pd.index]
+
+result_nw_pl = nw.from_dicts(
+    dict_list, 
+    schema = data_nw_pl.schema,         # (1)
+    backend = data_nw_pl.implementation # (2)
+    )
+result_pl = result_nw_pl.to_native()
+
+print(type(result_pl))
+#> <class 'polars.dataframe.frame.DataFrame'>
+
+print(result_pl.schema)
+#> Schema({'species': Categorical, 'island': Categorical})
+

また、Series については、nw.Series.from_iterable() 関数を使うことで、次のようにバックエンドを書き換えることができます。

+
x_pl = data_pl['island']
+print(type(x_pl))
+#> <class 'polars.series.series.Series'>
+print(x_pl.dtype)
+#> Categorical
+
+x_nw = nw.from_native(x_pl, allow_series = True)
+x_pd = x_nw.to_pandas()
+print(type(x_pd))
+#> <class 'pandas.core.series.Series'>
+
x_pl2 = nw.Series.from_iterable(
+    name = x_pd.name,
+    values = x_pd.to_list(),
+    backend = x_nw.implementation,
+    dtype = x_nw.dtype
+).to_native()
+
+print(type(x_pl2))
+#> <class 'polars.series.series.Series'>
+print(x_pl2.dtype)
+#> Categorical
+

narwhals の仕様を迂回してバックエンドを書き換えることは可能ですが、この方法には次のような問題があります。 ただし、以上のような方法でバックエンドの書き換えは可能ですが、

+
    +
  1. 小さいデータフレームでない限り時間がかかる +
      +
    • 恐らく、dict_list を作成するための for ループによるもの
    • +
  2. +
  3. 上記の (1) に代入する正しい schema が用意できないと、カラムレベルでデータ型の一貫性保証できない。
  4. +
+

特に2番目の問題点については、集計処理によって列名が変わった場合には正しい schema(≒ {列名:dtype} の辞書オブジェクト)を用意することが難しくなります。そして、schema を指定できないと、pd.Categoricalpl.Categorical あるいは pl.Enum といったカテゴリー変数は文字列型に変換されてしまい、データ型の一貫性が失われます。

+

カラムレベルで型の一貫性が失われると、返り値が入力値とは異なる型になるよりも把握しづらく、また挙動の予測が難しいため、上記のような処理は採用するとしても、他に方法がないときの最終手段として扱うべきでしょう。

+ + +
+
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/index.html b/docs/docs/index.html new file mode 100644 index 0000000..de5db56 --- /dev/null +++ b/docs/docs/index.html @@ -0,0 +1,1058 @@ + + + + + + + + + + +Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

Py4Stats

+
+ + + +
+ + +
+
Published
+
+

2026-01-23

+
+
+ + +
+ + + +
+ + +
+

1 Readme

+

 Py4Stats は、主に実証研究で用いられる、探索的データ分析および回帰結果レポート用のユーティリティライブラリで、回帰分析を中心とする分析でよく使われるR言語の機能を、Python で実装しています。本ライブラリの主な機能は Get started を、実装されている関数の一覧は Function reference を参照してください。

+
+

1.1 Installation

+

uv をお使いの場合、次のコードで py4stats をインストールできます。

+
! uv add git+https://github.com/Hirototensho/py4stats.git
+

一方で、pip をお使いの場合には、次のコードで py4stats をインストールできます。

+
! pip install git+https://github.com/Hirototensho/py4stats.git
+
+
+

1.2 使用例

+
import py4stats as py4st
+

py4stats.diagnose() 関数はデータの全般的な状態についての要約を提供します。

+
import pandas as pd
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込み
+
+print(py4st.diagnose(penguins).round(4))
+#>              columns    dtype  missing_count  missing_percent  unique_count  unique_rate
+#> 0            species   object              0           0.0000             3       0.8721
+#> 1             island   object              0           0.0000             3       0.8721
+#> 2     bill_length_mm  float64              2           0.5814           165      47.9651
+#> 3      bill_depth_mm  float64              2           0.5814            81      23.5465
+#> 4  flipper_length_mm  float64              2           0.5814            56      16.2791
+#> 5        body_mass_g  float64              2           0.5814            95      27.6163
+#> 6                sex   object             11           3.1977             3       0.8721
+#> 7               year    int64              0           0.0000             3       0.8721
+

py4stats.compare_ols() 関数は、計量経済学の実証論文でよく用いられる、回帰分析の結果を列方向に並べて比較する表を作成します。

+
import statsmodels.formula.api as smf
+
+# 回帰分析の実行
+fit1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()
+fit2 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species', data = penguins).fit()
+fit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()
+
+compare_tab1 = py4st.compare_ols(list_models = [fit1, fit2, fit3]) # 表の作成
+compare_tab1
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
termmodel 1model 2model 3
Intercept153.7397-1,742.7202 ***843.9812 **
(268.9012)(313.7697)(403.5956)
species[T.Chinstrap]-885.8121 ***-539.6864 ***-245.1516 ***
(88.2502)(86.9425)(84.5952)
species[T.Gentoo]578.6292 ***1,492.8283 ***1,443.3525 ***
(75.3623)(118.4442)(107.7844)
bill_length_mm91.4358 ***55.6461 ***26.5366 ***
(6.8871)(7.2326)(7.2436)
bill_depth_mm179.0434 ***87.9328 ***
(19.0997)(20.2192)
sex[T.male]437.2007 ***
(49.1098)
rsquared_adj0.78100.82580.8613
nobs342342333
df345
+

詳細は、py4stats.compare_ols() を参照してください。 

+
+

Jump to Function Get started.
+Jump to Function reference.

+ + +
+
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/introduction.html b/docs/docs/introduction.html new file mode 100644 index 0000000..42374a9 --- /dev/null +++ b/docs/docs/introduction.html @@ -0,0 +1,1358 @@ + + + + + + + + + +2  Introduction to Py4Stats – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

2  Introduction to Py4Stats

+
+ + + +
+ + + + +
+ + + +
+ + +
import py4stats as py4st
+

ここでは Py4Stats の主な機能を紹介します。実装されている関数の一覧は Function reference を参照してください。

+
+

2.1 py4stats.eda_tools

+

 探索的データ解析と前処理に関する機能を提供するモジュールです。このモジュールは、複数の DataFrame バックエンドに対して共通の API を提供することを目的として、narwhals ライブラリを用いて実装されています。詳細は Technical Notes: py4stats.eda_tools における narwhals ベースの実装 を参照してください。

+

 py4stats.diagnose():R言語のdlookr::diagnose()を再現した関数で、データの全般的な状態についての要約を提供します。

+
import pandas as pd
+import numpy as np
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込み
+
+print(py4st.diagnose(penguins).round(4))
+#>                      dtype  missing_count  missing_percent  unique_count  unique_rate
+#> species             object              0           0.0000             3       0.8721
+#> island              object              0           0.0000             3       0.8721
+#> bill_length_mm     float64              2           0.5814           164      47.6744
+#> bill_depth_mm      float64              2           0.5814            80      23.2558
+#> flipper_length_mm  float64              2           0.5814            55      15.9884
+#> body_mass_g        float64              2           0.5814            94      27.3256
+#> sex                 object             11           3.1977             2       0.5814
+#> year                 int64              0           0.0000             3       0.8721
+

py4stats.tabyl():R言語の janitor::tabyl()を参考にした、クロス集計表を作成する関数です。

+
print(py4st.tabyl(penguins, 'island', 'species'))
+#> species         Adelie   Chinstrap       Gentoo  All
+#> island                                              
+#> Biscoe      44 (26.2%)    0 (0.0%)  124 (73.8%)  168
+#> Dream       56 (45.2%)  68 (54.8%)     0 (0.0%)  124
+#> Torgersen  52 (100.0%)    0 (0.0%)     0 (0.0%)   52
+#> All        152 (44.2%)  68 (19.8%)  124 (36.0%)  344
+

 py4stats.freq_table():R言語のDescTools::Freq()をオマージュした、1変数の度数分布表を計算する関数。度数 freq と相対度数 perc に加えて、それぞれの累積値を計算します。

+
print(py4st.freq_table(penguins, 'species'))
+#>            freq      perc  cumfreq   cumperc
+#> species                                     
+#> Adelie      152  0.441860      152  0.441860
+#> Gentoo      124  0.360465      276  0.802326
+#> Chinstrap    68  0.197674      344  1.000000
+

引数 group を指定すると、グループ別の度数分布表を計算できます。

+
penguins2 = penguins.assign(bill_length_mm2 = pd.cut(penguins['bill_length_mm'], 6))
+
+print(
+    py4st.freq_table(penguins2, ['species', 'bill_length_mm2'], sort = False)
+    )
+#>                             freq      perc  cumfreq   cumperc
+#> species   bill_length_mm2
+#> Adelie    (32.072, 38.975]    79  0.523179       79  0.523179
+#>           (38.975, 45.85]     71  0.470199      150  0.993377
+#>           (45.85, 52.725]      1  0.006623      151  1.000000
+#>           (52.725, 59.6]       0  0.000000      151  1.000000
+#> Chinstrap (32.072, 38.975]     0  0.000000        0  0.000000
+#>           (38.975, 45.85]     13  0.191176       13  0.191176
+#>           (45.85, 52.725]     50  0.735294       63  0.926471
+#>           (52.725, 59.6]       5  0.073529       68  1.000000
+#> Gentoo    (32.072, 38.975]     0  0.000000        0  0.000000
+#>           (38.975, 45.85]     40  0.325203       40  0.325203
+#>           (45.85, 52.725]     78  0.634146      118  0.959350
+#>           (52.725, 59.6]       5  0.040650      123  1.000000
+

 py4stats.remove_empty():完全に空白な列や行の削除する関数。R言語の janitor::remove_empty() をオマージュした関数で、全ての要素が NaN である列や行をデータフレームから除外します。

+
penguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy()
+penguins2.loc[:, 'empty'] = np.nan
+penguins2.loc[344, :] = np.nan
+
+print(penguins2.tail(3))
+#>        species  body_mass_g  empty
+#> 342  Chinstrap       4100.0    NaN
+#> 343  Chinstrap       3775.0    NaN
+#> 344        NaN          NaN    NaN
+
+# 完全に空白な行と列を削除。
+print(py4st.remove_empty(penguins2, quiet = False).tail(3))
+#> Removing 1 empty column(s) out of 3 columns(Removed: empty).
+#> Removing 1 empty row(s) out of 345 rows(Removed: 344). 
+#>        species  body_mass_g
+#> 341  Chinstrap       3775.0
+#> 342  Chinstrap       4100.0
+#> 343  Chinstrap       3775.0
+
+# 完全に空白な列のみ削除。
+print(py4st.remove_empty(penguins2, rows = False, quiet = False).tail(3))
+#> Removing 1 empty column(s) out of 3 columns(Removed: empty).
+#>        species  body_mass_g
+#> 342  Chinstrap       4100.0
+#> 343  Chinstrap       3775.0
+#> 344        NaN          NaN
+
+# 完全に空白な行のみ削除。
+print(py4st.remove_empty(penguins2, cols = False, quiet = False).tail(3))
+#> Removing 1 empty row(s) out of 345 rows(Removed: 344). 
+#>        species  body_mass_g  empty
+#> 341  Chinstrap       3775.0    NaN
+#> 342  Chinstrap       4100.0    NaN
+#> 343  Chinstrap       3775.0    NaN
+

 py4stats.remove_constant():定数列の削除。R言語の janitor::remove_constant() をオマージュした関数で、1種類だけの要素からなる列をデータフレームから除外します。

+
penguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy()
+penguins2.loc[:, 'constant'] = 'c'
+
+print(penguins2.head(3))
+#>   species  body_mass_g constant
+#> 0  Adelie       3750.0        c
+#> 1  Adelie       3800.0        c
+#> 2  Adelie       3250.0        c
+
+print(py4st.remove_constant(penguins2, quiet = False).head(3))
+#> Removing 1 constant column(s) out of 3 column(s)(Removed: constant). 
+#>   species  body_mass_g
+#> 0  Adelie       3750.0
+#> 1  Adelie       3800.0
+#> 2  Adelie       3250.0
+

 py4stats.filtering_out()pandasDataFrame.filter() メソッドでは引数 like に文字列を指定することで、列名に特定の文字列を含む列を選択できますが、反対に py4stats.filtering_out() では列名に特定の文字列を含む列を除外します。実装の一部はR言語の dplyr::select() を参考にしました。

+
# 列名に 'length' を含む列を除外
+print(py4st.filtering_out(penguins, contains = 'length').head(3))
+#>   species     island  bill_depth_mm  body_mass_g     sex  year  female
+#> 0  Adelie  Torgersen           18.7       3750.0    male  2007       0
+#> 1  Adelie  Torgersen           17.4       3800.0  female  2007       1
+#> 2  Adelie  Torgersen           18.0       3250.0  female  2007       1
+
+# 列名が 'bill' から始まる列を除外
+print(py4st.filtering_out(penguins, starts_with = 'bill').head(3))
+#>   species     island  flipper_length_mm  body_mass_g     sex  year  female
+#> 0  Adelie  Torgersen              181.0       3750.0    male  2007       0
+#> 1  Adelie  Torgersen              186.0       3800.0  female  2007       1
+#> 2  Adelie  Torgersen              195.0       3250.0  female  2007       1
+
+# 列名が '_mm' で終わる列を除外
+print(py4st.filtering_out(penguins, ends_with = '_mm').head(3))
+#>   species     island  body_mass_g     sex  year  female
+#> 0  Adelie  Torgersen       3750.0    male  2007       0
+#> 1  Adelie  Torgersen       3800.0  female  2007       1
+#> 2  Adelie  Torgersen       3250.0  female  2007       1
+
+
+

2.2 py4stats.regression_tools

+

 py4stats.regression_toolsstatsmodelsライブラリで作成された回帰分析の結果についての表作成と可視化を補助する機能を提供するモジュールです。

+

 py4stats.compare_ols() :計量経済学の実証論文でよく用いられる、回帰分析の結果を列方向に並べて比較する表を作成します。表のフォーマットについてはR言語のtexreg::screenreg()modelsummary::modelsummary()を参考にしています。同種の機能を提供する Python ライブラリーとしては、R言語の stargazer パッケージをもとにした stargazer ライブラリがあります。

+
import statsmodels.formula.api as smf
+
+# 回帰分析の実行
+fit1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()
+fit2 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species', data = penguins).fit()
+fit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()
+
+compare_tab1 = py4st.compare_ols(list_models = [fit1, fit2, fit3]) # 表の作成
+compare_tab1
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
termmodel 1model 2model 3
Intercept153.7397-1,742.7202 ***843.9812 **
(268.9012)(313.7697)(403.5956)
species[T.Chinstrap]-885.8121 ***-539.6864 ***-245.1516 ***
(88.2502)(86.9425)(84.5952)
species[T.Gentoo]578.6292 ***1,492.8283 ***1,443.3525 ***
(75.3623)(118.4442)(107.7844)
bill_length_mm91.4358 ***55.6461 ***26.5366 ***
(6.8871)(7.2326)(7.2436)
bill_depth_mm179.0434 ***87.9328 ***
(19.0997)(20.2192)
sex[T.male]437.2007 ***
(49.1098)
rsquared_adj0.78100.82580.8613
nobs342342333
df345
+

py4stats.compare_ols() の実行結果は PandasDataFrame として出力されるため、.xlsx. ファイルなどに変換することができます。また、用途に応じて表の体裁を調整できるようにしています。詳細については 「回帰分析の比較」 を参照してください。

+
compare_tab2 = py4st.compare_ols(
+    list_models = [fit1, fit2, fit3],
+    model_name = ['基本モデル', '嘴の高さ追加', '性別追加'], # モデル名を変更
+    stats = 'p_value',        # () 内の値をP-値に変更する
+    add_stars = False,        # 有意性のアスタリスクなし
+    table_style = 'one_line', # 表スタイルを1行表示に設定 'one' でも可能
+    digits = 3                # 小数点以下の桁数を3に設定
+    )
+compare_tab2
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
term基本モデル嘴の高さ追加性別追加
Intercept153.740(0.568)-1,742.720(0.000)843.981(0.037)
species[T.Chinstrap]-885.812(0.000)-539.686(0.000)-245.152(0.004)
species[T.Gentoo]578.629(0.000)1,492.828(0.000)1,443.353(0.000)
bill_length_mm91.436(0.000)55.646(0.000)26.537(0.000)
bill_depth_mm179.043(0.000)87.933(0.000)
sex[T.male]437.201(0.000)
rsquared_adj0.7810.8260.861
nobs342342333
df345
+

py4stats.coefplot():回帰係数の可視化。R言語の coefplot::coefplot() を参考にしました。

+
import matplotlib.pyplot as plt
+py4st.coefplot(fit3)
+
+
+

+
coefplot1
+
+
+
plt.rcParams["figure.autolayout"] = True
+
+fig, ax = plt.subplots(1, 2, figsize = (2.2 * 5, 5), dpi = 100)
+
+py4st.coefplot(fit2, ax = ax[0])
+ax[0].set_xlim(-900, 1800)
+
+py4st.coefplot(fit3, ax = ax[1], palette = ['#FF6F91', '#F2E5EB'])
+ax[1].set_xlim(-900, 1800);
+
+
+

+
coefplot2
+
+
+

 py4stats.compare_mfx()py4stats.mfxplot() は、それぞれ py4stats.compare_ols()py4stats.coefplot() の一般化線型モデルバージョンです。statsmodels ライブラリの.get_margeff() メソッドから得られた限界効果の推定値を表示します。

+
penguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)
+
+# ロジスティック回帰の実行
+fit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()
+fit_logit2 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm + species', data = penguins).fit()
+
+py4st.compare_mfx([fit_logit1, fit_logit2])
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
termmodel 1model 2
body_mass_g-0.0004 ***-0.0003 ***
(0.0000)(0.0000)
bill_length_mm-0.0053-0.0357 ***
(0.0036)(0.0070)
bill_depth_mm-0.1490 ***-0.1098 ***
(0.0051)(0.0175)
species[T.Chinstrap]0.4172 ***
(0.0848)
species[T.Gentoo]0.3527 ***
(0.1308)
prsquared0.56470.6187
nobs342342
df35
+
plt.rcParams["figure.autolayout"] = True
+
+fig, ax = plt.subplots(1, 2, figsize = (2.2 * 5, 5), dpi = 100)
+
+py4st.mfxplot(fit_logit1, ax = ax[0])
+ax[0].set_xlim(-0.2, 0.85)
+
+py4st.mfxplot(fit_logit2, ax = ax[1], palette = ['#FF6F91', '#F2E5EB'])
+ax[1].set_xlim(-0.2, 0.85);
+
+
+

+
coefplot3
+
+
+
+

Jump to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/Blinder_Oaxaca.html b/docs/docs/man/Blinder_Oaxaca.html new file mode 100644 index 0000000..f1a96e0 --- /dev/null +++ b/docs/docs/man/Blinder_Oaxaca.html @@ -0,0 +1,1141 @@ + + + + + + + + + +28  py4stats.Blinder_Oaxaca(), py4stats.plot_Blinder_Oaxaca() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

28  py4stats.Blinder_Oaxaca(), py4stats.plot_Blinder_Oaxaca()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

28.1 概要

+

 2つのサブサンプルを用いた回帰分析の推定結果に対して、Blinder-Oaxaca分解を行います。

+
Blinder_Oaxaca(model1, model2)
+
+plot_Blinder_Oaxaca(
+    model1, model2,
+    diff_type = ['observed_diff', 'unobserved_diff'],
+    ax = None, 
+)
+

 いま、ある変数 \(s\) を用いて \(s = m\)\(s = f\) の2つのサブグループからなるデータセットがあるとし、次のような回帰式を仮定します。

+

\[ +\begin{aligned} +Y_{i}^s = \boldsymbol{X}_i^s\boldsymbol{\beta}^s + \epsilon_i^s, && +s = m, f +\end{aligned} +\tag{1} +\]

+

 ここで、\(\boldsymbol{X}_i^s\) サブグループ \(s\) に属する個人 \(i\) についての説明変数からなる行列で、\(\boldsymbol{\beta}^s\) はサブグループ \(s\) のについての回帰係数、\(\epsilon_i^s\) は誤差項です。  さらに、サブグループ \(s\) の被説明変数の平均値を \(\bar{Y}^s\) とし、説明変数の平均値を \(\bar{\boldsymbol{X}}^s\) とするとき、Blinder-Oaxaca分解は2つのグループにおける被説明変数の平均値の差 \(\bar{Y}^m - \bar{Y}^f\) を次のように分解します。

+

\[ +\begin{aligned} +\bar{Y}^m - \bar{Y}^f = (\bar{\boldsymbol{X}}^m - \bar{\boldsymbol{X}}^f)\boldsymbol{\beta}^m + \bar{\boldsymbol{X}}^f(\boldsymbol{\beta}^m - \boldsymbol{\beta}^f) +\end{aligned} +\tag{2} +\]

+

このとき、式(2)右辺の各項は、それぞれ次のような意味を持ちます。

+
    +
  • \((\bar{\boldsymbol{X}}^m - \bar{\boldsymbol{X}}^f)\boldsymbol{\beta}^m\):2つのグループの観測可能な属性の差に起因する被説明変数の差 observed_diff
  • +
  • \(\bar{\boldsymbol{X}}^f(\boldsymbol{\beta}^m - \boldsymbol{\beta}^f)\):2つのグループの観測できない要因の違いに起因する被説明変数の差 unobserved_diff
  • +
+

 式(1)および式(2)については朝井(2014, p.9)を参照しました。

+
+
+

28.2 引数 Argument

+
    +
  • model1statsmodels で作成した回帰分析の結果(必須)。
  • +
  • model2statsmodels で作成した回帰分析の結果(必須)。
  • +
  • diff_typeplot_Blinder_Oaxaca()のみ)list of str or str
     グラフの描画に使用する要約統計量の種類。初期設定では observed_diffunobserved_diff の両方を表示します。
  • +
  • ax:matplotlib の ax オブジェクト。複数のグラフを並べる場合などに使用します。   ## 使用例 Examples
  • +
+
import pandas as pd
+import statsmodels.formula.api as smf
+import py4stats as py4st
+
+wage1 = wooldridge.data('wage1')
+
+fit_female = smf.ols(
+    'lwage ~ educ + exper + expersq + tenure + tenursq + married', 
+    data = wage1.query('female == 1')
+    ).fit()
+
+fit_male = smf.ols(
+    'lwage ~ educ + exper + expersq + tenure + tenursq + married', 
+    data = wage1.query('female == 0')
+    ).fit()
+
py4st.compare_ols(
+    list_models = [fit_female, fit_male],
+    model_name = ['female', 'male']
+    )
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
termfemalemale
Intercept0.3159 **
(0.1401)
0.2255 *
(0.1302)
educ0.0737 ***
(0.0104)
0.0830 ***
(0.0089)
exper0.0200 ***
(0.0072)
0.0329 ***
(0.0076)
expersq-0.0004 ***
(0.0002)
-0.0006 ***
(0.0002)
tenure0.0391 ***
(0.0117)
0.0301 ***
(0.0089)
tenursq-0.0014 ***
(0.0005)
-0.0005 *
(0.0003)
married-0.0548
(0.0539)
0.1718 ***
(0.0595)
rsquared_adj0.24460.4509
nobs252274
df66
+
wage_decomp = py4st.Blinder_Oaxaca(
+    model1 = fit_female,
+    model2 = fit_male
+)
+wage_decomp
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
termsobserved_diffunobserved_diff
Intercept0-0.0903337
educ0.03906610.114713
exper0.03715770.211177
expersq-0.0216026-0.0962631
tenure0.0859831-0.0327949
tenursq-0.03427270.0378497
married0.02788060.118657
+
py4st.plot_Blinder_Oaxaca(
+    model1 = fit_female,
+    model2 = fit_male
+)
+
+
+

+
plot_Blinder_Oaxaca1.png
+
+
+

diff_type を指定することで、一方の統計量だけを表示することもできます。

+
py4st.plot_Blinder_Oaxaca(
+    model1 = fit_female,
+    model2 = fit_male,
+    diff_type = 'unobserved_diff'
+)
+
+
+

+
plot_Blinder_Oaxaca2.png
+
+
+

グラフのサイズや解像度を指定するには、次のように行います。

+
fig, ax = plt.subplots(1, 2, figsize = (1.1 * 2 * 4, 4), sharey = True, dpi = 200)
+
+py4st.plot_Blinder_Oaxaca(
+    model1 = fit_female,
+    model2 = fit_male,
+    ax = ax
+)
+fig.tight_layout()
+
+
+

28.3 参考文献

+
    +
  • 朝井 友紀子 (2014) 「労働市場における男女差の30年― 就業のサンプルセレクションと男女間賃金格差」『日本労働研究雑誌』, No.648, pp.6–16
  • +
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/Heckit_from_formula.html b/docs/docs/man/Heckit_from_formula.html new file mode 100644 index 0000000..dd3b70e --- /dev/null +++ b/docs/docs/man/Heckit_from_formula.html @@ -0,0 +1,1001 @@ + + + + + + + + + +30  heckit_helper.Heckit_from_formula() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

30  heckit_helper.Heckit_from_formula()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

30.1 概要

+
Heckit_from_formula(
+  selection, 
+  outcome, 
+  data, 
+  **kwargs
+  )
+
+
+

30.2 引数 Argument

+
    +
  • selectionstr(必須)
     Type2トービットモデルのうち第1段階の selection equation(選択関数, 就業決定関数)の回帰式
  • +
  • outcomestr(必須)
     Type2トービットモデルのうち第2段階の regression equation(賃金関数)の回帰式
  • +
  • datapandas.DataFrame(必須)
  • +
  • **kwargs
    py4etrics.heckit.Heckit() に渡すその他の引数
  • +
+
+
+

30.3 返り値 Value

+

 3つの要素を持つ tuple。左から順に次の3つのオブジェクトが出力されます。

+
    +
  1. py4etrics.heckit.Heckit() から出力されたモデルの推定結果
  2. +
  3. 第2段階の regression equation(賃金関数)の説明変数からなる pd.DataFrame
  4. +
  5. 第1段階のselection equation(選択関数, 就業決定関数)の説明変数からなる pd.DataFrame
  6. +
+
+
+

30.4 使用例 Examples

+

 heckit_helper モジュールはヘックマンの2段階推定(Heckit)を実行を Py4Etrics モジュールの py4etrics.heckit.Heckit() に依存しているため、事前のインストールをお願いします。

+
pip install git+https://github.com/Py4Etrics/py4etrics.git
+

ここでは春山(2023, Chap.24)のモデルを再現するため、wooldridge モジュールから mroz データを読み込みます。

+
import pandas as pd
+import wooldridge
+from py4stats import heckit_helper
+
+mroz = wooldridge.data('mroz') # サンプルデータの読み込み
+

Heckit_from_formula() 関数を使い、モデルを推定します。なお、Type2トービットモデルを推定する場合、第2段階の回帰式 outcome で使用される説明変数は全て第1段階の回帰式 selection に含まれ、なおかつ selection に含まれるものの、outcome には含まれない説明変数が少なくとも1つは必要であることに注意してください(末石, 2015, p.117)。

+
mod_heckit, exog_outcome, exog_select = \
+ heckit_helper.Heckit_from_formula(
+    selection = 'lwage ~ educ + exper + expersq + nwifeinc + age + kidslt6 + kidsge6',
+    outcome = 'lwage ~ educ + exper + expersq',
+    data = mroz
+)
+
+res_heckit = mod_heckit.fit(cov_type_2 = 'HC1')
+
+print(res_heckit.summary())
+#>                            Heckit Regression Results                            
+#> ================================================================================
+#> Dep. Variable:                    lwage   R-squared:                       0.156
+#> Model:                           Heckit   Adj. R-squared:                  0.150
+#> Method:                Heckman Two-Step   F-statistics:                   26.148
+#> Date:                  Mon, 11 Mar 2024   Prob (F-statistic):              0.000
+#> Time:                          08:40:39   Cov in 1st Stage:            nonrobust
+#> No. Total Obs.:                     753   Cov in 2nd Stage:                  HC1
+#> No. Censored Obs.:                  325                                         
+#> No. Uncensored Obs.:                428                                         
+#> ==============================================================================
+#>                  coef    std err          z      P>|z|      [0.025      0.975]
+#> ------------------------------------------------------------------------------
+#> Intercept     -0.5781      0.305     -1.895      0.058      -1.176       0.020
+#> educ           0.1091      0.016      7.026      0.000       0.079       0.139
+#> exper          0.0439      0.016      2.699      0.007       0.012       0.076
+#> expersq       -0.0009      0.000     -1.957      0.050      -0.002    1.15e-06
+#> ==============================================================================
+#>                  coef    std err          z      P>|z|      [0.025      0.975]
+#> ------------------------------------------------------------------------------
+#> Intercept      0.2701      0.509      0.531      0.595      -0.727       1.267
+#> educ           0.1309      0.025      5.183      0.000       0.081       0.180
+#> exper          0.1233      0.019      6.590      0.000       0.087       0.160
+#> expersq       -0.0019      0.001     -3.145      0.002      -0.003      -0.001
+#> nwifeinc      -0.0120      0.005     -2.484      0.013      -0.022      -0.003
+#> age           -0.0529      0.008     -6.235      0.000      -0.069      -0.036
+#> kidslt6       -0.8683      0.119     -7.326      0.000      -1.101      -0.636
+#> kidsge6        0.0360      0.043      0.828      0.408      -0.049       0.121
+#> ================================================================================
+#>                    coef    std err          z      P>|z|      [0.025      0.975]
+#> --------------------------------------------------------------------------------
+#> IMR (Lambda)     0.0323      0.134      0.241      0.809      -0.230       0.294
+#> =====================================
+#> rho:                            0.049
+#> sigma:                          0.664
+#> =====================================
+#> 
+#> First table are the estimates for the regression (response) equation.
+#> Second table are the estimates for the selection equation.
+#> Third table is the estimate for the coef of the inverse Mills ratio (Heckman's Lambda).
+
+
+

30.5 参考文献

+
    +
  • 末石直也(2015)『計量経済学:ミクロデータ分析へのいざない』 日本評論社.
  • +
  • 春山鉄源(2023) 『Pythonで学ぶ入門計量経済学』 https://py4etrics.github.io/index.html
  • +
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/Pareto_plot.html b/docs/docs/man/Pareto_plot.html new file mode 100644 index 0000000..b5f99e5 --- /dev/null +++ b/docs/docs/man/Pareto_plot.html @@ -0,0 +1,970 @@ + + + + + + + + + +7  py4stats.Pareto_plot(): パレート図の作成 – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

7  py4stats.Pareto_plot(): パレート図の作成

+
+ + + +
+ + + + +
+ + + +
+ + +
+

7.1 概要

+

データフレームからパレート図を作図する関数です。

+
Pareto_plot(
+    data: IntoFrameT,
+    group: str,
+    values: Optional[str] = None,
+    top_n: Optional[int] = None,
+    aggfunc: Callable[..., Any] = np.mean,
+    ax: Optional[Axes] = None,
+    fontsize: int = 12,
+    xlab_rotation: Union[int, float] = 0,
+    palette: Sequence[str] = ("#478FCE", "#252525"),
+    )
+
    +
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • +
  • groupstr
     集計に使用するデータフレームの列名(必須)。
  • +
  • valuesstr
     集計に使用するデータフレームの列名。values = None(初期設定)の場合、group 別の度数が表示され、values が指定された場合、group 別に valuesaggfuncで集計した値がグラフに表示されます。
  • +
  • top_nint
     棒グラフを表示するカテゴリーの件数。top_n = None(初期設定)の場合、すべてのカテゴリーを表示し、整数値が指定された場合、上位 top_n 件が表示されます。
  • +
  • aggfunccallable
    values が指定された際に、集計に使用する集計関数。np.mean など values 列を1次元配列として受け取って単一の数値を返す任意の関数が使用できるほか、nw.mean など narwhals.functions モジュールで実装された関数を使用できます。
  • +
  • ax
    描画先となる matplotlib の Axes。複数のグラフを並べる場合などに使用します。デフォルトの None の場合は、新しい Figure と Axes が作成されます。
  • +
  • fontsizeint
     軸ラベルなどのフォントサイズ。
  • +
  • xlab_rotationint or float
    横軸ラベルの角度。matplotlib の ax.xaxis.set_tick_params() に引数 rotation として渡されます。
  • +
  • palettelist of str
    グラフの描画に使用する色コード。1つ目の要素が棒グラフの色に、2つ目の累積値を表す折線グラフの色に対応します。
  • +
+
+
+

7.2 使用例

+
import py4stats as py4st
+import pandas as pd
+import numpy as np
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込
+
+penguins['group'] = penguins['species'] + '\n' + penguins['island']
+
+py4st.Pareto_plot(penguins, group = 'group')
+
+
+

+
Pareto_plot1
+
+
+
py4st.Pareto_plot(
+    penguins, group = 'group', 
+    values = 'bill_length_mm',
+    aggfunc = np.mean,
+    palette = ['#FF6F91', '#252525']
+    )
+
+
+

+
Pareto_plot2
+
+
+
py4st.Pareto_plot(
+    penguins, 
+    values = 'bill_length_mm',
+    group = 'group',
+    aggfunc = lambda x: x.std()
+    )
+
+
+

+
Pareto_plot3
+
+
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/arg_match.html b/docs/docs/man/arg_match.html new file mode 100644 index 0000000..d805320 --- /dev/null +++ b/docs/docs/man/arg_match.html @@ -0,0 +1,985 @@ + + + + + + + + + +32  引数のアサーション building_block.arg_match() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

32  引数のアサーション building_block.arg_match()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

32.1 概要

+

 R言語の rlang::arg_match() をオマージュした関数で、文字列で与えられた引数のアサーションを行います。

+
arg_match(
+    arg: Union[str, Sequence[str], pd.Series, np.ndarray],
+    values: Sequence[str],
+    arg_name: Optional[str] = None,
+    multiple: bool = False,
+    any_missing: bool = False,
+    all_missing: bool = False,
+    nullable: bool = False
+    )
+
+
+

32.2 引数 Argument

+
    +
  • arg(必須)str or list of str
     適正かどうかを判断したい引数の値
  • +
  • values(必須):list of str
     引数 arg の適正な値のリスト
  • +
  • arg_namestr
     エラーメッセージに表示する引数の名前。指定されなかった場合(初期設定)、引数 arg に代入されたオブジェクトの名称を表示します。なお、この機能は varname.argname()関数を使って実装されています。
  • +
  • multiplebool
     引数の値として複数の値を許容するかどうかを示すブール値。arg にリストが代入された場合、multiple = False(初期設定)であれば最初の値のみを出力し、multiple = True であればリストの値を全て出力します。
  • +
  • any_missing:bool
    True の場合、欠測値(例:NoneNaNpd.NA など)が引数 arg一部に含まれていても許容されます。
  • +
  • all_missing: bool
    True の場合、すべての要素が欠測値であることを許容します。
  • +
  • nullable: bool
    True の場合、引数そのものが None であることを許容します。
  • +
+
+
+

32.3 返り値 Value

+

 引数 arg に代入された値が、values に代入されたリストに含まれていればその値を返し、そうでなければエラーメッセージを出力します。エラーメッセージでは values に代入されたリストの値を arg の適正な値の候補として提示します。

+
+
+

32.4 使用例 Examples

+
from py4stats import building_block as build
+
+def my_faivarit(fruits):
+  fruits = build.arg_match(
+      fruits, arg_name = 'fruits',
+      values = ['apple', 'orange', 'grape'], 
+      multiple = False
+      )
+  return fruits
+
+my_faivarit('apple')
+#> 'apple'
+
+my_faivarit('orang')
+#> ValueError: `fruits` must be one of 'apple', 'orange' or 'grape', not 'orang'.
+#>              Did you mean 'orange'?
+
+my_faivarit('ap')
+#> ValueError: `fruits` must be one of 'apple', 'orange' or 'grape', not 'ap'.
+#>              Did you mean 'apple' or 'grape'?
+
# arg に list を指定した場合
+# 初期設定では1つ目の要素だけ使用されます。
+my_faivarit(['apple', 'orange'])
+#> 'apple'
+
+# multiple = True として再度関数を定義
+def my_faivarit2(fruits):
+  fruits = build.arg_match(
+      fruits, arg_name = 'fruits',
+      values = ['apple', 'orange', 'grape'], 
+      multiple = True
+      )
+  return fruits
+
+my_faivarit2(['apple', 'orange'])
+#> ['apple', 'orange']
+
+my_faivarit2(['apple', 'orang'])
+#> ValueError: `fruits` must be one of 'apple', 'orange' or 'grape', not 'orang'.
+#>              Did you mean 'orange'?
+

 Py4Stats では eda_tools.tabyl()regression_tools.compare_ols() など、文字列で指定する引数をもつ関数で、引数のアサーションに build.arg_match() を使用しています。

+
import py4stats as py4st
+import pandas as pd
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込
+
+py4st.tabyl(penguins, 'island', 'species', normalize = 'ind')
+#> ValueError: `normalize` must be one of 'index', 'columns' or 'all', not 'ind'.
+#>              Did you mean 'index'?
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/assert_dtype.html b/docs/docs/man/assert_dtype.html new file mode 100644 index 0000000..d0e161e --- /dev/null +++ b/docs/docs/man/assert_dtype.html @@ -0,0 +1,1060 @@ + + + + + + + + + +33  データ型による引数のアサーション – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

33  データ型による引数のアサーション

+
+ + + +
+ + + + +
+ + + +
+ + +
+

33.1 概要

+

 R言語の checkmate パッケージの関数群をオマージュした、引数に代入された値が想定されたデータ型ではないときにエラーを出力する関数です。

+
assert_character(
+    arg: Any, 
+    arg_name: Optional[str] = None,
+    len_arg: Optional[int] = None,
+    len_min: int = 1,
+    len_max: Optional[int] = None,
+    any_missing: bool = False,
+    all_missing: bool = False,
+    nullable: bool = False,
+    scalar_only: bool = False
+    )
+
+assert_logical(
+    arg: Any, 
+    arg_name: Optional[str] = None,
+    len_arg: Optional[int] = None,
+    len_min: int = 1,
+    len_max: Optional[int] = None,
+    any_missing: bool = False,
+    all_missing: bool = False,
+    nullable: bool = False,
+    scalar_only: bool = False
+    )
+
+assert_numeric(
+    arg: Any,
+    arg_name: Optional[str] = None,
+    lower = -float('inf'), 
+    upper = float('inf'), 
+    inclusive: Literal["both", "neither", "left", "right"] = "both",
+    len_arg: Optional[int] = None,
+    len_min: int = 1,
+    len_max: Optional[int] = None,
+    any_missing: bool = False,
+    all_missing: bool = False,
+    nullable: bool = False,
+    scalar_only: bool = False
+    )
+
+assert_integer(
+    arg: Any,
+    arg_name: Optional[str] = None,
+    lower = -float('inf'), 
+    upper = float('inf'), 
+    inclusive: Literal["both", "neither", "left", "right"] = "both",
+    len_arg: Optional[int] = None,
+    len_min: int = 1,
+    len_max: Optional[int] = None,
+    any_missing: bool = False,
+    all_missing: bool = False,
+    nullable: bool = False,
+    scalar_only: bool = False
+    )
+
+assert_count(
+    arg: Any,
+    arg_name: Optional[str] = None,
+    lower = 0, 
+    upper = float('inf'), 
+    inclusive: Literal["both", "neither", "left", "right"] = "both",
+    len_arg: Optional[int] = None,
+    len_min: int = 1,
+    len_max: Optional[int] = None,
+    any_missing: bool = False,
+    all_missing: bool = False,
+    nullable: bool = False,
+    scalar_only: bool = False
+    )
+
+assert_float(
+    arg: Any,
+    arg_name: Optional[str] = None,
+    lower = -float('inf'), 
+    upper = float('inf'), 
+    inclusive: Literal["both", "neither", "left", "right"] = "both",
+    len_arg: Optional[int] = None,
+    len_min: int = 1,
+    len_max: Optional[int] = None,
+    any_missing: bool = False,
+    all_missing: bool = False,
+    nullable: bool = False,
+    scalar_only: bool = False
+    )
+

 それぞれの関数は第一引数 arg に代入された array-like オブジェクトの要素が、次の型ではない場合にエラーを出力します。

+
    +
  • assert_character()str
  • +
  • assert_numeric()int or float
  • +
  • assert_integer()int
  • +
  • assert_count()int
  • +
  • assert_float()float
  • +
+
+
+

33.2 引数 Argument

+
    +
  • arg(必須)array-like
     適正かどうかを判断したい引数。検証対象となる引数。スカラー値、または array-like オブジェクト(例:list、NumPy 配列、pandas Series)を指定できます。
  • +
  • arg_namestr
     エラーメッセージに表示する引数の名前。None の場合、可能であれば arg に渡された変数名が自動的に推定されます。なお、この機能は varname.argname()関数を使って実装されています。
  • +
  • lower, upperint or float
     arg に代入されたオブジェクトの要素が取るべき値の最大値と最小値。
  • +
  • inclusive:str
     値の範囲チェックにおいて、境界値を含めるかどうかを表す文字列。
    'both', 'neither', 'left', 'right' から選択できます。
    +
      +
    • 'both'lower <= x <= upper
    • +
    • 'neither'lower < x < upper
    • +
    • 'left'lower <= x < upper
    • +
    • 'right'lower < x <= upper
    • +
  • +
  • len_arg: int 引数の要素数を表す自然数:要素数をこの値と正確に一致させたい場合に指定します。len_arg を指定した場合、引数はちょうどこの個数の要素をもつ必要があります。
     引数の長さは、Nonenp.nan などの欠測値を含む要素数をもとに判定されます。例えば引数の要素が arg = [1, None, 3] のとき、len_arg = 3なら正常として判定され、len_arg = 2 ならエラーが出されます。
  • +
  • len_min, len_max:: int
    許容される最小の要素数と最大の要素数。len_max = None の場合、上限は設けられません。
  • +
  • any_missing:bool
    True の場合、欠測値(例:NoneNaNpd.NA など)が引数 arg一部に含まれていても許容されます。
  • +
  • all_missing: bool
    True の場合、すべての要素が欠測値であることを許容します。
  • +
  • nullable: bool
    True の場合、引数そのものが None であることを許容します。
  • +
  • scalar_only: bool
    True の場合、スカラー値のみを許容します。この場合、1要素であっても、list や配列などの array-like オブジェクトは受け付けません。
  • +
+
+
+

33.3 返り値 Value

+

引数 arg に代入されたオブジェクトの全ての要素が、アサーションの条件を満たしていれば何も返さず、そうでなければエラーメッセージを出力します。

+
+
+

33.4 使用例 Examples

+
from py4stats import building_block as build
+x = [1, 2, 3]
+y = ['A', 'B', 'C']
+
+build.assert_character(x, arg_name = 'x')
+#> TypeError: Argument `x` must be of type 'str'.
+
+build.assert_character(y, arg_name = 'y')
+
build.assert_numeric(x, arg_name = 'x')
+
+build.assert_numeric(y, arg_name = 'y')
+#> TypeError: Argument `y` must be of type 'int' or 'float' with value(s) -inf <= x <= inf.
+
+z = [0.1, 0.3, 0.6]
+build.assert_numeric(z, arg_name = 'z', lower = 0, upper = 1)
+
+z.extend([2, 3])
+build.assert_numeric(z, arg_name = 'z', lower = 0, upper = 1)
+#> ValueError: Argument `z` must have value 0 <= x <= 1
+#> element '3' and '4' of 'z' not sutisfy the condtion.
+
+z = 1
+build.assert_numeric(
+    z, arg_name = 'z', 
+    lower = 0, upper = 1, 
+    inclusive = 'left'
+    )
+#> ValueError: Argument `z` must have value 0 <= x < 1.
+
+
+

33.5 参照

+

 データ型の判定にはこちらの関数を使用しています。

+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/coefplot.html b/docs/docs/man/coefplot.html new file mode 100644 index 0000000..3fa8bee --- /dev/null +++ b/docs/docs/man/coefplot.html @@ -0,0 +1,1011 @@ + + + + + + + + + +24  回帰分析による推定値の視覚化:py4stats.coefplot(), py4stats.mfxplot() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

24  回帰分析による推定値の視覚化:py4stats.coefplot(), py4stats.mfxplot()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

24.1 概要

+

 グラフ上の縦軸が説明変数、横軸回帰係数の値です。点が回帰係数の推定値を、エラーバー(横棒)が信頼区間を表します。

+
coefplot(
+    mod, 
+    subset = None, 
+    conf_level = [0.95, 0.99], 
+    palette = ['#1b69af', '#629CE7'], 
+    show_Intercept = False,
+    show_vline = True,
+    ax = None,
+    **kwargs
+)
+
+mfxplot(
+    mod, 
+    subset = None, 
+    conf_level = [0.95, 0.99], 
+    at = 'overall',
+    method = 'dydx',
+    dummy = False,
+    palette = ['#1b69af', '#629CE7'], 
+    show_Intercept = False,
+    show_vline = True,
+    ax = None,
+    **kwargs
+)
+
+
+

24.2 引数 Argument

+
    +
  • modstatsmodels で作成した回帰分析の結果(必須)。

  • +
  • subset:グラフに回帰係数を表示する説明変数のリスト。指定しなければモデルに含まれる全ての説明変数を使用します。また subset に指定された順番に合わせてグラフ内での回帰係数の並び順が変更されます。

  • +
  • conf.level:信頼区間の計算に用いる信頼係数。1つ目の要素が太い方のエラーバーの幅に、2つ目の要素が細い方のエラーバーの幅に対応します。初期設定は [0.95, 0.99] です。

  • +
  • palette:グラフの描画に使用する色コード。1つ目の要素が太い方のエラーバーの色に、2つ目の要素が細い方のエラーバーの色に対応します。

  • +
  • show_Intercept:切片の係数を表示するかどうか。True だと切片の係数を表示し、False(初期設定)だと表示しません。

  • +
  • show_vline:回帰係数 = 0 の垂直線を表示するかどうか。True (初期設定)を指定すると垂直線を表示し、False を指定すると表示されません。

  • +
  • ax:matplotlib の ax オブジェクト。複数のグラフを並べる場合などに使用します。

  • +
  • at:限界効果の集計方法(mfxplot() のみ)。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 at として渡されます。method = 'coef' を指定した場合、この引数は無視されます。

    +
      +
    • 'overall':各観測値の限界効果の平均値を表示(初期設定)
    • +
    • 'mean':各説明変数の平均値における限界効果を表示
    • +
    • 'median':各説明変数の中央値における限界効果を表示
    • +
    • 'zero':各説明変数の値がゼロであるときの限界効果を表示
    • +
  • +
  • method:推定する限界効果の種類(mfxplot() のみ)。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 method として渡されます。ただし、method = 'coef' を指定した場合には限界効果を推定せずに回帰係数をそのまま表示します。

    +
      +
    • 'coef':回帰係数の推定値を表示
    • +
    • 'dydx':限界効果の値を変換なしでそのまま表。(初期設定)
    • +
    • 'eyex':弾力性 d(lny)/d(lnx) の推定値を表示
    • +
    • 'dyex':準弾力性 dy /d(lnx) の推定値を表示
    • +
    • 'eydx':準弾力性 d(lny)/dx の推定値を表示
    • +
  • +
  • dummy:ダミー変数の限界効果の推定方法(mfxplot() のみ)。もし False (初期設定)であれば、ダミー変数を連続な数値変数として扱います。もし、True であればダミー変数が0から1へと変化したときの予測値の変化を推定します。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 dummy として渡されます。

  • +
+
+
+

24.3 使用例

+
import py4stats as py4st
+import statsmodels.formula.api as smf
+import pandas as pd
+import numpy as np
+import matplotlib.pyplot as plt
+
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込み
+
+
+# 回帰分析の実行
+fit2 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species', data = penguins).fit()
+fit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()
+
+py4st.coefplot(fit3)
+
+
+

+
coefplot1
+
+
+
plt.rcParams["figure.autolayout"] = True
+
+fig, ax = plt.subplots(1, 2, figsize = (2.2 * 5, 5), dpi = 100)
+
+py4st.coefplot(fit2, ax = ax[0])
+ax[0].set_xlim(-900, 1800)
+
+py4st.coefplot(fit3, ax = ax[1], palette = ['#FF6F91', '#F2E5EB'])
+ax[1].set_xlim(-900, 1800);
+
+
+

+
coefplot2
+
+
+
penguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)
+
+# ロジスティック回帰の実行
+fit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()
+fit_logit2 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm + species', data = penguins).fit()
+
plt.rcParams["figure.autolayout"] = True
+
+fig, ax = plt.subplots(1, 2, figsize = (2.2 * 5, 5), dpi = 100)
+
+py4st.mfxplot(fit_logit1, ax = ax[0])
+ax[0].set_xlim(-0.2, 0.85)
+
+py4st.mfxplot(fit_logit2, ax = ax[1], palette = ['#FF6F91', '#F2E5EB'])
+ax[1].set_xlim(-0.2, 0.85);
+

coefplot3 *** Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/compare_df_cols.html b/docs/docs/man/compare_df_cols.html new file mode 100644 index 0000000..a72965b --- /dev/null +++ b/docs/docs/man/compare_df_cols.html @@ -0,0 +1,977 @@ + + + + + + + + + +14  py4stats.compare_df_cols(), py4stats.compare_df_stats() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

14  py4stats.compare_df_cols(), py4stats.compare_df_stats()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

14.1 概要

+

 R言語の janitor::compare_df_cols() をオマージュした関数で、compare_df_cols() は複数の pandas.DataFrame に含まれる同じ名前を持つ列同士のデータ型 dtype を比較し、compare_df_stats() は同じ名前を持つ列同士の記述統計量を比較します。

+
compare_df_cols(
+    df_list: Union[List[IntoFrameT], Mapping[str, IntoFrameT]],
+    df_name: Optional[List[str]] = None,
+    return_match: Literal["all", "match", "mismatch"] = 'all',
+    dropna:bool = False,
+    to_native: bool = True
+)
+
+compare_df_stats(
+    df_list: List[IntoFrameT],
+    df_name: Optional[List[str]] = None,
+    return_match: Literal["all", "match", "mismatch"] = "all",
+    stats: Callable[..., Any] = np.mean,
+    rtol: float = 1e-05,
+    atol: float = 1e-08,
+    to_native: bool = True,
+    **kwargs: Any,
+)
+
+
+

14.2 引数 Argument

+
    +
  • df_list(必須) A list or dict of IntoFrameT
     列を比較するデータフレームのリストもしくは辞書オブジェクト。辞書が df_name が未指定の場合、辞書の keys を df_name として使用します。
  • +
  • df_name list of str
     表頭に表示するデータフレームの名前。['df1', 'df2'] のように文字列のリストを指定してください。初期設定では、自動的に df1, df2, df3 … と連番が割り当てられます。
  • +
  • return_match str
     出力に反映する変数の範囲を表す文字列。次の値から選択できます。 +
      +
    • 'all'(初期設定): 全ての列を表示。
    • +
    • 'match':全てのデータフレームで dtype が一致している列のみを表示。
    • +
    • 'mismatch':少なくとも1つのデータフレームで dtype が一致していない列のみを表示。
    • +
  • +
  • dropna bool (compare_df_cols() のみ)
     データ型 dtype の一致判定に当たり、NaN を無視するかどうか。初期設定 False の場合、すべてのデータフレームが同名かつ同じデータ型の列を持たない限り、ミスマッチが発生したと判定されます。
  • +
  • stats str or function
     比較に用いる記述統計量を定義する関数。np.mean など values 列を1次元配列として受け取って単一の数値を返す任意の関数が使用できるほか、nw.mean など narwhals.functions モジュールで実装された関数を使用できます。初期設定は np.mean です。
  • +
+
+
+

14.3 使用例 Examples

+
import pandas as pd
+import py4stats as py4st
+
+df1 = pd.DataFrame({'x':[1, 2, 3], 'y':[5,   4, 2], 'z':[True, False, True]})
+df2 = pd.DataFrame({'x':[1, 2, 3], 'y':[5.0, 4, 2], 'z':['True', 'False', 'True']})
+
+print(py4st.compare_df_cols([df1, df2]))
+#>   term    df1      df2  match_dtype
+#> 0    x  int64    int64         True
+#> 1    y  int64  float64        False
+#> 2    z   bool   object        False
+

return_match = 'mismatch' を指定すると、データフレームの中で、dtype が一致していないものがある列を返します。

+
print(py4st.compare_df_cols(
+    [df1, df2], return_match = 'mismatch'
+    ))
+#>   term    df1      df2  match_dtype
+#> 1    y  int64  float64        False
+#> 2    z   bool   object        False
+

 py4st.compare_df_stats() は数値変数の記述統計量を比較するため、異なる経路で行われたデータ処理の結果が一致しているかを検証する場合に便利です。

+
from palmerpenguins import load_penguins
+penguins = load_penguins()
+penguins2 = penguins.copy()
+vars = ['flipper_length_mm', 'body_mass_g']
+penguins2.loc[:, vars] = py4st.scale(penguins2.loc[:, vars])
+
+print(
+    py4st.compare_df_stats([penguins, penguins2]).round(2)
+)
+#>                 term      df1      df2  match_stats
+#> 0      bill_depth_mm    17.15    17.15         True
+#> 1     bill_length_mm    43.92    43.92         True
+#> 2        body_mass_g  4201.75     0.00        False
+#> 3  flipper_length_mm   200.92    -0.00        False
+#> 4               year  2008.03  2008.03         True
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/compare_group_stats.html b/docs/docs/man/compare_group_stats.html new file mode 100644 index 0000000..06690ba --- /dev/null +++ b/docs/docs/man/compare_group_stats.html @@ -0,0 +1,1063 @@ + + + + + + + + + +15  統計量に基づくグループ間比較 – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

15  統計量に基づくグループ間比較

+
+ + + +
+ + + + +
+ + + +
+ + +
+

15.1 概要

+

これら関数は、入力された2つのデータフレームについて、各数値変数の統計量に基づいた比較を提供します。

+
compare_group_means(
+    group1: IntoFrameT,
+    group2: IntoFrameT,
+    group_names: Sequence[str] = ('group1', 'group2'),
+    columns: Literal['common', 'all'] = 'all',
+    to_native: bool = True
+    )
+
+compare_group_median(
+    group1: IntoFrameT,
+    group2: IntoFrameT,
+    group_names: Sequence[str] = ('group1', 'group2'),
+    columns: Literal['common', 'all'] = 'all',
+    to_native: bool = True
+    )
+
+plot_mean_diff(
+    group1: IntoFrameT,
+    group2: IntoFrameT,
+    stats_diff: Literal["norm_diff", "abs_diff", "rel_diff"] = "norm_diff",
+    ax: Optional[Axes] = None,
+    )
+
+plot_median_diff(
+    group1: IntoFrameT,
+    group2: IntoFrameT,
+    stats_diff: Literal["abs_diff", "rel_diff"] = "rel_diff",
+    ax: Optional[Axes] = None,
+    )
+
+
+

15.2 引数 Argument

+
    +
  • group1(必須)a pandas.DataFrame
     数値変数を含む pandas.DataFrame で group2 との比較対象となるもの
  • +
  • group2(必須)a pandas.DataFrame
     数値変数を含む pandas.DataFrame で group1 との比較対象となるもの
  • +
  • group_names list of str
     表頭に表示するグループの名前。['group1', 'group2'] のように、2つの要素をもつ文字列のリストとして指定してください。
  • +
  • columns str
    2つのグループの結果を結合する際に含める変数を指定します。 +
      +
    • "common": 両方のグループに存在する変数のみが含まれます。
    • +
    • "all": いずれかのグループに存在する全ての変数が含まれます。この場合、一方のグループにのみ存在する変数についての差分統計量は、欠損値(例:NaN または None)となります。
    • +
  • +
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • +
  • stats_diff: strplot_mean_diff() および plot_median_diff() のみ)
     グラフの描画に使用する差分統計量。'norm_diff'plot_mean_diff() のみ)、'abs_diff', 'rel_diff' のいずれかから選ぶことができます。
  • +
+
+
+

15.3 返り値 Value

+

 compare_group_means()関数および, compare_group_median() 関数では、次の値をもつ pandas.DataFrame が出力されます。

+
    +
  • group1, group2(初期設定の場合)
     各グループにおける記述統計統計量の値
  • +
  • norm_diffcompare_group_means() のみ)
     標準化された平均値の差で、2つのグループの平均値を \(\bar{X}_1\), \(\bar{X}_2\)、分散を \(s^2_1, s^2_2\) とし、サンプルサイズを \(n_1, n_2\) とするとき、次式のように定義されます。
  • +
+

\[ +\delta = \frac{\bar{X}_1 - \bar{X}_2}{s},~~~~~ s^2 = \frac{(n_1-1)s_1^2 + (n_2-1)s_2^2}{n_1 + n_2 - 2} +\]

+
    +
  • abs_diff
    2つのグループの記述統計量の絶対差
  • +
  • rel_diff
    2つのグループの記述統計量の相対差。2つのグループの記述統計量を \(\bar{X}_1\), \(\bar{X}_2\) とするとき、次式のように定義されます。
  • +
+

\[ +\delta = \cfrac{\bar{X}_1 - \bar{X}_2}{\cfrac{\bar{X}_1 + \bar{X}_2}{2}} += 2 \cdot \frac{\bar{X}_1 - \bar{X}_2}{\bar{X}_1 + \bar{X}_2} +\]

+

plot_mean_diff() 関数および, plot_median_diff() 関数では、グループ別の記述統計両の差をグラフとして可視化します。詳細は使用例を参照して下さい。

+
+
+

15.4 使用例 Examples

+
import pandas as pd
+import py4stats as py4st
+from palmerpenguins import load_penguins
+
+penguins = load_penguins().drop('year', axis = 1) # サンプルデータの読み込み
+
res1 = py4st.compare_group_means(
+    penguins.query('species == "Gentoo"'),
+    penguins.query('species == "Adelie"')
+)
+print(res1.round(3))
+#>             variable    group1    group2  norm_diff  abs_diff  rel_diff
+#> 0      bill_depth_mm    14.982    18.346     -3.012     3.364    -0.202
+#> 1     bill_length_mm    47.505    38.791      3.048     8.713     0.202
+#> 2        body_mass_g  5076.016  3700.662      2.868  1375.354     0.313
+#> 3  flipper_length_mm   217.187   189.954      4.180    27.233     0.134
+
res2 = py4st.compare_group_median(
+    penguins.query('species == "Gentoo"'),
+    penguins.query('species == "Adelie"'),
+    group_names = ['Gentoo', 'Adelie']
+)
+print(res2.round(3))
+#>             variable    Gentoo    Adelie  abs_diff  rel_diff
+#> 0      bill_depth_mm    14.982    18.346     3.364    -0.202
+#> 1     bill_length_mm    47.505    38.791     8.713     0.202
+#> 2        body_mass_g  5076.016  3700.662  1375.354     0.313
+#> 3  flipper_length_mm   217.187   189.954    27.233     0.134
+
py4st.plot_mean_diff(
+    penguins.query('species == "Gentoo"'),
+    penguins.query('species == "Adelie"'),
+    stats_diff = 'norm_diff'
+)
+
+
+

+
plot_mean_diff1
+
+
+
py4st.plot_mean_diff(
+    penguins.query('species == "Gentoo"'),
+    penguins.query('species == "Adelie"'),
+    stats_diff = 'abs_diff'
+)
+
+
+

+
plot_mean_diff2
+
+
+
py4st.plot_median_diff(
+    penguins.query('species == "Gentoo"'),
+    penguins.query('species == "Adelie"'),
+    stats_diff = 'rel_diff'
+)
+
+
+

+
plot_median_diff1
+
+
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/compare_mfx.html b/docs/docs/man/compare_mfx.html new file mode 100644 index 0000000..90fa9a3 --- /dev/null +++ b/docs/docs/man/compare_mfx.html @@ -0,0 +1,1093 @@ + + + + + + + + + +23  限界効果の比較:py4stats.compare_mfx() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

23  限界効果の比較:py4stats.compare_mfx()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

23.1 概要

+

 sm.glm()の推定結果を計量経済学の実証論文でよく用いられる、回帰分析の結果を縦方向に並べて比較する表を作成します。表のフォーマットについてはR言語の texreg::screenreg()modelsummary::modelsummary()を参考にしています。

+
compare_mfx(
+    list_models, 
+    model_name = None,
+    subset = None,
+    stats = 'std_err',
+    add_stars = True,
+    stats_glance = ['prsquared', 'nobs', 'df'],
+    at = 'overall',
+    method = 'dydx',
+    dummy = False,
+    digits = 4, 
+    table_style = 'two_line',
+    line_break = '\n',
+    **kwargs
+)
+
+
+

23.2 引数 Argument

+
    +
  • list_models
    推定結果を表示する分析結果のリスト(必須)。sm.glm()で作成された一般化線形モデルの結果を list_models = [fit1, fit2] のようにリストとして指定してください。

  • +
  • model_namelist of str
    表頭に表示するモデルの名前。['モデル1', 'モデル2'] のように文字列のリストを指定してください。初期設定では、自動的に model 1, model 2, model 3 … と連番が割り当てられます。

  • +
  • subsetlist of str
    表示する回帰係数のリスト。指定しない場合(初期設定)、モデルに含まれる全ての回帰係数が表示されます。内部ではpandas.DataFrame.locメソッドを用いて処理を行っているため、['変数1', '変数2', ...] のような文字列のリスト、[True, False, True, ...] のようなブール値のリストに対応しています。文字列のリストが指定された場合、リストの並び順に合わせて回帰係数が表示されます。

  • +
  • statsstr
    表中の丸括弧 ( ) 内に表示する統計値の設定。次の値が指定できます。

    +
      +
    • 'std_err' 標準誤差(初期設定)
    • +
    • 'p_value' p-値
    • +
    • 'statistics' t統計量
    • +
  • +
  • add_starsbool
    回帰係数の統計的有意性を表すアスタリスク * を表示するかどうかを表すブール値。add_stars = True(初期-設定)なら表示、add_stars = Falseなら非表示となります。table_style'two_line' を指定した場合はアスタリスクは回帰係数の直後に表示され、'one_line' を指定した場合は stats で指定した統計値の後に表示されます。アスタリスクはp-値の値に応じて次のように表示されます。

  • +
  • starsdictp_stars() のみ)
     有意性を示す記号を key に、表示を切り替える閾値を値(value)にもつ辞書オブジェクト。初期設定の stars = None の場合、下記の方式で表示されます。

    +
  • +
  • stats_glance:list of str

  • +
  • 表の下部に追加する当てはまりの尺度の種類を表す文字列のリスト。リストの値には次の値を指定できます。なお、None もしくは空のリスト [ ] が指定された場合には非表示となります。

    +
      +
    • 'rsquared':決定係数
    • +
    • 'rsquared_adj':自由度調整済み決定係数
    • +
    • 'nobs':サインプルサイズ
    • +
    • 'df':モデルの自由度(説明変数の数)
    • +
    • 'sigma':回帰式の標準誤差
    • +
    • 'F_values':全ての回帰係数がゼロであることを帰無仮説とするF検定の統計量
    • +
    • 'p_values':F検定のP-値
    • +
    • 'AIC':赤池情報量基準
    • +
    • 'BIC':ベイズ情報量基準
    • +
  • +
  • digits: int
    回帰係数と統計値について表示する小数点以下の桁数。初期設定は4です。

  • +
  • table_style: str
    表の書式を表す文字列。次の値から選択できます(部分一致可)。

    +
      +
    • 'two_line'回帰係数と統計値を2行に分ける(初期設定)
    • +
    • 'one_line'回帰係数と統計値を1行で表示する
    • +
  • +
  • line_break: str
    table_style = 'two_line' とした場合に使用される改行記号。table_style = 'one_line' とした場合、この引数は無視されます。

  • +
  • at: str
    限界効果の集計方法。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 at として渡されます。method = 'coef' を指定した場合、この引数は無視されます。

    +
      +
    • 'overall':各観測値の限界効果の平均値を表示(初期設定)
    • +
    • 'mean':各説明変数の平均値における限界効果を表示
    • +
    • 'median':各説明変数の中央値における限界効果を表示
    • +
    • 'zero':各説明変数の値がゼロであるときの限界効果を表示
    • +
  • +
  • method: str
    推定する限界効果の種類。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 method として渡されます。ただし、method = 'coef' を指定した場合には限界効果を推定せずに回帰係数をそのまま表示します。

    +
      +
    • 'coef':回帰係数の推定値を表示
    • +
    • 'dydx':限界効果の値を変換なしでそのまま表。(初期設定)
    • +
    • 'eyex':弾力性 d(lny)/d(lnx) の推定値を表示
    • +
    • 'dyex':準弾力性 dy /d(lnx) の推定値を表示
    • +
    • 'eydx':準弾力性 d(lny)/dx の推定値を表示
    • +
  • +
  • dummy: bool
    ダミー変数の限界効果の推定方法を制御するブール値。もし False (初期設定)であれば、ダミー変数を連続な数値変数として扱います。もし、True であればダミー変数が0から1へと変化したときの予測値の変化を推定します。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 dummy として渡されます。

  • +
+
+
+

23.3 使用例

+
import py4stats as py4st
+import statsmodels.formula.api as smf
+
+import pandas as pd
+import numpy as np
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込み
+

 py4st.compare_mfx()py4st.compare_ols() の一般化線型モデルバージョンで、初期設定では statsmodels ライブラリの.get_margeff() メソッドから得られた限界効果の推定値を表示します。

+
penguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)
+
+# ロジスティック回帰の実行
+fit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()
+fit_logit2 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm + species', data = penguins).fit()
+
+py4st.compare_mfx([fit_logit1, fit_logit2])
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
termmodel 1model 2
body_mass_g-0.0004 ***-0.0003 ***
(0.0000)(0.0000)
bill_length_mm-0.0053-0.0357 ***
(0.0036)(0.0070)
bill_depth_mm-0.1490 ***-0.1098 ***
(0.0051)(0.0175)
species[T.Chinstrap]0.4172 ***
(0.0848)
species[T.Gentoo]0.3527 ***
(0.1308)
prsquared0.56470.6187
nobs342342
df35
+
from great_tables import GT, md, html
+compare_tab = py4st.compare_mfx(
+    [fit_logit1, fit_logit2],
+    model_name = ['ベースモデル', 'species 追加'], # モデル名を変更
+    line_break = '<br>'                         # 改行文字の変更
+)
+
+GT(compare_tab.reset_index())\
+  .tab_header(title = 'ロジットモデルの限界効果')\
+  .tab_source_note(
+      source_note= "Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’"
+      )\
+  .tab_source_note(source_note = '丸括弧 ( ) の値は標準誤差')
+

compare_tab_gt2

+
+
+

23.4 補足

+

  table_style = 'two_line' としたとき、初期設定ではの回帰係数とp-値の間に改行記号 '\n'が挿入されます。そのため、print() 関数や display() 関数を使った出力では、改行記号 '\n' がそのまま表示されます。この場合でも、pd.DataFrame.to_excel()pd.DataFrame.to_markdown() を使って Excel ファイルや markdown の表に変換していただくと、改行として反映されます。

+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/compare_ols.html b/docs/docs/man/compare_ols.html new file mode 100644 index 0000000..08ae41b --- /dev/null +++ b/docs/docs/man/compare_ols.html @@ -0,0 +1,1413 @@ + + + + + + + + + +22  回帰分析の比較:py4stats.compare_ols() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

22  回帰分析の比較:py4stats.compare_ols()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

22.1 概要

+

 sm.ols()smf.glm() で作成された回帰分析の結果から、推定結果を縦方向に並べて比較する表を作成します。表のフォーマットについてはR言語の texreg::screenreg()modelsummary::modelsummary()を参考にしています。

+
compare_ols(
+    list_models: Sequence[RegressionResultsWrapper],
+    model_name: Optional[Sequence[str]] = None,
+    subset: Optional[Sequence[str]] = None,
+    stats: Literal["std_err", "statistics", "p_value", "conf_int"] = "std_err",
+    add_stars: bool = True,
+    stars: Optional[Mapping[str, float]] = None,
+    stats_glance: Optional[Sequence[str]] = ("rsquared_adj", "nobs", "df"),
+    digits: int = 4,
+    table_style: Literal["two_line", "one_line"] = "two_line",
+    line_break: str = "\n",
+    **kwargs: Any
+)
+
+
+

22.2 引数 Argument

+
    +
  • list_modelsSequence[RegressionResultsWrapper]
    推定結果を表示する分析結果のリスト(必須)。sm.ols()smf.ols() で作成された回帰分析の結果を list_models = [fit1, fit2] のようにリストとして指定してください。

  • +
  • model_namelist of str
    表頭に表示するモデルの名前。['モデル1', 'モデル2'] のように文字列のリストを指定してください。初期設定では、自動的に model 1, model 2, model 3 … と連番が割り当てられます。

  • +
  • subsetlist of str
    表示する回帰係数のリスト。指定しない場合(初期設定)、モデルに含まれる全ての回帰係数が表示されます。内部ではpandas.DataFrame.locメソッドを用いて処理を行っているため、['変数1', '変数2', ...] のような文字列のリスト、[True, False, True, ...] のようなブール値のリストに対応しています。文字列のリストが指定された場合、リストの並び順に合わせて回帰係数が表示されます。

  • +
  • statsstr
    表中の丸括弧 ( ) 内に表示する統計値の設定。次の値が指定できます。

    +
      +
    • 'std_err' 標準誤差(初期設定)
    • +
    • 'p_value' p-値
    • +
    • 'statistics' t統計量
    • +
  • +
  • add_starsbool
    回帰係数の統計的有意性を表すアスタリスク * を表示するかどうかを表すブール値。add_stars = True(初期-設定)なら表示、add_stars = Falseなら非表示となります。table_style'two_line' を指定した場合はアスタリスクは回帰係数の直後に表示され、'one_line' を指定した場合は stats で指定した統計値の後に表示されます。アスタリスクはp-値の値に応じて次のように表示されます。

  • +
  • starsdictp_stars() のみ)
     有意性を示す記号を key に、表示を切り替える閾値を値(value)にもつ辞書オブジェクト。初期設定の stars = None の場合、下記の方式で表示されます。

    +
  • +
  • stats_glance:list of str

  • +
  • 表の下部に追加する当てはまりの尺度の種類を表す文字列のリスト。リストの値には次の値を指定できます。なお、None もしくは空のリスト [ ] が指定された場合には非表示となります。

    +
      +
    • 'rsquared':決定係数
    • +
    • 'rsquared_adj':自由度調整済み決定係数
    • +
    • 'nobs':サインプルサイズ
    • +
    • 'df':モデルの自由度(説明変数の数)
    • +
    • 'sigma':回帰式の標準誤差
    • +
    • 'F_values':全ての回帰係数がゼロであることを帰無仮説とするF検定の統計量
    • +
    • 'p_values':F検定のP-値
    • +
    • 'AIC':赤池情報量基準
    • +
    • 'BIC':ベイズ情報量基準
    • +
  • +
  • digits: int
    回帰係数と統計値について表示する小数点以下の桁数。初期設定は4です。

  • +
  • table_style: str
    表の書式を表す文字列。次の値から選択できます(部分一致可)。

    +
      +
    • 'two_line'回帰係数と統計値を2行に分ける(初期設定)
    • +
    • 'one_line'回帰係数と統計値を1行で表示する
    • +
  • +
  • line_break: str
    table_style = 'two_line' とした場合に使用される改行記号。table_style = 'one_line' とした場合、この引数は無視されます。

  • +
+
+
+

22.3 使用例 Examples

+
import py4stats as py4st
+import statsmodels.formula.api as smf
+
+import pandas as pd
+import numpy as np
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込み
+
+# 回帰分析の実行
+fit1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()
+fit2 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species', data = penguins).fit()
+fit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()
+
+compare_tab1 = py4st.compare_ols(list_models = [fit1, fit2, fit3]) # 表の作成
+compare_tab1
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
termmodel 1model 2model 3
Intercept153.7397-1,742.7202 ***843.9812 **
(268.9012)(313.7697)(403.5956)
species[T.Chinstrap]-885.8121 ***-539.6864 ***-245.1516 ***
(88.2502)(86.9425)(84.5952)
species[T.Gentoo]578.6292 ***1,492.8283 ***1,443.3525 ***
(75.3623)(118.4442)(107.7844)
bill_length_mm91.4358 ***55.6461 ***26.5366 ***
(6.8871)(7.2326)(7.2436)
bill_depth_mm179.0434 ***87.9328 ***
(19.0997)(20.2192)
sex[T.male]437.2007 ***
(49.1098)
rsquared_adj0.78100.82580.8613
nobs342342333
df345
+

py4st.compare_ols() の実行結果は PandasDataFrame として出力されるため、.xlsx. ファイルなどに変換することができます。また、用途に応じて表の体裁を調整できるようにしています。

+
compare_tab2 = py4st.compare_ols(
+    list_models = [fit1, fit2, fit3],
+    model_name = ['基本モデル', '嘴の高さ追加', '性別追加'], # モデル名を変更
+    stats = 'p_value',        # () 内の値をP-値に変更する
+    add_stars = False,        # 有意性のアスタリスクなし
+    table_style = 'one_line', # 表スタイルを1行表示に設定 'one' でも可能
+    digits = 3                # 小数点以下の桁数を3に設定
+    )
+compare_tab2
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
term基本モデル嘴の高さ追加性別追加
Intercept153.740(0.568)-1,742.720(0.000)843.981(0.037)
species[T.Chinstrap]-885.812(0.000)-539.686(0.000)-245.152(0.004)
species[T.Gentoo]578.629(0.000)1,492.828(0.000)1,443.353(0.000)
bill_length_mm91.436(0.000)55.646(0.000)26.537(0.000)
bill_depth_mm179.043(0.000)87.933(0.000)
sex[T.male]437.201(0.000)
rsquared_adj0.7810.8260.861
nobs342342333
df345
+

table_style = 'two_line' のときに使用される改行記号は line_break で指定できます。great_tables モジュールの GT() 関数と併用する場合など、html 形式で出力する場合には line_break = '<br>' を指定します。

+
from great_tables import GT, md, html
+
+compare_tab3 = py4st.compare_ols(
+    list_models = [fit1, fit2, fit3],
+    model_name = ['基本モデル', '嘴の高さ追加', '性別追加'], # モデル名を変更
+    line_break = '<br>'                              # 改行文字の変更
+    )
+
+GT(compare_tab3.reset_index())\
+  .tab_header(title = 'Palmer penguin データを使った回帰分析の結果')\
+  .tab_source_note(
+      source_note= "Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’"
+      )\
+  .tab_source_note(source_note = '( ) の値は標準誤差')
+

compare_tab_gt

+
+

22.3.0.1 有意性の表示規則の変更

+

py4statsv0.2.0 以降は、stars 引数で有意性の表示規則を変更できるようになりました。

+
stars_dict = {'★★★':0.001, '★★':0.01, '★': 0.05, '.':0.1}
+
+reg.compare_ols(
+    list_models = [fit3],
+    model_name = ['model 3'],
+    stars = stars_dict
+    )
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
termmodel 3
Intercept843.9812 ★
(403.5956)
species[T.Chinstrap]-245.1516 ★★
(84.5952)
species[T.Gentoo]1,443.3525 ★★★
(107.7844)
sex[T.male]437.2007 ★★★
(49.1098)
bill_length_mm26.5366 ★★★
(7.2436)
bill_depth_mm87.9328 ★★★
(20.2192)
rsquared_adj0.8613
nobs333
df5
+
+
+

22.3.0.2 回帰係数の sbusetting

+

引数 subset を使って表示したい回帰係数を指定することで、一部の回帰係数を省略して表記することもできます。

+
# 説明変数に island を追加したモデルを推定
+fit4 = smf.ols(
+    'body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex + island',
+    data = penguins).fit()
+
+var_list = [
+    'species[T.Chinstrap]', 'species[T.Gentoo]',
+    'bill_length_mm', 'bill_depth_mm', 'sex[T.male]'
+    ]
+
+# 全ての回帰係数を表示すると表が長すぎるので、一部を省略します
+compare_tab4 = py4st.compare_ols(
+    list_models = [fit2, fit3, fit4],
+    subset = var_list
+    )
+
+compare_tab4.loc['島ダミー', :] = ['No', 'No', 'Yes']
+
+compare_tab4
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
termmodel 1model 2model 3
species[T.Chinstrap]-539.6864 ***-245.1516 ***-255.2732 ***
(86.9425)(84.5952)(92.4796)
species[T.Gentoo]1,492.8283 ***1,443.3525 ***1,446.1574 ***
(118.4442)(107.7844)(114.1676)
bill_length_mm55.6461 ***26.5366 ***26.6643 ***
(7.2326)(7.2436)(7.2792)
bill_depth_mm179.0434 ***87.9328 ***88.3284 ***
(19.0997)(20.2192)(20.3267)
sex[T.male]437.2007 ***436.0334 ***
(49.1098)(49.4227)
rsquared_adj0.82580.86130.8605
nobs342333333
df457
島ダミーNoNoYes
+

pandas の pandas.DataFrame.query メソッドを使って、次のように説明変数を除外することもできます。

+
compare_tab4 = py4st.compare_ols(
+    list_models = [fit2, fit3, fit4]
+    )
+
+compare_tab4 = compare_tab4\
+  .query('~term.str.contains("Intercept|island")').copy()
+
+compare_tab4.loc['島ダミー', :] = ['No', 'No', 'Yes']
+
+compare_tab4 # 上記のコードと同じ結果
+
+
+
+

22.4 補足

+

  table_style = 'two_line' としたとき、初期設定ではの回帰係数とp-値の間に改行記号 '\n'が挿入されます。そのため、print() 関数や display() 関数を使った出力では、改行記号 '\n' がそのまま表示されます。この場合でも、pd.DataFrame.to_excel()pd.DataFrame.to_markdown() を使って Excel ファイルや markdown の表に変換していただくと、改行として反映されます。

+
+
+

22.5 参照 see also

+

 一般化線形モデルの限界効果を比較する場合は py4stats.compare_mfx()をご利用ください。

+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/diagnose.html b/docs/docs/man/diagnose.html new file mode 100644 index 0000000..ed544cd --- /dev/null +++ b/docs/docs/man/diagnose.html @@ -0,0 +1,943 @@ + + + + + + + + + +4  py4stats.diagnose(): データフレームの概要 – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

4  py4stats.diagnose(): データフレームの概要

+
+ + + +
+ + + + +
+ + + +
+ + +
+

4.1 概要

+

 R言語の dlookr::diagnose() を再現した関数で、データの全般的な状態についての要約を提供します。

+
diagnose(data: IntoFrameT, to_native: bool = True)
+
+
+

4.2 引数 Argument

+
    +
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • +
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • +
+
+
+

4.3 返り値

+
    +
  • dtype:該当する列のpandasにおけるデータの型。「〇〇の個数」や「〇〇の金額」といったデータの dtypeobjectString になっていたら、文字列として読み込まれているので要注意です。
  • +
  • missing_count:1列のなかで NaN などの欠測値になっている数
  • +
  • missing_percent:1列のなかで欠測値が占めている割合でmissing_percent = (missing_count / 行数) * 100 として計算されます。もし missing_percent = 100 なら、その列は完全に空白です。
  • +
  • unique_count:その列で重複を除外したユニークな値の数。例えばある列の中身が「a, a, b」であればユニークな値は ab の2つなので unique_count = 2 です。もし unique_count = 1 であれば、その行にはたった1種類の値しか含まれていないことが分かりますし、例えば都道府県を表す列の unique_count が47より多ければ、都道府県以外のものが混ざっていると考えられます。
  • +
  • unique_rate: サンプルに占めるユニークな値の割合。 unique_rate = unique_count / 行数 で計算されます。unique_rate = 1 であれば、全ての行に異なる値が入っています。一般的に、実数値の列は unique_rate が高くなりますが、年齢の「20代」や価格の「200円代」のように階級に分けられている場合には unique_rate が低くなります。
  • +
+
+
+

4.4 使用例 Examples

+
import py4stats as py4st
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込み
+
+print(py4st.diagnose(penguins).round(4))
+#>              columns    dtype  missing_count  missing_percent  unique_count  unique_rate
+#> 0            species   object              0           0.0000             3       0.8721
+#> 1             island   object              0           0.0000             3       0.8721
+#> 2     bill_length_mm  float64              2           0.5814           165      47.9651
+#> 3      bill_depth_mm  float64              2           0.5814            81      23.5465
+#> 4  flipper_length_mm  float64              2           0.5814            56      16.2791
+#> 5        body_mass_g  float64              2           0.5814            95      27.6163
+#> 6                sex   object             11           3.1977             3       0.8721
+#> 7               year    int64              0           0.0000             3       0.8721
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/diagnose_category.html b/docs/docs/man/diagnose_category.html new file mode 100644 index 0000000..dcb2b92 --- /dev/null +++ b/docs/docs/man/diagnose_category.html @@ -0,0 +1,988 @@ + + + + + + + + + +9  カテゴリー変数の要約 py4stats.diagnose_category() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

9  カテゴリー変数の要約 py4stats.diagnose_category()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

9.1 概要

+

データフレームのカテゴリー変数を要約します。本関数は、カテゴリー情報を表す列(カテゴリ型・文字列型・ブール型)およびダミー変数(値が {0, 1} に制限された整数列)を対象として、欠損率、ユニーク値の数、最頻値、最頻値の頻度と割合、evenness などの指標を提供します。

+
diagnose_category(
+        data: IntoFrameT, 
+        dropna: bool = True, 
+        to_native: bool = True
+        )
+
+
+

9.2 引数 Argument

+
    +
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • +
  • dropnabool
     欠測値(NaN, None など)を統計値の計算から除外するかどうかを表すブール値。初期設定は True です。
  • +
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • +
+
+
+

9.3 返り値 Value

+

freq_table()関数は、次の値をもつ DataFrame を出力します。

+
    +
  • variables: 変数(列)名
  • +
  • count: 非欠損値の個数
  • +
  • miss_pct: 欠損率(null_count / N * 100) (* ここで Ndata の行数)
  • +
  • unique: ユニーク値の個数
  • +
  • unique_pct: ユニーク値の割合(unique / N * 100)
  • +
  • mode: 最頻値
  • +
  • mode_freq: 最頻値の度数
  • +
  • mode_pct: 最頻値の割合(mode_freq / N * 100)
  • +
  • evenness: カテゴリー分布の均等度([0, 1] の範囲)
  • +
+
+
+

9.4 使用例 Examples

+
import pandas as pd
+import py4stats as py4st
+from palmerpenguins import load_penguins
+
+penguins = load_penguins().drop('year', axis = 1) # サンプルデータの読み込み
+
penguins2 = penguins.copy()
+s = penguins2['body_mass_g']
+penguins2['heavy'] = np.where(s >= s.quantile(0.75), True, False)
+
+print(py4st.diagnose_category(penguins2).round(4))
+#>   variables  count  miss_pct  unique  unique_pct    mode  mode_freq  mode_pct  evenness
+#> 0   species    344    0.0000       3      0.8721  Adelie        152   44.1860    0.9550
+#> 1    island    344    0.0000       3      0.8721  Biscoe        168   48.8372    0.9133
+#> 2       sex    333    3.1977       2      0.5814    male        168   50.4505    0.9999
+#> 3     heavy    344    0.0000       2      0.5814   False        254   73.8372    0.8292
+
+
+

9.5 Note

+

evenness は、各列ごとに情報エントロピーを \([0, 1]\) の範囲に正規化した指標です。本実装では、対数の底をカテゴリの個数(unique)に設定することで正規化を行っており、これは底を2とした情報エントロピーを log2(unique) で割ることと同値です。この指標は正規化エントロピー(normalized entropy)としても知られています。

+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/filtering_out.html b/docs/docs/man/filtering_out.html new file mode 100644 index 0000000..09bb909 --- /dev/null +++ b/docs/docs/man/filtering_out.html @@ -0,0 +1,988 @@ + + + + + + + + + +12  py4stats.filtering_out() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

12  py4stats.filtering_out()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

12.1 概要

+

 pandasDataFrame.filter() メソッドでは引数 like に文字列を指定することで、列名に特定の文字列を含む列を選択できますが、反対に py4st.filtering_out() では列名に特定の文字列を含む列を除外します。実装の一部はR言語の dplyr::select() を参考にしました。

+
filtering_out(
+    data: IntoFrameT,
+    contains: Optional[str] = None,
+    starts_with: Optional[str] = None,
+    ends_with: Optional[str] = None,
+    axis: Union[int, str] = 'columns',
+    to_native: bool = True,
+)
+
+
+

12.2 引数 Argument

+
    +
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • +
  • *argsstr / list[str] / narwhals.Expr / narwhals.Selector
    移動したい列を指定します。指定方法は次のとおりです。 +
      +
    • 列名(例:"x"
    • +
    • 列名のリスト(例:["x", "y"]
    • +
    • narwhals の式(Expr)(例:nw.col("x")) *axis = 'columns' の場合のみ
    • +
    • narwhals の Selector (例:ncs.numeric())*axis = 'columns' の場合のみ
    • +
  • +
  • containsstr
     列名(行名)の検索に使用する文字列。内部で使用している pandas.Series.str.contains に渡され、指定された文字列を列名(行名)に含む列(行)を除外します。
  • +
  • starts_withstr
     列名(行名)の検索に使用する文字列。内部で使用している pandas.Series.str.startswith に渡され、指定された文字列で列名(行名)が始まる列(行)を除外します。
  • +
  • ends_withstr
     列名(行名)の検索に使用する文字列。内部で使用している pandas.Series.str.endswith に渡され、指定された文字列で列名(行名)が終わる列(行)を除外します。
  • +
  • axis{0 or 'index', 1 or 'columns'}
    axis = 1 または axis = 'columns' なら列の削除を行い、axis = 0 または axis = 'index' なら行の削除を行います。 このオプションは、data がインデックス属性 (例: pandas.DataFrame) をもつ場合のみ有効です。
  • +
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • +
+
+
+

12.3 使用例

+
import py4stats as py4st
+import pandas as pd
+import narwhals.selectors as ncs
+from palmerpenguins import load_penguins
+
+penguins = load_penguins().head(3) # サンプルデータの読み込み
+
+print(penguins)
+#>   species     island  bill_length_mm  bill_depth_mm  flipper_length_mm  body_mass_g     sex  year  female
+#> 0  Adelie  Torgersen            39.1           18.7              181.0       3750.0    male  2007       0
+#> 1  Adelie  Torgersen            39.5           17.4              186.0       3800.0  female  2007       1
+#> 2  Adelie  Torgersen            40.3           18.0              195.0       3250.0  female  2007       1
+
# *args で列名を直接指定
+print(py4st.filtering_out(penguins, 'year', 'island', 'sex'))
+#>   species  bill_length_mm  bill_depth_mm  flipper_length_mm  body_mass_g
+#> 0  Adelie            39.1           18.7              181.0       3750.0
+#> 1  Adelie            39.5           17.4              186.0       3800.0
+#> 2  Adelie            40.3           18.0              195.0       3250.0
+
+
+# narwhals.selector の使用例 文字列型の変数を除外
+print(py4st.filtering_out(penguins, ncs.string()))
+#>    bill_length_mm  bill_depth_mm  flipper_length_mm  body_mass_g  year
+#> 0            39.1           18.7              181.0       3750.0  2007
+#> 1            39.5           17.4              186.0       3800.0  2007
+#> 2            40.3           18.0              195.0       3250.0  2007
+
+# 列名に 'length' を含む列を除外
+print(py4st.filtering_out(penguins, contains = 'length'))
+#>   species     island  bill_depth_mm  body_mass_g     sex  year  female
+#> 0  Adelie  Torgersen           18.7       3750.0    male  2007       0
+#> 1  Adelie  Torgersen           17.4       3800.0  female  2007       1
+#> 2  Adelie  Torgersen           18.0       3250.0  female  2007       1
+
+# 列名が 'bill' から始まる列を除外
+print(py4st.filtering_out(penguins, starts_with = 'bill'))
+#>   species     island  flipper_length_mm  body_mass_g     sex  year  female
+#> 0  Adelie  Torgersen              181.0       3750.0    male  2007       0
+#> 1  Adelie  Torgersen              186.0       3800.0  female  2007       1
+#> 2  Adelie  Torgersen              195.0       3250.0  female  2007       1
+
+# 列名が '_mm' で終わる列を除外
+print(py4st.filtering_out(penguins, ends_with = '_mm'))
+#>   species     island  body_mass_g     sex  year  female
+#> 0  Adelie  Torgersen       3750.0    male  2007       0
+#> 1  Adelie  Torgersen       3800.0  female  2007       1
+#> 2  Adelie  Torgersen       3250.0  female  2007       1
+
+
+

12.4 Notes

+

axis='index' による行を対象とするフィルタリングは、インデックスの存在に依存します。したがって、pd.DataFrame 以外の行ラベルをもたない DataFrame バックエンドでは、このオプションは利用できません。

+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/freq_table.html b/docs/docs/man/freq_table.html new file mode 100644 index 0000000..a4f2974 --- /dev/null +++ b/docs/docs/man/freq_table.html @@ -0,0 +1,984 @@ + + + + + + + + + +6  py4stats.freq_table() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

6  py4stats.freq_table()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

6.1 概要

+

 R言語のDescTools::Freq()をオマージュした、1変数の度数分布表を計算する関数。度数 freq と相対度数 perc に加えて、それぞれの累積値を計算します。

+
freq_table(
+    data: IntoFrameT,
+    subset: Union[str, Sequence[str]],
+    sort_by: Literal['frequency', 'values'] = 'frequency',
+    descending: bool = False,
+    dropna: bool = False,
+    to_native: bool = True,
+    *,
+    sort: Optional[bool] = None
+)
+
+
+

6.2 引数 Argument

+
    +
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • +
  • subsetstr or list of str
     集計に使用するデータフレームの列名(必須)。
  • +
  • sort_bystr
     sort_by = 'frequency' なら度数分布表を頻度に応じてソートし、sort_by = 'values' なら subset で指定した列の値に応じてソートします。
  • +
  • descendingbool
     ソートの方式。True なら降順でソートし、False(初期設定)なら昇順でソートします。
  • +
  • dropnabool
     欠測値(NaN, None など)を集計から除外するかどうかを表すブール値。初期設定は False です。
  • +
  • sortDeprecated..
     sort_by の使用を推奨しています。この引数は後方互換性のために保持されおり、指定された場合は FutureWarningが発生します。デフォルトは None です。
  • +
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • +
+
+
+

6.3 返り値 Value

+

 freq_table()関数は、次の値をもつ DataFrame を出力します。

+
    +
  • freq: 度数
  • +
  • perc: 相対度数
  • +
  • cumfreq: 累積度数
  • +
  • cumperc: 累積相対度数
  • +
+
+
+

6.4 使用例

+
import py4stats as py4st
+import pandas as pd
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込
+
+print(py4st.freq_table(penguins, 'species'))
+#>      species  freq      perc  cumfreq   cumperc
+#> 0  Chinstrap    68  0.197674       68  0.197674
+#> 1     Gentoo   124  0.360465      192  0.558140
+#> 2     Adelie   152  0.441860      344  1.000000
+
+print(py4st.freq_table(penguins, ['island', 'species']))
+#>       island    species  freq      perc  cumfreq   cumperc
+#> 0     Biscoe     Adelie    44  0.127907       44  0.127907
+#> 1  Torgersen     Adelie    52  0.151163       96  0.279070
+#> 2      Dream     Adelie    56  0.162791      152  0.441860
+#> 3      Dream  Chinstrap    68  0.197674      220  0.639535
+#> 4     Biscoe     Gentoo   124  0.360465      344  1.000000
+
penguins2 = penguins.assign(bill_length_mm2 = pd.cut(penguins['bill_length_mm'], 6))
+
+print(
+    py4st.freq_table(
+        penguins2, ['species', 'bill_length_mm2'], 
+        sort_by = 'values',  dropna = True
+        )
+    )
+#>       species   bill_length_mm2  freq      perc  cumfreq   cumperc
+#> 0      Adelie  (32.072, 36.683]    36  0.105263       36  0.105263
+#> 1      Adelie  (36.683, 41.267]    89  0.260234      125  0.365497
+#> 2      Adelie   (41.267, 45.85]    25  0.073099      150  0.438596
+#> 3      Adelie   (45.85, 50.433]     1  0.002924      151  0.441520
+#> 4   Chinstrap  (36.683, 41.267]     1  0.002924      152  0.444444
+#> 5   Chinstrap   (41.267, 45.85]    12  0.035088      164  0.479532
+#> 6   Chinstrap   (45.85, 50.433]    29  0.084795      193  0.564327
+#> 7   Chinstrap  (50.433, 55.017]    24  0.070175      217  0.634503
+#> 8   Chinstrap    (55.017, 59.6]     2  0.005848      219  0.640351
+#> 9      Gentoo  (36.683, 41.267]     1  0.002924      220  0.643275
+#> 10     Gentoo   (41.267, 45.85]    39  0.114035      259  0.757310
+#> 11     Gentoo   (45.85, 50.433]    65  0.190058      324  0.947368
+#> 12     Gentoo  (50.433, 55.017]    15  0.043860      339  0.991228
+#> 13     Gentoo    (55.017, 59.6]     3  0.008772      342  1.000000
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/glance.html b/docs/docs/man/glance.html new file mode 100644 index 0000000..3cf37a5 --- /dev/null +++ b/docs/docs/man/glance.html @@ -0,0 +1,949 @@ + + + + + + + + + +27  py4stats.glance() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

27  py4stats.glance()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

27.1 概要

+

 R言語の bloom::glance() をオマージュした関数で、sm.ols()smf.logit() などで推定されたモデルを pands.DataFrame に変換します。

+
glance(x)
+
+
+

27.2 引数 Argument

+
    +
  • x(必須)
     sm.ols() もしくは smf.logit() などで作成された分析結果のオブジェクト。
  • +
+
+
+

27.3 返り値 Value

+

 モデルの当てはまり(goodness of fit)の尺度を各列に持つ pands.DataFrame が出力されます。表示される指標はモデルの種類によって異なります。

+
+
+

27.4 使用例 Examples

+
import pandas as pd
+import numpy as np
+from palmerpenguins import load_penguins
+import statsmodels.formula.api as smf
+
+import py4stats as py4st
+penguins = load_penguins() # サンプルデータの読み込み
+
# 線形回帰の場合
+fit_lm1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()
+
+pd.set_option('display.expand_frame_repr', False)
+print(py4st.glance(fit_lm1).round(4))
+#>    rsquared  rsquared_adj  nobs  df     sigma  F_values  p_values        AIC        BIC
+#> 0    0.7829         0.781   342   3  375.3251  406.2735       0.0  5029.1406  5044.4798
+
# ロジスティック回帰の場合
+penguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)
+fit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()
+
+print(py4st.glance(fit_logit1).round(4))
+#>    prsquared   LL-Null  df_null    logLik       AIC      BIC  deviance  df_resid  df_model  nobs
+#> 0     0.5647 -236.8458      341 -103.1079  214.2157  229.555  206.2157       338         3   342
+
+
+

27.5 注意点

+

 参考にしたR言語の bloom::glance() は様々な種類のモデルに対応したジェネリック関数として定義されていますが、py4st.glance() は現段階では限られたモデルにしか対応していません。py4st.glance() のメソッドが定義されているオブジェクトのクラスを確認するには次のコードを実行して下さい。

+
list(py4st.glance.registry.keys())
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/heckitmfx_compute.html b/docs/docs/man/heckitmfx_compute.html new file mode 100644 index 0000000..fed1c21 --- /dev/null +++ b/docs/docs/man/heckitmfx_compute.html @@ -0,0 +1,1029 @@ + + + + + + + + + +31  heckit_helper.heckitmfx_compute() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

31  heckit_helper.heckitmfx_compute()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

31.1 概要

+

 Type2トービットモデルの限界効果を推定します。推定方法についてはダハナ, 勝又(2023, p.136)および Hoffmann, Kassouf(2005)を参照し、関数の実装についてはR言語の heckitmfx::heckitmfx_log() 関数を参考にしています。

+
heckitmfx_compute(
+    model, 
+    exog_select, 
+    exog_outcome, 
+    exponentiate = False
+)
+
+
+

31.2 引数 Argument

+
    +
  • model(必須)
      Py4Etrics モジュールの py4etrics.heckit.Heckit() で作成された HeckitResults クラスのオブジェクト
  • +
  • exog_selectpd.DataFrame(必須)
     Type2トービットモデルのうち第1段階の selection equation(選択関数, 就業決定関数)の説明変数からなる pd.DataFrame
  • +
  • exog_outcomepd.DataFrame(必須)
     Type2トービットモデルのうち第2段階の regression equation(賃金関数)の説明変数からなる pd.DataFrame
  • +
+

これらの引数は heckit_helper.Heckit_from_formula() の出力を使用することを想定しています(使用例を参照)。

+
    +
  • exponentiatebool
     推定結果に指数関数を用いた変換を行うかどうかを表す論理値。もし False (初期設定)であれば限界効果と回帰係数の推定値をそのまま出力し、もし True であれば出力されるデータフレームのうち unconditionalconditionalselectionbeta の列について指数関数 \(100[\exp(x - 1)]\) を用いた変換を行います。例えば被説明変数は対数賃金であれば、変換後の限界効果はパーセンテージで表された賃金の変化率として解釈できます。
  • +
+
+
+

31.3 返り値 Value

+

 次の列を含む pands.DataFrame が出力されます。

+
    +
  • term(index)
     説明変数の名称
  • +
  • unconditional
     Hoffmann, Kassouf(2005, p.6)の(14)式および(15)式に基づく条件付なしの平均限界効果(unconditional marginal effect)
  • +
  • conditional
     Hoffmann, Kassouf(2005, pp.4-5)の(8)式および(9)式に基づく条件付平均限界効果(conditional marginal effect)
  • +
  • selection
     Hoffmann, Kassouf(2005, p.6)の(14)式および(15)式の第3項に当たる間接効果
  • +
  • beta
     第2段階の regression equation の回帰係数
  • +
  • gamma
     第1段階の selection equation の回帰係数
  • +
+
+
+

31.4 使用例 Examples

+

 heckit_helper モジュールはヘックマンの2段階推定(Heckit)を実行を Py4Etrics モジュールの py4etrics.heckit.Heckit() に依存しているため、事前のインストールをお願いします。

+
pip install git+https://github.com/Py4Etrics/py4etrics.git
+

ここでは wooldridge モジュールの mroz データを使い、春山(2023, Chap.24)のモデルを再現します。

+
import pandas as pd
+import wooldridge
+from py4stats import heckit_helper
+
+mroz = wooldridge.data('mroz') # サンプルデータの読み込み
+
+mod_heckit, exog_outcome, exog_select = \
+ heckit_helper.Heckit_from_formula(
+    selection = 'lwage ~ educ + exper + expersq + nwifeinc + age + kidslt6 + kidsge6',
+    outcome = 'lwage ~ educ + exper + expersq',
+    data = mroz
+)
+
+res_heckit = mod_heckit.fit(cov_type_2 = 'HC1')
+
print(heckit_helper.heckitmfx_compute(
+    res_heckit,
+    exog_select = exog_select,
+    exog_outcome = exog_outcome
+    ).round(4))
+#>           unconditional  conditional  selection    beta   gamma
+#> term                                                           
+#> age             -0.0385       0.0010    -0.0395  0.0000 -0.0529
+#> educ             0.2045       0.1067     0.0978  0.1091  0.1309
+#> exper            0.1338       0.0417     0.0922  0.0439  0.1233
+#> expersq         -0.0022      -0.0008    -0.0014 -0.0009 -0.0019
+#> kidsge6          0.0263      -0.0006     0.0269  0.0000  0.0360
+#> kidslt6         -0.6332       0.0157    -0.6489  0.0000 -0.8683
+#> nwifeinc        -0.0088       0.0002    -0.0090  0.0000 -0.0120
+

被説明変数の lwage は対数賃金であるため、exponentiate = True として指数関数 \(100[\exp(x - 1)]\) を使った変換を行うことで、限界効果を賃金の変化率として解釈できるようになります。

+
print(heckit_helper.heckitmfx_compute(
+    res_heckit,
+    exog_select = exog_select,
+    exog_outcome = exog_outcome,
+    exponentiate = True
+    ).round(4))
+#>           unconditional  conditional  selection     beta   gamma
+#> term                                                            
+#> age             -3.7809       0.0954    -3.8725   0.0000 -0.0529
+#> educ            22.6943      11.2606    10.2765  11.5235  0.1309
+#> exper           14.3206       4.2543     9.6555   4.4865  0.1233
+#> expersq         -0.2233      -0.0825    -0.1409  -0.0859 -0.0019
+#> kidsge6          2.6604      -0.0649     2.7271   0.0000  0.0360
+#> kidslt6        -46.9117       1.5782   -47.7365   0.0000 -0.8683
+#> nwifeinc        -0.8730       0.0217    -0.8945   0.0000 -0.0120
+
+
+

31.5 注意

+

 heckitmfx_compute() の実装は実験的なものであり、 Stata における margins コマンドなどの既存の手法とは計算結果が一致しない可能性があります。

+
+
+

31.6 参考文献

+
    +
  • ダハナ・ウィラワン ドニ, 勝又壮太郎(2023) 『Rによるマーケティング・データ分析: 基礎から応用まで (ライブラリ データ分析への招待 4)』新世社.
  • +
  • 春山鉄源 (2023) 『Pythonで学ぶ入門計量経済学』. https://py4etrics.github.io/index.html
  • +
  • Hoffmann, Rodolfo, and Ana Lucia Kassouf. (2005). Deriving conditional and unconditional marginal effects in log earnings equations estimated by heckman’s procedure. Applied Economics, 37(11), 1303–1311. *** Return to Function reference.
  • +
+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/image/Pareto_plot1.png b/docs/docs/man/image/Pareto_plot1.png new file mode 100644 index 0000000000000000000000000000000000000000..a3d9d1bbea537af5de3e9058f14ac7b829ab8967 GIT binary patch literal 25849 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 literal 0 HcmV?d00001 diff --git a/docs/docs/man/image/Pareto_plot2.png b/docs/docs/man/image/Pareto_plot2.png new file mode 100644 index 0000000000000000000000000000000000000000..82f83fbe52905029e3f82c752d9d901b8251c117 GIT binary patch literal 27946 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 IIcDtnALWD3d;kCd literal 0 HcmV?d00001 diff --git a/docs/docs/man/image/coefplot1.png b/docs/docs/man/image/coefplot1.png new file mode 100644 index 0000000000000000000000000000000000000000..82a4975e75acc123b8af90833183992413f89d35 GIT binary patch literal 17557 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 VWm3qy17Azgjwl?CKX~%;{{vYFtq=eJ literal 0 HcmV?d00001 diff --git a/docs/docs/man/image/coefplot2.png b/docs/docs/man/image/coefplot2.png new file mode 100644 index 0000000000000000000000000000000000000000..7430971e9500c8be6d30ba5feda64f5692d83d89 GIT binary patch literal 24639 zcmeHvc|4Wt+W(S96-^oxQW_AARK`k!mC8J3NF`Y!nP>Jc*(IqJ2^q>fCuAO?R1}#j zbCM~UGxPi2t9{y?efGQG^A3Of{&;=P{v6w0mS;WBeP7piy6$W8Cyp#+;b5UqC=01F z2NfxlnfoaerjEI@@e||a>w58jdo2#BTPR&TXJM^prcXJpXJLBbqQwQn(`&8t&CCri zn(P$XEwp{h+Vd6`rskqsw;KO=fzU-WgRQkJbKUSJ^Gszl%qbK$J@OAzq*R0~1&eS|6v{qMgCT1s#mDB7RYi^3P4qwCQ6!CKRp%*#NIe(Zka9VQ)jV0U7 zw#=H6)@0^5XQ>6_!~gVYPKhp{1kIg0SH7nqTcQ;I)xkA~*(DVpd*n(LO~uUYac(g_ z_{M#WOnE1dxqZKP;dwHPD3Z-qncn{X0@R~NkJ77-e#WA5xJ-U`#DdbaRLDoxs5-XH zPuS>_S^9)FD}@qS&@M)?asPL2dYae*7fqwKr|TRu!uCBkC|<^KTB-5G@v4nNuN(E5 zC@vqGgi5U>)4qp2lz4reVNP6@xes;RnSc7dv5b)QXfEB$In80T>`so*Dwm+j z&PAd8R+-wYZqiXvQBy+C1!7d=%0sDlCbVbE8_$?AqcX$ND8-~+lZlC`>Ph{P70wAC zlk@}MwzT1I;!f_;>-bEo-9*u1b)3_rt24wIQ6eKNB@i@ac1`ktNr=N}rtV0*I>kxF zK>F5)a~0vo`L}Etv|g1b9FzPyE^c&Fis1C84dZv`*ImW+Q;pw9X{=9S+Gi}?$h32N z-PHxDJQ8;{aPC>B9qxIHXVuO1J6QXs7Y7SP5AnS0sE80Y`y?Z5{6YDR|L&Tugj^wN zQE~B|=cg5PbQ)B83YtyZ1MR;m96NSHGu0$cO~m@62Av z5t^2^NBClc7H(I6^k+P}dgtj$4hg$tyeb+OqvJe1-Y9JT`Pc?t-bjt4b9Te^)&i9) zmo5$Q(RI?GQmNN(-o&1~D>*r+lww?~x_$e0yN}m4on7fORlQkIQ03C4ORjTX7k66; zNJ;6Aj*gmT)~jV_C(3%BpYmzT(#bVwGf_*Hq}W`}2{D^$7vr^Kn>eZB_#&#{g+*s? zqQHlSsCjI^T}#)byxacYUVX`}gndCi-3sMMzCjSMN5d{QSm0<$T#X$EndapSs2yt9CA1zWlT8 zvllOPUqv0}Y%xn8e6=a4{f?aE?c&yc>%A0t!FDmBxbSh-YYoiPhe-iSk({||$JyWT zsU)e2!(Z!#?FP>aYNb8;@FW*E!1zNlb)cgHx&ZQGqvQ<-Uf zap7u_WAw@}*%clf!qNGgN3UvMqX+uWMN?`&$1mzCU4T9HDo!z&|`IkkamU) zeQdZVAwU1X3LGGYR21zvnJ47@l7mr;Zlc6BzfVpgJY6lNq>F@8aOfjmF{VF9SR5BpGd9w`N;_H2D>51v2bN+8O zQfVkK-nALMfk6q*%@QizVte+eKYjXCr)suV)G2?JNt5%@K9cpVRb%=me8%b*b+trO z?k)W3>X&y-H$-(L+K2f_McTE_@8PpN%1L)rXQwzvp)kCtbUL%kigGv=7Nq zEc54+wIpm(r>;0UQ88V25nbrx$B%=b{V%Gf$KiI`=G4grh=$?02&2h-pv~&c5V@o` zrZQk^{7UT7tIPr!MVG3FCD%NvL`4SaU6j17`x}`mPYZrgJbi4m`%+9sQAX7|VfWj9 zI`7*TQ&Obkf>@I*IuzryGgaxy#|Qxa^&1=cJQj6R^=(CkyM|njlqY9X0V$!Cx}WdJ(UuvkiG8>r<3$T zwb^+K+QnQnO=K=c>B!r@Rag}h<}fOqO?x6l5e~0*TU!w!SA!LMHnrBWCwrLo?aO

f+ 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 jJ{ literal 0 HcmV?d00001 diff --git a/docs/docs/man/image/plot_Blinder_Oaxaca2.png b/docs/docs/man/image/plot_Blinder_Oaxaca2.png new file mode 100644 index 0000000000000000000000000000000000000000..d268b4b8ead261eab57fa8ae27b9716bc9b8e3dc GIT binary patch literal 16077 zcmbt*2RN2}|M!WqH(A+4DMEH3x)33RBzq)#OLp0tY$YVw84(%TD;kuUEtQc`_I$sm z?&o>#=YK!<|9#%$J&rrM9l5USJkQ_n^Zl$}sG6z*2_XX^f*>S{moXX$f>i{6g79(S zCmoVwP4Jhvi=2+jHTzpGcZ{9P5fx(>2OE1A8%q;bH*+UvOMAO>e4=~;XIO8$xHvdV zoIPv%&ws#Y?__cIGa-I3ya<8A#eTm z4`D&J0EB`f_DBaW6a1~NB47#sXU6~k^0n{9rC?GSt~fRhj^^IXPsg461^D<#86v-C z&a5wuM{}opQAR~YeIKn6wHvDqy_TbzdA-=+_E@d>W1nryr`g$(P8U8^!8@vFCC0{L zr6>ngRf$bkKNPi}3Zyl-c(A|cxVdbs{P+SruWtE89UVF^FE58L9Tc@&Umq@SY*gw^ zXr8q>1E0RfKex~7(fK>1MY`$sG+EUK!jOEA3hKzxnRt&G#2I2ebIx_S$QUJpO&?1-H-E3@s-o zC#$$P{Z*+g&LA?DDBpvf@q~3zw*?(|QLnwV0i9Blqw5Pp{xbf!nT3VKh{I&l(Fhi4 z<~S~urj_aTm9G!&O%_L9Re5a*`gs!kOtE-;Pd2k*akM5jIT``%h*R^kEIA%K7a>QR6aH^a9uf7ND-f{1@6~TM8I}fC{D1>bAtx{i15{~v>k8i z=}|W`H&2Q8oD8JJbS3i2DJq7N%ZB*lkr5&$+pDu&GY=j-ID)LKw6hSg1q{CSu0dGs zMyt)wTq`AG3vgfSyDqmhRu|Z4#Q*%`{Mr-K_9(8>?d@$sQBhIH)$i)l)$;?zM1itw z{l$j%dX=|(*kSpyD_yw~NG@A$`BA<*?fd{|TiB16cB4E2YrWB@&*rs;=jA6Sp zF*_T&x3htRY_H7+_ZQvd;N(1_sHpg1e(iRDVM?i&h6d&9gMH7F2}*;5gAHwMxG!J6 zynN+K^X$hQmGvU+f}WZ?_S0oKIov@c$AjKJ6g@s*J5+Xba&ofd#f#?R`u#9;hpeou zw0VDq-*0cn^QarEI>5mrWj%Qk-}duMVezpKnU`30Z|%z{DiWwZ61&%vrO@2p-(O{r zsb=&cL#ASw_699!3v0eS>@k(Z8K+mJ4~Y>cXXnZJ`J0yKSy)(*jcT%`Zxa)0d4)+y zwD5$EA`Y&ut6L%bOSr{zU zNI{n{hkQgsh4p~L#-jf2&#tqZU*fJt?BM#DcO}vnlZ+Odd>Q-kxw3#Ufjennac3#* z{2e2HI-V1|)eGT;L~%4Xjs?nM`8OJsy))v^sH&>!-*JLZ0k6kXRPV9IgCrC8;39Pf zhIuvsX1lw)5nW?rW1E}P(JLGE2TV(^clg?(n1~|f{WCIH;nyeLrJctoCic2*Lm2p^ zxB9~ewW^vLQ@}OYjC?>-^yij8UX?a}n<^X< z85vkvd8cSY*naH7;OEciV)a~KXe>2t=Xagc38R}2s-7#4tTy>B=TuPm&F z$G-b_8Ku1FJU13w8}8xEyYO{{>3DGBt6#cVX_ux}(Dwuej|prBc3xhU)$cu7z26(9 zqht%Lz8C{YpdSJQuN07$mWEGANC^{~|CICcgv{jZ?5XGaHC$~G^c;^KJql3Dri7co zPk##Ld23T3QDA+2eMv>dG27vCisK?S{6hl?r?0mRmYT|;X!zpRTa21o%wUCel48n^ zf~xTfZlSty1LnPO-)S!{{H^3{f?=ttFsFW zSEzDqJcx^vtF#+co~!ZM^N3=8YSkG)-t^=~Tu4Z6(4gdH%q>^oA#ujPv?K`$3C}Qb zDN^6m#h7Wgwzgirdezq`#m^5Rwat+*?ggUIIdPqdo&5nZ7w^Bms!nSv;QC|1l67!$ zy06Uj!bJ>&dB7ELQC*$lf}|vi*yUiwf+%1pcfUzd#HIiwk{B2m^u2!fR7*isRTWvR zYZOkC4Gsy(*VfU&x3{;Swy<_hE}zSNa^=I&P>N!BNQW}B+p9nvfsl~Pfvb7ki7YzaEb%K4%Ber)V3q0mGc3Uv)D(r30(<_}7c33-`Q z@NMAJPmDxz@?Xu?6SW;2__x=8gmWlFO)Lz(KpBmQ{aD1EvAcM9WXu6IHRna_MnZBP zdl1gd%p{+`!zZ<~aPGT{#Omxvlwn+gRfHf6k+`R?KX0)}_YNw!UOWZM4R*I5{O-ue zNQupm;3F|dY*?vsdU}k4f`SMlkwyx?*95B?P$mo(oXO0a1en4{5#UI8_Vs%r>x-jA z3JMAV!NJW&{K-2-8S>9D1utCi&A2@LFD|@$k(sI{ni^gK9kK z?e825Q2`LtopKHj$e8f+^RO|4NSVUAySsV5<)sQ+)3_~;pwsVCR*w@#(|+;v}9mi~=6YjDt&@`%=~1+#GP}93L$WP3r6@ z`xS!C&jwe5FOp!8j#DRFJ6F9{f8Hr|5nIKd%l35G-CO|_4~UE;`D4JEj#N1!elaoR zySu;MBYq(v_>7Vs)F=gq4ae`XdVAXX7%*{VN*aeH3z;WbSp~{ExMOrK+mkjfas%MMb5pPAgM#wFmn9LwyevpxoVP%2+?)`fO7}2-7lkcURvq-H)MTMuQC(;1q+Q7D3D>O7z#?0)g<0}&e z?+1^6{&YgY^~K(iw!o_a8hPa|msdknpMB#nnT{so{r1&t9O+T>F8lty@msntGmx^j zJLBHL+C{o3&JR|*7AVpO%Bow|6%N=nm^oAjcN9 zAM-LQbaQh9zTtU0Eq8@Vmi7Gk)gvSAX-=myhjV{0!N^q zo7>y$Fmzz4VT_I0-n@Ck@BCF6WszA*7&9!wSHz{pSn%0$ceKv52OV`Fm!~r7d0Jul zk*iR@hUW3($H`)j?ECv0_0vh{2Mrr}C^GT@akL{iarVq?3ONvt<@A`Mlf zuMMSK#i)eI@=celb48ppAqT+bd#0KzN#`aOj zPV{D9Y5RuZWLjY6gb`tMI4J(^>x7W1E4)WYNOv&$F6wd3Pvu}-G|~$kzCMS500qMD z^yRYZG=`JS=J54dd3i}JEiE6lgvsI8b)jGl-_#F0K*c5 zkWohr8|rJIuL@clBPVAJ>k{^Gp4-8n#zX%Pk|*-npYQK|kTIU+XTJRJ0|G;%wUmWN zMM*g^J?)>IOxH2v1iBCxh?CAMr)J3lIc@wOD+crh_C;RiZ`^kD0~Z;8j6m5_Bm@%s8Y%7gXvn0JlI{}>4F zo}L4Xk*pq=S8~~8XEC2z`gTh4;C4OD$$?2oH!$lWAtoV_8h@>zuk9P?y_38}qtdy$ zML|hPNse1^Yl01m+dY@+f>F`ryYqQ`8O)ezm`At!@{cilE(n<30Q2DM+lSH)2Lb{D zArTQm=&%%Y6vjHWL|VQnd6WC&FN)HY_TWTk=Q4Z0+aU~<9#?hu_xAy1@qjMQ*OI|x znI^_XVp39WF zF-(ItZAM`x(w8Ez%@$%dq-^ykGt1f|@AvW)TX!N=1&buU++}WSy^`PImW_<)p}^9e zEP$?U?P3FxIs-DcBcRK}VB8G2`+_Qx2OUg|i(@xZbuT$NIoR$O+y&FoYS$05E->CP zu#nVrbVA1JJULidk&ii76)Y`Jg@uQ&yg6O$P@Z*6ohKnADoP%NNxV{acJn=1zDqVb z2zV}YKF7LXWYijlWs(ShW!DU<`St79gD-8510Arg ztp_7!8l?L2>MB@R9LxJVOVTb6fhBu^C4ml0coM-B9P+4oRy#>OSaatrxDJ!B$j~`w zKmM9)H11P*rwSCJo4w| zF_=%e7r48#w;KQ_bsd}Zo>;+7SQxFLMflA+V&sJ*q zxY=ioHdrYr6mf6rnz_12Fp)BfAqXA65mJL6${E1RTP6WgKzer>$7gdA55;hS-xKP8 z|5_^(SQrHyZOrSJ%Cs~41JeEW2Ys1{mFDU*Qx4t7niF$`Sr zNzu`VUKNmRZq-K!0_x9SKLA77bfA5BspCF7yhsMnahj;05G(&b59NQ3W)dZPaFvlI*LzFJEdedv$KcZUVd5uqKulFnw5tqKa)&_CNVzM|87lh%r!MDy>FRi z3b0INu_e#Y(NieO`QIS}cDR8WoR?S<&zylF^HC&SP*DeQ$jYFGZ)G*Cq5|1D*iTu0 zczO&V80->L5ai20f69XG3H-w!pug$kN2(vg70tlEBWBJC3bMv^#yoly0j@{6-6#V( zA7Fh)nu9S+NlD3L8wWHKff;fUl(pkT1D4D84_Jm?D@TzDP@UiV3TQ7}xIj)v7jm|K zw@hXX$NH%#e)s1DT=iD#WAjsP&oXn%8Bgfy*GZS-8ZC59CJR|oF7>cKNXFfZjtmdK z1Y-%_XliOICLtjZtV|PdHc`*@x!$Y$`+GahfWKMtk%B{Z8;heTy6vy#NE^e2Yyx?= z_8OU*GO+=>3w6L378VX|isgw$a7A#?tqjHkF{2nc*gSn>mDjYjgHRLC38wq#IR0s8 zLCJazqIngWC2X)4A zoA%{v^(~_IElzE^SXk_B9G^)<@_*f^LT|W&ic|7Y~;e) zr)#k0DSIbI{YgnlfknvOy(MG>OCe4n!m}?jARDsk7M0b)1YrYto8kQ zS$pa-U+vZK5GxEz}_8EQ4`v_|4y6 z0uBGZ=J80}85dawgS0F>=CW+^?;nDZiqlYc{B25k$kYFTM1O@~#-FO%3SjdBs2$?G zGGID2;ZX^&=EZWNS?_$dCbdPt(=6kz63 z@xV<9M)v%pe^nNL{mEF49Qw8s5QFjm=~9@8tzJW2%l}#vxTnKK1j^on9ZR2173+d37xk0W;MbKM4j5%!66L=^=?6!+ig4rq z2A5M@1?Y%DxE?`3n#%Hh%hqSloA9;9QB-={SpGH#Yy@QFFzSEmI^WNWMuC7;Xut)YtD1(!{h=2Y)3Z70^01ANiJGO?{^8+7 zg6GbG!+^$#VB%+hKM6DP64*}f9!pw}6vK<(KT0&Qv_w{+8wr$pY*U3E0pE__bKT~Q zel<17*^bW6#+k09o=ST|K$J|#05-=D_6$w8&;--4-Unqc=u@^Cf6WAn8Mrt9x6j7^ z5!RVlNS0aIEd_6GWWWFhO#zN)C@d3jna~6;862KOKK-ySU(C?_sHdkV`NCbn{^$Bc zhK7cwPf-7hl8OqDM&Qn(9!P8OD~~~d}A#+;jGG=coizh|kuoQi4C^ z2&t)Ftvkie#u6T4cIy^9#Ct?EXBxn*aQyXErFOOVN=N5ihbuXd!GStxn*p1Ypja{Iv$#VlzxA_Z;<+?klpMG`A;nlG!Ww!vfXfo+cl!HA#ALy=7Qv)N_1 zkNrxI6f{|(ZpB>YT6lDHuu`_56uh1F?${R^t@ILLc3->ud%+a}7q&nsez36-3%nZC zzcBDxk+T^r!J3_&O?X)^O#pckd=^NyalrCFdFoUntT@z4iL+f?dPhV^D9CjN(W!M8 z03$vqmP4UwXo$Wm>1_Lp_fp~Dgk^$<%eCX^d(bx?{`uJbej z}_Vxrvx_!`=mX;O|68M0C07%K` zz^6jx5@hxHk>B!i9yb{tY+naMO(t8z7%m#EGcfz^I&yMzPyeVKZv)kd2gm|c2wbLz z^F_HDmoxCd{mOGmPdvZ$(aHhXGZ?^vD6Gd2u;tH{TJh7<(=Y$}bqSJ^QcpEP0csi= z*=&tWxT){ny%UzAv1nms&o6wIp7)3%>)xp^f`{%c9n75;2%*{`;#=zawY+SEQhl8Z zmX<;cI#t1C>Ma*Z6o4JF@QNAq?&`K z9hyXcovnZU2@r?EC_TRRbMG&h9;yxW`XJGTFb7Q@H1T#*75_1A!B2ub4DnOSHu}Xdun;jZv5Q=B zH^kW4^G~5S09EFl4^HTmnGw9{>f&W0rRc-{tDM3Ev$BVy=lBuSVXn-jwo_fl|7lGS zSnGo;hBj~1(@>Xd?77ev>Uf5MySWP#$7%dxE|R@qiAEKZCN~-wG z34ZwSIEr~x+^P-D&Aa2IxhpYUGvMc+TgAPnk%lF)JP;mgb;X_>HNc*P4IDw}{Xnkq zpKKT{)DMhgx1=Y=C1#SKhQSHlmJ6W6+w<<(a6B81kWYS%wr=z2@v_#ZLcKrD92u5+r)FDqlmNT#S1-2W*v4=G@v z$+q=^Y#6Q3G8ylU(L3JgwLOaRWL^K-mOuEP-#--K~r|pb&Ypi`WeMt*)*reFod=cshhDe>2>8 zbS)8bYUYfgmy(Hm<`Dit~_C3 zVF;3QHN6dVxVoB}9}tmAe=?~CG)pfp7lOc}-)skf8pSVJ{4+Ww2;|SOTmlb+6&~H& z|B6*!;TCgKs9(#B=^{T)gG?CQuQqITveEGyS{ksT=H&&h+0ueRW4wF!?tz~K@)cdj z0^Zv$=mUT@6E2>%9OSdc*kj*QgM%q%QK zK>P+7*Cm)SFulHi$n%l^SmpJ#h+80r7Ih;NiBB~U zdfKK?(6^uIS>lu=MA7$1{8mfMr;EgZ)_j3_xB88LkoBH?4tPV+7x46^E(EERi=&+E zPjnx+^s?s@!F7O3_fN=&+hN)kQF;iy5TN|K5(BWlTs`=|CK#?|O<3tE@MeQj~Fl z6aD!z00nNVe=>!ak!xK4-fAJ|ZVdMKaVwnW@^y_nkh#)HOK z&oEK;al9-Kxm*TV&JQ_(6QNS%`~}VR5E7z`motKoa%64yn(69dgtPmsRwjd4rkcs5 z1GEb&T*NdL{^LM6Lrve8Bmen7j|2w?hX!EIE8nCK=z*d^2SU!qrm*uR_&6blPE(Mh zJ_Zx8B8*f)9SHJk$K6dw%6 z)_XE8@$V$h)bzA~%^*JzBvUAPp5)_egIK|;;sA)>>W|N~nVFfepiv7S03!^Tuqns^ zExSMYQMC+IE0)dd6qe9@$ISNX$)a~k@VIoaY&r;S!Emp9T0|A{g?*96U z_(9x`+K^}+6^%uKal*8Ot1<@T1#MDU)gHhm23|Xf-erwE_zwf7V7!uf#pjmxc2fZ3 zXgyJOE3x09!~?iOZK%eW3DQHRq}+dAObm_rU|PqC*H#In0A2}&q;L}qa_w~9hF3P=w8xq8z0oMS51AuLn`-(|6Sv+VQ zHkdZxvxo`P}jQ$>=S>g@Sc zfqFrZ`5_yWpZ0hXO`EaB@UsZ4;uWtzn-~I4KpsF+6h_frCtx%*c^M^K@L`}psDOcC ziSE}6Q2lEAfrE_=?I#wr*$FJV8G=A%Tx&ErP>5obF)(08**T~sy()*sP3xDRR$o}RdWsuXb-_X@S1l1x^e1Mr_+wHAc!7a|YI&NF*yOGW3$qKd zKsg4Ofm68B1xhX7gq(c+UR{z1$0)RdB`4SotB;57In_^1|B{x`mK|B53sF z+;RRe3f2OK2(6NTg{pr8pA+9@%9OwdJq)!S7;+@0gj6w@uh%}l*Zl4L{D!~fRGJ%U zfAkm-{<}ZF1n*l3QwTGoE>!?|$GdkThj{xtj`%Al{rwXKvIkmD4h|)UAL~(DUX)lQ z6$I!G5RkK5IsHzP-BrR1RbdW8RfibCCnNg?ABVCD*tr7!Js=r}Nc-mx_E&U9arp$P zGxq~7v33uyU!H#Ij@_FJ77;gn8S7|SE`aBQsF9NFGE! z)N~xDMbIW7)bCIe$?eB5T106Z0JaGMg##Kq%=eQ(dW=s>iW($X2wH(MGvfsR7WeGg zv$fDDcJ)3#hp{I|YfM@sM{{*(E6cn1K^42b*{Z ztAqpt^!*wj;YLX@AS^2EE#5ztv$Nv^ZsQLh)f8ISRZcU6+Z#)0hXe|-Z>rwIU1tX* zu&Q8i{`OAp_U)4z*RBbeb&#Vb9h&k(%z`to`>)JmGON}V@r#??O3>BWpn|4A;*)D5 zuN9v;g&o$bgub-&Q-42jjQ@}e)sZ_%O2Ph!WJ`5x$ zW1$mUF}ztjm0n+7K1VhM2{^)UiG>BCw+V`nP$NJPC_wSQP6RA|@PHC-Nu$}rFjKJb zU{Z`$@gg9^4}BirNRto2vR0tA&_n=BjmSd@s9$tI5Hy@#uvHqTQ~%sH-RK!**8 z1$2cSzrACEvky}svD(l+_``=p2wML~j}L%n#j^pnSU6P3iO|{v)VB!{5PLGv#gF+t zkEVcy>(qG&gYzCh4mGXQ&#tE1m8Jg=n%_HEGz+~)uOF~r*Vf!L71@&5L>3GL_f3`Z z(cr|WiJg7hcP+6TJ*jeGZ}lT67F2&A6IszxvN@`0Xek(43e&B$hAnU&1ddkd{_vsU z)eX3AaQ7&xA)qStOf@YGZ0kn2b452R+W>}2Aee;02s)(!=PtRply^#@IUHD0&CSi| zUHpd(K)}03J9)6OpeQl7?QuT;80GhS!jt+F&jo+*xLhAHg)|)GfRMW~K%G|HzGP8E z1Tm;Ot?ET{(y#lHyzfF}F#U(N5r1W@T8H`fnI#hlEkYQCf2S%vhXNo-T2cn{DFA9z z|DyN5z#1GHViOVRU#R!8AyCQYQ^{t&`0=0bM>pSi53DmzdYk`n&?%)8 zK!@MuyBeBQK;v?I4T4k z#0+L@^&Jmar zdqHg7mssbsCt=_*djjYRG@vo^^0Ebesqx~_$Ofdufs+K~wx4O>(1xgIcb~u=eP}kr zD6n)Q9lQH2ZTq==(Hu(3P(K_x6u^ZF$|5x1DXPq|2Rb|b7#2otexOuAm6f7!A|({u zxzu>eWoP#9u^{XT?%cV9I%nXUVzjjr@$vD=!O72adpJ0#gC-%RMvd557a1?OmuRGX zd+eziaa>e&7m6KI8{@vT;2a$T)*hM9yi~XG7)rfaRX%&wAcReZ%FJZ}I-vycR_7KJ zWK4i;uhCSJ%kJ)sAJ8x}Gf#n?Ba6?5Mw;Mbv;eH}B=DX-O~oYPLJsyZ%)-#~cNRmS zxgLrh9MSo@yY&mq_8Vw73x2P+w--voHE{ODv#vi&YEDBEB5pI^L zn|xwXI^R|jWMn{GT-*xTOB6C%!j7Ge=#r61bUZ>O)kr_$$NK#i1~<;(qL}MEi#D=~sWcwEC=DKM8CMIJ2Ws zFLOOpWUXo(QsRQ$jHEZ>uMAyXW1Gam_l*ELK!fYwSoOT5L=7RY-~Aa*-X!=fVATH> z${C1Rq(;p2VY;GrJowxLchjNJ118@?$24&IK-r+DrY>mIl1bdMor`_&;6BvSOrSr& zHQ(ISq-@d+QA%|5)w&kqk@==g=-!`h-ESA;VH9&f!0ZUp$P;=#-y^!y3*-fn&7M%+C-`tPQ@ihuQ=bKKi@Ew>q>gicvsTkgO- z8g4Cot|Wt-j!Fa60EMxUD!dprtxem`(sg}p3~B?WTlsG^&kPLg_#V7|t4|A>s&=ja zCYUauEU;m&`=iS#x6yYxKV-)z`sc=J_^2Pfm3}sLF zm#^Zvf)G;f`qcA$=0;ZoS%E?%Eu34rtfJD2_65Nztlgd~SX1*q zXgm6;mRWc-hZ=VK34^th6l4 zd(JP_`bQoYH35DMHk(z^yoMIzv36THZIj@*Tk54n@N564RzjZ6^Lg>2(CyqV08W1M zH`H;qG-nMWEFRy*g`*r7;jGkK{Yc$`tYuc3HLz<6p-PS#)5A|RuddETZZrkz=nPx zP12L*?%li4*zzk?*4pu$%gaFvqc2+Y6Si}S)V3I*T!19hyFR>PJFiX!SR#BP&{@#B z9|BwlEYPP3lr%<}&KmZYE)-t&@p%oFIW3g$C}r_u)6#gMIB*i&59@NteEOeK;QmoC zGxI_Btrg1qd|;EF4I-vDdG|r(Q#LaZEgv;(21+<32RH|(Gg0J`gI9zTfRHp2!8C}C zkLL^^MOQ+d~~O7CgH{BVTBlxzXykcpvyxeGcp;SDgwa1`EvbrS*H z`Rx1Pfe!Y4h zeSF8IS~!^T!UW>8$Y;zO1$HfIn(sRI@(aSL-*v*lO*y#a79c(OqvP|zW3Os-k*a^Zz-{1^r3nWGyaFPZ+7S!teUXmMvN!#^7z}eHoFKrM1 zIh^ll0n!e)3s{H>+?`U}&myKnu-HSOFX}3wC(+94!MzUwFPQ*Z#68bc zj+fevO1x+vA$Q%{+Zb{~KI(r4YN{)pq-3Ck!C)tEE6Z!cU}W+z z7)k4~qu_6{a(79<4{>LOyUsce7S65@p1@&h51b#{IXK%{KV)@*KXI~luovRLevSVo zFRPWa^J6D*0RhBcpWt_RVkyvMjO+qWIsRDL&CdVrPjjm@h@9@Ug8b=$0@I~>o~;S0ZKIOupT`8;V_w1mtVU}P)On4*f_sAt;x6Z8O+N1W43ZcmH*$%Pp3i?3#%iv34FdDhI zd3)%8V3|}Tr@;@uk;|;4;3tjo5zuHD>|v1KG4Mmy?lcY5?pJ)Im!ZEdi;iAC3j2UI zdjBM=GhU>fLD=d(Jw5%BEDVFQJq{tWD+tn3jO?6Uc{kIzLPem-VKDtqDBE2veU&;1X5z$#c? zUcQfiS$V|o+M}yy0_8c4N&QszA66@dFpQ=v1nn?`9?1`^d*$O3dFk)2V->XMPDTV! zoZ4c8J$njuqP&WuBj^AatKxt7wmWO5Qql1n6JjyOB`!4yPmu$a>%B`7g_pH-?a1&e zj{?7(#g+J*U2c5IK2xdcdR8;wWWx19n~3S%-E#`ia6zwXV;I@I**|^)cKwgmi=Zch zzo=5;GJ4N?ABQ~vy$6GZYrV63uC|Xv36QX!_+JK@h90>%gu>OJHlYSsSChbGAN?3= zFEc@{yjiw@y*e#;_>D0ooaJ#&=XUd?)F39&yPubCApLvSPB z&f!RQ`-rZxHGnS?54N#gU~Y+*dJ zb83#t3EB*B8kax1eYiwR6_3a(^C0(Ig6Ylixat%p$IqvIFj!wAf+O*APIm2K1WMe|7AjF<6kP)oeoD=~ML{Z6T>K)vwpPQQlCI9Ym}kR=-Y`O$2O zuTS|EBHFfO_if^NQ@5s-#?@vR4M_Q`rYAUKgy;%yAbC!qTMHWs~T;`sMrhAFg(sGb0_x^Oi>K^-nO> zF{DQZILq1@wa%Rj$tJ8p^&CgpS^O`|;yP!D07>yc`b>Go0T1+w#lY zRa8NwVQc8!3D1>Xg6{3Ktt9{U`&jD~QR}|X6%V+_`*Cdy zop(nk|KyFa9$#)jo@7!kwLY5t+{9C|odbop$s};OQqW0pKSnImq{yf$f;c>KhMa@j zgs0&1ou|#$TP{w;F~MavMh5)y;q5VO%^gRkEZQ>cx(D)f>epG0DC{+o@{CvWM~R7T z^vKm0E>DHYY{9rFX$O`Xi3C%2*QK%+qwyLfV)Db&Ry^I$B=?!P343xs297K{^~d-4 zYnKGE+lznT%bi87C+gg#O$#sM#W*-xe8DW@W~9F?|5|0-Wz11YK!U0{$7_4sH94>6 z<{35pRO>uF?i`rn=;f2kr`Sz;)`h8O+65XnurfQ7WMGW(ZR5$!`#)x8(9h4C&OLqO zBfO=+WvUU%q^ij!|mr;YjiNj^{vrqzu{CqQ@+j zG}?0{Icu-Eg!K1~q_X(#_xcWBV2&p7+4=SoZm&vT54MT+?Hr4Q{;TwDZ^u0ri=-`- zTeRS=ZAX^D#JyDK0UP|{udpk+-&ykOF#aQxQ#Gwjg3<*w_C%G1C%uf1fgNmjaCx>7h#N{vSBdxN;Ns>1cw7 zZbZ&ONk?ciYqUaKrh%#ZmloIg3)UxM%01iOT4TgfZJG68KW){PSNmLAeD*dhSM2p` zeKdAG7CQ3Zgy(*x)qo9&GiH=mlr-$MiDJE+woKV{UZ^x--hOK_w6C{1l6cosO@gJ< z{uB31m+`%#hPTLv>b1@{NJK_T>2-?O4Uh^vX{qn|?ufLecQD z|0RG(t<1H_QzMw%e}psB&ey&HGl2$iL|&Gyf18>FHl+4xOnk^PtoS$F@ca6;wG~C3 zAbbe^j+y^D-udp@%j`>b{ss#)^t-CDqvx@AR)6D(|1ZKlL=%@YTyVUYOf?+{B)S0% z1djLITPB#s;h}l^qkb1I$w5dm!);oHhx6VtbS@vl&){9EHC*7g46omy>p$b^KQV)I zz`={F5@}t3_{pvUbX=v!<;^@7&c>FZA1SufE`d~uab1GovZzxyxP@zmMrT)Y3 zb^&1iKZBsLJ+UG4oX~$@ts0~aCMF4;SxXOl`0NCPnS(#VdF<94oc?<0@G`gCX$P(Y zNB)VBL5J!ZC+&@ygT3kwz}LFz-)ky5?FvP#E9ylYMg`aKDEAshKL$kD5Tb~^wY|OK z(m5#zWc@}?uY#AB>}>n9L!d1ZA|j{TVqmFfbe2OHM9LL{&OvRJ6$wAz+wA}$%)cSv z(r5*4Z?R#zrw@Q9xrSiaR@P0W*{62 z9VUvQ7w7*Ty^kONV7y_U_!|uVeuaOVBQ*5y-@hNKu+)IM=dBB)Y?a7-y%TS>DbD!@ z88OFtHe>XBF0BdL!l-F%rSQJJhwI$uM3;F4?4k8YaGt&nUw3yk=jFo*WWKw0IYHDm z`S&-n3ZCQRFTFv;XZ-$~|M(77HgKa)N0En{HW~p<8a0OD>I`Z$+adnE=L6BUUu=$5 zaE9;hLpihkvETEBhMvcOz3}lUmD5i%U$E)ez@D zQFN<7rIxwxUyDj!@zys=yyM3c|Ml?;1Ffjygz7`C^owc;=bE)_jkvFazLX7qbBNo^ z(sM_^4zl$3Ks^tNLBFbQ-urJLJv{tDOp-}E^zy&fTiJuiqb_UTJpZ2l0MO@ek@Nzf z>ae*uTrG+~-))cKLsWE%RumN1v{6z~71$+cNUlBu=!$Pzo!qL@rz$ zc>k{0hj`%H{`KomxH|y(;uxoHDTCVNbX7VbHj>yu17bGZ2YI&V=(|h+Gs z*y>FPy-+g>>*EO^e&F-lO_~di1GZRKtT(Qpq@jGFSTH~m#>sDLO?8eB;(KXm%U3G> zgT8R)s6g3D2ua8Ao7hM!l?D(e-Z@V7po(~vFNgm`SXx*ZeR^?{FNv0h>n0gkO&){q z{FKiLnA&YF45|_c+gM-BagM~vrU;enE~)K%D{m>-HInV>J+~owz@5I2?3ASDL+>!@ zz1-OERrcfPz3mkTUx2Z=;huZPb3f0;7~8Mfy+Y+JeRy+8E@HdDyjVL^?Z)`Pip2iU zPg1t4V@}=CyB@kj8(`q@L_JEkjb0^V3<^;%MM;Qq=V~u$B-lV2fvEFbPm@{omYPki z-m>e2`>eaMQKi*`8)J{<0+GQN#rjaA7K{Q)V*vBx09NO7Z7g6KzULGY``J1HorCqk zBLss=Azndr9Y-4Yj%Uq_t*HcV=8ye+BS*bTEHL3-jktmJ>NiUWt&M52#Sb?UqEDbnA;G{! z)zmcEG64dIE#FcDsLQ!@vahlfbo>DD=pl>GP8y=@%Q@!6oS2;X-CK;6ET{<&TcWR) zR=9&wi%N@rOYz2geKf?i0KO@eF~zwbYz{|m7u|c`xBPyV*&zUxfgo%*5>4PtX1)hi zfaP~?S9gsAZKP!FLQ=OlyZ9+*=B${^82)iQ=+#JH4G2LFp^a;R4VqSeZN=k5JiQxEGk_nZ`;8rMmS zuEhDI;q`7AEDJ|T{Z>51NrAeb{#f6skQ-?8Fey|sYRtJ`&E@lHCAZ@#%>{|bAwyAz z3CYHl`J9w3^%}G|azVF1uOJ2oFqO-XaHV3$dVu3MU2@HfhIusx z5Qgaz{JW{pig8!$_;8NPkt{u<7=xp^-W%YhJ^j+uQKY93LMQ~O(d)nk1DMc==FAB?dz1yIgMJ=Ys(3=h|KOuaV;rR^7rswdVq=f?(D0e{<8 zDV&la?uJn`G>K(6U9HO0L=0lP1seAsV!gMMC_K;>hLuUoQXV6KNdVS^A|9;xatNX5 zqiJ+_ zixWL{BueWI=zOe1MvZ?-hhO>WTb4U%FPYc;ZX5K#F^KA-o=32SdptB}k$)iR?lGxo z&6*~u!*7;XR7lZK3d-817c5XN4a|&<-E(lY5#{~4GZlt6r@N3Zf2YJ4KM6)c;QEZ5 z;VE*m^x<6IJ2W(0cYD0?OBG?nV$qeVVbg}?zJXo67mJ`ZRWqFlctp!Zr(lYBBMpT- zCx}0LCT!k=({@R&-#K+T%2D%YHmjU-t*OQv1^2B{ODWFwHly{PoA8JMu9eY>9Afb# z4(uaqlghZ^3puPm_55-=;_dr)Gg;upmBhg=p5k{Og*fu?3WhPZCG|sOm9Kkt)11^w zOyVvi1yL^1-Sq(vot9onbn3dDoIrVmZjQ?~b8{RyY{IN;<(+6*hiLPyh3o8n5O!1?xq;WSNNMt^tL*R9|?kM&HLkVt+comrODo){2j>d&5Y&NKt! z$_j7(R8EAr$$M)5EU>|KI%w#HuW~HxklPFw3YNuKzyEm(%xc`9b za?k7J=pyvq=$u1t0okcig@)z`DZEO^%C<)xCjl4pKgdp5E0<_$7$9h5VGV8s85;T@ z6x`RMy%{qoUGGC~-IkyGOa-sYM0kDFbm2$A3C+dhZA1Q3#lgv>yi6>}wP>|I)TUA8 zDIJXN(Bgm(Ujc8aWZQ?_V4Z2JrUvS++Cg07T35w;r`f$d?kAG8KaNy(SB(#}&2FXZ2q)ROrU`(cWFCQ$8Tk6q+9BLaE)D=sE1B>+SbsnR*_4 zda?WVxCxlN%2U?|TKjLNrG9#=!sG=P)D_GO4rOKxMxHj=9d^>micu^I^4*_eF~Ti4E!Gh>3^jw12cosO-qXNZi7&(oZ_gBvoJ@O0SiJUOhbnUgA2-RWAIU-PZpI%NZ*9yV6cCyuoAwWe&Io$<9%KfzPnCfc5={cow^3$&?6;>eK8dJI{1s(QV5>Bwu)Ic?u{ zqXaLu1#`Mlvj=G2zPs><(WbgN41kOF_Dy-b`fMaB%RAq@z`O7aKW_asrN2P*JRiXG z6>r<9t^1C_@5*O6P?krP-7`jW*ffS3yut0xWrWoYXqf-dHhI#@MyO67P8XDdo9}Jm z66(y@qQpt+sdmSEIinE9^d&V_ys%`;z_xV zB;i(?bt>@#?{#w240h?3a>=qoYsFtP45x;s6l*TJlFM^{>)oM2UJh^+-c!GVJSy_u zulPI9g+AU#ix}yUfZoZ+@TwXY+``k?a$2zM9kkue<%@4p4OkAiE}iEuKr%RTwceuM zB_zasHp#VZ>1&L_;vlOVvX73&3PX9BZYN6NX+*hj4Y~wZFjau#*(p##r%*oD4b{`~ zP(!n{#c;}{4QGGgxVfBOW+Kjh%hFVsUolcV_e#lB_AJl+0e796{l~~kM3EVW+JaM; zro_A8zC2!Is%j%66=7l}8KH7)(_6_XrFoIlHdpY|0M#+d&y`F}=HzPe$8MQ-k&54- z`6IsDuAAOX{<-Gaayw0=N%f5vr1Yv`+$E*G*{ z#LW!u%|MklUp9DJzs2}0`F$McdKTi_BDQ-(fv(I?pA%n4KOl<+go>#5dO*H?eI4<2;=s#4lQV>(Sj+rX zK2>LM_6k$qpnJ4+-Xo1^Wm}Z-h_#wT%id zCaJt0%Kkw$Gi}CDk#1eD7f%k$B|NdQG{mDip+Qf5L@iq-*LqJ_OYmj03hW~hcL}Q2a?vsfBN=QdXs|p7dL;gWXLl}oD z$nbWtf7v>$f@cDs(VZ{(M>hdIY2-?`_xIo24$!fOCr6zHUQ7J^+GQd?AX@42Gl zLaNvisOlL$<7^~WRAX`Iw1H=(y{(8Iz|1Gh<_-m!zr7lLMStsiFx^j4o?76;W`g-RJ9xsA|dBvH8% z6LVLxiC`p|*0wbP)CWD3JuB}gi#tX75}xip4GO2}L7RW8Mwh2nc7qUKsZ##p)0eM= zUo!^t>c7sZ=8%QaG`#CN)Ye}nTX>RQ`=Q(Pw^ev<_B=YrOzm$&RPn(#N=6y??EgBa zkc*EnL&lYd!oqJSvc$X=x%l=Ub4tIEvs}#S{9le8(93`mx!+a&dlLVLwfD=3OiHwa z#u(^0khal(@(J#l?{e~AkN>T|{94dUJZ69QQ3hD^(|r7YS(E=J6aCe@8Cn4~Lk=rN z(8`$fJk%uzij&|7V-YpTr~YaLe|6{-a%m_kzVHSdm_Y2!P%=&sMc6e5(-ZJ#H6$N+ zF2B#o3P5L~$RShkiCN3fZ=dSN=YQf?8a*Yd?&S303-T+0K;hn?Th%u^Rg;K~zU52d zG44pyOgN&s{zJgT!i;!rFczj+q&fq6Xi44q$M{Ws50JHU=|P3u7hOgk6ySu1k3ftZ za<$HJWOcVd=n(MRMsBQqinRAqm<%Cz4F{7|E33T!KICB473#SB=?m!&4ZF<*0)EB$ zMh2Qe#3qW*u>A9PJ9MSB=!1{XxUpT}Egb^o)7z@S4(9iYT)u#()(B-6x4AUhA1b+~ z%)`&Wg#k*OHO8(Y1hC9LNa@D|r>os-8BjwDSMbO3O2p5}CLjEd*2p5)m5HHzJsyGE z9+OWgxCgp+*Jm;3jO`vkbTf`kjk^TW2)rejBwQ*jI^##_EfclUBk^nP0uWIz1iW{s z#7qX`y*-WtHjaRkr_)SFnH;s)XUuzG#$g5x%<9|B8wh*0i$g^TkgsTJanomi=Z80s zL2)G*h!#xYa7jmtFA6^-Kr&?P}mPa;z9P zc)d4q>J(|v*buK=X#_-B&;KcKFh{F14x9iBbH}&0?}-58reSY^hj@^elU&{@is`7X z@0P|#(bpw1A4B;C--5bB<^6BJ_t3<-E{0hChyE~f?*md&Z zFO-wMW`s$j$x?tgfVLUTheMJ8He0ZGw8GLe$Asyz$rk}!W~6#K~BF{ zssuvFva1q|bSqf|kQuD25L~>x8|q^u6c_JT13Tq?m=1p6X(CX1EprBzA)#d@K@k2L z$ZC#TOBLOFsKNK9l~&>7093(?7r~s^4n>(_EK|HK0BiMqV)B%@KP$t`YGbxk-p=39 z#hQ@;Q|Z=H(k&r^zTWWO1jJJB{t8imweN7mfpZ~;(Yl|nZV%KjsW(*OrI1hVN{B}E z9iS;Fj|6xVmTOngPbrwKh(LSsmY`IjmCTJaiT6*{Q5XBN9YC7v~14xe%hMwbRaek6?tE% z%l7LsAol|{w(qxA*^A~gBPE|YV&6-%yn z2r-`s6xUmT@tkE{c!vW#y;c380w-gddUA2_3W!2X%pZU}K$~}+c(2k$$7g1@%uI5$ z2OJx=(6)R+Lj6M2#t!w!a`RkRp3`g>3e3;lm4%xN4FkLi`Dt=5(V%M(hK7d8f!f(i zV6PEay?{JZ#e~pEvO}^*7xn6Sj^}ix30_EN)r^bCzi?Lg(N`KuNNMx}Jk5W7 z4$@Gj(onW6+{T$7IF8warKixMHPtIRa-U4bLcAovDN~r-LOiUh+gUPdSEtl)4;ih5 zmpjkkpE3wfhv_&vJO=c;zIytg)&u>g^gB zMoDS5XpOR0X*`V_3Rg+`=_ejW$*yZJ?7Dn!Wq=!|nuW!>&oUL*<>7kDG~cAVa@@dD+hB-nVI$uuJ5={)26ZuM;%m*_ zkmCEcOq9aH=hB_uXbmlyF%)EU6%@ZH;Rz|zR8*Zx8~Elm9c@r|#dK(g3rPv>IRgEV z=Tt3(+*i2|l4)$>As&h1UnwVmwzy~*txNeeO79I2KX(L0F5DY7?9#@h35u#cN^?1a zF*1>;oe81+PRo=B1_?D+!J>z%^w zl*a2X7^0VUx#gkBoWrdq^#!bd7h};4y#?~;Ync{YNM;ZdV0+%y#reSl>>;XlN-YL# zQFLMraD-e_$WR(0YO{vcF56xMr}bDdm5fzS%dw2F&3Hi-22tX+fPr1D_lczG_rE^_ zqIq`(d(#S-P-o~v2DyTYi;0`VW~LrF>b1p^JT#htk;V2r_zb@*$W#yOn)srvT>0CP zS2^DponHvHJ@M-3LP2DX(2U{QxFa?23g z;4KxIy7Y2O?Wc(Xi}yx2MQGDi>Kf7#@3bqYq zj1|Z?ZL`41qvGg=tu&vYWRS&rsNAhUbVjN??rhceYo6kt$OU93GsVeD1F@Lq@Ocs2 zrKsc**loj0(d~J6@_D&$^n1t4vc6R`Zpv$8t(sUPrNEI%X^a+=Q=J<@=YK7uVY0+6 zzP6W}$`a1=_m@xNL9=j^4EPuub654R9`CwxfUsiWx_hczu1zt}Up<7c{|6oDX_6|{ zSgFFG|h9yhfqNKN5o1wA3VN zNB7;OCYPlw79LWjzj9K2nD>6xytEoBl{Z{GX+hHVqLPh76*E$QkRL~dET!U-(H;oKv z?sMK9Wc4I>ts#P)ek-oUzf5`oX6sMd>7R`sJS_u~H>!`0>R8*o7Ca*^u)#3kKI}8- zBvPDJ*LMTCEOPXA%cZZvR@k}Sf)u-s1yZvQvoVvtXe1{2~1slb}aED43 zI;+KtQYf*to_9XRisv~lZ_9kbk zPGE$1x$H<(S>G4`KJ#$yNdGJ3Y4aZVo=1#r%%Su?iPJ-PBE6ElMt_%5PVMnr3t(W{ z{hh`;z$zr>U%Q@TGr{uo+R22~MwPIIhk%%!9L4(z3ECc=%FT^2>tJAuzjI5d+4^2^ z`57>u*Djghz_|)y5FOU*EciEBVH%nuj%b{f7dZ_b zcVxi=7!ODFDn4*B3BDH!o&VBBPQ#!A{O`YQd2(Q;eywi&hkFa+h6lT@f4S1XIncim z92)wQPZmceY7yTc@{awbgQ%;c5EBgwAWX=r_!Xo;{l0Q?-m{lci$DC(FHM7Ow|%MN zdgEWw(Z6Z?zvOVk!+~`xYXANzL=*4So`eDyj-NbSWLFTsa;}Gp1(XLhZm9eEo2t^# zub<;BYkA>4^AAbkKV+M)|B9coGY(Wwox*h53}*+CvR{1{vnrWuHJ9?#XfVho_M zh~3DW14HgGM&XNS zDN!A06ukuQ9gtYK)uGm5Z7DJcf8iupvgQ+Lc^LJPOUOE5P!K{LULPCW;^%tSf{XStJ4Mh3bd_bObEnn)7!Lb$=Upr6>(28AoH$}ZTQSS*d5{pBkr4X}fM3lF(qab<> zuzG!Si`nBQav(XpEVCui%}Y;zn9z6)3%#nKyzQ-|Cg5hKFN7+d$ki!I$rtq4uqrsd zw=r)HX%iH@dJiCB!K#OqQOF_~0q8X9QESARZ6YAvE<=Wvqd>1nstb`lD|_MJ0?;4S zDKw`+`M@y`;JEUIE9;K#0q@n-j7Tl9G)Z3v3K5FWTvK~{Ev*f83al`?s1Ch|x;n|m z?-LE)p0*fN5tDPzEm3$|)Q^KUUL2r@Ti_%^L&AeV{YD@6;xT5YFLVZOV#!16fGdtf zYDilrAW(5tHiK>U;5E;5?*jNzcc&2KCsETe#^|r%S9r!|TyW@7C}RjRd{GcVb7=4G z-aZk!tiv@3QkUlIGo7l^mR*TrE?+ObbTf7)0(rvZVG@YkJHtwS+Pi0qvs!m*j$O1=bDfiJ8uuFFG%Y zKm^%7$USfZ8pEC=cl)0T%Y=Q=6rin~>yA)LyM7DJvs)|3OUVhv9)BRvu}}trNbJ0U ztwf+kn}-Xg0h5pS8XGAymtyVp2JEGZg=!vMRUm-8hh*k8sTuI~1tg{r@HfJaX}!lN z@RaOKx>~+{dWrX;W%|^|77S#J3QIZ5j9Rblytz}zquz@h17Mo^^CuFR5rINx-ybW?p znnFll`T2){1onhP;H{UHl^`72^~A}^+k_#-88B~;H)-k%;I-k0p@p^sARSC)=>Z2c zyE9n|Lq>w!13AydDh8z|XzLsh5%!*GwDshc(6KaOn(OGeBk}Fo*@!TM1lmf@fYjN! z-GzREJV8ygd6BXL_ra%JWnUb1D2Z#A`U)lcv{(ez6YCI zK#19q*18XLC&tk)=gsPxHygl+HXM@qut3t@>GpQQ%=%xsa*xt{S#B%2e4x{eNdqCs z_}$|)qBJOPS(!Y=DB1y3s+C45Wo_9sVv5H?o=dmX_736Zd}ieS7VCOOgz&+fbaV?j z+;*xZY&$D7z|;v4*(D%yY);C}hB248Y~V1%Al6eiG@F4=O;z4_+XsJPQscaer#mrE znB0k(22qIBNsZYQQs!vv<_Z?;YtWN@z|ix)U{d;K3}qr+F3|hk6F-#0+ah00aCw%3KHeb?-qw3@n`sQn zJ6F38o4C5ayqjdB^(KR42M7g(Jtpqu6LYMP9PXkTy_#js|6HPO}3gJ z=#E?g;z?GuhPicAV6W|<{7JgB&Hdfklr12X>|EEP$r{!(4U89GLcb^%rKHrZkS2jI zM0Fl-9D^JMM!}H>YBUkm9~gF&^E$bNCOPL`Tf-s zv!Jc_=$yhJ&Q}N!evXT4ew`c^eQT7JTvVK8LwvI)U^vZ>@8%8KSKObFK#ahctCjI1Owbr+lY63~qvOxq-Oxv%8Z0CY53rEmFv?%YfB^8BFaviT z8s#HQ_f3#yNk>mIT(yL^cM-6z*D{L@ZmB$Y@IcT{%TiE8Rww)N++%}h;@?S%G@|M$ zhjOUjiKj9=5&#lOGLzfnQ|1et%37>t55G`0YJ_P8>gV^F>$IgGL~w74aLa1PC>th6 z^B8!XyOU)}mxd}hp>`{A3*QLBB~MzWIa9S@`CE%fE~@i&#eGppTC5p%$)R{K@0Sdz z;e(Y@;{t7O$DXwFp{7D5_QdIwZyp9^b(yo&%|JOwM72h|aNcL(FJQkeZ=((VlB;ZJ zRA5|P9Q&0#>S@p2MBO~LfW?PELaR_u65n;9yU&^HHWO#bz3&C*+sN><0TmXj!*9_R zTCHydHQKh8z?Lvkrg4&1wSS%NUY?i0F`p|RGm8!y_bADvhr66J9@zOMoCPYE&TIO*kVdkqBHhkN-a@^cau8H{xax$E%looE_ zoa?X+4sX`c+YsR@)tOA^Rk-%vube7t{_S9%PK)X^?Fla9%;Qx4!+P=l3ef|3l|NI6 z`j!UN~ZSCgiyGsOdGA+va|{M%kMSck`ZUz}+cT=&oj>)bIu^vTTv**VWLm zO;_m{R2pNk69!IV93JE>*!$%EDqI|*jL zs{C~6C9VtgPk3*e27R@dc7Gk(yw1?a$^Z0*A|tZ(i3h_sA$Q%(jZ;w zjhxeq&nmwW?agJSYPl}x?M}9G zq%4`YZlE_k2K0+=Tu9L!oy}-FxtTGXIb}#s+cWQGV;3HpWwF>FwiUp6^LvmP2`ybw zW#g;>MCUGD(TX;6@vlS!f!~{^{^+iOL42B8bK(BwrEqi&Q>%uoy!-1e-%a{ z4xM)>#7vQkig%Glr&}!7eet@^bJ_f%`WGHVe!>GGf$Af<-X9SNxQW(I1ZHfZvm^( zIPJLP>`8t4xCUoh@QJ%-9fB{F``@1LymJ)x>g9{~$ii-BlfMJ+;Q*8}iCX{ij^72+XPBs5!690o6MsmY)T|h8F0C4fX zaavfk-Rk!*ru;c@pqP#}f-2-~-xN&KteftmtLa0RVRr){TU6Y6?t>30ER`W1xJy+I z*okz1D7L`yHo_Iq6X-m4zR~jCr^*2!3ly*c*XysJ{;>LrI#j{=F>ks#RI`afV7{sq zX~-T)MYneBV}B}<%Xzt*3(wsI9|)K_&2%wnZt|}DijyRF`XB>nJM7r$zge~>?#GWG zBfv>nRDI0*0jo&6DoqFd#@E2P*&85M06zYT@1J!P|0>>y^Z`KDH-024BRBV}e(}9l z!fl~Yxyr|q=>g`a8@pWr`3~Rwd{$!wGK&!i&(^a}J*Ad8Cz zzi$2**tY0G z!-|OQ?j(s}7XXrMN6WK7`o4Q@eO*9^ z7}T2`+#AL|@4`JLqd0X}u^zKVNfDr~bP%h#>C{Ybxiduy*j<7YsCz4@3rv5Q z3|vV7Bo~(ec;7gXc=AKJb|&6-31CMJ>6yZcu5zecs$qAA5g7dO$fc29KwM=Y3mi|} zEb#@#7VkpBHytwWA^}h-yfx;eL4BKip7a9Rx>LGj|=TB!tRq8(HSP*?}Pp z#k)h57%qA)m4PzWn~V}Jg)CuEd8vKPeD;skNr#Mu6HMX*U1GBrA@nksuV)*LAFf=X z>j9RiG?<9SkVk6P0~H2KaZ)CN;yj-R_Mo(Pt4~#66m({6-3oxTTiplEA&dsgRH`u9 zBY^c;1VUyQn>~0H-|zlZ{K^n$3j_)2F^7bkjt|p8g)o5#iWfgiORwmnwh)GD2xFXUcANoKWsp17(&fET+Qrfxo4jJGYmeev-J5;l7tZf+Gq z%GBv%V4+-v^3i9i0qk}s&^MJG>t;`|i?|@}Y_+!idI=AOU41nUF7`}0J$Z5l@YGE# z2mma0M*?Ogxe6hAVpSaoOXUBk0%a*QV*NQ9)gVVdNPTnC?@aaL!V(Z3aPWKFDNsdg ztZCl8Kb)V>*R6N0^Jv_?0ZAZGEj4I#^j)|I5CWvjLPXJDL1hO1#{noUL4i2Ja9GIP zju#MDl1F#I!0hjU$kCo&JwS&8C50Ie0rRG)-JMCmLA2aaqUF*($TY`+`bsu?)q3%+ z)nf+L_TzQhtQUfE&(r|1XJL^kq*-8vcY&UJ1fmFqhsDmI?qc*Pqg|;= z4*8-w$!zMa0K1L3UYA~l^K4;i^HUKXcJge&l zlDq6cgE#)nw&TT*SzT{coSpd>>n3apitK=>D7}+Bb-DrQ0iN_zL&gpW0QqZTCvEZ^ z`SuZ+-5r!((ox$NLf9yoGXxi*%ABwj>zpJDCUNJV+L9)kpuRgl0%g!?L~>v1h(V~J zkg91#@5os=Q)S&^aqYemC`XtS`2lk8<(7e!1NYSiS!0)#(;w>M54wE`{h(lZ31rK+ zTlxIWb@tw6GBa8Of4CkHezs<|`TR8Y=AN6^27|YOKJ(%P{X;P^v5OH;tk#YrkEl!U z{tzT8-lPU$PYQC`wt>8g?6Q+DFFtt%#Zd|CDa6N;e`K!)LKzb%SK$J(!!pcm7eHOP zpLw|AD4m;G{#SD#g;C%^ja%e)5+LaWpB*4m>|KX~3TBBti0J3wX!&}){8*M{cJE5f z>nIg2B>cMb^cfWMAyKnU{ z7)q#f7;9Q+oHfrKP-r;;hl&I2MoJ${FJB3jd#C%NK-~}&L)TAbFKqyg385jiN!xPe zQH^rOtzCwDM5u-WD(K15ui428=JsWr@6RSpIc4kVrOTc(yRkfuAs&ssK0F)2??wR0 zo#-JK=m^QM^B4c-P`{}khyjb#WD!&C5Qu@Q9#-DYi7j}6AkTP-Y~ECQ$LS$yq0DkQ zwFd>-pZn+&0rzhQoiA`$hfO|3Y+;D?KC|!r)Ae*R@T<{v?(6z-dD>ID!nO1*m%X?0 zKg4KW<7Fh@WtFz6nIGH}8-rflbK z+^IF`^)A68YeSQmb6OVN^EQwtp_+z3%mBsQKwhM8vl((wFR(2t&6iuCj@0ibEiLU% z?59f}H${6tIKDa;sszC=#C%_teu-&)4@wCt4h2~7!arc?f6({;-35~%>`WDb8ybeP z)fjEZYpM|7Om_ikeq$dWX-^8-ki)vuu?H`iEQBmNN}(GdKs~xGs62mql0ld=!qXC% z{m_jSIiM2P1_rqurLUpb7E}ul4zuCQj5MHjj~$d*YLY?ssrU)z-75w%1Az#_IiEp> z&mLU0Pze)Q4%$BP6elj+2cnx&;F$&xxBAc}u_Ae@tC9fCx|R0!_I1=NmHoq7GmslXR3b1# zMxgino3|E5fXUBHn0DL=_UGCfNsppi_2GF;0S%CrS#SN+{=s1|nIKm-^-KQs|C`fGgzJxodSwdjaGT z_@q-R?6P#%bFG!*U=`@Jc|c* zfOw$od*H9$t(F9(Ld>7%w!uVqV3haOuxrvWHpcl1!8^U;le>V}7ZyMv!Ro?HLjxvsb zf-yLBcwlo7p!#hLQwnxG4^P^6b)cxUb(Uw*sfEeatrn^t?YYG;@i4F2S zIf!|8n2qS+j5lh!nF49zRbimEPk)WbASCRy^YhHM?bsXUj5})f_Qg`bpI~eLStt-9 zhlV1X&@p{yIN+4@oMC<{;=GwxnPsu=xttS&J!x`9IyvgC!)^d*j6ybvHI776>KepT z3uBt8^Plv89Ap>jaO*2KH%9=2) zx?Gg*bX0vFt$LPcIoN_&oHFk#WAtG;ccQGGkgHuPzOLBz2Y4yhhI+qdsd*9dvs|1K znJW)G_U3cMB>WgcAyc?eAH+d%P)*+GlyIohXcVaAY*Lrn8~`sciWSbD1Jh=mxEN$A zf|`XgCwLKlB{mO`oZQ53qiqF?BuZaV>q@<@z&)+wLMdAZT>%DuGs}J0)U(L9 z`VGh$U5soP+XSTVwrf8ulOCe?hi)%WA^(5wo`9W#a&p;dW36l5uVVy`BQz`ryQ-FI z)Z{SC-!tCj_UNB0IR-b5t12(j*H6+!J=dcqO9nnw;JG8z}B&k9SB z-`dtSFT0X5_g@+nFMR<*)ns2Og|d z#Fy7}L!fW)pdJ<>fvb#EXoc)cux`rbFKclv_Mg}B0Tsn4u>20UEa03Q1Qx7XoX zED3Dtshc-T(CZ_ZWdxtFtyvAVrK4p6dni;gfVm%Va$hnJs#OK>-^XVKScQZOp~x@( zX(hx&_$4Om*asF8_5(Ia{^?**c0>FR57^Pe)$M}&b9*cesC0QZ5?g)6Y?Io~P&(?@ z-}l~Yn}D)}R242ET8nE}(G%!LnE-e`;sK&YYa|B-Tp_hIVjflng_vV_cd_Ds1-sdS z4_n)~b<;U}DBAMH$0gybXBMMEwC@*~i#g5Q0W2*Y67vZ{&U2cLDdzPSZ6}_OOATxd ziCozP^-_CS`^Uky;_w$APrQ)F7$*eNrtl1c`{MjYAa4!#^-5SJ$T31U@AxS*wSt;W zEO5=%Lk_@gK4n;qT%U!(0!!%LC(Dq-ipvPiihZyxCSR%n$DS1HYkV{zchV`#;}R<= zji)i9Dta97M^SL8)sKc;v&IGi79b?l0!~*am&a2I6-Z++RkpKn85yDCZ5|tQ->Uh{ z8pfdei55r7GN8Mupqr@hpgUEg*egN80nj}?47iV_2-t^Eo?@lvh|k_U2L@!yp%ge| zFBmoY97HT?AVGfF2)~6>b@mzPLR62VI;O-xxB>$}vlrf@9%OMj9UIZvXKFq~ap}}C zd31V6f!)n*tpVcl?IqB82-Qjh8(6g!KadO^I*vSM8)fl~;;wBePS-b+G-{jiglD%C%^N;_f7K zlL|@T9}`Ub8-0Djp!``!?-Wi1_X)v$_-AnZOK-_h}9$}z&p8I?qAbb(i^|2-{aV3o)VGfm4 zH=3lJf@(^U`B4sI?;KkjHdIL!Es{XJ*bY`RZAk26F6Nt<&{*V>}-eR2)bJQgh z0K{7H%Z)@Iu)g{sps=*5^>;y1j2(TBZK0}%WfSXpHm&k zai;dM!wa0*%veq^^q)O)Hmm*mOh=qK1W^Nr9l)Y0 z;nq7daKjaI-JD1xpveus{--SKi=lkjFcKW(o<}bq(}cts;u{tqkhmTZegOya!TK<* z8+gEh+%B+Q$_fj4Yr!Da>uf_d?AAc5_*`m0;k$PuEG5B7&GlAElmk&;`Wu?jqYs1l z>c~Eo6&nIV_}%x)=;$b+Iv2~c=aU|~0zvnr1u)6GiG%?y;HK6e5CIE{3G+P8@4;zY z+=VI+S@%Ccpr*1k%rcmEYtRAgMiH=)C9wvK&;mjrKtRG`Ac2Hv0NX+ofe|G% z21D8~4UB@aB&`G&h)KvI35qNRL226sWD6vr0c8;>LI6=#4Ty7YS5M8n%*#CAs(b7H zbav`Pw81jDzZfX!% z2cioMrok)wvL8WWws&kAx(Wny)n$D6fw9U#A=EHvgZ7&3rPirFIDv*NA%Q>pWU+in znm8#g({w~zIn(^W>UuCN2+2Y10p!umw`W}%qKFD8%@N9!Tgf&yp(sGjh992&4hny$ zPX;`kB&iW#fHnO}V_2#4QD!K|rS*V6Uxcp#xd4r$Iomz2b=L*Qwjx4_!wWWd+KZ)I zC5Es#kBL~@khd^o2MNVrH+p=?>zlyh%!SsN*+H_* z?lKVMt%`3M(JY}Ud03Wyb!`u>`?j8=FbsEEy6AY!al@uXxmnU5D<8DO$6p{;Yz7o) zNrI>Ks&f0aCzhl>g>^)+H#^JebtbAU#AOX zd73Ep>2|l%<-l%rn*Dt83C;>Dx-oih=T$6!r+h9Qc<(bS1Bp8guXxVo#a1YDiw7i< zA9X(FUQw2Mlz4)PARWpm8GpB*`bxP5Ihy&(r81AdaL-&C$)c0QhLwFkUt9si zqgTT?sc#1-W9(EQEU@dH=3*nV){O2Q^f^;GT!w6H8RldW-tZnxjAT(!_*pA3 zpZ=J%Mb^c(9+Zs)&-Ux`6*Ro}M$>A^*0}LD_Rb`zM1|ML;;Q-JiNo4Y{OMkxFRMRB z-)#owC!gsKKH-)y2wL|36l96Utg)Xf&gxEy5C=ivn z9+ZRGEgls!sDR}o9keXX6UiPp24^2=xjR0=Rx`p1?6<7Ncx%%fr{=-39{?=l^th#% zNW}3ZFW}i<30?eMN99Q2jOa*McGJtjztg04GF(E%9ZtIC_Hg@<#d*?xj*h6$GYF=9 z7$*@KZJR`6;;kgg4PyMNI4U+0gc3s+<6rQeJFD)gU;BaPRsKea;v zF3uEg`UQuw+)pWuOqd4yU}@yqG0Hv-9ZMX?XWO{H$@|W8yD;SOK=UmP9bEz!u3~4+ zXkGY9QnX=sZVdXGM~nQ>?D`Flp`jX1uTq7A{sM^nCeK3?x0p8Zmk42&=gl>r1Jd*Z zW@qGif;*ks6Pt?d#ue@k9NV`neAtJL9;bA7NU;DViV0CON4{{C&L=YmQZT|A==O}x zI+T*y3oAtKf~S6!SjS%ME|X(_i`xI~1&=Rn9F3v>KG>uo+O-$$wZIX+9oI@^OA$G7 z>YF#cGHEMqx9cXccTp~FxAg*MaH1TwL@&@#Naa_1%CSOY`x!&ZXs;QD?k0Z1D`gO9 zeDpot`(Eqe@)*j@M{uK!UN!)OvJ2w^To=X_uyWLbYerO;A}K?su+>BV^XBoS9-avr zh8{DIkTvJn)I`-Wq7zRbk!$rGwWjSy_?`ETf5a#FPMkeArst-Xv~{*GIAJ&ApM6QL z=enF@{>_{vcobbQulRgwC5xM1HG~+-7~9P7R=V>pr#PF$FuE*Cgd1(hl~T>A_JilL z-$}43;1l7A*Y0~I*YA4s{y`5Id5qgkO(s3V1rf)1%r1kbLx|t;4{i)pA-!+NB#njq zAWO(K!?=ztBG)h78aQ0kb#bw%DDGF9UStxczE{2!t5$2ra9VaJLy->Zm{BnoY0t_;Vbrg0Qa&x%YLHT93?@2~GWoYYP>B zHL_?t-Mag#ZDouKCT^Q|sdY*;2R(@9jqYGcyV!u;(XnPWeZ&{4nu6_HRx8Wag>5L6K9ZWM#9|yCTG-iM<-T&6`x+;s zxufHQhr&EOHh+JD+s?s^r$*1I36663fvnC$6pHdL@-I=UM2ZCpWnC{PBc<*VMHnP= zp~9@MFCKVen53n0F!)lO_l4WJOgD%;auO5ndC1ICa|p=H8hrL4k*OgS$Wi8Ge1T4V zwsMI}()(b~`d0Kr^sb%XLE^k#>!n?NtuuM~A`hFtnXZ3}xVmn@dg8gvQ8)of_3!)J zJn$Qo&wcn0h-0LQ}^DmC@DJT zFO7Q|7Fuc~*9zDTS!Y+Q=_c3i?QPppe!b`0ZPQ=Wn{)RQr%t9`ansF!a}krKRCRHl zKR!QyZi~*5M~-}sgj>vQC5M7exW_Ek<7ZVky9Pc$c$(FHBHH=HVELm_Tz2KsZn@{~ z)}26!jS*k$OlGmETZU$)u7Fh+XW5Sz90`FHds{Qu8j{o6d8J#^I6^&3>>bCeXsU|g z6>-b-NTL;G$mgI777%gEyxqD;-qci~5$bjP0vd`&C3HUDs;sW3*&eai%fFIP=b z=!LPs@48HKj3DVwj;laLvM{Dt-3H&T{kmK3Ve-?s)$O-h0K&YrNZCnR;R- znVf}vscUy)#l;$IA_Q#S(K!#;@0Gvfx9TgIh_QNknx|+;VvJV*9@d>q*}bKLrKdRk#e z^W@b6^VW~trIQKg=-wDtO?zanE6)#AWL|%YF2XdNie3LiDY4N>ZDT~}E3_G@eq2fU zQ1?gN8=nTAs)6AKss2^L))XZMF9u74T6*^k517pnh78YTcAjW#7dcL~b(K0w>+?LdOP9eTwJS^B}_dVp5LZm>iQ@6pyyq1mcTC>nZ z)TmeZ!=K-J$30P4y@RNwKjNkRZ>}slHVIA0{A`MjBrH#NWztTyrzj=Y{%nk#$fgsp z)?T?HmLly>5&T9;Txh97P3gwo#%N&Od$~6|t_&V4D#_j5I4vHB#V@C~_fK={pGng# zv>bzvy?z8wUT}8Ro^V^@tw7n$rEw;&z0DMfiH!WF7abWoSM!`^x+ZyVzB+T9O+8h4 zMd+@4IQQ$0bPbNS0*m&#o?Md(F5MKvWf)$WSi!p=589b5|7>JBt^Yvk{&YuLu$GYr zziQt7`nnsZ4GJ1Ov_CxfUKc0jdqHAnL3-?+Ro3FT*ZQEdxEBm^@b^#t+e;GLv-x!y zI{7=f%<^F}+*Lac!yI=+Lw8kd;xQThGkyCn)WP#r`$G&$ z3JS0Jta~oErKzRVvBW<5G0#&$S!mPO{CID7`_}EZtjAq{MwpdnLhUN5B0J5geas_Z z?RC+3a-{9jMET~=$Y5UzVOG^N)ucOKiBftio@jG-O7V>m+0n1B6TK+?>9BuPY1$k$ zuYl(_@YOk?w!oKRdRh8Hb~9mIde~A*Z!xK$ql`*!W5KsX&uA#yx5=^G_!`KtpY3y> zq-=fQp;Ge1w7ia#t)!HXA??BA=pO;1OLcWHu!+sRMK*dc^)3a=^Hg+rb%#4$>zQjy zk{|oSB%mJKzqLAZnoTYF&V48}5%gNejB@XNk=51JO|Dk$XOOSC4s(G?YI>sVa$eje^7HcEz+kt*cMarV=cxNQsoR6@A8f^Ud6qouFQux(zi;?9bMUuC2nr z*UA+HQpvC_oFwU^W>si1ZZ$o)_t5w?4m}akc5%r();Mbd3o5?!)?uzGGLL zMX$DxqOF}&Pf%PIah{u%$Yt@!t@VHhAlPHAmt|?-Ve<{8vs8Ss@JL03CB8XGk}GsL zg!;+;?)q?Rt>cAbQPuUy3XzY7D>r_;jMzK1-ft%%VJa!AY)izbG(B8Z#igB79pm!j zaMg;}$HOcxX};Xj^Up&$w6>CdYI|(2tq#%ow7n1s|4@zS`mX4$s3? z?nLl1w~v;tFvy2ThI1Q~wi7z{N`Jny;uTA7*pUz8%q^D;pP^QYb?VZIpttMF&`I7+ zh!Idf5pQzx+=1QHs2ddy2WzFa)tH4@q8&p#mKy~ttwWh-x#?)>_F-1dJ+S8G<(-8Z zwK%Ndv;5_>kqg_CzWDX$w~5qGoP6s#xtoZc63Z8oo2zJV>2 z<+JKGQtigcbGJ1E$+k6`u8qFBgHd3=qN;PF#kRso1ASaPj9sgBSWVH9(ASC7$Xzj3 z9C~PiR=|3pjWzViLG)?vS)1X`Vd9(=&?RF!=_2K@YE@iXhXt^tvs`}tqRuaYbaftr=bn-X%`LZN;3De%U9k zzhvS0^&F4fX0<`WYPV6MHm5+^g8`2)YVbv|Vf{?KP;M%57cL zFy4TV_WLtA6o zxQuEIskFY#vx{+qLSkVeZ#v!eecmA@Rj&+7n9VAiTXH8ZnD;+Q^MfTLU4!h$;~_58 zm}_b4t;eZ(j~Kjm>A-I#hLywjf_IQxVauZ>}v_UeX4oboQT*)3>mGP)DVV zTp7sJD`&0l?X+*Lq$c>2lApc*E(OIJcaoM%DdMvM9T^7W#1zH*Qp?aa$t=`sf7cnO zmZBKYAJcA<_$qfTH!rL7agJ8DVe9(G=PWUky>>SKdsQs87k4~6_weZkx!aandAiBO zx0a@(MSjpIzRB%1(jMnj3z!U-3sj94oV{HzD8D2Ckj(`hNDx|Q649IRSJ z>|t&n~1ztomOUt)%(XQ@9aQva2|UCa0L=xq2a9_4Rz^wrvW5ve=;Z=DZk2?NjYdsbsfXhgsz_)&ugg zq`rQD>fw15`IMJ!(D}xxEA;_x(JgZKW~+JFS6yIPu~wSe-36&5BQHw~<;!*D#p|`F z#0GRMBwyX^*b_5GX$wRS?R~0MWoDfYHnCGtI%OH2)srfCJlbXI$$@95p%rj_K}?I8 z=%D+9n4CliExNrrGhv{XrYRIB-+%VlXj)3l5|0Vyp%;wZpl+;BASk+i5Zu#54>=9` zG{{rAPF`Hs?J5PoBd{zz0XqcK#;E19jS37MreMw&DCW&kMRL9J)$GQP!f+O4B zuyV2jLG!1=_8lpu^|?W@)aL|YMT4|@SUt+eWQg<@K1?f6i&j9T?ZsX_Rqpxu+40K# zt}FvuF>d@M`$*>&^#CgqgZ#Gaw#xRymN=ftqo_a5@XuZgeqm{d}P zsvo2}V`b3SErnHkTuiUEj>%0rB_wvKSH;;*I8E6YH=3|sF&(`s-lsOLshq@s_ra|h z)k?A)uykIaSNAB&dNDbswhTSU0XyF!X7l2`Q*SX{i(S0b+B5HO8c@%%Z&!&ps-|IZ z1J_q4rf;gmo|YW=JdTw_ZJh2H|D&|SvNtcu**(edNXL=KZe-7rVvcqk@t%w8e%L|# zv{b7h-TCDMJM!F)PamQ3{4ri$wYSCL0Qbc``(&wa70A=z^)c~#JGHPA5rFEn5Jfo+fDJv zn47HJ{7LI&Jy_~gS+)AXEv!YnG2QuylY0vHVux5{7qw$zvTa#G^NLF-yT*lX180N# zUtiIPSidy%f*O0vvLp37p`+9jelH6J3p+_CovoF99@7xE8Y9(V6H$sjl3`Re)SYN3 zQ6SOzTF=GHFYQSFDK6cOr2;xByED^6iUzY5MrnG2TpUGOPqqEeImjjtv5i4x4t)Rq zy-Zn3f3!(nz6p+AP#8Nq*`GpC&!(7OWlpKkd*XiOaFNDfWg16`an%=klg$xd${qWP zs!pbF{dQG^!C^YL$@qwvbx_>5pgZ$23Mf*WXIZ@+@@9z3p-ujEsaw1IjX*L9Vex5; zOKW1}vs_PClyLMR(G8-dxua4? zP^hJVr$=sKqAE=8&kH@RZLHUqWRW=?dvgrp9AW0M~$eu`q z>UoN^O3X;q$^uQ(#N%6uj$F2t6sg=*2V7 zEbY)+z7ybRRge@Hm>7}@i?x<*&MEgpj!*UC{d?__7ojHxkD^Epj-Nt#zYi)B?@abu zO;aLb974WS?z~5XX{5x2RxGh(`Jeafe_XOG`ip#6-hs&CCAeBzgK8pF$o2X*Oom(} z)5%|ljzC7XPFATnRQ}Y~Usp#ZkepR$C;q7R{~pHpk54mYrg+6kyj>EHT!Z7V8s+9W zi7$Wrb&qPMuKhLevgjGjeG`U2mzqBh=>7g!Z{?tX-N4A7cMho0|Kvn+@s1^E?EP@V zU*8amoGGhr#vdAKIxMY?C}qhYxI-78D$ok{WDk3c{yhhJ^4Jq0)Gb6nLlKtHcc*#2CpQscTkaKfsG#r+qq076 zuL%w01XXN<$zGom;%%Qtd&|FN{a&*K?PbRGr(@?rRyQYN*Vl~P359^DP^fA}`0PR8 zOFSZDLDHg3Q5i&eci!>U3s@V!=R}^z@p?v`nh|JO&7wt|i;(t&VS6IhYZll_v9Qy$ zHWXSyIxZ`(pkSZYX$nesu}Pp66;wy_^?^5D^BVFPBrO;f!kElspm3S?JlT&Hc);Gfic}= zpcQi~(8$#7Y-?|KcJZ{{l<6Aq@B1mNhaMr zxED}lzJ68FEgJ^j`_JtB@djfc$qVKN%eLJpuZ^H2vSzxon-{S*y?I|$)zq%;!lWE) zVAMg#0IjG?P6c%BMIPH&%0ECb+T@!xuf^FwBZK`!E+`Z0RnHvm5>)Q8cn^Vqv(vcj z08(d@+JM!w!-B()+9yD546Z@zWLh?dl%n8U^cF}Vk=Wb#bN~+>?zYLh(=84#p3_95 zz(-~~wTucWC3YV8kFU=5wughJPn|RYQu(eMbDBfbI%WGV{w*6lD{hy)Sh->;Mmb2# z^xGM|QpYs10{Fg%jzbE9gZH67Uys|E$*w8_3eZ+;0w++iiVsVtwdxGvrPcpEJ}st;D%j%~aqUys^JLvNQS+FOT* z%bC~~*igwKXWVDk{~((XiHh^C%a?L!2;<6x27Yh9{tZk2%2c};ZHBRijt)s{v-oxf z=KlSShvK^{YLxFnpNg-vNN3uQeqC!dN0HgCO`;*^VD%F@aI>PJC0 zEtTQ9;w82Q{rAn-lvk70j}K%%`2LYznf}p2O+;Q65yr64ljM&C+IjK44U@9TgqNJf zlTV~|?iXsXoXaJg6R`e6Y-=)cNDu& zHed&*4<{H_xM>1OoHRkdUDdYcIgYP`hNHQ+-1T8tLpi8T!jSv?>YC?LJxh$3M#N29 zmCNr8L^|n7%JI*vVxef@-CK`gCO9-RCUuqpSZ+MRg!_&ryrIUtJ;450Mc^7s0Z(Xf zfJTV}X1}!@z|p<%23EuJ5Bo5!sh%;G$OiA1y-(KFAjx2NuS*w|(y4veBvgB~8Xq!U zk}Fl@Q`U2KAdW&%1drzE(Ud%M5WiLBW7F7w5}y;}Hl1b|a>f3K4CT9JVvF%)2i)Gg#*ASgAWSFDIuch1bPd!TPyzIbzZ-TnGDZd(TR`I6ZmJ2|PWfGP3Qp!d zLQ;rlpCQc~`6^za=u`*|-RdyVzpL&)p0nf`#9BUUc*|zet^e>fS?!hzS0j{RLkvo4Wa^O>W-+JWPU5N^rdF>0*+bfbMnr}n7ZvIuG6>`wZ&4~*xLS9q~F;_K?WS~A+v?qH$470>&Xl2L~*bleNqeD7rpIZK*fjiqV$bL25 zfp}FjzEq#2j@_d!U^<4Hiak!PNPYYq{=xK>#(p*Qp88MwE*&$%l3&F@LI~wxM~Zdc z8t%5{T-E;G9sY*W^NKnPFj7P88tGIXJHQMI5a?fgYy4c_J|2Zj7UIBPs{&8NkSELJ z{X1I&5@l0^nXX)ouO0&*>|1$H4bB#)2yzgkP_t>*gQKua-W4H*8ucHc-?bv6cVTqr zqj=k>sXY9>#y(8dp;^g1NE^h;=rLn5t9_ljCx__nM!Q8tPzlcSD@2A)USed3d^pe8 zpd|3#Ogr-U=+32`=t04-$dC(fq8L)mj&{zoN8a%Ur4>{>-b=f_6bVeM{QzdQ^C+sv zBMBdtFHjpb_G_UY(@*dWCPKMqX)m78#L*{Nq8!M6$($S^o5bD4Wk+OjL{v?PkI$%4 z^oX?Sef#rop&)Beffsip z2>ta{AbS6YfCA0fLUInp$o4i{ySH?$q(fEp#idd<6dLimK#!<@$f4%a6#b<~fYYI5 z(X?HexpEAz*N{^I?a9by-B_1H{qpo*+VMYmVQ?Uw(pUTv32zW}H%Ux^D8O(|%<4Nn zCC95Ms$+K&&@IYrMe*R8tnW3$+OK<+AjzPg>!lXw;7YEgI znG5ztM}l64Tj9fb>}I+$69I;gw>q`EoEFQksaC(pM_k`*BqqON#pnLQGEsMW@ zypiEpvh*)mtd$!=H@v;`OBPFA`r8h@_!P=XpMSRa%-`SeOy)vZrR%R*@ShqB#6-RL zly{s%dwXtw5xK%$)mZZ@gC%Vb0i{z>70arn}3QBp!m-;ygSo%RByW(4fo~o(U4}5c~K67(t^$`gMN@R zcUNb+i}ma(I>CcISL{@|v(!*D?74lzi{Y}dcQm%o!d@@7$Y!iAIEJha;G&9Se-MgvlHkMHz^rVo{b5rVbl%>evWQtiR!ONC zWN5b^C4+5Bj9Yr9L770S0@S&>*od(l(7P^vsx24|`VZb(AaKJ@(9z0C=CltHnrLD_UV4s6+-z3qAIY;LVC%)*LSKY&l+3(8^P z7;3l%k`)7DI)8I{VqSSEK31|efR2Db+KjZWv^Jm9hA!uYB~Co=0kiThu(+ybk=>Pc zLXb2??s2A@_e;c{qN($qpJdtE*SP5b#%h1%_S_7i_3&ff0-a4bl}z{bxgoy;6xXVY z^|mh+4YE^D0sAjba$B9o0tUh8ew}Ph%mfKyhzBpqY8zB(-r&4tEx`S`aVp)EwJ8v2 z9z$>0)Mj%&Q7rE>09maZyxVuP@H^1Zg*A1YX5)H4*Z|g`)Yn{*C3PO5IyygwuppnCMX&sT)o&;kQM>j#yCK;HiD&oCR~K9?J5TgtYj4Jh7bb-Gi)ea(7%Jlx3o zFU@S^jA&-bV$jUZl13h@oqM7*BG?SF5WC9FlWw3ViEdgvMnXtDdI%rO0-$^wV+} zw}B;~?+=AG{awCWG*?Y~d`OODfGbIVpESl}O~F6|5GB26Pk4%} zuw08nUc$*>=oJPKlcawT+*^^QIwlWSOMhZaD__}(6NE&Vxs714&W!USs5#pUpe_9a z2{5|^Ja=3;bn@OC0Mw1RZAo?KG>_pxDV9*$uzQFxmg9byYQY~$L~+%m^@%rMFMUfV zP61u$%9u2pdM8G-*Ovq1>*Q5}8LA{G!&JzX<%IxrgKqvulm_}E)wcp$2V`!l-PAA0s;!gWd<#zot+y$y+~ zChcvMf_lAnSG&cOmE`L4$CptKa!+q-WcIs;Z&IPq)cL%eLrucbzOw~t z+jFl4hn~#|?%oe4p;${=^Wxm4FRP3?w3e;ND8q76r%dy)TUK1eDdt7cDt^=OVHIP(MuQ6%sI7_YDUsY!!fD$Rc*BttocP_9sy$wt}H`Z z`5Ho1YrdHh&MG(B21q-=q@`{{#HeRxpLXV@{!yLp5TA9-6Ko!kWKM zigBygEOzrXX5Y^?zzRq(*;~9iN1d9VU`i4*JGF|=bqK2LI^h%i(q<)z_J3>Pz9xvh zxZX5aZ5E0Tp~j5+My|fC(b)9sqfMq=ecP(lk}j$L_Nk`Mv+3N?am1IH&0Cv-=lopp zDoU0clym;7mDcv3%DDvExt$Xgwj*j^HEFa+s?qG!-`LF6403IkR3n~xY606{Prs|l zc&1}Ky%|IDqV%ys1sAJiC8*qer)_mDy~;cA^8p2VIv_G%qPtQ5L(MO0PZB_57*N_Y77SO#v;zqn5kq zpM{>$$3DMVoA4v2EvF&@7*$OD;xqQ8w^(xALkPVXo=DizbLvd4UVg!mwGi2wG5oyVTH4L8kmgDgbVT8a+n*hz+wO-f3wNHxamq-rQ!AJFm!>zQ z&l}%YBFe@KsrzS13b70>vAHwsuu8%V-6%d3vVJ1;aw@}J@;~Aw6)J2dNk#D_*ubrV zE^n^sdx}ZCWeL1zqn$`4gh^3LDXN%;-tV=}za(;W^Bi+Jp|hH9!?~l%QIXX6a4M;R z1Zt`3-WPf8*QI0^f2lCY8iB9_J>D3x7>#I5^rN5*`IXWd#RCsg%?^_rhD7>-J@`pv zo@?6mLW-Ed{aXeE2yEG>G^-4M$^CT8KkYO{r-_-MIzMWbo20hNLm~o^@vI9{d2Wfy zRbRmw&j-_~iLAd)0a8SDeD7DF#>6I`&s!EI*+U1F*dIrsE+!Hiy~#k8=;WIYG2OV_ z;dlYoDlXv%WU!2%NR%`SQ4%5W&0F4K8e$twYx95g>S!52GLIe%c~Si1TYLkBrEhF| za_%~s&r14|lFveJ=q2fgTMQlrJn~7jND?V2CFNEu?u4INjO*8J^{yGdkA~J3zBh@~ zX(1;z)zDJSmJpxFKU+wT)5?wslqt43&7=sKty|($#iX>Ys0$6@Jb_K^`}{#K+ya$* zWn#rWcpE827pe~o>G}IDb}4tAjppeBXv+enuyj=nbn z3)n)95#Kx*32U!}fm$a}O#;kICC2Qg@<}F9LU&tA*$W^~!rfyDaxETw;v|p44c*cz zz^{(jx~bWvMU)cb)uD2$m*lkmNJCrs;%M#md@i3%kzdCiw2z$3%nvVAK`Lg*FHWp@ z$PGs+HdyK5jx($%4S$l#XRo|(vCuWOE zla}ul7C88BZci&wVGK~H?T370>!*z#-7Ow)kWY3(!Y=d+9MzhVnJ3X=f*isnA9mOJ zJ+!UJOA+^|AH>HQI!%41i_^E3W57dXu%SfVgXU?#a&EX95u7B#vQ2n|veqP#lCZ(* zN|tffR``#UIESs3slDxm@1F<=%T!Ie?RqTrdk*#Gm%Ja&&gn`O6IXc?n~*#cO8Q<* z&C0>rb$I~a$1Y9RWbQAvIrc{U-fL2Rl`^06CDg{*fSp56D1HCUbMO4NC`w(U_UMmj5S zl6zsLrlGIhM{oRY@cdcz(ucUIjmQ%_Aj=Hz>odR_m@-wSJuJ6Ms)`5>2U`N@0JczA;-01~nPIHS z|KYJTh0y0qcm5d3*5IK+#A)|TCA7O`bf23duGYGTD%%}Tf4K)>edp43j0yDvNO10o z49JA5;d|KSvn2H!)GT~`jKz{&AIo!>d_KjkKZ!XrZF604jr=ShYkS^X8qEcq$LjF@ zUboV*4(S`3+%Qk=^6?sPX}Xu+mdv%p`*w@r9^H6cb^F@Z`aA<&>cul}FBb7YF8EhV zUvct?tOH&dHxclA$=W}?!j$W`V*T}ebyd+?EVaP*!Q)+NwGo=}4xLX3t;rVoCyH#T ztRK!bMrGjtMnAXngz4*!)cs}vh*>C$9_P@=oja|6_vw-Ld=l>sq({FfP=C zvVx#72idCm*MUMlmTGX=%*reMi|WK*qS3ZK{x%mZ zNtOr0^fA>=iHuf!)*0hkAT>>yPHZ|?Fu^kWk58$}`qAcNo!P%}OPv{fvnj2hZ2>q6 zdchZNoIr5u&UWOx->ztsR;4J>nAcl96e{E+WL>SHyZ&c%8zTk5nA!b{di^g(8$^Av zu%sah?e%Xr45D9HSWlS$Q37#>TmWCB=TD&=NPdlOs@E8}5^p>qI)w%r_MZ=Zo|*Ye zx_a6V1aXL41o1d|VP7P@<&2&*HD*EP++K|>yXmbMhcK?j%X+2v4F=W>+Y5B;^#p?S zeh!GRreW9oR*p7U{W;HmvnCLA?)&2@zit?E2Pux{XVOglbCyJXR9Y&SBmkEbKIirD84Lh9bz$QIJPsr-eGeqG^v2$C;*ZukC4QU1A2|HV#T zJi$!xPUiYGfq&1RygND~A8h>p#bb(0-}k4F%m01K2qrAd{#yALT>8(07Y`YD%?uei zWZJdQPOI$OW0`l6QE2$ft?X41>;L@xd;z*^cM*OP?}0pzZGnE^UC5%&*c-LMqa!8!gkwh1n8RsT_X#3@jVdcoDdnD@AHf6xUt_| z*)HBOQ&<5HL&;O_k-T`udBi_8-awo`NXzv=LV7nBqJ=#$>Shd{8}Sf2Xhc%<07mSR zyVnW*-AKK6D$6ArVh-282aR|+k|z`J*m4y4@r((QmRS~cqxYiGg6(PS_ zeA#0atgOwo`4>L-2_n&lCihXwrTVTSKR&A=vs`oJYJIPYpN38k%$3Fi_f<^QYqE*& zt0=obo#}_0@phChYec)(7^4C*QzgXTr=BHta&d> zzXUd2w286?CJl$`ka~;dBAr*{YCd6j(wIXfoloRAqSu;ye1tGM)U#}~XO&wXb!uq2 zGM?E<#cD~}DW;Z{AZA~9{K!MZzCRdqmt8@bknPg|*s&)@H9C)XI6YevtA(LNujQxL zcGXwQu|$tC)3YT4VU*BeLd8vF@U$iGI08x6H|=OjM!og8AA_}T!0adBwH_i&RvG`01Oc` zu1TKfW6*g8mwauY2`ulStKa&>2QR03V8Io1BSq%*y2r_tBvIIEAQ5rMmI~>+Jd7T} z9BXy6>=ZOB+^3RlZ-AD*PT^p^NPG+pgh|KvYw+y2Q#ysE2>T2dNR81JGmZlLQ>U`h ztT~3hgET^~bDZ5pJxCvTaHObf9$ARg;6hXCnht-(G=q-R>>Pl=H)LPXA2iA`zAdq( zMBPKG07Y}B=wJ)@cei<|2EcOMjp$1oXJyL5S{Sh&(yT_ZPqEn(xC)l22R_+KPCfJG z%ZhwVnIlGG-sUuTZVt)H@i0B!LTMdmf*`>RvbyH`DapyETfks9iqSXjZ6A`ZOk!Mt z?NBSWBUBsg(l}!y%n7_X3&-lCcmjH6VdR=Tn_S~PLvZKvWdw=jObHSk)*s85GSmXE zB1@gUp3?tZTdl6%i$XR<0rNF;C5jj$zAgwQ^#%Osp61V6saI^P(9_c8{*rfb%NOn0 zL7?~Ek*m<{Nb@>Yp@*uYUa?h?Ol2_Xyn)lZ)=7)A)y7=V!Q6fGd^&FR0OP*eeqE+; z^dGP=AW5ks&md6J549r_{-Bz^AL2DOeIIIWhjE+SP~F%fK4$b=#B3Gf2<^p2V4;nr zF_u8y!k*!Rwn4OoSjmlw8%NJvX6)ab{&>gZFquKbmzP_o1L!J+tMHk-hf$~nJF1Nt z4W?TG-wLGF6LI2?IthB^=Eo>k#Y9~eMm}UB$u{=@hnL4z*Kw83qZaUVt^or6>_i8D zQTK&WC-G}EFagcPo8-{#4^asEvY|RqC#QAq(CA=H+uPd{m-%}>g=!g2Wp^^3INNd$ z3an0+e2t|)1>GZ7%xYa+bsjuMmDc26<69R#4vONALoy8{sK7}9bWLF{iSB|gb#0mBf|sL-p`+EzR8JPM|8>v|n{DrO?f->x=q zD39o-kczdkK7pZ;qrS)y2YVtS$?h`Ue3gS3HfO)FRSQq2CeHdC;m*17@>DNqL6gzi z!1du9M4313+eO8+oYHLi3KmBm0_cwDO051BC6bi?Bz~Gr^)r&c!KtT(RC&U)G&F2y z?ahMT3Apy-5W`PxzN7g**GQ72Br{zhZnQ?G|Pb&35d7C2&@;lWP=+lbq z3izs3lT2I+l!vX|?d_(9_Xa|{VNr@>PsE{gvQ-wSzr9S7Masp}Tk^wX5qpZO|?2@U1n-to3+XxwTQ z#gsfOrD%17HI~qi%OelH{iOReEoz=ql7g3zOT|jopp11HDt8@fzbP4E5#2I2w!!`> zW>8ohz!7JEqSG{5>e#cFMf^qjq$nAKDuwN(lOhG57B!2m-@u~1%c(C~brflX^`XU= zsyafG)fp}3j^%rRo_;~SqLH!T#qa>^f#;_5zSZ(c2hgk<&gb3=u%gs8RV82tMJ^Ho zL-ys-`Dto?)ymc&)uK`1QgUicPttI`38p8PVFBewofaS#o7j0Y9*evUA3VV3ku zzHnrh{}>D>;ZIMu=wx;%0dKbArbbN^>t*#dHKH7!RIu7~5aA7pwl!LmhGM*R4xUu~ z#PL++cppms4Amnf_2B4*N@Vr*0#R{~!x<~`*W-mvZ!n*B9(2;;W7HH-(^-Hza8*r` zUNc>t4OGw5VxBd>f~YoZ>X24{5~1Cp!0YXJ=UQ!+^ztVbI-S;fsh}I0)okpaTCm@s zc`fcs8BNr6P$|+RbSwrT25;b$nv&Q!3!i0d-h6ssQ~ly=kHAN;adFRU@JULfh_BO= zw2YgAik1}#clKddA(e+1v}vjb>q~>>o!;Yz*x%sf$EPi%D1^q2&0kkoO?j97ZX9-{ zxwnjQaOn5=a)#3Lfs=6c4cc2H<(!`7G4qbp;A|z2Q`w-$bPLSC3$~=0uC_>1uF_Ug z?U>$hYL67K!8`iKOs8pB1`jIOB%l=f-^XE{4=A@{aceHHqnQ5MG^t3TGm^hiJwy=1 zG;0{`fK(ngFF{{~prv|Mn!=2-roKeqtupD=kLe~|m0B%XafbYOsjs?(Jz&6(D)Xv9 zI~H{dO+c}svYr`}YgQ3@Wtrym=B{Q(;xk*#j@(vv$y$vW&Fo7Fk>{LFUW9A5Wv4p4 z9`E-^-k@4e^wyf%=?5iOculZxpLZ#|qoY4(hJ=ydlh;L@7mLir<>+ht;9Kq`3?CLO_%BCYq0o7!~U|SC1TQ(M36jC#o&A6>6DNLS?@7J z*jZH2xnGF^fu4#JS5ZA`2kS{>ML|iXTabFYAUWJq`>U`@byq`}<%=TeF|FV0d-7}A z*_8T|e>KDZq|Bkc|Fg%2W}J%4Qp1YyD;wcf4A2d759_&DmQ~nM{dXcJ&!Y_U-tHgZ zlcBd8=y7?+;xA6~pMcLlksh3Oy`u2;Jr3P+7ucB{heGm27oUE7`ciu_BzwmW znF=%#U4LQ#Fh%&q2E({E8vexv`0MM!zphzXK@d);fX@40kixpJ zpxzS-&R>@p@(~()8)(k{Z~mdGs+s}y7x~aXsUD`aw>(Be;6K$uE(dk-d57r6uEM_q zDoOI;ePZhae}}8vdSEN(uTw&~aX7BJ-$z}3KN$`PI+ z@Ay!;8scP_&DJP)GUodgv~5>8vwufhF0ip_X5CBr4Ngi(5GIqUR5)ei@lV8Gb~vy1 zXY*#~zs4R|&3}*h!wsCR{+an}iv7uC9BHiDe%Aeq$?&$d+l+@i{cGGVK7E~LMTn#v z{%bn@*JJ*kN&p8_AKc|oDSh>eME*)@;k7cXqnpbw|6(!^gel-;es47RSlYSYQ_E!d z4^WaRvMX++75o=9{QX{p-(jCy59s;XfWpD!D9ViaH6@;4M`u! zUkiwS5q@KG5yifD0vL3%reBhHONQhFzryg4{F#_PKH=`)6mGS}kmP zKL?3ojTL?**n@;B^!WCR`fVEuzJVfi5#g(Xc3}-@zS%pkS~};A(Oe9tuF?M9t_`I1 zi;+!b2F`<_Q~XL2y9NB_E!7~t#%FBXlV6KLK&aPNEr<{(a{;^BskQCdu~#zUb7bcl zX8fq-fE3fQQ|cL!-JV21#MM`ho8NoGxz}bcI?JgL$Z$QatsW>k-u zL^hSNYh}&OoD+6TC96U6-grC@^3xJFJXh`_A;37Jf?bGeEuSP+G2H+hG=!l=dJH5B z>_|)Xgp3H9548#pfN-m{sKU%rn#(K&Q4rxr(oYk$GLH+3I5?mKNsIM1r}L+GO9gIt ztu&U1N*@WcO7}4!;HdaLc?hzsQ=T&MqFS&_AAxNVw?|tA*}LNAEsV`uX5&b@=FN#hqy8joj~oLOI?G0{Sa*6_%j5 z7$1cz64bOVsgE)5&Wc91({`6R&1j0i%Tfr1-G&W|Goe$^-OP>#h%^;nDQZkuI)O$#%>6^l|f#+VotmFcIP;^ z{)fwIV)H}Ey7xo9SwFN3Q_G}N{XhucCSsSH`94esYUg<}cKRW_4&{4b8g~hF=0y(U zxBCk$-as*Iw92GroJp4IM5iR}X79JWRLW%`VkY=-PMX#=PnLhouVW zwNNolxjPS}$6=f-}M4Z9at-GD4kl>tQAOHf5`NHcgNA~@?vQMHyZBp-FXXZqYQ5Vd= zuuLeVbUdnlJ$`t5Wh(#Evbw1~WZ>O{GA5=zq;W^Ve!*W7u|DfEm3t>-WhMnF=v~Kx z<;u($+-I*;Eh;jfLU(8^#m5;``0w*0v8omjah=L$VWPj#gXBJHIUPTR%#m03W`*8bcv zS87`5ab?Ttw^CxdeE^#}a}D#VQy~)1j=dpfca(Im<0ywThdc6kh(s4M2+2b3sx)k=#^pWep5Xk3&|S$C}|~K&IdR_}*(l zGJqbSM&an*Wjj5YdDY3?Na?c*eLjEx?jqz|w=Q>}7jC^e^PPnlLVn9{h)BNFR5L*_ zFK&t!ac>cYFsj7!7AwR9s(7G|8Wa4ldk!k%0KW)4{CP(&@BVYL7$^sYNUZI(opM8e znX}#g{*~Huqcw5FLx@uYAvppOj*3I`n}0jK_@fVj=Tg2sKtzXr3UMd2zx^kbM89XZ zTJc{jBAx_O%H4m$sz72eDCK+%^&O6DaC0UIi1?Xt`U0ulXv8v!5$ek6Lx;foCnjw= zS_W#?EbFG=y*=(Ce6r8`Kz~s7!iQ!Aj}uE~AVI85H?m(_GT)6=ND{^0W}-TZQ;!2c zjfFQ0=)x43MetO$MolWGQRTqghf#{=ivU+@$UYsi4N~)}LZ8zpjsKQ^`y`-Zj%bab za|b7LSM)ni;f`JiBQ_&R&!y6zxwWiLkz4#3OPm$FiR>`hHF%ttH(Dc*Dk}X+x3-Ou z8IQ%y9z+pGwhQ!ql$g+t-XhPGVe^Y7J7#pS-aU8hdV~o{CA>l5839Is{;fDffMRNF zTH+o{WGlsr$4F_)J*C&OqXvj&;V9%5efuQek8d<)QFq}bC5d8SMTul6Nfo4KoM(}~ zGG8`dxdv?ezT2JE26nHOa+wwZ)@Pb_XVEc4##&NKJj0$C4a=@evZTkH-|EdW|5_2b zSQo5Y6P`+7;T;8TyP3q3-ah85jPWQ}Xu}YT?uMPZ+Ta3`>IvjvLI6gC6jozj39{q- zR$UvfADcxxg$i7ac%AL=`l(iVF5-0QAy{N~0mMBQPdYmwWvT`O}qTQL~I(* zB!Xv!I|}+5jhW%hAj`30>Kjo*on4o+hCd(fM?I@D(Vzsk-$9O}LOzD`aREe{eJ(Q>vVMZ&iC`V@B4kf-!B^$Pc$FgfBdIQ(dcyZS7rK+-;YA9K>Df2U`6`y)qS5KU#T#Is{b&9KO;yHgM$pTt?jdu~G1C3|D>y`qI-l=d z>kC=@YefF=)YZneMLqE^|A+?jjZ-IWtA8;5HP`)TKLA=fd<_PU0&M;WJ`6DT|2Tp% zs5tudABiE2zH-vu^%H-M`6z>Zs4Yd4hl0N7Uyg@2W`h{hwZcNDp?c(%SV~BK(qiiy zc{=sVXY21mO_i#?2klpN5^tOC$?FAfTmEkM3Cf#)&io*q7s3ROtQT3@g6#gEu*a3e zZ)OXdRF=b9Cddi$^r7didDl1p8PfRxH|G>u1fiPszsBFcRS$t_l=udK!Xyy6zMLYf z(AW0;86F2)hKOF~pPLz>U-Al^h)zfr{QVr!!>{RKN1mI1vgq;amc{YG~ z2y*`fKSRj*zLGFeZ2p?-8^f8Z`!49XQAvomoy^{T%HhjDoJA=5phHc;{otM+rS5As zDEfqjmh>BGn&R&}ip}i}Qtw^kZDN_z!a)7?k@x-U+g7W*QvTo` z0K(!fSLM>-xZGJ|b=+BM1Smo=5M&x7Lv92Rg@31@{(geWCz-=Q%N8VTul)={i5=|z zCu8M(O!38z@^d?bRI8}o$28Ph+@aUXg37N~=4NLD<0Q0yb$lJ$CV+hQur1S|6_mu= z@DyxPIx67AF8#s4CYah*M*)j;0mKjVQCeIlQEdq*FjF)1t}r|rLU46s-&?P_x+1f> z(9v~};kr=17(5Q|p&jUis(K3126KvYDybqJMaPKx1(x_=ZC6kNRQZ1D4`xF`WOdCL z$L)aw{z*6FBS3sq7U-IFL|`eoEh zp#TG1>uZE*d<2IT%@*J&7eBIKq^KK6RA+4T{DH&+C6 zF}W9bYNO7G^tQIt?EniTD@Cyf;M~oGO$HdDq+)RZOQcemd4DHdvkl1_0)e9z+$^<+ zNUX9aCR^VHGcn{!?=4j~sgIU*&4Y}{szs=x4NP9v!3s^Jjnd&;-Y6=o>;AZSkd>JChL44*?N)31hDSdl*0(x|y(A5GpGl4i_MkK=L zyXiT(>=R=Gf%sb34{t2PQ=(1`LU$Nk4%UcGoF-)1yGm?XBFzK?A$HOQs30rwXMSBM zIVp`69uah@3x@>+K1y^?oQxX1Q~-tn@2Afd<_BM1?t-=eKX$_0CTw>&curb?gLfA( zSzNqf7@d5)M{CAZKvr?jF|CEk5qOKHYAj&qy%T*mXN4OS82YsuTb(5S|k;`vR6`_~4bp?wd!t70qs zbU7`oUs)-G0+s75KOXY$zn~Jas=BC=yHGYP{JK@Q$%HwtN(S1MMZJcX`8zcHwy0Sub!>N!d`oU{WZus zo#Lf~>=FYlR}1sj?F2vn;PE;9psD|OuKzy{xEqkRpJ>y z7ajfF;VnvjbCI#Seslt3v>009v6zSI4Cqu}W^2s}Bey{%0_u{S9PGW<9|-05RCwMG zQuXEdTD7dA72`Y_@7D$D8(;K&gsQX{0ROB@7unw#g;Qemw=c0I6AG8L<2N9NKYyv_sFzWmoK%93{uz^< zJksABMq4@Q;OD?3$=Uj0~1A1P*nScZ$^N zb)Ao}|KR~2I5MR#V-_zyAFXG>ar^7YG4-*PdD>pR6W_rDKDEu|cNx~yn^)K;k?+pN z4pj^7cAbYv01O+O1*1N4#=joR70oXBKuldYz-R{I#Nw%ISiJDZ7vv`X3^P?@;j|Y= z-i{&UfgKoXkiMzT*E)0;tNbK5(E7I=82;Gi!eqY9>QuyS*`X<;DEDrexK!BN-DN>7 zg_xz?%FMtfZb~;ub-KANIFo9@x~aC(U8{ghO0Zp=`i2RzHfhV>Qgir3P-E5dqo8Kk zyB|2N%Z@#hI-y;m7+$~R;;NL)RW-jr)=9avKgYB;st>}_8Y1I!Q{dfM$aMU+oO{xS z`8fk&FwHh-%N-r!3*b^jTL>>Ir)68b_q^KrZu-8K+*E-3ajk5aeVczKZk~SfGv7w!Sj$jNC!hIX8|T~29Mey^wF={Ua}X6=jCyGX z{w9=#bdR0-(5E(S)l-s-%TD#IFDNJ&o&Bb1%=}q;ufNU__#g=HG@5jsF!R@B<1?x} zqIrWg^Nb*r*er;dy#Gu~&s8PgyU*rFi^bMm>f?%;%8$03MXMO1$%ycuv}@Zi2v2RrP?S&}9-H5I-f3DS#l>%V<(iy;`cm?DU#3#C^f z5AN+t4ep@bR&?j-gBt7414qSMzRYEeom618r^ez;wHtj+ZY>tBwijURI|}0AD-Ad& zhtWz^P(a|(PdwfDX8wIjFCMjt7SDrfSkLtA0-EuorV(e6=fxA(VIXhB5qKnQs19@@xXK4;HA3#q%ogKq>V1D%5hp>ulj^H=AT z4H;Qcut{cT1^?MIft&ePPxN1M*8iSjC&_}BDH8yzsQt;fmJyD?!)~pbXGqYdkZkDY zPD8i+hn7|91Tu<%=xevWGK=oY)sS2elL~F7!1aRGW`hjK;mh;OWB8fdp#VgOVG{o; z6zISIl$>xSfc?nD6&i7U4r9|@lm+{>kKp65h7KY~(E%2)dKDh7YoLuI%Ok{Ev~lZj z^m5T+t>Fyl95zrtDiE{;HP~pqWy-|k=+guX_cEXopVeKh@u6qPgxUmdl2!N=BAPIO zsw#R`uYxGOG$O1}CgD3m22{Xe6f?Eb7rp~qW@RPxhd01a;^|PqEHC zkvcBgdqPQh7d;(6H>$vVh=*zhpAjAwa;ivauZ1RIm#|)@{vhmDW>-P=!zKan84s6o zBQ93*_PHcD8F&`)68=25DMK8LysCJ}GM@)C8waTpTXwb=L1E!mpv*G?g(wX!|3MHz z=T-p>rke!M91lOKTDLA3v1{R8-eqhNf9}aI{%jw_Y`M1M3ZX9)bLzb9rwZ$VJr^*T zfC8HiaVJo1)kbVQW4x(WG-6R22=jPGmc1(!2qpT1=6ez-Cb26NP{@>%!1RuXK=gbJ z{hSO!BNTCjLCYz71zHFVXv7XfBj*o-n_y^64DT2mrX)~bB4hf9IGUw)7QX@g1OQ?a z=HUmP)__&esfxQGwKS(~>4&aZbwpS)2dqL8qLxj$HM~({i_io=D+h27X=`1=(pKQf z95DWjO2aB_ie5B2fG?_mwT8#}(jW?t6l5Z7?@7mgrQXv@iV>lsm!#2 z3!l-!4PyP_4>^6HC?ftIe!E8}FAvYM{a?u^65^!24TQETP zgHS)ba~xj}H^F`(mIxj+imw)l{8s2%de~(|9EYg&EDb48u*eyv&uh<$ySd+{nbm8& zQR~c4;Ts!p0IAe11ZC}Rj-E{Dt*HLquxNAdpj+jE5%yLv@?j`aM+HFPu22)2prV!z z2Bf!BHs2>c!Rs*z+mI!ijbkXd*t>uLJUI`^<((1~X{4ZTLS>jbJHQ?|c@?lz$W+eu zoHL{Wg~m{jS_+cur7z0)lC1imfw4vMpZtRgrbH?d6eSj=y zn`~2~TfK3J^XM@G3Lt*yDRs_*wW8FWPup^$^(yip->0||XORedpzn}>VHPtFyAILy zjpGwrmD+?dcAPh`rDH^6dE6gY3~G>t8M^G7?=lINtQvFhjvOIa(XqcklRaS1kb3fe zg5`UM;w2k89E!ec-f*_V4qZ&qFU&jQWQP@!ZYj1e&gyn{m}v?7@FY{8StjVbznSfc z?r_goV?DuYX3pa=o)Z|S{Xm;&UrZ}4stn5;%Ct-tDJ@bQvrk0@yXy^c_2JO-n^` zVgrke=g!jYGHf9NEO%c|B@>Hzgs;}x_U-lL5W>MF(_ZRq5p@>l{cwd_&qsba1tS)U z$J z=VjVul6E-RGqD=>@!riw98}sGYml?|JNTDdYZDfyw1(eM!UutqZT1sh-arI!QE`3EKX{Y z5(8yN+yTKzvILBQ0(hGNt5H5`3LE03F&J7bRi5scLDx|~ zIE3!9ZrJ+SLuw2GF*@Pyw1M4llgot+C_GYt7DJo4Ea>Om)@N(hAUKN3Bq#wlkQ@O! z(RTR%jLw-Vz<&jTO~oaXr`8s*n9b|?3^|ClAVsRB39;xtta~GeGwei&+rC80bpTte zeFyOZE#B;cM?^-pEbbF`9yeXLs)5J#GlIXc z2Tlt$cxi&3iKoAt4D$fdjHk2YULx`(ESD}#01@95)bAe~<=ie}u9+@9GVQBPaLza8 zQ{b3|gR=&GGC_*EzD-H+Pb9-4TPr}}FV-xUg>$V3q69=_`!ZbpR8IeYI1ft8tLx(V zy^0a|qj~vx*Cycb&EMoK2X$pFjx%Rn)C9+Byrp|5kOW2>`oOGi2Y!pql1hP{vZMSa zDfLQ_;@EH8n_Vff#G!mLBoM_O8jdgc^#BfF4gSu=dFs;C1ihi-_BFVu0~@;AHeIJd)xmc(Z$0*rke5Pt>H1NQ@8w`jM88DCjM{U) zYQ-LpLXeNlj$fzXArU0oC4T%Tyh<;;i)_v!lnL}tvH_X|p_yxO885Rzk?*;@4KyTH zT98h{5cp~fV5zn?e}5613y|-JwxgK_^sjvZ@+`F)ISn|yf`*OcQzp@o0h{`Z4-?PM zK%u3Y);}2k_!EvxK&9FlhtW%Au)WtyIKMrX&ns>;lZHAg2{{>9*i_gd0^rVxZ2jB> zT>sd|b5P#R(cWC5RuWr>kb_{J6=#zyoSq?hzi#}t7@xVL;N%7BxiDy@Rt>Pb7RJSH zcE`_gG&AL#4T%z(U~gx{-FQSG;1yvR{9o`0jE?W;c=72Sn3rEbuH zjAL`${D^EE+e9sQW}A&a)@*2f#oAowTXchd1z!10R$sGQT%a@kwg!IIjU9Tp$5hAe z{fh^7Z4+M}W!C}T#?E05pRF7Vj0T2`;RK^(Tc0flus&l97cJ@yO5t~>tk1bagB3f5 zv`WyHia*XT45YH9bkMP$d~hR<1sF{cf#Tz3KyCIbwj_?RoO6j3f1Sg285?g?7UGOTCb2V)ne$xa z_t2io5C-}~NXZ(+naP@9MDZD=yhbB26s{AJYWR7TGz zdxr>r$4F77ML|y|g(3RWSo#25n;XB0tz+Z%_;p@6TR~j#4#47sF%`F}e2u+L*128i znaoUKE49hEM>||MQg8Sx4{Bc%e*wFn07U zRGqu4URmmV()9)7n2UUOffp`@9UBYKH89#*jJ zA<<8{jeKFsdXkCkBIdJO>OZFqU#mK=rKo#{cJ$gr8vpU4Y#BXmmh_>-TexBfhgRo* z^oSwweP33y^~q_%WvN`3S-{45jLqbIxL&-lc_rG(F&XxZ>(N;F;mtxHilufiZ|oL* z-!l&V&h6y4ar9a}ZJb#Ge* zUpA3ux&x%vd%8<%CXI-287p}&bDj;WC+x|^&EEh@<-qlwVJCXXO&nOM(a#FT zgpQFXipv~A!ev6ta~!WlC0pdN;zB}1Xr_M zEYln)7hWtOXC0Myfx4?M$k(t?C1Rz(h_Qm8tWJ77DfBXqO>~OEoIcF;n_qIJl526U zc=yE79oT*2M?>S5G^aqxf10Da76%+q-u`r62|23L_Xr>R#&0&?S^T_R5)HI_q5c=MGK#K<|h$${>yPXu{%jP`|x9<;lpUG)A*H?O%` zY~M+ie$a5dcxB$D`dmZ%rmm;+9MlD7)luo)+dsVjE|a(;ZHqoRDITLIi|II`Nsi~~ zesx*QxTw|dk-gD3rrQZ)J4_1w33ccBULf}cE>4(*vu8cx%f4_zKhMOvq}XDNSBl`C zr^$`oeaB(n@S2HMA19g?Z!S_5FFV*7b7pP}5c(t!@DdCScK(r_dS2N$EscnIbuLv8 z6Csz+&3M_hdizxK8b(%81LeQC~5gzT+>CYR-v0SdBZdRC9>_g%#$ zvok1!x3L}|Or~KT)bAWs5t7h8I0#J$-_#ZjzV{+i+FZJ|CerPzlv9kWx(Ssx_DbBG zBr}QV>v3}kW?Z(zs()It!~?S%WvLGJlpqevUzG5_{oDV^JNqwd_y6OM!bvm+50R*V U=|DbYxumVdneZ?~S#7&$HIPuP86ImzTxGydj~TcYhG?a?q4~N zn>sq$I*9P_SpEJ1ZX5d>JRRga;fk1Dw$fS-7!0Km`j0G8Ji!cu;U&jjx}fS3Hs0l` ztBTv$*cjRq`sK{TiHqjXsoP)W#h-LDj=mMy$Vy$!$l88b<~{Z5i%Jz>mZKQtDqPxGuk!=9xG(nk;ih^oph+lEws49ywY9vZtlTgo zx}js9zrEt*zI|Ogtp-obH)$Ar7_`^Y+l~>$G4ghd9Pl|2{A{#7w$6FPKJqR%Rsj1< zV?uf5xVUzWbxCSz-_p!bQ-T6Rd3kw~<8VE#pmo@G3cAGDSmvfA6{-98@B4P+yNWyu zF8k9Z=@mF7S+-@ktuGDnyG$8k&#b^ZsqddK5O43GB*=%0XlGo%Khl(Z3M=BV_Xn)=jT=w9n}?dnxN<0`6S;$FIM z-@es;hgU$jC?ri~U?5 zC(G|PYnrN?mr*%C#IRwo5{TS!quIlT?;j!^yST z28DK#O=ON`+pC3c_sRTGuZ^{ZY`gx;0@_dI)Q!Mrw$3#m@i$n6XyvSxV;S1h?65j9BtryFR~hok`0j ze($fa7^n>RYNxGDOSYf&y12ZDba!{RdN3K)OE|raH$GFg=n}Q_l*<+Orj@6bMn^^( zL{vC;+W8eNk0hVyh-?_HX(4?4_))zr!+0hIhA5XgHa?y@JG{u!s z4y)GJ7q;%8cr)U~p`P+0!FP4YN?#U&P;EwVa4@^Zde6Sq!5m!b+(xUwdZsMdq4S@= z&&>ytNIHebw)zt0#?{oylw^wI;tl5CNQ5$rSCn_Om$+HaSv!8Mc`5pYl1@l5mgJeF zLrM$bw}>YeuP^i1TpMdmcUvA#$o5#W58~F-<|$fyMep`4`eMofj1RuH%(@}=_3^#_ za!=)|4({X8^E$)EdGDc8=N+AJhurHQ4xka&m+zK5#HndptCU;ZpOg?$KR@2VZ__P0 zI51E-Xg?hDM6CX`Q5kvG+kJnYD`i&1>c^ud91hvqgW63i=MyWRrB=AS4(c|(uLq~VTa3)j|!?gI%bJDPo&h; zTuIf=mML_btAELRLp4oTI9Zm{(ag-uUWiUcPOjF0o5|-=VrSROcf3g=xz3pQ z`uQ2mXFq+quW;t$S#Q#HjCH9=<}hq^!D>t|_hI4H&~6AkwITen3G(51h-v2*I%B?l zGwt$R=u!_>XFe`Wm1w#f=s^9 z=zf}5j4ci1*w@nP>d%{4Fz3axf*}1G?xXngSKI6}7|jxs%p~N z{InNa!5-cRI8(#=JgnViIps^MVoUHjy{2yNZl;D8&LU>%lRD&7p9}D;@Cx_lL{FFJFeHP& zOL44f))mu<5;P}1B*grm-Y!Wyo3J?*XkL6sBobW79Czfu#tQRPvgPH=m)g0u(adHg zK4e!Sca&Jcyp^1&c)~!+{{>U&mvaW5ZBHrVpTDNT&>srXQ6$S^d^{|+1(>g#trD2-AbrI(ifsOfJQ?rPcV&CA@9B6RvgJ0q(LzOG`^T%M|jTO;6GE^mIn< z2~6%i`1>K-JY5-ic>%O#OgXkfiiZjR)7M^eSf6`DB60I+uSEK7F(JK> z&Iz%LQe|~!8$z+3W|g5tcjmp?0@30&WItQrQMyY%RSyfs^i@1QxNs@MEsbJ zKfeCeJzg+w`*9Bi@ikR^W1K7vJZi51Iyam5XwQ}{a2me~vtaG}$E*JFo!{<5MG;&b z2Q!4lL&OI9ET<;R4S@3>8fv)JXB)inrm!%Tdn;x-`p4h{U}K$ka>`Lp(`Cbw@810^ z;gn4UrgJM3n(59?U8{~9xsDtw6>IA>0NH=-?jL*nFJ9k1&h9;AZ?D&mcaeeon+%!B zTsr|TI(FsM-J>w7VBno=&&f*ka=ZQpGMA*8n3$;P=vIRl0LQG#-@RKM>~RkE4CDh! zOl%tMNvtS!Ik(d1-E__9jdtPsc{K3qjv6XesNrP5uroZ;zeHI>`inA!jC-~_-5uM)I zFhpj1)OyLP5l+CeHHt>x+$UuR`vDif8LmF1Y~S(eFRj;Ip6 zx+uksEsl#Dov7s5Z58QLFs17679{hOIoqbE`-?fI*Sj+#RTMzX*VmT~@)2NQ)3?tt zwZF{yGM+jm1q-j{OHS?h?Gq!~hk)%Oj^CbY-5707bpzqRf4y>FTx=}s$&;6XjTvSyW zp18G@1r8VhP-_cdE)@d<@y?xJxHMm%hn3gpG=RJfbG)=`&mPXo$Yp|mc%l7i2xZN- z)d6L|0BCgh#y74GbCW#=GedPPop}zsjaPI?)=kZ+I@wO++OF>IviNxU@Q|U40i

zS$N9V5gyZ6taAVR$4w*~17O&elwb%}zPo7%SIZyZV}T3^=1l|{X=y|uX}KHwnJy>V z^}ol*e)^>Nn3i7#HbqcmWDmau(V)2K#EBEkSjuy=Pvft=e5Il9D(O_92UsejpwJR= z&K->nOQWNKFlNlD0LY9nE+N69@+l*`LD8G4U>+ip02^zQ-qZ&U*te}cW)Rnh8RbJt zgq-WRI)}zce)GfOj!SZ*s_cQDTP9BM@~ZI0vuL6W-T%CAs*Z8k|Lnvkw69D%#BF!94HFZ>h1=U*bLJ|dRFjlh)RL4X;gD$T^@APB zR~=kx=C(Zd_|;naS6NbVqHf-_8VNV-y#8iAt|za($kW3E#EFAmHnnPlNRaA(fT|Q* zc2Obw5Z#x%{Ykng30B)z+q(PI=xfqN#AW|plU6ZBYa%g$mPj*pEwMt z_o#C^tPGvyvb%fnv5->v->ICibYo2bJ z$4wd<1ehc@etaa8&BL}jB^jGJ^Vp}``8f%DFg~HrbnccVCbHIs39FEik&U!xC&R`g zd<;KJ(>{MrRFsN_CIR;7=yM%wCAd5+I6lEx7aW09{X%VClbWZ1k|WKj$#7POU*3rL zkeMpQ;He6Xr~>u@{@JtatL5abE-upee5Y{&h@M2y*2@dU8+xX5J*F3F8$ZR{jnBUI z`5Mx;CgyoMDo^0Cg%li?k}U!)bNVMAiZ&Ash#;Eu7u4PhJ^(`mPIp{<{8!DuZ7*mk#AyyHUQkc=$oakx zA3rt=_INO1A%-8@4ESLKTQG+zYipaFdpr{$6wBx3brTfaVVXwKm?0IW#ppt2)_T zSbGMOySqC8RvF?BV)2kOz=P`*_Pq8$9 z;?0b_b~QZOCXYdK=hDf!QvIAu1)lvM^Oz@^MtXYs<>HMM@l8Sod^|J-A{9>YA7Bu! zJU`jPgC*#YxHlJi6A|Iv=iGV(5Y1;i=`o}qJpP;3`6~|m*L_D?(_^%@W1Khn*~P^r z(X1iS=)?%}LCZ1*xs0tcpTc;Rt8y`AkE+k{7toaloE^D(k`K&dc`@ALcMS!o+Qb7o}(AUYae5tcTg5yers1}3A z)J>Q(TM1YTK+Xt2#EMzh5;^Nye=2ZhDuJekNsW&1>!*-oY~|VtH!o9w*As=v0E{Yd zN-ypYa_rY6S%(9b7{g}o?DVa%G9NTjEa=JLA9rDQ~`7G+}#~ zo<0rC5m|iE`m#k_TwIb;%;m3hy}gFpcI@Cdb4D4j3eUSXYOqm16zQF|xagvmrmLl- zq~tdHS&9VG(PzWH6qrGd|$#lU52U;HW&#GxUuGS*#K047pGo%n`sf%D|^ zgrT{iE|3DIH7|bE26GsZ5O_M0Qc~3|ErNBwdd#=oSpHtYpqB4whO%dLbTmG8cGmGR z{W)#$Mgy6%O+R0R3pE3p&O#isnE6@@L{e~4J}j~PAx&sNGo0&0_l1f0!d3WlvVNgk zONyY7kS3+rVpP%Eybfe8mATOt4NJ?E_x{I{0UJNm)hRqY#8nS|%cVKSnfzh`H$)pqmazGP!4R$tU?MJ^MFt%r=@_Xe=2d}gBQRB7 z%fqK;+_ber0EXfqJyi`mR`uB?0>xH+_z=K+Zmv2=tyS^R<~z zki3=);rk4Z4LQ{w2M33yXo(%+A~>1i)#-;$W3AC$1=M@MB<{dey+xOB2-dKYT zK>#5FZn+W&DJoi80+a=ikb@ajhog#vn{Z6$gu(X zsiLNzjyo_A0ljhGK3$l6GvojDV>k!4s;a8K)OWX9`c+9R@)gyx&DB_#nG<0M+UZw) z(Oe&R4w@l$D zv4eu{bl+>Jn|LP)Bs8#rNR5{Z{p#8ct~+FoMk`X+Ni0Ga*YWyLXSe0@+3sAsYg`6J zy8HL<&*&HjHhKvq3|y_}hHGeWj`KMXFE-B$-@Li&}b=Q6%#a&^gtyP~2( z3cT7DJqDj!Gsxf;bUw7z`f{obkwELOyv)VFmN9g!oq0)^ySq6)muk4+^M_}rW<=$$ zT&Z!s`5u0k(-d}|2$K&JiiSHT0p{Xk;aKS7VynvfiQx$Hv{}r%nWtc>}lsXdgq(g6H-BS&1??-O(mzFAK$Zcs8QhJ0@7^Y;Dr`7e zA!`}XjSu!{_&IlVJQQif+4%VQdcJi8iEgaU02Bq!Pjn?4c(19!eiz^}8UDgLfNXP! zp2j97>*FD0okA!ay7ZErn=0Ab*}pIM!%re(wDpI`P#s$k=By7WBip+Dn=g(2C*XKM z^(@C>Wry`{mM3D%iKrw15{dvq6&-*hdv#wM-bCgHik;wY5|rZ}pm<48OI{yuho~mD zHmf4{;`D{Rw0w%dpn_H%c>D}dNN2{x6xG6!02c)#CLW+zQ(WyLBkRZa%&M! z0L-xam3=3TZnwP#B-&U;DQ<}p(gK)xln;5c=F$B#$eJJXSNMYPHqI}&_GqVZRi+}K_MaR!(WQ+5F3{7rKSjm>O#uO%D^*)S)%uvEaMSvfiZ`*f^`2(C;fzaA7 z4=}waHX$Dzsks6JEx^I*nhQDX?9$;(NJo+*?_`@{b z1ZudKq@*MpJNtv-8B8wqU)ke7zdzvs>(bt4n(nua=>%kXyHJLz!L6v?E2YAO~7RpwS}o zV#i60u7CAl{oC6+YR@PhNQF+24;;>HEc{)f8sN1-E~BcCy6YR%H@R6hA-DWf@o-4( zZgKKEf4VItkH1_r$;nts^FP20T`Jhf$;QF=Z}k4H5VBs#Mjbdt0lf@FG0$aIZf<#0 z(9N~$=dX&!U7P|3Ru4Q(%-KZeR11f2C+^{ zL1@GP!>%5pIZ|%edPs1pP$plSDx*Z^LYig+RCk;HkrkfN#=U-f2_SxMEVFLpQ?vxT zPEHB}@KhZ^Z2kJ$3i51`+CsyHF*Okl#Pf8yAJYjdM|w=(&&bGV1PBHt(jO9>5Gm%V zjnX=)$BTo3fdNVdith7cpA#az2oRya>WKf$^Q*yRiu)cLXeC>^LUd3x{jb&!)~Ew( zYPj{)B`5$O21aroGNr{}RS=RQU?`<}tu22Tb~J|`lm`zVsuX*zF=LT+4n82eYGRax zAB7p{SeYwVV1$0m*!A^w^e5;Zs3{U#osxjjO%dKs;US5GF{amE>|G3hNzsY{SJbSh$Wul}re4pvE3T%d#-drkypgqS+==DnNpmErKn6e>a%?kX#eV+$ z8T8QCQ>RZ)g{)v~tw4xAc=Sm1irc|kjMkbz`a*KU54ay31L4=@Iusrv?p@>xh2e+> z5Ezhpi2%(bGj-yEM8NWIu%InKRRho>^Gb4exR_`Aqbyi9@aWWFx>R7HP?HNH{NlCw zP|!s&poLH^7WFm|wNZCKQ;wC6!?O>NbHLNLfUXJ?zNwo#=oN=PhR>Dm=8?{KY5KxI zR87%Le+4D&xaV9t=Fs-B40p~pe7gnqNl(fQ;8_yPCaUy;iR#v+A+mkjHZwGPAl#YF zK%OGseylB%r(k{XGR4-dTl01aC`xl*H__4CqG+gdKq0B_6+>EH_l~V0y!PKtlG`5~ zJJ6**KQmK3v-q124>NlO6{YGdoV#5Um_ZC-{V0whCt-Tk?q8-n$-GI1)a4W^wlr`M z0UAt!uFTAgJo~jMW{iEpLuw$ z#h~TU5nfdL4B|1+=e_Y!6|AkM*G3Z1kE9F>Nc-#6I}x7qT2NHz&LR+F0gxU%ehenZ zI4Vk`{Qz|+4c(sKaNV;LL;k*{;8OA4{*z71^8`X4YaG<{c-*_AxaGLp{*Z?#@_U$599w z&pEYT!68Tjwq#d{zY@(*=EvZbc>mz3O<9?&o_ZZj+d?^ z{OQlJ!wJqdYq*RADr~XFB2RY+3K|Nc-`}Y%EI_mXN>v4zeF|n|zVoDY`#3cIQT~?> z;JfteW&?~&;sMW(eRvkxETgjRSk&=?HpyP-uz?Y(>FS1|3CGsM;AYX4MMZUQ-n55Gda#~^J7U+gcvPc=x*Sx6IEfZu!TwnIP6{SlZE)$ zBfKWxK%{QM+i+a4{+WuybaW|D4B&ur!%;zN)NgX;%o#^O?h#ZTFgG9JUqHNFxH?_E z3=5roqmEtD~(6b3+yp>PwQ6W~flP zbEhK25q=Q1P*u?am_=C12i3xDzxg^6BoUnM9u`ge~AWhO`U(IFS`a1gJ z#fyzm7jBDo@IdtyJsfnmAp1zteviVrxxn@ut7MS7h^$(mZq^7p0D83~@Ti?`cxfn7 z1JXfb`ZXzNQp>=*o|_Bmvermaj+@p!4S;X0|A=KkkG^P%5cyZUm8{8wFe zK_AjjEh?o}i%>TIA@S1l1Fu%3JB$fF3!Telfg6g><6SzT!wSA|8(i`~G!Ny*fw?yt z;Xa`RVa2*|P8}6r(XureQ$K_*NdgE(*yW$NNS&_$V!lB$n0l}pXPA5fSgZ+9(1Rx1 z))D&$s#mT&qUAG<^6|m&TeYihOm3`+C(E+i=jG)+c=DtL92`^*g%$}-J>_&%jZ}l8 z9NMeSUASOaSVJ7P`~=LI#N9ngpzdInkj9*h6b>40o z?r(2*Ff@X?Y7YS8;zLUzGAdO-ea?`?{yVH%^Cv!T(VaJq^E62zmXL8@f1+vHxJkpzbZT1#;)dWb|bjH@}*Qof<*bXyrG zspVK|VU;1NId*`DMHMrMpM8JSrn0(P7Hr4t{J_!6LU%gSJI0~o_nG7OqZ$`4-uhY> z>0L%T!jc3&>M}s;jOYT8N_9m=!lf>z-5O4?ENjc7MDTfPXFN1DUlc8V+5M1kQ7QDS zvvmJx^TqyQjAE8>`_@9|v{_Mj8AInau_yhiQP&=#qsM?wA;IBAm(T_YBtSB}{C{yB6f zz?++h20k#%ODHtHBOHKEVB&Kg1FtgYo%Ib3sJ9X|+(Ms2GJI$!lOL-(bg*ea+ak3$ zls>GR!v(BDz*d3%$zTRe&=4G7zn(589*uaJL}Z=OhGIO z8X@N5Mb%=V9mowb?QF?bN>gYzMo9)nbRRiJ44$(AUh7LYl4X}<4-4Pvz)DM3(lDdG ziNHXrhwSY7(6Swi5EMwUYv0>_t|<1SnTBd<_|Q^rt`HcxnyS(V$)}92z6|7AQn4XL_OH>7EV$rAW+h=_Psv1xs zXaVKNf<^SJ@4YtXacZjPp4j^0HI!D<)6=Kt=X3Jur~&}t%wTAMTtw#Ko{e=<(dx7; z)UIp3R4J;0;U3Eu_<9{2#w?N1%QKU4&;LB5h5PVxqHk=f_z zx_SZd$3nw>HH7?VKl+UPcge3{w?fzIq$%78^$DS#3_$K=aK+HxNQD^Y2>}I!Ak;Xm zi(0xpW@0B+T=BT?Ay3gK)RJS{SL#9Rs!Y&T zg-Hcbk)NP-8EgQ^R03 z`e85|!nbaLe=(xF83JF#oMm;K)$Ol3yO}teVH8cA9c=8KZ7eSzbTxByvb47o;y=MJ z$a~Pj+1bHKTtL9~&kyk1JDLl0ZQpti9rj@q_bIM+xESpH+QE|9X`Dw`Am|{t^1sT@!NBErc-bS-r~8X zB`;QRL+_1VVwf@Eb*b=rk8F%v)sbJ^WewsC&L5b;Z9DZ zqw{5?>gOJli`|tb{(>7}MfG2IIB$TjSx0XjhA+Ik=;6Cd52CliHwv3&;r}{^IpKqE zcAwq_-vn=kz+kfInMXFNlm-R{j(mN4J4HV~gPG=hbS?bm;3faY$$@GHIy$z*?B#(w zn`I3GZ&T88OG`_CHp5_UC^&q5v!SxGGN@SU^e)DDyPhJv(prq{xpSKfm@pU>mc_+I zzkq;w@5dpG=;zKwVuugkg2kK?ae5W<=$a4}y#2pi<2jYh@Inrj0_rX4d)qQ=gE=+`~V{&}rwyoIcT%xkD#iZOLp8;!Xy%N=))tLv<9l>-XO&Cnl zH5)qmhNJxaN_P4BhDFZXoVggs^SbPs%e#8mBXtb=0SlQ^ZCT{`E2d$ ztq(C6jaOE?=u@);q{$bmo}UUa@v7vIQ_lFppBl++IR7ndoSXlpzy?ebciwitqsoyj zStjr34;)C}!>2bg7-AgEZf0&?+vmV3AyHfrQ0OwI)#F&p=l9@&>R4O)Y?Fe(VqOr- z{6K(=R`ufp4Ey#a*GEW<6_d)QbHyCK-XPBqV+#sSavVLHYFv(!mzP&FF?or{$*Ij1w%Ix(|+l^kBp z!^^9I!<7-V%{p@CKj^YOFx!WP5W&HH5bJ`I^fOD1E^z2O6CWSXb@b@@+7N;EZy%rK zUabq0mx$~d*P5T`nXNTmRfA`f%Gb)S)`utO6L4LbhH`Rud%Z|fgWtY!a&yZ!Cn!$a z?iY7X>ddiZ%kN4Tv2L>%sCuOL`pScfii(-K6NC$RQJao~@S`6;9I#EaGRx5oGHV9L z-m^ijZvRH4Vs{6^a|Ge3N|kZaj2SL!+2 zB+_mW`}woV?DsFzX}c=k-lpUc6VrYB_U&k6?7hQmY$6t)4`S6ajY{h!Voth@Y77nz zE|$?SpH!I;7myoBwF*i#d{#7QO^LzqN2Rj_&@nI!&aa?nLfR)aJsx%~&UGUhl@~uL zHOkB=8s#o`ef8>9*&w`;fqvOdgNK7dRw0@HrAd=+HaWC zIqZAx+_{C|vuDnr3o<=1c4nN4imJgQEi3Doudi=Vah^g@Q(Bp{bc5@?IL>zB`9Vmn z6qD3w_wOBo<)r!VU(}NW@Rna*$BVm+#s$bo8=n&^C#=rpdw#u1nd3Mp-}Q9SZ+4`0#Ok?z5Q zwbi9uxR|92{SUeM`GW=J?8_Dt;5^(^mvr)MLg&7JiG_a|N{dQ2EY5Rua&nm&Y4qb? z^JCc8CsWEim=YgyH%B}3+XzN;Gv-v?mDF98p+e?XZ*Nh^D=TZK>*WfY*E7#ThN(@s z2FJmXnO(hVRTIcX9$;NdijF?$GV=NK^iUnoyfn%SxcmCrhAu&n^r(!SXYn{kBogs) z=UKfq+^vahdJztV+W7$kzl@AAe~5yIhX<}*+9)F?=5SrOm^xnAwo};m?p>{p zG6)rse|EY{i_MSW5I=vtV`=T+lvGAS%(rjfEZ{an@tW+JG4WT8m3yR7>^lCimjJa{ z*x~D`T3eKfJeehqg&bYM@A_0ywbHNGVlW4P>{Ttfm{~?niS(Y+Js{?Ij^^Ikc4MDX zC=&6aww;@ca^zKY*`S3*PZ^93pMVzQi<--nRN0XD1E;tQ+ zdg@HB6YBo75p(M6E_##wECEM9b3nozf9?s;;0DKk?3w);<{h_SVQ0?VvWKT`W;wkp zZ|CmaF@5juQ5NlhPPaw90X5QJO)4SMgbJbTS)~i2DASlXN4#fUWSp~ z7|f}C7o|4+?>7AFw|}nUTDy?VTWA1Bj#TBt8#V?+Z`I$rZCm3=W9%kFSS{!6WOI1s zAMISdA(p}|dlz#4&l$DmI#-W+B7Gt>O;-{0yi2FJ?`iS^>Q{kC&f?2%*%F!CA~ z!8ZNqd&jVQ_wKI<%)kNwv_K*AUeBQa=49pE-Q9mi=*M;$1A3!AO30yiJj?Jjm6tye z(t8oVEQ)~YShLz-EdK6}eHG}ZSsQL0wt2fZ)_ZAgF?a*y6vX5o15C~GU=!v>=|8?H zzt>X%Ka*;_;y1>y;m=nY7Q6m;ulkisMt%1luCFx-=kCi2i{qyM3H;oJsBGR2Opf%p z5rWvE>jnJG7k>z=zhGyXcX6IQp?-an+y3I*{sKwDpp zt93b7KH?QtJ&KuQ#r2lz0*Y1^1%ziv`oev6d`vm+u|+FHI`1sLqo3n9U{p-M@N-5g z1Ip^Q%P(>!?jBLAF@x=eNqRU&*JhQ{<_(U#G}Ep5$n!&g&D7{7i(as-&SuQPQz@D% zX?CLay=m|6(Lz!&QHl2giZoRpQk{yex@KD{0L$(r48}#J<C>m4gF)IefWj0WJb2*e=hqa6edb(Ns{x%p zC@P9HulZDTTq-8KWTTjwv!O#q2338K`dWJR1qk8igwpfeGX)sT*9x0`^o;xlNsvPT z4J{U@22sEZ-)VTzGcu<7tgRv(G)E$2^6BSUka|ly%YDi->tIVRUAFm_-#cE_eEism z=TH#7{C=zV;$TRbD3BM=xi99qxE0UB9=k#Ve(Jr)P663r5_60@q7e_%i$Ayt5L-u|lx%7Z-LNap>C>%F3+F zJd4DUEyW^~W=C5UC@3g83!M@(OWVgUbIP>(vF5pRcP?MP+>)TU z-+N`YeOR)$C0RWvBxHDr`+#6Nr{ZW^%4b*T0sWgPi!eNp#5jVnQ=JHTBsPHCX3cBv zI|3BTcC>CMnTtkKQm+$=d+cnx3sm9CO{ep4bE`Qzz9y8_JkA0vdkWH9&DAwe+{$*h1;yZgK^}dl3m5LQC!4&xJKUp9YzY5SHe+7z_Wc*sOwChheC4r8 zw%Cg3(2K1dr@^Xbtdq|{Se=RoL_gqw#L)aoq?Fh4#;!rg{x*OI0Qyv0GmVX#h}M%e zEcwts{2o1OP0cLx?Dbv&B2o6$rT_i51Jc)Zwr$(Spfwi6|AF|~Kj)m(>+iMMc|p<( z7IJ!r8`PmbU~I%@OPq;n>H7If_#6P9aOE!0N-tdU9WU3dM+yR9Od93uFMnKmlvl&Qiz4xZdDu1$0X&M zLnxalTe5Q*ZNXlNVvy|7Oy2%Fk>(jl5Od&ivo;~j0#^XEF144MZLn~B9n z^nh*NG3=-Bv2%-7D6rtsO55rTL=GdZZKINA15HH4uCwqsgwlKJ<57Iv3;Qx4QOi~v zF*_{`wr*MPWaVos_A9_KwXj(1y123~#C&D`2{3-ce!rfBoN;Cr`?Z8A;W%=UqyVtX(1x^K{4Y-p% zArg+zf#xsz_;1T$3D~5+m4>D*Nj3H-AYV8KT|7dmva0H@y7=frfwCv;aEcFzfK6>~ zD4TYif%r?4N7%4x_h=4mG@!;{o~%Q%H)1>gL7H-xq_H`4@}v%A@+==frZ)q0`|`dz zi?>3lJrx4Wuemge5PtAp)jNDpp4VBT!m>X+r)-+visoIDRNv&=OhIA! z_07#PP}z361BySRqVfb3oQ?ku{V$)}m8W80kOnO60zRX3PA?$}Aw{{L+tzz^*;gw~ z=VgC?|EUl-^Ysk-FT(!#=RVzfTtfcEb>K#WT0-%^k=x6H0-a(vQZRe2%@_R7GyfG1 zX!99^wIS2nWgrodP<5%)W#sbCJzFiHv^H1=Of{2(daQWXD2-+bB2S;bVeH1&_ zp+l#Yj;`I^fI0YiLHI78d#TaNxV=v^ko*%KrM>^xt-mEYkGARC|I9cxxKX!m-)@C# z^DE;|}qXUWvP4=8sL7H%ETEP5%){_lp6$ zNNi4Kk@8$vzv4hnsgMZsCENVx72ip(YD*uo*S6E^Twyg;OPn2_i%svT(@G%IZp3`` zb5T7lC?KHBcK&e-AVG~pr2{L&GHZ?N$ZZoPjmGusC4h9axqP+m`1|hwA%R;+Na$d7 zLw&s#+!`d&fNsWnP^3c>t}BRLyjZK2q(Rz=OimLN^%nR`sCxjewsGG*r5?%>zKuL(&xJaG7}d zBFF1wBIvffJDm5m)+Zm%B#pV>JTIi>!)Dr;;oJjjOf7hyLV>{)Fb~rB!Jb>71}6vc zXoEB}k=FR`rz*TqX5W?;YUDku+2hh~=;!aRartu0>STb=LZ126t0{maP_aOO7<9HI zdqP=RvJF-o@HN7FpgM3#OB*ZRxv|VWNWri*ect{(f z4Qx~xx9lDPs#BWNNLPL)LO2kc()nJmvToFk+HlN==phI*dKxVaL-sy#?Edq2%<^}zL2w0v+yA*m(n6!71n!0*x!8OzPgap8% z)<3?!MW`Fpm6_RgD!ma(;N`DXwNX*PQ$;(5dzn}XyCDg^S2MX#yeh}?aH%l201vj zn#JpTn$vT5H4Teo60}GwfUn1gW=2|t8YE-w%U84rxTSR9vKigo20cD&D@fNg@)%@r zAvVcE>ObomZxirYR3J#NO@)+Ow5Dhxq<-H{PD68;iOo~EGQi5y0Pa2BB$K}a^XP_^RBF} z4k>O+3G^!YTJZ=3Alc*=%C<-QgsSFkN~FEXBabB}K7$h0-!(Dmp5s1w8DYnlFJJ0q zUAl>=VOkn5aFNpKdI`_f#o^W@RW=~hR;$a4WVr9i-@n@sq@iHB5WMFNoo&}v=gWhF zg5oP5GNwY}pux`2r_k6CW1KEaKy|wvkREv~_9;6^@I;VM02DuAw*>K=>DZ+k74P0@ zLKy+d6K!y!=2L`(Ht;m0NW&rIKreM{mx9g+69yh=(Ndl>Dp#(=!OVaiJKCBWLbxBp z4hP01C1r?r2Bbfd7=>#BRfrF293a7D0R9qg6OzM|2}%(uB_)ys?Jv6sHB&yy-7(|J zJsIdfj&~A)W9DHk>6#xkfm2Uwj1F9@XZE)0DVo)NnPl?<-UXmUuBN_z?h!Z5-eYev zL2hhr=tt+wU!2@7j95xLB<5P-&- zAfBMeNPbux9mpU;+iM|dcH3mxZJ#0`C#ezhA|R904&W4rdQ zinF&Fm^{ha*tzG_H{*Pwi)xc{DJt)N7vm(4oFG(fGH6 zaK**1FJwUxK+-+7i99>jAknjrp57Uo3++_x(4j-*iDJ_Ao5ahHn8nl-LijZSLS0w? z!YK5}pNh&+T$qhdm6op-e|C!MVZ5?R_#cAx<{Lw$L9Kgf(| zLDQ;{g~Uv)xV&T#}OA`BIXS28D%%sB!|I z=Pw@O32i2}D4ytvdjZp=G;_{5`NwSvXFGXn2LF`8hs8j?)4&Er7vr{jA{*3`SZ-NP4`6B#H|$^2GM_^`#h>m%-&7DBj}GlB9|# z2@DC!EkQqFey+=YY`%Q0)X2S$0v;fH z{`?qB9JQdN3RwEsaZAQsw0CkNpY=)v4d@f4M>8^m+)VPSgdi4h#h za8byRBI|1OsrXAc(768?DE|eUA^Ler(xeE$C4;*D8_FqyYW7Rgez_l>p@VQOXt>Gh ziR|cT;1;jL`C}jn{&1HJ6Ec4cM+hn--H0Qo_UjPqB;|huSHD1Y1F!^OE05kptreSbkyfUhNlOIrd;M*1ekADuqlg&HMsH#4NX(tzoeHh3!n+zZ= zUOzfz`+pi!96I#& zw=o6ulfM~L)J4e{mb!{VCnE2?z-M_wye)=!}~T!8^fu8;xS9saxS;%s*4- zH%|H7^DZAf1A`?H0el?Pqses+bR&9e*8(vyYU9sG{5H(^cQ3}Tt25zw*S5eQ;}r6$ z)Hv)ly%_!Q)a=u!C;@;^&@qw40_ou@G$G{0y5CaB8n^?fcbTPgVeFQGhCqqm<{%3f z1y+5m3OPJ}=KpVN{tKRh22gC0l9E3ogyjA8{D>y^p-B%WN#*Aa=x2fquO4W8ZC1;U zJ$rWt`sod(#De!0&An_jQby57T&$B#r?+f(6yK<)o=c4scX>rcO*uI^-|=kFGeLg; z46|KsnG-l|9Jq=DW`q;Q3^&tw~4GbB64$}D` z<8BUOb;(BLzyPwcO~tI${oF3?40Tx}kHr%^Fwt8$`31vXk@xG?#qYz?V8MZrp-&gP z@i?_%`tAOY&yI@NbR2^Ltrl>+Hq!v91WMNHD)<~wOcg_q%L0yy03-zHAOorqH-HBG zH`ihjyY7=nVT88Y%oZTo-$jCPQxG8ewZ*74)c_VLb}TeMr1JsPO3t(Gip);<^ywmW zB5%~2W&o<`Lb^Axt}UDgB?SpN;*Q_$H-UKTHen#foVa$|XR?x!Nd{Mf1nbm{B6)z1 zO*b}dV#fm8ZiBm(Yu>Wn{{k*Ub2pYns>CGH-FOoP<^s@ig$6 zcC?~bK$1f3T}|Awm6T2PUpY3IY5DfwJc0;!agidt2VBYY}Ssc+|+m5W$UHSIy{`-V@&&IHWhOEFJ zQajJU%Ifph)W8o~E_jP9u%{`{fW6B6gOrg&pIlIMr?i6vysX{GD}4{Y!HE6|sB91b z1=t`0)moWG<6Xf3#1Ys+1A?D}p%`EWWVx^Yf>zxHuaMdg!ZQ(CeER{n?w71S%c>xx zsY0FzTeWaX{dlu!IGyLGxH%*BxoKdM6S9#6umL#@*CPhcfmKhq2ol;& z#O!P5V46QUIT{E)HU5HnW^e|jK_Nwi95{TF zSl2yYUoKwWwC-W=!iux0vzhD|3}gIXA^M{`Q)UyVfNL(75kRI06R}Q!og)m4>vH|x zaR>{Rw-Bg^zp4LEvxVkQz)j>cEYet-C$&ePz6~->#CDl`Cwkq_Doak@(Ms1t2D*<# zXYS+2oARZgZNo`426Cw*9@yhC9D#BP{2eW^=V@n08qdNWo6_@pQ$R)^MUE)aB-$pB zNKUZufCgGbDqFg)J_Rk+ibCuFs-O3Q%|0Gl^sQ`q8MV*y!3M9$%eiH8*N9E=;0}pk zw}fFGiZaXfAE%|3f4tKxc1=eS$2P%EL_p1;2Hy`P1HjK0yXoj=VE~hom8Ei2Df}~< z0L_w>y?})404!`ZUL$KiVv#CRtM7xl1o*b7?=INzriUBaA#Tp2EnL_pb!DkRiE7Yg z0Ew%CIs}%V_D`WgP>zzo1eXLC7(j9HS1{!<#mg-B(ISG83&l%n@!K;;aX285fLrxo zK2a(hR~loGyWDoZ(25v;Xx!s*e|(sjQvv|kXmG*Jl3-pm^huRa=G|K6?d1(Jl3sxW zl0{nzoy=GI8OuL6#Vc@NA!2C9N|BPuK>kx8ix8E?KYO+^XI$)ROAT9t+*Dbb8|N8h zo+w|#foDn`)L<=etDqfG9}w374E>Bf*S1RwF{73^EZyuxk3QZzLn9pq; zixnT6uC}AGxDc2!S;wn62t~ggS_8N3xmVmUfN&Y_)P$VQ1jfOJ?aVT{Jy9~PWM*c@ zB`7#~YpI~+p$T#-fL+Edmqj)0;@V<^PtNs4NBD##s7Gb9Ad0BN?0T>rW>idX{FKL< z;%mjmB!J1ie*KyrBq-q0zW46cf(Z>W7Iy-?e3%RVoRQ7o;mWaSJPad86;NipqHB|n zL1dcXNL_w>J&jd^t=kSfw+R_Pv5H{ zlhMCP-W8&7afMB*c7SP(qA2jjOIoE^){)z4Gw&>CHhHV0q%7Thp$or&#tHD{4_D70 zyU+4PUQM{xFdajR#_GJ!+KJB`nn|E&fMknBSOWyjMA?UX7HtK1d0W64ngIu>2OX$r zETb6hx?B{so{7?Vr1f3|8y@Nl(En1Vgt`5}aCv(RwJ=~ILQz-~C2G-zZawiG9Xf~} zLUqwpQhIFfrAWL-cT~v&0E<;`Ng-SzP{ENv)|OA>Wv!|hfc+|n$>&64W8)B*GexTQW`lDN&h-<}?2QJxl{#S0d+_j~5L`bY z_#r?Cx_$dBk<-9h2&UlA!osW`ACR~TexXp1YYSmW^Qe6c9;2?KW06rjAua?K%Yj+X zIzUT`0N*|#VE@Fah#7jt5KIPv1Lp{$F;sfyHg5+Q=stV$D|v)9RN?j6W`m!Xtj!p#>GLZP~a z0&b|Y_mT~thDBb4X}HJIc>W{7#I@dYva+EdNojoXh-~mBUwVIk7p|NUdcH6q13`k% zTB+br&B!KG{%%?%mR^C9VyBm9Lu^mrUb-25|3)#mN9&^2md(puEG;ds_P>9yAtmYZ zqXQCc0`yF#pP(`;!czSOtG;*THvl)z2GmQKg8_1LmdV*{&si%|e?hplLSTv!20L4s z=!+BfqTnbU0y!_`R(8@!D64{S*Na01P45bDwgpNfA(q&j7(gg$+Ii_>9T6^2vSw@!%IZTbTz({bc%a9thl0R->6%?i=+R!qQqgr0_g@V&nR{A}A!XO%9 z$XbH+^b+41FOdwKFgkW6J41KU%RPzh%MJcvu@T5kAPuK{QsY(5);NS$G zl`-QDDJhqcBaTVf;t8Q>ZGLSviqxtA=b;X2B}|Vm_Z>jUhZcUNnw@OY!UN;v2d`Da`x-jfiGU@Qx*rMUgn)nr@8Dtius*0P*Be ztASsp1USi>Y?j@uL0rQqC9Y-0yz6^XSP@B44h+DB)N2Uf_LcP7 zvJ=S13gSJK=8@&!2$X}Crf%ghxk!uC&SZ2IJ zhMo+=to&Zg2_9@YohSH zka>Lz0Fzd@qJ+G#&y;{3RG?N8->%@T+e^n}_?7C5&yO8C z#h{r6mnjrL#&fV1);fBD#{=%6pnjgsWcswbt=6O$F3InVrN?l;g-AH_N0N@v^jwXeg4BxkfC42~P?bswOn+rQu1KY3p{6+8rz zdoOkfwvQVFH?x@)jB?n>eV_L4Q_s^m^2(zD!C>FK#v zec%Wi+dzq}TmXwLZn4%l3;;f=>wuvzs;S{g0XM1#1fg9Hfhc~$D6^ee!u8Y4_b<(o z3tw+*UfUiN^WCtas>NTrBiA|vtpomSq-w9}>+Ebr(C-%E=t$P;bmTq=K?3&Kk)fyO zSp?xvH-xLgCmzCLmZUo}W^h^Cu?*Mh0h=G+wQEvsznJ=y@yH;MEdy@ilneM$aSW&u0Z8i wrC}&@(m#2Nwkv?4=$ikZzxVl%vMzZoi#d8AYQ7RgR15|yt8^~o%%xlZ18pjz6951J literal 0 HcmV?d00001 diff --git a/docs/docs/man/image/plot_median_diff1.png b/docs/docs/man/image/plot_median_diff1.png new file mode 100644 index 0000000000000000000000000000000000000000..28915877b0f8f3e3da25d9d80e94393936483668 GIT binary patch literal 13379 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 tT2NGeGuMIc6#45BjW literal 0 HcmV?d00001 diff --git a/docs/docs/man/image/plot_miss_var1.png b/docs/docs/man/image/plot_miss_var1.png new file mode 100644 index 0000000000000000000000000000000000000000..7d99d39cb3f7bcfb3f2452888457d30e43d9a004 GIT binary patch literal 16981 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 E0Hvm + + + + + + + + +34  データ型を判定する論理関数 – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+
+ +
+ +
+ + +
+ + + +
+ +
+
+

34  データ型を判定する論理関数

+
+ + + +
+ + + + +
+ + + +
+ + +
+

34.1 building_block.is_character() building_block.is_logical() building_block.is_numeric() building_block.is_integer() building_block.is_float()

+
+
+

34.2 概要

+

 代入された値、あるいはリストの要素が特定のデータ型であるかどうかを判定する関数です。基本的には pandas.api.types.is_*() 関数のラッパー関数で、命名規則はR言語の同種の関数に基づいています。

+
is_character(x)
+
+is_logical(x)
+
+is_numeric(x)
+
+is_integer(x)
+
+is_float(x)
+
+
+

34.3 引数 Argument

+
    +
  • x(必須)array, list, or pd.Series
  • +
+
+
+

34.4 返り値 Value

+

引数 x が次の型であるときに、True を返します。

+
    +
  • is_character()str
  • +
  • is_logical()bool
  • +
  • is_numeric()int, float or bool
  • +
  • is_integer()int or bool
  • +
  • is_float()float
  • +
+
+
+

34.5 使用例 Examples

+
from py4stats import building_block as build
+x_str = ['A', 'B']
+x_bool = [True, False, True]
+x_int = [1, 2, 3]
+x_float = [0, 1, 2.1, 0.5]
+x_list = [x_str, x_bool, x_int, x_float]
+
+print([build.is_character(x) for x in x_list])
+#> [True, False, False, False]
+
+print([build.is_logical(x) for x in x_list])
+#> [False, True, False, False]
+
+print([build.is_numeric(x) for x in x_list])
+#> [False, True, True, True]
+
+print([build.is_integer(x) for x in x_list])
+#> [False, False, True, False]
+
+print([build.is_float(x) for x in x_list])
+#> [False, False, False, True]
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/is_dummy.html b/docs/docs/man/is_dummy.html new file mode 100644 index 0000000..dc84a29 --- /dev/null +++ b/docs/docs/man/is_dummy.html @@ -0,0 +1,972 @@ + + + + + + + + + +20  ダミー変数の判定: py4stats.is_dummy() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

20  ダミー変数の判定: py4stats.is_dummy()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

20.1 概要

+

リストや Series の要素が、指定されたダミーコードのみで構成されたダミー変数かどうかを判定します。

+
is_dummy(
+    data: Union[IntoFrameT, IntoSeriesT],
+    cording: Sequence[Any] = (0, 1),
+    dropna: bool = True,
+    to_pd_series: bool = False,
+    **kwargs
+    )
+
+
+

20.2 引数 Argument

+
    +
  • data: list, IntoFrameT or IntoSeriesT
    入力データ。list あるいは、narwhals が受け入れ可能な DataFrame もしくは Series 互換オブジェクト
  • +
  • cording: list
    ダミーコードとして許容される値の集合。入力データに含まれる値の集合が、この集合と完全に一致する場合にダミー変数であると判定されます。デフォルトは (0, 1) です。
  • +
  • dropnabool
     欠測値(NaN)をコーディングの判定から除外するかどうかを表すブール値。初期設定は True です。
  • +
  • to_pd_series: bool
    data が DataFrame 場合の戻り値の形式を制御します。 +
      +
    • True の場合:列名をインデックスにもつ pandas.Series を返します
    • +
    • False の場合:各列の判定結果を要素とする list を返します
    • +
  • +
  • **kwargs: 将来の拡張のために予約されたキーワード引数です。
  • +
+
+
+

20.3 返り値 Value

+
    +
  • data が Series-like の場合
    +
      +
    • -指定されたダミーコードのみで構成されていれば True、それ以外の場合は False
    • +
  • +
  • data が DataFrame-like の場合
    +
      +
    • to_pd_Series = False のとき:各列ごとの判定結果を要素とする list[bool]
    • +
    • to_pd_Series = True のとき:列名をインデックスにもつ pd.Series
    • +
  • +
+
+
+

20.4 使用例 Examples

+
import py4stats as py4st
+import pandas as pd
+from palmerpenguins import load_penguins
+
+penguins = load_penguins() # サンプルデータの読み込み
+
+# ダミー変数の作成
+penguins2 = pd.get_dummies(
+    penguins.loc[:, 'species':'bill_length_mm'], 
+    columns = ['species']
+    )
+penguins2['Intercept'] = 1 # 定数列の作成
+penguins2['female'] = penguins['sex'] == 'female' # bool 型の変数を作成
+
+print(py4st.is_dummy(penguins2['species_Adelie']))
+#> True
+

なお、初期設定では bool 型の変数についても True が出力されます。

+
print(py4st.is_dummy(penguins2))
+#> island               False
+#> bill_length_mm       False
+#> species_Adelie        True
+#> species_Chinstrap     True
+#> species_Gentoo        True
+#> Intercept            False
+#> female                True
+#> Name: 0, dtype: bool
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/miscellaneous.html b/docs/docs/man/miscellaneous.html new file mode 100644 index 0000000..7364330 --- /dev/null +++ b/docs/docs/man/miscellaneous.html @@ -0,0 +1,957 @@ + + + + + + + + + +35  数字のフォーマットを変更する関数 – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

35  数字のフォーマットを変更する関数

+
+ + + +
+ + + + +
+ + + +
+ + +
+

35.1 概要

+
style_number(x, digits = 2, big_mark = ',')
+
+style_currency(x, symbol = '$', digits = 0, big_mark = ',')
+
+style_percent(x, digits = 2, unit = 100, symbol = '%')
+
+
+

35.2 引数 Argument

+
    +
  • xscalar or array-like of int or float
  • +
  • p_valuescalar or array-like of int or float
  • +
  • digitsint
    小数点以下の桁数
  • +
  • big_markint
    3桁毎の桁区切りに使用する記号。カンマ ',', アンダーバー '_', もしくは 非表示 '' から選ぶことができます。
  • +
  • symbolstr
     貨幣記号を表す文字列
  • +
+
+
+

35.3 返り値 Value

+

 以下の値をもつ pd.Series を返します。

+
    +
  • building_block.style_number(): 任意の数値に対して、小数点以下を桁数 digits に丸め、3桁区切り記号を通過した値を文字列として返します。f-string によるフォーマット f'{x:{big_mark}.{digits}f}' を用いて実装されています。
  • +
  • building_block.style_currency()build.style_number() と同じく任意の数値に対して、小数点以下を桁数 digits に丸め、3桁区切り記号を通過した値を文字列として返しますが、さらに貨幣記号を追加します。f-string によるフォーマット f'{symbol}{x:{big_mark}.{digits}f}' を用いて実装されています。
  • +
  • building_block.style_percent(): 任意の数値をパーセンテージ表示に変換した値を文字列として返します。f-string によるフォーマット f'{x:,.{digits}%}' を用いて実装されています。
  • +
+
+
+

35.4 使用例 Examples

+
import numpy as np
+from py4stats import building_block as build
+
+x = [2000, 1000, 0.5, 0.11, 0.123]
+
+print(build.style_number(x).to_list())
+#> ['2,000.00', '1,000.00', '0.50', '0.11', '0.12']
+
+print(build.style_number(x, big_mark = '').to_list())
+#> ['2000.00', '1000.00', '0.50', '0.11', '0.12']
+
+print(build.style_currency(x).to_list())
+#> ['$2,000', '$1,000', '$0', '$0', '$0']
+
pct = [0.11, 0.06, 0.05, 0.01, 0.00234]
+
+print(build.style_percent(pct).to_list())
+#> ['11.00%', '6.00%', '5.00%', '1.00%', '0.23%']
+
+print(build.style_percent(pct, unit = 1).to_list())
+#> ['0.11%', '0.06%', '0.05%', '0.01%', '0.00%']
+
+print(build.style_percent(pct, unit = 1000, symbol = '‰').to_list())
+#> ['110.00‰', '60.00‰', '50.00‰', '10.00‰', '2.34‰']
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/oxford_comma.html b/docs/docs/man/oxford_comma.html new file mode 100644 index 0000000..e53940a --- /dev/null +++ b/docs/docs/man/oxford_comma.html @@ -0,0 +1,941 @@ + + + + + + + + + +37  並列文の作成 oxford_comma() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

37  並列文の作成 oxford_comma()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

37.1 概要

+

 文字列のリストを与えると、リストの要素を英文における並列文の形に変換する関数です。表記法については Wikipedia Serial comma を参照し、コードについては stack overflow:Grammatical List Join in Python [duplicate] を参照しました。

+
oxford_comma(x, sep_last = 'and', quotation = True)
+
+oxford_comma_and(x, quotation = True)
+
+oxford_comma_or(x, quotation = True)
+
+
+

37.2 引数

+
    +
  • xstr or list of str
  • +
  • quotation: bool
     リストの各要素にクオーテーションマーク ’’ を追加するかどうかを表す論理値。True(初期設定)であればクオーテーションマークを追加し、False であれば追加しません。
  • +
  • sep_last: str oxford_comma() のみ
     リストの最後の要素の直前に付加する単語を表す文字列。
  • +
+

なお、oxford_comma_and(x)oxford_comma(x, 'and') と、oxford_comma_or(x)oxford_comma(x, 'or') と同等です。

+
+
+

37.3 使用例

+
from py4stats import building_block as build
+x = ['A', 'B', 'C']
+
+print(build.oxford_comma_and(x))
+#> 'A', 'B' and 'C'
+
+print(build.oxford_comma_and(x, quotation = False))
+#> A, B and C
+
+print(build.oxford_comma_or(x))
+#> 'A', 'B' or 'C'
+

リストの要素が1つの場合、あるいは x に文字列が指定された場合はカンマなどを追加せずにそのまま出力します。

+
print(build.oxford_comma_or(['A']))
+#> 'A'
+
+print(build.oxford_comma_or('A'))
+#> 'A'
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/plot_category.html b/docs/docs/man/plot_category.html new file mode 100644 index 0000000..962a17b --- /dev/null +++ b/docs/docs/man/plot_category.html @@ -0,0 +1,992 @@ + + + + + + + + + +8  py4stats.plot_category() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

8  py4stats.plot_category()

+
+ + + +
+ + + + +
+ + + +
+ + +

カテゴリ変数の回答分布を 100% 積み上げ横棒グラフとして描画します。

+
+

8.1 概要

+

本関数は、複数のカテゴリ変数について回答分布を集計し、各変数を1本の100%積み上げ横棒グラフとして可視化します。リッカート尺度による設問や、共通のカテゴリをもつ、アンケートの回答データの可視化を主な用途としています。

+
plot_category(
+    data: IntoFrameT,
+    palette: Optional[sns.palettes._ColorPalette] = None,
+    legend_type: Literal['horizontal', 'vertical', 'none'] = 'horizontal',
+    show_vline: bool = True,
+    ax: Optional[Axes] = None,
+):
+
+
+

8.2 引数 Argument

+
    +
  • dataIntoFrameT(必須)
    カテゴリ変数を含む入力データフレーム(1列につき1変数)。 narwhals がサポートする任意のデータフレーム型(例:pandas.DataFramepolars.DataFrame)を指定できます。 すべての列は、同一のカテゴリ体系(共通のカテゴリラベル)を共有している必要があります。 注意pyarrow.Table については、その仕様による機能制限があります。詳細は「注意 Notes」セクションを参照してください。
  • +
  • sort_by: str
    回答カテゴリの並び順を決定する基準。'values':カテゴリの値(ラベル)でソートします。'frequency':出現頻度の高い順にソートします。デフォルトは 'values' です。
  • +
  • palette sns.palettes._ColorPalette:
    回答カテゴリに使用するカラーパレット。 None の場合は、内部でデフォルトの発散型パレットを生成します。 指定する場合は、カテゴリ数と同じ長さの配列である必要があります。 デフォルトは None です。
  • +
  • legend_typestr:
    凡例の配置方法。デフォルトは 'horizontal' です。 +
      +
    • 'horizontal':凡例をグラフ下部に横並びで表示します。
    • +
    • 'vertical':凡例をグラフ右側に縦並びで表示します。
    • +
    • 'none':凡例を表示しません。
    • +
  • +
  • show_vline:bool
    True の場合、x = 0.5(50%)の位置に基準となる垂直線を描画します。 割合の中点を視覚的に示す目的で使用できます。デフォルトは True です。
  • +
  • ax:
    描画先となる matplotlib の Axes。複数のグラフを並べる場合などに使用します。デフォルトの None の場合は、新しい Figure と Axes が作成されます。
  • +
+
+
+

8.3 使用例 Example

+
import py4stats as py4st
+import pandas as pd
+import itertools
+
+Q1 = [70 * ['Strongly agree'], 200 * ['Agree'], 235 * ['Disagree'], 149 * ['Strongly disagree']]
+Q2 = [74 * ['Strongly agree'], 209 * ['Agree'], 238 * ['Disagree'], 133 * ['Strongly disagree']]
+Q3 = [59 * ['Strongly agree'], 235 * ['Agree'], 220 * ['Disagree'], 140 * ['Strongly disagree']]
+Q4 = [40 * ['Strongly agree'], 72 * ['Agree'], 266 * ['Disagree'], 276 * ['Strongly disagree']]
+
+data = pd.DataFrame({
+    'I read only if I have to.':list(itertools.chain.from_iterable(Q1)),
+    'Reading is one of my favorite hobbies.':list(itertools.chain.from_iterable(Q2)),
+    'I like talking about books with other people.':list(itertools.chain.from_iterable(Q3)),
+    'For me, reading is a waste of time.':list(itertools.chain.from_iterable(Q4))
+})
+
categ_list = ['Strongly disagree', 'Disagree', 'Agree', 'Strongly agree']
+
+data_pd = data.apply(pd.Categorical, categories = categ_list)
+
+py4st.plot_category(data_pd)
+
+
+

+
plot_category1
+
+
+
import polars as pl
+import textwrap
+
+data_pl = pl.from_pandas(data)
+data_pl = data_pl.with_columns(
+        pl.all().cast(pl.Enum(categ_list))
+    )\
+    .rename(lambda x: textwrap.fill(x, width = 25))
+
+fig, ax = plt.subplots()
+
+py4st.plot_category(
+    data_pl, 
+    palette = sns.color_palette('RdBu', n_colors = 4),
+    ax = ax
+    )
+
+ax.set_title('Survey on attitudes toward reading');
+
+
+

+
plot_category2
+
+
+
+
+

8.4 注意 Notes

+
    +
  • sort_by="values" は、カテゴリの順序情報(例:pandasordered categoricalPolarsEnum で定義した順序)を前提に、カテゴリ順で描画します。
  • +
  • 推奨: sort_by=“values” を利用する場合は、入力として pandas.DataFrame(各列を pd.Categorical に設定)または polars.DataFrame(各列を Enum に設定)を推奨します。
  • +
  • polars.Categorical の列では、カテゴリ順が期待通りに保持されず、辞書順(例:Agree, Disagree, …)で描画される場合があります。
  • +
  • pyarrow.Table を入力した場合、sort_by = 'values’dictionary 型の制約によりエラーとなる場合があります。その場合は sort_by="frequency" を使用してください。
  • +
+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/plot_miss_var.html b/docs/docs/man/plot_miss_var.html new file mode 100644 index 0000000..22948f8 --- /dev/null +++ b/docs/docs/man/plot_miss_var.html @@ -0,0 +1,957 @@ + + + + + + + + + +16  py4stats.plot_miss_var() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

16  py4stats.plot_miss_var()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

16.1 概要

+

R言語の naniar::gg_miss_var() をオマージュした関数で、データフレームの各変数について欠測値の量を横棒グラフとして可視化します。欠損値統計の計算には py4stats.diagnose() を使用しています。

+
plot_miss_var(
+    data: IntoFrameT,
+    values: Literal['missing_percent', 'missing_count'] = 'missing_percent', 
+    sort: bool = True, 
+    miss_only: bool = False, 
+    top_n: Optional[int] = None,
+    fontsize: int = 12,
+    ax: Optional[Axes] = None,
+    color: str = '#478FCE',
+    **kwargs: Any
+)
+
+
+

16.2 引数 Argument

+
    +
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • +
  • normalizestr
     グラフに表示する値の種類。 +
      +
    • missing_percent 列毎の欠測率をパーセンテージで表示します。
    • +
    • columns 列毎の欠測数を表示します。
    • +
  • +
  • sortbool
    プロット前に選択した指標で列をソートするかどうか。初期設定は True です。。
  • +
  • miss_onlybool
    欠測値を含まない列を除外するかどうか。True だと欠測値を含まない列を除外し、False(初期設定)だと省略せずに全ての列を表示します。
  • +
  • top_nint
    棒グラフを表示するグラフの個数。top_n = None(初期設定)の場合、すべての棒グラフを表示し、整数値が指定された場合、欠測率(数)の上位 top_n 件が表示されます。
  • +
  • ax
     matplotlib の ax オブジェクト。複数のグラフを並べる場合などに使用します。
  • +
  • fontsizeint
     軸ラベルなどのフォントサイズ。
  • +
  • palettelist of str
     グラフの描画に使用する色コード。棒グラフの色に対応します。
  • +
+
+
+

16.3 使用例 Example

+
import py4stats as py4st
+import pandas as pd
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込
+
+py4st.plot_miss_var(penguins)
+
+
+

+
plot_miss_var1
+
+
+
py4st.plot_miss_var(penguins, values = 'missing_count', miss_only = True)
+
+
+

+
plot_miss_var2
+
+
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/point_range.html b/docs/docs/man/point_range.html new file mode 100644 index 0000000..e6c062a --- /dev/null +++ b/docs/docs/man/point_range.html @@ -0,0 +1,972 @@ + + + + + + + + + +10  数値変数の点推定と区間推定:py4stats.mean_qi() py4stats.median_qi() py4stats.mean_ci() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

10  数値変数の点推定と区間推定:py4stats.mean_qi() py4stats.median_qi() py4stats.mean_ci()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

10.1 概要

+

 R言語の ggdist::mean_qi() をオマージュした数値変数の点推定と区間推定を行う関数です。

+
mean_qi(
+    data: Union[IntoFrameT, SeriesT],
+    width: float = 0.975,
+    interpolation: str = 'midpoint',
+    to_native: bool = True
+)
+mean_qi(
+    data: Union[IntoFrameT, SeriesT],
+    width: float = 0.975,
+    interpolation: str = 'midpoint',
+    to_native: bool = True
+)
+
+median_qi(
+    data: Union[IntoFrameT, IntoSeriesT],
+    width: float = 0.975,
+    interpolation: str = 'midpoint',
+    to_native: bool = True
+)
+
+mean_ci(
+    data: Union[IntoFrameT, IntoSeriesT],
+    width: float = 0.975,
+    to_native: bool = True
+)
+
+
+

10.2 引数 Argument

+
    +
  • dataIntoFrameT or IntoSeriesT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame もしくは Series 互換オブジェクト (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • +
  • widthfloat
     分位点区間の幅、もしくは信頼区間の計算に用いる信頼係数。
  • +
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • +
+
+
+

10.3 使用例 Examples

+
import py4stats as py4st
+import pandas as pd
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込み
+
+print(py4st.mean_qi(penguins['bill_length_mm']).round(2))
+#>          variable   mean  lower  upper
+#> 0  bill_length_mm  43.92   34.8   53.1
+
+
+print(py4st.median_qi(penguins['bill_length_mm']).round(2))
+#>          variable  median  lower  upper
+#> 0  bill_length_mm   44.45   34.8   53.1
+
+print(py4st.mean_ci(penguins['bill_length_mm']).round(2))
+#>          variable   mean  lower  upper
+#> 0  bill_length_mm  43.92  43.26  44.58
+
+print(py4st.mean_ci(penguins[['bill_length_mm', 'bill_depth_mm']]).round(2))
+#>          variable   mean  lower  upper
+#> 0  bill_length_mm  43.92  43.26  44.58
+#> 1   bill_depth_mm  17.15  16.91  17.39
+
+print(penguins.groupby('species')[['bill_length_mm']].apply(py4st.median_qi).round(2))
+#>                    variable  median  lower  upper
+#> species                                          
+#> Adelie    0  bill_length_mm   38.80  34.05  44.10
+#> Chinstrap 0  bill_length_mm   49.55  42.45  55.00
+#> Gentoo    0  bill_length_mm   47.30  42.65  53.85
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/predicate_str.html b/docs/docs/man/predicate_str.html new file mode 100644 index 0000000..5fb457f --- /dev/null +++ b/docs/docs/man/predicate_str.html @@ -0,0 +1,1003 @@ + + + + + + + + + +19  文字列のフォーマットについての論理関数 py4stats.is_number(), py4stats.is_ymd(), py4stats.is_ymd_like() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

19  文字列のフォーマットについての論理関数
py4stats.is_number(), py4stats.is_ymd(), py4stats.is_ymd_like()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

19.1 概要

+

Series の要素が、特定のフォーマットにそった文字列かどうかを判定する関数です。

+
is_number(
+  data:IntoSeriesT, 
+  na_default:bool = True, 
+  to_native: bool = True
+  )
+
+is_ymd(
+  data:IntoSeriesT, 
+  na_default:bool = True, 
+  to_native: bool = True
+  )
+
+is_ymd_like(
+  data:IntoSeriesT, 
+  na_default:bool = True, 
+  to_native: bool = True
+  )
+
    +
  • py4stats.is_number():与えられた文字列が数字かどうかを判定します。
  • +
  • py4stats.is_ymd():与えられた文字列が yyyy-mm-dd フォーマットにそった値かどうかを判定します。
  • +
  • py4stats.is_ymd_like():与えられた文字列が’2024年3月3日’ のような yyyy-mm-dd に近いフォーマットの値かどうかを判定します。
  • +
+
+
+

19.2 引数 Argument

+
    +
  • dataIntoSeriesT(必須)
  • +
  • 入力データ。narwhals が受け入れ可能な Series 互換オブジェクト (例:pandas.Seriespolars.DataFramepyarrow.Table)を指定できます。
  • +
  • na_defaultbool
     NA値に対して関数が返す値。na_default = True (初期設定)であれば NoneNaN には True を返し、na_default = False であれば False が返します。
  • +
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • +
+
+
+

19.3 使用例

+
import py4stats as py4st
+import pandas as pd
+import numpy as np
+
+s = pd.Series([
+    '123', "0.12", "1e+07", '-31', '2個', '1A',
+    "2024-03-03", "2024年3月3日", "24年3月3日", '令和6年3月3日',
+    '0120-123-456', "apple", "不明", None, np.nan
+    ])
+
+print(s[py4st.is_number(s)])
+#> 0       123
+#> 1      0.12
+#> 2     1e+07
+#> 3       -31
+#> 13     None
+#> 14      NaN
+#> dtype: object
+
+print(s[py4st.is_ymd(s)])
+#> 6     2024-03-03
+#> 13          None
+#> 14           NaN
+#> dtype: object
+
+print(s[py4st.is_ymd_like(s)])
+#> 6     2024-03-03
+#> 7      2024年3月3日
+#> 8        24年3月3日
+#> 9       令和6年3月3日
+#> 13          None
+#> 14           NaN
+#> dtype: object
+

 実践的な使用例として「厚生労働省 4.食中毒統計資料」のうち、2020年の食中毒事件一覧を考えます。東京都のデータを取り出て'摂食者数'の列を見ると、数字が並んでいるものの dtypeobject となっており、数字ではない値が含まれていることが疑われます。

+
# 厚生労働省:食中毒統計資料より
+data = pd.read_excel('https://www.mhlw.go.jp/content/R2itiran.xlsx', header = 1)\
+  .query('都道府県名等.str.contains("東京")')
+
+print(data['摂食者数'])
+#> 280    41
+#> 281    86
+#> 282     3
+#> 283    10
+#> 284     3
+#>        ..
+#> 381     2
+#> 382     2
+#> 383     4
+#> 384     6
+#> 385     4
+#> Name: 摂食者数, Length: 106, dtype: object
+

eda.is_number() を使うと数字以外にどのような値が含まれているかを確認できるため、これをもとに「不明」となっている部分は NaN に置き換えるなどの対処法が考えられます。

+
print(data.loc[~py4st.is_number(data['摂食者数']), '摂食者数'])
+#> 285    不明
+#> 315    不明
+#> 374    不明
+#> 375    不明
+#> 377    不明
+#> 378    不明
+#> 379    不明
+#> 380    不明
+#> Name: 摂食者数, dtype: object
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/relocate.html b/docs/docs/man/relocate.html new file mode 100644 index 0000000..28a0d6f --- /dev/null +++ b/docs/docs/man/relocate.html @@ -0,0 +1,994 @@ + + + + + + + + + +13  py4stats.relocate(): 列を削除せずに並び替える – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

13  py4stats.relocate(): 列を削除せずに並び替える

+
+ + + +
+ + + + +
+ + + +
+ + +
+

13.1 概要

+

relocate() 関数は、データフレームに含まれる列を削除することなく並び替えるための関数です。指定した列(1 列または複数列)を、先頭・特定の列の前・特定の列の後に移動させることができます。本関数は、R の dplyr:relocate() に近い操作感を Python で提供することを目的としています。列の指定には、列名(文字列)だけでなく、narwhals の式(Expr)や Selector を利用でき、柔軟な列選択

+
relocate(
+        data: IntoFrameT, 
+        *args: Union[str, List[str], narwhals.Expr, narwhals.selectors.Selector], 
+        before: Optional[str] = None,
+        after: Optional[str] = None,
+        place: Optional[Literal["first", "last"]] = None,
+        to_native: bool = True
+    ):
+
+
+

13.2 引数 Argument

+
    +
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。

  • +
  • *argsstr / list[str] / narwhals.Expr / narwhals.Selector
    移動したい列を指定します。指定方法は次のとおりです。

    +
      +
    • 列名(例:"x"
    • +
    • 列名のリスト(例:["x", "y"]
    • +
    • narwhals の式(Expr)(例:nw.col("x")
    • +
    • narwhals の Selector (例:ncs.numeric()
    • +
    +

    指定した順序は、移動後の列順にもそのまま反映されます。

  • +
  • beforestr, optional)
    args で指定された列を、この列の直前に移動します。
    after と同時に指定することはできません。デフォルトは None です。

  • +
  • afterstr, optional)
    args で指定された列を、この列の直後に移動します。
    before と同時に指定することはできません。デフォルトは None です。

  • +
  • placestr, optional)
    *args で指定された列の、配置場所を指定します。

    +
      +
    • "first": 選択した列をデータフレームの先頭(最も左)に配置します。
    • +
    • "last": 選択した列をデータフレームの末尾(最も右)に配置します。 place 引数は before または after と同時に指定することはできません。 未指定(None)の場合は "first" と同じ挙動になります。
    • +
  • +
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。

  • +
+
+

13.2.1 返り値

+
    +
  • IntoFrameT
    入力データフレームと同じ列を保持したまま、指定されたルールに従って並び替えられたデータフレームを返します。
  • +
+
+
+
+

13.3 使用例 Example

+
import py4stats as py4st
+import pandas as pd
+import narwhals.selectors as ncs
+from palmerpenguins import load_penguins
+
+penguins_mini = py4st.filtering_out(penguins, starts_with = 'bill').head(3)
+print(penguins_mini)
+#>   species     island  flipper_length_mm  body_mass_g     sex  year
+#> 0  Adelie  Torgersen              181.0       3750.0    male  2007
+#> 1  Adelie  Torgersen              186.0       3800.0  female  2007
+#> 2  Adelie  Torgersen              195.0       3250.0  female  2007
+
# *args に指定した列は最前列に移動します
+print(py4st.relocate(penguins_mini, 'year', 'sex'))
+#>    year     sex species     island  flipper_length_mm  body_mass_g
+#> 0  2007    male  Adelie  Torgersen              181.0       3750.0
+#> 1  2007  female  Adelie  Torgersen              186.0       3800.0
+#> 2  2007  female  Adelie  Torgersen              195.0       3250.0
+
+# ncs.numeric() を使うことで、数値変数を指定できます
+print(py4st.relocate(penguins_mini, ncs.numeric()))
+#>    flipper_length_mm  body_mass_g  year species     island     sex
+#> 0              181.0       3750.0  2007  Adelie  Torgersen    male
+#> 1              186.0       3800.0  2007  Adelie  Torgersen  female
+#> 2              195.0       3250.0  2007  Adelie  Torgersen  female
+
+# year 列を island 列の直前に移動
+print(py4st.relocate(penguins_mini, 'year', before = 'island'))
+#>   species  year     island  flipper_length_mm  body_mass_g     sex
+#> 0  Adelie  2007  Torgersen              181.0       3750.0    male
+#> 1  Adelie  2007  Torgersen              186.0       3800.0  female
+#> 2  Adelie  2007  Torgersen              195.0       3250.0  female
+
+# year 列を island 列の直後に移動
+print(py4st.relocate(penguins_mini, 'year', after = 'island'))
+#>   species     island  year  flipper_length_mm  body_mass_g     sex
+#> 0  Adelie  Torgersen  2007              181.0       3750.0    male
+#> 1  Adelie  Torgersen  2007              186.0       3800.0  female
+#> 2  Adelie  Torgersen  2007              195.0       3250.0  female
+
+#.  place = 'last' で最後列に移動
+print(py4st.relocate(penguins_mini, 'year', place = 'last'))
+#>   species     island  flipper_length_mm  body_mass_g     sex  year
+#> 0  Adelie  Torgersen              181.0       3750.0    male  2007
+#> 1  Adelie  Torgersen              186.0       3800.0  female  2007
+#> 2  Adelie  Torgersen              195.0       3250.0  female  2007
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/remove_empty_constant.html b/docs/docs/man/remove_empty_constant.html new file mode 100644 index 0000000..4f92720 --- /dev/null +++ b/docs/docs/man/remove_empty_constant.html @@ -0,0 +1,1017 @@ + + + + + + + + + +11  空白列, 定数列の削除:py4stats.remove_empty(), py4stats.remove_constant() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

11  空白列, 定数列の削除:py4stats.remove_empty(), py4stats.remove_constant()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

11.1 概要

+

 py4stats.remove_empty()はR言語の janitor:remove_empty() をオマージュした関数で、全ての要素が NaN である列や行をデータフレームから除外します py4stats.remove_constant() はR言語の janitor:remove_constant() をオマージュした関数で、1種類だけの要素からなる列をデータフレームから除外します。

+
remove_empty(
+    data: IntoFrameT,
+    cols: bool = True,
+    rows: bool = True,
+    cutoff: float = 1.0,
+    quiet: bool = True,
+    to_native: bool = True,
+    **kwargs: Any
+) 
+
+remove_constant(
+    data: IntoFrameT,
+    quiet: bool = True,
+    to_native: bool = True,
+    dropna = False,
+    **kwargs: Any
+)
+
+
+

11.2 引数 Argument

+
    +
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • +
  • colsbool
     空白列を削除するかどうかを表すブール値(remove_empty() のみ)。True(初期設定) なら空白列を削除し、Falseなら全ての要素が NaN の列があっても削除しません。
  • +
  • rowsbool
     空白行を削除するかどうかを表すブール値(remove_empty() のみ)。True(初期設定) なら空白行を削除し、Falseなら全ての要素が NaN の行があっても削除しません。
  • +
  • cutofffloat
     列(行)の削除を行うかどうかを判定する欠測率の閾値(remove_empty() のみ)。ある列(行)における NaN の割合が >= cutoff のとき、その列(行)を削除します。初期設定は1で全ての要素が NaN の列(行)のみ削除しますが、例えば cutoff = 0.9 とすることで NaN の割合9が割以上の列(行)を削除できます。
  • +
  • quietbool
     削除した列(行)を報告するかどうかを表すブール値。quiet = True(初期設定) であれば何も報告せずに削除だけ行い、quiet = False なら、削除した列(行)の数と列名(行名)を報告します。
  • +
  • dropnabool
     ユニーク値の数を計算する際に、NaN を除外するかどうかを表すブール値(remove_constant() のみ)。dropna = True だと NaN を除外し、dropna = False(初期設定)だと NaN を除外しません。データフレームに NaN と、 NaN ではない1種類の値からなる列がある場合、dropna = False だと削除されず、dropna = True だと削除されます。
  • +
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • +
+
+
+

11.3 使用例 Example

+

py4stats.remove_empty() の使用例。

+
import py4stats as py4st
+import pandas as pd
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込み
+
+penguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy()
+# 空白列を作成
+penguins2.loc[:, 'empty'] = np.nan
+# 空白行を作成
+penguins2.loc[344, :] = np.nan
+
+print(penguins2.tail(3))
+#>        species  body_mass_g  empty
+#> 342  Chinstrap       4100.0    NaN
+#> 343  Chinstrap       3775.0    NaN
+#> 344        NaN          NaN    NaN
+
# 完全に空白な行と列を削除。
+print(py4st.remove_empty(penguins2, quiet = False).tail(3))
+#> Removing 1 empty column(s) out of 3 columns(Removed: empty).
+#> Removing 1 empty row(s) out of 345 rows(Removed: 344).
+#>        species  body_mass_g
+#> 341  Chinstrap       3775.0
+#> 342  Chinstrap       4100.0
+#> 343  Chinstrap       3775.0
+
+# 完全に空白な列のみ削除。
+print(py4st.remove_empty(penguins2, rows = False, quiet = False).tail(3))
+#> Removing 1 empty column(s) out of 3 columns(Removed: empty).
+#>        species  body_mass_g
+#> 342  Chinstrap       4100.0
+#> 343  Chinstrap       3775.0
+#> 344        NaN          NaN
+
+# 完全に空白な行のみ削除。
+print(py4st.remove_empty(penguins2, cols = False, quiet = False).tail(3))
+#> Removing 1 empty row(s) out of 345 rows(Removed: 344).
+#>        species  body_mass_g  empty
+#> 341  Chinstrap       3775.0    NaN
+#> 342  Chinstrap       4100.0    NaN
+#> 343  Chinstrap       3775.0    NaN
+
# quiet = True の場合
+print(py4st.remove_empty(penguins2).tail(3))
+#>        species  body_mass_g
+#> 341  Chinstrap       3775.0
+#> 342  Chinstrap       4100.0
+#> 343  Chinstrap       3775.0
+

py4stats.remove_constant() の使用例。

+
penguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy()
+penguins2.loc[:, 'constant'] = 'c'
+
+print(penguins2.head(3))
+#>   species  body_mass_g constant
+#> 0  Adelie       3750.0        c
+#> 1  Adelie       3800.0        c
+#> 2  Adelie       3250.0        c
+
+print(py4st.remove_constant(penguins2, quiet = False).head(3))
+#> Removing 1 constant column(s) out of 3 column(s)(Removed: constant).
+#>   species  body_mass_g
+#> 0  Adelie       3750.0
+#> 1  Adelie       3800.0
+#> 2  Adelie       3250.0
+
penguins2.loc[:, 'almost_empty'] = pd.NA
+penguins2.loc[1, 'almost_empty'] = 'c'
+
+# dropna = False なら、almost_empty は削除されません。
+print(py4st.remove_constant(penguins2).head(3))
+#>   species  body_mass_g almost_empty
+#> 0  Adelie       3750.0         <NA>
+#> 1  Adelie       3800.0            c
+#> 2  Adelie       3250.0         <NA>
+
+print(py4st.remove_constant(penguins2, dropna = True).head(3))
+#>   species  body_mass_g
+#> 0  Adelie       3750.0
+#> 1  Adelie       3800.0
+#> 2  Adelie       3250.0
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/scale_wmean.html b/docs/docs/man/scale_wmean.html new file mode 100644 index 0000000..c526eac --- /dev/null +++ b/docs/docs/man/scale_wmean.html @@ -0,0 +1,1013 @@ + + + + + + + + + +18  数値変換・正規化ユーティリティ: py4stats.weighted_mean(), py4stats.scale(), py4stats.min_max() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

18  数値変換・正規化ユーティリティ: py4stats.weighted_mean(), py4stats.scale(), py4stats.min_max()

+
+ + + +
+ + + + +
+ + + +
+ + +

本モジュールは、探索的データ解析(EDA)で頻繁に用いられる加重平均の計算および 数値データの正規化・標準化を行う関数群を提供します。
+内部では narwhals を利用することで、pandas・polars など複数のデータフレーム/シリーズ実装に対して共通の API を提供しています。

+
+

18.1 概要

+
weighted_mean(
+    x: IntoSeriesT, 
+    w: IntoSeriesT, 
+    dropna:bool = False
+    ) -> float:
+
+scale(
+    x: Union[IntoSeriesT, pd.DataFrame], 
+    ddof: int = 1, to_native: bool = True
+    ) -> IntoSeriesT:
+
+min_max(
+    x: Union[IntoSeriesT, pd.DataFrame], 
+    to_native: bool = True
+    ) -> IntoSeriesT:
+

weighted_mean(): 数値系列 x と対応する重み w を用いて、加重平均を計算します。欠損値の扱いを制御するためのオプションを備えています。

+

scale(): 数値データを Z スコア標準化します。系列データを主な対象としますが、pandas.DataFrame に対しても専用実装により列単位での標準化をサポートしています。

+

min_max(): 数値データを Min-Max Normarization により \([0, 1]\) の範囲に変換します。scale() と同様に、Series を主対象としつつ pandas.DataFrame にも対応しています。

+
+
+

18.2 引数 Argument

+
    +
  • xIntoSeriesT or pd.DataFrame(必須)
    +
      +
    • narwhals が受け入れ可能な Series 互換オブジェクト(例:pandas.Seriespolars.Series)を指定できます。scale()関数と min_max()関数のみ pandas.DataFrame を指定することができ、この場合、各列ごとに変換が適用されます。
    • +
  • +
  • wIntoSeriesT(必須)
    x に対応する重みを表す数値系列。x と同じ長さである必要があります。narwhals が受け入れ可能な Series 互換オブジェクト(例:pandas.Seriespolars.Series)を指定できます。
  • +
  • ddofint, optional)scale(), min_max() のみ
    標準偏差の計算に用いる自由度調整量(delta degrees of freedom)。デフォルトは 1 です。
  • +
  • dropnabool, optional)scale(), min_max() のみ
    True の場合、x または w のいずれかが欠損値(NaN)である観測を計算前に除外します。デフォルトは False です。
  • +
  • to_nativebool, optional)scale(), min_max() のみ
    True の場合、入力と同じ型の Series(e.g. pandas / polars / pyarrow)を返します。
    False の場合、Series を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • +
+
+
+
+

18.3 返り値 Value

+
    +
  • weighted_mean +
      +
    • float
    • +
    • 加重平均
    • +
  • +
  • scale +
      +
    • IntoSeriesT
    • +
    • 平均 0、標準偏差 1 に標準化された値を返します。
    • +
  • +
  • min_max +
      +
    • IntoSeriesT
    • +
    • 最小値が 0、最大値が 1 となるよう正規化された値を返します。
    • +
  • +
+
+
+

18.4 使用例 Example

+
import py4stats as py4st
+import pandas as pd
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込
+
+x1 = penguins.groupby('species')['bill_length_mm'].mean()
+w = penguins.groupby('species')['bill_length_mm'].count()
+
+print(
+    f"{py4st.weighted_mean(x1, w) :.2f}, "
+    f"{penguins['bill_length_mm'].mean() :.2f}"
+)
+#> 43.92, 43.92
+
+x2 = penguins['bill_length_mm']
+z1 = py4st.scale(x2)
+print(f"{z1.mean():.2f}, {z1.std():.2f}")
+#> 0.00, 1.00
+
+z2 = py4st.min_max(x2)
+print(f"{z2.min():.2f}, {z2.max():.2f}")
+#> 0.00, 1.00
+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/set_miss.html b/docs/docs/man/set_miss.html new file mode 100644 index 0000000..d676c74 --- /dev/null +++ b/docs/docs/man/set_miss.html @@ -0,0 +1,976 @@ + + + + + + + + + +17  py4stats.set_miss() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

17  py4stats.set_miss()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

17.1 概要

+

この関数は、Series の非欠測要素のうち、指定された個数または割合を欠測値に置き換えます。narwhals を利用することで、複数の Series バックエンドに対応しています。主にテストデータの作成や、欠測データのシミュレーションを目的とした関数です。

+
set_miss(
+    x: IntoSeriesT, 
+    n: Optional[int] = None,
+    prop: Optional[float] = None, 
+    method: Literal['random', 'first', 'last'] = 'random', 
+    random_state: Optional[int] = None, 
+    na_value: Any = None,
+    to_native: bool = True
+    )
+
+
+

17.2 引数 Argument

+
    +
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • +
  • nint
    処理後の Series に含まれる欠測値の目標個数。すでに n 個以上の欠測値が含まれている場合は、新たな欠測値は追加されず、警告が発せられます。
  • +
  • propfloat
    処理後の Series に含まれる欠測値の目標割合。0 から 1 の間で指定してください。すでに欠測値の割合が prop 以上である場合は、新たな欠測値は追加されず、警告が発せられます。
  • +
  • method: str: 欠測値に置き換える要素の選択方法。 +
      +
    • 'random': 非欠測要素の中からランダムに選択します。
    • +
    • 'first': Series の先頭から選択します。
    • +
    • 'last': Series の末尾から選択します。 デフォルトは 'random' です。
    • +
  • +
  • random_state (int, optional): method = 'random' の場合に使用する乱数シード。再現性のある結果を得るために指定できます。 method'random' 以外の場合、random_state は無視されます。
  • +
  • na_value: (Any)
    欠測値として使用する値。デフォルトは None です。
  • +
  • to_nativebool, optional)
    True の場合、入力と同じ型の Series(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.Series を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • +
+
+
+

17.3 使用例 Example

+
import pandas as pd
+from py4stats import set_miss
+s = pd.Series([1, 2, 3, 4, 5])
+py4st.set_miss(s, n = 2, method='first')
+#> 0    NaN
+#> 1    NaN
+#> 2    3.0
+#> 3    4.0
+#> 4    5.0
+#> dtype: float64
+
+s_miss = py4st.set_miss(s, prop=0.4, method='random', random_state=0)
+#> 0    1.0
+#> 1    NaN
+#> 2    3.0
+#> 3    NaN
+#> 4    5.0
+#> dtype: float64
+

x に代入された Series オブジェクトに、既に指定された以上の欠測値が含まれていた場合、次のように欠測値を追加せず UserWarning を出します。

+
py4st.set_miss(s_miss, n = 2)
+#> UserWarning: Already contained 2(>= n) missing value(s) in `x`, 
+#> no additional missing values were added.
+#> 0    1.0
+#> 1    NaN
+#> 2    3.0
+#> 3    NaN
+#> 4    5.0
+#> dtype: float64
+
from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込
+
+penguins['island'] = py4st.set_miss(
+    penguins['island'], 
+    n = 100, method='first'
+    )
+py4st.plot_miss_var(penguins, values = 'missing_count')
+
+
+

+
set_miss.png
+
+
+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/style_pvalue.html b/docs/docs/man/style_pvalue.html new file mode 100644 index 0000000..ddb8e5e --- /dev/null +++ b/docs/docs/man/style_pvalue.html @@ -0,0 +1,964 @@ + + + + + + + + + +36  p-値のフォーマットを変更する関数 – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

36  p-値のフォーマットを変更する関数

+
+ + + +
+ + + + +
+ + + +
+ + +
+

36.1 概要

+

 R言語の style_pvalue()gtools::stars.pval() をオマージュした関数でp-値を見やすい形のフォーマットに変換します。

+
style_pvalue(
+    p_value: ArrayLike,
+    digits: int = 3,
+    prepend_p: bool = False,
+    p_min: float = 0.001,
+    p_max: float = 0.9
+    )
+
+p_stars(
+    p_value, 
+    stars = {'***':0.01, '**':0.05, '*':0.1}
+    )
+
+
+

36.2 引数 Argument

+
    +
  • p_valuescalar or array-like of int or float
  • +
  • digitsintstyle_pvalue() のみ)
     小数点以下の桁数
  • +
  • prepend_pboolstyle_pvalue() のみ)
     出区力に接頭辞 ’p’ を追加するかどうかを表す論理値。False であれば追加されず、True であれば追加されます。
  • +
  • p_minintstyle_pvalue() のみ)
     p-値を実数値で表示する最小値。p_value がこの値を下回る場合、’<p_min’ もしくは ’p<p_min’ の形で表示されます。
  • +
  • p_maxintstyle_pvalue() のみ)
     p-値を実数値で表示する最大値。p_value がこの値を下回る場合、’>p_max’ もしくは ’p>p_max’ の形で表示されます。
  • +
  • starsdictp_stars() のみ)
     有意性を示す記号を key に、表示を切り替える閾値を値(value)にもつ辞書オブジェクト。初期設定の stars = None の場合、{'***': 0.01, '**': 0.05, '*': 0.1} が使用されます。詳細は下記を参照して下さい。
  • +
+
+
+

36.3 返り値 Value

+

 フォーマットされたp-値を表す pd.Series を出力します。building_block.style_pvalue() では引数 p_value に与えられた数値を指定された桁数に丸めた値を表示し、指定された範囲を外れる値については ’<p_min’ や ’>p_max’の書式にへんかんします。  building_block.p_stars()では仮説検定の有意性を示すアスタリスク*` に変換します。初期設定ではアスタリスクはp-値の値に応じて次のように表示されます。

+
    +
  • p ≤ 0.1 *
  • +
  • p ≤ 0.05 **
  • +
  • p ≤ 0.01 ***
  • +
  • p > 0.1 表示なし
  • +
+
+
+

36.4 使用例 Examples

+

+from py4stats import building_block as build
+p_value = [
+    0.999, 0.5028, 0.2514, 0.197, 0.10, 
+    0.0999, 0.06, 0.03, 0.002, 0.0002
+    ]
+
+print(build.style_pvalue(p_value).to_list())
+#> ['>0.9', '0.503', '0.251', '0.197', '0.1', '0.1', '0.06', '0.03', '0.002', '<0.001']
+
+print(build.style_pvalue(p_value, prepend_p = True).to_list())
+#> ['p>0.9', 'p=0.503', 'p=0.251', 'p=0.197', 'p=0.1', 'p=0.1', 'p=0.06', 'p=0.03', 'p=0.002', 'p<0.001']
+
+print(build.p_stars(p_value).to_list())
+#> ['', '', '', '', '*', '*', '*', '**', '***', '***']
+
+# R言語の stats::summary.lm() や gtools::stars.pval() を再現する場合。
+stars_dict = {'***':0.001, '**':0.01, '*': 0.05, '.':0.1}
+print(build.p_stars(p_value, stars = stars_dict).to_list())
+#> ['', '', '', '', '.', '.', '.', '*', '**', '***']
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/tabyl.html b/docs/docs/man/tabyl.html new file mode 100644 index 0000000..ab722e5 --- /dev/null +++ b/docs/docs/man/tabyl.html @@ -0,0 +1,971 @@ + + + + + + + + + +5  py4stats.tabyl() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

5  py4stats.tabyl()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

5.1 概要

+

 データフレームのクロス集計表を作成します。R言語の janitor::tabyl()にいくつかの adorn_ 関数を追加した状態を再現した関数です。初期設定ではクロス集計表の各セルに度数と相対度数を 「度数(相対度数%)`」 の形式で表示します。

+
tabyl(
+    data: IntoFrameT,
+    index: str,
+    columns: str,
+    margins: bool = True,
+    margins_name: str = 'All',
+    normalize: Union[bool, Literal["index", "columns", "all"]] = "index",
+    dropna: bool = False,
+    digits: int = 1,
+    **kwargs: Any
+)
+
+
+

5.2 引数 Argument

+
    +
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • +
  • indexstr
     集計に使用するデータフレームの変数名(必須)。
  • +
  • columnsstr
     集計に使用するデータフレームの変数名(必須)。
  • +
  • marginsbool
     行または列の合計を追加するかどうかを表すブール値。初期設定は True です。
  • +
  • margins_namebool
     行や列の合計の名前。初期設定は 'All' です。
  • +
  • dropnabool
      欠測値(NaN)を集計から除外するかどうかを表すブール値。初期設定は False です。
  • +
  • normalizestr
     丸括弧( )に表示する相対度数の計算方式。 +
      +
    • index 各セルの度数を行の和で割り、横方向の相対度数の和が100%になるように計算します。
    • +
    • columns 各セルの度数を行の列で割り、縦方向の相対度数の和が100%になるように計算します。
    • +
    • all 各セルの度数を総度数で割り、全てのセルの相対度数の和が100%になるように計算します。
    • +
  • +
  • digitsint
     丸括弧( )に表示する相対度数の小数点以下の桁数。初期設定は1です。
  • +
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • +
+
+
+

5.3 使用例

+
import py4stats as py4st
+import pandas as pd
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込
+
+# 横方向の和を100%として計算(初期設定)
+print(py4st.tabyl(penguins, 'island', 'species', normalize = 'index'))
+#> species         Adelie   Chinstrap       Gentoo  All
+#> island                                              
+#> Biscoe      44 (26.2%)    0 (0.0%)  124 (73.8%)  168
+#> Dream       56 (45.2%)  68 (54.8%)     0 (0.0%)  124
+#> Torgersen  52 (100.0%)    0 (0.0%)     0 (0.0%)   52
+#> All        152 (44.2%)  68 (19.8%)  124 (36.0%)  344
+
+# 縦方向の和を100%として計算
+print(py4st.tabyl(penguins, 'island', 'species', normalize = 'columns'))
+#> species        Adelie    Chinstrap        Gentoo          All
+#> island                                                       
+#> Biscoe     44 (28.9%)     0 (0.0%)  124 (100.0%)  168 (48.8%)
+#> Dream      56 (36.8%)  68 (100.0%)      0 (0.0%)  124 (36.0%)
+#> Torgersen  52 (34.2%)     0 (0.0%)      0 (0.0%)   52 (15.1%)
+#> All               152           68           124          344
+
+# 全体の和を100%として計算
+print(py4st.tabyl(penguins, 'island', 'species', normalize = 'all'))
+#> species         Adelie   Chinstrap       Gentoo           All
+#> island                                                       
+#> Biscoe      44 (12.8%)    0 (0.0%)  124 (36.0%)   168 (48.8%)
+#> Dream       56 (16.3%)  68 (19.8%)     0 (0.0%)   124 (36.0%)
+#> Torgersen   52 (15.1%)    0 (0.0%)     0 (0.0%)    52 (15.1%)
+#> All        152 (44.2%)  68 (19.8%)  124 (36.0%)  344 (100.0%)
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/tidy.html b/docs/docs/man/tidy.html new file mode 100644 index 0000000..3e27975 --- /dev/null +++ b/docs/docs/man/tidy.html @@ -0,0 +1,1026 @@ + + + + + + + + + +25  py4stats.tidy(), py4stats.tidy_mfx() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

25  py4stats.tidy(), py4stats.tidy_mfx()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

25.1 概要

+

 R言語の broom::tidy() をオマージュした関数で、sm.ols()smf.logit() などの推定結果を pands.DataFrame に変換します。py4stats.tidy() は回帰係数と関連する検定結果を表示し、 py4stats.tidy_mfx() は限界効果と関連する検定結果を表示します。

+
tidy(
+  x, 
+  name_of_term = None,
+  conf_level = 0.95,
+  **kwargs
+  )
+
+tidy_mfx(
+  x, 
+  at = 'overall', 
+  method = 'dydx', 
+  dummy = False, 
+  conf_level = 0.95, 
+  **kwargs
+  )
+
+
+

25.2 引数 Argument

+
    +
  • x(必須)
     sm.ols()もしくは smf.logit() などで作成された分析結果のオブジェクト。

  • +
  • name_of_termlist of str
     term 列(index) として表示する説明変数の名前のリスト。指定しない場合(初期設定)、モデルの推定に使用された説明変数の名前がそのまま表示されます。

  • +
  • conf_levelfloat
     信頼区間の計算に用いる信頼係数。

  • +
  • at:限界効果の集計方法(tidy_mfx() のみ)。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 at として渡されます。method = 'coef' を指定した場合、この引数は無視されます。

    +
      +
    • 'overall':各観測値の限界効果の平均値を表示(初期設定)
    • +
    • 'mean':各説明変数の平均値における限界効果を表示
    • +
    • 'median':各説明変数の中央値における限界効果を表示
    • +
    • 'zero':各説明変数の値がゼロであるときの限界効果を表示
    • +
  • +
  • method:推定する限界効果の種類(tidy_mfx() のみ)。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 method として渡されます。ただし、method = 'coef' を指定した場合には限界効果を推定せずに回帰係数をそのまま表示します。

    +
      +
    • 'coef':回帰係数の推定値を表示
    • +
    • 'dydx':限界効果の値を変換なしでそのまま表。(初期設定)
    • +
    • 'eyex':弾力性 d(lny)/d(lnx) の推定値を表示
    • +
    • 'dyex':準弾力性 dy /d(lnx) の推定値を表示
    • +
    • 'eydx':準弾力性 d(lny)/dx の推定値を表示
    • +
  • +
  • dummy:ダミー変数の限界効果の推定方法(tidy_mfx() のみ)。もし False (初期設定)であれば、ダミー変数を連続な数値変数として扱います。もし、True であればダミー変数が0から1へと変化したときの予測値の変化を推定します。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 dummy として渡されます。

  • +
+
+
+

25.3 返り値 Value

+

 次の列を含む pands.DataFrame が出力されます。

+
    +
  • term(index)
     説明変数の名称
  • +
  • estimate
     回帰係数(tidy()の場合)、もしくは限界効果(tidy_mfx()の場合)の推定値
  • +
  • std_err
    推定値 estimate の標準誤差
  • +
  • statistics
    estimate = 0 を帰無仮説とする仮説検定の標本検定統計量。x に代入されたモデルが sm.ols() によって作成されたものであれば \(t\) 統計量が表示され、sm.glm() によって作成されたものであれば \(z\) 統計量が表示されます。
  • +
  • p_value
    estimate = 0 を帰無仮説とする両側検定の標本p-値
  • +
  • conf_lower
     信頼区間の下側信頼限界
  • +
  • conf_higher
     信頼区間の上側信頼限界
  • +
+
+
+

25.4 使用例 Examples

+
import pandas as pd
+import numpy as np
+from palmerpenguins import load_penguins
+import statsmodels.formula.api as smf
+
+from py4stats import regression_tools as reg # 回帰分析の要約
+penguins = load_penguins() # サンプルデータの読み込み
+
# 回帰分析の実行
+fit1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()
+
+print(py4st.tidy(fit1).round(4))
+#>                       estimate   std_err  statistics  p_value  conf_lower  conf_higher
+#> term                                                                                  
+#> Intercept             153.7397  268.9012      0.5717   0.5679   -375.1910     682.6704
+#> species[T.Chinstrap] -885.8121   88.2502    -10.0375   0.0000  -1059.4008    -712.2234
+#> species[T.Gentoo]     578.6292   75.3623      7.6780   0.0000    430.3909     726.8674
+#> bill_length_mm         91.4358    6.8871     13.2764   0.0000     77.8888     104.9828
+
penguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)
+
+# ロジスティック回帰の実行
+fit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()
+
+print(py4st.tidy_mfx(fit_logit1).round(4))
+#>                 estimate  std_err  statistics  p_value  conf_lower  conf_higher
+#> body_mass_g      -0.0004   0.0000    -17.6561   0.0000     -0.0004      -0.0003
+#> bill_length_mm   -0.0053   0.0036     -1.4628   0.1435     -0.0123       0.0018
+#> bill_depth_mm    -0.1490   0.0051    -29.1681   0.0000     -0.1591      -0.1390
+
+
+

25.5 注意点

+

 参考にしたR言語の broom::tidy() は様々な種類のモデルに対応したジェネリック関数として定義されていますが、py4stats.tidy()py4stats.tidy_mfx() では対応しているモデルは限定的であることにご注意ださい。py4st.tidy() のメソッドが定義されているオブジェクトのクラスを確認するには次のコードを実行して下さい。

+
list(py4st.tidy.registry.keys())
+

py4stats.tidy()functools.singledispatch を用いたジェネリック関数として実装しています。 Py4Etrics モジュールの py4etrics.heckit.Heckit() で作成された HeckitResults クラスのオブジェクト用のメソッドについては heckit_helper.tidy_heckit() を参照してください。

+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/tidy_heckit.html b/docs/docs/man/tidy_heckit.html new file mode 100644 index 0000000..315730e --- /dev/null +++ b/docs/docs/man/tidy_heckit.html @@ -0,0 +1,1018 @@ + + + + + + + + + +29  heckit_helper.tidy_heckit() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

29  heckit_helper.tidy_heckit()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

29.1 概要

+

 R言語の broom::tidy() をオマージュした regression_tools.tidy() 関数の、py4etrics.heckit.HeckitResults クラス専用のメソッドです。regression_tools.tidy()はジェネリック関数として実装されているため、py4st.tidy(x) としてご利用いただけます。

+
tidy_heckit(
+    model, 
+    name_selection = None, 
+    name_outcome = None, 
+    conf_level = 0.95
+  )
+
+
+

29.2 引数 Argument

+
    +
  • x(必須)
      Py4Etrics モジュールの py4etrics.heckit.Heckit() で作成された HeckitResults クラスのオブジェクト
  • +
  • name_selectionlist of str
     term 列(index) のうち、第1段階の説明変数の名称として表示する文字列のリスト。指定しない場合(初期設定)、モデルの推定に使用された説明変数の名前がそのまま表示されます。
  • +
  • name_outcomelist of str
     term 列(index) のうち、第2段階の説明変数の名称として表示する文字列のリスト。指定しない場合(初期設定)、モデルの推定に使用された説明変数の名前がそのまま表示されます。
  • +
  • conf_levelfloat
     信頼区間の計算に用いる信頼係数。
  • +
+
+
+

29.3 返り値 Value

+

 次の列を含む pands.DataFrame が出力されます。

+
    +
  • term(index)
     説明変数の名称
  • +
  • estimate
     回帰係数の推定値
  • +
  • std_err
    推定値 estimate の標準誤差
  • +
  • statistics
    estimate = 0 を帰無仮説とする仮説検定の標本検定統計量。x に代入されたモデルが sm.ols() によって作成されたものであれば \(t\) 統計量が表示され、sm.glm() によって作成されたものであれば \(z\) 統計量が表示されます。
  • +
  • p_value
    estimate = 0 を帰無仮説とする両側検定の標本p-値
  • +
  • conf_lower
     信頼区間の下側信頼限界
  • +
  • conf_higher
     信頼区間の上側信頼限界
  • +
+
+
+

29.4 使用例 Examples

+

 heckit_helper モジュールはヘックマンの2段階推定(Heckit)を実行を Py4Etrics モジュールの py4etrics.heckit.Heckit() に依存しているため、事前のインストールをお願いします。

+
pip install git+https://github.com/Py4Etrics/py4etrics.git
+

ここでは wooldridge モジュールの mroz データを使い、春山(2023, Chap.24)のモデルを再現します。

+
import pandas as pd
+import wooldridge
+import py4stats as py4st
+from py4stats import heckit_helper
+
+mroz = wooldridge.data('mroz') # サンプルデータの読み込み
+
+mod_heckit, exog_outcome, exog_select = heckit_helper.Heckit_from_formula(
+    selection = 'lwage ~ educ + exper + expersq + nwifeinc + age + kidslt6 + kidsge6',
+    outcome = 'lwage ~ educ + exper + expersq',
+    data = mroz
+)
+
+res_heckit = mod_heckit.fit(cov_type_2 = 'HC1')
+

内部で functools.singledispatch を使用して定義しているため、heckit_helper モジュールの読み込み後は、py4st.tidy() 関数を呼び出すことで tidy_heckit() を実行することができます。

+
# 初期設定で使用した場合
+print(py4st.tidy(res_heckit).round(4))
+#>               estimate  std_err  statistics  p_value  conf_lower  conf_higher
+#> term                                                                         
+#> O: Intercept   -0.5781   0.3050     -1.8954   0.0580     -1.1759       0.0197
+#> O: educ         0.1091   0.0155      7.0261   0.0000      0.0786       0.1395
+#> O: exper        0.0439   0.0163      2.6989   0.0070      0.0120       0.0758
+#> O: expersq     -0.0009   0.0004     -1.9574   0.0503     -0.0017       0.0000
+#> S: const        0.2701   0.5086      0.5310   0.5954     -0.7267       1.2669
+#> S: x1           0.1309   0.0253      5.1835   0.0000      0.0814       0.1804
+#> S: x2           0.1233   0.0187      6.5903   0.0000      0.0867       0.1600
+#> S: x3          -0.0019   0.0006     -3.1452   0.0017     -0.0031      -0.0007
+#> S: x4          -0.0120   0.0048     -2.4843   0.0130     -0.0215      -0.0025
+#> S: x5          -0.0529   0.0085     -6.2347   0.0000     -0.0695      -0.0362
+#> S: x6          -0.8683   0.1185     -7.3263   0.0000     -1.1006      -0.6360
+#> S: x7           0.0360   0.0435      0.8281   0.4076     -0.0492       0.1212
+

 注意:内部で使用している statsmodels.iolib.summary.summary_params_frame() の仕様上、初期設定では第1段階の説明変数の名前が反映されません。説明変数の名前を反映するには name_selection 引数で指定してください。

+
print(py4st.tidy(res_heckit, name_selection = exog_select.columns).round(4))
+#>               estimate  std_err  statistics  p_value  conf_lower  conf_higher
+#> term                                                                         
+#> O: Intercept   -0.5781   0.3050     -1.8954   0.0580     -1.1759       0.0197
+#> O: educ         0.1091   0.0155      7.0261   0.0000      0.0786       0.1395
+#> O: exper        0.0439   0.0163      2.6989   0.0070      0.0120       0.0758
+#> O: expersq     -0.0009   0.0004     -1.9574   0.0503     -0.0017       0.0000
+#> S: Intercept    0.2701   0.5086      0.5310   0.5954     -0.7267       1.2669
+#> S: educ         0.1309   0.0253      5.1835   0.0000      0.0814       0.1804
+#> S: exper        0.1233   0.0187      6.5903   0.0000      0.0867       0.1600
+#> S: expersq     -0.0019   0.0006     -3.1452   0.0017     -0.0031      -0.0007
+#> S: nwifeinc    -0.0120   0.0048     -2.4843   0.0130     -0.0215      -0.0025
+#> S: age         -0.0529   0.0085     -6.2347   0.0000     -0.0695      -0.0362
+#> S: kidslt6     -0.8683   0.1185     -7.3263   0.0000     -1.1006      -0.6360
+#> S: kidsge6      0.0360   0.0435      0.8281   0.4076     -0.0492       0.1212
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/tidy_test.html b/docs/docs/man/tidy_test.html new file mode 100644 index 0000000..4b93641 --- /dev/null +++ b/docs/docs/man/tidy_test.html @@ -0,0 +1,958 @@ + + + + + + + + + +26  py4stats.tidy_test() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

26  py4stats.tidy_test()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

26.1 概要

+

 R言語の broom::tidy() をオマージュした py4stats.tidy() 関数のうち、statsmodels ライブラリのメソッド RegressionResults.t_test() もしくは RegressionResults.f_test() で作成された statsmodels.stats.contrast.ContrastResults クラスのオブジェクト専用のメソッドです。py4stats.tidy()はジェネリック関数として実装されているため、py4st.tidy(x) としてご利用いただけます。

+
tidy_test(x, conf_level = 0.95, **kwargs)
+
+
+

26.2 引数 Argument

+
    +
  • x(必須)
     statsmodels ライブラリのメソッド RegressionResults.t_test() もしくはRegressionResults.f_test() で作成された statsmodels.stats.contrast.ContrastResults クラスのオブジェクト。
  • +
  • conf_levelfloat
     信頼区間の計算に用いる信頼係数。ただし、x に代入されたオブジェクトが f_test() の結果である場合は、この引数は無視されます。
  • +
+
+
+

26.3 返り値 Value

+

 引数 x に代入されたオブジェクトが t_test() の結果である場合、次の列を含む pands.DataFrame が出力されます。

+
    +
  • estimate
     帰無仮説のもとでの回帰係数(の線型結合)の推定値
  • +
  • std_err
    推定値 estimate の標準誤差
  • +
  • statistics
     仮説検定の標本検定統計量。
  • +
  • p_value
    両側検定の標本p-値
  • +
  • conf_lower
     信頼区間の下側信頼限界
  • +
  • conf_higher
     信頼区間の上側信頼限界
  • +
+

 一方で引数 x に代入されたオブジェクトが f_test() の結果である場合、次の列を含む pands.DataFrame が出力されます。

+
    +
  • statistics
     仮説検定の標本検定統計量。
  • +
  • p_value
     F検定の標本p-値
  • +
  • df_denom
     モデルの残差自由度
  • +
  • df_denom
     帰無仮説のもとでの制約数
  • +
+
+
+

26.4 使用例 Examples

+
import py4stats as py4st
+
+import pandas as pd
+import numpy as np
+from palmerpenguins import load_penguins
+import statsmodels.formula.api as smf
+
+penguins = load_penguins() # サンプルデータの読み込み
+
+fit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()
+
hypotheses = 'bill_length_mm = 20'
+print(py4st.tidy(fit3.t_test(hypotheses)).round(4))
+#>       estimate  std_err  statistics  p_value  conf_lower  conf_higher
+#> term                                                                 
+#> c0     26.5366   7.2436      0.9024   0.3675     12.2867      40.7866
+
hypotheses = 'species[T.Chinstrap] = 0, species[T.Gentoo] = 0'
+print(py4st.tidy(fit3.f_test(hypotheses)).round(4))
+#>           statistics  p_value  df_denom  df_num
+#> term                                           
+#> contrast    210.9432      0.0       327       2
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/man/varidate.html b/docs/docs/man/varidate.html new file mode 100644 index 0000000..e037016 --- /dev/null +++ b/docs/docs/man/varidate.html @@ -0,0 +1,1040 @@ + + + + + + + + + +21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

21.1 概要

+

 R言語の varidateパッケージの check_that() 関数などをオマージュした、ごく簡易なデータ検証関数です。

+
check_that(
+    data: IntoFrameT,
+    rule_dict: Union[Mapping[str, str], pd.Series],
+    **kwargs: Any,
+)
+
+check_viorate(data, rule_dict, **kwargs)
+
+
+

21.2 引数 Argument

+
    +
  • dataIntoFrameT(必須)
     ルールに基づくデータ検証を行うデータセット。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • +
  • rule_dictdict or pd.Series of str(必須)
     pandas.eval() メソッドで実行した結果が論理値となるような expression の文字列を値とする辞書オブジェクト。詳細は使用例も参照してください。
  • +
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • +
  • **kwargs
     pandas.eval() に渡す追加の引数。
  • +
+
+
+

21.3 返り値 Value

+
+

21.3.1 check_that(): データセット単位の検証結果の集計

+

次の列を含む、引数 data に代入されたデータフレームと同じ型の DataFrame が出力されます。

+
    +
  • rule: 検証ルールの名前
  • +
  • item: ルールが検証対象とした項目の数。レコード(行)を検証単位とするルールの場合、itemdata の行数(rows)になります。一方、データセット全体を検証単位とするルール(例:集計量に基づく条件)の場合、item は 1 になります。
  • +
  • passes: 検証の結果、ルールを満たすと判定されたレコードの数。
  • +
  • fails: 検証の結果、ルールを満たさないと判定されたレコードの数。
  • +
  • countna: 欠測値によって、ルールの検証が行えなかったレコードの数。行(レコード)を検証単位とするルールでは、ルールの評価に使用された変数のいずれかに欠測値が含まれる場合、そのレコードは検証不能として NA 扱いされます。countna は、このように検証を正しく実施できなかったレコードの件数を表します。
  • +
  • expression: 検証ルールを表す文字列(expression)。
  • +
+
+
+

21.3.2 check_viorate(): レコード単位の検証結果

+

ルール名を列名として、レコード毎の違反を示す論理変数をもつ DataFrame が出力されます。

+

各列の要素の True は検証のルールへの違反、もしくは欠測値によって評価に失敗したことを表します。rule_dict で設定された各ルールに対応する列の他に、次の列が追加で出力されます。

+
    +
  • any: 行内のいずれかのルールが違反または評価に失敗した場合に True となるブール値。
  • +
  • all: 行内の全ルールが違反または評価に失敗した場合に True となるブール値。
  • +
+
+
+
+

21.4 使用例 Examples

+

 ここでは py4st.check_that() 関数を使って Loo, Jonge(2022, p. 136)の結果を再現します。まずはR言語の validate パッケージに付属する retailers データを利用します。retailers は60件の小売業者の経営状況についてのデータで、従業員数、売上高とその他の収入、人件費、総費用、および利益がユーロ導入前の通貨単位である1000ギルダー単位で収録されています。

+
import py4stats as py4st
+import pandas as pd
+
+URL = 'https://raw.githubusercontent.com/data-cleaning/validate/master/pkg/data/retailers.csv'
+retailers = pd.read_csv(URL, sep = ';')
+retailers.columns = retailers.columns.to_series().str.replace('.', '_', regex = False)
+

 py4st.check_that() 関数は、第1引数にデータセットを、第2引数に検証ルールの辞書オブジェクトを代入して使用します。
+ まずは、検証ルールの辞書オブジェクトを定義します。辞書オブジェクトの値には pandas.eval() メソッドで実行可能な expression の文字列を指定し、key に検証ルールの名前を指定します。検証ルールの名前は任意の値で構いませんが、 expression は結果が論理値となるものでなければなりません。

+
rule_dict =  {
+    'to':'turnover > 0',                                     # 売上高は厳密に正である
+    'sc':'staff_costs / staff < 50',                         # 従業員1人当たりの人件費は50,000ギルダー未満である
+    'cd1':'staff_costs > 0 | ~(staff > 0)',                    # 従業員がいる場合、人件費は厳密に正である
+    'cd2':py4st.implies_exper('staff > 0', 'staff_costs > 0'), # cd1 の別表現
+    'bs':'turnover + other_rev == total_rev',                # 売上高とその他の収入の合計は総収入に等しい
+    'mn':'profit.mean() > 0'                                 # セクター全体の平均的な利益はゼロよりも大きい
+    }
+pd.Series(rule_dict)
+#> to                          turnover > 0
+#> sc              staff_costs / staff < 50
+#> cd1       staff_costs > 0 | ~(staff > 0)
+#> cd2       staff_costs > 0 | ~(staff > 0)
+#> bs     turnover + other_rev == total_rev
+#> mn                     profit.mean() > 0
+#> dtype: object
+

retailersrule_dictpy4st.check_that() に代入すると、rule_dict に指定したルールに基づいた検証が実行されます。item 列はその検証ルールで生成された論理値の個数(通常はデータセットの列数と一致します)を表し、passes 列は検証結果が True となったレコードの数を、fails は False となったレコードの数を表します。また、coutna はルールの検証に使用した変数(データセットの列)のいずれかが欠測値であったレコードの数です。

+
print(py4st.check_that(retailers, rule_dict))
+#>   rule  item  passes  fails  coutna                         expression
+#> 0   to    60      56      0       4                       turnover > 0
+#> 1   sc    60      39      5      16           staff_costs / staff < 50
+#> 2  cd1    60      44      0      16     staff_costs > 0 | ~(staff > 0)
+#> 3  cd2    60      44      0      16     staff_costs > 0 | ~(staff > 0)
+#> 4   bs    60      19      4      37  turnover + other_rev == total_rev
+#> 5   mn     1       1      0       0                  profit.mean() > 0
+

前述の通り、py4st.check_that() 関数ではルール検証を pandas.eval() メソッドで実行しているため、検証ルールに自作関数や外部のモジュールからインポート関数を使うには、関数名の前に @ をつけて @func(…) と記述し、また **kwargs 引数に local_dict = locals() と指定してください。
+ 次のコードで定義している is_complete() 関数は、代入された pd.Series が全て欠測値ではなく、指定された変数に関して完全ケースであることを判定する関数です。turnover.notna() & total_rev.notna() & other_rev.notna() と記述しても同じ結果が得られますが、自作関数を使うことで若干簡潔に記述できます。

+
from pandas.api.types import is_numeric_dtype
+def is_complete(*arg): return pd.concat(arg, axis = 'columns').notna().all(axis = 'columns')
+
+pd.set_option('display.expand_frame_repr', False)
+
+rule_dict2 =  {
+    'to_num':'@is_numeric_dtype(turnover)',                      # 売上高は数値変数である
+    'rev_complete':'@is_complete(turnover, total_rev, other_rev)', # 売上高と収入が全て観測されている
+    }
+
+print(py4st.check_that(
+    retailers, rule_dict2, local_dict = locals()
+    ))
+#>            rule  item  passes  fails  coutna                                    expression
+#> 0        to_num     1       1      0       0                   @is_numeric_dtype(turnover)
+#> 1  rev_complete    60      23      0      37  @is_complete(turnover, total_rev, other_rev)
+

py4st.check_viorate() の使い方も py4st.check_that() と同様ですが、py4st.check_that() がデータセット全体での検証結果を出力するのに対し、py4st.check_viorate() ではレコード別の検証結果を表示します。py4st.check_viorate() から出力されるデータフレームでは、各列が検証ルールに、各行が元データの観測値に対応し、当該ルールが満たされていない場合、True と表示されます。また、any 列は複数あるルールのいずれか1つでも満たされていないことを、all 列は全てのルールが満たされていないことを示します。

+
rule_dict3 =  {
+    'to':'turnover > 0',                                     # 売上高は厳密に正である
+    'sc':'staff_costs / staff < 50',                         # 従業員1人当たりの人件費は50,000ギルダー未満である
+    'rev_complete':'@is_complete(turnover, total_rev, other_rev)',# 売上高と収入が全て観測されている
+    }
+  
+df_viorate = py4st.check_viorate(retailers, rule_dict3)
+print(df_viorate.head())
+#>       to     sc rev_complete   any    all
+#> 0   True   True         True  True   True
+#> 1  False  False         True  True  False
+#> 2  False   True        False  True  False
+#> 3  False   True        False  True  False
+#> 4   True   True         True  True   True
+

df_viorate データフレームの各列は論理値であるため、次のように検証ルールを満たさない観測値を抽出することができます。

+
print(retailers.loc[df_viorate['to'], 'size':'turnover'])
+#>   size  incl_prob  staff  turnover
+#> 0  sc0       0.02   75.0       NaN
+#> 4  sc3       0.14    NaN       NaN
+#> 6  sc3       0.14    5.0       NaN
+
+
+

21.5 Notes

+

本関数の内部実装は、 pd.DataFrame.eval() メソッドに依存しているため、実行時間の面で必ずしも最適化されていません。

+
+
+

21.6 参考文献

+
    +
  • Loo, Mark van der, and Edwin de Jonge. (2022). 『統計的データクリーニングの理論と実践: Rによるデータ編集/欠測補完システム』. 共立出版. 地道 正行, 髙橋 雅夫, 藤野 友和, 安川 武彦〔訳〕
  • +
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/reference.html b/docs/docs/reference.html new file mode 100644 index 0000000..71b8d47 --- /dev/null +++ b/docs/docs/reference.html @@ -0,0 +1,996 @@ + + + + + + + + + +3  Function reference – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

3  Function reference

+
+ + + +
+ + + + +
+ + + +
+ + +
+

3.1 Main Module

+
+

3.1.1 py4stats.eda_tools

+

py4stats.eda_tools モジュールは、探索的データ解析と前処理に関する機能を提供します。複数の DataFrame バックエンドに対して共通の API を提供することを目的として、narwhals ライブラリを用いて実装されています。詳細は Technical Notes を参照してください。

+
+

3.1.1.1 データフレームの概要

+

py4stats.diagnose()

+
+
+

3.1.1.2 クロス集計

+

py4stats.tabyl()

+

py4stats.freq_table()

+

py4stats.Pareto_plot()

+

py4stats.plot_category()

+
+
+
+

3.1.2 数値変数の点推定と区間推定

+

py4stats.mean_qi() py4stats.median_qi() py4stats.mean_ci()

+
+

3.1.2.1 データフレームの列や行の削除

+

py4stats.remove_empty()
+py4stats.remove_constant()

+

py4stats.filtering_out()

+
+
+

3.1.2.2 データフレームの列の並べ替え

+

py4stats.relocate()

+
+
+

3.1.2.3 複数のデータフレームの比較

+

py4stats.compare_df_cols() py4stats.compare_df_stats()

+
+
+

3.1.2.4 簡易なグループ別統計量の比較

+

py4stats.compare_group_means() py4stats.compare_group_median()

+

py4stats.plot_mean_diff() py4stats.plot_median_diff()

+
+
+

3.1.2.5 簡易な欠測値の可視化

+

py4stats.plot_miss_var()

+
+
+

3.1.2.6 数値変数の集計と標準化

+

py4stats.weighted_mean() py4stats.scale() py4stats.min_max()

+
+
+

3.1.2.7 論理関数

+

py4stats.is_number() py4stats.is_ymd() py4stats.is_ymd_like()

+

py4stats.is_dummy()

+
+
+

3.1.2.8 簡易なルールベースのデータ検証ツール

+

py4stats.check_that() py4stats.check_viorate()

+
+
+
+
+

3.1.3 py4stats.regression_tools

+

py4stats.regression_toolsstatsmodels ライブラリで作成された回帰分析の結果についての可視化と表作成を補助する機能を提供するモジュールです。

+
+

3.1.3.1 線形モデルの比較

+

py4stats.compare_ols()

+

py4stats.compare_mfx()

+
+
+

3.1.3.2 線形モデルの可視化

+

py4stats.coefplot() py4stats.mfxplot()

+
+
+

3.1.3.3 線形モデルを作表するためのバックエンド関数

+

py4stats.tidy()py4stats.tidy_mfx()

+

py4stats.tidy_test()

+

py4stats.glance()

+
+
+

3.1.3.4 Blinder-Oaxaca分解

+

py4stats.Blinder_Oaxaca() py4stats.plot_Blinder_Oaxaca()

+
+
+
+
+

3.2 Sub Module

+
+

3.2.1 py4stats.heckit_helper

+

py4stats.regression_tools の関数を py4etrics.heckit ライブラリで実装された Heckit モデルに対応させるためのメソッドを提供します。

+

heckit_helper.Heckit_from_formula()

+

heckit_helper.tidy_heckit()

+

heckit_helper.heckitmfx_compute()

+
+
+
+

3.2.2 py4stats.building_block

+

py4stats ライブラリの実装に使用するアサーション関数やユーティリティ関数を提供します。 building_block モジュール自体は外部から呼び出すことなく内部実装に使用することを想定しています。

+
+
+

3.2.3 引数のアサーション関数

+

building_block.arg_match()

+

building_block.assert_character() building_block.assert_logical() building_block.assert_numeric() building_block.assert_integer() building_block.assert_count() building_block.assert_float()

+
+
+

3.2.4 データ型を判定する論理関数

+

building_block.is_character() building_block.is_logical() building_block.is_numeric() building_block.is_integer() building_block.is_float()

+
+
+

3.2.5 数字のフォーマット

+

building_block.style_number() building_block.style_currency() building_block.style_percent()

+

building_block.style_pvalue() building_block.p_stars()

+
+
+

3.2.6 並列文の作成

+

building_block.oxford_comma() building_block.oxford_comma_and() building_block.oxford_comma_or()

+
+

Jump to Get started.
+Jump to Readme.

+ + +
+
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/docs/search.json b/docs/docs/search.json new file mode 100644 index 0000000..1389443 --- /dev/null +++ b/docs/docs/search.json @@ -0,0 +1,2050 @@ +[ + { + "objectID": "index.html", + "href": "index.html", + "title": "Py4Stats", + "section": "", + "text": "1 Readme\nPy4Stats は、主に実証研究で用いられる、探索的データ分析および回帰結果レポート用のユーティリティライブラリで、回帰分析を中心とする分析でよく使われるR言語の機能を、Python で実装しています。本ライブラリの主な機能は Get started を、実装されている関数の一覧は Function reference を参照してください。", + "crumbs": [ + "1  Readme" + ] + }, + { + "objectID": "index.html#installation", + "href": "index.html#installation", + "title": "Py4Stats", + "section": "1.1 Installation", + "text": "1.1 Installation\nuv をお使いの場合、次のコードで py4stats をインストールできます。\n! uv add git+https://github.com/Hirototensho/py4stats.git\n一方で、pip をお使いの場合には、次のコードで py4stats をインストールできます。\n! pip install git+https://github.com/Hirototensho/py4stats.git", + "crumbs": [ + "1  Readme" + ] + }, + { + "objectID": "index.html#使用例", + "href": "index.html#使用例", + "title": "Py4Stats", + "section": "1.2 使用例", + "text": "1.2 使用例\nimport py4stats as py4st\npy4stats.diagnose() 関数はデータの全般的な状態についての要約を提供します。\nimport pandas as pd\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込み\n\nprint(py4st.diagnose(penguins).round(4))\n#> columns dtype missing_count missing_percent unique_count unique_rate\n#> 0 species object 0 0.0000 3 0.8721\n#> 1 island object 0 0.0000 3 0.8721\n#> 2 bill_length_mm float64 2 0.5814 165 47.9651\n#> 3 bill_depth_mm float64 2 0.5814 81 23.5465\n#> 4 flipper_length_mm float64 2 0.5814 56 16.2791\n#> 5 body_mass_g float64 2 0.5814 95 27.6163\n#> 6 sex object 11 3.1977 3 0.8721\n#> 7 year int64 0 0.0000 3 0.8721\npy4stats.compare_ols() 関数は、計量経済学の実証論文でよく用いられる、回帰分析の結果を列方向に並べて比較する表を作成します。\nimport statsmodels.formula.api as smf\n\n# 回帰分析の実行\nfit1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()\nfit2 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species', data = penguins).fit()\nfit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()\n\ncompare_tab1 = py4st.compare_ols(list_models = [fit1, fit2, fit3]) # 表の作成\ncompare_tab1\n\n\n\n\n\n\n\n\n\nterm\nmodel 1\nmodel 2\nmodel 3\n\n\n\n\nIntercept\n153.7397\n-1,742.7202 ***\n843.9812 **\n\n\n\n(268.9012)\n(313.7697)\n(403.5956)\n\n\nspecies[T.Chinstrap]\n-885.8121 ***\n-539.6864 ***\n-245.1516 ***\n\n\n\n(88.2502)\n(86.9425)\n(84.5952)\n\n\nspecies[T.Gentoo]\n578.6292 ***\n1,492.8283 ***\n1,443.3525 ***\n\n\n\n(75.3623)\n(118.4442)\n(107.7844)\n\n\nbill_length_mm\n91.4358 ***\n55.6461 ***\n26.5366 ***\n\n\n\n(6.8871)\n(7.2326)\n(7.2436)\n\n\nbill_depth_mm\n\n179.0434 ***\n87.9328 ***\n\n\n\n\n(19.0997)\n(20.2192)\n\n\nsex[T.male]\n\n\n437.2007 ***\n\n\n\n\n\n(49.1098)\n\n\nrsquared_adj\n0.7810\n0.8258\n0.8613\n\n\nnobs\n342\n342\n333\n\n\ndf\n3\n4\n5\n\n\n\n詳細は、py4stats.compare_ols() を参照してください。 \n\nJump to Function Get started.\nJump to Function reference.", + "crumbs": [ + "1  Readme" + ] + }, + { + "objectID": "introduction.html", + "href": "introduction.html", + "title": "2  Introduction to Py4Stats", + "section": "", + "text": "2.1 py4stats.eda_tools\nここでは Py4Stats の主な機能を紹介します。実装されている関数の一覧は Function reference を参照してください。\n探索的データ解析と前処理に関する機能を提供するモジュールです。このモジュールは、複数の DataFrame バックエンドに対して共通の API を提供することを目的として、narwhals ライブラリを用いて実装されています。詳細は Technical Notes: py4stats.eda_tools における narwhals ベースの実装 を参照してください。\npy4stats.diagnose():R言語のdlookr::diagnose()を再現した関数で、データの全般的な状態についての要約を提供します。\npy4stats.tabyl():R言語の janitor::tabyl()を参考にした、クロス集計表を作成する関数です。\npy4stats.freq_table():R言語のDescTools::Freq()をオマージュした、1変数の度数分布表を計算する関数。度数 freq と相対度数 perc に加えて、それぞれの累積値を計算します。\n引数 group を指定すると、グループ別の度数分布表を計算できます。\npy4stats.remove_empty():完全に空白な列や行の削除する関数。R言語の janitor::remove_empty() をオマージュした関数で、全ての要素が NaN である列や行をデータフレームから除外します。\npy4stats.remove_constant():定数列の削除。R言語の janitor::remove_constant() をオマージュした関数で、1種類だけの要素からなる列をデータフレームから除外します。\npy4stats.filtering_out():pandas の DataFrame.filter() メソッドでは引数 like に文字列を指定することで、列名に特定の文字列を含む列を選択できますが、反対に py4stats.filtering_out() では列名に特定の文字列を含む列を除外します。実装の一部はR言語の dplyr::select() を参考にしました。", + "crumbs": [ + "2  `Introduction to Py4Stats`" + ] + }, + { + "objectID": "introduction.html#py4stats.eda_tools", + "href": "introduction.html#py4stats.eda_tools", + "title": "2  Introduction to Py4Stats", + "section": "", + "text": "import pandas as pd\nimport numpy as np\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込み\n\nprint(py4st.diagnose(penguins).round(4))\n#> dtype missing_count missing_percent unique_count unique_rate\n#> species object 0 0.0000 3 0.8721\n#> island object 0 0.0000 3 0.8721\n#> bill_length_mm float64 2 0.5814 164 47.6744\n#> bill_depth_mm float64 2 0.5814 80 23.2558\n#> flipper_length_mm float64 2 0.5814 55 15.9884\n#> body_mass_g float64 2 0.5814 94 27.3256\n#> sex object 11 3.1977 2 0.5814\n#> year int64 0 0.0000 3 0.8721\n\nprint(py4st.tabyl(penguins, 'island', 'species'))\n#> species Adelie Chinstrap Gentoo All\n#> island \n#> Biscoe 44 (26.2%) 0 (0.0%) 124 (73.8%) 168\n#> Dream 56 (45.2%) 68 (54.8%) 0 (0.0%) 124\n#> Torgersen 52 (100.0%) 0 (0.0%) 0 (0.0%) 52\n#> All 152 (44.2%) 68 (19.8%) 124 (36.0%) 344\n\nprint(py4st.freq_table(penguins, 'species'))\n#> freq perc cumfreq cumperc\n#> species \n#> Adelie 152 0.441860 152 0.441860\n#> Gentoo 124 0.360465 276 0.802326\n#> Chinstrap 68 0.197674 344 1.000000\n\npenguins2 = penguins.assign(bill_length_mm2 = pd.cut(penguins['bill_length_mm'], 6))\n\nprint(\n py4st.freq_table(penguins2, ['species', 'bill_length_mm2'], sort = False)\n )\n#> freq perc cumfreq cumperc\n#> species bill_length_mm2\n#> Adelie (32.072, 38.975] 79 0.523179 79 0.523179\n#> (38.975, 45.85] 71 0.470199 150 0.993377\n#> (45.85, 52.725] 1 0.006623 151 1.000000\n#> (52.725, 59.6] 0 0.000000 151 1.000000\n#> Chinstrap (32.072, 38.975] 0 0.000000 0 0.000000\n#> (38.975, 45.85] 13 0.191176 13 0.191176\n#> (45.85, 52.725] 50 0.735294 63 0.926471\n#> (52.725, 59.6] 5 0.073529 68 1.000000\n#> Gentoo (32.072, 38.975] 0 0.000000 0 0.000000\n#> (38.975, 45.85] 40 0.325203 40 0.325203\n#> (45.85, 52.725] 78 0.634146 118 0.959350\n#> (52.725, 59.6] 5 0.040650 123 1.000000\n\npenguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy()\npenguins2.loc[:, 'empty'] = np.nan\npenguins2.loc[344, :] = np.nan\n\nprint(penguins2.tail(3))\n#> species body_mass_g empty\n#> 342 Chinstrap 4100.0 NaN\n#> 343 Chinstrap 3775.0 NaN\n#> 344 NaN NaN NaN\n\n# 完全に空白な行と列を削除。\nprint(py4st.remove_empty(penguins2, quiet = False).tail(3))\n#> Removing 1 empty column(s) out of 3 columns(Removed: empty).\n#> Removing 1 empty row(s) out of 345 rows(Removed: 344). \n#> species body_mass_g\n#> 341 Chinstrap 3775.0\n#> 342 Chinstrap 4100.0\n#> 343 Chinstrap 3775.0\n\n# 完全に空白な列のみ削除。\nprint(py4st.remove_empty(penguins2, rows = False, quiet = False).tail(3))\n#> Removing 1 empty column(s) out of 3 columns(Removed: empty).\n#> species body_mass_g\n#> 342 Chinstrap 4100.0\n#> 343 Chinstrap 3775.0\n#> 344 NaN NaN\n\n# 完全に空白な行のみ削除。\nprint(py4st.remove_empty(penguins2, cols = False, quiet = False).tail(3))\n#> Removing 1 empty row(s) out of 345 rows(Removed: 344). \n#> species body_mass_g empty\n#> 341 Chinstrap 3775.0 NaN\n#> 342 Chinstrap 4100.0 NaN\n#> 343 Chinstrap 3775.0 NaN\n\npenguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy()\npenguins2.loc[:, 'constant'] = 'c'\n\nprint(penguins2.head(3))\n#> species body_mass_g constant\n#> 0 Adelie 3750.0 c\n#> 1 Adelie 3800.0 c\n#> 2 Adelie 3250.0 c\n\nprint(py4st.remove_constant(penguins2, quiet = False).head(3))\n#> Removing 1 constant column(s) out of 3 column(s)(Removed: constant). \n#> species body_mass_g\n#> 0 Adelie 3750.0\n#> 1 Adelie 3800.0\n#> 2 Adelie 3250.0\n\n# 列名に 'length' を含む列を除外\nprint(py4st.filtering_out(penguins, contains = 'length').head(3))\n#> species island bill_depth_mm body_mass_g sex year female\n#> 0 Adelie Torgersen 18.7 3750.0 male 2007 0\n#> 1 Adelie Torgersen 17.4 3800.0 female 2007 1\n#> 2 Adelie Torgersen 18.0 3250.0 female 2007 1\n\n# 列名が 'bill' から始まる列を除外\nprint(py4st.filtering_out(penguins, starts_with = 'bill').head(3))\n#> species island flipper_length_mm body_mass_g sex year female\n#> 0 Adelie Torgersen 181.0 3750.0 male 2007 0\n#> 1 Adelie Torgersen 186.0 3800.0 female 2007 1\n#> 2 Adelie Torgersen 195.0 3250.0 female 2007 1\n\n# 列名が '_mm' で終わる列を除外\nprint(py4st.filtering_out(penguins, ends_with = '_mm').head(3))\n#> species island body_mass_g sex year female\n#> 0 Adelie Torgersen 3750.0 male 2007 0\n#> 1 Adelie Torgersen 3800.0 female 2007 1\n#> 2 Adelie Torgersen 3250.0 female 2007 1", + "crumbs": [ + "2  `Introduction to Py4Stats`" + ] + }, + { + "objectID": "introduction.html#py4stats.regression_tools", + "href": "introduction.html#py4stats.regression_tools", + "title": "2  Introduction to Py4Stats", + "section": "2.2 py4stats.regression_tools", + "text": "2.2 py4stats.regression_tools\n py4stats.regression_tools は statsmodelsライブラリで作成された回帰分析の結果についての表作成と可視化を補助する機能を提供するモジュールです。\n py4stats.compare_ols() :計量経済学の実証論文でよく用いられる、回帰分析の結果を列方向に並べて比較する表を作成します。表のフォーマットについてはR言語のtexreg::screenreg()やmodelsummary::modelsummary()を参考にしています。同種の機能を提供する Python ライブラリーとしては、R言語の stargazer パッケージをもとにした stargazer ライブラリがあります。\nimport statsmodels.formula.api as smf\n\n# 回帰分析の実行\nfit1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()\nfit2 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species', data = penguins).fit()\nfit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()\n\ncompare_tab1 = py4st.compare_ols(list_models = [fit1, fit2, fit3]) # 表の作成\ncompare_tab1\n\n\n\n\n\n\n\n\n\nterm\nmodel 1\nmodel 2\nmodel 3\n\n\n\n\nIntercept\n153.7397\n-1,742.7202 ***\n843.9812 **\n\n\n\n(268.9012)\n(313.7697)\n(403.5956)\n\n\nspecies[T.Chinstrap]\n-885.8121 ***\n-539.6864 ***\n-245.1516 ***\n\n\n\n(88.2502)\n(86.9425)\n(84.5952)\n\n\nspecies[T.Gentoo]\n578.6292 ***\n1,492.8283 ***\n1,443.3525 ***\n\n\n\n(75.3623)\n(118.4442)\n(107.7844)\n\n\nbill_length_mm\n91.4358 ***\n55.6461 ***\n26.5366 ***\n\n\n\n(6.8871)\n(7.2326)\n(7.2436)\n\n\nbill_depth_mm\n\n179.0434 ***\n87.9328 ***\n\n\n\n\n(19.0997)\n(20.2192)\n\n\nsex[T.male]\n\n\n437.2007 ***\n\n\n\n\n\n(49.1098)\n\n\nrsquared_adj\n0.7810\n0.8258\n0.8613\n\n\nnobs\n342\n342\n333\n\n\ndf\n3\n4\n5\n\n\n\npy4stats.compare_ols() の実行結果は Pandas の DataFrame として出力されるため、.xlsx. ファイルなどに変換することができます。また、用途に応じて表の体裁を調整できるようにしています。詳細については 「回帰分析の比較」 を参照してください。\ncompare_tab2 = py4st.compare_ols(\n list_models = [fit1, fit2, fit3],\n model_name = ['基本モデル', '嘴の高さ追加', '性別追加'], # モデル名を変更\n stats = 'p_value', # () 内の値をP-値に変更する\n add_stars = False, # 有意性のアスタリスクなし\n table_style = 'one_line', # 表スタイルを1行表示に設定 'one' でも可能\n digits = 3 # 小数点以下の桁数を3に設定\n )\ncompare_tab2\n\n\n\n\n\n\n\n\n\nterm\n基本モデル\n嘴の高さ追加\n性別追加\n\n\n\n\nIntercept\n153.740(0.568)\n-1,742.720(0.000)\n843.981(0.037)\n\n\nspecies[T.Chinstrap]\n-885.812(0.000)\n-539.686(0.000)\n-245.152(0.004)\n\n\nspecies[T.Gentoo]\n578.629(0.000)\n1,492.828(0.000)\n1,443.353(0.000)\n\n\nbill_length_mm\n91.436(0.000)\n55.646(0.000)\n26.537(0.000)\n\n\nbill_depth_mm\n\n179.043(0.000)\n87.933(0.000)\n\n\nsex[T.male]\n\n\n437.201(0.000)\n\n\nrsquared_adj\n0.781\n0.826\n0.861\n\n\nnobs\n342\n342\n333\n\n\ndf\n3\n4\n5\n\n\n\npy4stats.coefplot():回帰係数の可視化。R言語の coefplot::coefplot() を参考にしました。\nimport matplotlib.pyplot as plt\npy4st.coefplot(fit3)\n\n\n\ncoefplot1\n\n\nplt.rcParams[\"figure.autolayout\"] = True\n\nfig, ax = plt.subplots(1, 2, figsize = (2.2 * 5, 5), dpi = 100)\n\npy4st.coefplot(fit2, ax = ax[0])\nax[0].set_xlim(-900, 1800)\n\npy4st.coefplot(fit3, ax = ax[1], palette = ['#FF6F91', '#F2E5EB'])\nax[1].set_xlim(-900, 1800);\n\n\n\ncoefplot2\n\n\n py4stats.compare_mfx() と py4stats.mfxplot() は、それぞれ py4stats.compare_ols() と py4stats.coefplot() の一般化線型モデルバージョンです。statsmodels ライブラリの.get_margeff() メソッドから得られた限界効果の推定値を表示します。\npenguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)\n\n# ロジスティック回帰の実行\nfit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()\nfit_logit2 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm + species', data = penguins).fit()\n\npy4st.compare_mfx([fit_logit1, fit_logit2])\n\n\n\nterm\nmodel 1\nmodel 2\n\n\n\n\nbody_mass_g\n-0.0004 ***\n-0.0003 ***\n\n\n\n(0.0000)\n(0.0000)\n\n\nbill_length_mm\n-0.0053\n-0.0357 ***\n\n\n\n(0.0036)\n(0.0070)\n\n\nbill_depth_mm\n-0.1490 ***\n-0.1098 ***\n\n\n\n(0.0051)\n(0.0175)\n\n\nspecies[T.Chinstrap]\n\n0.4172 ***\n\n\n\n\n(0.0848)\n\n\nspecies[T.Gentoo]\n\n0.3527 ***\n\n\n\n\n(0.1308)\n\n\nprsquared\n0.5647\n0.6187\n\n\nnobs\n342\n342\n\n\ndf\n3\n5\n\n\n\nplt.rcParams[\"figure.autolayout\"] = True\n\nfig, ax = plt.subplots(1, 2, figsize = (2.2 * 5, 5), dpi = 100)\n\npy4st.mfxplot(fit_logit1, ax = ax[0])\nax[0].set_xlim(-0.2, 0.85)\n\npy4st.mfxplot(fit_logit2, ax = ax[1], palette = ['#FF6F91', '#F2E5EB'])\nax[1].set_xlim(-0.2, 0.85);\n\n\n\ncoefplot3\n\n\n\nJump to Function reference.", + "crumbs": [ + "2  `Introduction to Py4Stats`" + ] + }, + { + "objectID": "reference.html", + "href": "reference.html", + "title": "3  Function reference", + "section": "", + "text": "3.1 Main Module", + "crumbs": [ + "3  Function reference" + ] + }, + { + "objectID": "reference.html#main-module", + "href": "reference.html#main-module", + "title": "3  Function reference", + "section": "", + "text": "3.1.1 py4stats.eda_tools\npy4stats.eda_tools モジュールは、探索的データ解析と前処理に関する機能を提供します。複数の DataFrame バックエンドに対して共通の API を提供することを目的として、narwhals ライブラリを用いて実装されています。詳細は Technical Notes を参照してください。\n\n3.1.1.1 データフレームの概要\npy4stats.diagnose()\n\n\n3.1.1.2 クロス集計\npy4stats.tabyl()\npy4stats.freq_table()\npy4stats.Pareto_plot()\npy4stats.plot_category()\n\n\n\n3.1.2 数値変数の点推定と区間推定\npy4stats.mean_qi() py4stats.median_qi() py4stats.mean_ci()\n\n3.1.2.1 データフレームの列や行の削除\npy4stats.remove_empty()\npy4stats.remove_constant()\npy4stats.filtering_out()\n\n\n3.1.2.2 データフレームの列の並べ替え\npy4stats.relocate()\n\n\n3.1.2.3 複数のデータフレームの比較\npy4stats.compare_df_cols() py4stats.compare_df_stats()\n\n\n3.1.2.4 簡易なグループ別統計量の比較\npy4stats.compare_group_means() py4stats.compare_group_median()\npy4stats.plot_mean_diff() py4stats.plot_median_diff()\n\n\n3.1.2.5 簡易な欠測値の可視化\npy4stats.plot_miss_var()\n\n\n3.1.2.6 数値変数の集計と標準化\npy4stats.weighted_mean() py4stats.scale() py4stats.min_max()\n\n\n3.1.2.7 論理関数\npy4stats.is_number() py4stats.is_ymd() py4stats.is_ymd_like()\npy4stats.is_dummy()\n\n\n3.1.2.8 簡易なルールベースのデータ検証ツール\npy4stats.check_that() py4stats.check_viorate()\n\n\n\n\n3.1.3 py4stats.regression_tools\npy4stats.regression_tools は statsmodels ライブラリで作成された回帰分析の結果についての可視化と表作成を補助する機能を提供するモジュールです。\n\n3.1.3.1 線形モデルの比較\npy4stats.compare_ols()\npy4stats.compare_mfx()\n\n\n3.1.3.2 線形モデルの可視化\npy4stats.coefplot() py4stats.mfxplot()\n\n\n3.1.3.3 線形モデルを作表するためのバックエンド関数\npy4stats.tidy()py4stats.tidy_mfx()\npy4stats.tidy_test()\npy4stats.glance()\n\n\n3.1.3.4 Blinder-Oaxaca分解\npy4stats.Blinder_Oaxaca() py4stats.plot_Blinder_Oaxaca()", + "crumbs": [ + "3  Function reference" + ] + }, + { + "objectID": "reference.html#sub-module", + "href": "reference.html#sub-module", + "title": "3  Function reference", + "section": "3.2 Sub Module", + "text": "3.2 Sub Module\n\n3.2.1 py4stats.heckit_helper\npy4stats.regression_tools の関数を py4etrics.heckit ライブラリで実装された Heckit モデルに対応させるためのメソッドを提供します。\nheckit_helper.Heckit_from_formula()\nheckit_helper.tidy_heckit()\nheckit_helper.heckitmfx_compute()\n\n\n\n3.2.2 py4stats.building_block\npy4stats ライブラリの実装に使用するアサーション関数やユーティリティ関数を提供します。 building_block モジュール自体は外部から呼び出すことなく内部実装に使用することを想定しています。\n\n\n3.2.3 引数のアサーション関数\nbuilding_block.arg_match()\nbuilding_block.assert_character() building_block.assert_logical() building_block.assert_numeric() building_block.assert_integer() building_block.assert_count() building_block.assert_float()\n\n\n3.2.4 データ型を判定する論理関数\nbuilding_block.is_character() building_block.is_logical() building_block.is_numeric() building_block.is_integer() building_block.is_float()\n\n\n3.2.5 数字のフォーマット\nbuilding_block.style_number() building_block.style_currency() building_block.style_percent()\nbuilding_block.style_pvalue() building_block.p_stars()\n\n\n3.2.6 並列文の作成\nbuilding_block.oxford_comma() building_block.oxford_comma_and() building_block.oxford_comma_or()\n\nJump to Get started.\nJump to Readme.", + "crumbs": [ + "3  Function reference" + ] + }, + { + "objectID": "man/diagnose.html", + "href": "man/diagnose.html", + "title": "4  py4stats.diagnose(): データフレームの概要", + "section": "", + "text": "4.1 概要\nR言語の dlookr::diagnose() を再現した関数で、データの全般的な状態についての要約を提供します。", + "crumbs": [ + "eda_tools", + "4  `py4stats.diagnose()`: データフレームの概要" + ] + }, + { + "objectID": "man/diagnose.html#概要", + "href": "man/diagnose.html#概要", + "title": "4  py4stats.diagnose(): データフレームの概要", + "section": "", + "text": "diagnose(data: IntoFrameT, to_native: bool = True)", + "crumbs": [ + "eda_tools", + "4  `py4stats.diagnose()`: データフレームの概要" + ] + }, + { + "objectID": "man/diagnose.html#引数-argument", + "href": "man/diagnose.html#引数-argument", + "title": "4  py4stats.diagnose(): データフレームの概要", + "section": "4.2 引数 Argument", + "text": "4.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", + "crumbs": [ + "eda_tools", + "4  `py4stats.diagnose()`: データフレームの概要" + ] + }, + { + "objectID": "man/diagnose.html#返り値", + "href": "man/diagnose.html#返り値", + "title": "4  py4stats.diagnose(): データフレームの概要", + "section": "4.3 返り値", + "text": "4.3 返り値\n\ndtype:該当する列のpandasにおけるデータの型。「〇〇の個数」や「〇〇の金額」といったデータの dtype が object や String になっていたら、文字列として読み込まれているので要注意です。\nmissing_count:1列のなかで NaN などの欠測値になっている数\nmissing_percent:1列のなかで欠測値が占めている割合でmissing_percent = (missing_count / 行数) * 100 として計算されます。もし missing_percent = 100 なら、その列は完全に空白です。\nunique_count:その列で重複を除外したユニークな値の数。例えばある列の中身が「a, a, b」であればユニークな値は a と b の2つなので unique_count = 2 です。もし unique_count = 1 であれば、その行にはたった1種類の値しか含まれていないことが分かりますし、例えば都道府県を表す列の unique_count が47より多ければ、都道府県以外のものが混ざっていると考えられます。\nunique_rate: サンプルに占めるユニークな値の割合。 unique_rate = unique_count / 行数 で計算されます。unique_rate = 1 であれば、全ての行に異なる値が入っています。一般的に、実数値の列は unique_rate が高くなりますが、年齢の「20代」や価格の「200円代」のように階級に分けられている場合には unique_rate が低くなります。", + "crumbs": [ + "eda_tools", + "4  `py4stats.diagnose()`: データフレームの概要" + ] + }, + { + "objectID": "man/diagnose.html#使用例-examples", + "href": "man/diagnose.html#使用例-examples", + "title": "4  py4stats.diagnose(): データフレームの概要", + "section": "4.4 使用例 Examples", + "text": "4.4 使用例 Examples\nimport py4stats as py4st\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込み\n\nprint(py4st.diagnose(penguins).round(4))\n#> columns dtype missing_count missing_percent unique_count unique_rate\n#> 0 species object 0 0.0000 3 0.8721\n#> 1 island object 0 0.0000 3 0.8721\n#> 2 bill_length_mm float64 2 0.5814 165 47.9651\n#> 3 bill_depth_mm float64 2 0.5814 81 23.5465\n#> 4 flipper_length_mm float64 2 0.5814 56 16.2791\n#> 5 body_mass_g float64 2 0.5814 95 27.6163\n#> 6 sex object 11 3.1977 3 0.8721\n#> 7 year int64 0 0.0000 3 0.8721\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "4  `py4stats.diagnose()`: データフレームの概要" + ] + }, + { + "objectID": "man/tabyl.html", + "href": "man/tabyl.html", + "title": "5  py4stats.tabyl()", + "section": "", + "text": "5.1 概要\nデータフレームのクロス集計表を作成します。R言語の janitor::tabyl()にいくつかの adorn_ 関数を追加した状態を再現した関数です。初期設定ではクロス集計表の各セルに度数と相対度数を 「度数(相対度数%)`」 の形式で表示します。", + "crumbs": [ + "eda_tools", + "5  `py4stats.tabyl()`" + ] + }, + { + "objectID": "man/tabyl.html#概要", + "href": "man/tabyl.html#概要", + "title": "5  py4stats.tabyl()", + "section": "", + "text": "tabyl(\n data: IntoFrameT,\n index: str,\n columns: str,\n margins: bool = True,\n margins_name: str = 'All',\n normalize: Union[bool, Literal[\"index\", \"columns\", \"all\"]] = \"index\",\n dropna: bool = False,\n digits: int = 1,\n **kwargs: Any\n)", + "crumbs": [ + "eda_tools", + "5  `py4stats.tabyl()`" + ] + }, + { + "objectID": "man/tabyl.html#引数-argument", + "href": "man/tabyl.html#引数-argument", + "title": "5  py4stats.tabyl()", + "section": "5.2 引数 Argument", + "text": "5.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\nindex:str  集計に使用するデータフレームの変数名(必須)。\ncolumns:str  集計に使用するデータフレームの変数名(必須)。\nmargins:bool  行または列の合計を追加するかどうかを表すブール値。初期設定は True です。\nmargins_name:bool  行や列の合計の名前。初期設定は 'All' です。\ndropna:bool   欠測値(NaN)を集計から除外するかどうかを表すブール値。初期設定は False です。\nnormalize:str  丸括弧( )に表示する相対度数の計算方式。\n\nindex 各セルの度数を行の和で割り、横方向の相対度数の和が100%になるように計算します。\ncolumns 各セルの度数を行の列で割り、縦方向の相対度数の和が100%になるように計算します。\nall 各セルの度数を総度数で割り、全てのセルの相対度数の和が100%になるように計算します。\n\ndigits:int  丸括弧( )に表示する相対度数の小数点以下の桁数。初期設定は1です。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", + "crumbs": [ + "eda_tools", + "5  `py4stats.tabyl()`" + ] + }, + { + "objectID": "man/tabyl.html#使用例", + "href": "man/tabyl.html#使用例", + "title": "5  py4stats.tabyl()", + "section": "5.3 使用例", + "text": "5.3 使用例\nimport py4stats as py4st\nimport pandas as pd\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込\n\n# 横方向の和を100%として計算(初期設定)\nprint(py4st.tabyl(penguins, 'island', 'species', normalize = 'index'))\n#> species Adelie Chinstrap Gentoo All\n#> island \n#> Biscoe 44 (26.2%) 0 (0.0%) 124 (73.8%) 168\n#> Dream 56 (45.2%) 68 (54.8%) 0 (0.0%) 124\n#> Torgersen 52 (100.0%) 0 (0.0%) 0 (0.0%) 52\n#> All 152 (44.2%) 68 (19.8%) 124 (36.0%) 344\n\n# 縦方向の和を100%として計算\nprint(py4st.tabyl(penguins, 'island', 'species', normalize = 'columns'))\n#> species Adelie Chinstrap Gentoo All\n#> island \n#> Biscoe 44 (28.9%) 0 (0.0%) 124 (100.0%) 168 (48.8%)\n#> Dream 56 (36.8%) 68 (100.0%) 0 (0.0%) 124 (36.0%)\n#> Torgersen 52 (34.2%) 0 (0.0%) 0 (0.0%) 52 (15.1%)\n#> All 152 68 124 344\n\n# 全体の和を100%として計算\nprint(py4st.tabyl(penguins, 'island', 'species', normalize = 'all'))\n#> species Adelie Chinstrap Gentoo All\n#> island \n#> Biscoe 44 (12.8%) 0 (0.0%) 124 (36.0%) 168 (48.8%)\n#> Dream 56 (16.3%) 68 (19.8%) 0 (0.0%) 124 (36.0%)\n#> Torgersen 52 (15.1%) 0 (0.0%) 0 (0.0%) 52 (15.1%)\n#> All 152 (44.2%) 68 (19.8%) 124 (36.0%) 344 (100.0%)\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "5  `py4stats.tabyl()`" + ] + }, + { + "objectID": "man/freq_table.html", + "href": "man/freq_table.html", + "title": "6  py4stats.freq_table()", + "section": "", + "text": "6.1 概要\nR言語のDescTools::Freq()をオマージュした、1変数の度数分布表を計算する関数。度数 freq と相対度数 perc に加えて、それぞれの累積値を計算します。", + "crumbs": [ + "eda_tools", + "6  `py4stats.freq_table()`" + ] + }, + { + "objectID": "man/freq_table.html#概要", + "href": "man/freq_table.html#概要", + "title": "6  py4stats.freq_table()", + "section": "", + "text": "freq_table(\n data: IntoFrameT,\n subset: Union[str, Sequence[str]],\n sort_by: Literal['frequency', 'values'] = 'frequency',\n descending: bool = False,\n dropna: bool = False,\n to_native: bool = True,\n *,\n sort: Optional[bool] = None\n)", + "crumbs": [ + "eda_tools", + "6  `py4stats.freq_table()`" + ] + }, + { + "objectID": "man/freq_table.html#引数-argument", + "href": "man/freq_table.html#引数-argument", + "title": "6  py4stats.freq_table()", + "section": "6.2 引数 Argument", + "text": "6.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\nsubset:str or list of str  集計に使用するデータフレームの列名(必須)。\nsort_by:str  sort_by = 'frequency' なら度数分布表を頻度に応じてソートし、sort_by = 'values' なら subset で指定した列の値に応じてソートします。\ndescending:bool  ソートの方式。True なら降順でソートし、False(初期設定)なら昇順でソートします。\ndropna:bool  欠測値(NaN, None など)を集計から除外するかどうかを表すブール値。初期設定は False です。\nsort:Deprecated..  sort_by の使用を推奨しています。この引数は後方互換性のために保持されおり、指定された場合は FutureWarningが発生します。デフォルトは None です。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", + "crumbs": [ + "eda_tools", + "6  `py4stats.freq_table()`" + ] + }, + { + "objectID": "man/freq_table.html#返り値-value", + "href": "man/freq_table.html#返り値-value", + "title": "6  py4stats.freq_table()", + "section": "6.3 返り値 Value", + "text": "6.3 返り値 Value\n freq_table()関数は、次の値をもつ DataFrame を出力します。\n\nfreq: 度数\nperc: 相対度数\ncumfreq: 累積度数\ncumperc: 累積相対度数", + "crumbs": [ + "eda_tools", + "6  `py4stats.freq_table()`" + ] + }, + { + "objectID": "man/freq_table.html#使用例", + "href": "man/freq_table.html#使用例", + "title": "6  py4stats.freq_table()", + "section": "6.4 使用例", + "text": "6.4 使用例\nimport py4stats as py4st\nimport pandas as pd\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込\n\nprint(py4st.freq_table(penguins, 'species'))\n#> species freq perc cumfreq cumperc\n#> 0 Chinstrap 68 0.197674 68 0.197674\n#> 1 Gentoo 124 0.360465 192 0.558140\n#> 2 Adelie 152 0.441860 344 1.000000\n\nprint(py4st.freq_table(penguins, ['island', 'species']))\n#> island species freq perc cumfreq cumperc\n#> 0 Biscoe Adelie 44 0.127907 44 0.127907\n#> 1 Torgersen Adelie 52 0.151163 96 0.279070\n#> 2 Dream Adelie 56 0.162791 152 0.441860\n#> 3 Dream Chinstrap 68 0.197674 220 0.639535\n#> 4 Biscoe Gentoo 124 0.360465 344 1.000000\npenguins2 = penguins.assign(bill_length_mm2 = pd.cut(penguins['bill_length_mm'], 6))\n\nprint(\n py4st.freq_table(\n penguins2, ['species', 'bill_length_mm2'], \n sort_by = 'values', dropna = True\n )\n )\n#> species bill_length_mm2 freq perc cumfreq cumperc\n#> 0 Adelie (32.072, 36.683] 36 0.105263 36 0.105263\n#> 1 Adelie (36.683, 41.267] 89 0.260234 125 0.365497\n#> 2 Adelie (41.267, 45.85] 25 0.073099 150 0.438596\n#> 3 Adelie (45.85, 50.433] 1 0.002924 151 0.441520\n#> 4 Chinstrap (36.683, 41.267] 1 0.002924 152 0.444444\n#> 5 Chinstrap (41.267, 45.85] 12 0.035088 164 0.479532\n#> 6 Chinstrap (45.85, 50.433] 29 0.084795 193 0.564327\n#> 7 Chinstrap (50.433, 55.017] 24 0.070175 217 0.634503\n#> 8 Chinstrap (55.017, 59.6] 2 0.005848 219 0.640351\n#> 9 Gentoo (36.683, 41.267] 1 0.002924 220 0.643275\n#> 10 Gentoo (41.267, 45.85] 39 0.114035 259 0.757310\n#> 11 Gentoo (45.85, 50.433] 65 0.190058 324 0.947368\n#> 12 Gentoo (50.433, 55.017] 15 0.043860 339 0.991228\n#> 13 Gentoo (55.017, 59.6] 3 0.008772 342 1.000000\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "6  `py4stats.freq_table()`" + ] + }, + { + "objectID": "man/Pareto_plot.html", + "href": "man/Pareto_plot.html", + "title": "7  py4stats.Pareto_plot(): パレート図の作成", + "section": "", + "text": "7.1 概要\nデータフレームからパレート図を作図する関数です。", + "crumbs": [ + "eda_tools", + "7  `py4stats.Pareto_plot()`: パレート図の作成" + ] + }, + { + "objectID": "man/Pareto_plot.html#概要", + "href": "man/Pareto_plot.html#概要", + "title": "7  py4stats.Pareto_plot(): パレート図の作成", + "section": "", + "text": "Pareto_plot(\n data: IntoFrameT,\n group: str,\n values: Optional[str] = None,\n top_n: Optional[int] = None,\n aggfunc: Callable[..., Any] = np.mean,\n ax: Optional[Axes] = None,\n fontsize: int = 12,\n xlab_rotation: Union[int, float] = 0,\n palette: Sequence[str] = (\"#478FCE\", \"#252525\"),\n )\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\ngroup:str  集計に使用するデータフレームの列名(必須)。\nvalues:str  集計に使用するデータフレームの列名。values = None(初期設定)の場合、group 別の度数が表示され、values が指定された場合、group 別に values を aggfuncで集計した値がグラフに表示されます。\ntop_n:int  棒グラフを表示するカテゴリーの件数。top_n = None(初期設定)の場合、すべてのカテゴリーを表示し、整数値が指定された場合、上位 top_n 件が表示されます。\naggfunc:callable values が指定された際に、集計に使用する集計関数。np.mean など values 列を1次元配列として受け取って単一の数値を返す任意の関数が使用できるほか、nw.mean など narwhals.functions モジュールで実装された関数を使用できます。\nax 描画先となる matplotlib の Axes。複数のグラフを並べる場合などに使用します。デフォルトの None の場合は、新しい Figure と Axes が作成されます。\nfontsize:int  軸ラベルなどのフォントサイズ。\nxlab_rotation:int or float 横軸ラベルの角度。matplotlib の ax.xaxis.set_tick_params() に引数 rotation として渡されます。\npalette:list of str グラフの描画に使用する色コード。1つ目の要素が棒グラフの色に、2つ目の累積値を表す折線グラフの色に対応します。", + "crumbs": [ + "eda_tools", + "7  `py4stats.Pareto_plot()`: パレート図の作成" + ] + }, + { + "objectID": "man/Pareto_plot.html#使用例", + "href": "man/Pareto_plot.html#使用例", + "title": "7  py4stats.Pareto_plot(): パレート図の作成", + "section": "7.2 使用例", + "text": "7.2 使用例\nimport py4stats as py4st\nimport pandas as pd\nimport numpy as np\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込\n\npenguins['group'] = penguins['species'] + '\\n' + penguins['island']\n\npy4st.Pareto_plot(penguins, group = 'group')\n\n\n\nPareto_plot1\n\n\npy4st.Pareto_plot(\n penguins, group = 'group', \n values = 'bill_length_mm',\n aggfunc = np.mean,\n palette = ['#FF6F91', '#252525']\n )\n\n\n\nPareto_plot2\n\n\npy4st.Pareto_plot(\n penguins, \n values = 'bill_length_mm',\n group = 'group',\n aggfunc = lambda x: x.std()\n )\n\n\n\nPareto_plot3\n\n\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "7  `py4stats.Pareto_plot()`: パレート図の作成" + ] + }, + { + "objectID": "man/plot_category.html", + "href": "man/plot_category.html", + "title": "8  py4stats.plot_category()", + "section": "", + "text": "8.1 概要\nカテゴリ変数の回答分布を 100% 積み上げ横棒グラフとして描画します。\n本関数は、複数のカテゴリ変数について回答分布を集計し、各変数を1本の100%積み上げ横棒グラフとして可視化します。リッカート尺度による設問や、共通のカテゴリをもつ、アンケートの回答データの可視化を主な用途としています。", + "crumbs": [ + "eda_tools", + "8  `py4stats.plot_category()`" + ] + }, + { + "objectID": "man/plot_category.html#概要", + "href": "man/plot_category.html#概要", + "title": "8  py4stats.plot_category()", + "section": "", + "text": "plot_category(\n data: IntoFrameT,\n palette: Optional[sns.palettes._ColorPalette] = None,\n legend_type: Literal['horizontal', 'vertical', 'none'] = 'horizontal',\n show_vline: bool = True,\n ax: Optional[Axes] = None,\n):", + "crumbs": [ + "eda_tools", + "8  `py4stats.plot_category()`" + ] + }, + { + "objectID": "man/plot_category.html#引数-argument", + "href": "man/plot_category.html#引数-argument", + "title": "8  py4stats.plot_category()", + "section": "8.2 引数 Argument", + "text": "8.2 引数 Argument\n\ndata:IntoFrameT(必須) カテゴリ変数を含む入力データフレーム(1列につき1変数)。 narwhals がサポートする任意のデータフレーム型(例:pandas.DataFrame、polars.DataFrame)を指定できます。 すべての列は、同一のカテゴリ体系(共通のカテゴリラベル)を共有している必要があります。 注意:pyarrow.Table については、その仕様による機能制限があります。詳細は「注意 Notes」セクションを参照してください。\nsort_by: str 回答カテゴリの並び順を決定する基準。'values':カテゴリの値(ラベル)でソートします。'frequency':出現頻度の高い順にソートします。デフォルトは 'values' です。\npalette sns.palettes._ColorPalette: 回答カテゴリに使用するカラーパレット。 None の場合は、内部でデフォルトの発散型パレットを生成します。 指定する場合は、カテゴリ数と同じ長さの配列である必要があります。 デフォルトは None です。\nlegend_typestr: 凡例の配置方法。デフォルトは 'horizontal' です。\n\n'horizontal':凡例をグラフ下部に横並びで表示します。\n'vertical':凡例をグラフ右側に縦並びで表示します。\n'none':凡例を表示しません。\n\nshow_vline:bool True の場合、x = 0.5(50%)の位置に基準となる垂直線を描画します。 割合の中点を視覚的に示す目的で使用できます。デフォルトは True です。\nax: 描画先となる matplotlib の Axes。複数のグラフを並べる場合などに使用します。デフォルトの None の場合は、新しい Figure と Axes が作成されます。", + "crumbs": [ + "eda_tools", + "8  `py4stats.plot_category()`" + ] + }, + { + "objectID": "man/plot_category.html#使用例-example", + "href": "man/plot_category.html#使用例-example", + "title": "8  py4stats.plot_category()", + "section": "8.3 使用例 Example", + "text": "8.3 使用例 Example\nimport py4stats as py4st\nimport pandas as pd\nimport itertools\n\nQ1 = [70 * ['Strongly agree'], 200 * ['Agree'], 235 * ['Disagree'], 149 * ['Strongly disagree']]\nQ2 = [74 * ['Strongly agree'], 209 * ['Agree'], 238 * ['Disagree'], 133 * ['Strongly disagree']]\nQ3 = [59 * ['Strongly agree'], 235 * ['Agree'], 220 * ['Disagree'], 140 * ['Strongly disagree']]\nQ4 = [40 * ['Strongly agree'], 72 * ['Agree'], 266 * ['Disagree'], 276 * ['Strongly disagree']]\n\ndata = pd.DataFrame({\n 'I read only if I have to.':list(itertools.chain.from_iterable(Q1)),\n 'Reading is one of my favorite hobbies.':list(itertools.chain.from_iterable(Q2)),\n 'I like talking about books with other people.':list(itertools.chain.from_iterable(Q3)),\n 'For me, reading is a waste of time.':list(itertools.chain.from_iterable(Q4))\n})\ncateg_list = ['Strongly disagree', 'Disagree', 'Agree', 'Strongly agree']\n\ndata_pd = data.apply(pd.Categorical, categories = categ_list)\n\npy4st.plot_category(data_pd)\n\n\n\nplot_category1\n\n\nimport polars as pl\nimport textwrap\n\ndata_pl = pl.from_pandas(data)\ndata_pl = data_pl.with_columns(\n pl.all().cast(pl.Enum(categ_list))\n )\\\n .rename(lambda x: textwrap.fill(x, width = 25))\n\nfig, ax = plt.subplots()\n\npy4st.plot_category(\n data_pl, \n palette = sns.color_palette('RdBu', n_colors = 4),\n ax = ax\n )\n\nax.set_title('Survey on attitudes toward reading');\n\n\n\nplot_category2", + "crumbs": [ + "eda_tools", + "8  `py4stats.plot_category()`" + ] + }, + { + "objectID": "man/plot_category.html#注意-notes", + "href": "man/plot_category.html#注意-notes", + "title": "8  py4stats.plot_category()", + "section": "8.4 注意 Notes", + "text": "8.4 注意 Notes\n\nsort_by=\"values\" は、カテゴリの順序情報(例:pandas の ordered categorical、Polars の Enum で定義した順序)を前提に、カテゴリ順で描画します。\n推奨: sort_by=“values” を利用する場合は、入力として pandas.DataFrame(各列を pd.Categorical に設定)または polars.DataFrame(各列を Enum に設定)を推奨します。\npolars.Categorical の列では、カテゴリ順が期待通りに保持されず、辞書順(例:Agree, Disagree, …)で描画される場合があります。\npyarrow.Table を入力した場合、sort_by = 'values’ は dictionary 型の制約によりエラーとなる場合があります。その場合は sort_by=\"frequency\" を使用してください。", + "crumbs": [ + "eda_tools", + "8  `py4stats.plot_category()`" + ] + }, + { + "objectID": "man/diagnose_category.html", + "href": "man/diagnose_category.html", + "title": "9  カテゴリー変数の要約 py4stats.diagnose_category()", + "section": "", + "text": "9.1 概要\nデータフレームのカテゴリー変数を要約します。本関数は、カテゴリー情報を表す列(カテゴリ型・文字列型・ブール型)およびダミー変数(値が {0, 1} に制限された整数列)を対象として、欠損率、ユニーク値の数、最頻値、最頻値の頻度と割合、evenness などの指標を提供します。", + "crumbs": [ + "eda_tools", + "9  カテゴリー変数の要約 `py4stats.diagnose_category()`" + ] + }, + { + "objectID": "man/diagnose_category.html#概要", + "href": "man/diagnose_category.html#概要", + "title": "9  カテゴリー変数の要約 py4stats.diagnose_category()", + "section": "", + "text": "diagnose_category(\n data: IntoFrameT, \n dropna: bool = True, \n to_native: bool = True\n )", + "crumbs": [ + "eda_tools", + "9  カテゴリー変数の要約 `py4stats.diagnose_category()`" + ] + }, + { + "objectID": "man/diagnose_category.html#引数-argument", + "href": "man/diagnose_category.html#引数-argument", + "title": "9  カテゴリー変数の要約 py4stats.diagnose_category()", + "section": "9.2 引数 Argument", + "text": "9.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\ndropna:bool  欠測値(NaN, None など)を統計値の計算から除外するかどうかを表すブール値。初期設定は True です。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", + "crumbs": [ + "eda_tools", + "9  カテゴリー変数の要約 `py4stats.diagnose_category()`" + ] + }, + { + "objectID": "man/diagnose_category.html#返り値-value", + "href": "man/diagnose_category.html#返り値-value", + "title": "9  カテゴリー変数の要約 py4stats.diagnose_category()", + "section": "9.3 返り値 Value", + "text": "9.3 返り値 Value\nfreq_table()関数は、次の値をもつ DataFrame を出力します。\n\nvariables: 変数(列)名\ncount: 非欠損値の個数\nmiss_pct: 欠損率(null_count / N * 100) (* ここで N は data の行数)\nunique: ユニーク値の個数\nunique_pct: ユニーク値の割合(unique / N * 100)\nmode: 最頻値\nmode_freq: 最頻値の度数\nmode_pct: 最頻値の割合(mode_freq / N * 100)\nevenness: カテゴリー分布の均等度([0, 1] の範囲)", + "crumbs": [ + "eda_tools", + "9  カテゴリー変数の要約 `py4stats.diagnose_category()`" + ] + }, + { + "objectID": "man/diagnose_category.html#使用例-examples", + "href": "man/diagnose_category.html#使用例-examples", + "title": "9  カテゴリー変数の要約 py4stats.diagnose_category()", + "section": "9.4 使用例 Examples", + "text": "9.4 使用例 Examples\nimport pandas as pd\nimport py4stats as py4st\nfrom palmerpenguins import load_penguins\n\npenguins = load_penguins().drop('year', axis = 1) # サンプルデータの読み込み\npenguins2 = penguins.copy()\ns = penguins2['body_mass_g']\npenguins2['heavy'] = np.where(s >= s.quantile(0.75), True, False)\n\nprint(py4st.diagnose_category(penguins2).round(4))\n#> variables count miss_pct unique unique_pct mode mode_freq mode_pct evenness\n#> 0 species 344 0.0000 3 0.8721 Adelie 152 44.1860 0.9550\n#> 1 island 344 0.0000 3 0.8721 Biscoe 168 48.8372 0.9133\n#> 2 sex 333 3.1977 2 0.5814 male 168 50.4505 0.9999\n#> 3 heavy 344 0.0000 2 0.5814 False 254 73.8372 0.8292", + "crumbs": [ + "eda_tools", + "9  カテゴリー変数の要約 `py4stats.diagnose_category()`" + ] + }, + { + "objectID": "man/diagnose_category.html#note", + "href": "man/diagnose_category.html#note", + "title": "9  カテゴリー変数の要約 py4stats.diagnose_category()", + "section": "9.5 Note", + "text": "9.5 Note\nevenness は、各列ごとに情報エントロピーを \\([0, 1]\\) の範囲に正規化した指標です。本実装では、対数の底をカテゴリの個数(unique)に設定することで正規化を行っており、これは底を2とした情報エントロピーを log2(unique) で割ることと同値です。この指標は正規化エントロピー(normalized entropy)としても知られています。\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "9  カテゴリー変数の要約 `py4stats.diagnose_category()`" + ] + }, + { + "objectID": "man/point_range.html", + "href": "man/point_range.html", + "title": "10  数値変数の点推定と区間推定:py4stats.mean_qi() py4stats.median_qi() py4stats.mean_ci()", + "section": "", + "text": "10.1 概要\nR言語の ggdist::mean_qi() をオマージュした数値変数の点推定と区間推定を行う関数です。", + "crumbs": [ + "eda_tools", + "10  数値変数の点推定と区間推定:`py4stats.mean_qi()` `py4stats.median_qi()` `py4stats.mean_ci()`" + ] + }, + { + "objectID": "man/point_range.html#概要", + "href": "man/point_range.html#概要", + "title": "10  数値変数の点推定と区間推定:py4stats.mean_qi() py4stats.median_qi() py4stats.mean_ci()", + "section": "", + "text": "mean_qi(\n data: Union[IntoFrameT, SeriesT],\n width: float = 0.975,\n interpolation: str = 'midpoint',\n to_native: bool = True\n)\nmean_qi(\n data: Union[IntoFrameT, SeriesT],\n width: float = 0.975,\n interpolation: str = 'midpoint',\n to_native: bool = True\n)\n\nmedian_qi(\n data: Union[IntoFrameT, IntoSeriesT],\n width: float = 0.975,\n interpolation: str = 'midpoint',\n to_native: bool = True\n)\n\nmean_ci(\n data: Union[IntoFrameT, IntoSeriesT],\n width: float = 0.975,\n to_native: bool = True\n)", + "crumbs": [ + "eda_tools", + "10  数値変数の点推定と区間推定:`py4stats.mean_qi()` `py4stats.median_qi()` `py4stats.mean_ci()`" + ] + }, + { + "objectID": "man/point_range.html#引数-argument", + "href": "man/point_range.html#引数-argument", + "title": "10  数値変数の点推定と区間推定:py4stats.mean_qi() py4stats.median_qi() py4stats.mean_ci()", + "section": "10.2 引数 Argument", + "text": "10.2 引数 Argument\n\ndata:IntoFrameT or IntoSeriesT(必須) 入力データ。narwhals が受け入れ可能な DataFrame もしくは Series 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\nwidth:float  分位点区間の幅、もしくは信頼区間の計算に用いる信頼係数。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", + "crumbs": [ + "eda_tools", + "10  数値変数の点推定と区間推定:`py4stats.mean_qi()` `py4stats.median_qi()` `py4stats.mean_ci()`" + ] + }, + { + "objectID": "man/point_range.html#使用例-examples", + "href": "man/point_range.html#使用例-examples", + "title": "10  数値変数の点推定と区間推定:py4stats.mean_qi() py4stats.median_qi() py4stats.mean_ci()", + "section": "10.3 使用例 Examples", + "text": "10.3 使用例 Examples\nimport py4stats as py4st\nimport pandas as pd\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込み\n\nprint(py4st.mean_qi(penguins['bill_length_mm']).round(2))\n#> variable mean lower upper\n#> 0 bill_length_mm 43.92 34.8 53.1\n\n\nprint(py4st.median_qi(penguins['bill_length_mm']).round(2))\n#> variable median lower upper\n#> 0 bill_length_mm 44.45 34.8 53.1\n\nprint(py4st.mean_ci(penguins['bill_length_mm']).round(2))\n#> variable mean lower upper\n#> 0 bill_length_mm 43.92 43.26 44.58\n\nprint(py4st.mean_ci(penguins[['bill_length_mm', 'bill_depth_mm']]).round(2))\n#> variable mean lower upper\n#> 0 bill_length_mm 43.92 43.26 44.58\n#> 1 bill_depth_mm 17.15 16.91 17.39\n\nprint(penguins.groupby('species')[['bill_length_mm']].apply(py4st.median_qi).round(2))\n#> variable median lower upper\n#> species \n#> Adelie 0 bill_length_mm 38.80 34.05 44.10\n#> Chinstrap 0 bill_length_mm 49.55 42.45 55.00\n#> Gentoo 0 bill_length_mm 47.30 42.65 53.85\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "10  数値変数の点推定と区間推定:`py4stats.mean_qi()` `py4stats.median_qi()` `py4stats.mean_ci()`" + ] + }, + { + "objectID": "man/remove_empty_constant.html", + "href": "man/remove_empty_constant.html", + "title": "11  空白列, 定数列の削除:py4stats.remove_empty(), py4stats.remove_constant()", + "section": "", + "text": "11.1 概要\npy4stats.remove_empty()はR言語の janitor:remove_empty() をオマージュした関数で、全ての要素が NaN である列や行をデータフレームから除外します py4stats.remove_constant() はR言語の janitor:remove_constant() をオマージュした関数で、1種類だけの要素からなる列をデータフレームから除外します。", + "crumbs": [ + "eda_tools", + "11  空白列, 定数列の削除:`py4stats.remove_empty()`, `py4stats.remove_constant()`" + ] + }, + { + "objectID": "man/remove_empty_constant.html#概要", + "href": "man/remove_empty_constant.html#概要", + "title": "11  空白列, 定数列の削除:py4stats.remove_empty(), py4stats.remove_constant()", + "section": "", + "text": "remove_empty(\n data: IntoFrameT,\n cols: bool = True,\n rows: bool = True,\n cutoff: float = 1.0,\n quiet: bool = True,\n to_native: bool = True,\n **kwargs: Any\n) \n\nremove_constant(\n data: IntoFrameT,\n quiet: bool = True,\n to_native: bool = True,\n dropna = False,\n **kwargs: Any\n)", + "crumbs": [ + "eda_tools", + "11  空白列, 定数列の削除:`py4stats.remove_empty()`, `py4stats.remove_constant()`" + ] + }, + { + "objectID": "man/remove_empty_constant.html#引数-argument", + "href": "man/remove_empty_constant.html#引数-argument", + "title": "11  空白列, 定数列の削除:py4stats.remove_empty(), py4stats.remove_constant()", + "section": "11.2 引数 Argument", + "text": "11.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\ncols:bool  空白列を削除するかどうかを表すブール値(remove_empty() のみ)。True(初期設定) なら空白列を削除し、Falseなら全ての要素が NaN の列があっても削除しません。\nrows:bool  空白行を削除するかどうかを表すブール値(remove_empty() のみ)。True(初期設定) なら空白行を削除し、Falseなら全ての要素が NaN の行があっても削除しません。\ncutoff:float  列(行)の削除を行うかどうかを判定する欠測率の閾値(remove_empty() のみ)。ある列(行)における NaN の割合が >= cutoff のとき、その列(行)を削除します。初期設定は1で全ての要素が NaN の列(行)のみ削除しますが、例えば cutoff = 0.9 とすることで NaN の割合9が割以上の列(行)を削除できます。\nquiet:bool  削除した列(行)を報告するかどうかを表すブール値。quiet = True(初期設定) であれば何も報告せずに削除だけ行い、quiet = False なら、削除した列(行)の数と列名(行名)を報告します。\ndropna:bool  ユニーク値の数を計算する際に、NaN を除外するかどうかを表すブール値(remove_constant() のみ)。dropna = True だと NaN を除外し、dropna = False(初期設定)だと NaN を除外しません。データフレームに NaN と、 NaN ではない1種類の値からなる列がある場合、dropna = False だと削除されず、dropna = True だと削除されます。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", + "crumbs": [ + "eda_tools", + "11  空白列, 定数列の削除:`py4stats.remove_empty()`, `py4stats.remove_constant()`" + ] + }, + { + "objectID": "man/remove_empty_constant.html#使用例-example", + "href": "man/remove_empty_constant.html#使用例-example", + "title": "11  空白列, 定数列の削除:py4stats.remove_empty(), py4stats.remove_constant()", + "section": "11.3 使用例 Example", + "text": "11.3 使用例 Example\npy4stats.remove_empty() の使用例。\nimport py4stats as py4st\nimport pandas as pd\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込み\n\npenguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy()\n# 空白列を作成\npenguins2.loc[:, 'empty'] = np.nan\n# 空白行を作成\npenguins2.loc[344, :] = np.nan\n\nprint(penguins2.tail(3))\n#> species body_mass_g empty\n#> 342 Chinstrap 4100.0 NaN\n#> 343 Chinstrap 3775.0 NaN\n#> 344 NaN NaN NaN\n# 完全に空白な行と列を削除。\nprint(py4st.remove_empty(penguins2, quiet = False).tail(3))\n#> Removing 1 empty column(s) out of 3 columns(Removed: empty).\n#> Removing 1 empty row(s) out of 345 rows(Removed: 344).\n#> species body_mass_g\n#> 341 Chinstrap 3775.0\n#> 342 Chinstrap 4100.0\n#> 343 Chinstrap 3775.0\n\n# 完全に空白な列のみ削除。\nprint(py4st.remove_empty(penguins2, rows = False, quiet = False).tail(3))\n#> Removing 1 empty column(s) out of 3 columns(Removed: empty).\n#> species body_mass_g\n#> 342 Chinstrap 4100.0\n#> 343 Chinstrap 3775.0\n#> 344 NaN NaN\n\n# 完全に空白な行のみ削除。\nprint(py4st.remove_empty(penguins2, cols = False, quiet = False).tail(3))\n#> Removing 1 empty row(s) out of 345 rows(Removed: 344).\n#> species body_mass_g empty\n#> 341 Chinstrap 3775.0 NaN\n#> 342 Chinstrap 4100.0 NaN\n#> 343 Chinstrap 3775.0 NaN\n# quiet = True の場合\nprint(py4st.remove_empty(penguins2).tail(3))\n#> species body_mass_g\n#> 341 Chinstrap 3775.0\n#> 342 Chinstrap 4100.0\n#> 343 Chinstrap 3775.0\npy4stats.remove_constant() の使用例。\npenguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy()\npenguins2.loc[:, 'constant'] = 'c'\n\nprint(penguins2.head(3))\n#> species body_mass_g constant\n#> 0 Adelie 3750.0 c\n#> 1 Adelie 3800.0 c\n#> 2 Adelie 3250.0 c\n\nprint(py4st.remove_constant(penguins2, quiet = False).head(3))\n#> Removing 1 constant column(s) out of 3 column(s)(Removed: constant).\n#> species body_mass_g\n#> 0 Adelie 3750.0\n#> 1 Adelie 3800.0\n#> 2 Adelie 3250.0\npenguins2.loc[:, 'almost_empty'] = pd.NA\npenguins2.loc[1, 'almost_empty'] = 'c'\n\n# dropna = False なら、almost_empty は削除されません。\nprint(py4st.remove_constant(penguins2).head(3))\n#> species body_mass_g almost_empty\n#> 0 Adelie 3750.0 <NA>\n#> 1 Adelie 3800.0 c\n#> 2 Adelie 3250.0 <NA>\n\nprint(py4st.remove_constant(penguins2, dropna = True).head(3))\n#> species body_mass_g\n#> 0 Adelie 3750.0\n#> 1 Adelie 3800.0\n#> 2 Adelie 3250.0\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "11  空白列, 定数列の削除:`py4stats.remove_empty()`, `py4stats.remove_constant()`" + ] + }, + { + "objectID": "man/filtering_out.html", + "href": "man/filtering_out.html", + "title": "12  py4stats.filtering_out()", + "section": "", + "text": "12.1 概要\npandas の DataFrame.filter() メソッドでは引数 like に文字列を指定することで、列名に特定の文字列を含む列を選択できますが、反対に py4st.filtering_out() では列名に特定の文字列を含む列を除外します。実装の一部はR言語の dplyr::select() を参考にしました。", + "crumbs": [ + "eda_tools", + "12  `py4stats.filtering_out()`" + ] + }, + { + "objectID": "man/filtering_out.html#概要", + "href": "man/filtering_out.html#概要", + "title": "12  py4stats.filtering_out()", + "section": "", + "text": "filtering_out(\n data: IntoFrameT,\n contains: Optional[str] = None,\n starts_with: Optional[str] = None,\n ends_with: Optional[str] = None,\n axis: Union[int, str] = 'columns',\n to_native: bool = True,\n)", + "crumbs": [ + "eda_tools", + "12  `py4stats.filtering_out()`" + ] + }, + { + "objectID": "man/filtering_out.html#引数-argument", + "href": "man/filtering_out.html#引数-argument", + "title": "12  py4stats.filtering_out()", + "section": "12.2 引数 Argument", + "text": "12.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\n*args(str / list[str] / narwhals.Expr / narwhals.Selector) 移動したい列を指定します。指定方法は次のとおりです。\n\n列名(例:\"x\")\n列名のリスト(例:[\"x\", \"y\"])\nnarwhals の式(Expr)(例:nw.col(\"x\")) *axis = 'columns' の場合のみ\nnarwhals の Selector (例:ncs.numeric())*axis = 'columns' の場合のみ\n\ncontains:str  列名(行名)の検索に使用する文字列。内部で使用している pandas.Series.str.contains に渡され、指定された文字列を列名(行名)に含む列(行)を除外します。\nstarts_with:str  列名(行名)の検索に使用する文字列。内部で使用している pandas.Series.str.startswith に渡され、指定された文字列で列名(行名)が始まる列(行)を除外します。\nends_with:str  列名(行名)の検索に使用する文字列。内部で使用している pandas.Series.str.endswith に渡され、指定された文字列で列名(行名)が終わる列(行)を除外します。\naxis:{0 or 'index', 1 or 'columns'} axis = 1 または axis = 'columns' なら列の削除を行い、axis = 0 または axis = 'index' なら行の削除を行います。 このオプションは、data がインデックス属性 (例: pandas.DataFrame) をもつ場合のみ有効です。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", + "crumbs": [ + "eda_tools", + "12  `py4stats.filtering_out()`" + ] + }, + { + "objectID": "man/filtering_out.html#使用例", + "href": "man/filtering_out.html#使用例", + "title": "12  py4stats.filtering_out()", + "section": "12.3 使用例", + "text": "12.3 使用例\nimport py4stats as py4st\nimport pandas as pd\nimport narwhals.selectors as ncs\nfrom palmerpenguins import load_penguins\n\npenguins = load_penguins().head(3) # サンプルデータの読み込み\n\nprint(penguins)\n#> species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g sex year female\n#> 0 Adelie Torgersen 39.1 18.7 181.0 3750.0 male 2007 0\n#> 1 Adelie Torgersen 39.5 17.4 186.0 3800.0 female 2007 1\n#> 2 Adelie Torgersen 40.3 18.0 195.0 3250.0 female 2007 1\n# *args で列名を直接指定\nprint(py4st.filtering_out(penguins, 'year', 'island', 'sex'))\n#> species bill_length_mm bill_depth_mm flipper_length_mm body_mass_g\n#> 0 Adelie 39.1 18.7 181.0 3750.0\n#> 1 Adelie 39.5 17.4 186.0 3800.0\n#> 2 Adelie 40.3 18.0 195.0 3250.0\n\n\n# narwhals.selector の使用例 文字列型の変数を除外\nprint(py4st.filtering_out(penguins, ncs.string()))\n#> bill_length_mm bill_depth_mm flipper_length_mm body_mass_g year\n#> 0 39.1 18.7 181.0 3750.0 2007\n#> 1 39.5 17.4 186.0 3800.0 2007\n#> 2 40.3 18.0 195.0 3250.0 2007\n\n# 列名に 'length' を含む列を除外\nprint(py4st.filtering_out(penguins, contains = 'length'))\n#> species island bill_depth_mm body_mass_g sex year female\n#> 0 Adelie Torgersen 18.7 3750.0 male 2007 0\n#> 1 Adelie Torgersen 17.4 3800.0 female 2007 1\n#> 2 Adelie Torgersen 18.0 3250.0 female 2007 1\n\n# 列名が 'bill' から始まる列を除外\nprint(py4st.filtering_out(penguins, starts_with = 'bill'))\n#> species island flipper_length_mm body_mass_g sex year female\n#> 0 Adelie Torgersen 181.0 3750.0 male 2007 0\n#> 1 Adelie Torgersen 186.0 3800.0 female 2007 1\n#> 2 Adelie Torgersen 195.0 3250.0 female 2007 1\n\n# 列名が '_mm' で終わる列を除外\nprint(py4st.filtering_out(penguins, ends_with = '_mm'))\n#> species island body_mass_g sex year female\n#> 0 Adelie Torgersen 3750.0 male 2007 0\n#> 1 Adelie Torgersen 3800.0 female 2007 1\n#> 2 Adelie Torgersen 3250.0 female 2007 1", + "crumbs": [ + "eda_tools", + "12  `py4stats.filtering_out()`" + ] + }, + { + "objectID": "man/filtering_out.html#notes", + "href": "man/filtering_out.html#notes", + "title": "12  py4stats.filtering_out()", + "section": "12.4 Notes", + "text": "12.4 Notes\naxis='index' による行を対象とするフィルタリングは、インデックスの存在に依存します。したがって、pd.DataFrame 以外の行ラベルをもたない DataFrame バックエンドでは、このオプションは利用できません。\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "12  `py4stats.filtering_out()`" + ] + }, + { + "objectID": "man/relocate.html", + "href": "man/relocate.html", + "title": "13  py4stats.relocate(): 列を削除せずに並び替える", + "section": "", + "text": "13.1 概要\nrelocate() 関数は、データフレームに含まれる列を削除することなく並び替えるための関数です。指定した列(1 列または複数列)を、先頭・特定の列の前・特定の列の後に移動させることができます。本関数は、R の dplyr:relocate() に近い操作感を Python で提供することを目的としています。列の指定には、列名(文字列)だけでなく、narwhals の式(Expr)や Selector を利用でき、柔軟な列選択", + "crumbs": [ + "eda_tools", + "13  `py4stats.relocate()`: 列を削除せずに並び替える" + ] + }, + { + "objectID": "man/relocate.html#概要", + "href": "man/relocate.html#概要", + "title": "13  py4stats.relocate(): 列を削除せずに並び替える", + "section": "", + "text": "relocate(\n data: IntoFrameT, \n *args: Union[str, List[str], narwhals.Expr, narwhals.selectors.Selector], \n before: Optional[str] = None,\n after: Optional[str] = None,\n place: Optional[Literal[\"first\", \"last\"]] = None,\n to_native: bool = True\n ):", + "crumbs": [ + "eda_tools", + "13  `py4stats.relocate()`: 列を削除せずに並び替える" + ] + }, + { + "objectID": "man/relocate.html#引数-argument", + "href": "man/relocate.html#引数-argument", + "title": "13  py4stats.relocate(): 列を削除せずに並び替える", + "section": "13.2 引数 Argument", + "text": "13.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\n*args(str / list[str] / narwhals.Expr / narwhals.Selector) 移動したい列を指定します。指定方法は次のとおりです。\n\n列名(例:\"x\")\n列名のリスト(例:[\"x\", \"y\"])\nnarwhals の式(Expr)(例:nw.col(\"x\"))\nnarwhals の Selector (例:ncs.numeric())\n\n指定した順序は、移動後の列順にもそのまま反映されます。\nbefore(str, optional) args で指定された列を、この列の直前に移動します。 after と同時に指定することはできません。デフォルトは None です。\nafter(str, optional) args で指定された列を、この列の直後に移動します。 before と同時に指定することはできません。デフォルトは None です。\nplace(str, optional) *args で指定された列の、配置場所を指定します。\n\n\"first\": 選択した列をデータフレームの先頭(最も左)に配置します。\n\"last\": 選択した列をデータフレームの末尾(最も右)に配置します。 place 引数は before または after と同時に指定することはできません。 未指定(None)の場合は \"first\" と同じ挙動になります。\n\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。\n\n\n13.2.1 返り値\n\nIntoFrameT 入力データフレームと同じ列を保持したまま、指定されたルールに従って並び替えられたデータフレームを返します。", + "crumbs": [ + "eda_tools", + "13  `py4stats.relocate()`: 列を削除せずに並び替える" + ] + }, + { + "objectID": "man/relocate.html#使用例-example", + "href": "man/relocate.html#使用例-example", + "title": "13  py4stats.relocate(): 列を削除せずに並び替える", + "section": "13.3 使用例 Example", + "text": "13.3 使用例 Example\nimport py4stats as py4st\nimport pandas as pd\nimport narwhals.selectors as ncs\nfrom palmerpenguins import load_penguins\n\npenguins_mini = py4st.filtering_out(penguins, starts_with = 'bill').head(3)\nprint(penguins_mini)\n#> species island flipper_length_mm body_mass_g sex year\n#> 0 Adelie Torgersen 181.0 3750.0 male 2007\n#> 1 Adelie Torgersen 186.0 3800.0 female 2007\n#> 2 Adelie Torgersen 195.0 3250.0 female 2007\n# *args に指定した列は最前列に移動します\nprint(py4st.relocate(penguins_mini, 'year', 'sex'))\n#> year sex species island flipper_length_mm body_mass_g\n#> 0 2007 male Adelie Torgersen 181.0 3750.0\n#> 1 2007 female Adelie Torgersen 186.0 3800.0\n#> 2 2007 female Adelie Torgersen 195.0 3250.0\n\n# ncs.numeric() を使うことで、数値変数を指定できます\nprint(py4st.relocate(penguins_mini, ncs.numeric()))\n#> flipper_length_mm body_mass_g year species island sex\n#> 0 181.0 3750.0 2007 Adelie Torgersen male\n#> 1 186.0 3800.0 2007 Adelie Torgersen female\n#> 2 195.0 3250.0 2007 Adelie Torgersen female\n\n# year 列を island 列の直前に移動\nprint(py4st.relocate(penguins_mini, 'year', before = 'island'))\n#> species year island flipper_length_mm body_mass_g sex\n#> 0 Adelie 2007 Torgersen 181.0 3750.0 male\n#> 1 Adelie 2007 Torgersen 186.0 3800.0 female\n#> 2 Adelie 2007 Torgersen 195.0 3250.0 female\n\n# year 列を island 列の直後に移動\nprint(py4st.relocate(penguins_mini, 'year', after = 'island'))\n#> species island year flipper_length_mm body_mass_g sex\n#> 0 Adelie Torgersen 2007 181.0 3750.0 male\n#> 1 Adelie Torgersen 2007 186.0 3800.0 female\n#> 2 Adelie Torgersen 2007 195.0 3250.0 female\n\n#. place = 'last' で最後列に移動\nprint(py4st.relocate(penguins_mini, 'year', place = 'last'))\n#> species island flipper_length_mm body_mass_g sex year\n#> 0 Adelie Torgersen 181.0 3750.0 male 2007\n#> 1 Adelie Torgersen 186.0 3800.0 female 2007\n#> 2 Adelie Torgersen 195.0 3250.0 female 2007\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "13  `py4stats.relocate()`: 列を削除せずに並び替える" + ] + }, + { + "objectID": "man/compare_df_cols.html", + "href": "man/compare_df_cols.html", + "title": "14  py4stats.compare_df_cols(), py4stats.compare_df_stats()", + "section": "", + "text": "14.1 概要\nR言語の janitor::compare_df_cols() をオマージュした関数で、compare_df_cols() は複数の pandas.DataFrame に含まれる同じ名前を持つ列同士のデータ型 dtype を比較し、compare_df_stats() は同じ名前を持つ列同士の記述統計量を比較します。", + "crumbs": [ + "eda_tools", + "14  `py4stats.compare_df_cols()`, `py4stats.compare_df_stats()`" + ] + }, + { + "objectID": "man/compare_df_cols.html#概要", + "href": "man/compare_df_cols.html#概要", + "title": "14  py4stats.compare_df_cols(), py4stats.compare_df_stats()", + "section": "", + "text": "compare_df_cols(\n df_list: Union[List[IntoFrameT], Mapping[str, IntoFrameT]],\n df_name: Optional[List[str]] = None,\n return_match: Literal[\"all\", \"match\", \"mismatch\"] = 'all',\n dropna:bool = False,\n to_native: bool = True\n)\n\ncompare_df_stats(\n df_list: List[IntoFrameT],\n df_name: Optional[List[str]] = None,\n return_match: Literal[\"all\", \"match\", \"mismatch\"] = \"all\",\n stats: Callable[..., Any] = np.mean,\n rtol: float = 1e-05,\n atol: float = 1e-08,\n to_native: bool = True,\n **kwargs: Any,\n)", + "crumbs": [ + "eda_tools", + "14  `py4stats.compare_df_cols()`, `py4stats.compare_df_stats()`" + ] + }, + { + "objectID": "man/compare_df_cols.html#引数-argument", + "href": "man/compare_df_cols.html#引数-argument", + "title": "14  py4stats.compare_df_cols(), py4stats.compare_df_stats()", + "section": "14.2 引数 Argument", + "text": "14.2 引数 Argument\n\ndf_list(必須) A list or dict of IntoFrameT  列を比較するデータフレームのリストもしくは辞書オブジェクト。辞書が df_name が未指定の場合、辞書の keys を df_name として使用します。\ndf_name list of str  表頭に表示するデータフレームの名前。['df1', 'df2'] のように文字列のリストを指定してください。初期設定では、自動的に df1, df2, df3 … と連番が割り当てられます。\nreturn_match str  出力に反映する変数の範囲を表す文字列。次の値から選択できます。\n\n'all'(初期設定): 全ての列を表示。\n'match':全てのデータフレームで dtype が一致している列のみを表示。\n'mismatch':少なくとも1つのデータフレームで dtype が一致していない列のみを表示。\n\ndropna bool (compare_df_cols() のみ)  データ型 dtype の一致判定に当たり、NaN を無視するかどうか。初期設定 False の場合、すべてのデータフレームが同名かつ同じデータ型の列を持たない限り、ミスマッチが発生したと判定されます。\nstats str or function  比較に用いる記述統計量を定義する関数。np.mean など values 列を1次元配列として受け取って単一の数値を返す任意の関数が使用できるほか、nw.mean など narwhals.functions モジュールで実装された関数を使用できます。初期設定は np.mean です。", + "crumbs": [ + "eda_tools", + "14  `py4stats.compare_df_cols()`, `py4stats.compare_df_stats()`" + ] + }, + { + "objectID": "man/compare_df_cols.html#使用例-examples", + "href": "man/compare_df_cols.html#使用例-examples", + "title": "14  py4stats.compare_df_cols(), py4stats.compare_df_stats()", + "section": "14.3 使用例 Examples", + "text": "14.3 使用例 Examples\nimport pandas as pd\nimport py4stats as py4st\n\ndf1 = pd.DataFrame({'x':[1, 2, 3], 'y':[5, 4, 2], 'z':[True, False, True]})\ndf2 = pd.DataFrame({'x':[1, 2, 3], 'y':[5.0, 4, 2], 'z':['True', 'False', 'True']})\n\nprint(py4st.compare_df_cols([df1, df2]))\n#> term df1 df2 match_dtype\n#> 0 x int64 int64 True\n#> 1 y int64 float64 False\n#> 2 z bool object False\nreturn_match = 'mismatch' を指定すると、データフレームの中で、dtype が一致していないものがある列を返します。\nprint(py4st.compare_df_cols(\n [df1, df2], return_match = 'mismatch'\n ))\n#> term df1 df2 match_dtype\n#> 1 y int64 float64 False\n#> 2 z bool object False\n py4st.compare_df_stats() は数値変数の記述統計量を比較するため、異なる経路で行われたデータ処理の結果が一致しているかを検証する場合に便利です。\nfrom palmerpenguins import load_penguins\npenguins = load_penguins()\npenguins2 = penguins.copy()\nvars = ['flipper_length_mm', 'body_mass_g']\npenguins2.loc[:, vars] = py4st.scale(penguins2.loc[:, vars])\n\nprint(\n py4st.compare_df_stats([penguins, penguins2]).round(2)\n)\n#> term df1 df2 match_stats\n#> 0 bill_depth_mm 17.15 17.15 True\n#> 1 bill_length_mm 43.92 43.92 True\n#> 2 body_mass_g 4201.75 0.00 False\n#> 3 flipper_length_mm 200.92 -0.00 False\n#> 4 year 2008.03 2008.03 True\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "14  `py4stats.compare_df_cols()`, `py4stats.compare_df_stats()`" + ] + }, + { + "objectID": "man/compare_group_stats.html", + "href": "man/compare_group_stats.html", + "title": "15  統計量に基づくグループ間比較", + "section": "", + "text": "15.1 概要\nこれら関数は、入力された2つのデータフレームについて、各数値変数の統計量に基づいた比較を提供します。", + "crumbs": [ + "eda_tools", + "15  統計量に基づくグループ間比較" + ] + }, + { + "objectID": "man/compare_group_stats.html#概要", + "href": "man/compare_group_stats.html#概要", + "title": "15  統計量に基づくグループ間比較", + "section": "", + "text": "compare_group_means(\n group1: IntoFrameT,\n group2: IntoFrameT,\n group_names: Sequence[str] = ('group1', 'group2'),\n columns: Literal['common', 'all'] = 'all',\n to_native: bool = True\n )\n\ncompare_group_median(\n group1: IntoFrameT,\n group2: IntoFrameT,\n group_names: Sequence[str] = ('group1', 'group2'),\n columns: Literal['common', 'all'] = 'all',\n to_native: bool = True\n )\n\nplot_mean_diff(\n group1: IntoFrameT,\n group2: IntoFrameT,\n stats_diff: Literal[\"norm_diff\", \"abs_diff\", \"rel_diff\"] = \"norm_diff\",\n ax: Optional[Axes] = None,\n )\n\nplot_median_diff(\n group1: IntoFrameT,\n group2: IntoFrameT,\n stats_diff: Literal[\"abs_diff\", \"rel_diff\"] = \"rel_diff\",\n ax: Optional[Axes] = None,\n )", + "crumbs": [ + "eda_tools", + "15  統計量に基づくグループ間比較" + ] + }, + { + "objectID": "man/compare_group_stats.html#引数-argument", + "href": "man/compare_group_stats.html#引数-argument", + "title": "15  統計量に基づくグループ間比較", + "section": "15.2 引数 Argument", + "text": "15.2 引数 Argument\n\ngroup1(必須)a pandas.DataFrame  数値変数を含む pandas.DataFrame で group2 との比較対象となるもの\ngroup2(必須)a pandas.DataFrame  数値変数を含む pandas.DataFrame で group1 との比較対象となるもの\ngroup_names list of str  表頭に表示するグループの名前。['group1', 'group2'] のように、2つの要素をもつ文字列のリストとして指定してください。\ncolumns str 2つのグループの結果を結合する際に含める変数を指定します。\n\n\"common\": 両方のグループに存在する変数のみが含まれます。\n\"all\": いずれかのグループに存在する全ての変数が含まれます。この場合、一方のグループにのみ存在する変数についての差分統計量は、欠損値(例:NaN または None)となります。\n\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。\nstats_diff: str (plot_mean_diff() および plot_median_diff() のみ)  グラフの描画に使用する差分統計量。'norm_diff'(plot_mean_diff() のみ)、'abs_diff', 'rel_diff' のいずれかから選ぶことができます。", + "crumbs": [ + "eda_tools", + "15  統計量に基づくグループ間比較" + ] + }, + { + "objectID": "man/compare_group_stats.html#返り値-value", + "href": "man/compare_group_stats.html#返り値-value", + "title": "15  統計量に基づくグループ間比較", + "section": "15.3 返り値 Value", + "text": "15.3 返り値 Value\n compare_group_means()関数および, compare_group_median() 関数では、次の値をもつ pandas.DataFrame が出力されます。\n\ngroup1, group2(初期設定の場合)  各グループにおける記述統計統計量の値\nnorm_diff(compare_group_means() のみ)  標準化された平均値の差で、2つのグループの平均値を \\(\\bar{X}_1\\), \\(\\bar{X}_2\\)、分散を \\(s^2_1, s^2_2\\) とし、サンプルサイズを \\(n_1, n_2\\) とするとき、次式のように定義されます。\n\n\\[\n\\delta = \\frac{\\bar{X}_1 - \\bar{X}_2}{s},~~~~~ s^2 = \\frac{(n_1-1)s_1^2 + (n_2-1)s_2^2}{n_1 + n_2 - 2}\n\\]\n\nabs_diff 2つのグループの記述統計量の絶対差\nrel_diff 2つのグループの記述統計量の相対差。2つのグループの記述統計量を \\(\\bar{X}_1\\), \\(\\bar{X}_2\\) とするとき、次式のように定義されます。\n\n\\[\n\\delta = \\cfrac{\\bar{X}_1 - \\bar{X}_2}{\\cfrac{\\bar{X}_1 + \\bar{X}_2}{2}}\n= 2 \\cdot \\frac{\\bar{X}_1 - \\bar{X}_2}{\\bar{X}_1 + \\bar{X}_2}\n\\]\nplot_mean_diff() 関数および, plot_median_diff() 関数では、グループ別の記述統計両の差をグラフとして可視化します。詳細は使用例を参照して下さい。", + "crumbs": [ + "eda_tools", + "15  統計量に基づくグループ間比較" + ] + }, + { + "objectID": "man/compare_group_stats.html#使用例-examples", + "href": "man/compare_group_stats.html#使用例-examples", + "title": "15  統計量に基づくグループ間比較", + "section": "15.4 使用例 Examples", + "text": "15.4 使用例 Examples\nimport pandas as pd\nimport py4stats as py4st\nfrom palmerpenguins import load_penguins\n\npenguins = load_penguins().drop('year', axis = 1) # サンプルデータの読み込み\nres1 = py4st.compare_group_means(\n penguins.query('species == \"Gentoo\"'),\n penguins.query('species == \"Adelie\"')\n)\nprint(res1.round(3))\n#> variable group1 group2 norm_diff abs_diff rel_diff\n#> 0 bill_depth_mm 14.982 18.346 -3.012 3.364 -0.202\n#> 1 bill_length_mm 47.505 38.791 3.048 8.713 0.202\n#> 2 body_mass_g 5076.016 3700.662 2.868 1375.354 0.313\n#> 3 flipper_length_mm 217.187 189.954 4.180 27.233 0.134\nres2 = py4st.compare_group_median(\n penguins.query('species == \"Gentoo\"'),\n penguins.query('species == \"Adelie\"'),\n group_names = ['Gentoo', 'Adelie']\n)\nprint(res2.round(3))\n#> variable Gentoo Adelie abs_diff rel_diff\n#> 0 bill_depth_mm 14.982 18.346 3.364 -0.202\n#> 1 bill_length_mm 47.505 38.791 8.713 0.202\n#> 2 body_mass_g 5076.016 3700.662 1375.354 0.313\n#> 3 flipper_length_mm 217.187 189.954 27.233 0.134\npy4st.plot_mean_diff(\n penguins.query('species == \"Gentoo\"'),\n penguins.query('species == \"Adelie\"'),\n stats_diff = 'norm_diff'\n)\n\n\n\nplot_mean_diff1\n\n\npy4st.plot_mean_diff(\n penguins.query('species == \"Gentoo\"'),\n penguins.query('species == \"Adelie\"'),\n stats_diff = 'abs_diff'\n)\n\n\n\nplot_mean_diff2\n\n\npy4st.plot_median_diff(\n penguins.query('species == \"Gentoo\"'),\n penguins.query('species == \"Adelie\"'),\n stats_diff = 'rel_diff'\n)\n\n\n\nplot_median_diff1\n\n\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "15  統計量に基づくグループ間比較" + ] + }, + { + "objectID": "man/plot_miss_var.html", + "href": "man/plot_miss_var.html", + "title": "16  py4stats.plot_miss_var()", + "section": "", + "text": "16.1 概要\nR言語の naniar::gg_miss_var() をオマージュした関数で、データフレームの各変数について欠測値の量を横棒グラフとして可視化します。欠損値統計の計算には py4stats.diagnose() を使用しています。", + "crumbs": [ + "eda_tools", + "16  `py4stats.plot_miss_var()`" + ] + }, + { + "objectID": "man/plot_miss_var.html#概要", + "href": "man/plot_miss_var.html#概要", + "title": "16  py4stats.plot_miss_var()", + "section": "", + "text": "plot_miss_var(\n data: IntoFrameT,\n values: Literal['missing_percent', 'missing_count'] = 'missing_percent', \n sort: bool = True, \n miss_only: bool = False, \n top_n: Optional[int] = None,\n fontsize: int = 12,\n ax: Optional[Axes] = None,\n color: str = '#478FCE',\n **kwargs: Any\n)", + "crumbs": [ + "eda_tools", + "16  `py4stats.plot_miss_var()`" + ] + }, + { + "objectID": "man/plot_miss_var.html#引数-argument", + "href": "man/plot_miss_var.html#引数-argument", + "title": "16  py4stats.plot_miss_var()", + "section": "16.2 引数 Argument", + "text": "16.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\nnormalize:str  グラフに表示する値の種類。\n\nmissing_percent 列毎の欠測率をパーセンテージで表示します。\ncolumns 列毎の欠測数を表示します。\n\nsort:bool プロット前に選択した指標で列をソートするかどうか。初期設定は True です。。\nmiss_only:bool 欠測値を含まない列を除外するかどうか。True だと欠測値を含まない列を除外し、False(初期設定)だと省略せずに全ての列を表示します。\ntop_n:int 棒グラフを表示するグラフの個数。top_n = None(初期設定)の場合、すべての棒グラフを表示し、整数値が指定された場合、欠測率(数)の上位 top_n 件が表示されます。\nax  matplotlib の ax オブジェクト。複数のグラフを並べる場合などに使用します。\nfontsize:int  軸ラベルなどのフォントサイズ。\npalette:list of str  グラフの描画に使用する色コード。棒グラフの色に対応します。", + "crumbs": [ + "eda_tools", + "16  `py4stats.plot_miss_var()`" + ] + }, + { + "objectID": "man/plot_miss_var.html#使用例-example", + "href": "man/plot_miss_var.html#使用例-example", + "title": "16  py4stats.plot_miss_var()", + "section": "16.3 使用例 Example", + "text": "16.3 使用例 Example\nimport py4stats as py4st\nimport pandas as pd\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込\n\npy4st.plot_miss_var(penguins)\n\n\n\nplot_miss_var1\n\n\npy4st.plot_miss_var(penguins, values = 'missing_count', miss_only = True)\n\n\n\nplot_miss_var2\n\n\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "16  `py4stats.plot_miss_var()`" + ] + }, + { + "objectID": "man/set_miss.html", + "href": "man/set_miss.html", + "title": "17  py4stats.set_miss()", + "section": "", + "text": "17.1 概要\nこの関数は、Series の非欠測要素のうち、指定された個数または割合を欠測値に置き換えます。narwhals を利用することで、複数の Series バックエンドに対応しています。主にテストデータの作成や、欠測データのシミュレーションを目的とした関数です。", + "crumbs": [ + "eda_tools", + "17  `py4stats.set_miss()`" + ] + }, + { + "objectID": "man/set_miss.html#概要", + "href": "man/set_miss.html#概要", + "title": "17  py4stats.set_miss()", + "section": "", + "text": "set_miss(\n x: IntoSeriesT, \n n: Optional[int] = None,\n prop: Optional[float] = None, \n method: Literal['random', 'first', 'last'] = 'random', \n random_state: Optional[int] = None, \n na_value: Any = None,\n to_native: bool = True\n )", + "crumbs": [ + "eda_tools", + "17  `py4stats.set_miss()`" + ] + }, + { + "objectID": "man/set_miss.html#引数-argument", + "href": "man/set_miss.html#引数-argument", + "title": "17  py4stats.set_miss()", + "section": "17.2 引数 Argument", + "text": "17.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\nn:int 処理後の Series に含まれる欠測値の目標個数。すでに n 個以上の欠測値が含まれている場合は、新たな欠測値は追加されず、警告が発せられます。\nprop:float 処理後の Series に含まれる欠測値の目標割合。0 から 1 の間で指定してください。すでに欠測値の割合が prop 以上である場合は、新たな欠測値は追加されず、警告が発せられます。\nmethod: str: 欠測値に置き換える要素の選択方法。\n\n'random': 非欠測要素の中からランダムに選択します。\n'first': Series の先頭から選択します。\n'last': Series の末尾から選択します。 デフォルトは 'random' です。\n\nrandom_state (int, optional): method = 'random' の場合に使用する乱数シード。再現性のある結果を得るために指定できます。 method が 'random' 以外の場合、random_state は無視されます。\nna_value: (Any) 欠測値として使用する値。デフォルトは None です。\nto_native(bool, optional) True の場合、入力と同じ型の Series(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.Series を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", + "crumbs": [ + "eda_tools", + "17  `py4stats.set_miss()`" + ] + }, + { + "objectID": "man/set_miss.html#使用例-example", + "href": "man/set_miss.html#使用例-example", + "title": "17  py4stats.set_miss()", + "section": "17.3 使用例 Example", + "text": "17.3 使用例 Example\nimport pandas as pd\nfrom py4stats import set_miss\ns = pd.Series([1, 2, 3, 4, 5])\npy4st.set_miss(s, n = 2, method='first')\n#> 0 NaN\n#> 1 NaN\n#> 2 3.0\n#> 3 4.0\n#> 4 5.0\n#> dtype: float64\n\ns_miss = py4st.set_miss(s, prop=0.4, method='random', random_state=0)\n#> 0 1.0\n#> 1 NaN\n#> 2 3.0\n#> 3 NaN\n#> 4 5.0\n#> dtype: float64\nx に代入された Series オブジェクトに、既に指定された以上の欠測値が含まれていた場合、次のように欠測値を追加せず UserWarning を出します。\npy4st.set_miss(s_miss, n = 2)\n#> UserWarning: Already contained 2(>= n) missing value(s) in `x`, \n#> no additional missing values were added.\n#> 0 1.0\n#> 1 NaN\n#> 2 3.0\n#> 3 NaN\n#> 4 5.0\n#> dtype: float64\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込\n\npenguins['island'] = py4st.set_miss(\n penguins['island'], \n n = 100, method='first'\n )\npy4st.plot_miss_var(penguins, values = 'missing_count')\n\n\n\nset_miss.png", + "crumbs": [ + "eda_tools", + "17  `py4stats.set_miss()`" + ] + }, + { + "objectID": "man/scale_wmean.html", + "href": "man/scale_wmean.html", + "title": "18  数値変換・正規化ユーティリティ: py4stats.weighted_mean(), py4stats.scale(), py4stats.min_max()", + "section": "", + "text": "18.1 概要\n本モジュールは、探索的データ解析(EDA)で頻繁に用いられる加重平均の計算および 数値データの正規化・標準化を行う関数群を提供します。\n内部では narwhals を利用することで、pandas・polars など複数のデータフレーム/シリーズ実装に対して共通の API を提供しています。\nweighted_mean(): 数値系列 x と対応する重み w を用いて、加重平均を計算します。欠損値の扱いを制御するためのオプションを備えています。\nscale(): 数値データを Z スコア標準化します。系列データを主な対象としますが、pandas.DataFrame に対しても専用実装により列単位での標準化をサポートしています。\nmin_max(): 数値データを Min-Max Normarization により \\([0, 1]\\) の範囲に変換します。scale() と同様に、Series を主対象としつつ pandas.DataFrame にも対応しています。", + "crumbs": [ + "eda_tools", + "18  数値変換・正規化ユーティリティ: `py4stats.weighted_mean()`, `py4stats.scale()`, `py4stats.min_max()`" + ] + }, + { + "objectID": "man/scale_wmean.html#概要", + "href": "man/scale_wmean.html#概要", + "title": "18  数値変換・正規化ユーティリティ: py4stats.weighted_mean(), py4stats.scale(), py4stats.min_max()", + "section": "", + "text": "weighted_mean(\n x: IntoSeriesT, \n w: IntoSeriesT, \n dropna:bool = False\n ) -> float:\n\nscale(\n x: Union[IntoSeriesT, pd.DataFrame], \n ddof: int = 1, to_native: bool = True\n ) -> IntoSeriesT:\n\nmin_max(\n x: Union[IntoSeriesT, pd.DataFrame], \n to_native: bool = True\n ) -> IntoSeriesT:", + "crumbs": [ + "eda_tools", + "18  数値変換・正規化ユーティリティ: `py4stats.weighted_mean()`, `py4stats.scale()`, `py4stats.min_max()`" + ] + }, + { + "objectID": "man/scale_wmean.html#引数-argument", + "href": "man/scale_wmean.html#引数-argument", + "title": "18  数値変換・正規化ユーティリティ: py4stats.weighted_mean(), py4stats.scale(), py4stats.min_max()", + "section": "18.2 引数 Argument", + "text": "18.2 引数 Argument\n\nx:IntoSeriesT or pd.DataFrame(必須)\n\nnarwhals が受け入れ可能な Series 互換オブジェクト(例:pandas.Series、polars.Series)を指定できます。scale()関数と min_max()関数のみ pandas.DataFrame を指定することができ、この場合、各列ごとに変換が適用されます。\n\nw:IntoSeriesT(必須) x に対応する重みを表す数値系列。x と同じ長さである必要があります。narwhals が受け入れ可能な Series 互換オブジェクト(例:pandas.Series、polars.Series)を指定できます。\nddof(int, optional)scale(), min_max() のみ 標準偏差の計算に用いる自由度調整量(delta degrees of freedom)。デフォルトは 1 です。\ndropna(bool, optional)scale(), min_max() のみ True の場合、x または w のいずれかが欠損値(NaN)である観測を計算前に除外します。デフォルトは False です。\nto_native(bool, optional)scale(), min_max() のみ True の場合、入力と同じ型の Series(e.g. pandas / polars / pyarrow)を返します。 False の場合、Series を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", + "crumbs": [ + "eda_tools", + "18  数値変換・正規化ユーティリティ: `py4stats.weighted_mean()`, `py4stats.scale()`, `py4stats.min_max()`" + ] + }, + { + "objectID": "man/scale_wmean.html#返り値-value", + "href": "man/scale_wmean.html#返り値-value", + "title": "18  数値変換・正規化ユーティリティ: py4stats.weighted_mean(), py4stats.scale(), py4stats.min_max()", + "section": "18.3 返り値 Value", + "text": "18.3 返り値 Value\n\nweighted_mean\n\nfloat\n加重平均\n\nscale\n\nIntoSeriesT\n平均 0、標準偏差 1 に標準化された値を返します。\n\nmin_max\n\nIntoSeriesT\n最小値が 0、最大値が 1 となるよう正規化された値を返します。", + "crumbs": [ + "eda_tools", + "18  数値変換・正規化ユーティリティ: `py4stats.weighted_mean()`, `py4stats.scale()`, `py4stats.min_max()`" + ] + }, + { + "objectID": "man/scale_wmean.html#使用例-example", + "href": "man/scale_wmean.html#使用例-example", + "title": "18  数値変換・正規化ユーティリティ: py4stats.weighted_mean(), py4stats.scale(), py4stats.min_max()", + "section": "18.4 使用例 Example", + "text": "18.4 使用例 Example\nimport py4stats as py4st\nimport pandas as pd\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込\n\nx1 = penguins.groupby('species')['bill_length_mm'].mean()\nw = penguins.groupby('species')['bill_length_mm'].count()\n\nprint(\n f\"{py4st.weighted_mean(x1, w) :.2f}, \"\n f\"{penguins['bill_length_mm'].mean() :.2f}\"\n)\n#> 43.92, 43.92\n\nx2 = penguins['bill_length_mm']\nz1 = py4st.scale(x2)\nprint(f\"{z1.mean():.2f}, {z1.std():.2f}\")\n#> 0.00, 1.00\n\nz2 = py4st.min_max(x2)\nprint(f\"{z2.min():.2f}, {z2.max():.2f}\")\n#> 0.00, 1.00", + "crumbs": [ + "eda_tools", + "18  数値変換・正規化ユーティリティ: `py4stats.weighted_mean()`, `py4stats.scale()`, `py4stats.min_max()`" + ] + }, + { + "objectID": "man/predicate_str.html", + "href": "man/predicate_str.html", + "title": "19  文字列のフォーマットについての論理関数 py4stats.is_number(), py4stats.is_ymd(), py4stats.is_ymd_like()", + "section": "", + "text": "19.1 概要\nSeries の要素が、特定のフォーマットにそった文字列かどうかを判定する関数です。", + "crumbs": [ + "eda_tools", + "19  文字列のフォーマットについての論理関数
`py4stats.is_number()`, `py4stats.is_ymd()`, `py4stats.is_ymd_like()`
" + ] + }, + { + "objectID": "man/predicate_str.html#概要", + "href": "man/predicate_str.html#概要", + "title": "19  文字列のフォーマットについての論理関数 py4stats.is_number(), py4stats.is_ymd(), py4stats.is_ymd_like()", + "section": "", + "text": "is_number(\n data:IntoSeriesT, \n na_default:bool = True, \n to_native: bool = True\n )\n\nis_ymd(\n data:IntoSeriesT, \n na_default:bool = True, \n to_native: bool = True\n )\n\nis_ymd_like(\n data:IntoSeriesT, \n na_default:bool = True, \n to_native: bool = True\n )\n\npy4stats.is_number():与えられた文字列が数字かどうかを判定します。\npy4stats.is_ymd():与えられた文字列が yyyy-mm-dd フォーマットにそった値かどうかを判定します。\npy4stats.is_ymd_like():与えられた文字列が’2024年3月3日’ のような yyyy-mm-dd に近いフォーマットの値かどうかを判定します。", + "crumbs": [ + "eda_tools", + "19  文字列のフォーマットについての論理関数
`py4stats.is_number()`, `py4stats.is_ymd()`, `py4stats.is_ymd_like()`
" + ] + }, + { + "objectID": "man/predicate_str.html#引数-argument", + "href": "man/predicate_str.html#引数-argument", + "title": "19  文字列のフォーマットについての論理関数 py4stats.is_number(), py4stats.is_ymd(), py4stats.is_ymd_like()", + "section": "19.2 引数 Argument", + "text": "19.2 引数 Argument\n\ndata:IntoSeriesT(必須)\n入力データ。narwhals が受け入れ可能な Series 互換オブジェクト (例:pandas.Series、polars.DataFrame、pyarrow.Table)を指定できます。\nna_default:bool  NA値に対して関数が返す値。na_default = True (初期設定)であれば None や NaN には True を返し、na_default = False であれば False が返します。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", + "crumbs": [ + "eda_tools", + "19  文字列のフォーマットについての論理関数
`py4stats.is_number()`, `py4stats.is_ymd()`, `py4stats.is_ymd_like()`
" + ] + }, + { + "objectID": "man/predicate_str.html#使用例", + "href": "man/predicate_str.html#使用例", + "title": "19  文字列のフォーマットについての論理関数 py4stats.is_number(), py4stats.is_ymd(), py4stats.is_ymd_like()", + "section": "19.3 使用例", + "text": "19.3 使用例\nimport py4stats as py4st\nimport pandas as pd\nimport numpy as np\n\ns = pd.Series([\n '123', \"0.12\", \"1e+07\", '-31', '2個', '1A',\n \"2024-03-03\", \"2024年3月3日\", \"24年3月3日\", '令和6年3月3日',\n '0120-123-456', \"apple\", \"不明\", None, np.nan\n ])\n\nprint(s[py4st.is_number(s)])\n#> 0 123\n#> 1 0.12\n#> 2 1e+07\n#> 3 -31\n#> 13 None\n#> 14 NaN\n#> dtype: object\n\nprint(s[py4st.is_ymd(s)])\n#> 6 2024-03-03\n#> 13 None\n#> 14 NaN\n#> dtype: object\n\nprint(s[py4st.is_ymd_like(s)])\n#> 6 2024-03-03\n#> 7 2024年3月3日\n#> 8 24年3月3日\n#> 9 令和6年3月3日\n#> 13 None\n#> 14 NaN\n#> dtype: object\n 実践的な使用例として「厚生労働省 4.食中毒統計資料」のうち、2020年の食中毒事件一覧を考えます。東京都のデータを取り出て'摂食者数'の列を見ると、数字が並んでいるものの dtype は object となっており、数字ではない値が含まれていることが疑われます。\n# 厚生労働省:食中毒統計資料より\ndata = pd.read_excel('https://www.mhlw.go.jp/content/R2itiran.xlsx', header = 1)\\\n .query('都道府県名等.str.contains(\"東京\")')\n\nprint(data['摂食者数'])\n#> 280 41\n#> 281 86\n#> 282 3\n#> 283 10\n#> 284 3\n#> ..\n#> 381 2\n#> 382 2\n#> 383 4\n#> 384 6\n#> 385 4\n#> Name: 摂食者数, Length: 106, dtype: object\neda.is_number() を使うと数字以外にどのような値が含まれているかを確認できるため、これをもとに「不明」となっている部分は NaN に置き換えるなどの対処法が考えられます。\nprint(data.loc[~py4st.is_number(data['摂食者数']), '摂食者数'])\n#> 285 不明\n#> 315 不明\n#> 374 不明\n#> 375 不明\n#> 377 不明\n#> 378 不明\n#> 379 不明\n#> 380 不明\n#> Name: 摂食者数, dtype: object\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "19  文字列のフォーマットについての論理関数
`py4stats.is_number()`, `py4stats.is_ymd()`, `py4stats.is_ymd_like()`
" + ] + }, + { + "objectID": "man/is_dummy.html", + "href": "man/is_dummy.html", + "title": "20  ダミー変数の判定: py4stats.is_dummy()", + "section": "", + "text": "20.1 概要\nリストや Series の要素が、指定されたダミーコードのみで構成されたダミー変数かどうかを判定します。", + "crumbs": [ + "eda_tools", + "20  ダミー変数の判定: `py4stats.is_dummy()`" + ] + }, + { + "objectID": "man/is_dummy.html#概要", + "href": "man/is_dummy.html#概要", + "title": "20  ダミー変数の判定: py4stats.is_dummy()", + "section": "", + "text": "is_dummy(\n data: Union[IntoFrameT, IntoSeriesT],\n cording: Sequence[Any] = (0, 1),\n dropna: bool = True,\n to_pd_series: bool = False,\n **kwargs\n )", + "crumbs": [ + "eda_tools", + "20  ダミー変数の判定: `py4stats.is_dummy()`" + ] + }, + { + "objectID": "man/is_dummy.html#引数-argument", + "href": "man/is_dummy.html#引数-argument", + "title": "20  ダミー変数の判定: py4stats.is_dummy()", + "section": "20.2 引数 Argument", + "text": "20.2 引数 Argument\n\ndata: list, IntoFrameT or IntoSeriesT 入力データ。list あるいは、narwhals が受け入れ可能な DataFrame もしくは Series 互換オブジェクト\ncording: list ダミーコードとして許容される値の集合。入力データに含まれる値の集合が、この集合と完全に一致する場合にダミー変数であると判定されます。デフォルトは (0, 1) です。\ndropna:bool  欠測値(NaN)をコーディングの判定から除外するかどうかを表すブール値。初期設定は True です。\nto_pd_series: bool data が DataFrame 場合の戻り値の形式を制御します。\n\nTrue の場合:列名をインデックスにもつ pandas.Series を返します\nFalse の場合:各列の判定結果を要素とする list を返します\n\n**kwargs: 将来の拡張のために予約されたキーワード引数です。", + "crumbs": [ + "eda_tools", + "20  ダミー変数の判定: `py4stats.is_dummy()`" + ] + }, + { + "objectID": "man/is_dummy.html#返り値-value", + "href": "man/is_dummy.html#返り値-value", + "title": "20  ダミー変数の判定: py4stats.is_dummy()", + "section": "20.3 返り値 Value", + "text": "20.3 返り値 Value\n\ndata が Series-like の場合\n\n-指定されたダミーコードのみで構成されていれば True、それ以外の場合は False\n\ndata が DataFrame-like の場合 \n\nto_pd_Series = False のとき:各列ごとの判定結果を要素とする list[bool]\nto_pd_Series = True のとき:列名をインデックスにもつ pd.Series", + "crumbs": [ + "eda_tools", + "20  ダミー変数の判定: `py4stats.is_dummy()`" + ] + }, + { + "objectID": "man/is_dummy.html#使用例-examples", + "href": "man/is_dummy.html#使用例-examples", + "title": "20  ダミー変数の判定: py4stats.is_dummy()", + "section": "20.4 使用例 Examples", + "text": "20.4 使用例 Examples\nimport py4stats as py4st\nimport pandas as pd\nfrom palmerpenguins import load_penguins\n\npenguins = load_penguins() # サンプルデータの読み込み\n\n# ダミー変数の作成\npenguins2 = pd.get_dummies(\n penguins.loc[:, 'species':'bill_length_mm'], \n columns = ['species']\n )\npenguins2['Intercept'] = 1 # 定数列の作成\npenguins2['female'] = penguins['sex'] == 'female' # bool 型の変数を作成\n\nprint(py4st.is_dummy(penguins2['species_Adelie']))\n#> True\nなお、初期設定では bool 型の変数についても True が出力されます。\nprint(py4st.is_dummy(penguins2))\n#> island False\n#> bill_length_mm False\n#> species_Adelie True\n#> species_Chinstrap True\n#> species_Gentoo True\n#> Intercept False\n#> female True\n#> Name: 0, dtype: bool\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "20  ダミー変数の判定: `py4stats.is_dummy()`" + ] + }, + { + "objectID": "man/varidate.html", + "href": "man/varidate.html", + "title": "21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate()", + "section": "", + "text": "21.1 概要\nR言語の varidateパッケージの check_that() 関数などをオマージュした、ごく簡易なデータ検証関数です。", + "crumbs": [ + "eda_tools", + "21  簡易なルールベースのデータ検証ツール `py4stats.check_that()` `py4stats.check_viorate()`" + ] + }, + { + "objectID": "man/varidate.html#概要", + "href": "man/varidate.html#概要", + "title": "21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate()", + "section": "", + "text": "check_that(\n data: IntoFrameT,\n rule_dict: Union[Mapping[str, str], pd.Series],\n **kwargs: Any,\n)\n\ncheck_viorate(data, rule_dict, **kwargs)", + "crumbs": [ + "eda_tools", + "21  簡易なルールベースのデータ検証ツール `py4stats.check_that()` `py4stats.check_viorate()`" + ] + }, + { + "objectID": "man/varidate.html#引数-argument", + "href": "man/varidate.html#引数-argument", + "title": "21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate()", + "section": "21.2 引数 Argument", + "text": "21.2 引数 Argument\n\ndata:IntoFrameT(必須)  ルールに基づくデータ検証を行うデータセット。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\nrule_dictdict or pd.Series of str(必須)  pandas.eval() メソッドで実行した結果が論理値となるような expression の文字列を値とする辞書オブジェクト。詳細は使用例も参照してください。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。\n**kwargs  pandas.eval() に渡す追加の引数。", + "crumbs": [ + "eda_tools", + "21  簡易なルールベースのデータ検証ツール `py4stats.check_that()` `py4stats.check_viorate()`" + ] + }, + { + "objectID": "man/varidate.html#返り値-value", + "href": "man/varidate.html#返り値-value", + "title": "21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate()", + "section": "21.3 返り値 Value", + "text": "21.3 返り値 Value\n\n21.3.1 check_that(): データセット単位の検証結果の集計\n次の列を含む、引数 data に代入されたデータフレームと同じ型の DataFrame が出力されます。\n\nrule: 検証ルールの名前\nitem: ルールが検証対象とした項目の数。レコード(行)を検証単位とするルールの場合、item は data の行数(rows)になります。一方、データセット全体を検証単位とするルール(例:集計量に基づく条件)の場合、item は 1 になります。\npasses: 検証の結果、ルールを満たすと判定されたレコードの数。\nfails: 検証の結果、ルールを満たさないと判定されたレコードの数。\ncountna: 欠測値によって、ルールの検証が行えなかったレコードの数。行(レコード)を検証単位とするルールでは、ルールの評価に使用された変数のいずれかに欠測値が含まれる場合、そのレコードは検証不能として NA 扱いされます。countna は、このように検証を正しく実施できなかったレコードの件数を表します。\nexpression: 検証ルールを表す文字列(expression)。\n\n\n\n21.3.2 check_viorate(): レコード単位の検証結果\nルール名を列名として、レコード毎の違反を示す論理変数をもつ DataFrame が出力されます。\n各列の要素の True は検証のルールへの違反、もしくは欠測値によって評価に失敗したことを表します。rule_dict で設定された各ルールに対応する列の他に、次の列が追加で出力されます。\n\nany: 行内のいずれかのルールが違反または評価に失敗した場合に True となるブール値。\nall: 行内の全ルールが違反または評価に失敗した場合に True となるブール値。", + "crumbs": [ + "eda_tools", + "21  簡易なルールベースのデータ検証ツール `py4stats.check_that()` `py4stats.check_viorate()`" + ] + }, + { + "objectID": "man/varidate.html#使用例-examples", + "href": "man/varidate.html#使用例-examples", + "title": "21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate()", + "section": "21.4 使用例 Examples", + "text": "21.4 使用例 Examples\n ここでは py4st.check_that() 関数を使って Loo, Jonge(2022, p. 136)の結果を再現します。まずはR言語の validate パッケージに付属する retailers データを利用します。retailers は60件の小売業者の経営状況についてのデータで、従業員数、売上高とその他の収入、人件費、総費用、および利益がユーロ導入前の通貨単位である1000ギルダー単位で収録されています。\nimport py4stats as py4st\nimport pandas as pd\n\nURL = 'https://raw.githubusercontent.com/data-cleaning/validate/master/pkg/data/retailers.csv'\nretailers = pd.read_csv(URL, sep = ';')\nretailers.columns = retailers.columns.to_series().str.replace('.', '_', regex = False)\n py4st.check_that() 関数は、第1引数にデータセットを、第2引数に検証ルールの辞書オブジェクトを代入して使用します。\n まずは、検証ルールの辞書オブジェクトを定義します。辞書オブジェクトの値には pandas.eval() メソッドで実行可能な expression の文字列を指定し、key に検証ルールの名前を指定します。検証ルールの名前は任意の値で構いませんが、 expression は結果が論理値となるものでなければなりません。\nrule_dict = {\n 'to':'turnover > 0', # 売上高は厳密に正である\n 'sc':'staff_costs / staff < 50', # 従業員1人当たりの人件費は50,000ギルダー未満である\n 'cd1':'staff_costs > 0 | ~(staff > 0)', # 従業員がいる場合、人件費は厳密に正である\n 'cd2':py4st.implies_exper('staff > 0', 'staff_costs > 0'), # cd1 の別表現\n 'bs':'turnover + other_rev == total_rev', # 売上高とその他の収入の合計は総収入に等しい\n 'mn':'profit.mean() > 0' # セクター全体の平均的な利益はゼロよりも大きい\n }\npd.Series(rule_dict)\n#> to turnover > 0\n#> sc staff_costs / staff < 50\n#> cd1 staff_costs > 0 | ~(staff > 0)\n#> cd2 staff_costs > 0 | ~(staff > 0)\n#> bs turnover + other_rev == total_rev\n#> mn profit.mean() > 0\n#> dtype: object\nretailers と rule_dict を py4st.check_that() に代入すると、rule_dict に指定したルールに基づいた検証が実行されます。item 列はその検証ルールで生成された論理値の個数(通常はデータセットの列数と一致します)を表し、passes 列は検証結果が True となったレコードの数を、fails は False となったレコードの数を表します。また、coutna はルールの検証に使用した変数(データセットの列)のいずれかが欠測値であったレコードの数です。\nprint(py4st.check_that(retailers, rule_dict))\n#> rule item passes fails coutna expression\n#> 0 to 60 56 0 4 turnover > 0\n#> 1 sc 60 39 5 16 staff_costs / staff < 50\n#> 2 cd1 60 44 0 16 staff_costs > 0 | ~(staff > 0)\n#> 3 cd2 60 44 0 16 staff_costs > 0 | ~(staff > 0)\n#> 4 bs 60 19 4 37 turnover + other_rev == total_rev\n#> 5 mn 1 1 0 0 profit.mean() > 0\n前述の通り、py4st.check_that() 関数ではルール検証を pandas.eval() メソッドで実行しているため、検証ルールに自作関数や外部のモジュールからインポート関数を使うには、関数名の前に @ をつけて @func(…) と記述し、また **kwargs 引数に local_dict = locals() と指定してください。\n 次のコードで定義している is_complete() 関数は、代入された pd.Series が全て欠測値ではなく、指定された変数に関して完全ケースであることを判定する関数です。turnover.notna() & total_rev.notna() & other_rev.notna() と記述しても同じ結果が得られますが、自作関数を使うことで若干簡潔に記述できます。\nfrom pandas.api.types import is_numeric_dtype\ndef is_complete(*arg): return pd.concat(arg, axis = 'columns').notna().all(axis = 'columns')\n\npd.set_option('display.expand_frame_repr', False)\n\nrule_dict2 = {\n 'to_num':'@is_numeric_dtype(turnover)', # 売上高は数値変数である\n 'rev_complete':'@is_complete(turnover, total_rev, other_rev)', # 売上高と収入が全て観測されている\n }\n\nprint(py4st.check_that(\n retailers, rule_dict2, local_dict = locals()\n ))\n#> rule item passes fails coutna expression\n#> 0 to_num 1 1 0 0 @is_numeric_dtype(turnover)\n#> 1 rev_complete 60 23 0 37 @is_complete(turnover, total_rev, other_rev)\npy4st.check_viorate() の使い方も py4st.check_that() と同様ですが、py4st.check_that() がデータセット全体での検証結果を出力するのに対し、py4st.check_viorate() ではレコード別の検証結果を表示します。py4st.check_viorate() から出力されるデータフレームでは、各列が検証ルールに、各行が元データの観測値に対応し、当該ルールが満たされていない場合、True と表示されます。また、any 列は複数あるルールのいずれか1つでも満たされていないことを、all 列は全てのルールが満たされていないことを示します。\nrule_dict3 = {\n 'to':'turnover > 0', # 売上高は厳密に正である\n 'sc':'staff_costs / staff < 50', # 従業員1人当たりの人件費は50,000ギルダー未満である\n 'rev_complete':'@is_complete(turnover, total_rev, other_rev)',# 売上高と収入が全て観測されている\n }\n \ndf_viorate = py4st.check_viorate(retailers, rule_dict3)\nprint(df_viorate.head())\n#> to sc rev_complete any all\n#> 0 True True True True True\n#> 1 False False True True False\n#> 2 False True False True False\n#> 3 False True False True False\n#> 4 True True True True True\ndf_viorate データフレームの各列は論理値であるため、次のように検証ルールを満たさない観測値を抽出することができます。\nprint(retailers.loc[df_viorate['to'], 'size':'turnover'])\n#> size incl_prob staff turnover\n#> 0 sc0 0.02 75.0 NaN\n#> 4 sc3 0.14 NaN NaN\n#> 6 sc3 0.14 5.0 NaN", + "crumbs": [ + "eda_tools", + "21  簡易なルールベースのデータ検証ツール `py4stats.check_that()` `py4stats.check_viorate()`" + ] + }, + { + "objectID": "man/varidate.html#notes", + "href": "man/varidate.html#notes", + "title": "21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate()", + "section": "21.5 Notes", + "text": "21.5 Notes\n本関数の内部実装は、 pd.DataFrame.eval() メソッドに依存しているため、実行時間の面で必ずしも最適化されていません。", + "crumbs": [ + "eda_tools", + "21  簡易なルールベースのデータ検証ツール `py4stats.check_that()` `py4stats.check_viorate()`" + ] + }, + { + "objectID": "man/varidate.html#参考文献", + "href": "man/varidate.html#参考文献", + "title": "21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate()", + "section": "21.6 参考文献", + "text": "21.6 参考文献\n\nLoo, Mark van der, and Edwin de Jonge. (2022). 『統計的データクリーニングの理論と実践: Rによるデータ編集/欠測補完システム』. 共立出版. 地道 正行, 髙橋 雅夫, 藤野 友和, 安川 武彦〔訳〕\n\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "21  簡易なルールベースのデータ検証ツール `py4stats.check_that()` `py4stats.check_viorate()`" + ] + }, + { + "objectID": "man/compare_ols.html", + "href": "man/compare_ols.html", + "title": "22  回帰分析の比較:py4stats.compare_ols()", + "section": "", + "text": "22.1 概要\nsm.ols() や smf.glm() で作成された回帰分析の結果から、推定結果を縦方向に並べて比較する表を作成します。表のフォーマットについてはR言語の texreg::screenreg()やmodelsummary::modelsummary()を参考にしています。", + "crumbs": [ + "regression_tools", + "22  回帰分析の比較:`py4stats.compare_ols()`" + ] + }, + { + "objectID": "man/compare_ols.html#概要", + "href": "man/compare_ols.html#概要", + "title": "22  回帰分析の比較:py4stats.compare_ols()", + "section": "", + "text": "compare_ols(\n list_models: Sequence[RegressionResultsWrapper],\n model_name: Optional[Sequence[str]] = None,\n subset: Optional[Sequence[str]] = None,\n stats: Literal[\"std_err\", \"statistics\", \"p_value\", \"conf_int\"] = \"std_err\",\n add_stars: bool = True,\n stars: Optional[Mapping[str, float]] = None,\n stats_glance: Optional[Sequence[str]] = (\"rsquared_adj\", \"nobs\", \"df\"),\n digits: int = 4,\n table_style: Literal[\"two_line\", \"one_line\"] = \"two_line\",\n line_break: str = \"\\n\",\n **kwargs: Any\n)", + "crumbs": [ + "regression_tools", + "22  回帰分析の比較:`py4stats.compare_ols()`" + ] + }, + { + "objectID": "man/compare_ols.html#引数-argument", + "href": "man/compare_ols.html#引数-argument", + "title": "22  回帰分析の比較:py4stats.compare_ols()", + "section": "22.2 引数 Argument", + "text": "22.2 引数 Argument\n\nlist_models:Sequence[RegressionResultsWrapper] 推定結果を表示する分析結果のリスト(必須)。sm.ols() や smf.ols() で作成された回帰分析の結果を list_models = [fit1, fit2] のようにリストとして指定してください。\nmodel_name:list of str 表頭に表示するモデルの名前。['モデル1', 'モデル2'] のように文字列のリストを指定してください。初期設定では、自動的に model 1, model 2, model 3 … と連番が割り当てられます。\nsubset:list of str 表示する回帰係数のリスト。指定しない場合(初期設定)、モデルに含まれる全ての回帰係数が表示されます。内部ではpandas.DataFrame.locメソッドを用いて処理を行っているため、['変数1', '変数2', ...] のような文字列のリスト、[True, False, True, ...] のようなブール値のリストに対応しています。文字列のリストが指定された場合、リストの並び順に合わせて回帰係数が表示されます。\nstats:str 表中の丸括弧 ( ) 内に表示する統計値の設定。次の値が指定できます。\n\n'std_err' 標準誤差(初期設定)\n'p_value' p-値\n'statistics' t統計量\n\nadd_stars:bool 回帰係数の統計的有意性を表すアスタリスク * を表示するかどうかを表すブール値。add_stars = True(初期-設定)なら表示、add_stars = Falseなら非表示となります。table_style に 'two_line' を指定した場合はアスタリスクは回帰係数の直後に表示され、'one_line' を指定した場合は stats で指定した統計値の後に表示されます。アスタリスクはp-値の値に応じて次のように表示されます。\nstars:dict(p_stars() のみ)  有意性を示す記号を key に、表示を切り替える閾値を値(value)にもつ辞書オブジェクト。初期設定の stars = None の場合、下記の方式で表示されます。\n\np ≤ 0.1 *\np ≤ 0.05 **\np ≤ 0.01 ***\np > 0.1 表示なし 詳細はbuilding_block.style_pvalue() を参照してください。\n\nstats_glance:list of str\n表の下部に追加する当てはまりの尺度の種類を表す文字列のリスト。リストの値には次の値を指定できます。なお、None もしくは空のリスト [ ] が指定された場合には非表示となります。\n\n'rsquared':決定係数\n'rsquared_adj':自由度調整済み決定係数\n'nobs':サインプルサイズ\n'df':モデルの自由度(説明変数の数)\n'sigma':回帰式の標準誤差\n'F_values':全ての回帰係数がゼロであることを帰無仮説とするF検定の統計量\n'p_values':F検定のP-値\n'AIC':赤池情報量基準\n'BIC':ベイズ情報量基準\n\ndigits: int 回帰係数と統計値について表示する小数点以下の桁数。初期設定は4です。\ntable_style: str 表の書式を表す文字列。次の値から選択できます(部分一致可)。\n\n'two_line'回帰係数と統計値を2行に分ける(初期設定)\n'one_line'回帰係数と統計値を1行で表示する\n\nline_break: str table_style = 'two_line' とした場合に使用される改行記号。table_style = 'one_line' とした場合、この引数は無視されます。", + "crumbs": [ + "regression_tools", + "22  回帰分析の比較:`py4stats.compare_ols()`" + ] + }, + { + "objectID": "man/compare_ols.html#使用例-examples", + "href": "man/compare_ols.html#使用例-examples", + "title": "22  回帰分析の比較:py4stats.compare_ols()", + "section": "22.3 使用例 Examples", + "text": "22.3 使用例 Examples\nimport py4stats as py4st\nimport statsmodels.formula.api as smf\n\nimport pandas as pd\nimport numpy as np\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込み\n\n# 回帰分析の実行\nfit1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()\nfit2 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species', data = penguins).fit()\nfit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()\n\ncompare_tab1 = py4st.compare_ols(list_models = [fit1, fit2, fit3]) # 表の作成\ncompare_tab1\n\n\n\n\n\n\n\n\n\nterm\nmodel 1\nmodel 2\nmodel 3\n\n\n\n\nIntercept\n153.7397\n-1,742.7202 ***\n843.9812 **\n\n\n\n(268.9012)\n(313.7697)\n(403.5956)\n\n\nspecies[T.Chinstrap]\n-885.8121 ***\n-539.6864 ***\n-245.1516 ***\n\n\n\n(88.2502)\n(86.9425)\n(84.5952)\n\n\nspecies[T.Gentoo]\n578.6292 ***\n1,492.8283 ***\n1,443.3525 ***\n\n\n\n(75.3623)\n(118.4442)\n(107.7844)\n\n\nbill_length_mm\n91.4358 ***\n55.6461 ***\n26.5366 ***\n\n\n\n(6.8871)\n(7.2326)\n(7.2436)\n\n\nbill_depth_mm\n\n179.0434 ***\n87.9328 ***\n\n\n\n\n(19.0997)\n(20.2192)\n\n\nsex[T.male]\n\n\n437.2007 ***\n\n\n\n\n\n(49.1098)\n\n\nrsquared_adj\n0.7810\n0.8258\n0.8613\n\n\nnobs\n342\n342\n333\n\n\ndf\n3\n4\n5\n\n\n\npy4st.compare_ols() の実行結果は Pandas の DataFrame として出力されるため、.xlsx. ファイルなどに変換することができます。また、用途に応じて表の体裁を調整できるようにしています。\ncompare_tab2 = py4st.compare_ols(\n list_models = [fit1, fit2, fit3],\n model_name = ['基本モデル', '嘴の高さ追加', '性別追加'], # モデル名を変更\n stats = 'p_value', # () 内の値をP-値に変更する\n add_stars = False, # 有意性のアスタリスクなし\n table_style = 'one_line', # 表スタイルを1行表示に設定 'one' でも可能\n digits = 3 # 小数点以下の桁数を3に設定\n )\ncompare_tab2\n\n\n\n\n\n\n\n\n\nterm\n基本モデル\n嘴の高さ追加\n性別追加\n\n\n\n\nIntercept\n153.740(0.568)\n-1,742.720(0.000)\n843.981(0.037)\n\n\nspecies[T.Chinstrap]\n-885.812(0.000)\n-539.686(0.000)\n-245.152(0.004)\n\n\nspecies[T.Gentoo]\n578.629(0.000)\n1,492.828(0.000)\n1,443.353(0.000)\n\n\nbill_length_mm\n91.436(0.000)\n55.646(0.000)\n26.537(0.000)\n\n\nbill_depth_mm\n\n179.043(0.000)\n87.933(0.000)\n\n\nsex[T.male]\n\n\n437.201(0.000)\n\n\nrsquared_adj\n0.781\n0.826\n0.861\n\n\nnobs\n342\n342\n333\n\n\ndf\n3\n4\n5\n\n\n\ntable_style = 'two_line' のときに使用される改行記号は line_break で指定できます。great_tables モジュールの GT() 関数と併用する場合など、html 形式で出力する場合には line_break = '<br>' を指定します。\nfrom great_tables import GT, md, html\n\ncompare_tab3 = py4st.compare_ols(\n list_models = [fit1, fit2, fit3],\n model_name = ['基本モデル', '嘴の高さ追加', '性別追加'], # モデル名を変更\n line_break = '<br>' # 改行文字の変更\n )\n\nGT(compare_tab3.reset_index())\\\n .tab_header(title = 'Palmer penguin データを使った回帰分析の結果')\\\n .tab_source_note(\n source_note= \"Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’\"\n )\\\n .tab_source_note(source_note = '( ) の値は標準誤差')\n\n\n22.3.0.1 有意性の表示規則の変更\npy4stats の v0.2.0 以降は、stars 引数で有意性の表示規則を変更できるようになりました。\nstars_dict = {'★★★':0.001, '★★':0.01, '★': 0.05, '.':0.1}\n\nreg.compare_ols(\n list_models = [fit3],\n model_name = ['model 3'],\n stars = stars_dict\n )\n\n\n\nterm\nmodel 3\n\n\n\n\nIntercept\n843.9812 ★\n\n\n\n(403.5956)\n\n\nspecies[T.Chinstrap]\n-245.1516 ★★\n\n\n\n(84.5952)\n\n\nspecies[T.Gentoo]\n1,443.3525 ★★★\n\n\n\n(107.7844)\n\n\nsex[T.male]\n437.2007 ★★★\n\n\n\n(49.1098)\n\n\nbill_length_mm\n26.5366 ★★★\n\n\n\n(7.2436)\n\n\nbill_depth_mm\n87.9328 ★★★\n\n\n\n(20.2192)\n\n\nrsquared_adj\n0.8613\n\n\nnobs\n333\n\n\ndf\n5\n\n\n\n\n\n22.3.0.2 回帰係数の sbusetting\n引数 subset を使って表示したい回帰係数を指定することで、一部の回帰係数を省略して表記することもできます。\n# 説明変数に island を追加したモデルを推定\nfit4 = smf.ols(\n 'body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex + island',\n data = penguins).fit()\n\nvar_list = [\n 'species[T.Chinstrap]', 'species[T.Gentoo]',\n 'bill_length_mm', 'bill_depth_mm', 'sex[T.male]'\n ]\n\n# 全ての回帰係数を表示すると表が長すぎるので、一部を省略します\ncompare_tab4 = py4st.compare_ols(\n list_models = [fit2, fit3, fit4],\n subset = var_list\n )\n\ncompare_tab4.loc['島ダミー', :] = ['No', 'No', 'Yes']\n\ncompare_tab4\n\n\n\n\n\n\n\n\n\nterm\nmodel 1\nmodel 2\nmodel 3\n\n\n\n\nspecies[T.Chinstrap]\n-539.6864 ***\n-245.1516 ***\n-255.2732 ***\n\n\n\n(86.9425)\n(84.5952)\n(92.4796)\n\n\nspecies[T.Gentoo]\n1,492.8283 ***\n1,443.3525 ***\n1,446.1574 ***\n\n\n\n(118.4442)\n(107.7844)\n(114.1676)\n\n\nbill_length_mm\n55.6461 ***\n26.5366 ***\n26.6643 ***\n\n\n\n(7.2326)\n(7.2436)\n(7.2792)\n\n\nbill_depth_mm\n179.0434 ***\n87.9328 ***\n88.3284 ***\n\n\n\n(19.0997)\n(20.2192)\n(20.3267)\n\n\nsex[T.male]\n\n437.2007 ***\n436.0334 ***\n\n\n\n\n(49.1098)\n(49.4227)\n\n\nrsquared_adj\n0.8258\n0.8613\n0.8605\n\n\nnobs\n342\n333\n333\n\n\ndf\n4\n5\n7\n\n\n島ダミー\nNo\nNo\nYes\n\n\n\npandas の pandas.DataFrame.query メソッドを使って、次のように説明変数を除外することもできます。\ncompare_tab4 = py4st.compare_ols(\n list_models = [fit2, fit3, fit4]\n )\n\ncompare_tab4 = compare_tab4\\\n .query('~term.str.contains(\"Intercept|island\")').copy()\n\ncompare_tab4.loc['島ダミー', :] = ['No', 'No', 'Yes']\n\ncompare_tab4 # 上記のコードと同じ結果", + "crumbs": [ + "regression_tools", + "22  回帰分析の比較:`py4stats.compare_ols()`" + ] + }, + { + "objectID": "man/compare_ols.html#補足", + "href": "man/compare_ols.html#補足", + "title": "22  回帰分析の比較:py4stats.compare_ols()", + "section": "22.4 補足", + "text": "22.4 補足\n  table_style = 'two_line' としたとき、初期設定ではの回帰係数とp-値の間に改行記号 '\\n'が挿入されます。そのため、print() 関数や display() 関数を使った出力では、改行記号 '\\n' がそのまま表示されます。この場合でも、pd.DataFrame.to_excel() や pd.DataFrame.to_markdown() を使って Excel ファイルや markdown の表に変換していただくと、改行として反映されます。", + "crumbs": [ + "regression_tools", + "22  回帰分析の比較:`py4stats.compare_ols()`" + ] + }, + { + "objectID": "man/compare_ols.html#参照-see-also", + "href": "man/compare_ols.html#参照-see-also", + "title": "22  回帰分析の比較:py4stats.compare_ols()", + "section": "22.5 参照 see also", + "text": "22.5 参照 see also\n 一般化線形モデルの限界効果を比較する場合は py4stats.compare_mfx()をご利用ください。\n\nReturn to Function reference.", + "crumbs": [ + "regression_tools", + "22  回帰分析の比較:`py4stats.compare_ols()`" + ] + }, + { + "objectID": "man/compare_mfx.html", + "href": "man/compare_mfx.html", + "title": "23  限界効果の比較:py4stats.compare_mfx()", + "section": "", + "text": "23.1 概要\nsm.glm()の推定結果を計量経済学の実証論文でよく用いられる、回帰分析の結果を縦方向に並べて比較する表を作成します。表のフォーマットについてはR言語の texreg::screenreg()やmodelsummary::modelsummary()を参考にしています。", + "crumbs": [ + "regression_tools", + "23  限界効果の比較:`py4stats.compare_mfx()`" + ] + }, + { + "objectID": "man/compare_mfx.html#概要", + "href": "man/compare_mfx.html#概要", + "title": "23  限界効果の比較:py4stats.compare_mfx()", + "section": "", + "text": "compare_mfx(\n list_models, \n model_name = None,\n subset = None,\n stats = 'std_err',\n add_stars = True,\n stats_glance = ['prsquared', 'nobs', 'df'],\n at = 'overall',\n method = 'dydx',\n dummy = False,\n digits = 4, \n table_style = 'two_line',\n line_break = '\\n',\n **kwargs\n)", + "crumbs": [ + "regression_tools", + "23  限界効果の比較:`py4stats.compare_mfx()`" + ] + }, + { + "objectID": "man/compare_mfx.html#引数-argument", + "href": "man/compare_mfx.html#引数-argument", + "title": "23  限界効果の比較:py4stats.compare_mfx()", + "section": "23.2 引数 Argument", + "text": "23.2 引数 Argument\n\nlist_models: 推定結果を表示する分析結果のリスト(必須)。sm.glm()で作成された一般化線形モデルの結果を list_models = [fit1, fit2] のようにリストとして指定してください。\nmodel_name:list of str 表頭に表示するモデルの名前。['モデル1', 'モデル2'] のように文字列のリストを指定してください。初期設定では、自動的に model 1, model 2, model 3 … と連番が割り当てられます。\nsubset:list of str 表示する回帰係数のリスト。指定しない場合(初期設定)、モデルに含まれる全ての回帰係数が表示されます。内部ではpandas.DataFrame.locメソッドを用いて処理を行っているため、['変数1', '変数2', ...] のような文字列のリスト、[True, False, True, ...] のようなブール値のリストに対応しています。文字列のリストが指定された場合、リストの並び順に合わせて回帰係数が表示されます。\nstats:str 表中の丸括弧 ( ) 内に表示する統計値の設定。次の値が指定できます。\n\n'std_err' 標準誤差(初期設定)\n'p_value' p-値\n'statistics' t統計量\n\nadd_stars:bool 回帰係数の統計的有意性を表すアスタリスク * を表示するかどうかを表すブール値。add_stars = True(初期-設定)なら表示、add_stars = Falseなら非表示となります。table_style に 'two_line' を指定した場合はアスタリスクは回帰係数の直後に表示され、'one_line' を指定した場合は stats で指定した統計値の後に表示されます。アスタリスクはp-値の値に応じて次のように表示されます。\nstars:dict(p_stars() のみ)  有意性を示す記号を key に、表示を切り替える閾値を値(value)にもつ辞書オブジェクト。初期設定の stars = None の場合、下記の方式で表示されます。\n\np ≤ 0.1 *\np ≤ 0.05 **\np ≤ 0.01 ***\np > 0.1 表示なし 詳細はbuilding_block.style_pvalue() を参照してください。\n\nstats_glance:list of str\n表の下部に追加する当てはまりの尺度の種類を表す文字列のリスト。リストの値には次の値を指定できます。なお、None もしくは空のリスト [ ] が指定された場合には非表示となります。\n\n'rsquared':決定係数\n'rsquared_adj':自由度調整済み決定係数\n'nobs':サインプルサイズ\n'df':モデルの自由度(説明変数の数)\n'sigma':回帰式の標準誤差\n'F_values':全ての回帰係数がゼロであることを帰無仮説とするF検定の統計量\n'p_values':F検定のP-値\n'AIC':赤池情報量基準\n'BIC':ベイズ情報量基準\n\ndigits: int 回帰係数と統計値について表示する小数点以下の桁数。初期設定は4です。\ntable_style: str 表の書式を表す文字列。次の値から選択できます(部分一致可)。\n\n'two_line'回帰係数と統計値を2行に分ける(初期設定)\n'one_line'回帰係数と統計値を1行で表示する\n\nline_break: str table_style = 'two_line' とした場合に使用される改行記号。table_style = 'one_line' とした場合、この引数は無視されます。\nat: str 限界効果の集計方法。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 at として渡されます。method = 'coef' を指定した場合、この引数は無視されます。\n\n'overall':各観測値の限界効果の平均値を表示(初期設定)\n'mean':各説明変数の平均値における限界効果を表示\n'median':各説明変数の中央値における限界効果を表示\n'zero':各説明変数の値がゼロであるときの限界効果を表示\n\nmethod: str 推定する限界効果の種類。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 method として渡されます。ただし、method = 'coef' を指定した場合には限界効果を推定せずに回帰係数をそのまま表示します。\n\n'coef':回帰係数の推定値を表示\n'dydx':限界効果の値を変換なしでそのまま表。(初期設定)\n'eyex':弾力性 d(lny)/d(lnx) の推定値を表示\n'dyex':準弾力性 dy /d(lnx) の推定値を表示\n'eydx':準弾力性 d(lny)/dx の推定値を表示\n\ndummy: bool ダミー変数の限界効果の推定方法を制御するブール値。もし False (初期設定)であれば、ダミー変数を連続な数値変数として扱います。もし、True であればダミー変数が0から1へと変化したときの予測値の変化を推定します。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 dummy として渡されます。", + "crumbs": [ + "regression_tools", + "23  限界効果の比較:`py4stats.compare_mfx()`" + ] + }, + { + "objectID": "man/compare_mfx.html#使用例", + "href": "man/compare_mfx.html#使用例", + "title": "23  限界効果の比較:py4stats.compare_mfx()", + "section": "23.3 使用例", + "text": "23.3 使用例\nimport py4stats as py4st\nimport statsmodels.formula.api as smf\n\nimport pandas as pd\nimport numpy as np\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込み\n py4st.compare_mfx() は py4st.compare_ols() の一般化線型モデルバージョンで、初期設定では statsmodels ライブラリの.get_margeff() メソッドから得られた限界効果の推定値を表示します。\npenguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)\n\n# ロジスティック回帰の実行\nfit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()\nfit_logit2 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm + species', data = penguins).fit()\n\npy4st.compare_mfx([fit_logit1, fit_logit2])\n\n\n\nterm\nmodel 1\nmodel 2\n\n\n\n\nbody_mass_g\n-0.0004 ***\n-0.0003 ***\n\n\n\n(0.0000)\n(0.0000)\n\n\nbill_length_mm\n-0.0053\n-0.0357 ***\n\n\n\n(0.0036)\n(0.0070)\n\n\nbill_depth_mm\n-0.1490 ***\n-0.1098 ***\n\n\n\n(0.0051)\n(0.0175)\n\n\nspecies[T.Chinstrap]\n\n0.4172 ***\n\n\n\n\n(0.0848)\n\n\nspecies[T.Gentoo]\n\n0.3527 ***\n\n\n\n\n(0.1308)\n\n\nprsquared\n0.5647\n0.6187\n\n\nnobs\n342\n342\n\n\ndf\n3\n5\n\n\n\nfrom great_tables import GT, md, html\ncompare_tab = py4st.compare_mfx(\n [fit_logit1, fit_logit2],\n model_name = ['ベースモデル', 'species 追加'], # モデル名を変更\n line_break = '<br>' # 改行文字の変更\n)\n\nGT(compare_tab.reset_index())\\\n .tab_header(title = 'ロジットモデルの限界効果')\\\n .tab_source_note(\n source_note= \"Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’\"\n )\\\n .tab_source_note(source_note = '丸括弧 ( ) の値は標準誤差')", + "crumbs": [ + "regression_tools", + "23  限界効果の比較:`py4stats.compare_mfx()`" + ] + }, + { + "objectID": "man/compare_mfx.html#補足", + "href": "man/compare_mfx.html#補足", + "title": "23  限界効果の比較:py4stats.compare_mfx()", + "section": "23.4 補足", + "text": "23.4 補足\n  table_style = 'two_line' としたとき、初期設定ではの回帰係数とp-値の間に改行記号 '\\n'が挿入されます。そのため、print() 関数や display() 関数を使った出力では、改行記号 '\\n' がそのまま表示されます。この場合でも、pd.DataFrame.to_excel() や pd.DataFrame.to_markdown() を使って Excel ファイルや markdown の表に変換していただくと、改行として反映されます。\n\nReturn to Function reference.", + "crumbs": [ + "regression_tools", + "23  限界効果の比較:`py4stats.compare_mfx()`" + ] + }, + { + "objectID": "man/coefplot.html", + "href": "man/coefplot.html", + "title": "24  回帰分析による推定値の視覚化:py4stats.coefplot(), py4stats.mfxplot()", + "section": "", + "text": "24.1 概要\nグラフ上の縦軸が説明変数、横軸回帰係数の値です。点が回帰係数の推定値を、エラーバー(横棒)が信頼区間を表します。", + "crumbs": [ + "regression_tools", + "24  回帰分析による推定値の視覚化:`py4stats.coefplot()`, `py4stats.mfxplot()`" + ] + }, + { + "objectID": "man/coefplot.html#概要", + "href": "man/coefplot.html#概要", + "title": "24  回帰分析による推定値の視覚化:py4stats.coefplot(), py4stats.mfxplot()", + "section": "", + "text": "coefplot(\n mod, \n subset = None, \n conf_level = [0.95, 0.99], \n palette = ['#1b69af', '#629CE7'], \n show_Intercept = False,\n show_vline = True,\n ax = None,\n **kwargs\n)\n\nmfxplot(\n mod, \n subset = None, \n conf_level = [0.95, 0.99], \n at = 'overall',\n method = 'dydx',\n dummy = False,\n palette = ['#1b69af', '#629CE7'], \n show_Intercept = False,\n show_vline = True,\n ax = None,\n **kwargs\n)", + "crumbs": [ + "regression_tools", + "24  回帰分析による推定値の視覚化:`py4stats.coefplot()`, `py4stats.mfxplot()`" + ] + }, + { + "objectID": "man/coefplot.html#引数-argument", + "href": "man/coefplot.html#引数-argument", + "title": "24  回帰分析による推定値の視覚化:py4stats.coefplot(), py4stats.mfxplot()", + "section": "24.2 引数 Argument", + "text": "24.2 引数 Argument\n\nmod:statsmodels で作成した回帰分析の結果(必須)。\nsubset:グラフに回帰係数を表示する説明変数のリスト。指定しなければモデルに含まれる全ての説明変数を使用します。また subset に指定された順番に合わせてグラフ内での回帰係数の並び順が変更されます。\nconf.level:信頼区間の計算に用いる信頼係数。1つ目の要素が太い方のエラーバーの幅に、2つ目の要素が細い方のエラーバーの幅に対応します。初期設定は [0.95, 0.99] です。\npalette:グラフの描画に使用する色コード。1つ目の要素が太い方のエラーバーの色に、2つ目の要素が細い方のエラーバーの色に対応します。\nshow_Intercept:切片の係数を表示するかどうか。True だと切片の係数を表示し、False(初期設定)だと表示しません。\nshow_vline:回帰係数 = 0 の垂直線を表示するかどうか。True (初期設定)を指定すると垂直線を表示し、False を指定すると表示されません。\nax:matplotlib の ax オブジェクト。複数のグラフを並べる場合などに使用します。\nat:限界効果の集計方法(mfxplot() のみ)。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 at として渡されます。method = 'coef' を指定した場合、この引数は無視されます。\n\n'overall':各観測値の限界効果の平均値を表示(初期設定)\n'mean':各説明変数の平均値における限界効果を表示\n'median':各説明変数の中央値における限界効果を表示\n'zero':各説明変数の値がゼロであるときの限界効果を表示\n\nmethod:推定する限界効果の種類(mfxplot() のみ)。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 method として渡されます。ただし、method = 'coef' を指定した場合には限界効果を推定せずに回帰係数をそのまま表示します。\n\n'coef':回帰係数の推定値を表示\n'dydx':限界効果の値を変換なしでそのまま表。(初期設定)\n'eyex':弾力性 d(lny)/d(lnx) の推定値を表示\n'dyex':準弾力性 dy /d(lnx) の推定値を表示\n'eydx':準弾力性 d(lny)/dx の推定値を表示\n\ndummy:ダミー変数の限界効果の推定方法(mfxplot() のみ)。もし False (初期設定)であれば、ダミー変数を連続な数値変数として扱います。もし、True であればダミー変数が0から1へと変化したときの予測値の変化を推定します。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 dummy として渡されます。", + "crumbs": [ + "regression_tools", + "24  回帰分析による推定値の視覚化:`py4stats.coefplot()`, `py4stats.mfxplot()`" + ] + }, + { + "objectID": "man/coefplot.html#使用例", + "href": "man/coefplot.html#使用例", + "title": "24  回帰分析による推定値の視覚化:py4stats.coefplot(), py4stats.mfxplot()", + "section": "24.3 使用例", + "text": "24.3 使用例\nimport py4stats as py4st\nimport statsmodels.formula.api as smf\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\n\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込み\n\n\n# 回帰分析の実行\nfit2 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species', data = penguins).fit()\nfit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()\n\npy4st.coefplot(fit3)\n\n\n\ncoefplot1\n\n\nplt.rcParams[\"figure.autolayout\"] = True\n\nfig, ax = plt.subplots(1, 2, figsize = (2.2 * 5, 5), dpi = 100)\n\npy4st.coefplot(fit2, ax = ax[0])\nax[0].set_xlim(-900, 1800)\n\npy4st.coefplot(fit3, ax = ax[1], palette = ['#FF6F91', '#F2E5EB'])\nax[1].set_xlim(-900, 1800);\n\n\n\ncoefplot2\n\n\npenguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)\n\n# ロジスティック回帰の実行\nfit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()\nfit_logit2 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm + species', data = penguins).fit()\nplt.rcParams[\"figure.autolayout\"] = True\n\nfig, ax = plt.subplots(1, 2, figsize = (2.2 * 5, 5), dpi = 100)\n\npy4st.mfxplot(fit_logit1, ax = ax[0])\nax[0].set_xlim(-0.2, 0.85)\n\npy4st.mfxplot(fit_logit2, ax = ax[1], palette = ['#FF6F91', '#F2E5EB'])\nax[1].set_xlim(-0.2, 0.85);\n *** Return to Function reference.", + "crumbs": [ + "regression_tools", + "24  回帰分析による推定値の視覚化:`py4stats.coefplot()`, `py4stats.mfxplot()`" + ] + }, + { + "objectID": "man/tidy.html", + "href": "man/tidy.html", + "title": "25  py4stats.tidy(), py4stats.tidy_mfx()", + "section": "", + "text": "25.1 概要\nR言語の broom::tidy() をオマージュした関数で、sm.ols() や smf.logit() などの推定結果を pands.DataFrame に変換します。py4stats.tidy() は回帰係数と関連する検定結果を表示し、 py4stats.tidy_mfx() は限界効果と関連する検定結果を表示します。", + "crumbs": [ + "regression_tools", + "25  `py4stats.tidy()`, `py4stats.tidy_mfx()`" + ] + }, + { + "objectID": "man/tidy.html#概要", + "href": "man/tidy.html#概要", + "title": "25  py4stats.tidy(), py4stats.tidy_mfx()", + "section": "", + "text": "tidy(\n x, \n name_of_term = None,\n conf_level = 0.95,\n **kwargs\n )\n\ntidy_mfx(\n x, \n at = 'overall', \n method = 'dydx', \n dummy = False, \n conf_level = 0.95, \n **kwargs\n )", + "crumbs": [ + "regression_tools", + "25  `py4stats.tidy()`, `py4stats.tidy_mfx()`" + ] + }, + { + "objectID": "man/tidy.html#引数-argument", + "href": "man/tidy.html#引数-argument", + "title": "25  py4stats.tidy(), py4stats.tidy_mfx()", + "section": "25.2 引数 Argument", + "text": "25.2 引数 Argument\n\nx(必須)  sm.ols()もしくは smf.logit() などで作成された分析結果のオブジェクト。\nname_of_term:list of str  term 列(index) として表示する説明変数の名前のリスト。指定しない場合(初期設定)、モデルの推定に使用された説明変数の名前がそのまま表示されます。\nconf_level:float  信頼区間の計算に用いる信頼係数。\nat:限界効果の集計方法(tidy_mfx() のみ)。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 at として渡されます。method = 'coef' を指定した場合、この引数は無視されます。\n\n'overall':各観測値の限界効果の平均値を表示(初期設定)\n'mean':各説明変数の平均値における限界効果を表示\n'median':各説明変数の中央値における限界効果を表示\n'zero':各説明変数の値がゼロであるときの限界効果を表示\n\nmethod:推定する限界効果の種類(tidy_mfx() のみ)。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 method として渡されます。ただし、method = 'coef' を指定した場合には限界効果を推定せずに回帰係数をそのまま表示します。\n\n'coef':回帰係数の推定値を表示\n'dydx':限界効果の値を変換なしでそのまま表。(初期設定)\n'eyex':弾力性 d(lny)/d(lnx) の推定値を表示\n'dyex':準弾力性 dy /d(lnx) の推定値を表示\n'eydx':準弾力性 d(lny)/dx の推定値を表示\n\ndummy:ダミー変数の限界効果の推定方法(tidy_mfx() のみ)。もし False (初期設定)であれば、ダミー変数を連続な数値変数として扱います。もし、True であればダミー変数が0から1へと変化したときの予測値の変化を推定します。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 dummy として渡されます。", + "crumbs": [ + "regression_tools", + "25  `py4stats.tidy()`, `py4stats.tidy_mfx()`" + ] + }, + { + "objectID": "man/tidy.html#返り値-value", + "href": "man/tidy.html#返り値-value", + "title": "25  py4stats.tidy(), py4stats.tidy_mfx()", + "section": "25.3 返り値 Value", + "text": "25.3 返り値 Value\n 次の列を含む pands.DataFrame が出力されます。\n\nterm(index)  説明変数の名称\nestimate  回帰係数(tidy()の場合)、もしくは限界効果(tidy_mfx()の場合)の推定値\nstd_err 推定値 estimate の標準誤差\nstatistics estimate = 0 を帰無仮説とする仮説検定の標本検定統計量。x に代入されたモデルが sm.ols() によって作成されたものであれば \\(t\\) 統計量が表示され、sm.glm() によって作成されたものであれば \\(z\\) 統計量が表示されます。\np_value estimate = 0 を帰無仮説とする両側検定の標本p-値\nconf_lower  信頼区間の下側信頼限界\nconf_higher  信頼区間の上側信頼限界", + "crumbs": [ + "regression_tools", + "25  `py4stats.tidy()`, `py4stats.tidy_mfx()`" + ] + }, + { + "objectID": "man/tidy.html#使用例-examples", + "href": "man/tidy.html#使用例-examples", + "title": "25  py4stats.tidy(), py4stats.tidy_mfx()", + "section": "25.4 使用例 Examples", + "text": "25.4 使用例 Examples\nimport pandas as pd\nimport numpy as np\nfrom palmerpenguins import load_penguins\nimport statsmodels.formula.api as smf\n\nfrom py4stats import regression_tools as reg # 回帰分析の要約\npenguins = load_penguins() # サンプルデータの読み込み\n# 回帰分析の実行\nfit1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()\n\nprint(py4st.tidy(fit1).round(4))\n#> estimate std_err statistics p_value conf_lower conf_higher\n#> term \n#> Intercept 153.7397 268.9012 0.5717 0.5679 -375.1910 682.6704\n#> species[T.Chinstrap] -885.8121 88.2502 -10.0375 0.0000 -1059.4008 -712.2234\n#> species[T.Gentoo] 578.6292 75.3623 7.6780 0.0000 430.3909 726.8674\n#> bill_length_mm 91.4358 6.8871 13.2764 0.0000 77.8888 104.9828\npenguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)\n\n# ロジスティック回帰の実行\nfit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()\n\nprint(py4st.tidy_mfx(fit_logit1).round(4))\n#> estimate std_err statistics p_value conf_lower conf_higher\n#> body_mass_g -0.0004 0.0000 -17.6561 0.0000 -0.0004 -0.0003\n#> bill_length_mm -0.0053 0.0036 -1.4628 0.1435 -0.0123 0.0018\n#> bill_depth_mm -0.1490 0.0051 -29.1681 0.0000 -0.1591 -0.1390", + "crumbs": [ + "regression_tools", + "25  `py4stats.tidy()`, `py4stats.tidy_mfx()`" + ] + }, + { + "objectID": "man/tidy.html#注意点", + "href": "man/tidy.html#注意点", + "title": "25  py4stats.tidy(), py4stats.tidy_mfx()", + "section": "25.5 注意点", + "text": "25.5 注意点\n 参考にしたR言語の broom::tidy() は様々な種類のモデルに対応したジェネリック関数として定義されていますが、py4stats.tidy() と py4stats.tidy_mfx() では対応しているモデルは限定的であることにご注意ださい。py4st.tidy() のメソッドが定義されているオブジェクトのクラスを確認するには次のコードを実行して下さい。\nlist(py4st.tidy.registry.keys())\npy4stats.tidy() は functools.singledispatch を用いたジェネリック関数として実装しています。 Py4Etrics モジュールの py4etrics.heckit.Heckit() で作成された HeckitResults クラスのオブジェクト用のメソッドについては heckit_helper.tidy_heckit() を参照してください。\n\nReturn to Function reference.", + "crumbs": [ + "regression_tools", + "25  `py4stats.tidy()`, `py4stats.tidy_mfx()`" + ] + }, + { + "objectID": "man/tidy_test.html", + "href": "man/tidy_test.html", + "title": "26  py4stats.tidy_test()", + "section": "", + "text": "26.1 概要\nR言語の broom::tidy() をオマージュした py4stats.tidy() 関数のうち、statsmodels ライブラリのメソッド RegressionResults.t_test() もしくは RegressionResults.f_test() で作成された statsmodels.stats.contrast.ContrastResults クラスのオブジェクト専用のメソッドです。py4stats.tidy()はジェネリック関数として実装されているため、py4st.tidy(x) としてご利用いただけます。", + "crumbs": [ + "regression_tools", + "26  `py4stats.tidy_test()`" + ] + }, + { + "objectID": "man/tidy_test.html#概要", + "href": "man/tidy_test.html#概要", + "title": "26  py4stats.tidy_test()", + "section": "", + "text": "tidy_test(x, conf_level = 0.95, **kwargs)", + "crumbs": [ + "regression_tools", + "26  `py4stats.tidy_test()`" + ] + }, + { + "objectID": "man/tidy_test.html#引数-argument", + "href": "man/tidy_test.html#引数-argument", + "title": "26  py4stats.tidy_test()", + "section": "26.2 引数 Argument", + "text": "26.2 引数 Argument\n\nx(必須)  statsmodels ライブラリのメソッド RegressionResults.t_test() もしくはRegressionResults.f_test() で作成された statsmodels.stats.contrast.ContrastResults クラスのオブジェクト。\nconf_level:float  信頼区間の計算に用いる信頼係数。ただし、x に代入されたオブジェクトが f_test() の結果である場合は、この引数は無視されます。", + "crumbs": [ + "regression_tools", + "26  `py4stats.tidy_test()`" + ] + }, + { + "objectID": "man/tidy_test.html#返り値-value", + "href": "man/tidy_test.html#返り値-value", + "title": "26  py4stats.tidy_test()", + "section": "26.3 返り値 Value", + "text": "26.3 返り値 Value\n 引数 x に代入されたオブジェクトが t_test() の結果である場合、次の列を含む pands.DataFrame が出力されます。\n\nestimate  帰無仮説のもとでの回帰係数(の線型結合)の推定値\nstd_err 推定値 estimate の標準誤差\nstatistics  仮説検定の標本検定統計量。\np_value 両側検定の標本p-値\nconf_lower  信頼区間の下側信頼限界\nconf_higher  信頼区間の上側信頼限界\n\n 一方で引数 x に代入されたオブジェクトが f_test() の結果である場合、次の列を含む pands.DataFrame が出力されます。\n\nstatistics  仮説検定の標本検定統計量。\np_value  F検定の標本p-値\ndf_denom  モデルの残差自由度\ndf_denom  帰無仮説のもとでの制約数", + "crumbs": [ + "regression_tools", + "26  `py4stats.tidy_test()`" + ] + }, + { + "objectID": "man/tidy_test.html#使用例-examples", + "href": "man/tidy_test.html#使用例-examples", + "title": "26  py4stats.tidy_test()", + "section": "26.4 使用例 Examples", + "text": "26.4 使用例 Examples\nimport py4stats as py4st\n\nimport pandas as pd\nimport numpy as np\nfrom palmerpenguins import load_penguins\nimport statsmodels.formula.api as smf\n\npenguins = load_penguins() # サンプルデータの読み込み\n\nfit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()\nhypotheses = 'bill_length_mm = 20'\nprint(py4st.tidy(fit3.t_test(hypotheses)).round(4))\n#> estimate std_err statistics p_value conf_lower conf_higher\n#> term \n#> c0 26.5366 7.2436 0.9024 0.3675 12.2867 40.7866\nhypotheses = 'species[T.Chinstrap] = 0, species[T.Gentoo] = 0'\nprint(py4st.tidy(fit3.f_test(hypotheses)).round(4))\n#> statistics p_value df_denom df_num\n#> term \n#> contrast 210.9432 0.0 327 2\n\nReturn to Function reference.", + "crumbs": [ + "regression_tools", + "26  `py4stats.tidy_test()`" + ] + }, + { + "objectID": "man/glance.html", + "href": "man/glance.html", + "title": "27  py4stats.glance()", + "section": "", + "text": "27.1 概要\nR言語の bloom::glance() をオマージュした関数で、sm.ols() や smf.logit() などで推定されたモデルを pands.DataFrame に変換します。", + "crumbs": [ + "regression_tools", + "27  `py4stats.glance()`" + ] + }, + { + "objectID": "man/glance.html#概要", + "href": "man/glance.html#概要", + "title": "27  py4stats.glance()", + "section": "", + "text": "glance(x)", + "crumbs": [ + "regression_tools", + "27  `py4stats.glance()`" + ] + }, + { + "objectID": "man/glance.html#引数-argument", + "href": "man/glance.html#引数-argument", + "title": "27  py4stats.glance()", + "section": "27.2 引数 Argument", + "text": "27.2 引数 Argument\n\nx(必須)  sm.ols() もしくは smf.logit() などで作成された分析結果のオブジェクト。", + "crumbs": [ + "regression_tools", + "27  `py4stats.glance()`" + ] + }, + { + "objectID": "man/glance.html#返り値-value", + "href": "man/glance.html#返り値-value", + "title": "27  py4stats.glance()", + "section": "27.3 返り値 Value", + "text": "27.3 返り値 Value\n モデルの当てはまり(goodness of fit)の尺度を各列に持つ pands.DataFrame が出力されます。表示される指標はモデルの種類によって異なります。", + "crumbs": [ + "regression_tools", + "27  `py4stats.glance()`" + ] + }, + { + "objectID": "man/glance.html#使用例-examples", + "href": "man/glance.html#使用例-examples", + "title": "27  py4stats.glance()", + "section": "27.4 使用例 Examples", + "text": "27.4 使用例 Examples\nimport pandas as pd\nimport numpy as np\nfrom palmerpenguins import load_penguins\nimport statsmodels.formula.api as smf\n\nimport py4stats as py4st\npenguins = load_penguins() # サンプルデータの読み込み\n# 線形回帰の場合\nfit_lm1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()\n\npd.set_option('display.expand_frame_repr', False)\nprint(py4st.glance(fit_lm1).round(4))\n#> rsquared rsquared_adj nobs df sigma F_values p_values AIC BIC\n#> 0 0.7829 0.781 342 3 375.3251 406.2735 0.0 5029.1406 5044.4798\n# ロジスティック回帰の場合\npenguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)\nfit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()\n\nprint(py4st.glance(fit_logit1).round(4))\n#> prsquared LL-Null df_null logLik AIC BIC deviance df_resid df_model nobs\n#> 0 0.5647 -236.8458 341 -103.1079 214.2157 229.555 206.2157 338 3 342", + "crumbs": [ + "regression_tools", + "27  `py4stats.glance()`" + ] + }, + { + "objectID": "man/glance.html#注意点", + "href": "man/glance.html#注意点", + "title": "27  py4stats.glance()", + "section": "27.5 注意点", + "text": "27.5 注意点\n 参考にしたR言語の bloom::glance() は様々な種類のモデルに対応したジェネリック関数として定義されていますが、py4st.glance() は現段階では限られたモデルにしか対応していません。py4st.glance() のメソッドが定義されているオブジェクトのクラスを確認するには次のコードを実行して下さい。\nlist(py4st.glance.registry.keys())\n\nReturn to Function reference.", + "crumbs": [ + "regression_tools", + "27  `py4stats.glance()`" + ] + }, + { + "objectID": "man/Blinder_Oaxaca.html", + "href": "man/Blinder_Oaxaca.html", + "title": "28  py4stats.Blinder_Oaxaca(), py4stats.plot_Blinder_Oaxaca()", + "section": "", + "text": "28.1 概要\n2つのサブサンプルを用いた回帰分析の推定結果に対して、Blinder-Oaxaca分解を行います。\nいま、ある変数 \\(s\\) を用いて \\(s = m\\) と \\(s = f\\) の2つのサブグループからなるデータセットがあるとし、次のような回帰式を仮定します。\n\\[\n\\begin{aligned}\nY_{i}^s = \\boldsymbol{X}_i^s\\boldsymbol{\\beta}^s + \\epsilon_i^s, &&\ns = m, f\n\\end{aligned}\n\\tag{1}\n\\]\nここで、\\(\\boldsymbol{X}_i^s\\) サブグループ \\(s\\) に属する個人 \\(i\\) についての説明変数からなる行列で、\\(\\boldsymbol{\\beta}^s\\) はサブグループ \\(s\\) のについての回帰係数、\\(\\epsilon_i^s\\) は誤差項です。  さらに、サブグループ \\(s\\) の被説明変数の平均値を \\(\\bar{Y}^s\\) とし、説明変数の平均値を \\(\\bar{\\boldsymbol{X}}^s\\) とするとき、Blinder-Oaxaca分解は2つのグループにおける被説明変数の平均値の差 \\(\\bar{Y}^m - \\bar{Y}^f\\) を次のように分解します。\n\\[\n\\begin{aligned}\n\\bar{Y}^m - \\bar{Y}^f = (\\bar{\\boldsymbol{X}}^m - \\bar{\\boldsymbol{X}}^f)\\boldsymbol{\\beta}^m + \\bar{\\boldsymbol{X}}^f(\\boldsymbol{\\beta}^m - \\boldsymbol{\\beta}^f)\n\\end{aligned}\n\\tag{2}\n\\]\nこのとき、式(2)右辺の各項は、それぞれ次のような意味を持ちます。\n式(1)および式(2)については朝井(2014, p.9)を参照しました。", + "crumbs": [ + "regression_tools", + "28  `py4stats.Blinder_Oaxaca()`, `py4stats.plot_Blinder_Oaxaca()`" + ] + }, + { + "objectID": "man/Blinder_Oaxaca.html#概要", + "href": "man/Blinder_Oaxaca.html#概要", + "title": "28  py4stats.Blinder_Oaxaca(), py4stats.plot_Blinder_Oaxaca()", + "section": "", + "text": "Blinder_Oaxaca(model1, model2)\n\nplot_Blinder_Oaxaca(\n model1, model2,\n diff_type = ['observed_diff', 'unobserved_diff'],\n ax = None, \n)\n\n\n\n\n\n\n\\((\\bar{\\boldsymbol{X}}^m - \\bar{\\boldsymbol{X}}^f)\\boldsymbol{\\beta}^m\\):2つのグループの観測可能な属性の差に起因する被説明変数の差 observed_diff\n\\(\\bar{\\boldsymbol{X}}^f(\\boldsymbol{\\beta}^m - \\boldsymbol{\\beta}^f)\\):2つのグループの観測できない要因の違いに起因する被説明変数の差 unobserved_diff", + "crumbs": [ + "regression_tools", + "28  `py4stats.Blinder_Oaxaca()`, `py4stats.plot_Blinder_Oaxaca()`" + ] + }, + { + "objectID": "man/Blinder_Oaxaca.html#引数-argument", + "href": "man/Blinder_Oaxaca.html#引数-argument", + "title": "28  py4stats.Blinder_Oaxaca(), py4stats.plot_Blinder_Oaxaca()", + "section": "28.2 引数 Argument", + "text": "28.2 引数 Argument\n\nmodel1:statsmodels で作成した回帰分析の結果(必須)。\nmodel2:statsmodels で作成した回帰分析の結果(必須)。\ndiff_type (plot_Blinder_Oaxaca()のみ)list of str or str  グラフの描画に使用する要約統計量の種類。初期設定では observed_diff と unobserved_diff の両方を表示します。\nax:matplotlib の ax オブジェクト。複数のグラフを並べる場合などに使用します。   ## 使用例 Examples\n\nimport pandas as pd\nimport statsmodels.formula.api as smf\nimport py4stats as py4st\n\nwage1 = wooldridge.data('wage1')\n\nfit_female = smf.ols(\n 'lwage ~ educ + exper + expersq + tenure + tenursq + married', \n data = wage1.query('female == 1')\n ).fit()\n\nfit_male = smf.ols(\n 'lwage ~ educ + exper + expersq + tenure + tenursq + married', \n data = wage1.query('female == 0')\n ).fit()\npy4st.compare_ols(\n list_models = [fit_female, fit_male],\n model_name = ['female', 'male']\n )\n\n\n\nterm\nfemale\nmale\n\n\n\n\nIntercept\n0.3159 **(0.1401)\n0.2255 *(0.1302)\n\n\neduc\n0.0737 ***(0.0104)\n0.0830 ***(0.0089)\n\n\nexper\n0.0200 ***(0.0072)\n0.0329 ***(0.0076)\n\n\nexpersq\n-0.0004 ***(0.0002)\n-0.0006 ***(0.0002)\n\n\ntenure\n0.0391 ***(0.0117)\n0.0301 ***(0.0089)\n\n\ntenursq\n-0.0014 ***(0.0005)\n-0.0005 *(0.0003)\n\n\nmarried\n-0.0548 (0.0539)\n0.1718 ***(0.0595)\n\n\nrsquared_adj\n0.2446\n0.4509\n\n\nnobs\n252\n274\n\n\ndf\n6\n6\n\n\n\nwage_decomp = py4st.Blinder_Oaxaca(\n model1 = fit_female,\n model2 = fit_male\n)\nwage_decomp\n\n\n\nterms\nobserved_diff\nunobserved_diff\n\n\n\n\nIntercept\n0\n-0.0903337\n\n\neduc\n0.0390661\n0.114713\n\n\nexper\n0.0371577\n0.211177\n\n\nexpersq\n-0.0216026\n-0.0962631\n\n\ntenure\n0.0859831\n-0.0327949\n\n\ntenursq\n-0.0342727\n0.0378497\n\n\nmarried\n0.0278806\n0.118657\n\n\n\npy4st.plot_Blinder_Oaxaca(\n model1 = fit_female,\n model2 = fit_male\n)\n\n\n\nplot_Blinder_Oaxaca1.png\n\n\ndiff_type を指定することで、一方の統計量だけを表示することもできます。\npy4st.plot_Blinder_Oaxaca(\n model1 = fit_female,\n model2 = fit_male,\n diff_type = 'unobserved_diff'\n)\n\n\n\nplot_Blinder_Oaxaca2.png\n\n\nグラフのサイズや解像度を指定するには、次のように行います。\nfig, ax = plt.subplots(1, 2, figsize = (1.1 * 2 * 4, 4), sharey = True, dpi = 200)\n\npy4st.plot_Blinder_Oaxaca(\n model1 = fit_female,\n model2 = fit_male,\n ax = ax\n)\nfig.tight_layout()", + "crumbs": [ + "regression_tools", + "28  `py4stats.Blinder_Oaxaca()`, `py4stats.plot_Blinder_Oaxaca()`" + ] + }, + { + "objectID": "man/Blinder_Oaxaca.html#参考文献", + "href": "man/Blinder_Oaxaca.html#参考文献", + "title": "28  py4stats.Blinder_Oaxaca(), py4stats.plot_Blinder_Oaxaca()", + "section": "28.3 参考文献", + "text": "28.3 参考文献\n\n朝井 友紀子 (2014) 「労働市場における男女差の30年― 就業のサンプルセレクションと男女間賃金格差」『日本労働研究雑誌』, No.648, pp.6–16\n\n\nReturn to Function reference.", + "crumbs": [ + "regression_tools", + "28  `py4stats.Blinder_Oaxaca()`, `py4stats.plot_Blinder_Oaxaca()`" + ] + }, + { + "objectID": "man/tidy_heckit.html", + "href": "man/tidy_heckit.html", + "title": "29  heckit_helper.tidy_heckit()", + "section": "", + "text": "29.1 概要\nR言語の broom::tidy() をオマージュした regression_tools.tidy() 関数の、py4etrics.heckit.HeckitResults クラス専用のメソッドです。regression_tools.tidy()はジェネリック関数として実装されているため、py4st.tidy(x) としてご利用いただけます。", + "crumbs": [ + "heckit_helper", + "29  `heckit_helper.tidy_heckit()`" + ] + }, + { + "objectID": "man/tidy_heckit.html#概要", + "href": "man/tidy_heckit.html#概要", + "title": "29  heckit_helper.tidy_heckit()", + "section": "", + "text": "tidy_heckit(\n model, \n name_selection = None, \n name_outcome = None, \n conf_level = 0.95\n )", + "crumbs": [ + "heckit_helper", + "29  `heckit_helper.tidy_heckit()`" + ] + }, + { + "objectID": "man/tidy_heckit.html#引数-argument", + "href": "man/tidy_heckit.html#引数-argument", + "title": "29  heckit_helper.tidy_heckit()", + "section": "29.2 引数 Argument", + "text": "29.2 引数 Argument\n\nx(必須)   Py4Etrics モジュールの py4etrics.heckit.Heckit() で作成された HeckitResults クラスのオブジェクト\nname_selection:list of str  term 列(index) のうち、第1段階の説明変数の名称として表示する文字列のリスト。指定しない場合(初期設定)、モデルの推定に使用された説明変数の名前がそのまま表示されます。\nname_outcome:list of str  term 列(index) のうち、第2段階の説明変数の名称として表示する文字列のリスト。指定しない場合(初期設定)、モデルの推定に使用された説明変数の名前がそのまま表示されます。\nconf_level:float  信頼区間の計算に用いる信頼係数。", + "crumbs": [ + "heckit_helper", + "29  `heckit_helper.tidy_heckit()`" + ] + }, + { + "objectID": "man/tidy_heckit.html#返り値-value", + "href": "man/tidy_heckit.html#返り値-value", + "title": "29  heckit_helper.tidy_heckit()", + "section": "29.3 返り値 Value", + "text": "29.3 返り値 Value\n 次の列を含む pands.DataFrame が出力されます。\n\nterm(index)  説明変数の名称\nestimate)  回帰係数の推定値\nstd_err 推定値 estimate の標準誤差\nstatistics estimate = 0 を帰無仮説とする仮説検定の標本検定統計量。x に代入されたモデルが sm.ols() によって作成されたものであれば \\(t\\) 統計量が表示され、sm.glm() によって作成されたものであれば \\(z\\) 統計量が表示されます。\np_value estimate = 0 を帰無仮説とする両側検定の標本p-値\nconf_lower  信頼区間の下側信頼限界\nconf_higher  信頼区間の上側信頼限界", + "crumbs": [ + "heckit_helper", + "29  `heckit_helper.tidy_heckit()`" + ] + }, + { + "objectID": "man/tidy_heckit.html#使用例-examples", + "href": "man/tidy_heckit.html#使用例-examples", + "title": "29  heckit_helper.tidy_heckit()", + "section": "29.4 使用例 Examples", + "text": "29.4 使用例 Examples\n heckit_helper モジュールはヘックマンの2段階推定(Heckit)を実行を Py4Etrics モジュールの py4etrics.heckit.Heckit() に依存しているため、事前のインストールをお願いします。\npip install git+https://github.com/Py4Etrics/py4etrics.git\nここでは wooldridge モジュールの mroz データを使い、春山(2023, Chap.24)のモデルを再現します。\nimport pandas as pd\nimport wooldridge\nimport py4stats as py4st\nfrom py4stats import heckit_helper\n\nmroz = wooldridge.data('mroz') # サンプルデータの読み込み\n\nmod_heckit, exog_outcome, exog_select = heckit_helper.Heckit_from_formula(\n selection = 'lwage ~ educ + exper + expersq + nwifeinc + age + kidslt6 + kidsge6',\n outcome = 'lwage ~ educ + exper + expersq',\n data = mroz\n)\n\nres_heckit = mod_heckit.fit(cov_type_2 = 'HC1')\n内部で functools.singledispatch を使用して定義しているため、heckit_helper モジュールの読み込み後は、py4st.tidy() 関数を呼び出すことで tidy_heckit() を実行することができます。\n# 初期設定で使用した場合\nprint(py4st.tidy(res_heckit).round(4))\n#> estimate std_err statistics p_value conf_lower conf_higher\n#> term \n#> O: Intercept -0.5781 0.3050 -1.8954 0.0580 -1.1759 0.0197\n#> O: educ 0.1091 0.0155 7.0261 0.0000 0.0786 0.1395\n#> O: exper 0.0439 0.0163 2.6989 0.0070 0.0120 0.0758\n#> O: expersq -0.0009 0.0004 -1.9574 0.0503 -0.0017 0.0000\n#> S: const 0.2701 0.5086 0.5310 0.5954 -0.7267 1.2669\n#> S: x1 0.1309 0.0253 5.1835 0.0000 0.0814 0.1804\n#> S: x2 0.1233 0.0187 6.5903 0.0000 0.0867 0.1600\n#> S: x3 -0.0019 0.0006 -3.1452 0.0017 -0.0031 -0.0007\n#> S: x4 -0.0120 0.0048 -2.4843 0.0130 -0.0215 -0.0025\n#> S: x5 -0.0529 0.0085 -6.2347 0.0000 -0.0695 -0.0362\n#> S: x6 -0.8683 0.1185 -7.3263 0.0000 -1.1006 -0.6360\n#> S: x7 0.0360 0.0435 0.8281 0.4076 -0.0492 0.1212\n 注意:内部で使用している statsmodels.iolib.summary.summary_params_frame() の仕様上、初期設定では第1段階の説明変数の名前が反映されません。説明変数の名前を反映するには name_selection 引数で指定してください。\nprint(py4st.tidy(res_heckit, name_selection = exog_select.columns).round(4))\n#> estimate std_err statistics p_value conf_lower conf_higher\n#> term \n#> O: Intercept -0.5781 0.3050 -1.8954 0.0580 -1.1759 0.0197\n#> O: educ 0.1091 0.0155 7.0261 0.0000 0.0786 0.1395\n#> O: exper 0.0439 0.0163 2.6989 0.0070 0.0120 0.0758\n#> O: expersq -0.0009 0.0004 -1.9574 0.0503 -0.0017 0.0000\n#> S: Intercept 0.2701 0.5086 0.5310 0.5954 -0.7267 1.2669\n#> S: educ 0.1309 0.0253 5.1835 0.0000 0.0814 0.1804\n#> S: exper 0.1233 0.0187 6.5903 0.0000 0.0867 0.1600\n#> S: expersq -0.0019 0.0006 -3.1452 0.0017 -0.0031 -0.0007\n#> S: nwifeinc -0.0120 0.0048 -2.4843 0.0130 -0.0215 -0.0025\n#> S: age -0.0529 0.0085 -6.2347 0.0000 -0.0695 -0.0362\n#> S: kidslt6 -0.8683 0.1185 -7.3263 0.0000 -1.1006 -0.6360\n#> S: kidsge6 0.0360 0.0435 0.8281 0.4076 -0.0492 0.1212\n\nReturn to Function reference.", + "crumbs": [ + "heckit_helper", + "29  `heckit_helper.tidy_heckit()`" + ] + }, + { + "objectID": "man/Heckit_from_formula.html", + "href": "man/Heckit_from_formula.html", + "title": "30  heckit_helper.Heckit_from_formula()", + "section": "", + "text": "30.1 概要", + "crumbs": [ + "heckit_helper", + "30  `heckit_helper.Heckit_from_formula()`" + ] + }, + { + "objectID": "man/Heckit_from_formula.html#概要", + "href": "man/Heckit_from_formula.html#概要", + "title": "30  heckit_helper.Heckit_from_formula()", + "section": "", + "text": "Heckit_from_formula(\n selection, \n outcome, \n data, \n **kwargs\n )", + "crumbs": [ + "heckit_helper", + "30  `heckit_helper.Heckit_from_formula()`" + ] + }, + { + "objectID": "man/Heckit_from_formula.html#引数-argument", + "href": "man/Heckit_from_formula.html#引数-argument", + "title": "30  heckit_helper.Heckit_from_formula()", + "section": "30.2 引数 Argument", + "text": "30.2 引数 Argument\n\nselectionstr(必須)  Type2トービットモデルのうち第1段階の selection equation(選択関数, 就業決定関数)の回帰式\noutcomestr(必須)  Type2トービットモデルのうち第2段階の regression equation(賃金関数)の回帰式\ndata:pandas.DataFrame(必須)\n**kwargs py4etrics.heckit.Heckit() に渡すその他の引数", + "crumbs": [ + "heckit_helper", + "30  `heckit_helper.Heckit_from_formula()`" + ] + }, + { + "objectID": "man/Heckit_from_formula.html#返り値-value", + "href": "man/Heckit_from_formula.html#返り値-value", + "title": "30  heckit_helper.Heckit_from_formula()", + "section": "30.3 返り値 Value", + "text": "30.3 返り値 Value\n 3つの要素を持つ tuple。左から順に次の3つのオブジェクトが出力されます。\n\npy4etrics.heckit.Heckit() から出力されたモデルの推定結果\n第2段階の regression equation(賃金関数)の説明変数からなる pd.DataFrame\n第1段階のselection equation(選択関数, 就業決定関数)の説明変数からなる pd.DataFrame", + "crumbs": [ + "heckit_helper", + "30  `heckit_helper.Heckit_from_formula()`" + ] + }, + { + "objectID": "man/Heckit_from_formula.html#使用例-examples", + "href": "man/Heckit_from_formula.html#使用例-examples", + "title": "30  heckit_helper.Heckit_from_formula()", + "section": "30.4 使用例 Examples", + "text": "30.4 使用例 Examples\n heckit_helper モジュールはヘックマンの2段階推定(Heckit)を実行を Py4Etrics モジュールの py4etrics.heckit.Heckit() に依存しているため、事前のインストールをお願いします。\npip install git+https://github.com/Py4Etrics/py4etrics.git\nここでは春山(2023, Chap.24)のモデルを再現するため、wooldridge モジュールから mroz データを読み込みます。\nimport pandas as pd\nimport wooldridge\nfrom py4stats import heckit_helper\n\nmroz = wooldridge.data('mroz') # サンプルデータの読み込み\nHeckit_from_formula() 関数を使い、モデルを推定します。なお、Type2トービットモデルを推定する場合、第2段階の回帰式 outcome で使用される説明変数は全て第1段階の回帰式 selection に含まれ、なおかつ selection に含まれるものの、outcome には含まれない説明変数が少なくとも1つは必要であることに注意してください(末石, 2015, p.117)。\nmod_heckit, exog_outcome, exog_select = \\\n heckit_helper.Heckit_from_formula(\n selection = 'lwage ~ educ + exper + expersq + nwifeinc + age + kidslt6 + kidsge6',\n outcome = 'lwage ~ educ + exper + expersq',\n data = mroz\n)\n\nres_heckit = mod_heckit.fit(cov_type_2 = 'HC1')\n\nprint(res_heckit.summary())\n#> Heckit Regression Results \n#> ================================================================================\n#> Dep. Variable: lwage R-squared: 0.156\n#> Model: Heckit Adj. R-squared: 0.150\n#> Method: Heckman Two-Step F-statistics: 26.148\n#> Date: Mon, 11 Mar 2024 Prob (F-statistic): 0.000\n#> Time: 08:40:39 Cov in 1st Stage: nonrobust\n#> No. Total Obs.: 753 Cov in 2nd Stage: HC1\n#> No. Censored Obs.: 325 \n#> No. Uncensored Obs.: 428 \n#> ==============================================================================\n#> coef std err z P>|z| [0.025 0.975]\n#> ------------------------------------------------------------------------------\n#> Intercept -0.5781 0.305 -1.895 0.058 -1.176 0.020\n#> educ 0.1091 0.016 7.026 0.000 0.079 0.139\n#> exper 0.0439 0.016 2.699 0.007 0.012 0.076\n#> expersq -0.0009 0.000 -1.957 0.050 -0.002 1.15e-06\n#> ==============================================================================\n#> coef std err z P>|z| [0.025 0.975]\n#> ------------------------------------------------------------------------------\n#> Intercept 0.2701 0.509 0.531 0.595 -0.727 1.267\n#> educ 0.1309 0.025 5.183 0.000 0.081 0.180\n#> exper 0.1233 0.019 6.590 0.000 0.087 0.160\n#> expersq -0.0019 0.001 -3.145 0.002 -0.003 -0.001\n#> nwifeinc -0.0120 0.005 -2.484 0.013 -0.022 -0.003\n#> age -0.0529 0.008 -6.235 0.000 -0.069 -0.036\n#> kidslt6 -0.8683 0.119 -7.326 0.000 -1.101 -0.636\n#> kidsge6 0.0360 0.043 0.828 0.408 -0.049 0.121\n#> ================================================================================\n#> coef std err z P>|z| [0.025 0.975]\n#> --------------------------------------------------------------------------------\n#> IMR (Lambda) 0.0323 0.134 0.241 0.809 -0.230 0.294\n#> =====================================\n#> rho: 0.049\n#> sigma: 0.664\n#> =====================================\n#> \n#> First table are the estimates for the regression (response) equation.\n#> Second table are the estimates for the selection equation.\n#> Third table is the estimate for the coef of the inverse Mills ratio (Heckman's Lambda).", + "crumbs": [ + "heckit_helper", + "30  `heckit_helper.Heckit_from_formula()`" + ] + }, + { + "objectID": "man/Heckit_from_formula.html#参考文献", + "href": "man/Heckit_from_formula.html#参考文献", + "title": "30  heckit_helper.Heckit_from_formula()", + "section": "30.5 参考文献", + "text": "30.5 参考文献\n\n末石直也(2015)『計量経済学:ミクロデータ分析へのいざない』 日本評論社.\n春山鉄源(2023) 『Pythonで学ぶ入門計量経済学』 https://py4etrics.github.io/index.html\n\n\nReturn to Function reference.", + "crumbs": [ + "heckit_helper", + "30  `heckit_helper.Heckit_from_formula()`" + ] + }, + { + "objectID": "man/heckitmfx_compute.html", + "href": "man/heckitmfx_compute.html", + "title": "31  heckit_helper.heckitmfx_compute()", + "section": "", + "text": "31.1 概要\nType2トービットモデルの限界効果を推定します。推定方法についてはダハナ, 勝又(2023, p.136)および Hoffmann, Kassouf(2005)を参照し、関数の実装についてはR言語の heckitmfx::heckitmfx_log() 関数を参考にしています。", + "crumbs": [ + "heckit_helper", + "31  `heckit_helper.heckitmfx_compute()`" + ] + }, + { + "objectID": "man/heckitmfx_compute.html#概要", + "href": "man/heckitmfx_compute.html#概要", + "title": "31  heckit_helper.heckitmfx_compute()", + "section": "", + "text": "heckitmfx_compute(\n model, \n exog_select, \n exog_outcome, \n exponentiate = False\n)", + "crumbs": [ + "heckit_helper", + "31  `heckit_helper.heckitmfx_compute()`" + ] + }, + { + "objectID": "man/heckitmfx_compute.html#引数-argument", + "href": "man/heckitmfx_compute.html#引数-argument", + "title": "31  heckit_helper.heckitmfx_compute()", + "section": "31.2 引数 Argument", + "text": "31.2 引数 Argument\n\nmodel(必須)   Py4Etrics モジュールの py4etrics.heckit.Heckit() で作成された HeckitResults クラスのオブジェクト\nexog_selectpd.DataFrame(必須)  Type2トービットモデルのうち第1段階の selection equation(選択関数, 就業決定関数)の説明変数からなる pd.DataFrame\nexog_outcomepd.DataFrame(必須)  Type2トービットモデルのうち第2段階の regression equation(賃金関数)の説明変数からなる pd.DataFrame\n\nこれらの引数は heckit_helper.Heckit_from_formula() の出力を使用することを想定しています(使用例を参照)。\n\nexponentiatebool  推定結果に指数関数を用いた変換を行うかどうかを表す論理値。もし False (初期設定)であれば限界効果と回帰係数の推定値をそのまま出力し、もし True であれば出力されるデータフレームのうち unconditional、conditional、selection、beta の列について指数関数 \\(100[\\exp(x - 1)]\\) を用いた変換を行います。例えば被説明変数は対数賃金であれば、変換後の限界効果はパーセンテージで表された賃金の変化率として解釈できます。", + "crumbs": [ + "heckit_helper", + "31  `heckit_helper.heckitmfx_compute()`" + ] + }, + { + "objectID": "man/heckitmfx_compute.html#返り値-value", + "href": "man/heckitmfx_compute.html#返り値-value", + "title": "31  heckit_helper.heckitmfx_compute()", + "section": "31.3 返り値 Value", + "text": "31.3 返り値 Value\n 次の列を含む pands.DataFrame が出力されます。\n\nterm(index)  説明変数の名称\nunconditional  Hoffmann, Kassouf(2005, p.6)の(14)式および(15)式に基づく条件付なしの平均限界効果(unconditional marginal effect)\nconditional  Hoffmann, Kassouf(2005, pp.4-5)の(8)式および(9)式に基づく条件付平均限界効果(conditional marginal effect)\nselection  Hoffmann, Kassouf(2005, p.6)の(14)式および(15)式の第3項に当たる間接効果\nbeta  第2段階の regression equation の回帰係数\ngamma  第1段階の selection equation の回帰係数", + "crumbs": [ + "heckit_helper", + "31  `heckit_helper.heckitmfx_compute()`" + ] + }, + { + "objectID": "man/heckitmfx_compute.html#使用例-examples", + "href": "man/heckitmfx_compute.html#使用例-examples", + "title": "31  heckit_helper.heckitmfx_compute()", + "section": "31.4 使用例 Examples", + "text": "31.4 使用例 Examples\n heckit_helper モジュールはヘックマンの2段階推定(Heckit)を実行を Py4Etrics モジュールの py4etrics.heckit.Heckit() に依存しているため、事前のインストールをお願いします。\npip install git+https://github.com/Py4Etrics/py4etrics.git\nここでは wooldridge モジュールの mroz データを使い、春山(2023, Chap.24)のモデルを再現します。\nimport pandas as pd\nimport wooldridge\nfrom py4stats import heckit_helper\n\nmroz = wooldridge.data('mroz') # サンプルデータの読み込み\n\nmod_heckit, exog_outcome, exog_select = \\\n heckit_helper.Heckit_from_formula(\n selection = 'lwage ~ educ + exper + expersq + nwifeinc + age + kidslt6 + kidsge6',\n outcome = 'lwage ~ educ + exper + expersq',\n data = mroz\n)\n\nres_heckit = mod_heckit.fit(cov_type_2 = 'HC1')\nprint(heckit_helper.heckitmfx_compute(\n res_heckit,\n exog_select = exog_select,\n exog_outcome = exog_outcome\n ).round(4))\n#> unconditional conditional selection beta gamma\n#> term \n#> age -0.0385 0.0010 -0.0395 0.0000 -0.0529\n#> educ 0.2045 0.1067 0.0978 0.1091 0.1309\n#> exper 0.1338 0.0417 0.0922 0.0439 0.1233\n#> expersq -0.0022 -0.0008 -0.0014 -0.0009 -0.0019\n#> kidsge6 0.0263 -0.0006 0.0269 0.0000 0.0360\n#> kidslt6 -0.6332 0.0157 -0.6489 0.0000 -0.8683\n#> nwifeinc -0.0088 0.0002 -0.0090 0.0000 -0.0120\n被説明変数の lwage は対数賃金であるため、exponentiate = True として指数関数 \\(100[\\exp(x - 1)]\\) を使った変換を行うことで、限界効果を賃金の変化率として解釈できるようになります。\nprint(heckit_helper.heckitmfx_compute(\n res_heckit,\n exog_select = exog_select,\n exog_outcome = exog_outcome,\n exponentiate = True\n ).round(4))\n#> unconditional conditional selection beta gamma\n#> term \n#> age -3.7809 0.0954 -3.8725 0.0000 -0.0529\n#> educ 22.6943 11.2606 10.2765 11.5235 0.1309\n#> exper 14.3206 4.2543 9.6555 4.4865 0.1233\n#> expersq -0.2233 -0.0825 -0.1409 -0.0859 -0.0019\n#> kidsge6 2.6604 -0.0649 2.7271 0.0000 0.0360\n#> kidslt6 -46.9117 1.5782 -47.7365 0.0000 -0.8683\n#> nwifeinc -0.8730 0.0217 -0.8945 0.0000 -0.0120", + "crumbs": [ + "heckit_helper", + "31  `heckit_helper.heckitmfx_compute()`" + ] + }, + { + "objectID": "man/heckitmfx_compute.html#注意", + "href": "man/heckitmfx_compute.html#注意", + "title": "31  heckit_helper.heckitmfx_compute()", + "section": "31.5 注意", + "text": "31.5 注意\n heckitmfx_compute() の実装は実験的なものであり、 Stata における margins コマンドなどの既存の手法とは計算結果が一致しない可能性があります。", + "crumbs": [ + "heckit_helper", + "31  `heckit_helper.heckitmfx_compute()`" + ] + }, + { + "objectID": "man/heckitmfx_compute.html#参考文献", + "href": "man/heckitmfx_compute.html#参考文献", + "title": "31  heckit_helper.heckitmfx_compute()", + "section": "31.6 参考文献", + "text": "31.6 参考文献\n\nダハナ・ウィラワン ドニ, 勝又壮太郎(2023) 『Rによるマーケティング・データ分析: 基礎から応用まで (ライブラリ データ分析への招待 4)』新世社.\n春山鉄源 (2023) 『Pythonで学ぶ入門計量経済学』. https://py4etrics.github.io/index.html\nHoffmann, Rodolfo, and Ana Lucia Kassouf. (2005). Deriving conditional and unconditional marginal effects in log earnings equations estimated by heckman’s procedure. Applied Economics, 37(11), 1303–1311. *** Return to Function reference.", + "crumbs": [ + "heckit_helper", + "31  `heckit_helper.heckitmfx_compute()`" + ] + }, + { + "objectID": "man/arg_match.html", + "href": "man/arg_match.html", + "title": "32  引数のアサーション building_block.arg_match()", + "section": "", + "text": "32.1 概要\nR言語の rlang::arg_match() をオマージュした関数で、文字列で与えられた引数のアサーションを行います。", + "crumbs": [ + "building_block", + "32  引数のアサーション `building_block.arg_match()`" + ] + }, + { + "objectID": "man/arg_match.html#概要", + "href": "man/arg_match.html#概要", + "title": "32  引数のアサーション building_block.arg_match()", + "section": "", + "text": "arg_match(\n arg: Union[str, Sequence[str], pd.Series, np.ndarray],\n values: Sequence[str],\n arg_name: Optional[str] = None,\n multiple: bool = False,\n any_missing: bool = False,\n all_missing: bool = False,\n nullable: bool = False\n )", + "crumbs": [ + "building_block", + "32  引数のアサーション `building_block.arg_match()`" + ] + }, + { + "objectID": "man/arg_match.html#引数-argument", + "href": "man/arg_match.html#引数-argument", + "title": "32  引数のアサーション building_block.arg_match()", + "section": "32.2 引数 Argument", + "text": "32.2 引数 Argument\n\narg(必須)str or list of str  適正かどうかを判断したい引数の値\nvalues(必須):list of str  引数 arg の適正な値のリスト\narg_name:str  エラーメッセージに表示する引数の名前。指定されなかった場合(初期設定)、引数 arg に代入されたオブジェクトの名称を表示します。なお、この機能は varname.argname()関数を使って実装されています。\nmultiple:bool  引数の値として複数の値を許容するかどうかを示すブール値。arg にリストが代入された場合、multiple = False(初期設定)であれば最初の値のみを出力し、multiple = True であればリストの値を全て出力します。\nany_missing:bool True の場合、欠測値(例:None、NaN、pd.NA など)が引数 arg の一部に含まれていても許容されます。\nall_missing: bool True の場合、すべての要素が欠測値であることを許容します。\nnullable: bool True の場合、引数そのものが None であることを許容します。", + "crumbs": [ + "building_block", + "32  引数のアサーション `building_block.arg_match()`" + ] + }, + { + "objectID": "man/arg_match.html#返り値-value", + "href": "man/arg_match.html#返り値-value", + "title": "32  引数のアサーション building_block.arg_match()", + "section": "32.3 返り値 Value", + "text": "32.3 返り値 Value\n 引数 arg に代入された値が、values に代入されたリストに含まれていればその値を返し、そうでなければエラーメッセージを出力します。エラーメッセージでは values に代入されたリストの値を arg の適正な値の候補として提示します。", + "crumbs": [ + "building_block", + "32  引数のアサーション `building_block.arg_match()`" + ] + }, + { + "objectID": "man/arg_match.html#使用例-examples", + "href": "man/arg_match.html#使用例-examples", + "title": "32  引数のアサーション building_block.arg_match()", + "section": "32.4 使用例 Examples", + "text": "32.4 使用例 Examples\nfrom py4stats import building_block as build\n\ndef my_faivarit(fruits):\n fruits = build.arg_match(\n fruits, arg_name = 'fruits',\n values = ['apple', 'orange', 'grape'], \n multiple = False\n )\n return fruits\n\nmy_faivarit('apple')\n#> 'apple'\n\nmy_faivarit('orang')\n#> ValueError: `fruits` must be one of 'apple', 'orange' or 'grape', not 'orang'.\n#> Did you mean 'orange'?\n\nmy_faivarit('ap')\n#> ValueError: `fruits` must be one of 'apple', 'orange' or 'grape', not 'ap'.\n#> Did you mean 'apple' or 'grape'?\n# arg に list を指定した場合\n# 初期設定では1つ目の要素だけ使用されます。\nmy_faivarit(['apple', 'orange'])\n#> 'apple'\n\n# multiple = True として再度関数を定義\ndef my_faivarit2(fruits):\n fruits = build.arg_match(\n fruits, arg_name = 'fruits',\n values = ['apple', 'orange', 'grape'], \n multiple = True\n )\n return fruits\n\nmy_faivarit2(['apple', 'orange'])\n#> ['apple', 'orange']\n\nmy_faivarit2(['apple', 'orang'])\n#> ValueError: `fruits` must be one of 'apple', 'orange' or 'grape', not 'orang'.\n#> Did you mean 'orange'?\n Py4Stats では eda_tools.tabyl()や regression_tools.compare_ols() など、文字列で指定する引数をもつ関数で、引数のアサーションに build.arg_match() を使用しています。\nimport py4stats as py4st\nimport pandas as pd\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込\n\npy4st.tabyl(penguins, 'island', 'species', normalize = 'ind')\n#> ValueError: `normalize` must be one of 'index', 'columns' or 'all', not 'ind'.\n#> Did you mean 'index'?\n\nReturn to Function reference.", + "crumbs": [ + "building_block", + "32  引数のアサーション `building_block.arg_match()`" + ] + }, + { + "objectID": "man/assert_dtype.html", + "href": "man/assert_dtype.html", + "title": "33  データ型による引数のアサーション", + "section": "", + "text": "33.1 概要\nR言語の checkmate パッケージの関数群をオマージュした、引数に代入された値が想定されたデータ型ではないときにエラーを出力する関数です。\nそれぞれの関数は第一引数 arg に代入された array-like オブジェクトの要素が、次の型ではない場合にエラーを出力します。", + "crumbs": [ + "building_block", + "33  データ型による引数のアサーション" + ] + }, + { + "objectID": "man/assert_dtype.html#概要", + "href": "man/assert_dtype.html#概要", + "title": "33  データ型による引数のアサーション", + "section": "", + "text": "assert_character(\n arg: Any, \n arg_name: Optional[str] = None,\n len_arg: Optional[int] = None,\n len_min: int = 1,\n len_max: Optional[int] = None,\n any_missing: bool = False,\n all_missing: bool = False,\n nullable: bool = False,\n scalar_only: bool = False\n )\n\nassert_logical(\n arg: Any, \n arg_name: Optional[str] = None,\n len_arg: Optional[int] = None,\n len_min: int = 1,\n len_max: Optional[int] = None,\n any_missing: bool = False,\n all_missing: bool = False,\n nullable: bool = False,\n scalar_only: bool = False\n )\n\nassert_numeric(\n arg: Any,\n arg_name: Optional[str] = None,\n lower = -float('inf'), \n upper = float('inf'), \n inclusive: Literal[\"both\", \"neither\", \"left\", \"right\"] = \"both\",\n len_arg: Optional[int] = None,\n len_min: int = 1,\n len_max: Optional[int] = None,\n any_missing: bool = False,\n all_missing: bool = False,\n nullable: bool = False,\n scalar_only: bool = False\n )\n\nassert_integer(\n arg: Any,\n arg_name: Optional[str] = None,\n lower = -float('inf'), \n upper = float('inf'), \n inclusive: Literal[\"both\", \"neither\", \"left\", \"right\"] = \"both\",\n len_arg: Optional[int] = None,\n len_min: int = 1,\n len_max: Optional[int] = None,\n any_missing: bool = False,\n all_missing: bool = False,\n nullable: bool = False,\n scalar_only: bool = False\n )\n\nassert_count(\n arg: Any,\n arg_name: Optional[str] = None,\n lower = 0, \n upper = float('inf'), \n inclusive: Literal[\"both\", \"neither\", \"left\", \"right\"] = \"both\",\n len_arg: Optional[int] = None,\n len_min: int = 1,\n len_max: Optional[int] = None,\n any_missing: bool = False,\n all_missing: bool = False,\n nullable: bool = False,\n scalar_only: bool = False\n )\n\nassert_float(\n arg: Any,\n arg_name: Optional[str] = None,\n lower = -float('inf'), \n upper = float('inf'), \n inclusive: Literal[\"both\", \"neither\", \"left\", \"right\"] = \"both\",\n len_arg: Optional[int] = None,\n len_min: int = 1,\n len_max: Optional[int] = None,\n any_missing: bool = False,\n all_missing: bool = False,\n nullable: bool = False,\n scalar_only: bool = False\n )\n\n\nassert_character():str\nassert_numeric():int or float\nassert_integer():int\nassert_count():int\nassert_float():float", + "crumbs": [ + "building_block", + "33  データ型による引数のアサーション" + ] + }, + { + "objectID": "man/assert_dtype.html#引数-argument", + "href": "man/assert_dtype.html#引数-argument", + "title": "33  データ型による引数のアサーション", + "section": "33.2 引数 Argument", + "text": "33.2 引数 Argument\n\narg(必須)array-like  適正かどうかを判断したい引数。検証対象となる引数。スカラー値、または array-like オブジェクト(例:list、NumPy 配列、pandas Series)を指定できます。\narg_name:str  エラーメッセージに表示する引数の名前。None の場合、可能であれば arg に渡された変数名が自動的に推定されます。なお、この機能は varname.argname()関数を使って実装されています。\nlower, upper:int or float  arg に代入されたオブジェクトの要素が取るべき値の最大値と最小値。\ninclusive:str  値の範囲チェックにおいて、境界値を含めるかどうかを表す文字列。 'both', 'neither', 'left', 'right' から選択できます。\n\n'both':lower <= x <= upper\n'neither':lower < x < upper\n'left':lower <= x < upper\n'right':lower < x <= upper\n\nlen_arg: int 引数の要素数を表す自然数:要素数をこの値と正確に一致させたい場合に指定します。len_arg を指定した場合、引数はちょうどこの個数の要素をもつ必要があります。  引数の長さは、None や np.nan などの欠測値を含む要素数をもとに判定されます。例えば引数の要素が arg = [1, None, 3] のとき、len_arg = 3なら正常として判定され、len_arg = 2 ならエラーが出されます。\nlen_min, len_max:: int 許容される最小の要素数と最大の要素数。len_max = None の場合、上限は設けられません。\nany_missing:bool True の場合、欠測値(例:None、NaN、pd.NA など)が引数 arg の一部に含まれていても許容されます。\nall_missing: bool True の場合、すべての要素が欠測値であることを許容します。\nnullable: bool True の場合、引数そのものが None であることを許容します。\nscalar_only: bool True の場合、スカラー値のみを許容します。この場合、1要素であっても、list や配列などの array-like オブジェクトは受け付けません。", + "crumbs": [ + "building_block", + "33  データ型による引数のアサーション" + ] + }, + { + "objectID": "man/assert_dtype.html#返り値-value", + "href": "man/assert_dtype.html#返り値-value", + "title": "33  データ型による引数のアサーション", + "section": "33.3 返り値 Value", + "text": "33.3 返り値 Value\n引数 arg に代入されたオブジェクトの全ての要素が、アサーションの条件を満たしていれば何も返さず、そうでなければエラーメッセージを出力します。", + "crumbs": [ + "building_block", + "33  データ型による引数のアサーション" + ] + }, + { + "objectID": "man/assert_dtype.html#使用例-examples", + "href": "man/assert_dtype.html#使用例-examples", + "title": "33  データ型による引数のアサーション", + "section": "33.4 使用例 Examples", + "text": "33.4 使用例 Examples\nfrom py4stats import building_block as build\nx = [1, 2, 3]\ny = ['A', 'B', 'C']\n\nbuild.assert_character(x, arg_name = 'x')\n#> TypeError: Argument `x` must be of type 'str'.\n\nbuild.assert_character(y, arg_name = 'y')\nbuild.assert_numeric(x, arg_name = 'x')\n\nbuild.assert_numeric(y, arg_name = 'y')\n#> TypeError: Argument `y` must be of type 'int' or 'float' with value(s) -inf <= x <= inf.\n\nz = [0.1, 0.3, 0.6]\nbuild.assert_numeric(z, arg_name = 'z', lower = 0, upper = 1)\n\nz.extend([2, 3])\nbuild.assert_numeric(z, arg_name = 'z', lower = 0, upper = 1)\n#> ValueError: Argument `z` must have value 0 <= x <= 1\n#> element '3' and '4' of 'z' not sutisfy the condtion.\n\nz = 1\nbuild.assert_numeric(\n z, arg_name = 'z', \n lower = 0, upper = 1, \n inclusive = 'left'\n )\n#> ValueError: Argument `z` must have value 0 <= x < 1.", + "crumbs": [ + "building_block", + "33  データ型による引数のアサーション" + ] + }, + { + "objectID": "man/assert_dtype.html#参照", + "href": "man/assert_dtype.html#参照", + "title": "33  データ型による引数のアサーション", + "section": "33.5 参照", + "text": "33.5 参照\n データ型の判定にはこちらの関数を使用しています。\n\nReturn to Function reference.", + "crumbs": [ + "building_block", + "33  データ型による引数のアサーション" + ] + }, + { + "objectID": "man/is_dtype.html", + "href": "man/is_dtype.html", + "title": "34  データ型を判定する論理関数", + "section": "", + "text": "34.1 building_block.is_character() building_block.is_logical() building_block.is_numeric() building_block.is_integer() building_block.is_float()", + "crumbs": [ + "building_block", + "34  データ型を判定する論理関数" + ] + }, + { + "objectID": "man/is_dtype.html#概要", + "href": "man/is_dtype.html#概要", + "title": "34  データ型を判定する論理関数", + "section": "34.2 概要", + "text": "34.2 概要\n 代入された値、あるいはリストの要素が特定のデータ型であるかどうかを判定する関数です。基本的には pandas.api.types.is_*() 関数のラッパー関数で、命名規則はR言語の同種の関数に基づいています。\nis_character(x)\n\nis_logical(x)\n\nis_numeric(x)\n\nis_integer(x)\n\nis_float(x)", + "crumbs": [ + "building_block", + "34  データ型を判定する論理関数" + ] + }, + { + "objectID": "man/is_dtype.html#引数-argument", + "href": "man/is_dtype.html#引数-argument", + "title": "34  データ型を判定する論理関数", + "section": "34.3 引数 Argument", + "text": "34.3 引数 Argument\n\nx(必須)array, list, or pd.Series", + "crumbs": [ + "building_block", + "34  データ型を判定する論理関数" + ] + }, + { + "objectID": "man/is_dtype.html#返り値-value", + "href": "man/is_dtype.html#返り値-value", + "title": "34  データ型を判定する論理関数", + "section": "34.4 返り値 Value", + "text": "34.4 返り値 Value\n引数 x が次の型であるときに、True を返します。\n\nis_character():str\nis_logical():bool\nis_numeric():int, float or bool\nis_integer():int or bool\nis_float():float", + "crumbs": [ + "building_block", + "34  データ型を判定する論理関数" + ] + }, + { + "objectID": "man/is_dtype.html#使用例-examples", + "href": "man/is_dtype.html#使用例-examples", + "title": "34  データ型を判定する論理関数", + "section": "34.5 使用例 Examples", + "text": "34.5 使用例 Examples\nfrom py4stats import building_block as build\nx_str = ['A', 'B']\nx_bool = [True, False, True]\nx_int = [1, 2, 3]\nx_float = [0, 1, 2.1, 0.5]\nx_list = [x_str, x_bool, x_int, x_float]\n\nprint([build.is_character(x) for x in x_list])\n#> [True, False, False, False]\n\nprint([build.is_logical(x) for x in x_list])\n#> [False, True, False, False]\n\nprint([build.is_numeric(x) for x in x_list])\n#> [False, True, True, True]\n\nprint([build.is_integer(x) for x in x_list])\n#> [False, False, True, False]\n\nprint([build.is_float(x) for x in x_list])\n#> [False, False, False, True]\n\nReturn to Function reference.", + "crumbs": [ + "building_block", + "34  データ型を判定する論理関数" + ] + }, + { + "objectID": "man/miscellaneous.html", + "href": "man/miscellaneous.html", + "title": "35  数字のフォーマットを変更する関数", + "section": "", + "text": "35.1 概要", + "crumbs": [ + "building_block", + "35  数字のフォーマットを変更する関数" + ] + }, + { + "objectID": "man/miscellaneous.html#概要", + "href": "man/miscellaneous.html#概要", + "title": "35  数字のフォーマットを変更する関数", + "section": "", + "text": "style_number(x, digits = 2, big_mark = ',')\n\nstyle_currency(x, symbol = '$', digits = 0, big_mark = ',')\n\nstyle_percent(x, digits = 2, unit = 100, symbol = '%')", + "crumbs": [ + "building_block", + "35  数字のフォーマットを変更する関数" + ] + }, + { + "objectID": "man/miscellaneous.html#引数-argument", + "href": "man/miscellaneous.html#引数-argument", + "title": "35  数字のフォーマットを変更する関数", + "section": "35.2 引数 Argument", + "text": "35.2 引数 Argument\n\nx:scalar or array-like of int or float\np_value:scalar or array-like of int or float\ndigits:int 小数点以下の桁数\nbig_mark:int 3桁毎の桁区切りに使用する記号。カンマ ',', アンダーバー '_', もしくは 非表示 '' から選ぶことができます。\nsymbol:str  貨幣記号を表す文字列", + "crumbs": [ + "building_block", + "35  数字のフォーマットを変更する関数" + ] + }, + { + "objectID": "man/miscellaneous.html#返り値-value", + "href": "man/miscellaneous.html#返り値-value", + "title": "35  数字のフォーマットを変更する関数", + "section": "35.3 返り値 Value", + "text": "35.3 返り値 Value\n 以下の値をもつ pd.Series を返します。\n\nbuilding_block.style_number(): 任意の数値に対して、小数点以下を桁数 digits に丸め、3桁区切り記号を通過した値を文字列として返します。f-string によるフォーマット f'{x:{big_mark}.{digits}f}' を用いて実装されています。\nbuilding_block.style_currency(): build.style_number() と同じく任意の数値に対して、小数点以下を桁数 digits に丸め、3桁区切り記号を通過した値を文字列として返しますが、さらに貨幣記号を追加します。f-string によるフォーマット f'{symbol}{x:{big_mark}.{digits}f}' を用いて実装されています。\nbuilding_block.style_percent(): 任意の数値をパーセンテージ表示に変換した値を文字列として返します。f-string によるフォーマット f'{x:,.{digits}%}' を用いて実装されています。", + "crumbs": [ + "building_block", + "35  数字のフォーマットを変更する関数" + ] + }, + { + "objectID": "man/miscellaneous.html#使用例-examples", + "href": "man/miscellaneous.html#使用例-examples", + "title": "35  数字のフォーマットを変更する関数", + "section": "35.4 使用例 Examples", + "text": "35.4 使用例 Examples\nimport numpy as np\nfrom py4stats import building_block as build\n\nx = [2000, 1000, 0.5, 0.11, 0.123]\n\nprint(build.style_number(x).to_list())\n#> ['2,000.00', '1,000.00', '0.50', '0.11', '0.12']\n\nprint(build.style_number(x, big_mark = '').to_list())\n#> ['2000.00', '1000.00', '0.50', '0.11', '0.12']\n\nprint(build.style_currency(x).to_list())\n#> ['$2,000', '$1,000', '$0', '$0', '$0']\npct = [0.11, 0.06, 0.05, 0.01, 0.00234]\n\nprint(build.style_percent(pct).to_list())\n#> ['11.00%', '6.00%', '5.00%', '1.00%', '0.23%']\n\nprint(build.style_percent(pct, unit = 1).to_list())\n#> ['0.11%', '0.06%', '0.05%', '0.01%', '0.00%']\n\nprint(build.style_percent(pct, unit = 1000, symbol = '‰').to_list())\n#> ['110.00‰', '60.00‰', '50.00‰', '10.00‰', '2.34‰']\n\nReturn to Function reference.", + "crumbs": [ + "building_block", + "35  数字のフォーマットを変更する関数" + ] + }, + { + "objectID": "man/style_pvalue.html", + "href": "man/style_pvalue.html", + "title": "36  p-値のフォーマットを変更する関数", + "section": "", + "text": "36.1 概要\nR言語の style_pvalue() と gtools::stars.pval() をオマージュした関数でp-値を見やすい形のフォーマットに変換します。", + "crumbs": [ + "building_block", + "36  p-値のフォーマットを変更する関数" + ] + }, + { + "objectID": "man/style_pvalue.html#概要", + "href": "man/style_pvalue.html#概要", + "title": "36  p-値のフォーマットを変更する関数", + "section": "", + "text": "style_pvalue(\n p_value: ArrayLike,\n digits: int = 3,\n prepend_p: bool = False,\n p_min: float = 0.001,\n p_max: float = 0.9\n )\n\np_stars(\n p_value, \n stars = {'***':0.01, '**':0.05, '*':0.1}\n )", + "crumbs": [ + "building_block", + "36  p-値のフォーマットを変更する関数" + ] + }, + { + "objectID": "man/style_pvalue.html#引数-argument", + "href": "man/style_pvalue.html#引数-argument", + "title": "36  p-値のフォーマットを変更する関数", + "section": "36.2 引数 Argument", + "text": "36.2 引数 Argument\n\np_value:scalar or array-like of int or float\ndigits:int(style_pvalue() のみ)  小数点以下の桁数\nprepend_p:bool(style_pvalue() のみ)  出区力に接頭辞 ’p’ を追加するかどうかを表す論理値。False であれば追加されず、True であれば追加されます。\np_min:int(style_pvalue() のみ)  p-値を実数値で表示する最小値。p_value がこの値を下回る場合、’<p_min’ もしくは ’p<p_min’ の形で表示されます。\np_max:int(style_pvalue() のみ)  p-値を実数値で表示する最大値。p_value がこの値を下回る場合、’>p_max’ もしくは ’p>p_max’ の形で表示されます。\nstars:dict(p_stars() のみ)  有意性を示す記号を key に、表示を切り替える閾値を値(value)にもつ辞書オブジェクト。初期設定の stars = None の場合、{'***': 0.01, '**': 0.05, '*': 0.1} が使用されます。詳細は下記を参照して下さい。", + "crumbs": [ + "building_block", + "36  p-値のフォーマットを変更する関数" + ] + }, + { + "objectID": "man/style_pvalue.html#返り値-value", + "href": "man/style_pvalue.html#返り値-value", + "title": "36  p-値のフォーマットを変更する関数", + "section": "36.3 返り値 Value", + "text": "36.3 返り値 Value\n フォーマットされたp-値を表す pd.Series を出力します。building_block.style_pvalue() では引数 p_value に与えられた数値を指定された桁数に丸めた値を表示し、指定された範囲を外れる値については ’<p_min’ や ’>p_max’の書式にへんかんします。  building_block.p_stars()では仮説検定の有意性を示すアスタリスク*` に変換します。初期設定ではアスタリスクはp-値の値に応じて次のように表示されます。\n\np ≤ 0.1 *\np ≤ 0.05 **\np ≤ 0.01 ***\np > 0.1 表示なし", + "crumbs": [ + "building_block", + "36  p-値のフォーマットを変更する関数" + ] + }, + { + "objectID": "man/style_pvalue.html#使用例-examples", + "href": "man/style_pvalue.html#使用例-examples", + "title": "36  p-値のフォーマットを変更する関数", + "section": "36.4 使用例 Examples", + "text": "36.4 使用例 Examples\n\nfrom py4stats import building_block as build\np_value = [\n 0.999, 0.5028, 0.2514, 0.197, 0.10, \n 0.0999, 0.06, 0.03, 0.002, 0.0002\n ]\n\nprint(build.style_pvalue(p_value).to_list())\n#> ['>0.9', '0.503', '0.251', '0.197', '0.1', '0.1', '0.06', '0.03', '0.002', '<0.001']\n\nprint(build.style_pvalue(p_value, prepend_p = True).to_list())\n#> ['p>0.9', 'p=0.503', 'p=0.251', 'p=0.197', 'p=0.1', 'p=0.1', 'p=0.06', 'p=0.03', 'p=0.002', 'p<0.001']\n\nprint(build.p_stars(p_value).to_list())\n#> ['', '', '', '', '*', '*', '*', '**', '***', '***']\n\n# R言語の stats::summary.lm() や gtools::stars.pval() を再現する場合。\nstars_dict = {'***':0.001, '**':0.01, '*': 0.05, '.':0.1}\nprint(build.p_stars(p_value, stars = stars_dict).to_list())\n#> ['', '', '', '', '.', '.', '.', '*', '**', '***']\n\nReturn to Function reference.", + "crumbs": [ + "building_block", + "36  p-値のフォーマットを変更する関数" + ] + }, + { + "objectID": "man/oxford_comma.html", + "href": "man/oxford_comma.html", + "title": "37  並列文の作成 oxford_comma()", + "section": "", + "text": "37.1 概要\n文字列のリストを与えると、リストの要素を英文における並列文の形に変換する関数です。表記法については Wikipedia Serial comma を参照し、コードについては stack overflow:Grammatical List Join in Python [duplicate] を参照しました。", + "crumbs": [ + "building_block", + "37  並列文の作成 `oxford_comma()`" + ] + }, + { + "objectID": "man/oxford_comma.html#概要", + "href": "man/oxford_comma.html#概要", + "title": "37  並列文の作成 oxford_comma()", + "section": "", + "text": "oxford_comma(x, sep_last = 'and', quotation = True)\n\noxford_comma_and(x, quotation = True)\n\noxford_comma_or(x, quotation = True)", + "crumbs": [ + "building_block", + "37  並列文の作成 `oxford_comma()`" + ] + }, + { + "objectID": "man/oxford_comma.html#引数", + "href": "man/oxford_comma.html#引数", + "title": "37  並列文の作成 oxford_comma()", + "section": "37.2 引数", + "text": "37.2 引数\n\nx:str or list of str\nquotation: bool  リストの各要素にクオーテーションマーク ’’ を追加するかどうかを表す論理値。True(初期設定)であればクオーテーションマークを追加し、False であれば追加しません。\nsep_last: str oxford_comma() のみ  リストの最後の要素の直前に付加する単語を表す文字列。\n\nなお、oxford_comma_and(x) は oxford_comma(x, 'and') と、oxford_comma_or(x) は oxford_comma(x, 'or') と同等です。", + "crumbs": [ + "building_block", + "37  並列文の作成 `oxford_comma()`" + ] + }, + { + "objectID": "man/oxford_comma.html#使用例", + "href": "man/oxford_comma.html#使用例", + "title": "37  並列文の作成 oxford_comma()", + "section": "37.3 使用例", + "text": "37.3 使用例\nfrom py4stats import building_block as build\nx = ['A', 'B', 'C']\n\nprint(build.oxford_comma_and(x))\n#> 'A', 'B' and 'C'\n\nprint(build.oxford_comma_and(x, quotation = False))\n#> A, B and C\n\nprint(build.oxford_comma_or(x))\n#> 'A', 'B' or 'C'\nリストの要素が1つの場合、あるいは x に文字列が指定された場合はカンマなどを追加せずにそのまま出力します。\nprint(build.oxford_comma_or(['A']))\n#> 'A'\n\nprint(build.oxford_comma_or('A'))\n#> 'A'\n\nReturn to Function reference.", + "crumbs": [ + "building_block", + "37  並列文の作成 `oxford_comma()`" + ] + }, + { + "objectID": "articles/narwhals_in_py4stats.html", + "href": "articles/narwhals_in_py4stats.html", + "title": "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装", + "section": "", + "text": "38.1 概要\npy4stats.eda_tools モジュールは、複数の DataFrame バックエンドに対して共通の API を提供することを目的として、narwhals ライブラリを用いて実装されています。\n本ドキュメントでは、本モジュールの内部実装に関する前提条件や、バックエンドの違いに起因する挙動上の注意点について説明します。\n通常の利用にあたって本ドキュメントを読む必要はありませんが、実装の詳細や挙動の違いが気になる場合には参考にしてください。", + "crumbs": [ + "articles", + "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装" + ] + }, + { + "objectID": "articles/narwhals_in_py4stats.html#対応している-dataframe-バックエンドについて", + "href": "articles/narwhals_in_py4stats.html#対応している-dataframe-バックエンドについて", + "title": "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装", + "section": "38.2 対応している DataFrame バックエンドについて", + "text": "38.2 対応している DataFrame バックエンドについて\n py4stats.eda_tools モジュールの関数は、第一引数として narwhals.from_native() によって nw.DataFrame 型へ変換可能な DataFrame オブジェクトを受け取ります。\n具体的には、以下のようなバックエンドを想定しています。\n\npandas.DataFrame(主に動作検証を行っているバックエンド)\npolars.DataFrame(簡易的な動作確認のみ)\npyarrow.Table(簡易的な動作確認のみ)\n\n本ライブラリの動作確認は、基本的に pandas.DataFrame を用いて実施しています。そのため、polars や pyarrow を使用した場合には、バックエンド固有の仕様差や未検証の挙動により、一部の関数でエラーが発生する可能性があります。そのような挙動が確認された場合は、Issue 等での報告を歓迎します。\n また、バックエンド別の実装状況については eda_tools開発状況 も参照して下さい。", + "crumbs": [ + "articles", + "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装" + ] + }, + { + "objectID": "articles/narwhals_in_py4stats.html#narwhals-を用いた関数の返り値の型について", + "href": "articles/narwhals_in_py4stats.html#narwhals-を用いた関数の返り値の型について", + "title": "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装", + "section": "38.3 narwhals を用いた関数の返り値の型について", + "text": "38.3 narwhals を用いた関数の返り値の型について\npy4stats.eda_tools モジュールの関数のうち、py4stats.diagnose() など、第一引数にデータフレームを取る関数の返り値の型は、to_native 引数の値によって変化します。  初期設定である to_nativ = True の場合には、第一引数に入力されたデータフレームと同じ型のデータフレームが出力され、to_nativ = False の場合には narwhals.DataFrame 型のデータフレームが出力されます。to_nativ = False のオプションは、主にライブラリ内部での利用や、データフレームのバックエンドに依存しない後続処理を行いたい場合を想定したオプションです。\nimport py4stats as py4st\nimport pandas as pd\nimport polars as pl\nimport pyarrow as pa\nimport wooldridge\nmroz_pd = wooldridge.data('mroz') # pd.DataFrame\nmroz_pl = pl.from_pandas(mroz_pd) # pl.DataFrame\nmroz_pa = pa.Table.from_pandas(mroz_pd) # pyarrow.lib.Table\n# to_nativ = True の場合(初期設定): 入力されたデータフレームと同じ型\n\nprint(type(py4st.diagnose(mroz_pd, to_native = True)))\n#> <class 'pandas.core.frame.DataFrame'>\n\nprint(type(py4st.diagnose(mroz_pl, to_native = True)))\n#> <class 'polars.dataframe.frame.DataFrame'>\n\nprint(type(py4st.diagnose(mroz_pa, to_native = True)))\n#> <class 'pyarrow.lib.Table'>\n# to_nativ = False の場合: narwhals.DataFrame 型\n\nprint(type(py4st.diagnose(mroz_pd, to_native = False)))\n#> <class 'narwhals.dataframe.DataFrame'>\n\nprint(type(py4st.diagnose(mroz_pl, to_native = False)))\n#> <class 'narwhals.dataframe.DataFrame'>\n\nprint(type(py4st.diagnose(mroz_pa, to_native = False)))\n#> <class 'narwhals.dataframe.DataFrame'>", + "crumbs": [ + "articles", + "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装" + ] + }, + { + "objectID": "articles/narwhals_in_py4stats.html#narwhals-を用いた実装方針について", + "href": "articles/narwhals_in_py4stats.html#narwhals-を用いた実装方針について", + "title": "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装", + "section": "38.4 narwhals を用いた実装方針について", + "text": "38.4 narwhals を用いた実装方針について\n 内部実装では、関数の冒頭で\nnw.from_native(data)\nを用いて入力データを nw.DataFrame に変換し、以降の処理を narwhals の抽象 API 上で行っています。\nこの設計により、DataFrame バックエンドごとの差異を最小限に抑えつつ、将来的な拡張性を確保することを目的としています。\n一方で、narwhals は各バックエンドの完全な互換性を保証するものではないため、特定の操作や型変換についてはバックエンドごとに挙動が異なる場合があります。", + "crumbs": [ + "articles", + "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装" + ] + }, + { + "objectID": "articles/narwhals_in_py4stats.html#pandas_flavor-を用いた-dataframe-メソッド登録について", + "href": "articles/narwhals_in_py4stats.html#pandas_flavor-を用いた-dataframe-メソッド登録について", + "title": "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装", + "section": "38.5  pandas_flavor を用いた DataFrame メソッド登録について", + "text": "38.5  pandas_flavor を用いた DataFrame メソッド登録について\npy4stats.eda_tools の関数のうち、単一の DataFrame オブジェクトを引数として受け取る関数については、pandas_flavor.register_dataframe_method を用いて DataFrame メソッドとして登録されています。その結果、以下のような使い方が可能です。\ndf.diagnose()\nただし、pandas_flavor は pandas の拡張を前提とした仕組みであるため、このメソッド形式の呼び出しは、pandas.DataFrame を対象としています。  polars.DataFrame や pyarrow ベースのオブジェクトを使用する場合には、関数として直接呼び出す形での利用を推奨します。\nimport py4stats as py4st\n\npy4st.diagnose(df)", + "crumbs": [ + "articles", + "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装" + ] + }, + { + "objectID": "articles/narwhals_in_py4stats.html#今後について", + "href": "articles/narwhals_in_py4stats.html#今後について", + "title": "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装", + "section": "38.6 今後について", + "text": "38.6 今後について\n py4stats.eda_tools モジュールは、今後も narwhals ベースの実装を主軸として改良・拡張を行っていく予定です。一方で、従来の pandas ベースの実装については、互換性のために当面は保持される予定ですが、機能追加は行わない予定です。バックエンドごとの挙動差や制限事項については、必要に応じて本ドキュメントを更新していきます。", + "crumbs": [ + "articles", + "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装" + ] + }, + { + "objectID": "articles/eda_tools_development_status.html", + "href": "articles/eda_tools_development_status.html", + "title": "39  eda_toolsの開発状況", + "section": "", + "text": "39.1 凡例\n2026年1月22日\neda_toolsの開発状況", + "crumbs": [ + "articles", + "39  eda_toolsの開発状況" + ] + }, + { + "objectID": "articles/eda_tools_development_status.html#凡例", + "href": "articles/eda_tools_development_status.html#凡例", + "title": "39  eda_toolsの開発状況", + "section": "", + "text": "✅ 実装済/テスト済\n⭕️ 実装済/テスト済(異なるバックエンドに依存)\n🔼 実装済/テスト未\n❌ 未実装", + "crumbs": [ + "articles", + "39  eda_toolsの開発状況" + ] + }, + { + "objectID": "articles/narwhalsについての考察.html", + "href": "articles/narwhalsについての考察.html", + "title": "40  narwhals についての考察", + "section": "", + "text": "40.1 narwhals での再現が難しい Pandas の機能", + "crumbs": [ + "articles", + "40  narwhals についての考察" + ] + }, + { + "objectID": "articles/narwhalsについての考察.html#narwhals-での再現が難しい-pandas-の機能", + "href": "articles/narwhalsについての考察.html#narwhals-での再現が難しい-pandas-の機能", + "title": "40  narwhals についての考察", + "section": "", + "text": "40.1.1 異なるデータフレーム間の二項演算\nPandas の場合、2つのデータフレーム df1 と df2 が共通の columns と index をもつ限り、df3 = df1 + df2 によって二項演算を行うことができ、このとき、columns と index をもつ要素同士が加算されます。しかし、narwhals には Pandas のような index が存在しないため、この計算は再現が困難です。\n\n\n40.1.2 データフレームへの値の代入\nPandas の場合、df.loc[i, j] = x という形でデータフレーム df の i, j 要素に値 x を代入することができますが、narwhals ではこれに相当する演算 df[i, j] = x は禁止されています。\n異なるデータフレーム間の二項演算に制約があること、そしてデータフレームへの値の代入が難しいことから、tabyl() 関数では、集計後の作表処理の一部を Pandas に依存しています。\n\n\n40.1.3 任意の関数でグループ別集計を行う\n自作関数を使ってグループ別集計を行いたい場合、Pandas であれば df.groupby(group)[x].agg(my_func) で行うことができます。同じく narwhals でも\ndata_nw.group_by(nw.col(group)).agg(nw.col('x').mean())\nという形でグループ別の集計がサポートされているものの、ここで使用できる集計関数は narwhals で実装されているものに限定されるようで、次のような方法で自作関数を使用することはできません。\ndata_nw.group_by(nw.col(group)).agg(nw.col('x').my_func())\ndata_nw.group_by(nw.col(group)).agg(my_func(nw.col('x')))\n例えば Py4Stats では、Pareto_plot() 関数の内部実装に使用している make_rank_table() 関数において、任意の aggfunc() 関数をグループ別集計に使うために、サブセッティングを使って group_by() メソッドの使用を回避するという変則的(かつ、おそらく非効率な)な実装を行なっています。\nstat_values = [\n aggfunc(\n data_nw.filter(nw.col(group) == g)[values]\n .drop_nulls().to_native()\n ) \n for g in group_value\n ]\nまた、上記の回避策のもう1つの問題として、data_nw.filter(nw.col(group) == g) では、複数の変数に基づくグループ化に対応できないことも挙げられます。make_rank_table() 関数については、Pareto_plot() 関数でパレート図を作図するときに横軸になる group が多変数だと対応できないので、group が1変数(= 引数として1つの文字列だけを受け付ける)とすることで妥協しています。\nただ、現時点で narwhals.GroupBy クラスに実装されているメソッドは .agg() しかなく、開発が進めばより柔軟な関数適用が可能になるのではないかと期待しています。", + "crumbs": [ + "articles", + "40  narwhals についての考察" + ] + }, + { + "objectID": "articles/narwhalsについての考察.html#narwhals-におけるバックエンドとその書き換え", + "href": "articles/narwhalsについての考察.html#narwhals-におけるバックエンドとその書き換え", + "title": "40  narwhals についての考察", + "section": "40.2 narwhals におけるバックエンドとその書き換え", + "text": "40.2 narwhals におけるバックエンドとその書き換え\n\n40.2.1 バックエンドの基本的な理解\nnarwhals におけるバックエンドによる型変換の基本的な理解として(不正確かもしれませんが)、nw.from_native(data) の実行時に data の型に応じて backend が記録され、.to_native() メソッドを呼び出すと、記録された backend に応じて元の型に変換されます。\nbackend の情報は .select() .filter() などのメソッドを使って data_nw を加工しても保持され、これによって入力された input_pd と同じ型のデータフレームを返すことが可能になっています。\ndata_nw = nw.from_native(input_pd) # ここで backend が記録される\ndata_nw.implementation # -> Pandas\nresult = data_nw.to_native() # -> pd.DataFrame が出力される\n一方で、処理の途中で pd.DataFrame や pl.DataFrame などの native オブジェクトを経由した場合、改めて nw.from_native() を使って nw.DataFrame に変換し直したとしても、その時点で backend が上書きされるので、.to_native() メソッドを使用しても引数として入力された input_pd と同じ型に復元される保証はありません。\ndata_nw = nw.from_native(input_pd) # ここで backend が記録される\ndata_nw2 = nw.from_native(data_nw.to_polars()) # ここで backend が上書きされる\ndata_nw2.implementation # -> polars\nresult = data_nw2.to_native() # -> pl.DataFrame が出力される\n従って、result が input_pd と同じ型をもつことを保証するには、data_nw を nw.DataFrame クラスのまま維持する(≒ narwhals ベースのメソッドだけで処理を書く)必要があり、これが narwhals ベースの実装としてのあるべき姿だと思われます。\n一方で、一部の処理が特定のバックエンド(e.g. Pandas)に依存している場合にはどうするべきでしょうか。これには次のような2つの選択肢があると考えています。\n\n処理が依存しているバックエンドのオブジェクト(e.g. pd.DataFrame)として出力する〔推奨〕\nnarwhals の仕様を迂回してバックエンドを書き換える〔非推奨ですが次節で考察〕\n\nこれら2つの可能性の間での選択は、技術的な問題であると同時にユーザーとのコミュニケーションの問題です。入力と同型のデータフレームを返す関数の中に pd.DataFrame を返す関数が混ざっていることをユーザーにどう説明するのか。あるいは、narwhals の仕様を迂回をしたことで非効率性やカラムレベルでデータ型(dtype)の一貫性が失われる問題が生じたとして、それをユーザーにどう説明するのか、という問いです。\n\n\n40.2.2 バックエンドの書き換え (非推奨)\nいま、some_computation() として実装された処理の一部が Pandas に依存しており、結果が result_pd という pd.DataFrame 型のオブジェクトとして得られているとします。このとき、result_pd をもとのデータフレーム data_pl と同型にする方法の1つとして、result_pd を pd.Series.to_dict() などを使って辞書のリスト(list of dict)に変換したのち、nw.from_dicts() を使って data_pl と同じバックエンドをもつ nw.DataFrame に変換するという方法があります。\n以上の変換の実例を見てみましょう。まずは、data_pl\ndata_pl = pl.from_pandas(load_penguins())[:10, :2]\n\ndata_pl = data_pl.with_columns(\n pl.all().cast(pl.Categorical)\n )\nprint(type(data_pl))\n#> <class 'polars.dataframe.frame.DataFrame'>\nprint(data_pl.schema)\n#> Schema({'species': Categorical, 'island': Categorical})\n\ndata_nw_pl = nw.from_native(data_pl) # ここでバックエンドを記録、後ほど復元に使います。\n\n# 何かしらの処理の結果 pd.DataFrame に変換されたとする\nresult_pd = data_nw_pl.to_pandas()\nprint(type(result_pd))\n#> <class 'pandas.core.frame.DataFrame'>\n次に、pl.DataFrame 型をもつ result_pd を pl.DataFrame に変換します。\nここでポイントとなるのが、nw.from_dicts() 関数の引数の (1)schema 引数と、(2)backend引数に、それぞれ data_nw_pl から取得した値を入力することで、result_pl の列が data_pl と同じく Categorical 型になるようにしています(指定しないと String 型として解釈されてしまいます)。\n# Pandas -> polars の変換\ndict_list = [result_pd.loc[i, :].to_dict() for i in result_pd.index]\n\nresult_nw_pl = nw.from_dicts(\n dict_list, \n schema = data_nw_pl.schema, # (1)\n backend = data_nw_pl.implementation # (2)\n )\nresult_pl = result_nw_pl.to_native()\n\nprint(type(result_pl))\n#> <class 'polars.dataframe.frame.DataFrame'>\n\nprint(result_pl.schema)\n#> Schema({'species': Categorical, 'island': Categorical})\nまた、Series については、nw.Series.from_iterable() 関数を使うことで、次のようにバックエンドを書き換えることができます。\nx_pl = data_pl['island']\nprint(type(x_pl))\n#> <class 'polars.series.series.Series'>\nprint(x_pl.dtype)\n#> Categorical\n\nx_nw = nw.from_native(x_pl, allow_series = True)\nx_pd = x_nw.to_pandas()\nprint(type(x_pd))\n#> <class 'pandas.core.series.Series'>\nx_pl2 = nw.Series.from_iterable(\n name = x_pd.name,\n values = x_pd.to_list(),\n backend = x_nw.implementation,\n dtype = x_nw.dtype\n).to_native()\n\nprint(type(x_pl2))\n#> <class 'polars.series.series.Series'>\nprint(x_pl2.dtype)\n#> Categorical\nnarwhals の仕様を迂回してバックエンドを書き換えることは可能ですが、この方法には次のような問題があります。 ただし、以上のような方法でバックエンドの書き換えは可能ですが、\n\n小さいデータフレームでない限り時間がかかる\n\n恐らく、dict_list を作成するための for ループによるもの\n\n上記の (1) に代入する正しい schema が用意できないと、カラムレベルでデータ型の一貫性保証できない。\n\n特に2番目の問題点については、集計処理によって列名が変わった場合には正しい schema(≒ {列名:dtype} の辞書オブジェクト)を用意することが難しくなります。そして、schema を指定できないと、pd.Categorical、pl.Categorical あるいは pl.Enum といったカテゴリー変数は文字列型に変換されてしまい、データ型の一貫性が失われます。\nカラムレベルで型の一貫性が失われると、返り値が入力値とは異なる型になるよりも把握しづらく、また挙動の予測が難しいため、上記のような処理は採用するとしても、他に方法がないときの最終手段として扱うべきでしょう。", + "crumbs": [ + "articles", + "40  narwhals についての考察" + ] + } +] \ No newline at end of file diff --git a/docs/docs/site_libs/bootstrap/bootstrap-322e28c2ea576fd4147837fb8c5b7a3d.min.css b/docs/docs/site_libs/bootstrap/bootstrap-322e28c2ea576fd4147837fb8c5b7a3d.min.css new file mode 100644 index 0000000..cd9146c --- /dev/null +++ b/docs/docs/site_libs/bootstrap/bootstrap-322e28c2ea576fd4147837fb8c5b7a3d.min.css @@ -0,0 +1,12 @@ +/*! + * Bootstrap v5.3.1 (https://getbootstrap.com/) + * Copyright 2011-2023 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */@import"https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@300;400;700&display=swap";:root,[data-bs-theme=light]{--bs-blue: #2780e3;--bs-indigo: #6610f2;--bs-purple: #613d7c;--bs-pink: #e83e8c;--bs-red: #ff0039;--bs-orange: #f0ad4e;--bs-yellow: #ff7518;--bs-green: #3fb618;--bs-teal: #20c997;--bs-cyan: #9954bb;--bs-black: #000;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-default: #343a40;--bs-primary: #2780e3;--bs-secondary: #343a40;--bs-success: #3fb618;--bs-info: #9954bb;--bs-warning: #ff7518;--bs-danger: #ff0039;--bs-light: #f8f9fa;--bs-dark: #343a40;--bs-default-rgb: 52, 58, 64;--bs-primary-rgb: 39, 128, 227;--bs-secondary-rgb: 52, 58, 64;--bs-success-rgb: 63, 182, 24;--bs-info-rgb: 153, 84, 187;--bs-warning-rgb: 255, 117, 24;--bs-danger-rgb: 255, 0, 57;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 52, 58, 64;--bs-primary-text-emphasis: rgb(15.6, 51.2, 90.8);--bs-secondary-text-emphasis: rgb(20.8, 23.2, 25.6);--bs-success-text-emphasis: rgb(25.2, 72.8, 9.6);--bs-info-text-emphasis: rgb(61.2, 33.6, 74.8);--bs-warning-text-emphasis: rgb(102, 46.8, 9.6);--bs-danger-text-emphasis: rgb(102, 0, 22.8);--bs-light-text-emphasis: #495057;--bs-dark-text-emphasis: #495057;--bs-primary-bg-subtle: rgb(211.8, 229.6, 249.4);--bs-secondary-bg-subtle: rgb(214.4, 215.6, 216.8);--bs-success-bg-subtle: rgb(216.6, 240.4, 208.8);--bs-info-bg-subtle: rgb(234.6, 220.8, 241.4);--bs-warning-bg-subtle: rgb(255, 227.4, 208.8);--bs-danger-bg-subtle: rgb(255, 204, 215.4);--bs-light-bg-subtle: rgb(251.5, 252, 252.5);--bs-dark-bg-subtle: #ced4da;--bs-primary-border-subtle: rgb(168.6, 204.2, 243.8);--bs-secondary-border-subtle: rgb(173.8, 176.2, 178.6);--bs-success-border-subtle: rgb(178.2, 225.8, 162.6);--bs-info-border-subtle: rgb(214.2, 186.6, 227.8);--bs-warning-border-subtle: rgb(255, 199.8, 162.6);--bs-danger-border-subtle: rgb(255, 153, 175.8);--bs-light-border-subtle: #e9ecef;--bs-dark-border-subtle: #adb5bd;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-font-sans-serif: "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-root-font-size: 17px;--bs-body-font-family: "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--bs-body-font-size:1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #343a40;--bs-body-color-rgb: 52, 58, 64;--bs-body-bg: #fff;--bs-body-bg-rgb: 255, 255, 255;--bs-emphasis-color: #000;--bs-emphasis-color-rgb: 0, 0, 0;--bs-secondary-color: rgba(52, 58, 64, 0.75);--bs-secondary-color-rgb: 52, 58, 64;--bs-secondary-bg: #e9ecef;--bs-secondary-bg-rgb: 233, 236, 239;--bs-tertiary-color: rgba(52, 58, 64, 0.5);--bs-tertiary-color-rgb: 52, 58, 64;--bs-tertiary-bg: #f8f9fa;--bs-tertiary-bg-rgb: 248, 249, 250;--bs-heading-color: inherit;--bs-link-color: #2761e3;--bs-link-color-rgb: 39, 97, 227;--bs-link-decoration: underline;--bs-link-hover-color: rgb(31.2, 77.6, 181.6);--bs-link-hover-color-rgb: 31, 78, 182;--bs-code-color: #7d12ba;--bs-highlight-bg: rgb(255, 227.4, 208.8);--bs-border-width: 1px;--bs-border-style: solid;--bs-border-color: #dee2e6;--bs-border-color-translucent: rgba(0, 0, 0, 0.175);--bs-border-radius: 0.25rem;--bs-border-radius-sm: 0.2em;--bs-border-radius-lg: 0.5rem;--bs-border-radius-xl: 1rem;--bs-border-radius-xxl: 2rem;--bs-border-radius-2xl: var(--bs-border-radius-xxl);--bs-border-radius-pill: 50rem;--bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width: 0.25rem;--bs-focus-ring-opacity: 0.25;--bs-focus-ring-color: rgba(39, 128, 227, 0.25);--bs-form-valid-color: #3fb618;--bs-form-valid-border-color: #3fb618;--bs-form-invalid-color: #ff0039;--bs-form-invalid-border-color: #ff0039}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color: #dee2e6;--bs-body-color-rgb: 222, 226, 230;--bs-body-bg: #212529;--bs-body-bg-rgb: 33, 37, 41;--bs-emphasis-color: #fff;--bs-emphasis-color-rgb: 255, 255, 255;--bs-secondary-color: rgba(222, 226, 230, 0.75);--bs-secondary-color-rgb: 222, 226, 230;--bs-secondary-bg: #343a40;--bs-secondary-bg-rgb: 52, 58, 64;--bs-tertiary-color: rgba(222, 226, 230, 0.5);--bs-tertiary-color-rgb: 222, 226, 230;--bs-tertiary-bg: rgb(42.5, 47.5, 52.5);--bs-tertiary-bg-rgb: 43, 48, 53;--bs-primary-text-emphasis: rgb(125.4, 178.8, 238.2);--bs-secondary-text-emphasis: rgb(133.2, 136.8, 140.4);--bs-success-text-emphasis: rgb(139.8, 211.2, 116.4);--bs-info-text-emphasis: rgb(193.8, 152.4, 214.2);--bs-warning-text-emphasis: rgb(255, 172.2, 116.4);--bs-danger-text-emphasis: rgb(255, 102, 136.2);--bs-light-text-emphasis: #f8f9fa;--bs-dark-text-emphasis: #dee2e6;--bs-primary-bg-subtle: rgb(7.8, 25.6, 45.4);--bs-secondary-bg-subtle: rgb(10.4, 11.6, 12.8);--bs-success-bg-subtle: rgb(12.6, 36.4, 4.8);--bs-info-bg-subtle: rgb(30.6, 16.8, 37.4);--bs-warning-bg-subtle: rgb(51, 23.4, 4.8);--bs-danger-bg-subtle: rgb(51, 0, 11.4);--bs-light-bg-subtle: #343a40;--bs-dark-bg-subtle: #1a1d20;--bs-primary-border-subtle: rgb(23.4, 76.8, 136.2);--bs-secondary-border-subtle: rgb(31.2, 34.8, 38.4);--bs-success-border-subtle: rgb(37.8, 109.2, 14.4);--bs-info-border-subtle: rgb(91.8, 50.4, 112.2);--bs-warning-border-subtle: rgb(153, 70.2, 14.4);--bs-danger-border-subtle: rgb(153, 0, 34.2);--bs-light-border-subtle: #495057;--bs-dark-border-subtle: #343a40;--bs-heading-color: inherit;--bs-link-color: rgb(125.4, 178.8, 238.2);--bs-link-hover-color: rgb(151.32, 194.04, 241.56);--bs-link-color-rgb: 125, 179, 238;--bs-link-hover-color-rgb: 151, 194, 242;--bs-code-color: white;--bs-border-color: #495057;--bs-border-color-translucent: rgba(255, 255, 255, 0.15);--bs-form-valid-color: rgb(139.8, 211.2, 116.4);--bs-form-valid-border-color: rgb(139.8, 211.2, 116.4);--bs-form-invalid-color: rgb(255, 102, 136.2);--bs-form-invalid-border-color: rgb(255, 102, 136.2)}*,*::before,*::after{box-sizing:border-box}:root{font-size:var(--bs-root-font-size)}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:1px solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.325rem + 0.9vw)}@media(min-width: 1200px){h1,.h1{font-size:2rem}}h2,.h2{font-size:calc(1.29rem + 0.48vw)}@media(min-width: 1200px){h2,.h2{font-size:1.65rem}}h3,.h3{font-size:calc(1.27rem + 0.24vw)}@media(min-width: 1200px){h3,.h3{font-size:1.45rem}}h4,.h4{font-size:1.25rem}h5,.h5{font-size:1.1rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;-ms-text-decoration:underline dotted;-o-text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem;padding:.625rem 1.25rem;border-left:.25rem solid #e9ecef}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}a:hover{--bs-link-color-rgb: var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em;color:#000;background-color:#f8f9fa;line-height:1.5;padding:.5rem;border:1px solid var(--bs-border-color, #dee2e6)}pre code{background-color:rgba(0,0,0,0);font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:var(--bs-code-color);background-color:#f8f9fa;padding:.125rem .25rem;word-wrap:break-word}a>code{color:inherit}kbd{padding:.4rem .4rem;font-size:0.875em;color:#fff;background-color:#343a40}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:rgba(52,58,64,.75);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none !important}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + 0.3vw);line-height:inherit}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:0.875em;color:rgba(52,58,64,.75)}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-right:auto;margin-left:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}body.quarto-light .dark-content{display:none !important}body.quarto-dark .light-content{display:none !important}:root{--bs-breakpoint-xs: 0;--bs-breakpoint-sm: 576px;--bs-breakpoint-md: 768px;--bs-breakpoint-lg: 992px;--bs-breakpoint-xl: 1200px;--bs-breakpoint-xxl: 1400px}.grid{display:grid;grid-template-rows:repeat(var(--bs-rows, 1), 1fr);grid-template-columns:repeat(var(--bs-columns, 12), 1fr);gap:var(--bs-gap, 1.5rem)}.grid .g-col-1{grid-column:auto/span 1}.grid .g-col-2{grid-column:auto/span 2}.grid .g-col-3{grid-column:auto/span 3}.grid .g-col-4{grid-column:auto/span 4}.grid .g-col-5{grid-column:auto/span 5}.grid .g-col-6{grid-column:auto/span 6}.grid .g-col-7{grid-column:auto/span 7}.grid .g-col-8{grid-column:auto/span 8}.grid .g-col-9{grid-column:auto/span 9}.grid .g-col-10{grid-column:auto/span 10}.grid .g-col-11{grid-column:auto/span 11}.grid .g-col-12{grid-column:auto/span 12}.grid .g-start-1{grid-column-start:1}.grid .g-start-2{grid-column-start:2}.grid .g-start-3{grid-column-start:3}.grid .g-start-4{grid-column-start:4}.grid .g-start-5{grid-column-start:5}.grid .g-start-6{grid-column-start:6}.grid .g-start-7{grid-column-start:7}.grid .g-start-8{grid-column-start:8}.grid .g-start-9{grid-column-start:9}.grid .g-start-10{grid-column-start:10}.grid .g-start-11{grid-column-start:11}@media(min-width: 576px){.grid .g-col-sm-1{grid-column:auto/span 1}.grid .g-col-sm-2{grid-column:auto/span 2}.grid .g-col-sm-3{grid-column:auto/span 3}.grid .g-col-sm-4{grid-column:auto/span 4}.grid .g-col-sm-5{grid-column:auto/span 5}.grid .g-col-sm-6{grid-column:auto/span 6}.grid .g-col-sm-7{grid-column:auto/span 7}.grid .g-col-sm-8{grid-column:auto/span 8}.grid .g-col-sm-9{grid-column:auto/span 9}.grid .g-col-sm-10{grid-column:auto/span 10}.grid .g-col-sm-11{grid-column:auto/span 11}.grid .g-col-sm-12{grid-column:auto/span 12}.grid .g-start-sm-1{grid-column-start:1}.grid .g-start-sm-2{grid-column-start:2}.grid .g-start-sm-3{grid-column-start:3}.grid .g-start-sm-4{grid-column-start:4}.grid .g-start-sm-5{grid-column-start:5}.grid .g-start-sm-6{grid-column-start:6}.grid .g-start-sm-7{grid-column-start:7}.grid .g-start-sm-8{grid-column-start:8}.grid .g-start-sm-9{grid-column-start:9}.grid .g-start-sm-10{grid-column-start:10}.grid .g-start-sm-11{grid-column-start:11}}@media(min-width: 768px){.grid .g-col-md-1{grid-column:auto/span 1}.grid .g-col-md-2{grid-column:auto/span 2}.grid .g-col-md-3{grid-column:auto/span 3}.grid .g-col-md-4{grid-column:auto/span 4}.grid .g-col-md-5{grid-column:auto/span 5}.grid .g-col-md-6{grid-column:auto/span 6}.grid .g-col-md-7{grid-column:auto/span 7}.grid .g-col-md-8{grid-column:auto/span 8}.grid .g-col-md-9{grid-column:auto/span 9}.grid .g-col-md-10{grid-column:auto/span 10}.grid .g-col-md-11{grid-column:auto/span 11}.grid .g-col-md-12{grid-column:auto/span 12}.grid .g-start-md-1{grid-column-start:1}.grid .g-start-md-2{grid-column-start:2}.grid .g-start-md-3{grid-column-start:3}.grid .g-start-md-4{grid-column-start:4}.grid .g-start-md-5{grid-column-start:5}.grid .g-start-md-6{grid-column-start:6}.grid .g-start-md-7{grid-column-start:7}.grid .g-start-md-8{grid-column-start:8}.grid .g-start-md-9{grid-column-start:9}.grid .g-start-md-10{grid-column-start:10}.grid .g-start-md-11{grid-column-start:11}}@media(min-width: 992px){.grid .g-col-lg-1{grid-column:auto/span 1}.grid .g-col-lg-2{grid-column:auto/span 2}.grid .g-col-lg-3{grid-column:auto/span 3}.grid .g-col-lg-4{grid-column:auto/span 4}.grid .g-col-lg-5{grid-column:auto/span 5}.grid .g-col-lg-6{grid-column:auto/span 6}.grid .g-col-lg-7{grid-column:auto/span 7}.grid .g-col-lg-8{grid-column:auto/span 8}.grid .g-col-lg-9{grid-column:auto/span 9}.grid .g-col-lg-10{grid-column:auto/span 10}.grid .g-col-lg-11{grid-column:auto/span 11}.grid .g-col-lg-12{grid-column:auto/span 12}.grid .g-start-lg-1{grid-column-start:1}.grid .g-start-lg-2{grid-column-start:2}.grid .g-start-lg-3{grid-column-start:3}.grid .g-start-lg-4{grid-column-start:4}.grid .g-start-lg-5{grid-column-start:5}.grid .g-start-lg-6{grid-column-start:6}.grid .g-start-lg-7{grid-column-start:7}.grid .g-start-lg-8{grid-column-start:8}.grid .g-start-lg-9{grid-column-start:9}.grid .g-start-lg-10{grid-column-start:10}.grid .g-start-lg-11{grid-column-start:11}}@media(min-width: 1200px){.grid .g-col-xl-1{grid-column:auto/span 1}.grid .g-col-xl-2{grid-column:auto/span 2}.grid .g-col-xl-3{grid-column:auto/span 3}.grid .g-col-xl-4{grid-column:auto/span 4}.grid .g-col-xl-5{grid-column:auto/span 5}.grid .g-col-xl-6{grid-column:auto/span 6}.grid .g-col-xl-7{grid-column:auto/span 7}.grid .g-col-xl-8{grid-column:auto/span 8}.grid .g-col-xl-9{grid-column:auto/span 9}.grid .g-col-xl-10{grid-column:auto/span 10}.grid .g-col-xl-11{grid-column:auto/span 11}.grid .g-col-xl-12{grid-column:auto/span 12}.grid .g-start-xl-1{grid-column-start:1}.grid .g-start-xl-2{grid-column-start:2}.grid .g-start-xl-3{grid-column-start:3}.grid .g-start-xl-4{grid-column-start:4}.grid .g-start-xl-5{grid-column-start:5}.grid .g-start-xl-6{grid-column-start:6}.grid .g-start-xl-7{grid-column-start:7}.grid .g-start-xl-8{grid-column-start:8}.grid .g-start-xl-9{grid-column-start:9}.grid .g-start-xl-10{grid-column-start:10}.grid .g-start-xl-11{grid-column-start:11}}@media(min-width: 1400px){.grid .g-col-xxl-1{grid-column:auto/span 1}.grid .g-col-xxl-2{grid-column:auto/span 2}.grid .g-col-xxl-3{grid-column:auto/span 3}.grid .g-col-xxl-4{grid-column:auto/span 4}.grid .g-col-xxl-5{grid-column:auto/span 5}.grid .g-col-xxl-6{grid-column:auto/span 6}.grid .g-col-xxl-7{grid-column:auto/span 7}.grid .g-col-xxl-8{grid-column:auto/span 8}.grid .g-col-xxl-9{grid-column:auto/span 9}.grid .g-col-xxl-10{grid-column:auto/span 10}.grid .g-col-xxl-11{grid-column:auto/span 11}.grid .g-col-xxl-12{grid-column:auto/span 12}.grid .g-start-xxl-1{grid-column-start:1}.grid .g-start-xxl-2{grid-column-start:2}.grid .g-start-xxl-3{grid-column-start:3}.grid .g-start-xxl-4{grid-column-start:4}.grid .g-start-xxl-5{grid-column-start:5}.grid .g-start-xxl-6{grid-column-start:6}.grid .g-start-xxl-7{grid-column-start:7}.grid .g-start-xxl-8{grid-column-start:8}.grid .g-start-xxl-9{grid-column-start:9}.grid .g-start-xxl-10{grid-column-start:10}.grid .g-start-xxl-11{grid-column-start:11}}.table{--bs-table-color-type: initial;--bs-table-bg-type: initial;--bs-table-color-state: initial;--bs-table-bg-state: initial;--bs-table-color: #343a40;--bs-table-bg: #fff;--bs-table-border-color: #dee2e6;--bs-table-accent-bg: transparent;--bs-table-striped-color: #343a40;--bs-table-striped-bg: rgba(0, 0, 0, 0.05);--bs-table-active-color: #343a40;--bs-table-active-bg: rgba(0, 0, 0, 0.1);--bs-table-hover-color: #343a40;--bs-table-hover-bg: rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(1px*2) solid rgb(153.5,156.5,159.5)}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-active{--bs-table-color-state: var(--bs-table-active-color);--bs-table-bg-state: var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state: var(--bs-table-hover-color);--bs-table-bg-state: var(--bs-table-hover-bg)}.table-primary{--bs-table-color: #000;--bs-table-bg: rgb(211.8, 229.6, 249.4);--bs-table-border-color: rgb(190.62, 206.64, 224.46);--bs-table-striped-bg: rgb(201.21, 218.12, 236.93);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(190.62, 206.64, 224.46);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(195.915, 212.38, 230.695);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color: #000;--bs-table-bg: rgb(214.4, 215.6, 216.8);--bs-table-border-color: rgb(192.96, 194.04, 195.12);--bs-table-striped-bg: rgb(203.68, 204.82, 205.96);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(192.96, 194.04, 195.12);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(198.32, 199.43, 200.54);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color: #000;--bs-table-bg: rgb(216.6, 240.4, 208.8);--bs-table-border-color: rgb(194.94, 216.36, 187.92);--bs-table-striped-bg: rgb(205.77, 228.38, 198.36);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(194.94, 216.36, 187.92);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(200.355, 222.37, 193.14);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color: #000;--bs-table-bg: rgb(234.6, 220.8, 241.4);--bs-table-border-color: rgb(211.14, 198.72, 217.26);--bs-table-striped-bg: rgb(222.87, 209.76, 229.33);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(211.14, 198.72, 217.26);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(217.005, 204.24, 223.295);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color: #000;--bs-table-bg: rgb(255, 227.4, 208.8);--bs-table-border-color: rgb(229.5, 204.66, 187.92);--bs-table-striped-bg: rgb(242.25, 216.03, 198.36);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(229.5, 204.66, 187.92);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(235.875, 210.345, 193.14);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color: #000;--bs-table-bg: rgb(255, 204, 215.4);--bs-table-border-color: rgb(229.5, 183.6, 193.86);--bs-table-striped-bg: rgb(242.25, 193.8, 204.63);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(229.5, 183.6, 193.86);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(235.875, 188.7, 199.245);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color: #000;--bs-table-bg: #f8f9fa;--bs-table-border-color: rgb(223.2, 224.1, 225);--bs-table-striped-bg: rgb(235.6, 236.55, 237.5);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(223.2, 224.1, 225);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(229.4, 230.325, 231.25);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #fff;--bs-table-bg: #343a40;--bs-table-border-color: rgb(72.3, 77.7, 83.1);--bs-table-striped-bg: rgb(62.15, 67.85, 73.55);--bs-table-striped-color: #fff;--bs-table-active-bg: rgb(72.3, 77.7, 83.1);--bs-table-active-color: #fff;--bs-table-hover-bg: rgb(67.225, 72.775, 78.325);--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label,.shiny-input-container .control-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.875rem}.form-text{margin-top:.25rem;font-size:0.875em;color:rgba(52,58,64,.75)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#343a40;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#fff;background-clip:padding-box;border:1px solid #dee2e6;border-radius:0;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#343a40;background-color:#fff;border-color:rgb(147,191.5,241);outline:0;box-shadow:0 0 0 .25rem rgba(39,128,227,.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:rgba(52,58,64,.75);opacity:1}.form-control:disabled{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;margin-inline-end:.75rem;color:#343a40;background-color:#f8f9fa;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#e9ecef}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#343a40;background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:1px 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(1px * 2));padding:.25rem .5rem;font-size:0.875rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(1px * 2));padding:.5rem 1rem;font-size:1.25rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + 0.75rem + calc(1px * 2))}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(1px * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(1px * 2))}.form-control-color{width:3rem;height:calc(1.5em + 0.75rem + calc(1px * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important}.form-control-color::-webkit-color-swatch{border:0 !important}.form-control-color.form-control-sm{height:calc(1.5em + 0.5rem + calc(1px * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(1px * 2))}.form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#343a40;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#fff;background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #dee2e6;border-radius:0;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:rgb(147,191.5,241);outline:0;box-shadow:0 0 0 .25rem rgba(39,128,227,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 #343a40}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.875rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check,.shiny-input-container .checkbox,.shiny-input-container .radio{display:block;min-height:1.5rem;padding-left:0;margin-bottom:.125rem}.form-check .form-check-input,.form-check .shiny-input-container .checkbox input,.form-check .shiny-input-container .radio input,.shiny-input-container .checkbox .form-check-input,.shiny-input-container .checkbox .shiny-input-container .checkbox input,.shiny-input-container .checkbox .shiny-input-container .radio input,.shiny-input-container .radio .form-check-input,.shiny-input-container .radio .shiny-input-container .checkbox input,.shiny-input-container .radio .shiny-input-container .radio input{float:left;margin-left:0}.form-check-reverse{padding-right:0;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:0;margin-left:0}.form-check-input,.shiny-input-container .checkbox input,.shiny-input-container .checkbox-inline input,.shiny-input-container .radio input,.shiny-input-container .radio-inline input{--bs-form-check-bg: #fff;width:1em;height:1em;margin-top:.25em;vertical-align:top;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid #dee2e6;print-color-adjust:exact}.form-check-input[type=radio],.shiny-input-container .checkbox input[type=radio],.shiny-input-container .checkbox-inline input[type=radio],.shiny-input-container .radio input[type=radio],.shiny-input-container .radio-inline input[type=radio]{border-radius:50%}.form-check-input:active,.shiny-input-container .checkbox input:active,.shiny-input-container .checkbox-inline input:active,.shiny-input-container .radio input:active,.shiny-input-container .radio-inline input:active{filter:brightness(90%)}.form-check-input:focus,.shiny-input-container .checkbox input:focus,.shiny-input-container .checkbox-inline input:focus,.shiny-input-container .radio input:focus,.shiny-input-container .radio-inline input:focus{border-color:rgb(147,191.5,241);outline:0;box-shadow:0 0 0 .25rem rgba(39,128,227,.25)}.form-check-input:checked,.shiny-input-container .checkbox input:checked,.shiny-input-container .checkbox-inline input:checked,.shiny-input-container .radio input:checked,.shiny-input-container .radio-inline input:checked{background-color:#2780e3;border-color:#2780e3}.form-check-input:checked[type=checkbox],.shiny-input-container .checkbox input:checked[type=checkbox],.shiny-input-container .checkbox-inline input:checked[type=checkbox],.shiny-input-container .radio input:checked[type=checkbox],.shiny-input-container .radio-inline input:checked[type=checkbox]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio],.shiny-input-container .checkbox input:checked[type=radio],.shiny-input-container .checkbox-inline input:checked[type=radio],.shiny-input-container .radio input:checked[type=radio],.shiny-input-container .radio-inline input:checked[type=radio]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate,.shiny-input-container .checkbox input[type=checkbox]:indeterminate,.shiny-input-container .checkbox-inline input[type=checkbox]:indeterminate,.shiny-input-container .radio input[type=checkbox]:indeterminate,.shiny-input-container .radio-inline input[type=checkbox]:indeterminate{background-color:#2780e3;border-color:#2780e3;--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled,.shiny-input-container .checkbox input:disabled,.shiny-input-container .checkbox-inline input:disabled,.shiny-input-container .radio input:disabled,.shiny-input-container .radio-inline input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input[disabled]~span,.form-check-input:disabled~.form-check-label,.form-check-input:disabled~span,.shiny-input-container .checkbox input[disabled]~.form-check-label,.shiny-input-container .checkbox input[disabled]~span,.shiny-input-container .checkbox input:disabled~.form-check-label,.shiny-input-container .checkbox input:disabled~span,.shiny-input-container .checkbox-inline input[disabled]~.form-check-label,.shiny-input-container .checkbox-inline input[disabled]~span,.shiny-input-container .checkbox-inline input:disabled~.form-check-label,.shiny-input-container .checkbox-inline input:disabled~span,.shiny-input-container .radio input[disabled]~.form-check-label,.shiny-input-container .radio input[disabled]~span,.shiny-input-container .radio input:disabled~.form-check-label,.shiny-input-container .radio input:disabled~span,.shiny-input-container .radio-inline input[disabled]~.form-check-label,.shiny-input-container .radio-inline input[disabled]~span,.shiny-input-container .radio-inline input:disabled~.form-check-label,.shiny-input-container .radio-inline input:disabled~span{cursor:default;opacity:.5}.form-check-label,.shiny-input-container .checkbox label,.shiny-input-container .checkbox-inline label,.shiny-input-container .radio label,.shiny-input-container .radio-inline label{cursor:pointer}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;transition:background-position .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgb%28147, 191.5, 241%29'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:rgba(0,0,0,0)}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(39,128,227,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(39,128,227,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#2780e3;border:0;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:rgb(190.2,216.9,246.6)}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#f8f9fa;border-color:rgba(0,0,0,0)}.form-range::-moz-range-thumb{width:1rem;height:1rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#2780e3;border:0;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:rgb(190.2,216.9,246.6)}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#f8f9fa;border-color:rgba(0,0,0,0)}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:rgba(52,58,64,.75)}.form-range:disabled::-moz-range-thumb{background-color:rgba(52,58,64,.75)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(1px * 2));min-height:calc(3.5rem + calc(1px * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:1px solid rgba(0,0,0,0);transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media(prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:focus~label::after,.form-floating>.form-control:not(:placeholder-shown)~label::after,.form-floating>.form-control-plaintext~label::after,.form-floating>.form-select~label::after{position:absolute;inset:1rem .375rem;z-index:-1;height:1.5em;content:"";background-color:#fff}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control-plaintext~label{border-width:1px 0}.form-floating>:disabled~label,.form-floating>.form-control:disabled~label{color:#6c757d}.form-floating>:disabled~label::after,.form-floating>.form-control:disabled~label::after{background-color:#e9ecef}.input-group{position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:stretch;-webkit-align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#343a40;text-align:center;white-space:nowrap;background-color:#f8f9fa;border:1px solid #dee2e6}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.875rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(1px*-1)}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#3fb618}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:#3fb618}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#3fb618;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%233fb618' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#3fb618;box-shadow:0 0 0 .25rem rgba(63,182,24,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:#3fb618}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%233fb618' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:#3fb618;box-shadow:0 0 0 .25rem rgba(63,182,24,.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:#3fb618}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#3fb618}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(63,182,24,.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#3fb618}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#ff0039}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:#ff0039}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#ff0039;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ff0039'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ff0039' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#ff0039;box-shadow:0 0 0 .25rem rgba(255,0,57,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:#ff0039}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ff0039'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ff0039' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:#ff0039;box-shadow:0 0 0 .25rem rgba(255,0,57,.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:#ff0039}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#ff0039}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(255,0,57,.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#ff0039}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--bs-btn-padding-x: 0.75rem;--bs-btn-padding-y: 0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: #343a40;--bs-btn-bg: transparent;--bs-btn-border-width: 1px;--bs-btn-border-color: transparent;--bs-btn-border-radius: 0.25rem;--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);--bs-btn-disabled-opacity: 0.65;--bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-default{--bs-btn-color: #fff;--bs-btn-bg: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(44.2, 49.3, 54.4);--bs-btn-hover-border-color: rgb(41.6, 46.4, 51.2);--bs-btn-focus-shadow-rgb: 82, 88, 93;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(41.6, 46.4, 51.2);--bs-btn-active-border-color: rgb(39, 43.5, 48);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #343a40;--bs-btn-disabled-border-color: #343a40}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #2780e3;--bs-btn-border-color: #2780e3;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(33.15, 108.8, 192.95);--bs-btn-hover-border-color: rgb(31.2, 102.4, 181.6);--bs-btn-focus-shadow-rgb: 71, 147, 231;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(31.2, 102.4, 181.6);--bs-btn-active-border-color: rgb(29.25, 96, 170.25);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #2780e3;--bs-btn-disabled-border-color: #2780e3}.btn-secondary{--bs-btn-color: #fff;--bs-btn-bg: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(44.2, 49.3, 54.4);--bs-btn-hover-border-color: rgb(41.6, 46.4, 51.2);--bs-btn-focus-shadow-rgb: 82, 88, 93;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(41.6, 46.4, 51.2);--bs-btn-active-border-color: rgb(39, 43.5, 48);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #343a40;--bs-btn-disabled-border-color: #343a40}.btn-success{--bs-btn-color: #fff;--bs-btn-bg: #3fb618;--bs-btn-border-color: #3fb618;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(53.55, 154.7, 20.4);--bs-btn-hover-border-color: rgb(50.4, 145.6, 19.2);--bs-btn-focus-shadow-rgb: 92, 193, 59;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(50.4, 145.6, 19.2);--bs-btn-active-border-color: rgb(47.25, 136.5, 18);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #3fb618;--bs-btn-disabled-border-color: #3fb618}.btn-info{--bs-btn-color: #fff;--bs-btn-bg: #9954bb;--bs-btn-border-color: #9954bb;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(130.05, 71.4, 158.95);--bs-btn-hover-border-color: rgb(122.4, 67.2, 149.6);--bs-btn-focus-shadow-rgb: 168, 110, 197;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(122.4, 67.2, 149.6);--bs-btn-active-border-color: rgb(114.75, 63, 140.25);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #9954bb;--bs-btn-disabled-border-color: #9954bb}.btn-warning{--bs-btn-color: #fff;--bs-btn-bg: #ff7518;--bs-btn-border-color: #ff7518;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(216.75, 99.45, 20.4);--bs-btn-hover-border-color: rgb(204, 93.6, 19.2);--bs-btn-focus-shadow-rgb: 255, 138, 59;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(204, 93.6, 19.2);--bs-btn-active-border-color: rgb(191.25, 87.75, 18);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #ff7518;--bs-btn-disabled-border-color: #ff7518}.btn-danger{--bs-btn-color: #fff;--bs-btn-bg: #ff0039;--bs-btn-border-color: #ff0039;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(216.75, 0, 48.45);--bs-btn-hover-border-color: rgb(204, 0, 45.6);--bs-btn-focus-shadow-rgb: 255, 38, 87;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(204, 0, 45.6);--bs-btn-active-border-color: rgb(191.25, 0, 42.75);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #ff0039;--bs-btn-disabled-border-color: #ff0039}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: rgb(210.8, 211.65, 212.5);--bs-btn-hover-border-color: rgb(198.4, 199.2, 200);--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: rgb(198.4, 199.2, 200);--bs-btn-active-border-color: rgb(186, 186.75, 187.5);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-dark{--bs-btn-color: #fff;--bs-btn-bg: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(82.45, 87.55, 92.65);--bs-btn-hover-border-color: rgb(72.3, 77.7, 83.1);--bs-btn-focus-shadow-rgb: 82, 88, 93;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(92.6, 97.4, 102.2);--bs-btn-active-border-color: rgb(72.3, 77.7, 83.1);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #343a40;--bs-btn-disabled-border-color: #343a40}.btn-outline-default{--bs-btn-color: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #343a40;--bs-btn-hover-border-color: #343a40;--bs-btn-focus-shadow-rgb: 52, 58, 64;--bs-btn-active-color: #fff;--bs-btn-active-bg: #343a40;--bs-btn-active-border-color: #343a40;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #343a40;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #343a40;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-primary{--bs-btn-color: #2780e3;--bs-btn-border-color: #2780e3;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #2780e3;--bs-btn-hover-border-color: #2780e3;--bs-btn-focus-shadow-rgb: 39, 128, 227;--bs-btn-active-color: #fff;--bs-btn-active-bg: #2780e3;--bs-btn-active-border-color: #2780e3;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #2780e3;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #2780e3;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-secondary{--bs-btn-color: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #343a40;--bs-btn-hover-border-color: #343a40;--bs-btn-focus-shadow-rgb: 52, 58, 64;--bs-btn-active-color: #fff;--bs-btn-active-bg: #343a40;--bs-btn-active-border-color: #343a40;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #343a40;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #343a40;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-success{--bs-btn-color: #3fb618;--bs-btn-border-color: #3fb618;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #3fb618;--bs-btn-hover-border-color: #3fb618;--bs-btn-focus-shadow-rgb: 63, 182, 24;--bs-btn-active-color: #fff;--bs-btn-active-bg: #3fb618;--bs-btn-active-border-color: #3fb618;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #3fb618;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #3fb618;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-info{--bs-btn-color: #9954bb;--bs-btn-border-color: #9954bb;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #9954bb;--bs-btn-hover-border-color: #9954bb;--bs-btn-focus-shadow-rgb: 153, 84, 187;--bs-btn-active-color: #fff;--bs-btn-active-bg: #9954bb;--bs-btn-active-border-color: #9954bb;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #9954bb;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #9954bb;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-warning{--bs-btn-color: #ff7518;--bs-btn-border-color: #ff7518;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #ff7518;--bs-btn-hover-border-color: #ff7518;--bs-btn-focus-shadow-rgb: 255, 117, 24;--bs-btn-active-color: #fff;--bs-btn-active-bg: #ff7518;--bs-btn-active-border-color: #ff7518;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ff7518;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ff7518;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-danger{--bs-btn-color: #ff0039;--bs-btn-border-color: #ff0039;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #ff0039;--bs-btn-hover-border-color: #ff0039;--bs-btn-focus-shadow-rgb: 255, 0, 57;--bs-btn-active-color: #fff;--bs-btn-active-bg: #ff0039;--bs-btn-active-border-color: #ff0039;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ff0039;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ff0039;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-light{--bs-btn-color: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #f8f9fa;--bs-btn-hover-border-color: #f8f9fa;--bs-btn-focus-shadow-rgb: 248, 249, 250;--bs-btn-active-color: #000;--bs-btn-active-bg: #f8f9fa;--bs-btn-active-border-color: #f8f9fa;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #f8f9fa;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #f8f9fa;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-dark{--bs-btn-color: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #343a40;--bs-btn-hover-border-color: #343a40;--bs-btn-focus-shadow-rgb: 52, 58, 64;--bs-btn-active-color: #fff;--bs-btn-active-bg: #343a40;--bs-btn-active-border-color: #343a40;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #343a40;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #343a40;--bs-btn-bg: transparent;--bs-gradient: none}.btn-link{--bs-btn-font-weight: 400;--bs-btn-color: #2761e3;--bs-btn-bg: transparent;--bs-btn-border-color: transparent;--bs-btn-hover-color: rgb(31.2, 77.6, 181.6);--bs-btn-hover-border-color: transparent;--bs-btn-active-color: rgb(31.2, 77.6, 181.6);--bs-btn-active-border-color: transparent;--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-border-color: transparent;--bs-btn-box-shadow: 0 0 0 #000;--bs-btn-focus-shadow-rgb: 71, 121, 231;text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y: 0.5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius: 0.5rem}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: 0.25rem;--bs-btn-padding-x: 0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius: 0.2em}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .2s ease}@media(prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media(prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart,.dropup-center,.dropdown-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid rgba(0,0,0,0);border-bottom:0;border-left:.3em solid rgba(0,0,0,0)}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex: 1000;--bs-dropdown-min-width: 10rem;--bs-dropdown-padding-x: 0;--bs-dropdown-padding-y: 0.5rem;--bs-dropdown-spacer: 0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color: #343a40;--bs-dropdown-bg: #fff;--bs-dropdown-border-color: rgba(0, 0, 0, 0.175);--bs-dropdown-border-radius: 0.25rem;--bs-dropdown-border-width: 1px;--bs-dropdown-inner-border-radius: calc(0.25rem - 1px);--bs-dropdown-divider-bg: rgba(0, 0, 0, 0.175);--bs-dropdown-divider-margin-y: 0.5rem;--bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-dropdown-link-color: #343a40;--bs-dropdown-link-hover-color: #343a40;--bs-dropdown-link-hover-bg: #f8f9fa;--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #2780e3;--bs-dropdown-link-disabled-color: rgba(52, 58, 64, 0.5);--bs-dropdown-item-padding-x: 1rem;--bs-dropdown-item-padding-y: 0.25rem;--bs-dropdown-header-color: #6c757d;--bs-dropdown-header-padding-x: 1rem;--bs-dropdown-header-padding-y: 0.5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media(min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid rgba(0,0,0,0);border-bottom:.3em solid;border-left:.3em solid rgba(0,0,0,0)}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:0;border-bottom:.3em solid rgba(0,0,0,0);border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:.3em solid;border-bottom:.3em solid rgba(0,0,0,0)}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap;background-color:rgba(0,0,0,0);border:0}.dropdown-item:hover,.dropdown-item:focus{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:rgba(0,0,0,0)}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:0.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color: #dee2e6;--bs-dropdown-bg: #343a40;--bs-dropdown-border-color: rgba(0, 0, 0, 0.175);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color: #dee2e6;--bs-dropdown-link-hover-color: #fff;--bs-dropdown-divider-bg: rgba(0, 0, 0, 0.175);--bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #2780e3;--bs-dropdown-link-disabled-color: #adb5bd;--bs-dropdown-header-color: #adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;justify-content:flex-start;-webkit-justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(1px*-1)}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;-webkit-flex-direction:column;align-items:flex-start;-webkit-align-items:flex-start;justify-content:center;-webkit-justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(1px*-1)}.nav{--bs-nav-link-padding-x: 1rem;--bs-nav-link-padding-y: 0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: #2761e3;--bs-nav-link-hover-color: rgb(31.2, 77.6, 181.6);--bs-nav-link-disabled-color: rgba(52, 58, 64, 0.75);display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background:none;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media(prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(39,128,227,.25)}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width: 1px;--bs-nav-tabs-border-color: #dee2e6;--bs-nav-tabs-border-radius: 0.25rem;--bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;--bs-nav-tabs-link-active-color: #000;--bs-nav-tabs-link-active-bg: #fff;--bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff;border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1*var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid rgba(0,0,0,0)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1*var(--bs-nav-tabs-border-width))}.nav-pills{--bs-nav-pills-border-radius: 0.25rem;--bs-nav-pills-link-active-color: #fff;--bs-nav-pills-link-active-bg: #2780e3}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap: 1rem;--bs-nav-underline-border-width: 0.125rem;--bs-nav-underline-link-active-color: #000;gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid rgba(0,0,0,0)}.nav-underline .nav-link:hover,.nav-underline .nav-link:focus{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;-webkit-flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;-webkit-flex-basis:0;flex-grow:1;-webkit-flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x: 0;--bs-navbar-padding-y: 0.5rem;--bs-navbar-color: rgb(84.32, 84.66, 85);--bs-navbar-hover-color: rgba(31.2, 77.6, 181.6, 0.8);--bs-navbar-disabled-color: rgba(84.32, 84.66, 85, 0.75);--bs-navbar-active-color: rgb(31.2, 77.6, 181.6);--bs-navbar-brand-padding-y: 0.3125rem;--bs-navbar-brand-margin-end: 1rem;--bs-navbar-brand-font-size: 1.25rem;--bs-navbar-brand-color: rgb(84.32, 84.66, 85);--bs-navbar-brand-hover-color: rgb(31.2, 77.6, 181.6);--bs-navbar-nav-link-padding-x: 0.5rem;--bs-navbar-toggler-padding-y: 0.25;--bs-navbar-toggler-padding-x: 0;--bs-navbar-toggler-font-size: 1.25rem;--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgb%2884.32, 84.66, 85%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color: rgba(84.32, 84.66, 85, 0);--bs-navbar-toggler-border-radius: 0.25rem;--bs-navbar-toggler-focus-width: 0.25rem;--bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;display:-webkit-flex;flex-wrap:inherit;-webkit-flex-wrap:inherit;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x: 0;--bs-nav-link-padding-y: 0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-navbar-color);--bs-nav-link-hover-color: var(--bs-navbar-hover-color);--bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;-webkit-flex-basis:100%;flex-grow:1;-webkit-flex-grow:1;align-items:center;-webkit-align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:rgba(0,0,0,0);border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);transition:var(--bs-navbar-toggler-transition)}@media(prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media(min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color: rgb(84.32, 84.66, 85);--bs-navbar-hover-color: rgba(31.2, 77.6, 181.6, 0.8);--bs-navbar-disabled-color: rgba(84.32, 84.66, 85, 0.75);--bs-navbar-active-color: rgb(31.2, 77.6, 181.6);--bs-navbar-brand-color: rgb(84.32, 84.66, 85);--bs-navbar-brand-hover-color: rgb(31.2, 77.6, 181.6);--bs-navbar-toggler-border-color: rgba(84.32, 84.66, 85, 0);--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgb%2884.32, 84.66, 85%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgb%2884.32, 84.66, 85%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: 0.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: 1px;--bs-card-border-color: rgba(0, 0, 0, 0.175);--bs-card-border-radius: 0.25rem;--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(0.25rem - 1px);--bs-card-cap-padding-y: 0.5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(52, 58, 64, 0.25);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: #fff;--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: 0.75rem;position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0}.card>.list-group:last-child{border-bottom-width:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;-webkit-flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-0.5*var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header-tabs{margin-right:calc(-0.5*var(--bs-card-cap-padding-x));margin-bottom:calc(-1*var(--bs-card-cap-padding-y));margin-left:calc(-0.5*var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-0.5*var(--bs-card-cap-padding-x));margin-left:calc(-0.5*var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media(min-width: 576px){.card-group{display:flex;display:-webkit-flex;flex-flow:row wrap;-webkit-flex-flow:row wrap}.card-group>.card{flex:1 0 0%;-webkit-flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}}.accordion{--bs-accordion-color: #343a40;--bs-accordion-bg: #fff;--bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;--bs-accordion-border-color: #dee2e6;--bs-accordion-border-width: 1px;--bs-accordion-border-radius: 0.25rem;--bs-accordion-inner-border-radius: calc(0.25rem - 1px);--bs-accordion-btn-padding-x: 1.25rem;--bs-accordion-btn-padding-y: 1rem;--bs-accordion-btn-color: #343a40;--bs-accordion-btn-bg: #fff;--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23343a40'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width: 1.25rem;--bs-accordion-btn-icon-transform: rotate(-180deg);--bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='rgb%2815.6, 51.2, 90.8%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-focus-border-color: rgb(147, 191.5, 241);--bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.25);--bs-accordion-body-padding-x: 1.25rem;--bs-accordion-body-padding-y: 1rem;--bs-accordion-active-color: rgb(15.6, 51.2, 90.8);--bs-accordion-active-bg: rgb(211.8, 229.6, 249.4)}.accordion-button{position:relative;display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media(prefers-reduced-motion: reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1*var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;-webkit-flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media(prefers-reduced-motion: reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:var(--bs-accordion-btn-focus-border-color);outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:not(:first-of-type){border-top:0}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}[data-bs-theme=dark] .accordion-button::after{--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='rgb%28125.4, 178.8, 238.2%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='rgb%28125.4, 178.8, 238.2%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x: 0;--bs-breadcrumb-padding-y: 0;--bs-breadcrumb-margin-bottom: 1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color: rgba(52, 58, 64, 0.75);--bs-breadcrumb-item-padding-x: 0.5rem;--bs-breadcrumb-item-active-color: rgba(52, 58, 64, 0.75);display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, ">") /* rtl: var(--bs-breadcrumb-divider, ">") */}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x: 0.75rem;--bs-pagination-padding-y: 0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color: #2761e3;--bs-pagination-bg: #fff;--bs-pagination-border-width: 1px;--bs-pagination-border-color: #dee2e6;--bs-pagination-border-radius: 0.25rem;--bs-pagination-hover-color: rgb(31.2, 77.6, 181.6);--bs-pagination-hover-bg: #f8f9fa;--bs-pagination-hover-border-color: #dee2e6;--bs-pagination-focus-color: rgb(31.2, 77.6, 181.6);--bs-pagination-focus-bg: #e9ecef;--bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.25);--bs-pagination-active-color: #fff;--bs-pagination-active-bg: #2780e3;--bs-pagination-active-border-color: #2780e3;--bs-pagination-disabled-color: rgba(52, 58, 64, 0.75);--bs-pagination-disabled-bg: #e9ecef;--bs-pagination-disabled-border-color: #dee2e6;display:flex;display:-webkit-flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.page-link.active,.active>.page-link{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.page-link.disabled,.disabled>.page-link{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(1px*-1)}.pagination-lg{--bs-pagination-padding-x: 1.5rem;--bs-pagination-padding-y: 0.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius: 0.5rem}.pagination-sm{--bs-pagination-padding-x: 0.5rem;--bs-pagination-padding-y: 0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius: 0.2em}.badge{--bs-badge-padding-x: 0.65em;--bs-badge-padding-y: 0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight: 700;--bs-badge-color: #fff;--bs-badge-border-radius: 0.25rem;display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg: transparent;--bs-alert-padding-x: 1rem;--bs-alert-padding-y: 1rem;--bs-alert-margin-bottom: 1rem;--bs-alert-color: inherit;--bs-alert-border-color: transparent;--bs-alert-border: 0 solid var(--bs-alert-border-color);--bs-alert-border-radius: 0.25rem;--bs-alert-link-color: inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-default{--bs-alert-color: var(--bs-default-text-emphasis);--bs-alert-bg: var(--bs-default-bg-subtle);--bs-alert-border-color: var(--bs-default-border-subtle);--bs-alert-link-color: var(--bs-default-text-emphasis)}.alert-primary{--bs-alert-color: var(--bs-primary-text-emphasis);--bs-alert-bg: var(--bs-primary-bg-subtle);--bs-alert-border-color: var(--bs-primary-border-subtle);--bs-alert-link-color: var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color: var(--bs-secondary-text-emphasis);--bs-alert-bg: var(--bs-secondary-bg-subtle);--bs-alert-border-color: var(--bs-secondary-border-subtle);--bs-alert-link-color: var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color: var(--bs-success-text-emphasis);--bs-alert-bg: var(--bs-success-bg-subtle);--bs-alert-border-color: var(--bs-success-border-subtle);--bs-alert-link-color: var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color: var(--bs-info-text-emphasis);--bs-alert-bg: var(--bs-info-bg-subtle);--bs-alert-border-color: var(--bs-info-border-subtle);--bs-alert-link-color: var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color: var(--bs-warning-text-emphasis);--bs-alert-bg: var(--bs-warning-bg-subtle);--bs-alert-border-color: var(--bs-warning-border-subtle);--bs-alert-link-color: var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color: var(--bs-danger-text-emphasis);--bs-alert-bg: var(--bs-danger-bg-subtle);--bs-alert-border-color: var(--bs-danger-border-subtle);--bs-alert-link-color: var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color: var(--bs-light-text-emphasis);--bs-alert-bg: var(--bs-light-bg-subtle);--bs-alert-border-color: var(--bs-light-border-subtle);--bs-alert-link-color: var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color: var(--bs-dark-text-emphasis);--bs-alert-bg: var(--bs-dark-bg-subtle);--bs-alert-border-color: var(--bs-dark-border-subtle);--bs-alert-link-color: var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:.5rem}}.progress,.progress-stacked{--bs-progress-height: 0.5rem;--bs-progress-font-size:0.75rem;--bs-progress-bg: #e9ecef;--bs-progress-border-radius: 0.25rem;--bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-progress-bar-color: #fff;--bs-progress-bar-bg: #2780e3;--bs-progress-bar-transition: width 0.6s ease;display:flex;display:-webkit-flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg)}.progress-bar{display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;justify-content:center;-webkit-justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media(prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media(prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color: #343a40;--bs-list-group-bg: #fff;--bs-list-group-border-color: #dee2e6;--bs-list-group-border-width: 1px;--bs-list-group-border-radius: 0.25rem;--bs-list-group-item-padding-x: 1rem;--bs-list-group-item-padding-y: 0.5rem;--bs-list-group-action-color: rgba(52, 58, 64, 0.75);--bs-list-group-action-hover-color: #000;--bs-list-group-action-hover-bg: #f8f9fa;--bs-list-group-action-active-color: #343a40;--bs-list-group-action-active-bg: #e9ecef;--bs-list-group-disabled-color: rgba(52, 58, 64, 0.75);--bs-list-group-disabled-bg: #fff;--bs-list-group-active-color: #fff;--bs-list-group-active-bg: #2780e3;--bs-list-group-active-border-color: #2780e3;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1*var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media(min-width: 576px){.list-group-horizontal-sm{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 768px){.list-group-horizontal-md{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 992px){.list-group-horizontal-lg{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 1200px){.list-group-horizontal-xl{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-default{--bs-list-group-color: var(--bs-default-text-emphasis);--bs-list-group-bg: var(--bs-default-bg-subtle);--bs-list-group-border-color: var(--bs-default-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-default-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-default-border-subtle);--bs-list-group-active-color: var(--bs-default-bg-subtle);--bs-list-group-active-bg: var(--bs-default-text-emphasis);--bs-list-group-active-border-color: var(--bs-default-text-emphasis)}.list-group-item-primary{--bs-list-group-color: var(--bs-primary-text-emphasis);--bs-list-group-bg: var(--bs-primary-bg-subtle);--bs-list-group-border-color: var(--bs-primary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-primary-border-subtle);--bs-list-group-active-color: var(--bs-primary-bg-subtle);--bs-list-group-active-bg: var(--bs-primary-text-emphasis);--bs-list-group-active-border-color: var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color: var(--bs-secondary-text-emphasis);--bs-list-group-bg: var(--bs-secondary-bg-subtle);--bs-list-group-border-color: var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-secondary-border-subtle);--bs-list-group-active-color: var(--bs-secondary-bg-subtle);--bs-list-group-active-bg: var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color: var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color: var(--bs-success-text-emphasis);--bs-list-group-bg: var(--bs-success-bg-subtle);--bs-list-group-border-color: var(--bs-success-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-success-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-success-border-subtle);--bs-list-group-active-color: var(--bs-success-bg-subtle);--bs-list-group-active-bg: var(--bs-success-text-emphasis);--bs-list-group-active-border-color: var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color: var(--bs-info-text-emphasis);--bs-list-group-bg: var(--bs-info-bg-subtle);--bs-list-group-border-color: var(--bs-info-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-info-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-info-border-subtle);--bs-list-group-active-color: var(--bs-info-bg-subtle);--bs-list-group-active-bg: var(--bs-info-text-emphasis);--bs-list-group-active-border-color: var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color: var(--bs-warning-text-emphasis);--bs-list-group-bg: var(--bs-warning-bg-subtle);--bs-list-group-border-color: var(--bs-warning-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-warning-border-subtle);--bs-list-group-active-color: var(--bs-warning-bg-subtle);--bs-list-group-active-bg: var(--bs-warning-text-emphasis);--bs-list-group-active-border-color: var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color: var(--bs-danger-text-emphasis);--bs-list-group-bg: var(--bs-danger-bg-subtle);--bs-list-group-border-color: var(--bs-danger-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-danger-border-subtle);--bs-list-group-active-color: var(--bs-danger-bg-subtle);--bs-list-group-active-bg: var(--bs-danger-text-emphasis);--bs-list-group-active-border-color: var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color: var(--bs-light-text-emphasis);--bs-list-group-bg: var(--bs-light-bg-subtle);--bs-list-group-border-color: var(--bs-light-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-light-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-light-border-subtle);--bs-list-group-active-color: var(--bs-light-bg-subtle);--bs-list-group-active-bg: var(--bs-light-text-emphasis);--bs-list-group-active-border-color: var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color: var(--bs-dark-text-emphasis);--bs-list-group-bg: var(--bs-dark-bg-subtle);--bs-list-group-border-color: var(--bs-dark-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-dark-border-subtle);--bs-list-group-active-color: var(--bs-dark-bg-subtle);--bs-list-group-active-bg: var(--bs-dark-text-emphasis);--bs-list-group-active-border-color: var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color: #000;--bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--bs-btn-close-opacity: 0.5;--bs-btn-close-hover-opacity: 0.75;--bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.25);--bs-btn-close-focus-opacity: 1;--bs-btn-close-disabled-opacity: 0.25;--bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:rgba(0,0,0,0) var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{filter:var(--bs-btn-close-white-filter)}[data-bs-theme=dark] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex: 1090;--bs-toast-padding-x: 0.75rem;--bs-toast-padding-y: 0.5rem;--bs-toast-spacing: 1.5rem;--bs-toast-max-width: 350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg: rgba(255, 255, 255, 0.85);--bs-toast-border-width: 1px;--bs-toast-border-color: rgba(0, 0, 0, 0.175);--bs-toast-border-radius: 0.25rem;--bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-toast-header-color: rgba(52, 58, 64, 0.75);--bs-toast-header-bg: rgba(255, 255, 255, 0.85);--bs-toast-header-border-color: rgba(0, 0, 0, 0.175);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex: 1090;position:absolute;z-index:var(--bs-toast-zindex);width:max-content;width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:-o-max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color)}.toast-header .btn-close{margin-right:calc(-0.5*var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex: 1055;--bs-modal-width: 500px;--bs-modal-padding: 1rem;--bs-modal-margin: 0.5rem;--bs-modal-color: ;--bs-modal-bg: #fff;--bs-modal-border-color: rgba(0, 0, 0, 0.175);--bs-modal-border-width: 1px;--bs-modal-border-radius: 0.5rem;--bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-modal-inner-border-radius: calc(0.5rem - 1px);--bs-modal-header-padding-x: 1rem;--bs-modal-header-padding-y: 1rem;--bs-modal-header-padding: 1rem 1rem;--bs-modal-header-border-color: #dee2e6;--bs-modal-header-border-width: 1px;--bs-modal-title-line-height: 1.5;--bs-modal-footer-gap: 0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color: #dee2e6;--bs-modal-footer-border-width: 1px;position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0, -50px)}@media(prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin)*2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;min-height:calc(100% - var(--bs-modal-margin)*2)}.modal-content{position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);outline:0}.modal-backdrop{--bs-backdrop-zindex: 1050;--bs-backdrop-bg: #000;--bs-backdrop-opacity: 0.5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y)*.5) calc(var(--bs-modal-header-padding-x)*.5);margin:calc(-0.5*var(--bs-modal-header-padding-y)) calc(-0.5*var(--bs-modal-header-padding-x)) calc(-0.5*var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:flex-end;-webkit-justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap)*.5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap)*.5)}@media(min-width: 576px){.modal{--bs-modal-margin: 1.75rem;--bs-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width: 300px}}@media(min-width: 992px){.modal-lg,.modal-xl{--bs-modal-width: 800px}}@media(min-width: 1200px){.modal-xl{--bs-modal-width: 1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0}.modal-fullscreen .modal-body{overflow-y:auto}@media(max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media(max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media(max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media(max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media(max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex: 1080;--bs-tooltip-max-width: 200px;--bs-tooltip-padding-x: 0.5rem;--bs-tooltip-padding-y: 0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color: #fff;--bs-tooltip-bg: #000;--bs-tooltip-border-radius: 0.25rem;--bs-tooltip-opacity: 0.9;--bs-tooltip-arrow-width: 0.8rem;--bs-tooltip-arrow-height: 0.4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:"Source Sans Pro",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:rgba(0,0,0,0);border-style:solid}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow{bottom:calc(-1*var(--bs-tooltip-arrow-height))}.bs-tooltip-top .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow{left:calc(-1*var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-end .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow{top:calc(-1*var(--bs-tooltip-arrow-height))}.bs-tooltip-bottom .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow{right:calc(-1*var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-start .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width)*.5) 0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg)}.popover{--bs-popover-zindex: 1070;--bs-popover-max-width: 276px;--bs-popover-font-size:0.875rem;--bs-popover-bg: #fff;--bs-popover-border-width: 1px;--bs-popover-border-color: rgba(0, 0, 0, 0.175);--bs-popover-border-radius: 0.5rem;--bs-popover-inner-border-radius: calc(0.5rem - 1px);--bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-popover-header-padding-x: 1rem;--bs-popover-header-padding-y: 0.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color: inherit;--bs-popover-header-bg: #e9ecef;--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: 1rem;--bs-popover-body-color: #343a40;--bs-popover-arrow-width: 1rem;--bs-popover-arrow-height: 0.5rem;--bs-popover-arrow-border: var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:"Source Sans Pro",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::before,.popover .popover-arrow::after{position:absolute;display:block;content:"";border-color:rgba(0,0,0,0);border-style:solid;border-width:0}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow{bottom:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow{left:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow{top:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after{border-width:0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-bottom .popover-header::before,.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-0.5*var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow{right:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width)*.5) 0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y;-webkit-touch-action:pan-y;-moz-touch-action:pan-y;-ms-touch-action:pan-y;-o-touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;transition:transform .6s ease-in-out}@media(prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-start),.active.carousel-item-end{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media(prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:center;-webkit-justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease}@media(prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;display:-webkit-flex;justify-content:center;-webkit-justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;-webkit-flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid rgba(0,0,0,0);border-bottom:10px solid rgba(0,0,0,0);opacity:.5;transition:opacity .6s ease}@media(prefers-reduced-motion: reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-prev-icon,.carousel-dark .carousel-control-next-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme=dark] .carousel .carousel-control-prev-icon,[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark].carousel .carousel-control-prev-icon,[data-bs-theme=dark].carousel .carousel-control-next-icon{filter:invert(1) grayscale(100)}[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target],[data-bs-theme=dark].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme=dark] .carousel .carousel-caption,[data-bs-theme=dark].carousel .carousel-caption{color:#000}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -0.125em;--bs-spinner-border-width: 0.25em;--bs-spinner-animation-speed: 0.75s;--bs-spinner-animation-name: spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:rgba(0,0,0,0)}.spinner-border-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem;--bs-spinner-border-width: 0.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -0.125em;--bs-spinner-animation-speed: 0.75s;--bs-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem}@media(prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed: 1.5s}}.offcanvas,.offcanvas-xxl,.offcanvas-xl,.offcanvas-lg,.offcanvas-md,.offcanvas-sm{--bs-offcanvas-zindex: 1045;--bs-offcanvas-width: 400px;--bs-offcanvas-height: 30vh;--bs-offcanvas-padding-x: 1rem;--bs-offcanvas-padding-y: 1rem;--bs-offcanvas-color: #343a40;--bs-offcanvas-bg: #fff;--bs-offcanvas-border-width: 1px;--bs-offcanvas-border-color: rgba(0, 0, 0, 0.175);--bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-offcanvas-transition: transform 0.3s ease-in-out;--bs-offcanvas-title-line-height: 1.5}@media(max-width: 575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 575.98px)and (prefers-reduced-motion: reduce){.offcanvas-sm{transition:none}}@media(max-width: 575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.showing,.offcanvas-sm.show:not(.hiding){transform:none}.offcanvas-sm.showing,.offcanvas-sm.hiding,.offcanvas-sm.show{visibility:visible}}@media(min-width: 576px){.offcanvas-sm{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 767.98px)and (prefers-reduced-motion: reduce){.offcanvas-md{transition:none}}@media(max-width: 767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.showing,.offcanvas-md.show:not(.hiding){transform:none}.offcanvas-md.showing,.offcanvas-md.hiding,.offcanvas-md.show{visibility:visible}}@media(min-width: 768px){.offcanvas-md{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 991.98px)and (prefers-reduced-motion: reduce){.offcanvas-lg{transition:none}}@media(max-width: 991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.showing,.offcanvas-lg.show:not(.hiding){transform:none}.offcanvas-lg.showing,.offcanvas-lg.hiding,.offcanvas-lg.show{visibility:visible}}@media(min-width: 992px){.offcanvas-lg{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 1199.98px)and (prefers-reduced-motion: reduce){.offcanvas-xl{transition:none}}@media(max-width: 1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.showing,.offcanvas-xl.show:not(.hiding){transform:none}.offcanvas-xl.showing,.offcanvas-xl.hiding,.offcanvas-xl.show{visibility:visible}}@media(min-width: 1200px){.offcanvas-xl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 1399.98px)and (prefers-reduced-motion: reduce){.offcanvas-xxl{transition:none}}@media(max-width: 1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.showing,.offcanvas-xxl.show:not(.hiding){transform:none}.offcanvas-xxl.showing,.offcanvas-xxl.hiding,.offcanvas-xxl.show{visibility:visible}}@media(min-width: 1400px){.offcanvas-xxl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}@media(prefers-reduced-motion: reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.showing,.offcanvas.show:not(.hiding){transform:none}.offcanvas.showing,.offcanvas.hiding,.offcanvas.show{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y)*.5) calc(var(--bs-offcanvas-padding-x)*.5);margin-top:calc(-0.5*var(--bs-offcanvas-padding-y));margin-right:calc(-0.5*var(--bs-offcanvas-padding-x));margin-bottom:calc(-0.5*var(--bs-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;-webkit-flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{mask-image:linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);-webkit-mask-image:linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);mask-size:200% 100%;-webkit-mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{mask-position:-200% 0%;-webkit-mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-default{color:#fff !important;background-color:RGBA(var(--bs-default-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-primary{color:#fff !important;background-color:RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-secondary{color:#fff !important;background-color:RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-success{color:#fff !important;background-color:RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-info{color:#fff !important;background-color:RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-warning{color:#fff !important;background-color:RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-danger{color:#fff !important;background-color:RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-light{color:#000 !important;background-color:RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-dark{color:#fff !important;background-color:RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important}.link-default{color:RGBA(var(--bs-default-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-default-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-default:hover,.link-default:focus{color:RGBA(42, 46, 51, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(42, 46, 51, var(--bs-link-underline-opacity, 1)) !important}.link-primary{color:RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-primary:hover,.link-primary:focus{color:RGBA(31, 102, 182, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(31, 102, 182, var(--bs-link-underline-opacity, 1)) !important}.link-secondary{color:RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-secondary:hover,.link-secondary:focus{color:RGBA(42, 46, 51, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(42, 46, 51, var(--bs-link-underline-opacity, 1)) !important}.link-success{color:RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-success:hover,.link-success:focus{color:RGBA(50, 146, 19, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(50, 146, 19, var(--bs-link-underline-opacity, 1)) !important}.link-info{color:RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-info:hover,.link-info:focus{color:RGBA(122, 67, 150, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(122, 67, 150, var(--bs-link-underline-opacity, 1)) !important}.link-warning{color:RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-warning:hover,.link-warning:focus{color:RGBA(204, 94, 19, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(204, 94, 19, var(--bs-link-underline-opacity, 1)) !important}.link-danger{color:RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-danger:hover,.link-danger:focus{color:RGBA(204, 0, 46, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(204, 0, 46, var(--bs-link-underline-opacity, 1)) !important}.link-light{color:RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-light:hover,.link-light:focus{color:RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important}.link-dark{color:RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-dark:hover,.link-dark:focus{color:RGBA(42, 46, 51, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(42, 46, 51, var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;-webkit-align-items:center;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;-webkit-flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media(prefers-reduced-motion: reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--bs-icon-link-transform, translate3d(0.25em, 0, 0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;display:-webkit-flex;flex-direction:row;-webkit-flex-direction:row;align-items:center;-webkit-align-items:center;align-self:stretch;-webkit-align-self:stretch}.vstack{display:flex;display:-webkit-flex;flex:1 1 auto;-webkit-flex:1 1 auto;flex-direction:column;-webkit-flex-direction:column;align-self:stretch;-webkit-align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;-webkit-align-self:stretch;width:1px;min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.object-fit-contain{object-fit:contain !important}.object-fit-cover{object-fit:cover !important}.object-fit-fill{object-fit:fill !important}.object-fit-scale{object-fit:scale-down !important}.object-fit-none{object-fit:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.overflow-x-auto{overflow-x:auto !important}.overflow-x-hidden{overflow-x:hidden !important}.overflow-x-visible{overflow-x:visible !important}.overflow-x-scroll{overflow-x:scroll !important}.overflow-y-auto{overflow-y:auto !important}.overflow-y-hidden{overflow-y:hidden !important}.overflow-y-visible{overflow-y:visible !important}.overflow-y-scroll{overflow-y:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-inline-grid{display:inline-grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15) !important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175) !important}.shadow-none{box-shadow:none !important}.focus-ring-default{--bs-focus-ring-color: rgba(var(--bs-default-rgb), var(--bs-focus-ring-opacity))}.focus-ring-primary{--bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-0{border:0 !important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-top-0{border-top:0 !important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-start-0{border-left:0 !important}.border-default{--bs-border-opacity: 1;border-color:rgba(var(--bs-default-rgb), var(--bs-border-opacity)) !important}.border-primary{--bs-border-opacity: 1;border-color:rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important}.border-secondary{--bs-border-opacity: 1;border-color:rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important}.border-success{--bs-border-opacity: 1;border-color:rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important}.border-info{--bs-border-opacity: 1;border-color:rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important}.border-warning{--bs-border-opacity: 1;border-color:rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important}.border-danger{--bs-border-opacity: 1;border-color:rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important}.border-light{--bs-border-opacity: 1;border-color:rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important}.border-dark{--bs-border-opacity: 1;border-color:rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important}.border-black{--bs-border-opacity: 1;border-color:rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important}.border-white{--bs-border-opacity: 1;border-color:rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle) !important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle) !important}.border-success-subtle{border-color:var(--bs-success-border-subtle) !important}.border-info-subtle{border-color:var(--bs-info-border-subtle) !important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle) !important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle) !important}.border-light-subtle{border-color:var(--bs-light-border-subtle) !important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle) !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.border-opacity-10{--bs-border-opacity: 0.1}.border-opacity-25{--bs-border-opacity: 0.25}.border-opacity-50{--bs-border-opacity: 0.5}.border-opacity-75{--bs-border-opacity: 0.75}.border-opacity-100{--bs-border-opacity: 1}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.row-gap-0{row-gap:0 !important}.row-gap-1{row-gap:.25rem !important}.row-gap-2{row-gap:.5rem !important}.row-gap-3{row-gap:1rem !important}.row-gap-4{row-gap:1.5rem !important}.row-gap-5{row-gap:3rem !important}.column-gap-0{column-gap:0 !important}.column-gap-1{column-gap:.25rem !important}.column-gap-2{column-gap:.5rem !important}.column-gap-3{column-gap:1rem !important}.column-gap-4{column-gap:1.5rem !important}.column-gap-5{column-gap:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.325rem + 0.9vw) !important}.fs-2{font-size:calc(1.29rem + 0.48vw) !important}.fs-3{font-size:calc(1.27rem + 0.24vw) !important}.fs-4{font-size:1.25rem !important}.fs-5{font-size:1.1rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-lighter{font-weight:lighter !important}.fw-light{font-weight:300 !important}.fw-normal{font-weight:400 !important}.fw-medium{font-weight:500 !important}.fw-semibold{font-weight:600 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-default{--bs-text-opacity: 1;color:rgba(var(--bs-default-rgb), var(--bs-text-opacity)) !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--bs-text-opacity: 1;color:hsla(0,0%,100%,.5) !important}.text-body-secondary{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-body-tertiary{--bs-text-opacity: 1;color:var(--bs-tertiary-color) !important}.text-body-emphasis{--bs-text-opacity: 1;color:var(--bs-emphasis-color) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: 0.25}.text-opacity-50{--bs-text-opacity: 0.5}.text-opacity-75{--bs-text-opacity: 0.75}.text-opacity-100{--bs-text-opacity: 1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis) !important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis) !important}.text-success-emphasis{color:var(--bs-success-text-emphasis) !important}.text-info-emphasis{color:var(--bs-info-text-emphasis) !important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis) !important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis) !important}.text-light-emphasis{color:var(--bs-light-text-emphasis) !important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis) !important}.link-opacity-10{--bs-link-opacity: 0.1}.link-opacity-10-hover:hover{--bs-link-opacity: 0.1}.link-opacity-25{--bs-link-opacity: 0.25}.link-opacity-25-hover:hover{--bs-link-opacity: 0.25}.link-opacity-50{--bs-link-opacity: 0.5}.link-opacity-50-hover:hover{--bs-link-opacity: 0.5}.link-opacity-75{--bs-link-opacity: 0.75}.link-opacity-75-hover:hover{--bs-link-opacity: 0.75}.link-opacity-100{--bs-link-opacity: 1}.link-opacity-100-hover:hover{--bs-link-opacity: 1}.link-offset-1{text-underline-offset:.125em !important}.link-offset-1-hover:hover{text-underline-offset:.125em !important}.link-offset-2{text-underline-offset:.25em !important}.link-offset-2-hover:hover{text-underline-offset:.25em !important}.link-offset-3{text-underline-offset:.375em !important}.link-offset-3-hover:hover{text-underline-offset:.375em !important}.link-underline-default{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-default-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-primary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-secondary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-success{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-info{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-warning{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-danger{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-light{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-dark{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important}.link-underline{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-underline-opacity-0{--bs-link-underline-opacity: 0}.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity: 0}.link-underline-opacity-10{--bs-link-underline-opacity: 0.1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity: 0.1}.link-underline-opacity-25{--bs-link-underline-opacity: 0.25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity: 0.25}.link-underline-opacity-50{--bs-link-underline-opacity: 0.5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity: 0.5}.link-underline-opacity-75{--bs-link-underline-opacity: 0.75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity: 0.75}.link-underline-opacity-100{--bs-link-underline-opacity: 1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity: 1}.bg-default{--bs-bg-opacity: 1;background-color:rgba(var(--bs-default-rgb), var(--bs-bg-opacity)) !important}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-body-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-body-tertiary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-opacity-10{--bs-bg-opacity: 0.1}.bg-opacity-25{--bs-bg-opacity: 0.25}.bg-opacity-50{--bs-bg-opacity: 0.5}.bg-opacity-75{--bs-bg-opacity: 0.75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle) !important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle) !important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle) !important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle) !important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle) !important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle) !important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle) !important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle) !important}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:var(--bs-border-radius) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--bs-border-radius-sm) !important}.rounded-2{border-radius:var(--bs-border-radius) !important}.rounded-3{border-radius:var(--bs-border-radius-lg) !important}.rounded-4{border-radius:var(--bs-border-radius-xl) !important}.rounded-5{border-radius:var(--bs-border-radius-xxl) !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:var(--bs-border-radius-pill) !important}.rounded-top{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm) !important;border-top-right-radius:var(--bs-border-radius-sm) !important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg) !important;border-top-right-radius:var(--bs-border-radius-lg) !important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl) !important;border-top-right-radius:var(--bs-border-radius-xl) !important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl) !important;border-top-right-radius:var(--bs-border-radius-xxl) !important}.rounded-top-circle{border-top-left-radius:50% !important;border-top-right-radius:50% !important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill) !important;border-top-right-radius:var(--bs-border-radius-pill) !important}.rounded-end{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm) !important;border-bottom-right-radius:var(--bs-border-radius-sm) !important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg) !important;border-bottom-right-radius:var(--bs-border-radius-lg) !important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl) !important;border-bottom-right-radius:var(--bs-border-radius-xl) !important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-right-radius:var(--bs-border-radius-xxl) !important}.rounded-end-circle{border-top-right-radius:50% !important;border-bottom-right-radius:50% !important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill) !important;border-bottom-right-radius:var(--bs-border-radius-pill) !important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm) !important;border-bottom-left-radius:var(--bs-border-radius-sm) !important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg) !important;border-bottom-left-radius:var(--bs-border-radius-lg) !important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl) !important;border-bottom-left-radius:var(--bs-border-radius-xl) !important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-left-radius:var(--bs-border-radius-xxl) !important}.rounded-bottom-circle{border-bottom-right-radius:50% !important;border-bottom-left-radius:50% !important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill) !important;border-bottom-left-radius:var(--bs-border-radius-pill) !important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm) !important;border-top-left-radius:var(--bs-border-radius-sm) !important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg) !important;border-top-left-radius:var(--bs-border-radius-lg) !important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl) !important;border-top-left-radius:var(--bs-border-radius-xl) !important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl) !important;border-top-left-radius:var(--bs-border-radius-xxl) !important}.rounded-start-circle{border-bottom-left-radius:50% !important;border-top-left-radius:50% !important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill) !important;border-top-left-radius:var(--bs-border-radius-pill) !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}.z-n1{z-index:-1 !important}.z-0{z-index:0 !important}.z-1{z-index:1 !important}.z-2{z-index:2 !important}.z-3{z-index:3 !important}@media(min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.object-fit-sm-contain{object-fit:contain !important}.object-fit-sm-cover{object-fit:cover !important}.object-fit-sm-fill{object-fit:fill !important}.object-fit-sm-scale{object-fit:scale-down !important}.object-fit-sm-none{object-fit:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-inline-grid{display:inline-grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.row-gap-sm-0{row-gap:0 !important}.row-gap-sm-1{row-gap:.25rem !important}.row-gap-sm-2{row-gap:.5rem !important}.row-gap-sm-3{row-gap:1rem !important}.row-gap-sm-4{row-gap:1.5rem !important}.row-gap-sm-5{row-gap:3rem !important}.column-gap-sm-0{column-gap:0 !important}.column-gap-sm-1{column-gap:.25rem !important}.column-gap-sm-2{column-gap:.5rem !important}.column-gap-sm-3{column-gap:1rem !important}.column-gap-sm-4{column-gap:1.5rem !important}.column-gap-sm-5{column-gap:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.object-fit-md-contain{object-fit:contain !important}.object-fit-md-cover{object-fit:cover !important}.object-fit-md-fill{object-fit:fill !important}.object-fit-md-scale{object-fit:scale-down !important}.object-fit-md-none{object-fit:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-inline-grid{display:inline-grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.row-gap-md-0{row-gap:0 !important}.row-gap-md-1{row-gap:.25rem !important}.row-gap-md-2{row-gap:.5rem !important}.row-gap-md-3{row-gap:1rem !important}.row-gap-md-4{row-gap:1.5rem !important}.row-gap-md-5{row-gap:3rem !important}.column-gap-md-0{column-gap:0 !important}.column-gap-md-1{column-gap:.25rem !important}.column-gap-md-2{column-gap:.5rem !important}.column-gap-md-3{column-gap:1rem !important}.column-gap-md-4{column-gap:1.5rem !important}.column-gap-md-5{column-gap:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.object-fit-lg-contain{object-fit:contain !important}.object-fit-lg-cover{object-fit:cover !important}.object-fit-lg-fill{object-fit:fill !important}.object-fit-lg-scale{object-fit:scale-down !important}.object-fit-lg-none{object-fit:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-inline-grid{display:inline-grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.row-gap-lg-0{row-gap:0 !important}.row-gap-lg-1{row-gap:.25rem !important}.row-gap-lg-2{row-gap:.5rem !important}.row-gap-lg-3{row-gap:1rem !important}.row-gap-lg-4{row-gap:1.5rem !important}.row-gap-lg-5{row-gap:3rem !important}.column-gap-lg-0{column-gap:0 !important}.column-gap-lg-1{column-gap:.25rem !important}.column-gap-lg-2{column-gap:.5rem !important}.column-gap-lg-3{column-gap:1rem !important}.column-gap-lg-4{column-gap:1.5rem !important}.column-gap-lg-5{column-gap:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.object-fit-xl-contain{object-fit:contain !important}.object-fit-xl-cover{object-fit:cover !important}.object-fit-xl-fill{object-fit:fill !important}.object-fit-xl-scale{object-fit:scale-down !important}.object-fit-xl-none{object-fit:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-inline-grid{display:inline-grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.row-gap-xl-0{row-gap:0 !important}.row-gap-xl-1{row-gap:.25rem !important}.row-gap-xl-2{row-gap:.5rem !important}.row-gap-xl-3{row-gap:1rem !important}.row-gap-xl-4{row-gap:1.5rem !important}.row-gap-xl-5{row-gap:3rem !important}.column-gap-xl-0{column-gap:0 !important}.column-gap-xl-1{column-gap:.25rem !important}.column-gap-xl-2{column-gap:.5rem !important}.column-gap-xl-3{column-gap:1rem !important}.column-gap-xl-4{column-gap:1.5rem !important}.column-gap-xl-5{column-gap:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.object-fit-xxl-contain{object-fit:contain !important}.object-fit-xxl-cover{object-fit:cover !important}.object-fit-xxl-fill{object-fit:fill !important}.object-fit-xxl-scale{object-fit:scale-down !important}.object-fit-xxl-none{object-fit:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-inline-grid{display:inline-grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.row-gap-xxl-0{row-gap:0 !important}.row-gap-xxl-1{row-gap:.25rem !important}.row-gap-xxl-2{row-gap:.5rem !important}.row-gap-xxl-3{row-gap:1rem !important}.row-gap-xxl-4{row-gap:1.5rem !important}.row-gap-xxl-5{row-gap:3rem !important}.column-gap-xxl-0{column-gap:0 !important}.column-gap-xxl-1{column-gap:.25rem !important}.column-gap-xxl-2{column-gap:.5rem !important}.column-gap-xxl-3{column-gap:1rem !important}.column-gap-xxl-4{column-gap:1.5rem !important}.column-gap-xxl-5{column-gap:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}.bg-default{color:#fff}.bg-primary{color:#fff}.bg-secondary{color:#fff}.bg-success{color:#fff}.bg-info{color:#fff}.bg-warning{color:#fff}.bg-danger{color:#fff}.bg-light{color:#000}.bg-dark{color:#fff}@media(min-width: 1200px){.fs-1{font-size:2rem !important}.fs-2{font-size:1.65rem !important}.fs-3{font-size:1.45rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-inline-grid{display:inline-grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}:root{--bslib-spacer: 1rem;--bslib-mb-spacer: var(--bslib-spacer, 1rem)}.bslib-mb-spacing{margin-bottom:var(--bslib-mb-spacer)}.bslib-gap-spacing{gap:var(--bslib-mb-spacer)}.bslib-gap-spacing>.bslib-mb-spacing,.bslib-gap-spacing>.form-group,.bslib-gap-spacing>p,.bslib-gap-spacing>pre{margin-bottom:0}.html-fill-container>.html-fill-item.bslib-mb-spacing{margin-bottom:0}.tab-content>.tab-pane.html-fill-container{display:none}.tab-content>.active.html-fill-container{display:flex}.tab-content.html-fill-container{padding:0}.bg-blue{--bslib-color-bg: #2780e3;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-blue{--bslib-color-fg: #2780e3;color:var(--bslib-color-fg)}.bg-indigo{--bslib-color-bg: #6610f2;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-indigo{--bslib-color-fg: #6610f2;color:var(--bslib-color-fg)}.bg-purple{--bslib-color-bg: #613d7c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-purple{--bslib-color-fg: #613d7c;color:var(--bslib-color-fg)}.bg-pink{--bslib-color-bg: #e83e8c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-pink{--bslib-color-fg: #e83e8c;color:var(--bslib-color-fg)}.bg-red{--bslib-color-bg: #ff0039;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-red{--bslib-color-fg: #ff0039;color:var(--bslib-color-fg)}.bg-orange{--bslib-color-bg: #f0ad4e;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-orange{--bslib-color-fg: #f0ad4e;color:var(--bslib-color-fg)}.bg-yellow{--bslib-color-bg: #ff7518;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-yellow{--bslib-color-fg: #ff7518;color:var(--bslib-color-fg)}.bg-green{--bslib-color-bg: #3fb618;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-green{--bslib-color-fg: #3fb618;color:var(--bslib-color-fg)}.bg-teal{--bslib-color-bg: #20c997;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-teal{--bslib-color-fg: #20c997;color:var(--bslib-color-fg)}.bg-cyan{--bslib-color-bg: #9954bb;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-cyan{--bslib-color-fg: #9954bb;color:var(--bslib-color-fg)}.text-default{--bslib-color-fg: #343a40}.bg-default{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.text-primary{--bslib-color-fg: #2780e3}.bg-primary{--bslib-color-bg: #2780e3;--bslib-color-fg: #fff}.text-secondary{--bslib-color-fg: #343a40}.bg-secondary{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.text-success{--bslib-color-fg: #3fb618}.bg-success{--bslib-color-bg: #3fb618;--bslib-color-fg: #fff}.text-info{--bslib-color-fg: #9954bb}.bg-info{--bslib-color-bg: #9954bb;--bslib-color-fg: #fff}.text-warning{--bslib-color-fg: #ff7518}.bg-warning{--bslib-color-bg: #ff7518;--bslib-color-fg: #fff}.text-danger{--bslib-color-fg: #ff0039}.bg-danger{--bslib-color-bg: #ff0039;--bslib-color-fg: #fff}.text-light{--bslib-color-fg: #f8f9fa}.bg-light{--bslib-color-bg: #f8f9fa;--bslib-color-fg: #000}.text-dark{--bslib-color-fg: #343a40}.bg-dark{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.bg-gradient-blue-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(64.2, 83.2, 233);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(64.2,83.2,233);color:#fff}.bg-gradient-blue-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(62.2, 101.2, 185.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(62.2,101.2,185.8);color:#fff}.bg-gradient-blue-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(116.2, 101.6, 192.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(116.2,101.6,192.2);color:#fff}.bg-gradient-blue-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(125.4, 76.8, 159);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(125.4,76.8,159);color:#fff}.bg-gradient-blue-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(119.4, 146, 167.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(119.4,146,167.4);color:#fff}.bg-gradient-blue-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(125.4, 123.6, 145.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(125.4,123.6,145.8);color:#fff}.bg-gradient-blue-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(48.6, 149.6, 145.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(48.6,149.6,145.8);color:#fff}.bg-gradient-blue-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(36.2, 157.2, 196.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(36.2,157.2,196.6);color:#fff}.bg-gradient-blue-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(84.6, 110.4, 211);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(84.6,110.4,211);color:#fff}.bg-gradient-indigo-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(76.8, 60.8, 236);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(76.8,60.8,236);color:#fff}.bg-gradient-indigo-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(100, 34, 194.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(100,34,194.8);color:#fff}.bg-gradient-indigo-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(154, 34.4, 201.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(154,34.4,201.2);color:#fff}.bg-gradient-indigo-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(163.2, 9.6, 168);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(163.2,9.6,168);color:#fff}.bg-gradient-indigo-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(157.2, 78.8, 176.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(157.2,78.8,176.4);color:#fff}.bg-gradient-indigo-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(163.2, 56.4, 154.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(163.2,56.4,154.8);color:#fff}.bg-gradient-indigo-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(86.4, 82.4, 154.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(86.4,82.4,154.8);color:#fff}.bg-gradient-indigo-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(74, 90, 205.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(74,90,205.6);color:#fff}.bg-gradient-indigo-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(122.4, 43.2, 220);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(122.4,43.2,220);color:#fff}.bg-gradient-purple-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(73.8, 87.8, 165.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(73.8,87.8,165.2);color:#fff}.bg-gradient-purple-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(99, 43, 171.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(99,43,171.2);color:#fff}.bg-gradient-purple-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(151, 61.4, 130.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(151,61.4,130.4);color:#fff}.bg-gradient-purple-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(160.2, 36.6, 97.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(160.2,36.6,97.2);color:#fff}.bg-gradient-purple-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(154.2, 105.8, 105.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(154.2,105.8,105.6);color:#fff}.bg-gradient-purple-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(160.2, 83.4, 84);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(160.2,83.4,84);color:#fff}.bg-gradient-purple-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(83.4, 109.4, 84);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(83.4,109.4,84);color:#fff}.bg-gradient-purple-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(71, 117, 134.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(71,117,134.8);color:#fff}.bg-gradient-purple-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(119.4, 70.2, 149.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(119.4,70.2,149.2);color:#fff}.bg-gradient-pink-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(154.8, 88.4, 174.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(154.8,88.4,174.8);color:#fff}.bg-gradient-pink-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(180, 43.6, 180.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(180,43.6,180.8);color:#fff}.bg-gradient-pink-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(178, 61.6, 133.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(178,61.6,133.6);color:#fff}.bg-gradient-pink-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(241.2, 37.2, 106.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(241.2,37.2,106.8);color:#fff}.bg-gradient-pink-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(235.2, 106.4, 115.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(235.2,106.4,115.2);color:#fff}.bg-gradient-pink-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(241.2, 84, 93.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(241.2,84,93.6);color:#fff}.bg-gradient-pink-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(164.4, 110, 93.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(164.4,110,93.6);color:#fff}.bg-gradient-pink-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(152, 117.6, 144.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(152,117.6,144.4);color:#fff}.bg-gradient-pink-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(200.4, 70.8, 158.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(200.4,70.8,158.8);color:#fff}.bg-gradient-red-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(168.6, 51.2, 125);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(168.6,51.2,125);color:#fff}.bg-gradient-red-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 6.4, 131);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(193.8,6.4,131);color:#fff}.bg-gradient-red-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(191.8, 24.4, 83.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(191.8,24.4,83.8);color:#fff}.bg-gradient-red-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(245.8, 24.8, 90.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(245.8,24.8,90.2);color:#fff}.bg-gradient-red-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(249, 69.2, 65.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(249,69.2,65.4);color:#fff}.bg-gradient-red-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(255, 46.8, 43.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(255,46.8,43.8);color:#fff}.bg-gradient-red-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(178.2, 72.8, 43.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(178.2,72.8,43.8);color:#fff}.bg-gradient-red-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(165.8, 80.4, 94.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(165.8,80.4,94.6);color:#fff}.bg-gradient-red-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(214.2, 33.6, 109);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(214.2,33.6,109);color:#fff}.bg-gradient-orange-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(159.6, 155, 137.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(159.6,155,137.6);color:#fff}.bg-gradient-orange-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(184.8, 110.2, 143.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(184.8,110.2,143.6);color:#fff}.bg-gradient-orange-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(182.8, 128.2, 96.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(182.8,128.2,96.4);color:#fff}.bg-gradient-orange-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(236.8, 128.6, 102.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(236.8,128.6,102.8);color:#fff}.bg-gradient-orange-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(246, 103.8, 69.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(246,103.8,69.6);color:#fff}.bg-gradient-orange-yellow{--bslib-color-fg: #000;--bslib-color-bg: rgb(246, 150.6, 56.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(246,150.6,56.4);color:#000}.bg-gradient-orange-green{--bslib-color-fg: #000;--bslib-color-bg: rgb(169.2, 176.6, 56.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(169.2,176.6,56.4);color:#000}.bg-gradient-orange-teal{--bslib-color-fg: #000;--bslib-color-bg: rgb(156.8, 184.2, 107.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(156.8,184.2,107.2);color:#000}.bg-gradient-orange-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(205.2, 137.4, 121.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(205.2,137.4,121.6);color:#fff}.bg-gradient-yellow-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(168.6, 121.4, 105.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(168.6,121.4,105.2);color:#fff}.bg-gradient-yellow-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 76.6, 111.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(193.8,76.6,111.2);color:#fff}.bg-gradient-yellow-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(191.8, 94.6, 64);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(191.8,94.6,64);color:#fff}.bg-gradient-yellow-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(245.8, 95, 70.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(245.8,95,70.4);color:#fff}.bg-gradient-yellow-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(255, 70.2, 37.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(255,70.2,37.2);color:#fff}.bg-gradient-yellow-orange{--bslib-color-fg: #000;--bslib-color-bg: rgb(249, 139.4, 45.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(249,139.4,45.6);color:#000}.bg-gradient-yellow-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(178.2, 143, 24);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(178.2,143,24);color:#fff}.bg-gradient-yellow-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(165.8, 150.6, 74.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(165.8,150.6,74.8);color:#fff}.bg-gradient-yellow-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(214.2, 103.8, 89.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(214.2,103.8,89.2);color:#fff}.bg-gradient-green-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(53.4, 160.4, 105.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(53.4,160.4,105.2);color:#fff}.bg-gradient-green-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(78.6, 115.6, 111.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(78.6,115.6,111.2);color:#fff}.bg-gradient-green-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(76.6, 133.6, 64);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(76.6,133.6,64);color:#fff}.bg-gradient-green-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(130.6, 134, 70.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(130.6,134,70.4);color:#fff}.bg-gradient-green-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(139.8, 109.2, 37.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(139.8,109.2,37.2);color:#fff}.bg-gradient-green-orange{--bslib-color-fg: #000;--bslib-color-bg: rgb(133.8, 178.4, 45.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(133.8,178.4,45.6);color:#000}.bg-gradient-green-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(139.8, 156, 24);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(139.8,156,24);color:#fff}.bg-gradient-green-teal{--bslib-color-fg: #000;--bslib-color-bg: rgb(50.6, 189.6, 74.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(50.6,189.6,74.8);color:#000}.bg-gradient-green-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(99, 142.8, 89.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(99,142.8,89.2);color:#fff}.bg-gradient-teal-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(34.8, 171.8, 181.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(34.8,171.8,181.4);color:#fff}.bg-gradient-teal-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(60, 127, 187.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(60,127,187.4);color:#fff}.bg-gradient-teal-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(58, 145, 140.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(58,145,140.2);color:#fff}.bg-gradient-teal-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(112, 145.4, 146.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(112,145.4,146.6);color:#fff}.bg-gradient-teal-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(121.2, 120.6, 113.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(121.2,120.6,113.4);color:#fff}.bg-gradient-teal-orange{--bslib-color-fg: #000;--bslib-color-bg: rgb(115.2, 189.8, 121.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(115.2,189.8,121.8);color:#000}.bg-gradient-teal-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(121.2, 167.4, 100.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(121.2,167.4,100.2);color:#fff}.bg-gradient-teal-green{--bslib-color-fg: #000;--bslib-color-bg: rgb(44.4, 193.4, 100.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(44.4,193.4,100.2);color:#000}.bg-gradient-teal-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(80.4, 154.2, 165.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(80.4,154.2,165.4);color:#fff}.bg-gradient-cyan-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(107.4, 101.6, 203);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(107.4,101.6,203);color:#fff}.bg-gradient-cyan-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(132.6, 56.8, 209);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(132.6,56.8,209);color:#fff}.bg-gradient-cyan-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(130.6, 74.8, 161.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(130.6,74.8,161.8);color:#fff}.bg-gradient-cyan-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(184.6, 75.2, 168.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(184.6,75.2,168.2);color:#fff}.bg-gradient-cyan-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 50.4, 135);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(193.8,50.4,135);color:#fff}.bg-gradient-cyan-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(187.8, 119.6, 143.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(187.8,119.6,143.4);color:#fff}.bg-gradient-cyan-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 97.2, 121.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(193.8,97.2,121.8);color:#fff}.bg-gradient-cyan-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(117, 123.2, 121.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(117,123.2,121.8);color:#fff}.bg-gradient-cyan-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(104.6, 130.8, 172.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(104.6,130.8,172.6);color:#fff}.tab-content>.tab-pane.html-fill-container{display:none}.tab-content>.active.html-fill-container{display:flex}.tab-content.html-fill-container{padding:0}:root{--bslib-spacer: 1rem;--bslib-mb-spacer: var(--bslib-spacer, 1rem)}.bslib-mb-spacing{margin-bottom:var(--bslib-mb-spacer)}.bslib-gap-spacing{gap:var(--bslib-mb-spacer)}.bslib-gap-spacing>.bslib-mb-spacing,.bslib-gap-spacing>.form-group,.bslib-gap-spacing>p,.bslib-gap-spacing>pre{margin-bottom:0}.html-fill-container>.html-fill-item.bslib-mb-spacing{margin-bottom:0}.bg-blue{--bslib-color-bg: #2780e3;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-blue{--bslib-color-fg: #2780e3;color:var(--bslib-color-fg)}.bg-indigo{--bslib-color-bg: #6610f2;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-indigo{--bslib-color-fg: #6610f2;color:var(--bslib-color-fg)}.bg-purple{--bslib-color-bg: #613d7c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-purple{--bslib-color-fg: #613d7c;color:var(--bslib-color-fg)}.bg-pink{--bslib-color-bg: #e83e8c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-pink{--bslib-color-fg: #e83e8c;color:var(--bslib-color-fg)}.bg-red{--bslib-color-bg: #ff0039;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-red{--bslib-color-fg: #ff0039;color:var(--bslib-color-fg)}.bg-orange{--bslib-color-bg: #f0ad4e;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-orange{--bslib-color-fg: #f0ad4e;color:var(--bslib-color-fg)}.bg-yellow{--bslib-color-bg: #ff7518;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-yellow{--bslib-color-fg: #ff7518;color:var(--bslib-color-fg)}.bg-green{--bslib-color-bg: #3fb618;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-green{--bslib-color-fg: #3fb618;color:var(--bslib-color-fg)}.bg-teal{--bslib-color-bg: #20c997;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-teal{--bslib-color-fg: #20c997;color:var(--bslib-color-fg)}.bg-cyan{--bslib-color-bg: #9954bb;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-cyan{--bslib-color-fg: #9954bb;color:var(--bslib-color-fg)}.text-default{--bslib-color-fg: #343a40}.bg-default{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.text-primary{--bslib-color-fg: #2780e3}.bg-primary{--bslib-color-bg: #2780e3;--bslib-color-fg: #fff}.text-secondary{--bslib-color-fg: #343a40}.bg-secondary{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.text-success{--bslib-color-fg: #3fb618}.bg-success{--bslib-color-bg: #3fb618;--bslib-color-fg: #fff}.text-info{--bslib-color-fg: #9954bb}.bg-info{--bslib-color-bg: #9954bb;--bslib-color-fg: #fff}.text-warning{--bslib-color-fg: #ff7518}.bg-warning{--bslib-color-bg: #ff7518;--bslib-color-fg: #fff}.text-danger{--bslib-color-fg: #ff0039}.bg-danger{--bslib-color-bg: #ff0039;--bslib-color-fg: #fff}.text-light{--bslib-color-fg: #f8f9fa}.bg-light{--bslib-color-bg: #f8f9fa;--bslib-color-fg: #000}.text-dark{--bslib-color-fg: #343a40}.bg-dark{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.bg-gradient-blue-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(64.2, 83.2, 233);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(64.2,83.2,233);color:#fff}.bg-gradient-blue-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(62.2, 101.2, 185.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(62.2,101.2,185.8);color:#fff}.bg-gradient-blue-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(116.2, 101.6, 192.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(116.2,101.6,192.2);color:#fff}.bg-gradient-blue-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(125.4, 76.8, 159);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(125.4,76.8,159);color:#fff}.bg-gradient-blue-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(119.4, 146, 167.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(119.4,146,167.4);color:#fff}.bg-gradient-blue-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(125.4, 123.6, 145.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(125.4,123.6,145.8);color:#fff}.bg-gradient-blue-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(48.6, 149.6, 145.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(48.6,149.6,145.8);color:#fff}.bg-gradient-blue-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(36.2, 157.2, 196.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(36.2,157.2,196.6);color:#fff}.bg-gradient-blue-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(84.6, 110.4, 211);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(84.6,110.4,211);color:#fff}.bg-gradient-indigo-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(76.8, 60.8, 236);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(76.8,60.8,236);color:#fff}.bg-gradient-indigo-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(100, 34, 194.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(100,34,194.8);color:#fff}.bg-gradient-indigo-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(154, 34.4, 201.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(154,34.4,201.2);color:#fff}.bg-gradient-indigo-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(163.2, 9.6, 168);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(163.2,9.6,168);color:#fff}.bg-gradient-indigo-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(157.2, 78.8, 176.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(157.2,78.8,176.4);color:#fff}.bg-gradient-indigo-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(163.2, 56.4, 154.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(163.2,56.4,154.8);color:#fff}.bg-gradient-indigo-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(86.4, 82.4, 154.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(86.4,82.4,154.8);color:#fff}.bg-gradient-indigo-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(74, 90, 205.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(74,90,205.6);color:#fff}.bg-gradient-indigo-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(122.4, 43.2, 220);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(122.4,43.2,220);color:#fff}.bg-gradient-purple-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(73.8, 87.8, 165.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(73.8,87.8,165.2);color:#fff}.bg-gradient-purple-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(99, 43, 171.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(99,43,171.2);color:#fff}.bg-gradient-purple-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(151, 61.4, 130.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(151,61.4,130.4);color:#fff}.bg-gradient-purple-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(160.2, 36.6, 97.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(160.2,36.6,97.2);color:#fff}.bg-gradient-purple-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(154.2, 105.8, 105.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(154.2,105.8,105.6);color:#fff}.bg-gradient-purple-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(160.2, 83.4, 84);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(160.2,83.4,84);color:#fff}.bg-gradient-purple-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(83.4, 109.4, 84);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(83.4,109.4,84);color:#fff}.bg-gradient-purple-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(71, 117, 134.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(71,117,134.8);color:#fff}.bg-gradient-purple-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(119.4, 70.2, 149.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(119.4,70.2,149.2);color:#fff}.bg-gradient-pink-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(154.8, 88.4, 174.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(154.8,88.4,174.8);color:#fff}.bg-gradient-pink-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(180, 43.6, 180.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(180,43.6,180.8);color:#fff}.bg-gradient-pink-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(178, 61.6, 133.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(178,61.6,133.6);color:#fff}.bg-gradient-pink-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(241.2, 37.2, 106.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(241.2,37.2,106.8);color:#fff}.bg-gradient-pink-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(235.2, 106.4, 115.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(235.2,106.4,115.2);color:#fff}.bg-gradient-pink-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(241.2, 84, 93.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(241.2,84,93.6);color:#fff}.bg-gradient-pink-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(164.4, 110, 93.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(164.4,110,93.6);color:#fff}.bg-gradient-pink-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(152, 117.6, 144.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(152,117.6,144.4);color:#fff}.bg-gradient-pink-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(200.4, 70.8, 158.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(200.4,70.8,158.8);color:#fff}.bg-gradient-red-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(168.6, 51.2, 125);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(168.6,51.2,125);color:#fff}.bg-gradient-red-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 6.4, 131);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(193.8,6.4,131);color:#fff}.bg-gradient-red-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(191.8, 24.4, 83.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(191.8,24.4,83.8);color:#fff}.bg-gradient-red-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(245.8, 24.8, 90.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(245.8,24.8,90.2);color:#fff}.bg-gradient-red-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(249, 69.2, 65.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(249,69.2,65.4);color:#fff}.bg-gradient-red-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(255, 46.8, 43.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(255,46.8,43.8);color:#fff}.bg-gradient-red-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(178.2, 72.8, 43.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(178.2,72.8,43.8);color:#fff}.bg-gradient-red-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(165.8, 80.4, 94.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(165.8,80.4,94.6);color:#fff}.bg-gradient-red-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(214.2, 33.6, 109);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(214.2,33.6,109);color:#fff}.bg-gradient-orange-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(159.6, 155, 137.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(159.6,155,137.6);color:#fff}.bg-gradient-orange-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(184.8, 110.2, 143.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(184.8,110.2,143.6);color:#fff}.bg-gradient-orange-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(182.8, 128.2, 96.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(182.8,128.2,96.4);color:#fff}.bg-gradient-orange-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(236.8, 128.6, 102.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(236.8,128.6,102.8);color:#fff}.bg-gradient-orange-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(246, 103.8, 69.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(246,103.8,69.6);color:#fff}.bg-gradient-orange-yellow{--bslib-color-fg: #000;--bslib-color-bg: rgb(246, 150.6, 56.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(246,150.6,56.4);color:#000}.bg-gradient-orange-green{--bslib-color-fg: #000;--bslib-color-bg: rgb(169.2, 176.6, 56.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(169.2,176.6,56.4);color:#000}.bg-gradient-orange-teal{--bslib-color-fg: #000;--bslib-color-bg: rgb(156.8, 184.2, 107.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(156.8,184.2,107.2);color:#000}.bg-gradient-orange-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(205.2, 137.4, 121.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(205.2,137.4,121.6);color:#fff}.bg-gradient-yellow-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(168.6, 121.4, 105.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(168.6,121.4,105.2);color:#fff}.bg-gradient-yellow-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 76.6, 111.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(193.8,76.6,111.2);color:#fff}.bg-gradient-yellow-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(191.8, 94.6, 64);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(191.8,94.6,64);color:#fff}.bg-gradient-yellow-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(245.8, 95, 70.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(245.8,95,70.4);color:#fff}.bg-gradient-yellow-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(255, 70.2, 37.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(255,70.2,37.2);color:#fff}.bg-gradient-yellow-orange{--bslib-color-fg: #000;--bslib-color-bg: rgb(249, 139.4, 45.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(249,139.4,45.6);color:#000}.bg-gradient-yellow-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(178.2, 143, 24);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(178.2,143,24);color:#fff}.bg-gradient-yellow-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(165.8, 150.6, 74.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(165.8,150.6,74.8);color:#fff}.bg-gradient-yellow-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(214.2, 103.8, 89.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(214.2,103.8,89.2);color:#fff}.bg-gradient-green-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(53.4, 160.4, 105.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(53.4,160.4,105.2);color:#fff}.bg-gradient-green-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(78.6, 115.6, 111.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(78.6,115.6,111.2);color:#fff}.bg-gradient-green-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(76.6, 133.6, 64);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(76.6,133.6,64);color:#fff}.bg-gradient-green-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(130.6, 134, 70.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(130.6,134,70.4);color:#fff}.bg-gradient-green-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(139.8, 109.2, 37.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(139.8,109.2,37.2);color:#fff}.bg-gradient-green-orange{--bslib-color-fg: #000;--bslib-color-bg: rgb(133.8, 178.4, 45.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(133.8,178.4,45.6);color:#000}.bg-gradient-green-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(139.8, 156, 24);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(139.8,156,24);color:#fff}.bg-gradient-green-teal{--bslib-color-fg: #000;--bslib-color-bg: rgb(50.6, 189.6, 74.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(50.6,189.6,74.8);color:#000}.bg-gradient-green-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(99, 142.8, 89.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(99,142.8,89.2);color:#fff}.bg-gradient-teal-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(34.8, 171.8, 181.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(34.8,171.8,181.4);color:#fff}.bg-gradient-teal-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(60, 127, 187.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(60,127,187.4);color:#fff}.bg-gradient-teal-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(58, 145, 140.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(58,145,140.2);color:#fff}.bg-gradient-teal-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(112, 145.4, 146.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(112,145.4,146.6);color:#fff}.bg-gradient-teal-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(121.2, 120.6, 113.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(121.2,120.6,113.4);color:#fff}.bg-gradient-teal-orange{--bslib-color-fg: #000;--bslib-color-bg: rgb(115.2, 189.8, 121.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(115.2,189.8,121.8);color:#000}.bg-gradient-teal-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(121.2, 167.4, 100.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(121.2,167.4,100.2);color:#fff}.bg-gradient-teal-green{--bslib-color-fg: #000;--bslib-color-bg: rgb(44.4, 193.4, 100.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(44.4,193.4,100.2);color:#000}.bg-gradient-teal-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(80.4, 154.2, 165.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(80.4,154.2,165.4);color:#fff}.bg-gradient-cyan-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(107.4, 101.6, 203);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(107.4,101.6,203);color:#fff}.bg-gradient-cyan-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(132.6, 56.8, 209);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(132.6,56.8,209);color:#fff}.bg-gradient-cyan-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(130.6, 74.8, 161.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(130.6,74.8,161.8);color:#fff}.bg-gradient-cyan-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(184.6, 75.2, 168.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(184.6,75.2,168.2);color:#fff}.bg-gradient-cyan-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 50.4, 135);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(193.8,50.4,135);color:#fff}.bg-gradient-cyan-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(187.8, 119.6, 143.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(187.8,119.6,143.4);color:#fff}.bg-gradient-cyan-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 97.2, 121.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(193.8,97.2,121.8);color:#fff}.bg-gradient-cyan-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(117, 123.2, 121.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(117,123.2,121.8);color:#fff}.bg-gradient-cyan-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(104.6, 130.8, 172.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(104.6,130.8,172.6);color:#fff}:root{--bslib-value-box-shadow: none;--bslib-value-box-border-width-auto-yes: var(--bslib-value-box-border-width-baseline);--bslib-value-box-border-width-auto-no: 0;--bslib-value-box-border-width-baseline: 1px}.bslib-value-box{border-width:var(--bslib-value-box-border-width-auto-no, var(--bslib-value-box-border-width-baseline));container-name:bslib-value-box;container-type:inline-size}.bslib-value-box.card{box-shadow:var(--bslib-value-box-shadow)}.bslib-value-box.border-auto{border-width:var(--bslib-value-box-border-width-auto-yes, var(--bslib-value-box-border-width-baseline))}.bslib-value-box.default{--bslib-value-box-bg-default: var(--bs-card-bg, #fff);--bslib-value-box-border-color-default: var(--bs-card-border-color, rgba(0, 0, 0, 0.175));color:var(--bslib-value-box-color);background-color:var(--bslib-value-box-bg, var(--bslib-value-box-bg-default));border-color:var(--bslib-value-box-border-color, var(--bslib-value-box-border-color-default))}.bslib-value-box .value-box-grid{display:grid;grid-template-areas:"left right";align-items:center;overflow:hidden}.bslib-value-box .value-box-showcase{height:100%;max-height:var(---bslib-value-box-showcase-max-h, 100%)}.bslib-value-box .value-box-showcase,.bslib-value-box .value-box-showcase>.html-fill-item{width:100%}.bslib-value-box[data-full-screen=true] .value-box-showcase{max-height:var(---bslib-value-box-showcase-max-h-fs, 100%)}@media screen and (min-width: 575.98px){@container bslib-value-box (max-width: 300px){.bslib-value-box:not(.showcase-bottom) .value-box-grid{grid-template-columns:1fr !important;grid-template-rows:auto auto;grid-template-areas:"top" "bottom"}.bslib-value-box:not(.showcase-bottom) .value-box-grid .value-box-showcase{grid-area:top !important}.bslib-value-box:not(.showcase-bottom) .value-box-grid .value-box-area{grid-area:bottom !important;justify-content:end}}}.bslib-value-box .value-box-area{justify-content:center;padding:1.5rem 1rem;font-size:.9rem;font-weight:500}.bslib-value-box .value-box-area *{margin-bottom:0;margin-top:0}.bslib-value-box .value-box-title{font-size:1rem;margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2}.bslib-value-box .value-box-title:empty::after{content:" "}.bslib-value-box .value-box-value{font-size:calc(1.29rem + 0.48vw);margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2}@media(min-width: 1200px){.bslib-value-box .value-box-value{font-size:1.65rem}}.bslib-value-box .value-box-value:empty::after{content:" "}.bslib-value-box .value-box-showcase{align-items:center;justify-content:center;margin-top:auto;margin-bottom:auto;padding:1rem}.bslib-value-box .value-box-showcase .bi,.bslib-value-box .value-box-showcase .fa,.bslib-value-box .value-box-showcase .fab,.bslib-value-box .value-box-showcase .fas,.bslib-value-box .value-box-showcase .far{opacity:.85;min-width:50px;max-width:125%}.bslib-value-box .value-box-showcase .bi,.bslib-value-box .value-box-showcase .fa,.bslib-value-box .value-box-showcase .fab,.bslib-value-box .value-box-showcase .fas,.bslib-value-box .value-box-showcase .far{font-size:4rem}.bslib-value-box.showcase-top-right .value-box-grid{grid-template-columns:1fr var(---bslib-value-box-showcase-w, 50%)}.bslib-value-box.showcase-top-right .value-box-grid .value-box-showcase{grid-area:right;margin-left:auto;align-self:start;align-items:end;padding-left:0;padding-bottom:0}.bslib-value-box.showcase-top-right .value-box-grid .value-box-area{grid-area:left;align-self:end}.bslib-value-box.showcase-top-right[data-full-screen=true] .value-box-grid{grid-template-columns:auto var(---bslib-value-box-showcase-w-fs, 1fr)}.bslib-value-box.showcase-top-right[data-full-screen=true] .value-box-grid>div{align-self:center}.bslib-value-box.showcase-top-right:not([data-full-screen=true]) .value-box-showcase{margin-top:0}@container bslib-value-box (max-width: 300px){.bslib-value-box.showcase-top-right:not([data-full-screen=true]) .value-box-grid .value-box-showcase{padding-left:1rem}}.bslib-value-box.showcase-left-center .value-box-grid{grid-template-columns:var(---bslib-value-box-showcase-w, 30%) auto}.bslib-value-box.showcase-left-center[data-full-screen=true] .value-box-grid{grid-template-columns:var(---bslib-value-box-showcase-w-fs, 1fr) auto}.bslib-value-box.showcase-left-center:not([data-fill-screen=true]) .value-box-grid .value-box-showcase{grid-area:left}.bslib-value-box.showcase-left-center:not([data-fill-screen=true]) .value-box-grid .value-box-area{grid-area:right}.bslib-value-box.showcase-bottom .value-box-grid{grid-template-columns:1fr;grid-template-rows:1fr var(---bslib-value-box-showcase-h, auto);grid-template-areas:"top" "bottom";overflow:hidden}.bslib-value-box.showcase-bottom .value-box-grid .value-box-showcase{grid-area:bottom;padding:0;margin:0}.bslib-value-box.showcase-bottom .value-box-grid .value-box-area{grid-area:top}.bslib-value-box.showcase-bottom[data-full-screen=true] .value-box-grid{grid-template-rows:1fr var(---bslib-value-box-showcase-h-fs, 2fr)}.bslib-value-box.showcase-bottom[data-full-screen=true] .value-box-grid .value-box-showcase{padding:1rem}[data-bs-theme=dark] .bslib-value-box{--bslib-value-box-shadow: 0 0.5rem 1rem rgb(0 0 0 / 50%)}@media(min-width: 576px){.nav:not(.nav-hidden){display:flex !important;display:-webkit-flex !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column){float:none !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column)>.bslib-nav-spacer{margin-left:auto !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column)>.form-inline{margin-top:auto;margin-bottom:auto}.nav:not(.nav-hidden).nav-stacked{flex-direction:column;-webkit-flex-direction:column;height:100%}.nav:not(.nav-hidden).nav-stacked>.bslib-nav-spacer{margin-top:auto !important}}.bslib-card{overflow:auto}.bslib-card .card-body+.card-body{padding-top:0}.bslib-card .card-body{overflow:auto}.bslib-card .card-body p{margin-top:0}.bslib-card .card-body p:last-child{margin-bottom:0}.bslib-card .card-body{max-height:var(--bslib-card-body-max-height, none)}.bslib-card[data-full-screen=true]>.card-body{max-height:var(--bslib-card-body-max-height-full-screen, none)}.bslib-card .card-header .form-group{margin-bottom:0}.bslib-card .card-header .selectize-control{margin-bottom:0}.bslib-card .card-header .selectize-control .item{margin-right:1.15rem}.bslib-card .card-footer{margin-top:auto}.bslib-card .bslib-navs-card-title{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}.bslib-card .bslib-navs-card-title .nav{margin-left:auto}.bslib-card .bslib-sidebar-layout:not([data-bslib-sidebar-border=true]){border:none}.bslib-card .bslib-sidebar-layout:not([data-bslib-sidebar-border-radius=true]){border-top-left-radius:0;border-top-right-radius:0}[data-full-screen=true]{position:fixed;inset:3.5rem 1rem 1rem;height:auto !important;max-height:none !important;width:auto !important;z-index:1070}.bslib-full-screen-enter{display:none;position:absolute;bottom:var(--bslib-full-screen-enter-bottom, 0.2rem);right:var(--bslib-full-screen-enter-right, 0);top:var(--bslib-full-screen-enter-top);left:var(--bslib-full-screen-enter-left);color:var(--bslib-color-fg, var(--bs-card-color));background-color:var(--bslib-color-bg, var(--bs-card-bg, var(--bs-body-bg)));border:var(--bs-card-border-width) solid var(--bslib-color-fg, var(--bs-card-border-color));box-shadow:0 2px 4px rgba(0,0,0,.15);margin:.2rem .4rem;padding:.55rem !important;font-size:.8rem;cursor:pointer;opacity:.7;z-index:1070}.bslib-full-screen-enter:hover{opacity:1}.card[data-full-screen=false]:hover>*>.bslib-full-screen-enter{display:block}.bslib-has-full-screen .card:hover>*>.bslib-full-screen-enter{display:none}@media(max-width: 575.98px){.bslib-full-screen-enter{display:none !important}}.bslib-full-screen-exit{position:relative;top:1.35rem;font-size:.9rem;cursor:pointer;text-decoration:none;display:flex;float:right;margin-right:2.15rem;align-items:center;color:rgba(var(--bs-body-bg-rgb), 0.8)}.bslib-full-screen-exit:hover{color:rgba(var(--bs-body-bg-rgb), 1)}.bslib-full-screen-exit svg{margin-left:.5rem;font-size:1.5rem}#bslib-full-screen-overlay{position:fixed;inset:0;background-color:rgba(var(--bs-body-color-rgb), 0.6);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);z-index:1069;animation:bslib-full-screen-overlay-enter 400ms cubic-bezier(0.6, 0.02, 0.65, 1) forwards}@keyframes bslib-full-screen-overlay-enter{0%{opacity:0}100%{opacity:1}}.bslib-grid{display:grid !important;gap:var(--bslib-spacer, 1rem);height:var(--bslib-grid-height)}.bslib-grid.grid{grid-template-columns:repeat(var(--bs-columns, 12), minmax(0, 1fr));grid-template-rows:unset;grid-auto-rows:var(--bslib-grid--row-heights);--bslib-grid--row-heights--xs: unset;--bslib-grid--row-heights--sm: unset;--bslib-grid--row-heights--md: unset;--bslib-grid--row-heights--lg: unset;--bslib-grid--row-heights--xl: unset;--bslib-grid--row-heights--xxl: unset}.bslib-grid.grid.bslib-grid--row-heights--xs{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xs)}@media(min-width: 576px){.bslib-grid.grid.bslib-grid--row-heights--sm{--bslib-grid--row-heights: var(--bslib-grid--row-heights--sm)}}@media(min-width: 768px){.bslib-grid.grid.bslib-grid--row-heights--md{--bslib-grid--row-heights: var(--bslib-grid--row-heights--md)}}@media(min-width: 992px){.bslib-grid.grid.bslib-grid--row-heights--lg{--bslib-grid--row-heights: var(--bslib-grid--row-heights--lg)}}@media(min-width: 1200px){.bslib-grid.grid.bslib-grid--row-heights--xl{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xl)}}@media(min-width: 1400px){.bslib-grid.grid.bslib-grid--row-heights--xxl{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xxl)}}.bslib-grid>*>.shiny-input-container{width:100%}.bslib-grid-item{grid-column:auto/span 1}@media(max-width: 767.98px){.bslib-grid-item{grid-column:1/-1}}@media(max-width: 575.98px){.bslib-grid{grid-template-columns:1fr !important;height:var(--bslib-grid-height-mobile)}.bslib-grid.grid{height:unset !important;grid-auto-rows:var(--bslib-grid--row-heights--xs, auto)}}.accordion .accordion-header{font-size:calc(1.29rem + 0.48vw);margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2;color:var(--bs-heading-color);margin-bottom:0}@media(min-width: 1200px){.accordion .accordion-header{font-size:1.65rem}}.accordion .accordion-icon:not(:empty){margin-right:.75rem;display:flex}.accordion .accordion-button:not(.collapsed){box-shadow:none}.accordion .accordion-button:not(.collapsed):focus{box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.navbar+.container-fluid:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-sm:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-md:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-lg:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-xl:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-xxl:has(>.tab-content>.tab-pane.active.html-fill-container){padding-left:0;padding-right:0}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container{padding:var(--bslib-spacer, 1rem);gap:var(--bslib-spacer, 1rem)}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child){padding:0}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]){border-left:none;border-right:none;border-bottom:none}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]){border-radius:0}.navbar+div>.bslib-sidebar-layout{border-top:var(--bslib-sidebar-border)}html{height:100%}.bslib-page-fill{width:100%;height:100%;margin:0;padding:var(--bslib-spacer, 1rem);gap:var(--bslib-spacer, 1rem)}@media(max-width: 575.98px){.bslib-page-fill{height:var(--bslib-page-fill-mobile-height, auto)}}:root{--bslib-page-sidebar-title-bg: #f8f9fa;--bslib-page-sidebar-title-color: #000}.bslib-page-title{background-color:var(--bslib-page-sidebar-title-bg);color:var(--bslib-page-sidebar-title-color);font-size:1.25rem;font-weight:300;padding:var(--bslib-spacer, 1rem);padding-left:1.5rem;margin-bottom:0;border-bottom:1px solid #dee2e6}.bslib-sidebar-layout{--bslib-sidebar-transition-duration: 500ms;--bslib-sidebar-transition-easing-x: cubic-bezier(0.8, 0.78, 0.22, 1.07);--bslib-sidebar-border: var(--bs-card-border-width, 1px) solid var(--bs-card-border-color, rgba(0, 0, 0, 0.175));--bslib-sidebar-border-radius: var(--bs-border-radius);--bslib-sidebar-vert-border: var(--bs-card-border-width, 1px) solid var(--bs-card-border-color, rgba(0, 0, 0, 0.175));--bslib-sidebar-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.05);--bslib-sidebar-fg: var(--bs-emphasis-color, black);--bslib-sidebar-main-fg: var(--bs-card-color, var(--bs-body-color));--bslib-sidebar-main-bg: var(--bs-card-bg, var(--bs-body-bg));--bslib-sidebar-toggle-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.1);--bslib-sidebar-padding: calc(var(--bslib-spacer) * 1.5);--bslib-sidebar-icon-size: var(--bslib-spacer, 1rem);--bslib-sidebar-icon-button-size: calc(var(--bslib-sidebar-icon-size, 1rem) * 2);--bslib-sidebar-padding-icon: calc(var(--bslib-sidebar-icon-button-size, 2rem) * 1.5);--bslib-collapse-toggle-border-radius: var(--bs-border-radius, 0.25rem);--bslib-collapse-toggle-transform: 0deg;--bslib-sidebar-toggle-transition-easing: cubic-bezier(1, 0, 0, 1);--bslib-collapse-toggle-right-transform: 180deg;--bslib-sidebar-column-main: minmax(0, 1fr);display:grid !important;grid-template-columns:min(100% - var(--bslib-sidebar-icon-size),var(--bslib-sidebar-width, 250px)) var(--bslib-sidebar-column-main);position:relative;transition:grid-template-columns ease-in-out var(--bslib-sidebar-transition-duration);border:var(--bslib-sidebar-border);border-radius:var(--bslib-sidebar-border-radius)}@media(prefers-reduced-motion: reduce){.bslib-sidebar-layout{transition:none}}.bslib-sidebar-layout[data-bslib-sidebar-border=false]{border:none}.bslib-sidebar-layout[data-bslib-sidebar-border-radius=false]{border-radius:initial}.bslib-sidebar-layout>.main,.bslib-sidebar-layout>.sidebar{grid-row:1/2;border-radius:inherit;overflow:auto}.bslib-sidebar-layout>.main{grid-column:2/3;border-top-left-radius:0;border-bottom-left-radius:0;padding:var(--bslib-sidebar-padding);transition:padding var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration);color:var(--bslib-sidebar-main-fg);background-color:var(--bslib-sidebar-main-bg)}.bslib-sidebar-layout>.sidebar{grid-column:1/2;width:100%;height:100%;border-right:var(--bslib-sidebar-vert-border);border-top-right-radius:0;border-bottom-right-radius:0;color:var(--bslib-sidebar-fg);background-color:var(--bslib-sidebar-bg);backdrop-filter:blur(5px)}.bslib-sidebar-layout>.sidebar>.sidebar-content{display:flex;flex-direction:column;gap:var(--bslib-spacer, 1rem);padding:var(--bslib-sidebar-padding);padding-top:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout>.sidebar>.sidebar-content>:last-child:not(.sidebar-title){margin-bottom:0}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion{margin-left:calc(-1*var(--bslib-sidebar-padding));margin-right:calc(-1*var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:last-child{margin-bottom:calc(-1*var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:last-child){margin-bottom:1rem}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion .accordion-body{display:flex;flex-direction:column}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:first-child) .accordion-item:first-child{border-top:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:last-child) .accordion-item:last-child{border-bottom:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.bslib-sidebar-layout>.sidebar>.sidebar-content.has-accordion>.sidebar-title{border-bottom:none;padding-bottom:0}.bslib-sidebar-layout>.sidebar .shiny-input-container{width:100%}.bslib-sidebar-layout[data-bslib-sidebar-open=always]>.sidebar>.sidebar-content{padding-top:var(--bslib-sidebar-padding)}.bslib-sidebar-layout>.collapse-toggle{grid-row:1/2;grid-column:1/2;display:inline-flex;align-items:center;position:absolute;right:calc(var(--bslib-sidebar-icon-size));top:calc(var(--bslib-sidebar-icon-size, 1rem)/2);border:none;border-radius:var(--bslib-collapse-toggle-border-radius);height:var(--bslib-sidebar-icon-button-size, 2rem);width:var(--bslib-sidebar-icon-button-size, 2rem);display:flex;align-items:center;justify-content:center;padding:0;color:var(--bslib-sidebar-fg);background-color:unset;transition:color var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),top var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),right var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),left var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover{background-color:var(--bslib-sidebar-toggle-bg)}.bslib-sidebar-layout>.collapse-toggle>.collapse-icon{opacity:.8;width:var(--bslib-sidebar-icon-size);height:var(--bslib-sidebar-icon-size);transform:rotateY(var(--bslib-collapse-toggle-transform));transition:transform var(--bslib-sidebar-toggle-transition-easing) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover>.collapse-icon{opacity:1}.bslib-sidebar-layout .sidebar-title{font-size:1.25rem;line-height:1.25;margin-top:0;margin-bottom:1rem;padding-bottom:1rem;border-bottom:var(--bslib-sidebar-border)}.bslib-sidebar-layout.sidebar-right{grid-template-columns:var(--bslib-sidebar-column-main) min(100% - var(--bslib-sidebar-icon-size),var(--bslib-sidebar-width, 250px))}.bslib-sidebar-layout.sidebar-right>.main{grid-column:1/2;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:inherit;border-bottom-left-radius:inherit}.bslib-sidebar-layout.sidebar-right>.sidebar{grid-column:2/3;border-right:none;border-left:var(--bslib-sidebar-vert-border);border-top-left-radius:0;border-bottom-left-radius:0}.bslib-sidebar-layout.sidebar-right>.collapse-toggle{grid-column:2/3;left:var(--bslib-sidebar-icon-size);right:unset;border:var(--bslib-collapse-toggle-border)}.bslib-sidebar-layout.sidebar-right>.collapse-toggle>.collapse-icon{transform:rotateY(var(--bslib-collapse-toggle-right-transform))}.bslib-sidebar-layout.sidebar-collapsed{--bslib-collapse-toggle-transform: 180deg;--bslib-collapse-toggle-right-transform: 0deg;--bslib-sidebar-vert-border: none;grid-template-columns:0 minmax(0, 1fr)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right{grid-template-columns:minmax(0, 1fr) 0}.bslib-sidebar-layout.sidebar-collapsed:not(.transitioning)>.sidebar>*{display:none}.bslib-sidebar-layout.sidebar-collapsed>.main{border-radius:inherit}.bslib-sidebar-layout.sidebar-collapsed:not(.sidebar-right)>.main{padding-left:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.main{padding-right:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout.sidebar-collapsed>.collapse-toggle{color:var(--bslib-sidebar-main-fg);top:calc(var(--bslib-sidebar-overlap-counter, 0)*(var(--bslib-sidebar-icon-size) + var(--bslib-sidebar-padding)) + var(--bslib-sidebar-icon-size, 1rem)/2);right:calc(-2.5*var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px))}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.collapse-toggle{left:calc(-2.5*var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px));right:unset}@media(min-width: 576px){.bslib-sidebar-layout.transitioning>.sidebar>.sidebar-content{display:none}}@media(max-width: 575.98px){.bslib-sidebar-layout[data-bslib-sidebar-open=desktop]{--bslib-sidebar-js-init-collapsed: true}.bslib-sidebar-layout>.sidebar,.bslib-sidebar-layout.sidebar-right>.sidebar{border:none}.bslib-sidebar-layout>.main,.bslib-sidebar-layout.sidebar-right>.main{grid-column:1/3}.bslib-sidebar-layout[data-bslib-sidebar-open=always]{display:block !important}.bslib-sidebar-layout[data-bslib-sidebar-open=always]>.sidebar{max-height:var(--bslib-sidebar-max-height-mobile);overflow-y:auto;border-top:var(--bslib-sidebar-vert-border)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]){grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-collapsed)>.sidebar{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-collapsed)>.collapse-toggle{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-right{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed.sidebar-right{grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-right)>.main{padding-left:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-right>.main{padding-right:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always])>.main{opacity:0;transition:opacity var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed>.main{opacity:1}}.html-fill-container{display:flex;flex-direction:column;min-height:0;min-width:0}.html-fill-container>.html-fill-item{flex:1 1 auto;min-height:0;min-width:0}.html-fill-container>:not(.html-fill-item){flex:0 0 auto}.sidebar-item .chapter-number{color:#343a40}.quarto-container{min-height:calc(100vh - 132px)}body.hypothesis-enabled #quarto-header{margin-right:16px}footer.footer .nav-footer,#quarto-header>nav{padding-left:1em;padding-right:1em}footer.footer div.nav-footer p:first-child{margin-top:0}footer.footer div.nav-footer p:last-child{margin-bottom:0}#quarto-content>*{padding-top:14px}#quarto-content>#quarto-sidebar-glass{padding-top:0px}@media(max-width: 991.98px){#quarto-content>*{padding-top:0}#quarto-content .subtitle{padding-top:14px}#quarto-content section:first-of-type h2:first-of-type,#quarto-content section:first-of-type .h2:first-of-type{margin-top:1rem}}.headroom-target,header.headroom{will-change:transform;transition:position 200ms linear;transition:all 200ms linear}header.headroom--pinned{transform:translateY(0%)}header.headroom--unpinned{transform:translateY(-100%)}.navbar-container{width:100%}.navbar-brand{overflow:hidden;text-overflow:ellipsis}.navbar-brand-container{max-width:calc(100% - 115px);min-width:0;display:flex;align-items:center}@media(min-width: 992px){.navbar-brand-container{margin-right:1em}}.navbar-brand.navbar-brand-logo{margin-right:4px;display:inline-flex}.navbar-toggler{flex-basis:content;flex-shrink:0}.navbar .navbar-brand-container{order:2}.navbar .navbar-toggler{order:1}.navbar .navbar-container>.navbar-nav{order:20}.navbar .navbar-container>.navbar-brand-container{margin-left:0 !important;margin-right:0 !important}.navbar .navbar-collapse{order:20}.navbar #quarto-search{order:4;margin-left:auto}.navbar .navbar-toggler{margin-right:.5em}.navbar-collapse .quarto-navbar-tools{margin-left:.5em}.navbar-logo{max-height:24px;width:auto;padding-right:4px}nav .nav-item:not(.compact){padding-top:1px}nav .nav-link i,nav .dropdown-item i{padding-right:1px}.navbar-expand-lg .navbar-nav .nav-link{padding-left:.6rem;padding-right:.6rem}nav .nav-item.compact .nav-link{padding-left:.5rem;padding-right:.5rem;font-size:1.1rem}.navbar .quarto-navbar-tools{order:3}.navbar .quarto-navbar-tools div.dropdown{display:inline-block}.navbar .quarto-navbar-tools .quarto-navigation-tool{color:rgb(84.32,84.66,85)}.navbar .quarto-navbar-tools .quarto-navigation-tool:hover{color:rgb(31.2,77.6,181.6)}.navbar-nav .dropdown-menu{min-width:220px;font-size:.9rem}.navbar .navbar-nav .nav-link.dropdown-toggle::after{opacity:.75;vertical-align:.175em}.navbar ul.dropdown-menu{padding-top:0;padding-bottom:0}.navbar .dropdown-header{text-transform:uppercase;font-size:.8rem;padding:0 .5rem}.navbar .dropdown-item{padding:.4rem .5rem}.navbar .dropdown-item>i.bi{margin-left:.1rem;margin-right:.25em}.sidebar #quarto-search{margin-top:-1px}.sidebar #quarto-search svg.aa-SubmitIcon{width:16px;height:16px}.sidebar-navigation a{color:inherit}.sidebar-title{margin-top:.25rem;padding-bottom:.5rem;font-size:1.3rem;line-height:1.6rem;visibility:visible}.sidebar-title>a{font-size:inherit;text-decoration:none}.sidebar-title .sidebar-tools-main{margin-top:-6px}@media(max-width: 991.98px){#quarto-sidebar div.sidebar-header{padding-top:.2em}}.sidebar-header-stacked .sidebar-title{margin-top:.6rem}.sidebar-logo{max-width:90%;padding-bottom:.5rem}.sidebar-logo-link{text-decoration:none}.sidebar-navigation li a{text-decoration:none}.sidebar-navigation .quarto-navigation-tool{opacity:.7;font-size:.875rem}#quarto-sidebar>nav>.sidebar-tools-main{margin-left:14px}.sidebar-tools-main{display:inline-flex;margin-left:0px;order:2}.sidebar-tools-main:not(.tools-wide){vertical-align:middle}.sidebar-navigation .quarto-navigation-tool.dropdown-toggle::after{display:none}.sidebar.sidebar-navigation>*{padding-top:1em}.sidebar-item{margin-bottom:.2em;line-height:1rem;margin-top:.4rem}.sidebar-section{padding-left:.5em;padding-bottom:.2em}.sidebar-item .sidebar-item-container{display:flex;justify-content:space-between;cursor:pointer}.sidebar-item-toggle:hover{cursor:pointer}.sidebar-item .sidebar-item-toggle .bi{font-size:.7rem;text-align:center}.sidebar-item .sidebar-item-toggle .bi-chevron-right::before{transition:transform 200ms ease}.sidebar-item .sidebar-item-toggle[aria-expanded=false] .bi-chevron-right::before{transform:none}.sidebar-item .sidebar-item-toggle[aria-expanded=true] .bi-chevron-right::before{transform:rotate(90deg)}.sidebar-item-text{width:100%}.sidebar-navigation .sidebar-divider{margin-left:0;margin-right:0;margin-top:.5rem;margin-bottom:.5rem}@media(max-width: 991.98px){.quarto-secondary-nav{display:block}.quarto-secondary-nav button.quarto-search-button{padding-right:0em;padding-left:2em}.quarto-secondary-nav button.quarto-btn-toggle{margin-left:-0.75rem;margin-right:.15rem}.quarto-secondary-nav nav.quarto-title-breadcrumbs{display:none}.quarto-secondary-nav nav.quarto-page-breadcrumbs{display:flex;align-items:center;padding-right:1em;margin-left:-0.25em}.quarto-secondary-nav nav.quarto-page-breadcrumbs a{text-decoration:none}.quarto-secondary-nav nav.quarto-page-breadcrumbs ol.breadcrumb{margin-bottom:0}}@media(min-width: 992px){.quarto-secondary-nav{display:none}}.quarto-title-breadcrumbs .breadcrumb{margin-bottom:.5em;font-size:.9rem}.quarto-title-breadcrumbs .breadcrumb li:last-of-type a{color:#6c757d}.quarto-secondary-nav .quarto-btn-toggle{color:hsl(0,0%,35%)}.quarto-secondary-nav[aria-expanded=false] .quarto-btn-toggle .bi-chevron-right::before{transform:none}.quarto-secondary-nav[aria-expanded=true] .quarto-btn-toggle .bi-chevron-right::before{transform:rotate(90deg)}.quarto-secondary-nav .quarto-btn-toggle .bi-chevron-right::before{transition:transform 200ms ease}.quarto-secondary-nav{cursor:pointer}.no-decor{text-decoration:none}.quarto-secondary-nav-title{margin-top:.3em;color:hsl(0,0%,35%);padding-top:4px}.quarto-secondary-nav nav.quarto-page-breadcrumbs{color:hsl(0,0%,35%)}.quarto-secondary-nav nav.quarto-page-breadcrumbs a{color:hsl(0,0%,35%)}.quarto-secondary-nav nav.quarto-page-breadcrumbs a:hover{color:rgba(32.76,81.48,190.68,.8)}.quarto-secondary-nav nav.quarto-page-breadcrumbs .breadcrumb-item::before{color:hsl(0,0%,55%)}.breadcrumb-item{line-height:1.2rem}div.sidebar-item-container{color:hsl(0,0%,35%)}div.sidebar-item-container:hover,div.sidebar-item-container:focus{color:rgba(32.76,81.48,190.68,.8)}div.sidebar-item-container.disabled{color:hsla(0,0%,35%,.75)}div.sidebar-item-container .active,div.sidebar-item-container .show>.nav-link,div.sidebar-item-container .sidebar-link>code{color:rgb(32.76,81.48,190.68)}div.sidebar.sidebar-navigation.rollup.quarto-sidebar-toggle-contents,nav.sidebar.sidebar-navigation:not(.rollup){background-color:#fff}@media(max-width: 991.98px){.sidebar-navigation .sidebar-item a,.nav-page .nav-page-text,.sidebar-navigation{font-size:1rem}.sidebar-navigation ul.sidebar-section.depth1 .sidebar-section-item{font-size:1.1rem}.sidebar-logo{display:none}.sidebar.sidebar-navigation{position:static;border-bottom:1px solid #dee2e6}.sidebar.sidebar-navigation.collapsing{position:fixed;z-index:1000}.sidebar.sidebar-navigation.show{position:fixed;z-index:1000}.sidebar.sidebar-navigation{min-height:100%}nav.quarto-secondary-nav{background-color:#fff;border-bottom:1px solid #dee2e6}.quarto-banner nav.quarto-secondary-nav{background-color:#f8f9fa;color:rgb(84.32,84.66,85);border-top:1px solid #dee2e6}.sidebar .sidebar-footer{visibility:visible;padding-top:1rem;position:inherit}.sidebar-tools-collapse{display:block}}#quarto-sidebar{transition:width .15s ease-in}#quarto-sidebar>*{padding-right:1em}@media(max-width: 991.98px){#quarto-sidebar .sidebar-menu-container{white-space:nowrap;min-width:225px}#quarto-sidebar.show{transition:width .15s ease-out}}@media(min-width: 992px){#quarto-sidebar{display:flex;flex-direction:column}.nav-page .nav-page-text,.sidebar-navigation .sidebar-section .sidebar-item{font-size:.875rem}.sidebar-navigation .sidebar-item{font-size:.925rem}.sidebar.sidebar-navigation{display:block;position:sticky}.sidebar-search{width:100%}.sidebar .sidebar-footer{visibility:visible}}@media(min-width: 992px){#quarto-sidebar-glass{display:none}}@media(max-width: 991.98px){#quarto-sidebar-glass{position:fixed;top:0;bottom:0;left:0;right:0;background-color:hsla(0,0%,100%,0);transition:background-color .15s ease-in;z-index:-1}#quarto-sidebar-glass.collapsing{z-index:1000}#quarto-sidebar-glass.show{transition:background-color .15s ease-out;background-color:hsla(0,0%,40%,.4);z-index:1000}}.sidebar .sidebar-footer{padding:.5rem 1rem;align-self:flex-end;color:#6c757d;width:100%}.quarto-page-breadcrumbs .breadcrumb-item+.breadcrumb-item,.quarto-page-breadcrumbs .breadcrumb-item{padding-right:.33em;padding-left:0}.quarto-page-breadcrumbs .breadcrumb-item::before{padding-right:.33em}.quarto-sidebar-footer{font-size:.875em}.sidebar-section .bi-chevron-right{vertical-align:middle}.sidebar-section .bi-chevron-right::before{font-size:.9em}.notransition{-webkit-transition:none !important;-moz-transition:none !important;-o-transition:none !important;transition:none !important}.btn:focus:not(:focus-visible){box-shadow:none}.page-navigation{display:flex;justify-content:space-between}.nav-page{padding-bottom:.75em}.nav-page .bi{font-size:1.8rem;vertical-align:middle}.nav-page .nav-page-text{padding-left:.25em;padding-right:.25em}.nav-page a{color:#6c757d;text-decoration:none;display:flex;align-items:center}.nav-page a:hover{color:rgb(31.2,77.6,181.6)}.nav-footer .toc-actions{padding-bottom:.5em;padding-top:.5em}.nav-footer .toc-actions a,.nav-footer .toc-actions a:hover{text-decoration:none}.nav-footer .toc-actions ul{display:flex;list-style:none}.nav-footer .toc-actions ul :first-child{margin-left:auto}.nav-footer .toc-actions ul :last-child{margin-right:auto}.nav-footer .toc-actions ul li{padding-right:1.5em}.nav-footer .toc-actions ul li i.bi{padding-right:.4em}.nav-footer .toc-actions ul li:last-of-type{padding-right:0}.nav-footer{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:baseline;text-align:center;padding-top:.5rem;padding-bottom:.5rem;background-color:#fff}body.nav-fixed{padding-top:64px}.nav-footer-contents{color:#6c757d;margin-top:.25rem}.nav-footer{min-height:3.5em;color:hsl(0,0%,46%)}.nav-footer a{color:hsl(0,0%,46%)}.nav-footer .nav-footer-left{font-size:.825em}.nav-footer .nav-footer-center{font-size:.825em}.nav-footer .nav-footer-right{font-size:.825em}.nav-footer-left .footer-items,.nav-footer-center .footer-items,.nav-footer-right .footer-items{display:inline-flex;padding-top:.3em;padding-bottom:.3em;margin-bottom:0em}.nav-footer-left .footer-items .nav-link,.nav-footer-center .footer-items .nav-link,.nav-footer-right .footer-items .nav-link{padding-left:.6em;padding-right:.6em}@media(min-width: 768px){.nav-footer-left{flex:1 1 0px;text-align:left}}@media(max-width: 575.98px){.nav-footer-left{margin-bottom:1em;flex:100%}}@media(min-width: 768px){.nav-footer-right{flex:1 1 0px;text-align:right}}@media(max-width: 575.98px){.nav-footer-right{margin-bottom:1em;flex:100%}}.nav-footer-center{text-align:center;min-height:3em}@media(min-width: 768px){.nav-footer-center{flex:1 1 0px}}.nav-footer-center .footer-items{justify-content:center}@media(max-width: 767.98px){.nav-footer-center{margin-bottom:1em;flex:100%}}@media(max-width: 767.98px){.nav-footer-center{margin-top:3em;order:10}}.navbar .quarto-reader-toggle.reader .quarto-reader-toggle-btn{background-color:rgb(84.32,84.66,85);border-radius:3px}@media(max-width: 991.98px){.quarto-reader-toggle{display:none}}.quarto-reader-toggle.reader.quarto-navigation-tool .quarto-reader-toggle-btn{background-color:hsl(0,0%,35%);border-radius:3px}.quarto-reader-toggle .quarto-reader-toggle-btn{display:inline-flex;padding-left:.2em;padding-right:.2em;margin-left:-0.2em;margin-right:-0.2em;text-align:center}.navbar .quarto-reader-toggle:not(.reader) .bi::before{background-image:url('data:image/svg+xml,')}.navbar .quarto-reader-toggle.reader .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-reader-toggle:not(.reader) .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-reader-toggle.reader .bi::before{background-image:url('data:image/svg+xml,')}#quarto-back-to-top{display:none;position:fixed;bottom:50px;background-color:#fff;border-radius:.25rem;box-shadow:0 .2rem .5rem #6c757d,0 0 .05rem #6c757d;color:#6c757d;text-decoration:none;font-size:.9em;text-align:center;left:50%;padding:.4rem .8rem;transform:translate(-50%, 0)}#quarto-announcement{padding:.5em;display:flex;justify-content:space-between;margin-bottom:0;font-size:.9em}#quarto-announcement .quarto-announcement-content{margin-right:auto}#quarto-announcement .quarto-announcement-content p{margin-bottom:0}#quarto-announcement .quarto-announcement-icon{margin-right:.5em;font-size:1.2em;margin-top:-0.15em}#quarto-announcement .quarto-announcement-action{cursor:pointer}.aa-DetachedSearchButtonQuery{display:none}.aa-DetachedOverlay ul.aa-List,#quarto-search-results ul.aa-List{list-style:none;padding-left:0}.aa-DetachedOverlay .aa-Panel,#quarto-search-results .aa-Panel{background-color:#fff;position:absolute;z-index:2000}#quarto-search-results .aa-Panel{max-width:400px}#quarto-search input{font-size:.925rem}@media(min-width: 992px){.navbar #quarto-search{margin-left:.25rem;order:999}}.navbar.navbar-expand-sm #quarto-search,.navbar.navbar-expand-md #quarto-search{order:999}@media(min-width: 992px){.navbar .quarto-navbar-tools{order:900}}@media(min-width: 992px){.navbar .quarto-navbar-tools.tools-end{margin-left:auto !important}}@media(max-width: 991.98px){#quarto-sidebar .sidebar-search{display:none}}#quarto-sidebar .sidebar-search .aa-Autocomplete{width:100%}.navbar .aa-Autocomplete .aa-Form{width:180px}.navbar #quarto-search.type-overlay .aa-Autocomplete{width:40px}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form{background-color:inherit;border:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form:focus-within{box-shadow:none;outline:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-InputWrapper{display:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-InputWrapper:focus-within{display:inherit}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-Label svg,.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-LoadingIndicator svg{width:26px;height:26px;color:rgb(84.32,84.66,85);opacity:1}.navbar #quarto-search.type-overlay .aa-Autocomplete svg.aa-SubmitIcon{width:26px;height:26px;color:rgb(84.32,84.66,85);opacity:1}.aa-Autocomplete .aa-Form,.aa-DetachedFormContainer .aa-Form{align-items:center;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;color:#343a40;display:flex;line-height:1em;margin:0;position:relative;width:100%}.aa-Autocomplete .aa-Form:focus-within,.aa-DetachedFormContainer .aa-Form:focus-within{box-shadow:rgba(39,128,227,.6) 0 0 0 1px;outline:currentColor none medium}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix{align-items:center;display:flex;flex-shrink:0;order:1}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-Label,.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-Label,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator{cursor:initial;flex-shrink:0;padding:0;text-align:left}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-Label svg,.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-Label svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator svg{color:#343a40;opacity:.5}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-SubmitButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-SubmitButton{appearance:none;background:none;border:0;margin:0}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator{align-items:center;display:flex;justify-content:center}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator[hidden]{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapper,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper{order:3;position:relative;width:100%}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input{appearance:none;background:none;border:0;color:#343a40;font:inherit;height:calc(1.5em + .1rem + 2px);padding:0;width:100%}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::placeholder,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::placeholder{color:#343a40;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input:focus{border-color:none;box-shadow:none;outline:none}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-decoration,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-cancel-button,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-button,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-decoration,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-decoration,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-cancel-button,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-button,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-decoration{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix{align-items:center;display:flex;order:4}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton{align-items:center;background:none;border:0;color:#343a40;opacity:.8;cursor:pointer;display:flex;margin:0;width:calc(1.5em + .1rem + 2px)}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:hover,.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:hover,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:focus{color:#343a40;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton[hidden]{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton svg{width:calc(1.5em + 0.75rem + calc(1px * 2))}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton{border:none;align-items:center;background:none;color:#343a40;opacity:.4;font-size:.7rem;cursor:pointer;display:none;margin:0;width:calc(1em + .1rem + 2px)}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:hover,.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:hover,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:focus{color:#343a40;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton[hidden]{display:none}.aa-PanelLayout:empty{display:none}.quarto-search-no-results.no-query{display:none}.aa-Source:has(.no-query){display:none}#quarto-search-results .aa-Panel{border:solid #dee2e6 1px}#quarto-search-results .aa-SourceNoResults{width:398px}.aa-DetachedOverlay .aa-Panel,#quarto-search-results .aa-Panel{max-height:65vh;overflow-y:auto;font-size:.925rem}.aa-DetachedOverlay .aa-SourceNoResults,#quarto-search-results .aa-SourceNoResults{height:60px;display:flex;justify-content:center;align-items:center}.aa-DetachedOverlay .search-error,#quarto-search-results .search-error{padding-top:10px;padding-left:20px;padding-right:20px;cursor:default}.aa-DetachedOverlay .search-error .search-error-title,#quarto-search-results .search-error .search-error-title{font-size:1.1rem;margin-bottom:.5rem}.aa-DetachedOverlay .search-error .search-error-title .search-error-icon,#quarto-search-results .search-error .search-error-title .search-error-icon{margin-right:8px}.aa-DetachedOverlay .search-error .search-error-text,#quarto-search-results .search-error .search-error-text{font-weight:300}.aa-DetachedOverlay .search-result-text,#quarto-search-results .search-result-text{font-weight:300;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.2rem;max-height:2.4rem}.aa-DetachedOverlay .aa-SourceHeader .search-result-header,#quarto-search-results .aa-SourceHeader .search-result-header{font-size:.875rem;background-color:hsl(0,0%,95%);padding-left:14px;padding-bottom:4px;padding-top:4px}.aa-DetachedOverlay .aa-SourceHeader .search-result-header-no-results,#quarto-search-results .aa-SourceHeader .search-result-header-no-results{display:none}.aa-DetachedOverlay .aa-SourceFooter .algolia-search-logo,#quarto-search-results .aa-SourceFooter .algolia-search-logo{width:110px;opacity:.85;margin:8px;float:right}.aa-DetachedOverlay .search-result-section,#quarto-search-results .search-result-section{font-size:.925em}.aa-DetachedOverlay a.search-result-link,#quarto-search-results a.search-result-link{color:inherit;text-decoration:none}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item,#quarto-search-results li.aa-Item[aria-selected=true] .search-item{background-color:#2780e3}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item.search-result-more,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-section,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-text,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-title-container,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-text-container,#quarto-search-results li.aa-Item[aria-selected=true] .search-item.search-result-more,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-section,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-text,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-title-container,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-text-container{color:#fff;background-color:#2780e3}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item mark.search-match,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-match.mark,#quarto-search-results li.aa-Item[aria-selected=true] .search-item mark.search-match,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-match.mark{color:#fff;background-color:rgb(75.1180327869,149.2360655738,231.6819672131)}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item,#quarto-search-results li.aa-Item[aria-selected=false] .search-item{background-color:#fff}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item.search-result-more,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-section,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-text,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-title-container,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-text-container,#quarto-search-results li.aa-Item[aria-selected=false] .search-item.search-result-more,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-section,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-text,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-title-container,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-text-container{color:#343a40}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item mark.search-match,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-match.mark,#quarto-search-results li.aa-Item[aria-selected=false] .search-item mark.search-match,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-match.mark{color:inherit;background-color:rgb(228.6196721311,239.4893442623,251.5803278689)}.aa-DetachedOverlay .aa-Item .search-result-doc:not(.document-selectable) .search-result-title-container,#quarto-search-results .aa-Item .search-result-doc:not(.document-selectable) .search-result-title-container{background-color:#fff;color:#343a40}.aa-DetachedOverlay .aa-Item .search-result-doc:not(.document-selectable) .search-result-text-container,#quarto-search-results .aa-Item .search-result-doc:not(.document-selectable) .search-result-text-container{padding-top:0px}.aa-DetachedOverlay li.aa-Item .search-result-doc.document-selectable .search-result-text-container,#quarto-search-results li.aa-Item .search-result-doc.document-selectable .search-result-text-container{margin-top:-4px}.aa-DetachedOverlay .aa-Item,#quarto-search-results .aa-Item{cursor:pointer}.aa-DetachedOverlay .aa-Item .search-item,#quarto-search-results .aa-Item .search-item{border-left:none;border-right:none;border-top:none;background-color:#fff;border-color:#dee2e6;color:#343a40}.aa-DetachedOverlay .aa-Item .search-item p,#quarto-search-results .aa-Item .search-item p{margin-top:0;margin-bottom:0}.aa-DetachedOverlay .aa-Item .search-item i.bi,#quarto-search-results .aa-Item .search-item i.bi{padding-left:8px;padding-right:8px;font-size:1.3em}.aa-DetachedOverlay .aa-Item .search-item .search-result-title,#quarto-search-results .aa-Item .search-item .search-result-title{margin-top:.3em;margin-bottom:0em}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs,#quarto-search-results .aa-Item .search-item .search-result-crumbs{white-space:nowrap;text-overflow:ellipsis;font-size:.8em;font-weight:300;margin-right:1em}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs:not(.search-result-crumbs-wrap),#quarto-search-results .aa-Item .search-item .search-result-crumbs:not(.search-result-crumbs-wrap){max-width:30%;margin-left:auto;margin-top:.5em;margin-bottom:.1rem}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs.search-result-crumbs-wrap,#quarto-search-results .aa-Item .search-item .search-result-crumbs.search-result-crumbs-wrap{flex-basis:100%;margin-top:0em;margin-bottom:.2em;margin-left:37px}.aa-DetachedOverlay .aa-Item .search-result-title-container,#quarto-search-results .aa-Item .search-result-title-container{font-size:1em;display:flex;flex-wrap:wrap;padding:6px 4px 6px 4px}.aa-DetachedOverlay .aa-Item .search-result-text-container,#quarto-search-results .aa-Item .search-result-text-container{padding-bottom:8px;padding-right:8px;margin-left:42px}.aa-DetachedOverlay .aa-Item .search-result-doc-section,.aa-DetachedOverlay .aa-Item .search-result-more,#quarto-search-results .aa-Item .search-result-doc-section,#quarto-search-results .aa-Item .search-result-more{padding-top:8px;padding-bottom:8px;padding-left:44px}.aa-DetachedOverlay .aa-Item .search-result-more,#quarto-search-results .aa-Item .search-result-more{font-size:.8em;font-weight:400}.aa-DetachedOverlay .aa-Item .search-result-doc,#quarto-search-results .aa-Item .search-result-doc{border-top:1px solid #dee2e6}.aa-DetachedSearchButton{background:none;border:none}.aa-DetachedSearchButton .aa-DetachedSearchButtonPlaceholder{display:none}.navbar .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon{color:rgb(84.32,84.66,85)}.sidebar-tools-collapse #quarto-search,.sidebar-tools-main #quarto-search{display:inline}.sidebar-tools-collapse #quarto-search .aa-Autocomplete,.sidebar-tools-main #quarto-search .aa-Autocomplete{display:inline}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton{padding-left:4px;padding-right:4px}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon{color:hsl(0,0%,35%)}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon .aa-SubmitIcon,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon .aa-SubmitIcon{margin-top:-3px}.aa-DetachedContainer{background:hsla(0,0%,100%,.65);width:90%;bottom:0;box-shadow:rgba(222,226,230,.6) 0 0 0 1px;outline:currentColor none medium;display:flex;flex-direction:column;left:0;margin:0;overflow:hidden;padding:0;position:fixed;right:0;top:0;z-index:1101}.aa-DetachedContainer::after{height:32px}.aa-DetachedContainer .aa-SourceHeader{margin:var(--aa-spacing-half) 0 var(--aa-spacing-half) 2px}.aa-DetachedContainer .aa-Panel{background-color:#fff;border-radius:0;box-shadow:none;flex-grow:1;margin:0;padding:0;position:relative}.aa-DetachedContainer .aa-PanelLayout{bottom:0;box-shadow:none;left:0;margin:0;max-height:none;overflow-y:auto;position:absolute;right:0;top:0;width:100%}.aa-DetachedFormContainer{background-color:#fff;border-bottom:1px solid #dee2e6;display:flex;flex-direction:row;justify-content:space-between;margin:0;padding:.5em}.aa-DetachedCancelButton{background:none;font-size:.8em;border:0;border-radius:3px;color:#343a40;cursor:pointer;margin:0 0 0 .5em;padding:0 .5em}.aa-DetachedCancelButton:hover,.aa-DetachedCancelButton:focus{box-shadow:rgba(39,128,227,.6) 0 0 0 1px;outline:currentColor none medium}.aa-DetachedContainer--modal{bottom:inherit;height:auto;margin:0 auto;position:absolute;top:100px;border-radius:6px;max-width:850px}@media(max-width: 575.98px){.aa-DetachedContainer--modal{width:100%;top:0px;border-radius:0px;border:none}}.aa-DetachedContainer--modal .aa-PanelLayout{max-height:var(--aa-detached-modal-max-height);padding-bottom:var(--aa-spacing-half);position:static}.aa-Detached{height:100vh;overflow:hidden}.aa-DetachedOverlay{background-color:rgba(52,58,64,.4);position:fixed;left:0;right:0;top:0;margin:0;padding:0;height:100vh;z-index:1100}.quarto-dashboard.nav-fixed.dashboard-sidebar #quarto-content.quarto-dashboard-content{padding:0em}.quarto-dashboard #quarto-content.quarto-dashboard-content{padding:1em}.quarto-dashboard #quarto-content.quarto-dashboard-content>*{padding-top:0}@media(min-width: 576px){.quarto-dashboard{height:100%}}.quarto-dashboard .card.valuebox.bslib-card.bg-primary{background-color:#5397e9 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-secondary{background-color:#343a40 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-success{background-color:#3aa716 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-info{background-color:rgba(153,84,187,.7019607843) !important}.quarto-dashboard .card.valuebox.bslib-card.bg-warning{background-color:#fa6400 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-danger{background-color:rgba(255,0,57,.7019607843) !important}.quarto-dashboard .card.valuebox.bslib-card.bg-light{background-color:#f8f9fa !important}.quarto-dashboard .card.valuebox.bslib-card.bg-dark{background-color:#343a40 !important}.quarto-dashboard.dashboard-fill{display:flex;flex-direction:column}.quarto-dashboard #quarto-appendix{display:none}.quarto-dashboard #quarto-header #quarto-dashboard-header{border-top:solid 1px rgb(218.25,223.5,228.75);border-bottom:solid 1px rgb(218.25,223.5,228.75)}.quarto-dashboard #quarto-header #quarto-dashboard-header>nav{padding-left:1em;padding-right:1em}.quarto-dashboard #quarto-header #quarto-dashboard-header>nav .navbar-brand-container{padding-left:0}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-toggler{margin-right:0}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-toggler-icon{height:1em;width:1em;background-image:url('data:image/svg+xml,')}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-brand-container{padding-right:1em}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-title{font-size:1.1em}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-nav{font-size:.9em}.quarto-dashboard #quarto-dashboard-header .navbar{padding:0}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-container{padding-left:1em}.quarto-dashboard #quarto-dashboard-header .navbar.slim .navbar-brand-container .nav-link,.quarto-dashboard #quarto-dashboard-header .navbar.slim .navbar-nav .nav-link{padding:.7em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-color-scheme-toggle{order:9}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-toggler{margin-left:.5em;order:10}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-nav .nav-link{padding:.5em;height:100%;display:flex;align-items:center}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-nav .active{background-color:rgb(224.2,228.6,233)}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-brand-container{padding:.5em .5em .5em 0;display:flex;flex-direction:row;margin-right:2em;align-items:center}@media(max-width: 767.98px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-brand-container{margin-right:auto}}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{align-self:stretch}@media(min-width: 768px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{order:8}}@media(max-width: 767.98px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{order:1000;padding-bottom:.5em}}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse .navbar-nav{align-self:stretch}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title{font-size:1.25em;line-height:1.1em;display:flex;flex-direction:row;flex-wrap:wrap;align-items:baseline}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title .navbar-title-text{margin-right:.4em}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title a{text-decoration:none;color:inherit}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-subtitle,.quarto-dashboard #quarto-dashboard-header .navbar .navbar-author{font-size:.9rem;margin-right:.5em}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-author{margin-left:auto}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-logo{max-height:48px;min-height:30px;object-fit:cover;margin-right:1em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-links{order:9;padding-right:1em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-link-text{margin-left:.25em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-link{padding-right:0em;padding-left:.7em;text-decoration:none;color:rgb(84.32,84.66,85)}.quarto-dashboard .page-layout-custom .tab-content{padding:0;border:none}.quarto-dashboard-img-contain{height:100%;width:100%;object-fit:contain}@media(max-width: 575.98px){.quarto-dashboard .bslib-grid{grid-template-rows:minmax(1em, max-content) !important}.quarto-dashboard .sidebar-content{height:inherit}.quarto-dashboard .page-layout-custom{min-height:100vh}}.quarto-dashboard.dashboard-toolbar>.page-layout-custom,.quarto-dashboard.dashboard-sidebar>.page-layout-custom{padding:0}.quarto-dashboard .quarto-dashboard-content.quarto-dashboard-pages{padding:0}.quarto-dashboard .callout{margin-bottom:0;margin-top:0}.quarto-dashboard .html-fill-container figure{overflow:hidden}.quarto-dashboard bslib-tooltip .rounded-pill{border:solid #6c757d 1px}.quarto-dashboard bslib-tooltip .rounded-pill .svg{fill:#343a40}.quarto-dashboard .tabset .dashboard-card-no-title .nav-tabs{margin-left:0;margin-right:auto}.quarto-dashboard .tabset .tab-content{border:none}.quarto-dashboard .tabset .card-header .nav-link[role=tab]{margin-top:-6px;padding-top:6px;padding-bottom:6px}.quarto-dashboard .card.valuebox,.quarto-dashboard .card.bslib-value-box{min-height:3rem}.quarto-dashboard .card.valuebox .card-body,.quarto-dashboard .card.bslib-value-box .card-body{padding:0}.quarto-dashboard .bslib-value-box .value-box-value{font-size:clamp(.1em,15cqw,5em)}.quarto-dashboard .bslib-value-box .value-box-showcase .bi{font-size:clamp(.1em,max(18cqw,5.2cqh),5em);text-align:center;height:1em}.quarto-dashboard .bslib-value-box .value-box-showcase .bi::before{vertical-align:1em}.quarto-dashboard .bslib-value-box .value-box-area{margin-top:auto;margin-bottom:auto}.quarto-dashboard .card figure.quarto-float{display:flex;flex-direction:column;align-items:center}.quarto-dashboard .dashboard-scrolling{padding:1em}.quarto-dashboard .full-height{height:100%}.quarto-dashboard .showcase-bottom .value-box-grid{display:grid;grid-template-columns:1fr;grid-template-rows:1fr auto;grid-template-areas:"top" "bottom"}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-showcase{grid-area:bottom;padding:0;margin:0}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-showcase i.bi{font-size:4rem}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-area{grid-area:top}.quarto-dashboard .tab-content{margin-bottom:0}.quarto-dashboard .bslib-card .bslib-navs-card-title{justify-content:stretch;align-items:end}.quarto-dashboard .card-header{display:flex;flex-wrap:wrap;justify-content:space-between}.quarto-dashboard .card-header .card-title{display:flex;flex-direction:column;justify-content:center;margin-bottom:0}.quarto-dashboard .tabset .card-toolbar{margin-bottom:1em}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout{border:none;gap:var(--bslib-spacer, 1rem)}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.main{padding:0}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.sidebar{border-radius:.25rem;border:1px solid rgba(0,0,0,.175)}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.collapse-toggle{display:none}@media(max-width: 767.98px){.quarto-dashboard .bslib-grid>.bslib-sidebar-layout{grid-template-columns:1fr;grid-template-rows:max-content 1fr}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.main{grid-column:1;grid-row:2}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout .sidebar{grid-column:1;grid-row:1}}.quarto-dashboard .sidebar-right .sidebar{padding-left:2.5em}.quarto-dashboard .sidebar-right .collapse-toggle{left:2px}.quarto-dashboard .quarto-dashboard .sidebar-right button.collapse-toggle:not(.transitioning){left:unset}.quarto-dashboard aside.sidebar{padding-left:1em;padding-right:1em;background-color:rgba(52,58,64,.25);color:#343a40}.quarto-dashboard .bslib-sidebar-layout>div.main{padding:.7em}.quarto-dashboard .bslib-sidebar-layout button.collapse-toggle{margin-top:.3em}.quarto-dashboard .bslib-sidebar-layout .collapse-toggle{top:0}.quarto-dashboard .bslib-sidebar-layout.sidebar-collapsed:not(.transitioning):not(.sidebar-right) .collapse-toggle{left:2px}.quarto-dashboard .sidebar>section>.h3:first-of-type{margin-top:0em}.quarto-dashboard .sidebar .h3,.quarto-dashboard .sidebar .h4,.quarto-dashboard .sidebar .h5,.quarto-dashboard .sidebar .h6{margin-top:.5em}.quarto-dashboard .sidebar form{flex-direction:column;align-items:start;margin-bottom:1em}.quarto-dashboard .sidebar form div[class*=oi-][class$=-input]{flex-direction:column}.quarto-dashboard .sidebar form[class*=oi-][class$=-toggle]{flex-direction:row-reverse;align-items:center;justify-content:start}.quarto-dashboard .sidebar form input[type=range]{margin-top:.5em;margin-right:.8em;margin-left:1em}.quarto-dashboard .sidebar label{width:fit-content}.quarto-dashboard .sidebar .card-body{margin-bottom:2em}.quarto-dashboard .sidebar .shiny-input-container{margin-bottom:1em}.quarto-dashboard .sidebar .shiny-options-group{margin-top:0}.quarto-dashboard .sidebar .control-label{margin-bottom:.3em}.quarto-dashboard .card .card-body .quarto-layout-row{align-items:stretch}.quarto-dashboard .toolbar{font-size:.9em;display:flex;flex-direction:row;border-top:solid 1px hsl(210,3.0456852792%,74.5490196078%);padding:1em;flex-wrap:wrap;background-color:rgba(52,58,64,.25)}.quarto-dashboard .toolbar .cell-output-display{display:flex}.quarto-dashboard .toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .toolbar>*:last-child{margin-right:0}.quarto-dashboard .toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .toolbar .shiny-input-container{padding-bottom:0;margin-bottom:0}.quarto-dashboard .toolbar .shiny-input-container>*{flex-shrink:0;flex-grow:0}.quarto-dashboard .toolbar .form-group.shiny-input-container:not([role=group])>label{margin-bottom:0}.quarto-dashboard .toolbar .shiny-input-container.no-baseline{align-items:start;padding-top:6px}.quarto-dashboard .toolbar .shiny-input-container{display:flex;align-items:baseline}.quarto-dashboard .toolbar .shiny-input-container label{padding-right:.4em}.quarto-dashboard .toolbar .shiny-input-container .bslib-input-switch{margin-top:6px}.quarto-dashboard .toolbar input[type=text]{line-height:1;width:inherit}.quarto-dashboard .toolbar .input-daterange{width:inherit}.quarto-dashboard .toolbar .input-daterange input[type=text]{height:2.4em;width:10em}.quarto-dashboard .toolbar .input-daterange .input-group-addon{height:auto;padding:0;margin-left:-5px !important;margin-right:-5px}.quarto-dashboard .toolbar .input-daterange .input-group-addon .input-group-text{padding-top:0;padding-bottom:0;height:100%}.quarto-dashboard .toolbar span.irs.irs--shiny{width:10em}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-line{top:9px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-min,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-max,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-from,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-to,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-single{top:20px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-bar{top:8px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-handle{top:0px}.quarto-dashboard .toolbar .shiny-input-checkboxgroup>label{margin-top:6px}.quarto-dashboard .toolbar .shiny-input-checkboxgroup>.shiny-options-group{margin-top:0;align-items:baseline}.quarto-dashboard .toolbar .shiny-input-radiogroup>label{margin-top:6px}.quarto-dashboard .toolbar .shiny-input-radiogroup>.shiny-options-group{align-items:baseline;margin-top:0}.quarto-dashboard .toolbar .shiny-input-radiogroup>.shiny-options-group>.radio{margin-right:.3em}.quarto-dashboard .toolbar .form-select{padding-top:.2em;padding-bottom:.2em}.quarto-dashboard .toolbar .shiny-input-select{min-width:6em}.quarto-dashboard .toolbar div.checkbox{margin-bottom:0px}.quarto-dashboard .toolbar>.checkbox:first-child{margin-top:6px}.quarto-dashboard .toolbar form{width:fit-content}.quarto-dashboard .toolbar form label{padding-top:.2em;padding-bottom:.2em;width:fit-content}.quarto-dashboard .toolbar form input[type=date]{width:fit-content}.quarto-dashboard .toolbar form input[type=color]{width:3em}.quarto-dashboard .toolbar form button{padding:.4em}.quarto-dashboard .toolbar form select{width:fit-content}.quarto-dashboard .toolbar>*{font-size:.9em;flex-grow:0}.quarto-dashboard .toolbar .shiny-input-container label{margin-bottom:1px}.quarto-dashboard .toolbar-bottom{margin-top:1em;margin-bottom:0 !important;order:2}.quarto-dashboard .quarto-dashboard-content>.dashboard-toolbar-container>.toolbar-content>.tab-content>.tab-pane>*:not(.bslib-sidebar-layout){padding:1em}.quarto-dashboard .quarto-dashboard-content>.dashboard-toolbar-container>.toolbar-content>*:not(.tab-content){padding:1em}.quarto-dashboard .quarto-dashboard-content>.tab-content>.dashboard-page>.dashboard-toolbar-container>.toolbar-content,.quarto-dashboard .quarto-dashboard-content>.tab-content>.dashboard-page:not(.dashboard-sidebar-container)>*:not(.dashboard-toolbar-container){padding:1em}.quarto-dashboard .toolbar-content{padding:0}.quarto-dashboard .quarto-dashboard-content.quarto-dashboard-pages .tab-pane>.dashboard-toolbar-container .toolbar{border-radius:0;margin-bottom:0}.quarto-dashboard .dashboard-toolbar-container.toolbar-toplevel .toolbar{border-bottom:1px solid rgba(0,0,0,.175)}.quarto-dashboard .dashboard-toolbar-container.toolbar-toplevel .toolbar-bottom{margin-top:0}.quarto-dashboard .dashboard-toolbar-container:not(.toolbar-toplevel) .toolbar{margin-bottom:1em;border-top:none;border-radius:.25rem;border:1px solid rgba(0,0,0,.175)}.quarto-dashboard .vega-embed.has-actions details{width:1.7em;height:2em;position:absolute !important;top:0;right:0}.quarto-dashboard .dashboard-toolbar-container{padding:0}.quarto-dashboard .card .card-header p:last-child,.quarto-dashboard .card .card-footer p:last-child{margin-bottom:0}.quarto-dashboard .card .card-body>.h4:first-child{margin-top:0}.quarto-dashboard .card .card-body{z-index:4}@media(max-width: 767.98px){.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_length,.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_info,.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_paginate{text-align:initial}.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_filter{text-align:right}.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_paginate ul.pagination{justify-content:initial}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;padding-top:0}.quarto-dashboard .card .card-body .itables .dataTables_wrapper table{flex-shrink:0}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons{margin-bottom:.5em;margin-left:auto;width:fit-content;float:right}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons.btn-group{background:#fff;border:none}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons .btn-secondary{background-color:#fff;background-image:none;border:solid #dee2e6 1px;padding:.2em .7em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons .btn span{font-size:.8em;color:#343a40}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{margin-left:.5em;margin-bottom:.5em;padding-top:0}@media(min-width: 768px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{font-size:.875em}}@media(max-width: 767.98px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{font-size:.8em}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_filter{margin-bottom:.5em;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_filter input[type=search]{padding:1px 5px 1px 5px;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_length{flex-basis:1 1 50%;margin-bottom:.5em;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_length select{padding:.4em 3em .4em .5em;font-size:.875em;margin-left:.2em;margin-right:.2em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate{flex-shrink:0}@media(min-width: 768px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate{margin-left:auto}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate ul.pagination .paginate_button .page-link{font-size:.8em}.quarto-dashboard .card .card-footer{font-size:.9em}.quarto-dashboard .card .card-toolbar{display:flex;flex-grow:1;flex-direction:row;width:100%;flex-wrap:wrap}.quarto-dashboard .card .card-toolbar>*{font-size:.8em;flex-grow:0}.quarto-dashboard .card .card-toolbar>.card-title{font-size:1em;flex-grow:1;align-self:flex-start;margin-top:.1em}.quarto-dashboard .card .card-toolbar .cell-output-display{display:flex}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .card .card-toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card .card-toolbar>*:last-child{margin-right:0}.quarto-dashboard .card .card-toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .card .card-toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .card .card-toolbar form{width:fit-content}.quarto-dashboard .card .card-toolbar form label{padding-top:.2em;padding-bottom:.2em;width:fit-content}.quarto-dashboard .card .card-toolbar form input[type=date]{width:fit-content}.quarto-dashboard .card .card-toolbar form input[type=color]{width:3em}.quarto-dashboard .card .card-toolbar form button{padding:.4em}.quarto-dashboard .card .card-toolbar form select{width:fit-content}.quarto-dashboard .card .card-toolbar .cell-output-display{display:flex}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .card .card-toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card .card-toolbar>*:last-child{margin-right:0}.quarto-dashboard .card .card-toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .card .card-toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:0;margin-bottom:0}.quarto-dashboard .card .card-toolbar .shiny-input-container>*{flex-shrink:0;flex-grow:0}.quarto-dashboard .card .card-toolbar .form-group.shiny-input-container:not([role=group])>label{margin-bottom:0}.quarto-dashboard .card .card-toolbar .shiny-input-container.no-baseline{align-items:start;padding-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-container{display:flex;align-items:baseline}.quarto-dashboard .card .card-toolbar .shiny-input-container label{padding-right:.4em}.quarto-dashboard .card .card-toolbar .shiny-input-container .bslib-input-switch{margin-top:6px}.quarto-dashboard .card .card-toolbar input[type=text]{line-height:1;width:inherit}.quarto-dashboard .card .card-toolbar .input-daterange{width:inherit}.quarto-dashboard .card .card-toolbar .input-daterange input[type=text]{height:2.4em;width:10em}.quarto-dashboard .card .card-toolbar .input-daterange .input-group-addon{height:auto;padding:0;margin-left:-5px !important;margin-right:-5px}.quarto-dashboard .card .card-toolbar .input-daterange .input-group-addon .input-group-text{padding-top:0;padding-bottom:0;height:100%}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny{width:10em}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-line{top:9px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-min,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-max,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-from,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-to,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-single{top:20px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-bar{top:8px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-handle{top:0px}.quarto-dashboard .card .card-toolbar .shiny-input-checkboxgroup>label{margin-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-checkboxgroup>.shiny-options-group{margin-top:0;align-items:baseline}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>label{margin-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>.shiny-options-group{align-items:baseline;margin-top:0}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>.shiny-options-group>.radio{margin-right:.3em}.quarto-dashboard .card .card-toolbar .form-select{padding-top:.2em;padding-bottom:.2em}.quarto-dashboard .card .card-toolbar .shiny-input-select{min-width:6em}.quarto-dashboard .card .card-toolbar div.checkbox{margin-bottom:0px}.quarto-dashboard .card .card-toolbar>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card-body>table>thead{border-top:none}.quarto-dashboard .card-body>.table>:not(caption)>*>*{background-color:#fff}.tableFloatingHeaderOriginal{background-color:#fff;position:sticky !important;top:0 !important}.dashboard-data-table{margin-top:-1px}div.value-box-area span.observablehq--number{font-size:calc(clamp(.1em,15cqw,5em)*1.25);line-height:1.2;color:inherit;font-family:var(--bs-body-font-family)}.quarto-listing{padding-bottom:1em}.listing-pagination{padding-top:.5em}ul.pagination{float:right;padding-left:8px;padding-top:.5em}ul.pagination li{padding-right:.75em}ul.pagination li.disabled a,ul.pagination li.active a{color:#fff;text-decoration:none}ul.pagination li:last-of-type{padding-right:0}.listing-actions-group{display:flex}.quarto-listing-filter{margin-bottom:1em;width:200px;margin-left:auto}.quarto-listing-sort{margin-bottom:1em;margin-right:auto;width:auto}.quarto-listing-sort .input-group-text{font-size:.8em}.input-group-text{border-right:none}.quarto-listing-sort select.form-select{font-size:.8em}.listing-no-matching{text-align:center;padding-top:2em;padding-bottom:3em;font-size:1em}#quarto-margin-sidebar .quarto-listing-category{padding-top:0;font-size:1rem}#quarto-margin-sidebar .quarto-listing-category-title{cursor:pointer;font-weight:600;font-size:1rem}.quarto-listing-category .category{cursor:pointer}.quarto-listing-category .category.active{font-weight:600}.quarto-listing-category.category-cloud{display:flex;flex-wrap:wrap;align-items:baseline}.quarto-listing-category.category-cloud .category{padding-right:5px}.quarto-listing-category.category-cloud .category-cloud-1{font-size:.75em}.quarto-listing-category.category-cloud .category-cloud-2{font-size:.95em}.quarto-listing-category.category-cloud .category-cloud-3{font-size:1.15em}.quarto-listing-category.category-cloud .category-cloud-4{font-size:1.35em}.quarto-listing-category.category-cloud .category-cloud-5{font-size:1.55em}.quarto-listing-category.category-cloud .category-cloud-6{font-size:1.75em}.quarto-listing-category.category-cloud .category-cloud-7{font-size:1.95em}.quarto-listing-category.category-cloud .category-cloud-8{font-size:2.15em}.quarto-listing-category.category-cloud .category-cloud-9{font-size:2.35em}.quarto-listing-category.category-cloud .category-cloud-10{font-size:2.55em}.quarto-listing-cols-1{grid-template-columns:repeat(1, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-1{grid-template-columns:repeat(1, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-1{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-2{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-3{grid-template-columns:repeat(3, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-3{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-3{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-4{grid-template-columns:repeat(4, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-4{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-4{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-5{grid-template-columns:repeat(5, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-5{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-5{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-6{grid-template-columns:repeat(6, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-6{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-6{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-7{grid-template-columns:repeat(7, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-7{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-7{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-8{grid-template-columns:repeat(8, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-8{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-8{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-9{grid-template-columns:repeat(9, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-9{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-9{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-10{grid-template-columns:repeat(10, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-10{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-10{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-11{grid-template-columns:repeat(11, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-11{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-11{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-12{grid-template-columns:repeat(12, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-12{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-12{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-grid{gap:1.5em}.quarto-grid-item.borderless{border:none}.quarto-grid-item.borderless .listing-categories .listing-category:last-of-type,.quarto-grid-item.borderless .listing-categories .listing-category:first-of-type{padding-left:0}.quarto-grid-item.borderless .listing-categories .listing-category{border:0}.quarto-grid-link{text-decoration:none;color:inherit}.quarto-grid-link:hover{text-decoration:none;color:inherit}.quarto-grid-item h5.title,.quarto-grid-item .title.h5{margin-top:0;margin-bottom:0}.quarto-grid-item .card-footer{display:flex;justify-content:space-between;font-size:.8em}.quarto-grid-item .card-footer p{margin-bottom:0}.quarto-grid-item p.card-img-top{margin-bottom:0}.quarto-grid-item p.card-img-top>img{object-fit:cover}.quarto-grid-item .card-other-values{margin-top:.5em;font-size:.8em}.quarto-grid-item .card-other-values tr{margin-bottom:.5em}.quarto-grid-item .card-other-values tr>td:first-of-type{font-weight:600;padding-right:1em;padding-left:1em;vertical-align:top}.quarto-grid-item div.post-contents{display:flex;flex-direction:column;text-decoration:none;height:100%}.quarto-grid-item .listing-item-img-placeholder{background-color:rgba(52,58,64,.25);flex-shrink:0}.quarto-grid-item .card-attribution{padding-top:1em;display:flex;gap:1em;text-transform:uppercase;color:#6c757d;font-weight:500;flex-grow:10;align-items:flex-end}.quarto-grid-item .description{padding-bottom:1em}.quarto-grid-item .card-attribution .date{align-self:flex-end}.quarto-grid-item .card-attribution.justify{justify-content:space-between}.quarto-grid-item .card-attribution.start{justify-content:flex-start}.quarto-grid-item .card-attribution.end{justify-content:flex-end}.quarto-grid-item .card-title{margin-bottom:.1em}.quarto-grid-item .card-subtitle{padding-top:.25em}.quarto-grid-item .card-text{font-size:.9em}.quarto-grid-item .listing-reading-time{padding-bottom:.25em}.quarto-grid-item .card-text-small{font-size:.8em}.quarto-grid-item .card-subtitle.subtitle{font-size:.9em;font-weight:600;padding-bottom:.5em}.quarto-grid-item .listing-categories{display:flex;flex-wrap:wrap;padding-bottom:5px}.quarto-grid-item .listing-categories .listing-category{color:#6c757d;border:solid 1px #dee2e6;border-radius:.25rem;text-transform:uppercase;font-size:.65em;padding-left:.5em;padding-right:.5em;padding-top:.15em;padding-bottom:.15em;cursor:pointer;margin-right:4px;margin-bottom:4px}.quarto-grid-item.card-right{text-align:right}.quarto-grid-item.card-right .listing-categories{justify-content:flex-end}.quarto-grid-item.card-left{text-align:left}.quarto-grid-item.card-center{text-align:center}.quarto-grid-item.card-center .listing-description{text-align:justify}.quarto-grid-item.card-center .listing-categories{justify-content:center}table.quarto-listing-table td.image{padding:0px}table.quarto-listing-table td.image img{width:100%;max-width:50px;object-fit:contain}table.quarto-listing-table a{text-decoration:none;word-break:keep-all}table.quarto-listing-table th a{color:inherit}table.quarto-listing-table th a.asc:after{margin-bottom:-2px;margin-left:5px;display:inline-block;height:1rem;width:1rem;background-repeat:no-repeat;background-size:1rem 1rem;background-image:url('data:image/svg+xml,');content:""}table.quarto-listing-table th a.desc:after{margin-bottom:-2px;margin-left:5px;display:inline-block;height:1rem;width:1rem;background-repeat:no-repeat;background-size:1rem 1rem;background-image:url('data:image/svg+xml,');content:""}table.quarto-listing-table.table-hover td{cursor:pointer}.quarto-post.image-left{flex-direction:row}.quarto-post.image-right{flex-direction:row-reverse}@media(max-width: 767.98px){.quarto-post.image-right,.quarto-post.image-left{gap:0em;flex-direction:column}.quarto-post .metadata{padding-bottom:1em;order:2}.quarto-post .body{order:1}.quarto-post .thumbnail{order:3}}.list.quarto-listing-default div:last-of-type{border-bottom:none}@media(min-width: 992px){.quarto-listing-container-default{margin-right:2em}}div.quarto-post{display:flex;gap:2em;margin-bottom:1.5em;border-bottom:1px solid #dee2e6}@media(max-width: 767.98px){div.quarto-post{padding-bottom:1em}}div.quarto-post .metadata{flex-basis:20%;flex-grow:0;margin-top:.2em;flex-shrink:10}div.quarto-post .thumbnail{flex-basis:30%;flex-grow:0;flex-shrink:0}div.quarto-post .thumbnail img{margin-top:.4em;width:100%;object-fit:cover}div.quarto-post .body{flex-basis:45%;flex-grow:1;flex-shrink:0}div.quarto-post .body h3.listing-title,div.quarto-post .body .listing-title.h3{margin-top:0px;margin-bottom:0px;border-bottom:none}div.quarto-post .body .listing-subtitle{font-size:.875em;margin-bottom:.5em;margin-top:.2em}div.quarto-post .body .description{font-size:.9em}div.quarto-post .body pre code{white-space:pre-wrap}div.quarto-post a{color:#343a40;text-decoration:none}div.quarto-post .metadata{display:flex;flex-direction:column;font-size:.8em;font-family:"Source Sans Pro",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";flex-basis:33%}div.quarto-post .listing-categories{display:flex;flex-wrap:wrap;padding-bottom:5px}div.quarto-post .listing-categories .listing-category{color:#6c757d;border:solid 1px #dee2e6;border-radius:.25rem;text-transform:uppercase;font-size:.65em;padding-left:.5em;padding-right:.5em;padding-top:.15em;padding-bottom:.15em;cursor:pointer;margin-right:4px;margin-bottom:4px}div.quarto-post .listing-description{margin-bottom:.5em}div.quarto-about-jolla{display:flex !important;flex-direction:column;align-items:center;margin-top:10%;padding-bottom:1em}div.quarto-about-jolla .about-image{object-fit:cover;margin-left:auto;margin-right:auto;margin-bottom:1.5em}div.quarto-about-jolla img.round{border-radius:50%}div.quarto-about-jolla img.rounded{border-radius:10px}div.quarto-about-jolla .quarto-title h1.title,div.quarto-about-jolla .quarto-title .title.h1{text-align:center}div.quarto-about-jolla .quarto-title .description{text-align:center}div.quarto-about-jolla h2,div.quarto-about-jolla .h2{border-bottom:none}div.quarto-about-jolla .about-sep{width:60%}div.quarto-about-jolla main{text-align:center}div.quarto-about-jolla .about-links{display:flex}@media(min-width: 992px){div.quarto-about-jolla .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-jolla .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-jolla .about-link{color:rgb(97.724137931,109,120.275862069);text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-jolla .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-jolla .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-jolla .about-link:hover{color:#2761e3}div.quarto-about-jolla .about-link i.bi{margin-right:.15em}div.quarto-about-solana{display:flex !important;flex-direction:column;padding-top:3em !important;padding-bottom:1em}div.quarto-about-solana .about-entity{display:flex !important;align-items:start;justify-content:space-between}@media(min-width: 992px){div.quarto-about-solana .about-entity{flex-direction:row}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity{flex-direction:column-reverse;align-items:center;text-align:center}}div.quarto-about-solana .about-entity .entity-contents{display:flex;flex-direction:column}@media(max-width: 767.98px){div.quarto-about-solana .about-entity .entity-contents{width:100%}}div.quarto-about-solana .about-entity .about-image{object-fit:cover}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-image{margin-bottom:1.5em}}div.quarto-about-solana .about-entity img.round{border-radius:50%}div.quarto-about-solana .about-entity img.rounded{border-radius:10px}div.quarto-about-solana .about-entity .about-links{display:flex;justify-content:left;padding-bottom:1.2em}@media(min-width: 992px){div.quarto-about-solana .about-entity .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-solana .about-entity .about-link{color:rgb(97.724137931,109,120.275862069);text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-solana .about-entity .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-solana .about-entity .about-link:hover{color:#2761e3}div.quarto-about-solana .about-entity .about-link i.bi{margin-right:.15em}div.quarto-about-solana .about-contents{padding-right:1.5em;flex-basis:0;flex-grow:1}div.quarto-about-solana .about-contents main.content{margin-top:0}div.quarto-about-solana .about-contents h2,div.quarto-about-solana .about-contents .h2{border-bottom:none}div.quarto-about-trestles{display:flex !important;flex-direction:row;padding-top:3em !important;padding-bottom:1em}@media(max-width: 991.98px){div.quarto-about-trestles{flex-direction:column;padding-top:0em !important}}div.quarto-about-trestles .about-entity{display:flex !important;flex-direction:column;align-items:center;text-align:center;padding-right:1em}@media(min-width: 992px){div.quarto-about-trestles .about-entity{flex:0 0 42%}}div.quarto-about-trestles .about-entity .about-image{object-fit:cover;margin-bottom:1.5em}div.quarto-about-trestles .about-entity img.round{border-radius:50%}div.quarto-about-trestles .about-entity img.rounded{border-radius:10px}div.quarto-about-trestles .about-entity .about-links{display:flex;justify-content:center}@media(min-width: 992px){div.quarto-about-trestles .about-entity .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-trestles .about-entity .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-trestles .about-entity .about-link{color:rgb(97.724137931,109,120.275862069);text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-trestles .about-entity .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-trestles .about-entity .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-trestles .about-entity .about-link:hover{color:#2761e3}div.quarto-about-trestles .about-entity .about-link i.bi{margin-right:.15em}div.quarto-about-trestles .about-contents{flex-basis:0;flex-grow:1}div.quarto-about-trestles .about-contents h2,div.quarto-about-trestles .about-contents .h2{border-bottom:none}@media(min-width: 992px){div.quarto-about-trestles .about-contents{border-left:solid 1px #dee2e6;padding-left:1.5em}}div.quarto-about-trestles .about-contents main.content{margin-top:0}div.quarto-about-marquee{padding-bottom:1em}div.quarto-about-marquee .about-contents{display:flex;flex-direction:column}div.quarto-about-marquee .about-image{max-height:550px;margin-bottom:1.5em;object-fit:cover}div.quarto-about-marquee img.round{border-radius:50%}div.quarto-about-marquee img.rounded{border-radius:10px}div.quarto-about-marquee h2,div.quarto-about-marquee .h2{border-bottom:none}div.quarto-about-marquee .about-links{display:flex;justify-content:center;padding-top:1.5em}@media(min-width: 992px){div.quarto-about-marquee .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-marquee .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-marquee .about-link{color:rgb(97.724137931,109,120.275862069);text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-marquee .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-marquee .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-marquee .about-link:hover{color:#2761e3}div.quarto-about-marquee .about-link i.bi{margin-right:.15em}@media(min-width: 992px){div.quarto-about-marquee .about-link{border:none}}div.quarto-about-broadside{display:flex;flex-direction:column;padding-bottom:1em}div.quarto-about-broadside .about-main{display:flex !important;padding-top:0 !important}@media(min-width: 992px){div.quarto-about-broadside .about-main{flex-direction:row;align-items:flex-start}}@media(max-width: 991.98px){div.quarto-about-broadside .about-main{flex-direction:column}}@media(max-width: 991.98px){div.quarto-about-broadside .about-main .about-entity{flex-shrink:0;width:100%;height:450px;margin-bottom:1.5em;background-size:cover;background-repeat:no-repeat}}@media(min-width: 992px){div.quarto-about-broadside .about-main .about-entity{flex:0 10 50%;margin-right:1.5em;width:100%;height:100%;background-size:100%;background-repeat:no-repeat}}div.quarto-about-broadside .about-main .about-contents{padding-top:14px;flex:0 0 50%}div.quarto-about-broadside h2,div.quarto-about-broadside .h2{border-bottom:none}div.quarto-about-broadside .about-sep{margin-top:1.5em;width:60%;align-self:center}div.quarto-about-broadside .about-links{display:flex;justify-content:center;column-gap:20px;padding-top:1.5em}@media(min-width: 992px){div.quarto-about-broadside .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-broadside .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-broadside .about-link{color:rgb(97.724137931,109,120.275862069);text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-broadside .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-broadside .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-broadside .about-link:hover{color:#2761e3}div.quarto-about-broadside .about-link i.bi{margin-right:.15em}@media(min-width: 992px){div.quarto-about-broadside .about-link{border:none}}.tippy-box[data-theme~=quarto]{background-color:#fff;border:solid 1px #dee2e6;border-radius:.25rem;color:#343a40;font-size:.875rem}.tippy-box[data-theme~=quarto]>.tippy-backdrop{background-color:#fff}.tippy-box[data-theme~=quarto]>.tippy-arrow:after,.tippy-box[data-theme~=quarto]>.tippy-svg-arrow:after{content:"";position:absolute;z-index:-1}.tippy-box[data-theme~=quarto]>.tippy-arrow:after{border-color:rgba(0,0,0,0);border-style:solid}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-6px}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-6px}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-6px}.tippy-box[data-placement^=left]>.tippy-arrow:before{right:-6px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-arrow:before{border-top-color:#fff}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-arrow:after{border-top-color:#dee2e6;border-width:7px 7px 0;top:17px;left:1px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-svg-arrow>svg{top:16px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-svg-arrow:after{top:17px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#fff;bottom:16px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-arrow:after{border-bottom-color:#dee2e6;border-width:0 7px 7px;bottom:17px;left:1px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-svg-arrow>svg{bottom:15px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-svg-arrow:after{bottom:17px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-arrow:before{border-left-color:#fff}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-arrow:after{border-left-color:#dee2e6;border-width:7px 0 7px 7px;left:17px;top:1px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-svg-arrow>svg{left:11px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-svg-arrow:after{left:12px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-arrow:before{border-right-color:#fff;right:16px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-arrow:after{border-width:7px 7px 7px 0;right:17px;top:1px;border-right-color:#dee2e6}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-svg-arrow>svg{right:11px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-svg-arrow:after{right:12px}.tippy-box[data-theme~=quarto]>.tippy-svg-arrow{fill:#343a40}.tippy-box[data-theme~=quarto]>.tippy-svg-arrow:after{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMCA2czEuNzk2LS4wMTMgNC42Ny0zLjYxNUM1Ljg1MS45IDYuOTMuMDA2IDggMGMxLjA3LS4wMDYgMi4xNDguODg3IDMuMzQzIDIuMzg1QzE0LjIzMyA2LjAwNSAxNiA2IDE2IDZIMHoiIGZpbGw9InJnYmEoMCwgOCwgMTYsIDAuMikiLz48L3N2Zz4=);background-size:16px 6px;width:16px;height:6px}.top-right{position:absolute;top:1em;right:1em}.visually-hidden{border:0;clip:rect(0 0 0 0);height:auto;margin:0;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none !important}.zindex-bottom{z-index:-1 !important}figure.figure{display:block}.quarto-layout-panel{margin-bottom:1em}.quarto-layout-panel>figure{width:100%}.quarto-layout-panel>figure>figcaption,.quarto-layout-panel>.panel-caption{margin-top:10pt}.quarto-layout-panel>.table-caption{margin-top:0px}.table-caption p{margin-bottom:.5em}.quarto-layout-row{display:flex;flex-direction:row;align-items:flex-start}.quarto-layout-valign-top{align-items:flex-start}.quarto-layout-valign-bottom{align-items:flex-end}.quarto-layout-valign-center{align-items:center}.quarto-layout-cell{position:relative;margin-right:20px}.quarto-layout-cell:last-child{margin-right:0}.quarto-layout-cell figure,.quarto-layout-cell>p{margin:.2em}.quarto-layout-cell img{max-width:100%}.quarto-layout-cell .html-widget{width:100% !important}.quarto-layout-cell div figure p{margin:0}.quarto-layout-cell figure{display:block;margin-inline-start:0;margin-inline-end:0}.quarto-layout-cell table{display:inline-table}.quarto-layout-cell-subref figcaption,figure .quarto-layout-row figure figcaption{text-align:center;font-style:italic}.quarto-figure{position:relative;margin-bottom:1em}.quarto-figure>figure{width:100%;margin-bottom:0}.quarto-figure-left>figure>p,.quarto-figure-left>figure>div{text-align:left}.quarto-figure-center>figure>p,.quarto-figure-center>figure>div{text-align:center}.quarto-figure-right>figure>p,.quarto-figure-right>figure>div{text-align:right}.quarto-figure>figure>div.cell-annotation,.quarto-figure>figure>div code{text-align:left}figure>p:empty{display:none}figure>p:first-child{margin-top:0;margin-bottom:0}figure>figcaption.quarto-float-caption-bottom{margin-bottom:.5em}figure>figcaption.quarto-float-caption-top{margin-top:.5em}div[id^=tbl-]{position:relative}.quarto-figure>.anchorjs-link{position:absolute;top:.6em;right:.5em}div[id^=tbl-]>.anchorjs-link{position:absolute;top:.7em;right:.3em}.quarto-figure:hover>.anchorjs-link,div[id^=tbl-]:hover>.anchorjs-link,h2:hover>.anchorjs-link,.h2:hover>.anchorjs-link,h3:hover>.anchorjs-link,.h3:hover>.anchorjs-link,h4:hover>.anchorjs-link,.h4:hover>.anchorjs-link,h5:hover>.anchorjs-link,.h5:hover>.anchorjs-link,h6:hover>.anchorjs-link,.h6:hover>.anchorjs-link,.reveal-anchorjs-link>.anchorjs-link{opacity:1}#title-block-header{margin-block-end:1rem;position:relative;margin-top:-1px}#title-block-header .abstract{margin-block-start:1rem}#title-block-header .abstract .abstract-title{font-weight:600}#title-block-header a{text-decoration:none}#title-block-header .author,#title-block-header .date,#title-block-header .doi{margin-block-end:.2rem}#title-block-header .quarto-title-block>div{display:flex}#title-block-header .quarto-title-block>div>h1,#title-block-header .quarto-title-block>div>.h1{flex-grow:1}#title-block-header .quarto-title-block>div>button{flex-shrink:0;height:2.25rem;margin-top:0}@media(min-width: 992px){#title-block-header .quarto-title-block>div>button{margin-top:5px}}tr.header>th>p:last-of-type{margin-bottom:0px}table,table.table{margin-top:.5rem;margin-bottom:.5rem}caption,.table-caption{padding-top:.5rem;padding-bottom:.5rem;text-align:center}figure.quarto-float-tbl figcaption.quarto-float-caption-top{margin-top:.5rem;margin-bottom:.25rem;text-align:center}figure.quarto-float-tbl figcaption.quarto-float-caption-bottom{padding-top:.25rem;margin-bottom:.5rem;text-align:center}.utterances{max-width:none;margin-left:-8px}iframe{margin-bottom:1em}details{margin-bottom:1em}details[show]{margin-bottom:0}details>summary{color:#6c757d}details>summary>p:only-child{display:inline}div.code-copy-outer-scaffold{position:relative}dd code:not(.sourceCode),p code:not(.sourceCode){white-space:pre-wrap}code{white-space:pre}@media print{code{white-space:pre-wrap}}pre>code{display:block}pre>code.sourceCode{white-space:pre}pre>code.sourceCode>span>a:first-child::before{text-decoration:none}pre.code-overflow-wrap>code.sourceCode{white-space:pre-wrap}pre.code-overflow-scroll>code.sourceCode{white-space:pre}code a:any-link{color:inherit;text-decoration:none}code a:hover{color:inherit;text-decoration:underline}ul.task-list{padding-left:1em}[data-tippy-root]{display:inline-block}.tippy-content .footnote-back{display:none}.footnote-back{margin-left:.2em}.tippy-content{overflow-x:auto}.quarto-embedded-source-code{display:none}.quarto-unresolved-ref{font-weight:600}.quarto-cover-image{max-width:35%;float:right;margin-left:30px}.cell-output-display .widget-subarea{margin-bottom:1em}.cell-output-display:not(.no-overflow-x),.knitsql-table:not(.no-overflow-x){overflow-x:auto}.panel-input{margin-bottom:1em}.panel-input>div,.panel-input>div>div{display:inline-block;vertical-align:top;padding-right:12px}.panel-input>p:last-child{margin-bottom:0}.layout-sidebar{margin-bottom:1em}.layout-sidebar .tab-content{border:none}.tab-content>.page-columns.active{display:grid}div.sourceCode>iframe{width:100%;height:300px;margin-bottom:-0.5em}a{text-underline-offset:3px}.callout pre.sourceCode{padding-left:0}div.ansi-escaped-output{font-family:monospace;display:block}/*! +* +* ansi colors from IPython notebook's +* +* we also add `bright-[color]-` synonyms for the `-[color]-intense` classes since +* that seems to be what ansi_up emits +* +*/.ansi-black-fg{color:#3e424d}.ansi-black-bg{background-color:#3e424d}.ansi-black-intense-black,.ansi-bright-black-fg{color:#282c36}.ansi-black-intense-black,.ansi-bright-black-bg{background-color:#282c36}.ansi-red-fg{color:#e75c58}.ansi-red-bg{background-color:#e75c58}.ansi-red-intense-red,.ansi-bright-red-fg{color:#b22b31}.ansi-red-intense-red,.ansi-bright-red-bg{background-color:#b22b31}.ansi-green-fg{color:#00a250}.ansi-green-bg{background-color:#00a250}.ansi-green-intense-green,.ansi-bright-green-fg{color:#007427}.ansi-green-intense-green,.ansi-bright-green-bg{background-color:#007427}.ansi-yellow-fg{color:#ddb62b}.ansi-yellow-bg{background-color:#ddb62b}.ansi-yellow-intense-yellow,.ansi-bright-yellow-fg{color:#b27d12}.ansi-yellow-intense-yellow,.ansi-bright-yellow-bg{background-color:#b27d12}.ansi-blue-fg{color:#208ffb}.ansi-blue-bg{background-color:#208ffb}.ansi-blue-intense-blue,.ansi-bright-blue-fg{color:#0065ca}.ansi-blue-intense-blue,.ansi-bright-blue-bg{background-color:#0065ca}.ansi-magenta-fg{color:#d160c4}.ansi-magenta-bg{background-color:#d160c4}.ansi-magenta-intense-magenta,.ansi-bright-magenta-fg{color:#a03196}.ansi-magenta-intense-magenta,.ansi-bright-magenta-bg{background-color:#a03196}.ansi-cyan-fg{color:#60c6c8}.ansi-cyan-bg{background-color:#60c6c8}.ansi-cyan-intense-cyan,.ansi-bright-cyan-fg{color:#258f8f}.ansi-cyan-intense-cyan,.ansi-bright-cyan-bg{background-color:#258f8f}.ansi-white-fg{color:#c5c1b4}.ansi-white-bg{background-color:#c5c1b4}.ansi-white-intense-white,.ansi-bright-white-fg{color:#a1a6b2}.ansi-white-intense-white,.ansi-bright-white-bg{background-color:#a1a6b2}.ansi-default-inverse-fg{color:#fff}.ansi-default-inverse-bg{background-color:#000}.ansi-bold{font-weight:bold}.ansi-underline{text-decoration:underline}:root{--quarto-body-bg: #fff;--quarto-body-color: #343a40;--quarto-text-muted: #6c757d;--quarto-border-color: #dee2e6;--quarto-border-width: 1px}table.gt_table{color:var(--quarto-body-color);font-size:1em;width:100%;background-color:rgba(0,0,0,0);border-top-width:inherit;border-bottom-width:inherit;border-color:var(--quarto-border-color)}table.gt_table th.gt_column_spanner_outer{color:var(--quarto-body-color);background-color:rgba(0,0,0,0);border-top-width:inherit;border-bottom-width:inherit;border-color:var(--quarto-border-color)}table.gt_table th.gt_col_heading{color:var(--quarto-body-color);font-weight:bold;background-color:rgba(0,0,0,0)}table.gt_table thead.gt_col_headings{border-bottom:1px solid currentColor;border-top-width:inherit;border-top-color:var(--quarto-border-color)}table.gt_table thead.gt_col_headings:not(:first-child){border-top-width:1px;border-top-color:var(--quarto-border-color)}table.gt_table td.gt_row{border-bottom-width:1px;border-bottom-color:var(--quarto-border-color);border-top-width:0px}table.gt_table tbody.gt_table_body{border-top-width:1px;border-bottom-width:1px;border-bottom-color:var(--quarto-border-color);border-top-color:currentColor}div.columns{display:initial;gap:initial}div.column{display:inline-block;overflow-x:initial;vertical-align:top;width:50%}.code-annotation-tip-content{word-wrap:break-word}.code-annotation-container-hidden{display:none !important}dl.code-annotation-container-grid{display:grid;grid-template-columns:min-content auto}dl.code-annotation-container-grid dt{grid-column:1}dl.code-annotation-container-grid dd{grid-column:2}pre.sourceCode.code-annotation-code{padding-right:0}code.sourceCode .code-annotation-anchor{z-index:100;position:relative;float:right;background-color:rgba(0,0,0,0)}input[type=checkbox]{margin-right:.5ch}:root{--mermaid-bg-color: #fff;--mermaid-edge-color: #343a40;--mermaid-node-fg-color: #343a40;--mermaid-fg-color: #343a40;--mermaid-fg-color--lighter: rgb(74.8620689655, 83.5, 92.1379310345);--mermaid-fg-color--lightest: rgb(97.724137931, 109, 120.275862069);--mermaid-font-family: Source Sans Pro, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;--mermaid-label-bg-color: #fff;--mermaid-label-fg-color: #2780e3;--mermaid-node-bg-color: rgba(39, 128, 227, 0.1);--mermaid-node-fg-color: #343a40}@media print{:root{font-size:11pt}#quarto-sidebar,#TOC,.nav-page{display:none}.page-columns .content{grid-column-start:page-start}.fixed-top{position:relative}.panel-caption,.figure-caption,figcaption{color:#666}}.code-copy-button{position:absolute;top:0;right:0;border:0;margin-top:5px;margin-right:5px;background-color:rgba(0,0,0,0);z-index:3}.code-copy-button-tooltip{font-size:.75em}div.code-copy-outer-scaffold:hover>.code-copy-button>.bi::before{display:inline-block;height:1rem;width:1rem;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:1rem 1rem}div.code-copy-outer-scaffold:hover>.code-copy-button-checked>.bi::before{background-image:url('data:image/svg+xml,')}div.code-copy-outer-scaffold:hover>.code-copy-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}div.code-copy-outer-scaffold:hover>.code-copy-button-checked:hover>.bi::before{background-image:url('data:image/svg+xml,')}main ol ol,main ul ul,main ol ul,main ul ol{margin-bottom:1em}ul>li:not(:has(>p))>ul,ol>li:not(:has(>p))>ul,ul>li:not(:has(>p))>ol,ol>li:not(:has(>p))>ol{margin-bottom:0}ul>li:not(:has(>p))>ul>li:has(>p),ol>li:not(:has(>p))>ul>li:has(>p),ul>li:not(:has(>p))>ol>li:has(>p),ol>li:not(:has(>p))>ol>li:has(>p){margin-top:1rem}body{margin:0}main.page-columns>header>h1.title,main.page-columns>header>.title.h1{margin-bottom:0}@media(min-width: 992px){body .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(1050px - 3em)) [body-content-end] 1.5em [body-end] 21px [body-end-outset] minmax(45px, 87px) [page-end-inset] 21px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.fullcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(1050px - 3em)) [body-content-end] 1.5em [body-end] 21px [body-end-outset] 21px [page-end-inset page-end] 5fr [screen-end-inset] 1.5em}body.slimcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(1050px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(0px, 120px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.listing:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1050px - 3em)) [body-content-end] 3em [body-end] 50px [body-end-outset] minmax(0px, 150px) [page-end-inset] minmax(50px, 100px) [page-end] 1fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 175px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(0px, 120px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 175px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(0px, 120px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] minmax(25px, 50px) [page-start-inset] minmax(50px, 150px) [body-start-outset] minmax(25px, 50px) [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] minmax(15px, 30px) [body-end-outset] minmax(30px, 90px) [page-end-inset] minmax(15px, 30px) [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1200px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(30px, 60px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1200px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 50px [page-start-inset] minmax(50px, 150px) [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(450px, calc(950px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(0px, 120px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1200px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(0px, 120px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 50px [page-start-inset] minmax(50px, 150px) [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(450px, calc(950px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(30px, 90px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] minmax(25px, 50px) [page-start-inset] minmax(50px, 150px) [body-start-outset] minmax(25px, 50px) [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] minmax(15px, 30px) [body-end-outset] minmax(30px, 90px) [page-end-inset] minmax(15px, 30px) [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}}@media(max-width: 991.98px){body .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] 21px [body-end-outset] minmax(45px, 87px) [page-end-inset] 21px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.fullcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.slimcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] 21px [body-end-outset] minmax(45px, 87px) [page-end-inset] 21px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.listing:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(1450px - 3em)) [body-content-end body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 145px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 145px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1.5em [body-content-start] minmax(500px, calc(950px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(45px, 90px) [page-end-inset] 15px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(950px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(15px, 30px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(1200px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 4fr [screen-end-inset] 1.5em [screen-end]}body.docked.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(950px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(15px, 30px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(950px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(15px, 30px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(950px - 3em)) [body-content-end] 1.5em [body-end] 21px [body-end-outset] minmax(45px, 87px) [page-end-inset] 21px [page-end] 4fr [screen-end-inset] 1.5em [screen-end]}body.floating.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(950px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(45px, 90px) [page-end-inset] 15px [page-end] 4fr [screen-end-inset] 1.5em [screen-end]}}@media(max-width: 767.98px){body .page-columns,body.fullcontent:not(.floating):not(.docked) .page-columns,body.slimcontent:not(.floating):not(.docked) .page-columns,body.docked .page-columns,body.docked.slimcontent .page-columns,body.docked.fullcontent .page-columns,body.floating .page-columns,body.floating.slimcontent .page-columns,body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}nav[role=doc-toc]{display:none}}body,.page-row-navigation{grid-template-rows:[page-top] max-content [contents-top] max-content [contents-bottom] max-content [page-bottom]}.page-rows-contents{grid-template-rows:[content-top] minmax(max-content, 1fr) [content-bottom] minmax(60px, max-content) [page-bottom]}.page-full{grid-column:screen-start/screen-end !important}.page-columns>*{grid-column:body-content-start/body-content-end}.page-columns.column-page>*{grid-column:page-start/page-end}.page-columns.column-page-left .page-columns.page-full>*,.page-columns.column-page-left>*{grid-column:page-start/body-content-end}.page-columns.column-page-right .page-columns.page-full>*,.page-columns.column-page-right>*{grid-column:body-content-start/page-end}.page-rows{grid-auto-rows:auto}.header{grid-column:screen-start/screen-end;grid-row:page-top/contents-top}#quarto-content{padding:0;grid-column:screen-start/screen-end;grid-row:contents-top/contents-bottom}body.floating .sidebar.sidebar-navigation{grid-column:page-start/body-start;grid-row:content-top/page-bottom}body.docked .sidebar.sidebar-navigation{grid-column:screen-start/body-start;grid-row:content-top/page-bottom}.sidebar.toc-left{grid-column:page-start/body-start;grid-row:content-top/page-bottom}.sidebar.margin-sidebar{grid-column:body-end/page-end;grid-row:content-top/page-bottom}.page-columns .content{grid-column:body-content-start/body-content-end;grid-row:content-top/content-bottom;align-content:flex-start}.page-columns .page-navigation{grid-column:body-content-start/body-content-end;grid-row:content-bottom/page-bottom}.page-columns .footer{grid-column:screen-start/screen-end;grid-row:contents-bottom/page-bottom}.page-columns .column-body{grid-column:body-content-start/body-content-end}.page-columns .column-body-fullbleed{grid-column:body-start/body-end}.page-columns .column-body-outset{grid-column:body-start-outset/body-end-outset;z-index:998;opacity:.999}.page-columns .column-body-outset table{background:#fff}.page-columns .column-body-outset-left{grid-column:body-start-outset/body-content-end;z-index:998;opacity:.999}.page-columns .column-body-outset-left table{background:#fff}.page-columns .column-body-outset-right{grid-column:body-content-start/body-end-outset;z-index:998;opacity:.999}.page-columns .column-body-outset-right table{background:#fff}.page-columns .column-page{grid-column:page-start/page-end;z-index:998;opacity:.999}.page-columns .column-page table{background:#fff}.page-columns .column-page-inset{grid-column:page-start-inset/page-end-inset;z-index:998;opacity:.999}.page-columns .column-page-inset table{background:#fff}.page-columns .column-page-inset-left{grid-column:page-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-page-inset-left table{background:#fff}.page-columns .column-page-inset-right{grid-column:body-content-start/page-end-inset;z-index:998;opacity:.999}.page-columns .column-page-inset-right figcaption table{background:#fff}.page-columns .column-page-left{grid-column:page-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-page-left table{background:#fff}.page-columns .column-page-right{grid-column:body-content-start/page-end;z-index:998;opacity:.999}.page-columns .column-page-right figcaption table{background:#fff}#quarto-content.page-columns #quarto-margin-sidebar,#quarto-content.page-columns #quarto-sidebar{z-index:1}@media(max-width: 991.98px){#quarto-content.page-columns #quarto-margin-sidebar.collapse,#quarto-content.page-columns #quarto-sidebar.collapse,#quarto-content.page-columns #quarto-margin-sidebar.collapsing,#quarto-content.page-columns #quarto-sidebar.collapsing{z-index:1055}}#quarto-content.page-columns main.column-page,#quarto-content.page-columns main.column-page-right,#quarto-content.page-columns main.column-page-left{z-index:0}.page-columns .column-screen-inset{grid-column:screen-start-inset/screen-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset table{background:#fff}.page-columns .column-screen-inset-left{grid-column:screen-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-inset-left table{background:#fff}.page-columns .column-screen-inset-right{grid-column:body-content-start/screen-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset-right table{background:#fff}.page-columns .column-screen{grid-column:screen-start/screen-end;z-index:998;opacity:.999}.page-columns .column-screen table{background:#fff}.page-columns .column-screen-left{grid-column:screen-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-left table{background:#fff}.page-columns .column-screen-right{grid-column:body-content-start/screen-end;z-index:998;opacity:.999}.page-columns .column-screen-right table{background:#fff}.page-columns .column-screen-inset-shaded{grid-column:screen-start/screen-end;padding:1em;background:#f8f9fa;z-index:998;opacity:.999;margin-bottom:1em}.zindex-content{z-index:998;opacity:.999}.zindex-modal{z-index:1055;opacity:.999}.zindex-over-content{z-index:999;opacity:.999}img.img-fluid.column-screen,img.img-fluid.column-screen-inset-shaded,img.img-fluid.column-screen-inset,img.img-fluid.column-screen-inset-left,img.img-fluid.column-screen-inset-right,img.img-fluid.column-screen-left,img.img-fluid.column-screen-right{width:100%}@media(min-width: 992px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-end/page-end !important;z-index:998}.column-sidebar{grid-column:page-start/body-start !important;z-index:998}.column-leftmargin{grid-column:screen-start-inset/body-start !important;z-index:998}.no-row-height{height:1em;overflow:visible}}@media(max-width: 991.98px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-end/page-end !important;z-index:998}.no-row-height{height:1em;overflow:visible}.page-columns.page-full{overflow:visible}.page-columns.toc-left .margin-caption,.page-columns.toc-left div.aside,.page-columns.toc-left aside:not(.footnotes):not(.sidebar),.page-columns.toc-left .column-margin{grid-column:body-content-start/body-content-end !important;z-index:998;opacity:.999}.page-columns.toc-left .no-row-height{height:initial;overflow:initial}}@media(max-width: 767.98px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-content-start/body-content-end !important;z-index:998;opacity:.999}.no-row-height{height:initial;overflow:initial}#quarto-margin-sidebar{display:none}#quarto-sidebar-toc-left{display:none}.hidden-sm{display:none}}.panel-grid{display:grid;grid-template-rows:repeat(1, 1fr);grid-template-columns:repeat(24, 1fr);gap:1em}.panel-grid .g-col-1{grid-column:auto/span 1}.panel-grid .g-col-2{grid-column:auto/span 2}.panel-grid .g-col-3{grid-column:auto/span 3}.panel-grid .g-col-4{grid-column:auto/span 4}.panel-grid .g-col-5{grid-column:auto/span 5}.panel-grid .g-col-6{grid-column:auto/span 6}.panel-grid .g-col-7{grid-column:auto/span 7}.panel-grid .g-col-8{grid-column:auto/span 8}.panel-grid .g-col-9{grid-column:auto/span 9}.panel-grid .g-col-10{grid-column:auto/span 10}.panel-grid .g-col-11{grid-column:auto/span 11}.panel-grid .g-col-12{grid-column:auto/span 12}.panel-grid .g-col-13{grid-column:auto/span 13}.panel-grid .g-col-14{grid-column:auto/span 14}.panel-grid .g-col-15{grid-column:auto/span 15}.panel-grid .g-col-16{grid-column:auto/span 16}.panel-grid .g-col-17{grid-column:auto/span 17}.panel-grid .g-col-18{grid-column:auto/span 18}.panel-grid .g-col-19{grid-column:auto/span 19}.panel-grid .g-col-20{grid-column:auto/span 20}.panel-grid .g-col-21{grid-column:auto/span 21}.panel-grid .g-col-22{grid-column:auto/span 22}.panel-grid .g-col-23{grid-column:auto/span 23}.panel-grid .g-col-24{grid-column:auto/span 24}.panel-grid .g-start-1{grid-column-start:1}.panel-grid .g-start-2{grid-column-start:2}.panel-grid .g-start-3{grid-column-start:3}.panel-grid .g-start-4{grid-column-start:4}.panel-grid .g-start-5{grid-column-start:5}.panel-grid .g-start-6{grid-column-start:6}.panel-grid .g-start-7{grid-column-start:7}.panel-grid .g-start-8{grid-column-start:8}.panel-grid .g-start-9{grid-column-start:9}.panel-grid .g-start-10{grid-column-start:10}.panel-grid .g-start-11{grid-column-start:11}.panel-grid .g-start-12{grid-column-start:12}.panel-grid .g-start-13{grid-column-start:13}.panel-grid .g-start-14{grid-column-start:14}.panel-grid .g-start-15{grid-column-start:15}.panel-grid .g-start-16{grid-column-start:16}.panel-grid .g-start-17{grid-column-start:17}.panel-grid .g-start-18{grid-column-start:18}.panel-grid .g-start-19{grid-column-start:19}.panel-grid .g-start-20{grid-column-start:20}.panel-grid .g-start-21{grid-column-start:21}.panel-grid .g-start-22{grid-column-start:22}.panel-grid .g-start-23{grid-column-start:23}@media(min-width: 576px){.panel-grid .g-col-sm-1{grid-column:auto/span 1}.panel-grid .g-col-sm-2{grid-column:auto/span 2}.panel-grid .g-col-sm-3{grid-column:auto/span 3}.panel-grid .g-col-sm-4{grid-column:auto/span 4}.panel-grid .g-col-sm-5{grid-column:auto/span 5}.panel-grid .g-col-sm-6{grid-column:auto/span 6}.panel-grid .g-col-sm-7{grid-column:auto/span 7}.panel-grid .g-col-sm-8{grid-column:auto/span 8}.panel-grid .g-col-sm-9{grid-column:auto/span 9}.panel-grid .g-col-sm-10{grid-column:auto/span 10}.panel-grid .g-col-sm-11{grid-column:auto/span 11}.panel-grid .g-col-sm-12{grid-column:auto/span 12}.panel-grid .g-col-sm-13{grid-column:auto/span 13}.panel-grid .g-col-sm-14{grid-column:auto/span 14}.panel-grid .g-col-sm-15{grid-column:auto/span 15}.panel-grid .g-col-sm-16{grid-column:auto/span 16}.panel-grid .g-col-sm-17{grid-column:auto/span 17}.panel-grid .g-col-sm-18{grid-column:auto/span 18}.panel-grid .g-col-sm-19{grid-column:auto/span 19}.panel-grid .g-col-sm-20{grid-column:auto/span 20}.panel-grid .g-col-sm-21{grid-column:auto/span 21}.panel-grid .g-col-sm-22{grid-column:auto/span 22}.panel-grid .g-col-sm-23{grid-column:auto/span 23}.panel-grid .g-col-sm-24{grid-column:auto/span 24}.panel-grid .g-start-sm-1{grid-column-start:1}.panel-grid .g-start-sm-2{grid-column-start:2}.panel-grid .g-start-sm-3{grid-column-start:3}.panel-grid .g-start-sm-4{grid-column-start:4}.panel-grid .g-start-sm-5{grid-column-start:5}.panel-grid .g-start-sm-6{grid-column-start:6}.panel-grid .g-start-sm-7{grid-column-start:7}.panel-grid .g-start-sm-8{grid-column-start:8}.panel-grid .g-start-sm-9{grid-column-start:9}.panel-grid .g-start-sm-10{grid-column-start:10}.panel-grid .g-start-sm-11{grid-column-start:11}.panel-grid .g-start-sm-12{grid-column-start:12}.panel-grid .g-start-sm-13{grid-column-start:13}.panel-grid .g-start-sm-14{grid-column-start:14}.panel-grid .g-start-sm-15{grid-column-start:15}.panel-grid .g-start-sm-16{grid-column-start:16}.panel-grid .g-start-sm-17{grid-column-start:17}.panel-grid .g-start-sm-18{grid-column-start:18}.panel-grid .g-start-sm-19{grid-column-start:19}.panel-grid .g-start-sm-20{grid-column-start:20}.panel-grid .g-start-sm-21{grid-column-start:21}.panel-grid .g-start-sm-22{grid-column-start:22}.panel-grid .g-start-sm-23{grid-column-start:23}}@media(min-width: 768px){.panel-grid .g-col-md-1{grid-column:auto/span 1}.panel-grid .g-col-md-2{grid-column:auto/span 2}.panel-grid .g-col-md-3{grid-column:auto/span 3}.panel-grid .g-col-md-4{grid-column:auto/span 4}.panel-grid .g-col-md-5{grid-column:auto/span 5}.panel-grid .g-col-md-6{grid-column:auto/span 6}.panel-grid .g-col-md-7{grid-column:auto/span 7}.panel-grid .g-col-md-8{grid-column:auto/span 8}.panel-grid .g-col-md-9{grid-column:auto/span 9}.panel-grid .g-col-md-10{grid-column:auto/span 10}.panel-grid .g-col-md-11{grid-column:auto/span 11}.panel-grid .g-col-md-12{grid-column:auto/span 12}.panel-grid .g-col-md-13{grid-column:auto/span 13}.panel-grid .g-col-md-14{grid-column:auto/span 14}.panel-grid .g-col-md-15{grid-column:auto/span 15}.panel-grid .g-col-md-16{grid-column:auto/span 16}.panel-grid .g-col-md-17{grid-column:auto/span 17}.panel-grid .g-col-md-18{grid-column:auto/span 18}.panel-grid .g-col-md-19{grid-column:auto/span 19}.panel-grid .g-col-md-20{grid-column:auto/span 20}.panel-grid .g-col-md-21{grid-column:auto/span 21}.panel-grid .g-col-md-22{grid-column:auto/span 22}.panel-grid .g-col-md-23{grid-column:auto/span 23}.panel-grid .g-col-md-24{grid-column:auto/span 24}.panel-grid .g-start-md-1{grid-column-start:1}.panel-grid .g-start-md-2{grid-column-start:2}.panel-grid .g-start-md-3{grid-column-start:3}.panel-grid .g-start-md-4{grid-column-start:4}.panel-grid .g-start-md-5{grid-column-start:5}.panel-grid .g-start-md-6{grid-column-start:6}.panel-grid .g-start-md-7{grid-column-start:7}.panel-grid .g-start-md-8{grid-column-start:8}.panel-grid .g-start-md-9{grid-column-start:9}.panel-grid .g-start-md-10{grid-column-start:10}.panel-grid .g-start-md-11{grid-column-start:11}.panel-grid .g-start-md-12{grid-column-start:12}.panel-grid .g-start-md-13{grid-column-start:13}.panel-grid .g-start-md-14{grid-column-start:14}.panel-grid .g-start-md-15{grid-column-start:15}.panel-grid .g-start-md-16{grid-column-start:16}.panel-grid .g-start-md-17{grid-column-start:17}.panel-grid .g-start-md-18{grid-column-start:18}.panel-grid .g-start-md-19{grid-column-start:19}.panel-grid .g-start-md-20{grid-column-start:20}.panel-grid .g-start-md-21{grid-column-start:21}.panel-grid .g-start-md-22{grid-column-start:22}.panel-grid .g-start-md-23{grid-column-start:23}}@media(min-width: 992px){.panel-grid .g-col-lg-1{grid-column:auto/span 1}.panel-grid .g-col-lg-2{grid-column:auto/span 2}.panel-grid .g-col-lg-3{grid-column:auto/span 3}.panel-grid .g-col-lg-4{grid-column:auto/span 4}.panel-grid .g-col-lg-5{grid-column:auto/span 5}.panel-grid .g-col-lg-6{grid-column:auto/span 6}.panel-grid .g-col-lg-7{grid-column:auto/span 7}.panel-grid .g-col-lg-8{grid-column:auto/span 8}.panel-grid .g-col-lg-9{grid-column:auto/span 9}.panel-grid .g-col-lg-10{grid-column:auto/span 10}.panel-grid .g-col-lg-11{grid-column:auto/span 11}.panel-grid .g-col-lg-12{grid-column:auto/span 12}.panel-grid .g-col-lg-13{grid-column:auto/span 13}.panel-grid .g-col-lg-14{grid-column:auto/span 14}.panel-grid .g-col-lg-15{grid-column:auto/span 15}.panel-grid .g-col-lg-16{grid-column:auto/span 16}.panel-grid .g-col-lg-17{grid-column:auto/span 17}.panel-grid .g-col-lg-18{grid-column:auto/span 18}.panel-grid .g-col-lg-19{grid-column:auto/span 19}.panel-grid .g-col-lg-20{grid-column:auto/span 20}.panel-grid .g-col-lg-21{grid-column:auto/span 21}.panel-grid .g-col-lg-22{grid-column:auto/span 22}.panel-grid .g-col-lg-23{grid-column:auto/span 23}.panel-grid .g-col-lg-24{grid-column:auto/span 24}.panel-grid .g-start-lg-1{grid-column-start:1}.panel-grid .g-start-lg-2{grid-column-start:2}.panel-grid .g-start-lg-3{grid-column-start:3}.panel-grid .g-start-lg-4{grid-column-start:4}.panel-grid .g-start-lg-5{grid-column-start:5}.panel-grid .g-start-lg-6{grid-column-start:6}.panel-grid .g-start-lg-7{grid-column-start:7}.panel-grid .g-start-lg-8{grid-column-start:8}.panel-grid .g-start-lg-9{grid-column-start:9}.panel-grid .g-start-lg-10{grid-column-start:10}.panel-grid .g-start-lg-11{grid-column-start:11}.panel-grid .g-start-lg-12{grid-column-start:12}.panel-grid .g-start-lg-13{grid-column-start:13}.panel-grid .g-start-lg-14{grid-column-start:14}.panel-grid .g-start-lg-15{grid-column-start:15}.panel-grid .g-start-lg-16{grid-column-start:16}.panel-grid .g-start-lg-17{grid-column-start:17}.panel-grid .g-start-lg-18{grid-column-start:18}.panel-grid .g-start-lg-19{grid-column-start:19}.panel-grid .g-start-lg-20{grid-column-start:20}.panel-grid .g-start-lg-21{grid-column-start:21}.panel-grid .g-start-lg-22{grid-column-start:22}.panel-grid .g-start-lg-23{grid-column-start:23}}@media(min-width: 1200px){.panel-grid .g-col-xl-1{grid-column:auto/span 1}.panel-grid .g-col-xl-2{grid-column:auto/span 2}.panel-grid .g-col-xl-3{grid-column:auto/span 3}.panel-grid .g-col-xl-4{grid-column:auto/span 4}.panel-grid .g-col-xl-5{grid-column:auto/span 5}.panel-grid .g-col-xl-6{grid-column:auto/span 6}.panel-grid .g-col-xl-7{grid-column:auto/span 7}.panel-grid .g-col-xl-8{grid-column:auto/span 8}.panel-grid .g-col-xl-9{grid-column:auto/span 9}.panel-grid .g-col-xl-10{grid-column:auto/span 10}.panel-grid .g-col-xl-11{grid-column:auto/span 11}.panel-grid .g-col-xl-12{grid-column:auto/span 12}.panel-grid .g-col-xl-13{grid-column:auto/span 13}.panel-grid .g-col-xl-14{grid-column:auto/span 14}.panel-grid .g-col-xl-15{grid-column:auto/span 15}.panel-grid .g-col-xl-16{grid-column:auto/span 16}.panel-grid .g-col-xl-17{grid-column:auto/span 17}.panel-grid .g-col-xl-18{grid-column:auto/span 18}.panel-grid .g-col-xl-19{grid-column:auto/span 19}.panel-grid .g-col-xl-20{grid-column:auto/span 20}.panel-grid .g-col-xl-21{grid-column:auto/span 21}.panel-grid .g-col-xl-22{grid-column:auto/span 22}.panel-grid .g-col-xl-23{grid-column:auto/span 23}.panel-grid .g-col-xl-24{grid-column:auto/span 24}.panel-grid .g-start-xl-1{grid-column-start:1}.panel-grid .g-start-xl-2{grid-column-start:2}.panel-grid .g-start-xl-3{grid-column-start:3}.panel-grid .g-start-xl-4{grid-column-start:4}.panel-grid .g-start-xl-5{grid-column-start:5}.panel-grid .g-start-xl-6{grid-column-start:6}.panel-grid .g-start-xl-7{grid-column-start:7}.panel-grid .g-start-xl-8{grid-column-start:8}.panel-grid .g-start-xl-9{grid-column-start:9}.panel-grid .g-start-xl-10{grid-column-start:10}.panel-grid .g-start-xl-11{grid-column-start:11}.panel-grid .g-start-xl-12{grid-column-start:12}.panel-grid .g-start-xl-13{grid-column-start:13}.panel-grid .g-start-xl-14{grid-column-start:14}.panel-grid .g-start-xl-15{grid-column-start:15}.panel-grid .g-start-xl-16{grid-column-start:16}.panel-grid .g-start-xl-17{grid-column-start:17}.panel-grid .g-start-xl-18{grid-column-start:18}.panel-grid .g-start-xl-19{grid-column-start:19}.panel-grid .g-start-xl-20{grid-column-start:20}.panel-grid .g-start-xl-21{grid-column-start:21}.panel-grid .g-start-xl-22{grid-column-start:22}.panel-grid .g-start-xl-23{grid-column-start:23}}@media(min-width: 1400px){.panel-grid .g-col-xxl-1{grid-column:auto/span 1}.panel-grid .g-col-xxl-2{grid-column:auto/span 2}.panel-grid .g-col-xxl-3{grid-column:auto/span 3}.panel-grid .g-col-xxl-4{grid-column:auto/span 4}.panel-grid .g-col-xxl-5{grid-column:auto/span 5}.panel-grid .g-col-xxl-6{grid-column:auto/span 6}.panel-grid .g-col-xxl-7{grid-column:auto/span 7}.panel-grid .g-col-xxl-8{grid-column:auto/span 8}.panel-grid .g-col-xxl-9{grid-column:auto/span 9}.panel-grid .g-col-xxl-10{grid-column:auto/span 10}.panel-grid .g-col-xxl-11{grid-column:auto/span 11}.panel-grid .g-col-xxl-12{grid-column:auto/span 12}.panel-grid .g-col-xxl-13{grid-column:auto/span 13}.panel-grid .g-col-xxl-14{grid-column:auto/span 14}.panel-grid .g-col-xxl-15{grid-column:auto/span 15}.panel-grid .g-col-xxl-16{grid-column:auto/span 16}.panel-grid .g-col-xxl-17{grid-column:auto/span 17}.panel-grid .g-col-xxl-18{grid-column:auto/span 18}.panel-grid .g-col-xxl-19{grid-column:auto/span 19}.panel-grid .g-col-xxl-20{grid-column:auto/span 20}.panel-grid .g-col-xxl-21{grid-column:auto/span 21}.panel-grid .g-col-xxl-22{grid-column:auto/span 22}.panel-grid .g-col-xxl-23{grid-column:auto/span 23}.panel-grid .g-col-xxl-24{grid-column:auto/span 24}.panel-grid .g-start-xxl-1{grid-column-start:1}.panel-grid .g-start-xxl-2{grid-column-start:2}.panel-grid .g-start-xxl-3{grid-column-start:3}.panel-grid .g-start-xxl-4{grid-column-start:4}.panel-grid .g-start-xxl-5{grid-column-start:5}.panel-grid .g-start-xxl-6{grid-column-start:6}.panel-grid .g-start-xxl-7{grid-column-start:7}.panel-grid .g-start-xxl-8{grid-column-start:8}.panel-grid .g-start-xxl-9{grid-column-start:9}.panel-grid .g-start-xxl-10{grid-column-start:10}.panel-grid .g-start-xxl-11{grid-column-start:11}.panel-grid .g-start-xxl-12{grid-column-start:12}.panel-grid .g-start-xxl-13{grid-column-start:13}.panel-grid .g-start-xxl-14{grid-column-start:14}.panel-grid .g-start-xxl-15{grid-column-start:15}.panel-grid .g-start-xxl-16{grid-column-start:16}.panel-grid .g-start-xxl-17{grid-column-start:17}.panel-grid .g-start-xxl-18{grid-column-start:18}.panel-grid .g-start-xxl-19{grid-column-start:19}.panel-grid .g-start-xxl-20{grid-column-start:20}.panel-grid .g-start-xxl-21{grid-column-start:21}.panel-grid .g-start-xxl-22{grid-column-start:22}.panel-grid .g-start-xxl-23{grid-column-start:23}}main{margin-top:1em;margin-bottom:1em}h1,.h1,h2,.h2{color:inherit;margin-top:2rem;margin-bottom:1rem;font-weight:600}h1.title,.title.h1{margin-top:0}main.content>p:has(+section){margin-bottom:2rem}main.content>section:first-of-type>h2:nth-child(1),main.content>section:first-of-type>.h2:nth-child(1){margin-top:0}h2,.h2{border-bottom:1px solid #dee2e6;padding-bottom:.5rem}h3,.h3{font-weight:600}h3,.h3,h4,.h4{opacity:.9;margin-top:1.5rem}h5,.h5,h6,.h6{opacity:.9}.header-section-number{color:hsl(210,10.3448275862%,47.7450980392%)}.nav-link.active .header-section-number{color:inherit}mark,.mark{padding:0em}.panel-caption,.figure-caption,.subfigure-caption,.table-caption,figcaption,caption{font-size:.9rem;color:hsl(210,10.3448275862%,47.7450980392%)}.quarto-layout-cell[data-ref-parent] caption{color:hsl(210,10.3448275862%,47.7450980392%)}.column-margin figcaption,.margin-caption,div.aside,aside,.column-margin{color:hsl(210,10.3448275862%,47.7450980392%);font-size:.825rem}.panel-caption.margin-caption{text-align:inherit}.column-margin.column-container p{margin-bottom:0}.column-margin.column-container>*:not(.collapse):first-child{padding-bottom:.5em;display:block}.column-margin.column-container>*:not(.collapse):not(:first-child){padding-top:.5em;padding-bottom:.5em;display:block}.column-margin.column-container>*.collapse:not(.show){display:none}@media(min-width: 768px){.column-margin.column-container .callout-margin-content:first-child{margin-top:4.5em}.column-margin.column-container .callout-margin-content-simple:first-child{margin-top:3.5em}}.margin-caption>*{padding-top:.5em;padding-bottom:.5em}@media(max-width: 767.98px){.quarto-layout-row{flex-direction:column}}.nav-tabs .nav-item{margin-top:1px;cursor:pointer}.tab-content{margin-top:0px;border-left:#dee2e6 1px solid;border-right:#dee2e6 1px solid;border-bottom:#dee2e6 1px solid;margin-left:0;padding:1em;margin-bottom:1em}@media(max-width: 767.98px){.layout-sidebar{margin-left:0;margin-right:0}}.panel-sidebar,.panel-sidebar .form-control,.panel-input,.panel-input .form-control,.selectize-dropdown{font-size:.9rem}.panel-sidebar .form-control,.panel-input .form-control{padding-top:.1rem}.tab-pane div.sourceCode{margin-top:0px}.tab-pane>p{padding-top:0}.tab-pane>p:nth-child(1){padding-top:0}.tab-pane>p:last-child{margin-bottom:0}.tab-pane>pre:last-child{margin-bottom:0}.tab-content>.tab-pane:not(.active){display:none !important}div.sourceCode{background-color:rgba(233,236,239,.65);border:1px solid rgba(233,236,239,.65)}pre.sourceCode{background-color:rgba(0,0,0,0)}pre.sourceCode{border:none;font-size:.875em;overflow-y:visible !important;padding:.4em}div.sourceCode{overflow-y:hidden}.callout div.sourceCode{margin-left:initial}.blockquote{font-size:inherit;padding-left:1rem;padding-right:1.5rem;color:hsl(210,10.3448275862%,47.7450980392%)}.blockquote h1:first-child,.blockquote .h1:first-child,.blockquote h2:first-child,.blockquote .h2:first-child,.blockquote h3:first-child,.blockquote .h3:first-child,.blockquote h4:first-child,.blockquote .h4:first-child,.blockquote h5:first-child,.blockquote .h5:first-child{margin-top:0}pre{background-color:initial;padding:initial;border:initial}p code.sourceCode,li code.sourceCode,td code.sourceCode{background-color:rgba(233,236,239,.65)}p pre code:not(.sourceCode),li pre code:not(.sourceCode),pre code:not(.sourceCode){background-color:initial}p code:not(.sourceCode),li code:not(.sourceCode),td code:not(.sourceCode){background-color:rgba(233,236,239,.65);padding:.2em}nav p code:not(.sourceCode),nav li code:not(.sourceCode),nav td code:not(.sourceCode){background-color:rgba(0,0,0,0);padding:0}td code:not(.sourceCode){white-space:pre-wrap}#quarto-embedded-source-code-modal>.modal-dialog{max-width:1000px;padding-left:1.75rem;padding-right:1.75rem}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-body{padding:0}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-body div.sourceCode{margin:0;padding:.2rem .2rem;border-radius:0px;border:none}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-header{padding:.7rem}.code-tools-button{font-size:1rem;padding:.15rem .15rem;margin-left:5px;color:#6c757d;background-color:rgba(0,0,0,0);transition:initial;cursor:pointer}.code-tools-button>.bi::before{display:inline-block;height:1rem;width:1rem;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:1rem 1rem}.code-tools-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}#quarto-embedded-source-code-modal .code-copy-button>.bi::before{background-image:url('data:image/svg+xml,')}#quarto-embedded-source-code-modal .code-copy-button-checked>.bi::before{background-image:url('data:image/svg+xml,')}.sidebar{will-change:top;transition:top 200ms linear;position:sticky;overflow-y:auto;padding-top:1.2em;max-height:100vh}.sidebar.toc-left,.sidebar.margin-sidebar{top:0px;padding-top:1em}.sidebar.quarto-banner-title-block-sidebar>*{padding-top:1.65em}figure .quarto-notebook-link{margin-top:.5em}.quarto-notebook-link{font-size:.75em;color:#6c757d;margin-bottom:1em;text-decoration:none;display:block}.quarto-notebook-link:hover{text-decoration:underline;color:#2761e3}.quarto-notebook-link::before{display:inline-block;height:.75rem;width:.75rem;margin-bottom:0em;margin-right:.25em;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:.75rem .75rem}.toc-actions i.bi,.quarto-code-links i.bi,.quarto-other-links i.bi,.quarto-alternate-notebooks i.bi,.quarto-alternate-formats i.bi{margin-right:.4em;font-size:.8rem}.quarto-other-links-text-target .quarto-code-links i.bi,.quarto-other-links-text-target .quarto-other-links i.bi{margin-right:.2em}.quarto-other-formats-text-target .quarto-alternate-formats i.bi{margin-right:.1em}.toc-actions i.bi.empty,.quarto-code-links i.bi.empty,.quarto-other-links i.bi.empty,.quarto-alternate-notebooks i.bi.empty,.quarto-alternate-formats i.bi.empty{padding-left:1em}.quarto-notebook h2,.quarto-notebook .h2{border-bottom:none}.quarto-notebook .cell-container{display:flex}.quarto-notebook .cell-container .cell{flex-grow:4}.quarto-notebook .cell-container .cell-decorator{padding-top:1.5em;padding-right:1em;text-align:right}.quarto-notebook .cell-container.code-fold .cell-decorator{padding-top:3em}.quarto-notebook .cell-code code{white-space:pre-wrap}.quarto-notebook .cell .cell-output-stderr pre code,.quarto-notebook .cell .cell-output-stdout pre code{white-space:pre-wrap;overflow-wrap:anywhere}.toc-actions,.quarto-alternate-formats,.quarto-other-links,.quarto-code-links,.quarto-alternate-notebooks{padding-left:0em}.sidebar .toc-actions a,.sidebar .quarto-alternate-formats a,.sidebar .quarto-other-links a,.sidebar .quarto-code-links a,.sidebar .quarto-alternate-notebooks a,.sidebar nav[role=doc-toc] a{text-decoration:none}.sidebar .toc-actions a:hover,.sidebar .quarto-other-links a:hover,.sidebar .quarto-code-links a:hover,.sidebar .quarto-alternate-formats a:hover,.sidebar .quarto-alternate-notebooks a:hover{color:#2761e3}.sidebar .toc-actions h2,.sidebar .toc-actions .h2,.sidebar .quarto-code-links h2,.sidebar .quarto-code-links .h2,.sidebar .quarto-other-links h2,.sidebar .quarto-other-links .h2,.sidebar .quarto-alternate-notebooks h2,.sidebar .quarto-alternate-notebooks .h2,.sidebar .quarto-alternate-formats h2,.sidebar .quarto-alternate-formats .h2,.sidebar nav[role=doc-toc]>h2,.sidebar nav[role=doc-toc]>.h2{font-weight:500;margin-bottom:.2rem;margin-top:.3rem;font-family:inherit;border-bottom:0;padding-bottom:0;padding-top:0px}.sidebar .toc-actions>h2,.sidebar .toc-actions>.h2,.sidebar .quarto-code-links>h2,.sidebar .quarto-code-links>.h2,.sidebar .quarto-other-links>h2,.sidebar .quarto-other-links>.h2,.sidebar .quarto-alternate-notebooks>h2,.sidebar .quarto-alternate-notebooks>.h2,.sidebar .quarto-alternate-formats>h2,.sidebar .quarto-alternate-formats>.h2{font-size:.8rem}.sidebar nav[role=doc-toc]>h2,.sidebar nav[role=doc-toc]>.h2{font-size:.875rem}.sidebar nav[role=doc-toc]>ul a{border-left:1px solid #e9ecef;padding-left:.6rem}.sidebar .toc-actions h2>ul a,.sidebar .toc-actions .h2>ul a,.sidebar .quarto-code-links h2>ul a,.sidebar .quarto-code-links .h2>ul a,.sidebar .quarto-other-links h2>ul a,.sidebar .quarto-other-links .h2>ul a,.sidebar .quarto-alternate-notebooks h2>ul a,.sidebar .quarto-alternate-notebooks .h2>ul a,.sidebar .quarto-alternate-formats h2>ul a,.sidebar .quarto-alternate-formats .h2>ul a{border-left:none;padding-left:.6rem}.sidebar .toc-actions ul a:empty,.sidebar .quarto-code-links ul a:empty,.sidebar .quarto-other-links ul a:empty,.sidebar .quarto-alternate-notebooks ul a:empty,.sidebar .quarto-alternate-formats ul a:empty,.sidebar nav[role=doc-toc]>ul a:empty{display:none}.sidebar .toc-actions ul,.sidebar .quarto-code-links ul,.sidebar .quarto-other-links ul,.sidebar .quarto-alternate-notebooks ul,.sidebar .quarto-alternate-formats ul{padding-left:0;list-style:none}.sidebar nav[role=doc-toc] ul{list-style:none;padding-left:0;list-style:none}.sidebar nav[role=doc-toc]>ul{margin-left:.45em}.quarto-margin-sidebar nav[role=doc-toc]{padding-left:.5em}.sidebar .toc-actions>ul,.sidebar .quarto-code-links>ul,.sidebar .quarto-other-links>ul,.sidebar .quarto-alternate-notebooks>ul,.sidebar .quarto-alternate-formats>ul{font-size:.8rem}.sidebar nav[role=doc-toc]>ul{font-size:.875rem}.sidebar .toc-actions ul li a,.sidebar .quarto-code-links ul li a,.sidebar .quarto-other-links ul li a,.sidebar .quarto-alternate-notebooks ul li a,.sidebar .quarto-alternate-formats ul li a,.sidebar nav[role=doc-toc]>ul li a{line-height:1.1rem;padding-bottom:.2rem;padding-top:.2rem;color:inherit}.sidebar nav[role=doc-toc] ul>li>ul>li>a{padding-left:1.2em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>a{padding-left:2.4em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>a{padding-left:3.6em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>ul>li>a{padding-left:4.8em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>ul>li>ul>li>a{padding-left:6em}.sidebar nav[role=doc-toc] ul>li>a.active,.sidebar nav[role=doc-toc] ul>li>ul>li>a.active{border-left:1px solid #2761e3;color:#2761e3 !important}.sidebar nav[role=doc-toc] ul>li>a:hover,.sidebar nav[role=doc-toc] ul>li>ul>li>a:hover{color:#2761e3 !important}kbd,.kbd{color:#343a40;background-color:#f8f9fa;border:1px solid;border-radius:5px;border-color:#dee2e6}.quarto-appendix-contents div.hanging-indent{margin-left:0em}.quarto-appendix-contents div.hanging-indent div.csl-entry{margin-left:1em;text-indent:-1em}.citation a,.footnote-ref{text-decoration:none}.footnotes ol{padding-left:1em}.tippy-content>*{margin-bottom:.7em}.tippy-content>*:last-child{margin-bottom:0}.callout{margin-top:1.25rem;margin-bottom:1.25rem;border-radius:.25rem;overflow-wrap:break-word}.callout .callout-title-container{overflow-wrap:anywhere}.callout.callout-style-simple{padding:.4em .7em;border-left:5px solid;border-right:1px solid #dee2e6;border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}.callout.callout-style-default{border-left:5px solid;border-right:1px solid #dee2e6;border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}.callout .callout-body-container{flex-grow:1}.callout.callout-style-simple .callout-body{font-size:.9rem;font-weight:400;margin-bottom:-0.4em;margin-top:.5em}.callout.callout-style-default .callout-body{font-size:.9rem;font-weight:400}.callout:not(.no-icon).callout-titled.callout-style-simple .callout-body{padding-left:1.6em}.callout.callout-titled>.callout-header{padding-top:.2em;margin-bottom:-0.2em}.callout.callout-empty-content>.callout-header{margin-bottom:0em;border-bottom-right-radius:calc(0.25rem + -1px)}.callout>.callout-header.collapsed{border-bottom-right-radius:calc(0.25rem + -1px)}.callout.callout-style-simple>div.callout-header{border-bottom:none;font-size:.9rem;font-weight:600;opacity:75%}.callout.callout-style-default>div.callout-header{border-bottom:none;font-weight:600;opacity:85%;font-size:.9rem;padding-left:.5em;padding-right:.5em;border-top-right-radius:calc(0.25rem + -1px)}.callout.callout-style-default .callout-body{padding-left:.5em;padding-right:.5em}.callout.callout-style-default .callout-body>:first-child{padding-top:.5rem;margin-top:0}.callout>div.callout-header[data-bs-toggle=collapse]{cursor:pointer}.callout.callout-style-default .callout-header[aria-expanded=false],.callout.callout-style-default .callout-header[aria-expanded=true]{padding-top:0px;margin-bottom:0px;align-items:center}.callout.callout-titled .callout-body>:last-child:not(.sourceCode),.callout.callout-titled .callout-body>div>:last-child:not(.sourceCode){padding-bottom:.5rem;margin-bottom:0}.callout:not(.callout-titled) .callout-body>:first-child,.callout:not(.callout-titled) .callout-body>div>:first-child{margin-top:.25rem}.callout:not(.callout-titled) .callout-body>:last-child,.callout:not(.callout-titled) .callout-body>div>:last-child{margin-bottom:.2rem}.callout.callout-style-simple .callout-icon::before,.callout.callout-style-simple .callout-toggle::before{height:1rem;width:1rem;display:inline-block;content:"";background-repeat:no-repeat;background-size:1rem 1rem}.callout.callout-style-default .callout-icon::before,.callout.callout-style-default .callout-toggle::before{height:.9rem;width:.9rem;display:inline-block;content:"";background-repeat:no-repeat;background-size:.9rem .9rem}.callout.callout-style-default .callout-toggle::before{margin-top:5px}.callout .callout-btn-toggle .callout-toggle::before{transition:transform .2s linear}.callout .callout-header[aria-expanded=false] .callout-toggle::before{transform:rotate(-90deg)}.callout .callout-header[aria-expanded=true] .callout-toggle::before{transform:none}.callout.callout-style-simple:not(.no-icon) div.callout-icon-container{padding-top:.2em;padding-right:.55em}.callout.callout-style-default:not(.no-icon) div.callout-icon-container{padding-top:.1em;padding-right:.35em}.callout.callout-style-default:not(.no-icon) div.callout-title-container{margin-top:-1px}.callout.callout-style-default.callout-caution:not(.no-icon) div.callout-icon-container{padding-top:.3em;padding-right:.35em}.callout>.callout-body>.callout-icon-container>.no-icon,.callout>.callout-header>.callout-icon-container>.no-icon{display:none}div.callout.callout{border-left-color:#6c757d}div.callout.callout-style-default>.callout-header{background-color:#6c757d}div.callout-note.callout{border-left-color:#2780e3}div.callout-note.callout-style-default>.callout-header{background-color:rgb(233.4,242.3,252.2)}div.callout-note:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-note.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-note .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-tip.callout{border-left-color:#3fb618}div.callout-tip.callout-style-default>.callout-header{background-color:rgb(235.8,247.7,231.9)}div.callout-tip:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-tip.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-tip .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-warning.callout{border-left-color:#ff7518}div.callout-warning.callout-style-default>.callout-header{background-color:rgb(255,241.2,231.9)}div.callout-warning:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-warning.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-warning .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-caution.callout{border-left-color:#f0ad4e}div.callout-caution.callout-style-default>.callout-header{background-color:rgb(253.5,246.8,237.3)}div.callout-caution:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-caution.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-caution .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-important.callout{border-left-color:#ff0039}div.callout-important.callout-style-default>.callout-header{background-color:rgb(255,229.5,235.2)}div.callout-important:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-important.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-important .callout-toggle::before{background-image:url('data:image/svg+xml,')}.quarto-toggle-container{display:flex;align-items:center}.quarto-reader-toggle .bi::before,.quarto-color-scheme-toggle .bi::before{display:inline-block;height:1rem;width:1rem;content:"";background-repeat:no-repeat;background-size:1rem 1rem}.sidebar-navigation{padding-left:20px}.navbar{background-color:#f8f9fa;color:rgb(84.32,84.66,85)}.navbar .quarto-color-scheme-toggle:not(.alternate) .bi::before{background-image:url('data:image/svg+xml,')}.navbar .quarto-color-scheme-toggle.alternate .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-color-scheme-toggle:not(.alternate) .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-color-scheme-toggle.alternate .bi::before{background-image:url('data:image/svg+xml,')}.quarto-sidebar-toggle{border-color:#dee2e6;border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem;border-style:solid;border-width:1px;overflow:hidden;border-top-width:0px;padding-top:0px !important}.quarto-sidebar-toggle-title{cursor:pointer;padding-bottom:2px;margin-left:.25em;text-align:center;font-weight:400;font-size:.775em}#quarto-content .quarto-sidebar-toggle{background:hsl(0,0%,98%)}#quarto-content .quarto-sidebar-toggle-title{color:#343a40}.quarto-sidebar-toggle-icon{color:#dee2e6;margin-right:.5em;float:right;transition:transform .2s ease}.quarto-sidebar-toggle-icon::before{padding-top:5px}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-icon{transform:rotate(-180deg)}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-title{border-bottom:solid #dee2e6 1px}.quarto-sidebar-toggle-contents{background-color:#fff;padding-right:10px;padding-left:10px;margin-top:0px !important;transition:max-height .5s ease}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-contents{padding-top:1em;padding-bottom:10px}@media(max-width: 767.98px){.sidebar-menu-container{padding-bottom:5em}}.quarto-sidebar-toggle:not(.expanded) .quarto-sidebar-toggle-contents{padding-top:0px !important;padding-bottom:0px}nav[role=doc-toc]{z-index:1020}#quarto-sidebar>*,nav[role=doc-toc]>*{transition:opacity .1s ease,border .1s ease}#quarto-sidebar.slow>*,nav[role=doc-toc].slow>*{transition:opacity .4s ease,border .4s ease}.quarto-color-scheme-toggle:not(.alternate).top-right .bi::before{background-image:url('data:image/svg+xml,')}.quarto-color-scheme-toggle.alternate.top-right .bi::before{background-image:url('data:image/svg+xml,')}#quarto-appendix.default{border-top:1px solid #dee2e6}#quarto-appendix.default{background-color:#fff;padding-top:1.5em;margin-top:2em;z-index:998}#quarto-appendix.default .quarto-appendix-heading{margin-top:0;line-height:1.4em;font-weight:600;opacity:.9;border-bottom:none;margin-bottom:0}#quarto-appendix.default .footnotes ol,#quarto-appendix.default .footnotes ol li>p:last-of-type,#quarto-appendix.default .quarto-appendix-contents>p:last-of-type{margin-bottom:0}#quarto-appendix.default .footnotes ol{margin-left:.5em}#quarto-appendix.default .quarto-appendix-secondary-label{margin-bottom:.4em}#quarto-appendix.default .quarto-appendix-bibtex{font-size:.7em;padding:1em;border:solid 1px #dee2e6;margin-bottom:1em}#quarto-appendix.default .quarto-appendix-bibtex code.sourceCode{white-space:pre-wrap}#quarto-appendix.default .quarto-appendix-citeas{font-size:.9em;padding:1em;border:solid 1px #dee2e6;margin-bottom:1em}#quarto-appendix.default .quarto-appendix-heading{font-size:1em !important}#quarto-appendix.default *[role=doc-endnotes]>ol,#quarto-appendix.default .quarto-appendix-contents>*:not(h2):not(.h2){font-size:.9em}#quarto-appendix.default section{padding-bottom:1.5em}#quarto-appendix.default section *[role=doc-endnotes],#quarto-appendix.default section>*:not(a){opacity:.9;word-wrap:break-word}.btn.btn-quarto,div.cell-output-display .btn-quarto{--bs-btn-color: rgb(202.22, 203.78, 205.34);--bs-btn-bg: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: rgb(202.22, 203.78, 205.34);--bs-btn-hover-bg: rgb(82.45, 87.55, 92.65);--bs-btn-hover-border-color: rgb(72.3, 77.7, 83.1);--bs-btn-focus-shadow-rgb: 75, 80, 85;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(92.6, 97.4, 102.2);--bs-btn-active-border-color: rgb(72.3, 77.7, 83.1);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #343a40;--bs-btn-disabled-border-color: #343a40}nav.quarto-secondary-nav.color-navbar{background-color:#f8f9fa;color:rgb(84.32,84.66,85)}nav.quarto-secondary-nav.color-navbar h1,nav.quarto-secondary-nav.color-navbar .h1,nav.quarto-secondary-nav.color-navbar .quarto-btn-toggle{color:rgb(84.32,84.66,85)}@media(max-width: 991.98px){body.nav-sidebar .quarto-title-banner{margin-bottom:0;padding-bottom:1em}body.nav-sidebar #title-block-header{margin-block-end:0}}p.subtitle{margin-top:.25em;margin-bottom:.5em}code a:any-link{color:inherit;text-decoration-color:#6c757d}/*! light */div.observablehq table thead tr th{background-color:var(--bs-body-bg)}input,button,select,optgroup,textarea{background-color:var(--bs-body-bg)}.code-annotated .code-copy-button{margin-right:1.25em;margin-top:0;padding-bottom:0;padding-top:3px}.code-annotation-gutter-bg{background-color:#fff}.code-annotation-gutter{background-color:rgba(233,236,239,.65)}.code-annotation-gutter,.code-annotation-gutter-bg{height:100%;width:calc(20px + .5em);position:absolute;top:0;right:0}dl.code-annotation-container-grid dt{margin-right:1em;margin-top:.25rem}dl.code-annotation-container-grid dt{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;color:rgb(74.8620689655,83.5,92.1379310345);border:solid rgb(74.8620689655,83.5,92.1379310345) 1px;border-radius:50%;height:22px;width:22px;line-height:22px;font-size:11px;text-align:center;vertical-align:middle;text-decoration:none}dl.code-annotation-container-grid dt[data-target-cell]{cursor:pointer}dl.code-annotation-container-grid dt[data-target-cell].code-annotation-active{color:#fff;border:solid #aaa 1px;background-color:#aaa}pre.code-annotation-code{padding-top:0;padding-bottom:0}pre.code-annotation-code code{z-index:3}#code-annotation-line-highlight-gutter{width:100%;border-top:solid rgba(170,170,170,.2666666667) 1px;border-bottom:solid rgba(170,170,170,.2666666667) 1px;z-index:2;background-color:rgba(170,170,170,.1333333333)}#code-annotation-line-highlight{margin-left:-4em;width:calc(100% + 4em);border-top:solid rgba(170,170,170,.2666666667) 1px;border-bottom:solid rgba(170,170,170,.2666666667) 1px;z-index:2;background-color:rgba(170,170,170,.1333333333)}code.sourceCode .code-annotation-anchor.code-annotation-active{background-color:var(--quarto-hl-normal-color, #aaaaaa);border:solid var(--quarto-hl-normal-color, #aaaaaa) 1px;color:#e9ecef;font-weight:bolder}code.sourceCode .code-annotation-anchor{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;color:var(--quarto-hl-co-color);border:solid var(--quarto-hl-co-color) 1px;border-radius:50%;height:18px;width:18px;font-size:9px;margin-top:2px}code.sourceCode button.code-annotation-anchor{padding:2px;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none}code.sourceCode a.code-annotation-anchor{line-height:18px;text-align:center;vertical-align:middle;cursor:default;text-decoration:none}@media print{.page-columns .column-screen-inset{grid-column:page-start-inset/page-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset table{background:#fff}.page-columns .column-screen-inset-left{grid-column:page-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-inset-left table{background:#fff}.page-columns .column-screen-inset-right{grid-column:body-content-start/page-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset-right table{background:#fff}.page-columns .column-screen{grid-column:page-start/page-end;z-index:998;opacity:.999}.page-columns .column-screen table{background:#fff}.page-columns .column-screen-left{grid-column:page-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-left table{background:#fff}.page-columns .column-screen-right{grid-column:body-content-start/page-end;z-index:998;opacity:.999}.page-columns .column-screen-right table{background:#fff}.page-columns .column-screen-inset-shaded{grid-column:page-start-inset/page-end-inset;padding:1em;background:#f8f9fa;z-index:998;opacity:.999;margin-bottom:1em}}.quarto-video{margin-bottom:1em}.table{border-top:1px solid rgb(214.4,215.6,216.8);border-bottom:1px solid rgb(214.4,215.6,216.8)}.table>thead{border-top-width:0;border-bottom:1px solid rgb(153.5,156.5,159.5)}.table a{word-break:break-word}.table>:not(caption)>*>*{background-color:unset;color:unset}#quarto-document-content .crosstalk-input .checkbox input[type=checkbox],#quarto-document-content .crosstalk-input .checkbox-inline input[type=checkbox]{position:unset;margin-top:unset;margin-left:unset}#quarto-document-content .row{margin-left:unset;margin-right:unset}.quarto-xref{white-space:nowrap}#quarto-draft-alert{margin-top:0px;margin-bottom:0px;padding:.3em;text-align:center;font-size:.9em}#quarto-draft-alert i{margin-right:.3em}#quarto-back-to-top{z-index:1000}pre{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:0.875em;font-weight:400}pre code{font-family:inherit;font-size:inherit;font-weight:inherit}code{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:0.875em;font-weight:400}a{background-color:rgba(0,0,0,0);font-weight:400;text-decoration:underline}.screen-reader-only{position:absolute;clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;width:1px}a.external:after{content:"";background-image:url('data:image/svg+xml,');background-size:contain;background-repeat:no-repeat;background-position:center center;margin-left:.2em;padding-right:.75em}div.sourceCode code a.external:after{content:none}a.external:after:hover{cursor:pointer}.quarto-ext-icon{display:inline-block;font-size:.75em;padding-left:.3em}.code-with-filename .code-with-filename-file{margin-bottom:0;padding-bottom:2px;padding-top:2px;padding-left:.7em;border:var(--quarto-border-width) solid var(--quarto-border-color);border-radius:var(--quarto-border-radius);border-bottom:0;border-bottom-left-radius:0%;border-bottom-right-radius:0%}.code-with-filename div.sourceCode,.reveal .code-with-filename div.sourceCode{margin-top:0;border-top-left-radius:0%;border-top-right-radius:0%}.code-with-filename .code-with-filename-file pre{margin-bottom:0}.code-with-filename .code-with-filename-file{background-color:rgba(219,219,219,.8)}.quarto-dark .code-with-filename .code-with-filename-file{background-color:#555}.code-with-filename .code-with-filename-file strong{font-weight:400}.quarto-title-banner{margin-bottom:1em;color:rgb(84.32,84.66,85);background:#f8f9fa}.quarto-title-banner a{color:rgb(84.32,84.66,85)}.quarto-title-banner h1,.quarto-title-banner .h1,.quarto-title-banner h2,.quarto-title-banner .h2{color:rgb(84.32,84.66,85)}.quarto-title-banner .code-tools-button{color:hsl(210,.4016064257%,53.2%)}.quarto-title-banner .code-tools-button:hover{color:rgb(84.32,84.66,85)}.quarto-title-banner .code-tools-button>.bi::before{background-image:url('data:image/svg+xml,')}.quarto-title-banner .code-tools-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}.quarto-title-banner .quarto-title .title{font-weight:600}.quarto-title-banner .quarto-categories{margin-top:.75em}@media(min-width: 992px){.quarto-title-banner{padding-top:2.5em;padding-bottom:2.5em}}@media(max-width: 991.98px){.quarto-title-banner{padding-top:1em;padding-bottom:1em}}@media(max-width: 767.98px){body.hypothesis-enabled #title-block-header>*{padding-right:20px}}main.quarto-banner-title-block>section:first-child>h2,main.quarto-banner-title-block>section:first-child>.h2,main.quarto-banner-title-block>section:first-child>h3,main.quarto-banner-title-block>section:first-child>.h3,main.quarto-banner-title-block>section:first-child>h4,main.quarto-banner-title-block>section:first-child>.h4{margin-top:0}.quarto-title .quarto-categories{display:flex;flex-wrap:wrap;row-gap:.5em;column-gap:.4em;padding-bottom:.5em;margin-top:.75em}.quarto-title .quarto-categories .quarto-category{padding:.25em .75em;font-size:.65em;text-transform:uppercase;border:solid 1px;border-radius:.25rem;opacity:.6}.quarto-title .quarto-categories .quarto-category a{color:inherit}.quarto-title-meta-container{display:grid;grid-template-columns:1fr auto}.quarto-title-meta-column-end{display:flex;flex-direction:column;padding-left:1em}.quarto-title-meta-column-end a .bi{margin-right:.3em}#title-block-header.quarto-title-block.default .quarto-title-meta{display:grid;grid-template-columns:repeat(2, 1fr);grid-column-gap:1em}#title-block-header.quarto-title-block.default .quarto-title .title{margin-bottom:0}#title-block-header.quarto-title-block.default .quarto-title-author-orcid img{margin-top:-0.2em;height:.8em;width:.8em}#title-block-header.quarto-title-block.default .quarto-title-author-email{opacity:.7}#title-block-header.quarto-title-block.default .quarto-description p:last-of-type{margin-bottom:0}#title-block-header.quarto-title-block.default .quarto-title-meta-contents p,#title-block-header.quarto-title-block.default .quarto-title-authors p,#title-block-header.quarto-title-block.default .quarto-title-affiliations p{margin-bottom:.1em}#title-block-header.quarto-title-block.default .quarto-title-meta-heading{text-transform:uppercase;margin-top:1em;font-size:.8em;opacity:.8;font-weight:400}#title-block-header.quarto-title-block.default .quarto-title-meta-contents{font-size:.9em}#title-block-header.quarto-title-block.default .quarto-title-meta-contents p.affiliation:last-of-type{margin-bottom:.1em}#title-block-header.quarto-title-block.default p.affiliation{margin-bottom:.1em}#title-block-header.quarto-title-block.default .keywords,#title-block-header.quarto-title-block.default .description,#title-block-header.quarto-title-block.default .abstract{margin-top:0}#title-block-header.quarto-title-block.default .keywords>p,#title-block-header.quarto-title-block.default .description>p,#title-block-header.quarto-title-block.default .abstract>p{font-size:.9em}#title-block-header.quarto-title-block.default .keywords>p:last-of-type,#title-block-header.quarto-title-block.default .description>p:last-of-type,#title-block-header.quarto-title-block.default .abstract>p:last-of-type{margin-bottom:0}#title-block-header.quarto-title-block.default .keywords .block-title,#title-block-header.quarto-title-block.default .description .block-title,#title-block-header.quarto-title-block.default .abstract .block-title{margin-top:1em;text-transform:uppercase;font-size:.8em;opacity:.8;font-weight:400}#title-block-header.quarto-title-block.default .quarto-title-meta-author{display:grid;grid-template-columns:minmax(max-content, 1fr) 1fr;grid-column-gap:1em}.quarto-title-tools-only{display:flex;justify-content:right}body{-webkit-font-smoothing:antialiased}.badge.bg-light{color:#343a40}.progress .progress-bar{font-size:8px;line-height:8px}:root{--quarto-scss-export-gray-300: #dee2e6;--quarto-scss-export-gray-500: #adb5bd;--quarto-scss-export-gray-600: #6c757d;--quarto-scss-export-gray-800: #343a40;--quarto-scss-export-card-cap-bg: rgba(52, 58, 64, 0.25);--quarto-scss-export-border-color: #dee2e6;--quarto-scss-export-text-muted: #6c757d;--quarto-scss-export-white: #fff;--quarto-scss-export-gray-100: #f8f9fa;--quarto-scss-export-gray-200: #e9ecef;--quarto-scss-export-gray-400: #ced4da;--quarto-scss-export-gray-700: #495057;--quarto-scss-export-gray-900: #212529;--quarto-scss-export-black: #000;--quarto-scss-export-blue: #2780e3;--quarto-scss-export-indigo: #6610f2;--quarto-scss-export-purple: #613d7c;--quarto-scss-export-pink: #e83e8c;--quarto-scss-export-red: #ff0039;--quarto-scss-export-orange: #f0ad4e;--quarto-scss-export-yellow: #ff7518;--quarto-scss-export-green: #3fb618;--quarto-scss-export-teal: #20c997;--quarto-scss-export-cyan: #9954bb;--quarto-scss-export-primary: #2780e3;--quarto-scss-export-secondary: #343a40;--quarto-scss-export-success: #3fb618;--quarto-scss-export-info: #9954bb;--quarto-scss-export-warning: #ff7518;--quarto-scss-export-danger: #ff0039;--quarto-scss-export-light: #f8f9fa;--quarto-scss-export-dark: #343a40;--quarto-scss-export-body-color: #343a40;--quarto-scss-export-title-banner-color: ;--quarto-scss-export-title-banner-bg: ;--quarto-scss-export-btn-code-copy-color: #5E5E5E;--quarto-scss-export-btn-code-copy-color-active: #4758AB;--quarto-scss-export-sidebar-bg: #fff;--quarto-scss-export-link-color: #2761e3;--quarto-scss-export-link-color-bg: transparent;--quarto-scss-export-code-color: #7d12ba;--quarto-scss-export-code-bg: #f8f9fa;--quarto-scss-export-toc-color: #2761e3;--quarto-scss-export-toc-active-border: #2761e3;--quarto-scss-export-toc-inactive-border: #e9ecef;--quarto-scss-export-navbar-default: #2780e3;--quarto-scss-export-navbar-hl-override: false;--quarto-scss-export-navbar-bg: #f8f9fa;--quarto-scss-export-btn-bg: #343a40;--quarto-scss-export-btn-fg: rgb(202.22, 203.78, 205.34);--quarto-scss-export-body-contrast-bg: #fff;--quarto-scss-export-body-contrast-color: #343a40;--quarto-scss-export-navbar-fg: rgb(84.32, 84.66, 85);--quarto-scss-export-navbar-hl: rgb(31.2, 77.6, 181.6);--quarto-scss-export-navbar-brand: rgb(84.32, 84.66, 85);--quarto-scss-export-navbar-brand-hl: rgb(31.2, 77.6, 181.6);--quarto-scss-export-navbar-toggler-border-color: rgba(84.32, 84.66, 85, 0);--quarto-scss-export-navbar-hover-color: rgba(31.2, 77.6, 181.6, 0.8);--quarto-scss-export-navbar-disabled-color: rgba(84.32, 84.66, 85, 0.75);--quarto-scss-export-sidebar-fg: rgb(89.25, 89.25, 89.25);--quarto-scss-export-title-block-color: #343a40;--quarto-scss-export-title-block-contast-color: #fff;--quarto-scss-export-footer-bg: #fff;--quarto-scss-export-footer-fg: rgb(117.3, 117.3, 117.3);--quarto-scss-export-popover-bg: #fff;--quarto-scss-export-input-bg: #fff;--quarto-scss-export-input-border-color: #dee2e6;--quarto-scss-export-code-annotation-higlight-color: rgba(170, 170, 170, 0.2666666667);--quarto-scss-export-code-annotation-higlight-bg: rgba(170, 170, 170, 0.1333333333);--quarto-scss-export-table-group-separator-color: rgb(153.5, 156.5, 159.5);--quarto-scss-export-table-group-separator-color-lighter: rgb(214.4, 215.6, 216.8);--quarto-scss-export-link-decoration: underline;--quarto-scss-export-table-border-color: #dee2e6;--quarto-scss-export-sidebar-glass-bg: rgba(102, 102, 102, 0.4);--quarto-scss-export-color-contrast-dark: #000;--quarto-scss-export-color-contrast-light: #fff;--quarto-scss-export-blue-100: rgb(211.8, 229.6, 249.4);--quarto-scss-export-blue-200: rgb(168.6, 204.2, 243.8);--quarto-scss-export-blue-300: rgb(125.4, 178.8, 238.2);--quarto-scss-export-blue-400: rgb(82.2, 153.4, 232.6);--quarto-scss-export-blue-500: #2780e3;--quarto-scss-export-blue-600: rgb(31.2, 102.4, 181.6);--quarto-scss-export-blue-700: rgb(23.4, 76.8, 136.2);--quarto-scss-export-blue-800: rgb(15.6, 51.2, 90.8);--quarto-scss-export-blue-900: rgb(7.8, 25.6, 45.4);--quarto-scss-export-indigo-100: rgb(224.4, 207.2, 252.4);--quarto-scss-export-indigo-200: rgb(193.8, 159.4, 249.8);--quarto-scss-export-indigo-300: rgb(163.2, 111.6, 247.2);--quarto-scss-export-indigo-400: rgb(132.6, 63.8, 244.6);--quarto-scss-export-indigo-500: #6610f2;--quarto-scss-export-indigo-600: rgb(81.6, 12.8, 193.6);--quarto-scss-export-indigo-700: rgb(61.2, 9.6, 145.2);--quarto-scss-export-indigo-800: rgb(40.8, 6.4, 96.8);--quarto-scss-export-indigo-900: rgb(20.4, 3.2, 48.4);--quarto-scss-export-purple-100: rgb(223.4, 216.2, 228.8);--quarto-scss-export-purple-200: rgb(191.8, 177.4, 202.6);--quarto-scss-export-purple-300: rgb(160.2, 138.6, 176.4);--quarto-scss-export-purple-400: rgb(128.6, 99.8, 150.2);--quarto-scss-export-purple-500: #613d7c;--quarto-scss-export-purple-600: rgb(77.6, 48.8, 99.2);--quarto-scss-export-purple-700: rgb(58.2, 36.6, 74.4);--quarto-scss-export-purple-800: rgb(38.8, 24.4, 49.6);--quarto-scss-export-purple-900: rgb(19.4, 12.2, 24.8);--quarto-scss-export-pink-100: rgb(250.4, 216.4, 232);--quarto-scss-export-pink-200: rgb(245.8, 177.8, 209);--quarto-scss-export-pink-300: rgb(241.2, 139.2, 186);--quarto-scss-export-pink-400: rgb(236.6, 100.6, 163);--quarto-scss-export-pink-500: #e83e8c;--quarto-scss-export-pink-600: rgb(185.6, 49.6, 112);--quarto-scss-export-pink-700: rgb(139.2, 37.2, 84);--quarto-scss-export-pink-800: rgb(92.8, 24.8, 56);--quarto-scss-export-pink-900: rgb(46.4, 12.4, 28);--quarto-scss-export-red-100: rgb(255, 204, 215.4);--quarto-scss-export-red-200: rgb(255, 153, 175.8);--quarto-scss-export-red-300: rgb(255, 102, 136.2);--quarto-scss-export-red-400: rgb(255, 51, 96.6);--quarto-scss-export-red-500: #ff0039;--quarto-scss-export-red-600: rgb(204, 0, 45.6);--quarto-scss-export-red-700: rgb(153, 0, 34.2);--quarto-scss-export-red-800: rgb(102, 0, 22.8);--quarto-scss-export-red-900: rgb(51, 0, 11.4);--quarto-scss-export-orange-100: rgb(252, 238.6, 219.6);--quarto-scss-export-orange-200: rgb(249, 222.2, 184.2);--quarto-scss-export-orange-300: rgb(246, 205.8, 148.8);--quarto-scss-export-orange-400: rgb(243, 189.4, 113.4);--quarto-scss-export-orange-500: #f0ad4e;--quarto-scss-export-orange-600: rgb(192, 138.4, 62.4);--quarto-scss-export-orange-700: rgb(144, 103.8, 46.8);--quarto-scss-export-orange-800: rgb(96, 69.2, 31.2);--quarto-scss-export-orange-900: rgb(48, 34.6, 15.6);--quarto-scss-export-yellow-100: rgb(255, 227.4, 208.8);--quarto-scss-export-yellow-200: rgb(255, 199.8, 162.6);--quarto-scss-export-yellow-300: rgb(255, 172.2, 116.4);--quarto-scss-export-yellow-400: rgb(255, 144.6, 70.2);--quarto-scss-export-yellow-500: #ff7518;--quarto-scss-export-yellow-600: rgb(204, 93.6, 19.2);--quarto-scss-export-yellow-700: rgb(153, 70.2, 14.4);--quarto-scss-export-yellow-800: rgb(102, 46.8, 9.6);--quarto-scss-export-yellow-900: rgb(51, 23.4, 4.8);--quarto-scss-export-green-100: rgb(216.6, 240.4, 208.8);--quarto-scss-export-green-200: rgb(178.2, 225.8, 162.6);--quarto-scss-export-green-300: rgb(139.8, 211.2, 116.4);--quarto-scss-export-green-400: rgb(101.4, 196.6, 70.2);--quarto-scss-export-green-500: #3fb618;--quarto-scss-export-green-600: rgb(50.4, 145.6, 19.2);--quarto-scss-export-green-700: rgb(37.8, 109.2, 14.4);--quarto-scss-export-green-800: rgb(25.2, 72.8, 9.6);--quarto-scss-export-green-900: rgb(12.6, 36.4, 4.8);--quarto-scss-export-teal-100: rgb(210.4, 244.2, 234.2);--quarto-scss-export-teal-200: rgb(165.8, 233.4, 213.4);--quarto-scss-export-teal-300: rgb(121.2, 222.6, 192.6);--quarto-scss-export-teal-400: rgb(76.6, 211.8, 171.8);--quarto-scss-export-teal-500: #20c997;--quarto-scss-export-teal-600: rgb(25.6, 160.8, 120.8);--quarto-scss-export-teal-700: rgb(19.2, 120.6, 90.6);--quarto-scss-export-teal-800: rgb(12.8, 80.4, 60.4);--quarto-scss-export-teal-900: rgb(6.4, 40.2, 30.2);--quarto-scss-export-cyan-100: rgb(234.6, 220.8, 241.4);--quarto-scss-export-cyan-200: rgb(214.2, 186.6, 227.8);--quarto-scss-export-cyan-300: rgb(193.8, 152.4, 214.2);--quarto-scss-export-cyan-400: rgb(173.4, 118.2, 200.6);--quarto-scss-export-cyan-500: #9954bb;--quarto-scss-export-cyan-600: rgb(122.4, 67.2, 149.6);--quarto-scss-export-cyan-700: rgb(91.8, 50.4, 112.2);--quarto-scss-export-cyan-800: rgb(61.2, 33.6, 74.8);--quarto-scss-export-cyan-900: rgb(30.6, 16.8, 37.4);--quarto-scss-export-default: #343a40;--quarto-scss-export-primary-text-emphasis: rgb(15.6, 51.2, 90.8);--quarto-scss-export-secondary-text-emphasis: rgb(20.8, 23.2, 25.6);--quarto-scss-export-success-text-emphasis: rgb(25.2, 72.8, 9.6);--quarto-scss-export-info-text-emphasis: rgb(61.2, 33.6, 74.8);--quarto-scss-export-warning-text-emphasis: rgb(102, 46.8, 9.6);--quarto-scss-export-danger-text-emphasis: rgb(102, 0, 22.8);--quarto-scss-export-light-text-emphasis: #495057;--quarto-scss-export-dark-text-emphasis: #495057;--quarto-scss-export-primary-bg-subtle: rgb(211.8, 229.6, 249.4);--quarto-scss-export-secondary-bg-subtle: rgb(214.4, 215.6, 216.8);--quarto-scss-export-success-bg-subtle: rgb(216.6, 240.4, 208.8);--quarto-scss-export-info-bg-subtle: rgb(234.6, 220.8, 241.4);--quarto-scss-export-warning-bg-subtle: rgb(255, 227.4, 208.8);--quarto-scss-export-danger-bg-subtle: rgb(255, 204, 215.4);--quarto-scss-export-light-bg-subtle: rgb(251.5, 252, 252.5);--quarto-scss-export-dark-bg-subtle: #ced4da;--quarto-scss-export-primary-border-subtle: rgb(168.6, 204.2, 243.8);--quarto-scss-export-secondary-border-subtle: rgb(173.8, 176.2, 178.6);--quarto-scss-export-success-border-subtle: rgb(178.2, 225.8, 162.6);--quarto-scss-export-info-border-subtle: rgb(214.2, 186.6, 227.8);--quarto-scss-export-warning-border-subtle: rgb(255, 199.8, 162.6);--quarto-scss-export-danger-border-subtle: rgb(255, 153, 175.8);--quarto-scss-export-light-border-subtle: #e9ecef;--quarto-scss-export-dark-border-subtle: #adb5bd;--quarto-scss-export-body-text-align: ;--quarto-scss-export-body-bg: #fff;--quarto-scss-export-body-secondary-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-body-secondary-bg: #e9ecef;--quarto-scss-export-body-tertiary-color: rgba(52, 58, 64, 0.5);--quarto-scss-export-body-tertiary-bg: #f8f9fa;--quarto-scss-export-body-emphasis-color: #000;--quarto-scss-export-link-hover-color: rgb(31.2, 77.6, 181.6);--quarto-scss-export-link-hover-decoration: ;--quarto-scss-export-border-color-translucent: rgba(0, 0, 0, 0.175);--quarto-scss-export-component-active-bg: #2780e3;--quarto-scss-export-component-active-color: #fff;--quarto-scss-export-focus-ring-color: rgba(39, 128, 227, 0.25);--quarto-scss-export-headings-font-family: ;--quarto-scss-export-headings-font-style: ;--quarto-scss-export-display-font-family: ;--quarto-scss-export-display-font-style: ;--quarto-scss-export-blockquote-footer-color: #6c757d;--quarto-scss-export-blockquote-border-color: #e9ecef;--quarto-scss-export-hr-bg-color: ;--quarto-scss-export-hr-height: ;--quarto-scss-export-hr-border-color: ;--quarto-scss-export-legend-font-weight: ;--quarto-scss-export-mark-bg: rgb(255, 227.4, 208.8);--quarto-scss-export-table-color: #343a40;--quarto-scss-export-table-bg: #fff;--quarto-scss-export-table-accent-bg: transparent;--quarto-scss-export-table-th-font-weight: ;--quarto-scss-export-table-striped-color: #343a40;--quarto-scss-export-table-striped-bg: rgba(0, 0, 0, 0.05);--quarto-scss-export-table-active-color: #343a40;--quarto-scss-export-table-active-bg: rgba(0, 0, 0, 0.1);--quarto-scss-export-table-hover-color: #343a40;--quarto-scss-export-table-hover-bg: rgba(0, 0, 0, 0.075);--quarto-scss-export-table-caption-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-input-btn-font-family: ;--quarto-scss-export-input-btn-focus-color: rgba(39, 128, 227, 0.25);--quarto-scss-export-btn-color: #343a40;--quarto-scss-export-btn-font-family: ;--quarto-scss-export-btn-white-space: ;--quarto-scss-export-btn-link-color: #2761e3;--quarto-scss-export-btn-link-hover-color: rgb(31.2, 77.6, 181.6);--quarto-scss-export-btn-link-disabled-color: #6c757d;--quarto-scss-export-form-text-font-style: ;--quarto-scss-export-form-text-font-weight: ;--quarto-scss-export-form-text-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-form-label-font-size: ;--quarto-scss-export-form-label-font-style: ;--quarto-scss-export-form-label-font-weight: ;--quarto-scss-export-form-label-color: ;--quarto-scss-export-input-font-family: ;--quarto-scss-export-input-disabled-color: ;--quarto-scss-export-input-disabled-bg: #e9ecef;--quarto-scss-export-input-disabled-border-color: ;--quarto-scss-export-input-color: #343a40;--quarto-scss-export-input-focus-bg: #fff;--quarto-scss-export-input-focus-border-color: rgb(147, 191.5, 241);--quarto-scss-export-input-focus-color: #343a40;--quarto-scss-export-input-placeholder-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-input-plaintext-color: #343a40;--quarto-scss-export-form-check-label-color: ;--quarto-scss-export-form-check-transition: ;--quarto-scss-export-form-check-input-bg: #fff;--quarto-scss-export-form-check-input-focus-border: rgb(147, 191.5, 241);--quarto-scss-export-form-check-input-checked-color: #fff;--quarto-scss-export-form-check-input-checked-bg-color: #2780e3;--quarto-scss-export-form-check-input-checked-border-color: #2780e3;--quarto-scss-export-form-check-input-indeterminate-color: #fff;--quarto-scss-export-form-check-input-indeterminate-bg-color: #2780e3;--quarto-scss-export-form-check-input-indeterminate-border-color: #2780e3;--quarto-scss-export-form-switch-color: rgba(0, 0, 0, 0.25);--quarto-scss-export-form-switch-focus-color: rgb(147, 191.5, 241);--quarto-scss-export-form-switch-checked-color: #fff;--quarto-scss-export-input-group-addon-color: #343a40;--quarto-scss-export-input-group-addon-bg: #f8f9fa;--quarto-scss-export-input-group-addon-border-color: #dee2e6;--quarto-scss-export-form-select-font-family: ;--quarto-scss-export-form-select-color: #343a40;--quarto-scss-export-form-select-bg: #fff;--quarto-scss-export-form-select-disabled-color: ;--quarto-scss-export-form-select-disabled-bg: #e9ecef;--quarto-scss-export-form-select-disabled-border-color: ;--quarto-scss-export-form-select-indicator-color: #343a40;--quarto-scss-export-form-select-border-color: #dee2e6;--quarto-scss-export-form-select-focus-border-color: rgb(147, 191.5, 241);--quarto-scss-export-form-range-track-bg: #f8f9fa;--quarto-scss-export-form-range-thumb-bg: #2780e3;--quarto-scss-export-form-range-thumb-active-bg: rgb(190.2, 216.9, 246.6);--quarto-scss-export-form-range-thumb-disabled-bg: rgba(52, 58, 64, 0.75);--quarto-scss-export-form-file-button-color: #343a40;--quarto-scss-export-form-file-button-bg: #f8f9fa;--quarto-scss-export-form-file-button-hover-bg: #e9ecef;--quarto-scss-export-form-floating-label-disabled-color: #6c757d;--quarto-scss-export-form-feedback-font-style: ;--quarto-scss-export-form-feedback-valid-color: #3fb618;--quarto-scss-export-form-feedback-invalid-color: #ff0039;--quarto-scss-export-form-feedback-icon-valid-color: #3fb618;--quarto-scss-export-form-feedback-icon-invalid-color: #ff0039;--quarto-scss-export-form-valid-color: #3fb618;--quarto-scss-export-form-valid-border-color: #3fb618;--quarto-scss-export-form-invalid-color: #ff0039;--quarto-scss-export-form-invalid-border-color: #ff0039;--quarto-scss-export-nav-link-font-size: ;--quarto-scss-export-nav-link-font-weight: ;--quarto-scss-export-nav-link-color: #2761e3;--quarto-scss-export-nav-link-hover-color: rgb(31.2, 77.6, 181.6);--quarto-scss-export-nav-link-disabled-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-nav-tabs-border-color: #dee2e6;--quarto-scss-export-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;--quarto-scss-export-nav-tabs-link-active-color: #000;--quarto-scss-export-nav-tabs-link-active-bg: #fff;--quarto-scss-export-nav-pills-link-active-bg: #2780e3;--quarto-scss-export-nav-pills-link-active-color: #fff;--quarto-scss-export-nav-underline-link-active-color: #000;--quarto-scss-export-navbar-padding-x: ;--quarto-scss-export-navbar-light-contrast: #000;--quarto-scss-export-navbar-dark-contrast: #000;--quarto-scss-export-navbar-light-icon-color: rgba(0, 0, 0, 0.75);--quarto-scss-export-navbar-dark-icon-color: rgba(0, 0, 0, 0.75);--quarto-scss-export-dropdown-color: #343a40;--quarto-scss-export-dropdown-bg: #fff;--quarto-scss-export-dropdown-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-dropdown-divider-bg: rgba(0, 0, 0, 0.175);--quarto-scss-export-dropdown-link-color: #343a40;--quarto-scss-export-dropdown-link-hover-color: #343a40;--quarto-scss-export-dropdown-link-hover-bg: #f8f9fa;--quarto-scss-export-dropdown-link-active-bg: #2780e3;--quarto-scss-export-dropdown-link-active-color: #fff;--quarto-scss-export-dropdown-link-disabled-color: rgba(52, 58, 64, 0.5);--quarto-scss-export-dropdown-header-color: #6c757d;--quarto-scss-export-dropdown-dark-color: #dee2e6;--quarto-scss-export-dropdown-dark-bg: #343a40;--quarto-scss-export-dropdown-dark-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-dropdown-dark-divider-bg: rgba(0, 0, 0, 0.175);--quarto-scss-export-dropdown-dark-box-shadow: ;--quarto-scss-export-dropdown-dark-link-color: #dee2e6;--quarto-scss-export-dropdown-dark-link-hover-color: #fff;--quarto-scss-export-dropdown-dark-link-hover-bg: rgba(255, 255, 255, 0.15);--quarto-scss-export-dropdown-dark-link-active-color: #fff;--quarto-scss-export-dropdown-dark-link-active-bg: #2780e3;--quarto-scss-export-dropdown-dark-link-disabled-color: #adb5bd;--quarto-scss-export-dropdown-dark-header-color: #adb5bd;--quarto-scss-export-pagination-color: #2761e3;--quarto-scss-export-pagination-bg: #fff;--quarto-scss-export-pagination-border-color: #dee2e6;--quarto-scss-export-pagination-focus-color: rgb(31.2, 77.6, 181.6);--quarto-scss-export-pagination-focus-bg: #e9ecef;--quarto-scss-export-pagination-hover-color: rgb(31.2, 77.6, 181.6);--quarto-scss-export-pagination-hover-bg: #f8f9fa;--quarto-scss-export-pagination-hover-border-color: #dee2e6;--quarto-scss-export-pagination-active-color: #fff;--quarto-scss-export-pagination-active-bg: #2780e3;--quarto-scss-export-pagination-active-border-color: #2780e3;--quarto-scss-export-pagination-disabled-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-pagination-disabled-bg: #e9ecef;--quarto-scss-export-pagination-disabled-border-color: #dee2e6;--quarto-scss-export-card-title-color: ;--quarto-scss-export-card-subtitle-color: ;--quarto-scss-export-card-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-card-box-shadow: ;--quarto-scss-export-card-cap-color: ;--quarto-scss-export-card-height: ;--quarto-scss-export-card-color: ;--quarto-scss-export-card-bg: #fff;--quarto-scss-export-accordion-color: #343a40;--quarto-scss-export-accordion-bg: #fff;--quarto-scss-export-accordion-border-color: #dee2e6;--quarto-scss-export-accordion-button-color: #343a40;--quarto-scss-export-accordion-button-bg: #fff;--quarto-scss-export-accordion-button-active-bg: rgb(211.8, 229.6, 249.4);--quarto-scss-export-accordion-button-active-color: rgb(15.6, 51.2, 90.8);--quarto-scss-export-accordion-button-focus-border-color: rgb(147, 191.5, 241);--quarto-scss-export-accordion-icon-color: #343a40;--quarto-scss-export-accordion-icon-active-color: rgb(15.6, 51.2, 90.8);--quarto-scss-export-tooltip-color: #fff;--quarto-scss-export-tooltip-bg: #000;--quarto-scss-export-tooltip-margin: ;--quarto-scss-export-tooltip-arrow-color: ;--quarto-scss-export-form-feedback-tooltip-line-height: ;--quarto-scss-export-popover-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-popover-header-bg: #e9ecef;--quarto-scss-export-popover-body-color: #343a40;--quarto-scss-export-popover-arrow-color: #fff;--quarto-scss-export-popover-arrow-outer-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-toast-color: ;--quarto-scss-export-toast-background-color: rgba(255, 255, 255, 0.85);--quarto-scss-export-toast-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-toast-header-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-toast-header-background-color: rgba(255, 255, 255, 0.85);--quarto-scss-export-toast-header-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-badge-color: #fff;--quarto-scss-export-modal-content-color: ;--quarto-scss-export-modal-content-bg: #fff;--quarto-scss-export-modal-content-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-modal-backdrop-bg: #000;--quarto-scss-export-modal-header-border-color: #dee2e6;--quarto-scss-export-modal-footer-bg: ;--quarto-scss-export-modal-footer-border-color: #dee2e6;--quarto-scss-export-progress-bg: #e9ecef;--quarto-scss-export-progress-bar-color: #fff;--quarto-scss-export-progress-bar-bg: #2780e3;--quarto-scss-export-list-group-color: #343a40;--quarto-scss-export-list-group-bg: #fff;--quarto-scss-export-list-group-border-color: #dee2e6;--quarto-scss-export-list-group-hover-bg: #f8f9fa;--quarto-scss-export-list-group-active-bg: #2780e3;--quarto-scss-export-list-group-active-color: #fff;--quarto-scss-export-list-group-active-border-color: #2780e3;--quarto-scss-export-list-group-disabled-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-list-group-disabled-bg: #fff;--quarto-scss-export-list-group-action-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-list-group-action-hover-color: #000;--quarto-scss-export-list-group-action-active-color: #343a40;--quarto-scss-export-list-group-action-active-bg: #e9ecef;--quarto-scss-export-thumbnail-bg: #fff;--quarto-scss-export-thumbnail-border-color: #dee2e6;--quarto-scss-export-figure-caption-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-breadcrumb-font-size: ;--quarto-scss-export-breadcrumb-bg: ;--quarto-scss-export-breadcrumb-divider-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-breadcrumb-active-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-breadcrumb-border-radius: ;--quarto-scss-export-carousel-control-color: #fff;--quarto-scss-export-carousel-indicator-active-bg: #fff;--quarto-scss-export-carousel-caption-color: #fff;--quarto-scss-export-carousel-dark-indicator-active-bg: #000;--quarto-scss-export-carousel-dark-caption-color: #000;--quarto-scss-export-btn-close-color: #000;--quarto-scss-export-offcanvas-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-offcanvas-bg-color: #fff;--quarto-scss-export-offcanvas-color: #343a40;--quarto-scss-export-offcanvas-backdrop-bg: #000;--quarto-scss-export-code-color-dark: white;--quarto-scss-export-kbd-color: #fff;--quarto-scss-export-kbd-bg: #343a40;--quarto-scss-export-nested-kbd-font-weight: ;--quarto-scss-export-pre-bg: #f8f9fa;--quarto-scss-export-pre-color: #000;--quarto-scss-export-bslib-page-sidebar-title-bg: #f8f9fa;--quarto-scss-export-bslib-page-sidebar-title-color: #000;--quarto-scss-export-bslib-sidebar-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.05);--quarto-scss-export-bslib-sidebar-toggle-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.1);--quarto-scss-export-sidebar-color: rgb(89.25, 89.25, 89.25);--quarto-scss-export-sidebar-hover-color: rgba(32.76, 81.48, 190.68, 0.8);--quarto-scss-export-sidebar-disabled-color: rgba(89.25, 89.25, 89.25, 0.75);--quarto-scss-export-valuebox-bg-primary: #5397e9;--quarto-scss-export-valuebox-bg-secondary: #343a40;--quarto-scss-export-valuebox-bg-success: #3aa716;--quarto-scss-export-valuebox-bg-info: rgba(153, 84, 187, 0.7019607843);--quarto-scss-export-valuebox-bg-warning: #fa6400;--quarto-scss-export-valuebox-bg-danger: rgba(255, 0, 57, 0.7019607843);--quarto-scss-export-valuebox-bg-light: #f8f9fa;--quarto-scss-export-valuebox-bg-dark: #343a40;--quarto-scss-export-mermaid-bg-color: #fff;--quarto-scss-export-mermaid-edge-color: #343a40;--quarto-scss-export-mermaid-node-fg-color: #343a40;--quarto-scss-export-mermaid-fg-color: #343a40;--quarto-scss-export-mermaid-fg-color--lighter: rgb(74.8620689655, 83.5, 92.1379310345);--quarto-scss-export-mermaid-fg-color--lightest: rgb(97.724137931, 109, 120.275862069);--quarto-scss-export-mermaid-label-bg-color: #fff;--quarto-scss-export-mermaid-label-fg-color: #2780e3;--quarto-scss-export-mermaid-node-bg-color: rgba(39, 128, 227, 0.1);--quarto-scss-export-code-block-border-left-color: #dee2e6;--quarto-scss-export-callout-color-note: #2780e3;--quarto-scss-export-callout-color-tip: #3fb618;--quarto-scss-export-callout-color-important: #ff0039;--quarto-scss-export-callout-color-caution: #f0ad4e;--quarto-scss-export-callout-color-warning: #ff7518} \ No newline at end of file diff --git a/docs/docs/site_libs/bootstrap/bootstrap-icons.css b/docs/docs/site_libs/bootstrap/bootstrap-icons.css new file mode 100644 index 0000000..82b40f5 --- /dev/null +++ b/docs/docs/site_libs/bootstrap/bootstrap-icons.css @@ -0,0 +1,2106 @@ +/*! + * Bootstrap Icons v1.13.1 (https://icons.getbootstrap.com/) + * Copyright 2019-2024 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/icons/blob/main/LICENSE) + */ + +@font-face { + font-display: block; + font-family: "bootstrap-icons"; + src: +url("./bootstrap-icons.woff?e34853135f9e39acf64315236852cd5a") format("woff"); +} + +.bi::before, +[class^="bi-"]::before, +[class*=" bi-"]::before { + display: inline-block; + font-family: bootstrap-icons !important; + font-style: normal; + font-weight: normal !important; + font-variant: normal; + text-transform: none; + line-height: 1; + vertical-align: -.125em; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.bi-123::before { content: "\f67f"; } +.bi-alarm-fill::before { content: "\f101"; } +.bi-alarm::before { content: "\f102"; } +.bi-align-bottom::before { content: "\f103"; } +.bi-align-center::before { content: "\f104"; } +.bi-align-end::before { content: "\f105"; } +.bi-align-middle::before { content: "\f106"; } +.bi-align-start::before { content: "\f107"; } +.bi-align-top::before { content: "\f108"; } +.bi-alt::before { content: "\f109"; } +.bi-app-indicator::before { content: "\f10a"; } +.bi-app::before { content: "\f10b"; } +.bi-archive-fill::before { content: "\f10c"; } +.bi-archive::before { content: "\f10d"; } +.bi-arrow-90deg-down::before { content: "\f10e"; } +.bi-arrow-90deg-left::before { content: "\f10f"; } +.bi-arrow-90deg-right::before { content: "\f110"; } +.bi-arrow-90deg-up::before { content: "\f111"; } +.bi-arrow-bar-down::before { content: "\f112"; } +.bi-arrow-bar-left::before { content: "\f113"; } +.bi-arrow-bar-right::before { content: "\f114"; } +.bi-arrow-bar-up::before { content: "\f115"; } +.bi-arrow-clockwise::before { content: "\f116"; } +.bi-arrow-counterclockwise::before { content: "\f117"; } +.bi-arrow-down-circle-fill::before { content: "\f118"; } +.bi-arrow-down-circle::before { content: "\f119"; } +.bi-arrow-down-left-circle-fill::before { content: "\f11a"; } +.bi-arrow-down-left-circle::before { content: "\f11b"; } +.bi-arrow-down-left-square-fill::before { content: "\f11c"; } +.bi-arrow-down-left-square::before { content: "\f11d"; } +.bi-arrow-down-left::before { content: "\f11e"; } +.bi-arrow-down-right-circle-fill::before { content: "\f11f"; } +.bi-arrow-down-right-circle::before { content: "\f120"; } +.bi-arrow-down-right-square-fill::before { content: "\f121"; } +.bi-arrow-down-right-square::before { content: "\f122"; } +.bi-arrow-down-right::before { content: "\f123"; } +.bi-arrow-down-short::before { content: "\f124"; } +.bi-arrow-down-square-fill::before { content: "\f125"; } +.bi-arrow-down-square::before { content: "\f126"; } +.bi-arrow-down-up::before { content: "\f127"; } +.bi-arrow-down::before { content: "\f128"; } +.bi-arrow-left-circle-fill::before { content: "\f129"; } +.bi-arrow-left-circle::before { content: "\f12a"; } +.bi-arrow-left-right::before { content: "\f12b"; } +.bi-arrow-left-short::before { content: "\f12c"; } +.bi-arrow-left-square-fill::before { content: "\f12d"; } +.bi-arrow-left-square::before { content: "\f12e"; } +.bi-arrow-left::before { content: "\f12f"; } +.bi-arrow-repeat::before { content: "\f130"; } +.bi-arrow-return-left::before { content: "\f131"; } +.bi-arrow-return-right::before { content: "\f132"; } +.bi-arrow-right-circle-fill::before { content: "\f133"; } +.bi-arrow-right-circle::before { content: "\f134"; } +.bi-arrow-right-short::before { content: "\f135"; } +.bi-arrow-right-square-fill::before { content: "\f136"; } +.bi-arrow-right-square::before { content: "\f137"; } +.bi-arrow-right::before { content: "\f138"; } +.bi-arrow-up-circle-fill::before { content: "\f139"; } +.bi-arrow-up-circle::before { content: "\f13a"; } +.bi-arrow-up-left-circle-fill::before { content: "\f13b"; } +.bi-arrow-up-left-circle::before { content: "\f13c"; } +.bi-arrow-up-left-square-fill::before { content: "\f13d"; } +.bi-arrow-up-left-square::before { content: "\f13e"; } +.bi-arrow-up-left::before { content: "\f13f"; } +.bi-arrow-up-right-circle-fill::before { content: "\f140"; } +.bi-arrow-up-right-circle::before { content: "\f141"; } +.bi-arrow-up-right-square-fill::before { content: "\f142"; } +.bi-arrow-up-right-square::before { content: "\f143"; } +.bi-arrow-up-right::before { content: "\f144"; } +.bi-arrow-up-short::before { content: "\f145"; } +.bi-arrow-up-square-fill::before { content: "\f146"; } +.bi-arrow-up-square::before { content: "\f147"; } +.bi-arrow-up::before { content: "\f148"; } +.bi-arrows-angle-contract::before { content: "\f149"; } +.bi-arrows-angle-expand::before { content: "\f14a"; } +.bi-arrows-collapse::before { content: "\f14b"; } +.bi-arrows-expand::before { content: "\f14c"; } +.bi-arrows-fullscreen::before { content: "\f14d"; } +.bi-arrows-move::before { content: "\f14e"; } +.bi-aspect-ratio-fill::before { content: "\f14f"; } +.bi-aspect-ratio::before { content: "\f150"; } +.bi-asterisk::before { content: "\f151"; } +.bi-at::before { content: "\f152"; } +.bi-award-fill::before { content: "\f153"; } +.bi-award::before { content: "\f154"; } +.bi-back::before { content: "\f155"; } +.bi-backspace-fill::before { content: "\f156"; } +.bi-backspace-reverse-fill::before { content: "\f157"; } +.bi-backspace-reverse::before { content: "\f158"; } +.bi-backspace::before { content: "\f159"; } +.bi-badge-3d-fill::before { content: "\f15a"; } +.bi-badge-3d::before { content: "\f15b"; } +.bi-badge-4k-fill::before { content: "\f15c"; } +.bi-badge-4k::before { content: "\f15d"; } +.bi-badge-8k-fill::before { content: "\f15e"; } +.bi-badge-8k::before { content: "\f15f"; } +.bi-badge-ad-fill::before { content: "\f160"; } +.bi-badge-ad::before { content: "\f161"; } +.bi-badge-ar-fill::before { content: "\f162"; } +.bi-badge-ar::before { content: "\f163"; } +.bi-badge-cc-fill::before { content: "\f164"; } +.bi-badge-cc::before { content: "\f165"; } +.bi-badge-hd-fill::before { content: "\f166"; } +.bi-badge-hd::before { content: "\f167"; } +.bi-badge-tm-fill::before { content: "\f168"; } +.bi-badge-tm::before { content: "\f169"; } +.bi-badge-vo-fill::before { content: "\f16a"; } +.bi-badge-vo::before { content: "\f16b"; } +.bi-badge-vr-fill::before { content: "\f16c"; } +.bi-badge-vr::before { content: "\f16d"; } +.bi-badge-wc-fill::before { content: "\f16e"; } +.bi-badge-wc::before { content: "\f16f"; } +.bi-bag-check-fill::before { content: "\f170"; } +.bi-bag-check::before { content: "\f171"; } +.bi-bag-dash-fill::before { content: "\f172"; } +.bi-bag-dash::before { content: "\f173"; } +.bi-bag-fill::before { content: "\f174"; } +.bi-bag-plus-fill::before { content: "\f175"; } +.bi-bag-plus::before { content: "\f176"; } +.bi-bag-x-fill::before { content: "\f177"; } +.bi-bag-x::before { content: "\f178"; } +.bi-bag::before { content: "\f179"; } +.bi-bar-chart-fill::before { content: "\f17a"; } +.bi-bar-chart-line-fill::before { content: "\f17b"; } +.bi-bar-chart-line::before { content: "\f17c"; } +.bi-bar-chart-steps::before { content: "\f17d"; } +.bi-bar-chart::before { content: "\f17e"; } +.bi-basket-fill::before { content: "\f17f"; } +.bi-basket::before { content: "\f180"; } +.bi-basket2-fill::before { content: "\f181"; } +.bi-basket2::before { content: "\f182"; } +.bi-basket3-fill::before { content: "\f183"; } +.bi-basket3::before { content: "\f184"; } +.bi-battery-charging::before { content: "\f185"; } +.bi-battery-full::before { content: "\f186"; } +.bi-battery-half::before { content: "\f187"; } +.bi-battery::before { content: "\f188"; } +.bi-bell-fill::before { content: "\f189"; } +.bi-bell::before { content: "\f18a"; } +.bi-bezier::before { content: "\f18b"; } +.bi-bezier2::before { content: "\f18c"; } +.bi-bicycle::before { content: "\f18d"; } +.bi-binoculars-fill::before { content: "\f18e"; } +.bi-binoculars::before { content: "\f18f"; } +.bi-blockquote-left::before { content: "\f190"; } +.bi-blockquote-right::before { content: "\f191"; } +.bi-book-fill::before { content: "\f192"; } +.bi-book-half::before { content: "\f193"; } +.bi-book::before { content: "\f194"; } +.bi-bookmark-check-fill::before { content: "\f195"; } +.bi-bookmark-check::before { content: "\f196"; } +.bi-bookmark-dash-fill::before { content: "\f197"; } +.bi-bookmark-dash::before { content: "\f198"; } +.bi-bookmark-fill::before { content: "\f199"; } +.bi-bookmark-heart-fill::before { content: "\f19a"; } +.bi-bookmark-heart::before { content: "\f19b"; } +.bi-bookmark-plus-fill::before { content: "\f19c"; } +.bi-bookmark-plus::before { content: "\f19d"; } +.bi-bookmark-star-fill::before { content: "\f19e"; } +.bi-bookmark-star::before { content: "\f19f"; } +.bi-bookmark-x-fill::before { content: "\f1a0"; } +.bi-bookmark-x::before { content: "\f1a1"; } +.bi-bookmark::before { content: "\f1a2"; } +.bi-bookmarks-fill::before { content: "\f1a3"; } +.bi-bookmarks::before { content: "\f1a4"; } +.bi-bookshelf::before { content: "\f1a5"; } +.bi-bootstrap-fill::before { content: "\f1a6"; } +.bi-bootstrap-reboot::before { content: "\f1a7"; } +.bi-bootstrap::before { content: "\f1a8"; } +.bi-border-all::before { content: "\f1a9"; } +.bi-border-bottom::before { content: "\f1aa"; } +.bi-border-center::before { content: "\f1ab"; } +.bi-border-inner::before { content: "\f1ac"; } +.bi-border-left::before { content: "\f1ad"; } +.bi-border-middle::before { content: "\f1ae"; } +.bi-border-outer::before { content: "\f1af"; } +.bi-border-right::before { content: "\f1b0"; } +.bi-border-style::before { content: "\f1b1"; } +.bi-border-top::before { content: "\f1b2"; } +.bi-border-width::before { content: "\f1b3"; } +.bi-border::before { content: "\f1b4"; } +.bi-bounding-box-circles::before { content: "\f1b5"; } +.bi-bounding-box::before { content: "\f1b6"; } +.bi-box-arrow-down-left::before { content: "\f1b7"; } +.bi-box-arrow-down-right::before { content: "\f1b8"; } +.bi-box-arrow-down::before { content: "\f1b9"; } +.bi-box-arrow-in-down-left::before { content: "\f1ba"; } +.bi-box-arrow-in-down-right::before { content: "\f1bb"; } +.bi-box-arrow-in-down::before { content: "\f1bc"; } +.bi-box-arrow-in-left::before { content: "\f1bd"; } +.bi-box-arrow-in-right::before { content: "\f1be"; } +.bi-box-arrow-in-up-left::before { content: "\f1bf"; } +.bi-box-arrow-in-up-right::before { content: "\f1c0"; } +.bi-box-arrow-in-up::before { content: "\f1c1"; } +.bi-box-arrow-left::before { content: "\f1c2"; } +.bi-box-arrow-right::before { content: "\f1c3"; } +.bi-box-arrow-up-left::before { content: "\f1c4"; } +.bi-box-arrow-up-right::before { content: "\f1c5"; } +.bi-box-arrow-up::before { content: "\f1c6"; } +.bi-box-seam::before { content: "\f1c7"; } +.bi-box::before { content: "\f1c8"; } +.bi-braces::before { content: "\f1c9"; } +.bi-bricks::before { content: "\f1ca"; } +.bi-briefcase-fill::before { content: "\f1cb"; } +.bi-briefcase::before { content: "\f1cc"; } +.bi-brightness-alt-high-fill::before { content: "\f1cd"; } +.bi-brightness-alt-high::before { content: "\f1ce"; } +.bi-brightness-alt-low-fill::before { content: "\f1cf"; } +.bi-brightness-alt-low::before { content: "\f1d0"; } +.bi-brightness-high-fill::before { content: "\f1d1"; } +.bi-brightness-high::before { content: "\f1d2"; } +.bi-brightness-low-fill::before { content: "\f1d3"; } +.bi-brightness-low::before { content: "\f1d4"; } +.bi-broadcast-pin::before { content: "\f1d5"; } +.bi-broadcast::before { content: "\f1d6"; } +.bi-brush-fill::before { content: "\f1d7"; } +.bi-brush::before { content: "\f1d8"; } +.bi-bucket-fill::before { content: "\f1d9"; } +.bi-bucket::before { content: "\f1da"; } +.bi-bug-fill::before { content: "\f1db"; } +.bi-bug::before { content: "\f1dc"; } +.bi-building::before { content: "\f1dd"; } +.bi-bullseye::before { content: "\f1de"; } +.bi-calculator-fill::before { content: "\f1df"; } +.bi-calculator::before { content: "\f1e0"; } +.bi-calendar-check-fill::before { content: "\f1e1"; } +.bi-calendar-check::before { content: "\f1e2"; } +.bi-calendar-date-fill::before { content: "\f1e3"; } +.bi-calendar-date::before { content: "\f1e4"; } +.bi-calendar-day-fill::before { content: "\f1e5"; } +.bi-calendar-day::before { content: "\f1e6"; } +.bi-calendar-event-fill::before { content: "\f1e7"; } +.bi-calendar-event::before { content: "\f1e8"; } +.bi-calendar-fill::before { content: "\f1e9"; } +.bi-calendar-minus-fill::before { content: "\f1ea"; } +.bi-calendar-minus::before { content: "\f1eb"; } +.bi-calendar-month-fill::before { content: "\f1ec"; } +.bi-calendar-month::before { content: "\f1ed"; } +.bi-calendar-plus-fill::before { content: "\f1ee"; } +.bi-calendar-plus::before { content: "\f1ef"; } +.bi-calendar-range-fill::before { content: "\f1f0"; } +.bi-calendar-range::before { content: "\f1f1"; } +.bi-calendar-week-fill::before { content: "\f1f2"; } +.bi-calendar-week::before { content: "\f1f3"; } +.bi-calendar-x-fill::before { content: "\f1f4"; } +.bi-calendar-x::before { content: "\f1f5"; } +.bi-calendar::before { content: "\f1f6"; } +.bi-calendar2-check-fill::before { content: "\f1f7"; } +.bi-calendar2-check::before { content: "\f1f8"; } +.bi-calendar2-date-fill::before { content: "\f1f9"; } +.bi-calendar2-date::before { content: "\f1fa"; } +.bi-calendar2-day-fill::before { content: "\f1fb"; } +.bi-calendar2-day::before { content: "\f1fc"; } +.bi-calendar2-event-fill::before { content: "\f1fd"; } +.bi-calendar2-event::before { content: "\f1fe"; } +.bi-calendar2-fill::before { content: "\f1ff"; } +.bi-calendar2-minus-fill::before { content: "\f200"; } +.bi-calendar2-minus::before { content: "\f201"; } +.bi-calendar2-month-fill::before { content: "\f202"; } +.bi-calendar2-month::before { content: "\f203"; } +.bi-calendar2-plus-fill::before { content: "\f204"; } +.bi-calendar2-plus::before { content: "\f205"; } +.bi-calendar2-range-fill::before { content: "\f206"; } +.bi-calendar2-range::before { content: "\f207"; } +.bi-calendar2-week-fill::before { content: "\f208"; } +.bi-calendar2-week::before { content: "\f209"; } +.bi-calendar2-x-fill::before { content: "\f20a"; } +.bi-calendar2-x::before { content: "\f20b"; } +.bi-calendar2::before { content: "\f20c"; } +.bi-calendar3-event-fill::before { content: "\f20d"; } +.bi-calendar3-event::before { content: "\f20e"; } +.bi-calendar3-fill::before { content: "\f20f"; } +.bi-calendar3-range-fill::before { content: "\f210"; } +.bi-calendar3-range::before { content: "\f211"; } +.bi-calendar3-week-fill::before { content: "\f212"; } +.bi-calendar3-week::before { content: "\f213"; } +.bi-calendar3::before { content: "\f214"; } +.bi-calendar4-event::before { content: "\f215"; } +.bi-calendar4-range::before { content: "\f216"; } +.bi-calendar4-week::before { content: "\f217"; } +.bi-calendar4::before { content: "\f218"; } +.bi-camera-fill::before { content: "\f219"; } +.bi-camera-reels-fill::before { content: "\f21a"; } +.bi-camera-reels::before { content: "\f21b"; } +.bi-camera-video-fill::before { content: "\f21c"; } +.bi-camera-video-off-fill::before { content: "\f21d"; } +.bi-camera-video-off::before { content: "\f21e"; } +.bi-camera-video::before { content: "\f21f"; } +.bi-camera::before { content: "\f220"; } +.bi-camera2::before { content: "\f221"; } +.bi-capslock-fill::before { content: "\f222"; } +.bi-capslock::before { content: "\f223"; } +.bi-card-checklist::before { content: "\f224"; } +.bi-card-heading::before { content: "\f225"; } +.bi-card-image::before { content: "\f226"; } +.bi-card-list::before { content: "\f227"; } +.bi-card-text::before { content: "\f228"; } +.bi-caret-down-fill::before { content: "\f229"; } +.bi-caret-down-square-fill::before { content: "\f22a"; } +.bi-caret-down-square::before { content: "\f22b"; } +.bi-caret-down::before { content: "\f22c"; } +.bi-caret-left-fill::before { content: "\f22d"; } +.bi-caret-left-square-fill::before { content: "\f22e"; } +.bi-caret-left-square::before { content: "\f22f"; } +.bi-caret-left::before { content: "\f230"; } +.bi-caret-right-fill::before { content: "\f231"; } +.bi-caret-right-square-fill::before { content: "\f232"; } +.bi-caret-right-square::before { content: "\f233"; } +.bi-caret-right::before { content: "\f234"; } +.bi-caret-up-fill::before { content: "\f235"; } +.bi-caret-up-square-fill::before { content: "\f236"; } +.bi-caret-up-square::before { content: "\f237"; } +.bi-caret-up::before { content: "\f238"; } +.bi-cart-check-fill::before { content: "\f239"; } +.bi-cart-check::before { content: "\f23a"; } +.bi-cart-dash-fill::before { content: "\f23b"; } +.bi-cart-dash::before { content: "\f23c"; } +.bi-cart-fill::before { content: "\f23d"; } +.bi-cart-plus-fill::before { content: "\f23e"; } +.bi-cart-plus::before { content: "\f23f"; } +.bi-cart-x-fill::before { content: "\f240"; } +.bi-cart-x::before { content: "\f241"; } +.bi-cart::before { content: "\f242"; } +.bi-cart2::before { content: "\f243"; } +.bi-cart3::before { content: "\f244"; } +.bi-cart4::before { content: "\f245"; } +.bi-cash-stack::before { content: "\f246"; } +.bi-cash::before { content: "\f247"; } +.bi-cast::before { content: "\f248"; } +.bi-chat-dots-fill::before { content: "\f249"; } +.bi-chat-dots::before { content: "\f24a"; } +.bi-chat-fill::before { content: "\f24b"; } +.bi-chat-left-dots-fill::before { content: "\f24c"; } +.bi-chat-left-dots::before { content: "\f24d"; } +.bi-chat-left-fill::before { content: "\f24e"; } +.bi-chat-left-quote-fill::before { content: "\f24f"; } +.bi-chat-left-quote::before { content: "\f250"; } +.bi-chat-left-text-fill::before { content: "\f251"; } +.bi-chat-left-text::before { content: "\f252"; } +.bi-chat-left::before { content: "\f253"; } +.bi-chat-quote-fill::before { content: "\f254"; } +.bi-chat-quote::before { content: "\f255"; } +.bi-chat-right-dots-fill::before { content: "\f256"; } +.bi-chat-right-dots::before { content: "\f257"; } +.bi-chat-right-fill::before { content: "\f258"; } +.bi-chat-right-quote-fill::before { content: "\f259"; } +.bi-chat-right-quote::before { content: "\f25a"; } +.bi-chat-right-text-fill::before { content: "\f25b"; } +.bi-chat-right-text::before { content: "\f25c"; } +.bi-chat-right::before { content: "\f25d"; } +.bi-chat-square-dots-fill::before { content: "\f25e"; } +.bi-chat-square-dots::before { content: "\f25f"; } +.bi-chat-square-fill::before { content: "\f260"; } +.bi-chat-square-quote-fill::before { content: "\f261"; } +.bi-chat-square-quote::before { content: "\f262"; } +.bi-chat-square-text-fill::before { content: "\f263"; } +.bi-chat-square-text::before { content: "\f264"; } +.bi-chat-square::before { content: "\f265"; } +.bi-chat-text-fill::before { content: "\f266"; } +.bi-chat-text::before { content: "\f267"; } +.bi-chat::before { content: "\f268"; } +.bi-check-all::before { content: "\f269"; } +.bi-check-circle-fill::before { content: "\f26a"; } +.bi-check-circle::before { content: "\f26b"; } +.bi-check-square-fill::before { content: "\f26c"; } +.bi-check-square::before { content: "\f26d"; } +.bi-check::before { content: "\f26e"; } +.bi-check2-all::before { content: "\f26f"; } +.bi-check2-circle::before { content: "\f270"; } +.bi-check2-square::before { content: "\f271"; } +.bi-check2::before { content: "\f272"; } +.bi-chevron-bar-contract::before { content: "\f273"; } +.bi-chevron-bar-down::before { content: "\f274"; } +.bi-chevron-bar-expand::before { content: "\f275"; } +.bi-chevron-bar-left::before { content: "\f276"; } +.bi-chevron-bar-right::before { content: "\f277"; } +.bi-chevron-bar-up::before { content: "\f278"; } +.bi-chevron-compact-down::before { content: "\f279"; } +.bi-chevron-compact-left::before { content: "\f27a"; } +.bi-chevron-compact-right::before { content: "\f27b"; } +.bi-chevron-compact-up::before { content: "\f27c"; } +.bi-chevron-contract::before { content: "\f27d"; } +.bi-chevron-double-down::before { content: "\f27e"; } +.bi-chevron-double-left::before { content: "\f27f"; } +.bi-chevron-double-right::before { content: "\f280"; } +.bi-chevron-double-up::before { content: "\f281"; } +.bi-chevron-down::before { content: "\f282"; } +.bi-chevron-expand::before { content: "\f283"; } +.bi-chevron-left::before { content: "\f284"; } +.bi-chevron-right::before { content: "\f285"; } +.bi-chevron-up::before { content: "\f286"; } +.bi-circle-fill::before { content: "\f287"; } +.bi-circle-half::before { content: "\f288"; } +.bi-circle-square::before { content: "\f289"; } +.bi-circle::before { content: "\f28a"; } +.bi-clipboard-check::before { content: "\f28b"; } +.bi-clipboard-data::before { content: "\f28c"; } +.bi-clipboard-minus::before { content: "\f28d"; } +.bi-clipboard-plus::before { content: "\f28e"; } +.bi-clipboard-x::before { content: "\f28f"; } +.bi-clipboard::before { content: "\f290"; } +.bi-clock-fill::before { content: "\f291"; } +.bi-clock-history::before { content: "\f292"; } +.bi-clock::before { content: "\f293"; } +.bi-cloud-arrow-down-fill::before { content: "\f294"; } +.bi-cloud-arrow-down::before { content: "\f295"; } +.bi-cloud-arrow-up-fill::before { content: "\f296"; } +.bi-cloud-arrow-up::before { content: "\f297"; } +.bi-cloud-check-fill::before { content: "\f298"; } +.bi-cloud-check::before { content: "\f299"; } +.bi-cloud-download-fill::before { content: "\f29a"; } +.bi-cloud-download::before { content: "\f29b"; } +.bi-cloud-drizzle-fill::before { content: "\f29c"; } +.bi-cloud-drizzle::before { content: "\f29d"; } +.bi-cloud-fill::before { content: "\f29e"; } +.bi-cloud-fog-fill::before { content: "\f29f"; } +.bi-cloud-fog::before { content: "\f2a0"; } +.bi-cloud-fog2-fill::before { content: "\f2a1"; } +.bi-cloud-fog2::before { content: "\f2a2"; } +.bi-cloud-hail-fill::before { content: "\f2a3"; } +.bi-cloud-hail::before { content: "\f2a4"; } +.bi-cloud-haze-fill::before { content: "\f2a6"; } +.bi-cloud-haze::before { content: "\f2a7"; } +.bi-cloud-haze2-fill::before { content: "\f2a8"; } +.bi-cloud-lightning-fill::before { content: "\f2a9"; } +.bi-cloud-lightning-rain-fill::before { content: "\f2aa"; } +.bi-cloud-lightning-rain::before { content: "\f2ab"; } +.bi-cloud-lightning::before { content: "\f2ac"; } +.bi-cloud-minus-fill::before { content: "\f2ad"; } +.bi-cloud-minus::before { content: "\f2ae"; } +.bi-cloud-moon-fill::before { content: "\f2af"; } +.bi-cloud-moon::before { content: "\f2b0"; } +.bi-cloud-plus-fill::before { content: "\f2b1"; } +.bi-cloud-plus::before { content: "\f2b2"; } +.bi-cloud-rain-fill::before { content: "\f2b3"; } +.bi-cloud-rain-heavy-fill::before { content: "\f2b4"; } +.bi-cloud-rain-heavy::before { content: "\f2b5"; } +.bi-cloud-rain::before { content: "\f2b6"; } +.bi-cloud-slash-fill::before { content: "\f2b7"; } +.bi-cloud-slash::before { content: "\f2b8"; } +.bi-cloud-sleet-fill::before { content: "\f2b9"; } +.bi-cloud-sleet::before { content: "\f2ba"; } +.bi-cloud-snow-fill::before { content: "\f2bb"; } +.bi-cloud-snow::before { content: "\f2bc"; } +.bi-cloud-sun-fill::before { content: "\f2bd"; } +.bi-cloud-sun::before { content: "\f2be"; } +.bi-cloud-upload-fill::before { content: "\f2bf"; } +.bi-cloud-upload::before { content: "\f2c0"; } +.bi-cloud::before { content: "\f2c1"; } +.bi-clouds-fill::before { content: "\f2c2"; } +.bi-clouds::before { content: "\f2c3"; } +.bi-cloudy-fill::before { content: "\f2c4"; } +.bi-cloudy::before { content: "\f2c5"; } +.bi-code-slash::before { content: "\f2c6"; } +.bi-code-square::before { content: "\f2c7"; } +.bi-code::before { content: "\f2c8"; } +.bi-collection-fill::before { content: "\f2c9"; } +.bi-collection-play-fill::before { content: "\f2ca"; } +.bi-collection-play::before { content: "\f2cb"; } +.bi-collection::before { content: "\f2cc"; } +.bi-columns-gap::before { content: "\f2cd"; } +.bi-columns::before { content: "\f2ce"; } +.bi-command::before { content: "\f2cf"; } +.bi-compass-fill::before { content: "\f2d0"; } +.bi-compass::before { content: "\f2d1"; } +.bi-cone-striped::before { content: "\f2d2"; } +.bi-cone::before { content: "\f2d3"; } +.bi-controller::before { content: "\f2d4"; } +.bi-cpu-fill::before { content: "\f2d5"; } +.bi-cpu::before { content: "\f2d6"; } +.bi-credit-card-2-back-fill::before { content: "\f2d7"; } +.bi-credit-card-2-back::before { content: "\f2d8"; } +.bi-credit-card-2-front-fill::before { content: "\f2d9"; } +.bi-credit-card-2-front::before { content: "\f2da"; } +.bi-credit-card-fill::before { content: "\f2db"; } +.bi-credit-card::before { content: "\f2dc"; } +.bi-crop::before { content: "\f2dd"; } +.bi-cup-fill::before { content: "\f2de"; } +.bi-cup-straw::before { content: "\f2df"; } +.bi-cup::before { content: "\f2e0"; } +.bi-cursor-fill::before { content: "\f2e1"; } +.bi-cursor-text::before { content: "\f2e2"; } +.bi-cursor::before { content: "\f2e3"; } +.bi-dash-circle-dotted::before { content: "\f2e4"; } +.bi-dash-circle-fill::before { content: "\f2e5"; } +.bi-dash-circle::before { content: "\f2e6"; } +.bi-dash-square-dotted::before { content: "\f2e7"; } +.bi-dash-square-fill::before { content: "\f2e8"; } +.bi-dash-square::before { content: "\f2e9"; } +.bi-dash::before { content: "\f2ea"; } +.bi-diagram-2-fill::before { content: "\f2eb"; } +.bi-diagram-2::before { content: "\f2ec"; } +.bi-diagram-3-fill::before { content: "\f2ed"; } +.bi-diagram-3::before { content: "\f2ee"; } +.bi-diamond-fill::before { content: "\f2ef"; } +.bi-diamond-half::before { content: "\f2f0"; } +.bi-diamond::before { content: "\f2f1"; } +.bi-dice-1-fill::before { content: "\f2f2"; } +.bi-dice-1::before { content: "\f2f3"; } +.bi-dice-2-fill::before { content: "\f2f4"; } +.bi-dice-2::before { content: "\f2f5"; } +.bi-dice-3-fill::before { content: "\f2f6"; } +.bi-dice-3::before { content: "\f2f7"; } +.bi-dice-4-fill::before { content: "\f2f8"; } +.bi-dice-4::before { content: "\f2f9"; } +.bi-dice-5-fill::before { content: "\f2fa"; } +.bi-dice-5::before { content: "\f2fb"; } +.bi-dice-6-fill::before { content: "\f2fc"; } +.bi-dice-6::before { content: "\f2fd"; } +.bi-disc-fill::before { content: "\f2fe"; } +.bi-disc::before { content: "\f2ff"; } +.bi-discord::before { content: "\f300"; } +.bi-display-fill::before { content: "\f301"; } +.bi-display::before { content: "\f302"; } +.bi-distribute-horizontal::before { content: "\f303"; } +.bi-distribute-vertical::before { content: "\f304"; } +.bi-door-closed-fill::before { content: "\f305"; } +.bi-door-closed::before { content: "\f306"; } +.bi-door-open-fill::before { content: "\f307"; } +.bi-door-open::before { content: "\f308"; } +.bi-dot::before { content: "\f309"; } +.bi-download::before { content: "\f30a"; } +.bi-droplet-fill::before { content: "\f30b"; } +.bi-droplet-half::before { content: "\f30c"; } +.bi-droplet::before { content: "\f30d"; } +.bi-earbuds::before { content: "\f30e"; } +.bi-easel-fill::before { content: "\f30f"; } +.bi-easel::before { content: "\f310"; } +.bi-egg-fill::before { content: "\f311"; } +.bi-egg-fried::before { content: "\f312"; } +.bi-egg::before { content: "\f313"; } +.bi-eject-fill::before { content: "\f314"; } +.bi-eject::before { content: "\f315"; } +.bi-emoji-angry-fill::before { content: "\f316"; } +.bi-emoji-angry::before { content: "\f317"; } +.bi-emoji-dizzy-fill::before { content: "\f318"; } +.bi-emoji-dizzy::before { content: "\f319"; } +.bi-emoji-expressionless-fill::before { content: "\f31a"; } +.bi-emoji-expressionless::before { content: "\f31b"; } +.bi-emoji-frown-fill::before { content: "\f31c"; } +.bi-emoji-frown::before { content: "\f31d"; } +.bi-emoji-heart-eyes-fill::before { content: "\f31e"; } +.bi-emoji-heart-eyes::before { content: "\f31f"; } +.bi-emoji-laughing-fill::before { content: "\f320"; } +.bi-emoji-laughing::before { content: "\f321"; } +.bi-emoji-neutral-fill::before { content: "\f322"; } +.bi-emoji-neutral::before { content: "\f323"; } +.bi-emoji-smile-fill::before { content: "\f324"; } +.bi-emoji-smile-upside-down-fill::before { content: "\f325"; } +.bi-emoji-smile-upside-down::before { content: "\f326"; } +.bi-emoji-smile::before { content: "\f327"; } +.bi-emoji-sunglasses-fill::before { content: "\f328"; } +.bi-emoji-sunglasses::before { content: "\f329"; } +.bi-emoji-wink-fill::before { content: "\f32a"; } +.bi-emoji-wink::before { content: "\f32b"; } +.bi-envelope-fill::before { content: "\f32c"; } +.bi-envelope-open-fill::before { content: "\f32d"; } +.bi-envelope-open::before { content: "\f32e"; } +.bi-envelope::before { content: "\f32f"; } +.bi-eraser-fill::before { content: "\f330"; } +.bi-eraser::before { content: "\f331"; } +.bi-exclamation-circle-fill::before { content: "\f332"; } +.bi-exclamation-circle::before { content: "\f333"; } +.bi-exclamation-diamond-fill::before { content: "\f334"; } +.bi-exclamation-diamond::before { content: "\f335"; } +.bi-exclamation-octagon-fill::before { content: "\f336"; } +.bi-exclamation-octagon::before { content: "\f337"; } +.bi-exclamation-square-fill::before { content: "\f338"; } +.bi-exclamation-square::before { content: "\f339"; } +.bi-exclamation-triangle-fill::before { content: "\f33a"; } +.bi-exclamation-triangle::before { content: "\f33b"; } +.bi-exclamation::before { content: "\f33c"; } +.bi-exclude::before { content: "\f33d"; } +.bi-eye-fill::before { content: "\f33e"; } +.bi-eye-slash-fill::before { content: "\f33f"; } +.bi-eye-slash::before { content: "\f340"; } +.bi-eye::before { content: "\f341"; } +.bi-eyedropper::before { content: "\f342"; } +.bi-eyeglasses::before { content: "\f343"; } +.bi-facebook::before { content: "\f344"; } +.bi-file-arrow-down-fill::before { content: "\f345"; } +.bi-file-arrow-down::before { content: "\f346"; } +.bi-file-arrow-up-fill::before { content: "\f347"; } +.bi-file-arrow-up::before { content: "\f348"; } +.bi-file-bar-graph-fill::before { content: "\f349"; } +.bi-file-bar-graph::before { content: "\f34a"; } +.bi-file-binary-fill::before { content: "\f34b"; } +.bi-file-binary::before { content: "\f34c"; } +.bi-file-break-fill::before { content: "\f34d"; } +.bi-file-break::before { content: "\f34e"; } +.bi-file-check-fill::before { content: "\f34f"; } +.bi-file-check::before { content: "\f350"; } +.bi-file-code-fill::before { content: "\f351"; } +.bi-file-code::before { content: "\f352"; } +.bi-file-diff-fill::before { content: "\f353"; } +.bi-file-diff::before { content: "\f354"; } +.bi-file-earmark-arrow-down-fill::before { content: "\f355"; } +.bi-file-earmark-arrow-down::before { content: "\f356"; } +.bi-file-earmark-arrow-up-fill::before { content: "\f357"; } +.bi-file-earmark-arrow-up::before { content: "\f358"; } +.bi-file-earmark-bar-graph-fill::before { content: "\f359"; } +.bi-file-earmark-bar-graph::before { content: "\f35a"; } +.bi-file-earmark-binary-fill::before { content: "\f35b"; } +.bi-file-earmark-binary::before { content: "\f35c"; } +.bi-file-earmark-break-fill::before { content: "\f35d"; } +.bi-file-earmark-break::before { content: "\f35e"; } +.bi-file-earmark-check-fill::before { content: "\f35f"; } +.bi-file-earmark-check::before { content: "\f360"; } +.bi-file-earmark-code-fill::before { content: "\f361"; } +.bi-file-earmark-code::before { content: "\f362"; } +.bi-file-earmark-diff-fill::before { content: "\f363"; } +.bi-file-earmark-diff::before { content: "\f364"; } +.bi-file-earmark-easel-fill::before { content: "\f365"; } +.bi-file-earmark-easel::before { content: "\f366"; } +.bi-file-earmark-excel-fill::before { content: "\f367"; } +.bi-file-earmark-excel::before { content: "\f368"; } +.bi-file-earmark-fill::before { content: "\f369"; } +.bi-file-earmark-font-fill::before { content: "\f36a"; } +.bi-file-earmark-font::before { content: "\f36b"; } +.bi-file-earmark-image-fill::before { content: "\f36c"; } +.bi-file-earmark-image::before { content: "\f36d"; } +.bi-file-earmark-lock-fill::before { content: "\f36e"; } +.bi-file-earmark-lock::before { content: "\f36f"; } +.bi-file-earmark-lock2-fill::before { content: "\f370"; } +.bi-file-earmark-lock2::before { content: "\f371"; } +.bi-file-earmark-medical-fill::before { content: "\f372"; } +.bi-file-earmark-medical::before { content: "\f373"; } +.bi-file-earmark-minus-fill::before { content: "\f374"; } +.bi-file-earmark-minus::before { content: "\f375"; } +.bi-file-earmark-music-fill::before { content: "\f376"; } +.bi-file-earmark-music::before { content: "\f377"; } +.bi-file-earmark-person-fill::before { content: "\f378"; } +.bi-file-earmark-person::before { content: "\f379"; } +.bi-file-earmark-play-fill::before { content: "\f37a"; } +.bi-file-earmark-play::before { content: "\f37b"; } +.bi-file-earmark-plus-fill::before { content: "\f37c"; } +.bi-file-earmark-plus::before { content: "\f37d"; } +.bi-file-earmark-post-fill::before { content: "\f37e"; } +.bi-file-earmark-post::before { content: "\f37f"; } +.bi-file-earmark-ppt-fill::before { content: "\f380"; } +.bi-file-earmark-ppt::before { content: "\f381"; } +.bi-file-earmark-richtext-fill::before { content: "\f382"; } +.bi-file-earmark-richtext::before { content: "\f383"; } +.bi-file-earmark-ruled-fill::before { content: "\f384"; } +.bi-file-earmark-ruled::before { content: "\f385"; } +.bi-file-earmark-slides-fill::before { content: "\f386"; } +.bi-file-earmark-slides::before { content: "\f387"; } +.bi-file-earmark-spreadsheet-fill::before { content: "\f388"; } +.bi-file-earmark-spreadsheet::before { content: "\f389"; } +.bi-file-earmark-text-fill::before { content: "\f38a"; } +.bi-file-earmark-text::before { content: "\f38b"; } +.bi-file-earmark-word-fill::before { content: "\f38c"; } +.bi-file-earmark-word::before { content: "\f38d"; } +.bi-file-earmark-x-fill::before { content: "\f38e"; } +.bi-file-earmark-x::before { content: "\f38f"; } +.bi-file-earmark-zip-fill::before { content: "\f390"; } +.bi-file-earmark-zip::before { content: "\f391"; } +.bi-file-earmark::before { content: "\f392"; } +.bi-file-easel-fill::before { content: "\f393"; } +.bi-file-easel::before { content: "\f394"; } +.bi-file-excel-fill::before { content: "\f395"; } +.bi-file-excel::before { content: "\f396"; } +.bi-file-fill::before { content: "\f397"; } +.bi-file-font-fill::before { content: "\f398"; } +.bi-file-font::before { content: "\f399"; } +.bi-file-image-fill::before { content: "\f39a"; } +.bi-file-image::before { content: "\f39b"; } +.bi-file-lock-fill::before { content: "\f39c"; } +.bi-file-lock::before { content: "\f39d"; } +.bi-file-lock2-fill::before { content: "\f39e"; } +.bi-file-lock2::before { content: "\f39f"; } +.bi-file-medical-fill::before { content: "\f3a0"; } +.bi-file-medical::before { content: "\f3a1"; } +.bi-file-minus-fill::before { content: "\f3a2"; } +.bi-file-minus::before { content: "\f3a3"; } +.bi-file-music-fill::before { content: "\f3a4"; } +.bi-file-music::before { content: "\f3a5"; } +.bi-file-person-fill::before { content: "\f3a6"; } +.bi-file-person::before { content: "\f3a7"; } +.bi-file-play-fill::before { content: "\f3a8"; } +.bi-file-play::before { content: "\f3a9"; } +.bi-file-plus-fill::before { content: "\f3aa"; } +.bi-file-plus::before { content: "\f3ab"; } +.bi-file-post-fill::before { content: "\f3ac"; } +.bi-file-post::before { content: "\f3ad"; } +.bi-file-ppt-fill::before { content: "\f3ae"; } +.bi-file-ppt::before { content: "\f3af"; } +.bi-file-richtext-fill::before { content: "\f3b0"; } +.bi-file-richtext::before { content: "\f3b1"; } +.bi-file-ruled-fill::before { content: "\f3b2"; } +.bi-file-ruled::before { content: "\f3b3"; } +.bi-file-slides-fill::before { content: "\f3b4"; } +.bi-file-slides::before { content: "\f3b5"; } +.bi-file-spreadsheet-fill::before { content: "\f3b6"; } +.bi-file-spreadsheet::before { content: "\f3b7"; } +.bi-file-text-fill::before { content: "\f3b8"; } +.bi-file-text::before { content: "\f3b9"; } +.bi-file-word-fill::before { content: "\f3ba"; } +.bi-file-word::before { content: "\f3bb"; } +.bi-file-x-fill::before { content: "\f3bc"; } +.bi-file-x::before { content: "\f3bd"; } +.bi-file-zip-fill::before { content: "\f3be"; } +.bi-file-zip::before { content: "\f3bf"; } +.bi-file::before { content: "\f3c0"; } +.bi-files-alt::before { content: "\f3c1"; } +.bi-files::before { content: "\f3c2"; } +.bi-film::before { content: "\f3c3"; } +.bi-filter-circle-fill::before { content: "\f3c4"; } +.bi-filter-circle::before { content: "\f3c5"; } +.bi-filter-left::before { content: "\f3c6"; } +.bi-filter-right::before { content: "\f3c7"; } +.bi-filter-square-fill::before { content: "\f3c8"; } +.bi-filter-square::before { content: "\f3c9"; } +.bi-filter::before { content: "\f3ca"; } +.bi-flag-fill::before { content: "\f3cb"; } +.bi-flag::before { content: "\f3cc"; } +.bi-flower1::before { content: "\f3cd"; } +.bi-flower2::before { content: "\f3ce"; } +.bi-flower3::before { content: "\f3cf"; } +.bi-folder-check::before { content: "\f3d0"; } +.bi-folder-fill::before { content: "\f3d1"; } +.bi-folder-minus::before { content: "\f3d2"; } +.bi-folder-plus::before { content: "\f3d3"; } +.bi-folder-symlink-fill::before { content: "\f3d4"; } +.bi-folder-symlink::before { content: "\f3d5"; } +.bi-folder-x::before { content: "\f3d6"; } +.bi-folder::before { content: "\f3d7"; } +.bi-folder2-open::before { content: "\f3d8"; } +.bi-folder2::before { content: "\f3d9"; } +.bi-fonts::before { content: "\f3da"; } +.bi-forward-fill::before { content: "\f3db"; } +.bi-forward::before { content: "\f3dc"; } +.bi-front::before { content: "\f3dd"; } +.bi-fullscreen-exit::before { content: "\f3de"; } +.bi-fullscreen::before { content: "\f3df"; } +.bi-funnel-fill::before { content: "\f3e0"; } +.bi-funnel::before { content: "\f3e1"; } +.bi-gear-fill::before { content: "\f3e2"; } +.bi-gear-wide-connected::before { content: "\f3e3"; } +.bi-gear-wide::before { content: "\f3e4"; } +.bi-gear::before { content: "\f3e5"; } +.bi-gem::before { content: "\f3e6"; } +.bi-geo-alt-fill::before { content: "\f3e7"; } +.bi-geo-alt::before { content: "\f3e8"; } +.bi-geo-fill::before { content: "\f3e9"; } +.bi-geo::before { content: "\f3ea"; } +.bi-gift-fill::before { content: "\f3eb"; } +.bi-gift::before { content: "\f3ec"; } +.bi-github::before { content: "\f3ed"; } +.bi-globe::before { content: "\f3ee"; } +.bi-globe2::before { content: "\f3ef"; } +.bi-google::before { content: "\f3f0"; } +.bi-graph-down::before { content: "\f3f1"; } +.bi-graph-up::before { content: "\f3f2"; } +.bi-grid-1x2-fill::before { content: "\f3f3"; } +.bi-grid-1x2::before { content: "\f3f4"; } +.bi-grid-3x2-gap-fill::before { content: "\f3f5"; } +.bi-grid-3x2-gap::before { content: "\f3f6"; } +.bi-grid-3x2::before { content: "\f3f7"; } +.bi-grid-3x3-gap-fill::before { content: "\f3f8"; } +.bi-grid-3x3-gap::before { content: "\f3f9"; } +.bi-grid-3x3::before { content: "\f3fa"; } +.bi-grid-fill::before { content: "\f3fb"; } +.bi-grid::before { content: "\f3fc"; } +.bi-grip-horizontal::before { content: "\f3fd"; } +.bi-grip-vertical::before { content: "\f3fe"; } +.bi-hammer::before { content: "\f3ff"; } +.bi-hand-index-fill::before { content: "\f400"; } +.bi-hand-index-thumb-fill::before { content: "\f401"; } +.bi-hand-index-thumb::before { content: "\f402"; } +.bi-hand-index::before { content: "\f403"; } +.bi-hand-thumbs-down-fill::before { content: "\f404"; } +.bi-hand-thumbs-down::before { content: "\f405"; } +.bi-hand-thumbs-up-fill::before { content: "\f406"; } +.bi-hand-thumbs-up::before { content: "\f407"; } +.bi-handbag-fill::before { content: "\f408"; } +.bi-handbag::before { content: "\f409"; } +.bi-hash::before { content: "\f40a"; } +.bi-hdd-fill::before { content: "\f40b"; } +.bi-hdd-network-fill::before { content: "\f40c"; } +.bi-hdd-network::before { content: "\f40d"; } +.bi-hdd-rack-fill::before { content: "\f40e"; } +.bi-hdd-rack::before { content: "\f40f"; } +.bi-hdd-stack-fill::before { content: "\f410"; } +.bi-hdd-stack::before { content: "\f411"; } +.bi-hdd::before { content: "\f412"; } +.bi-headphones::before { content: "\f413"; } +.bi-headset::before { content: "\f414"; } +.bi-heart-fill::before { content: "\f415"; } +.bi-heart-half::before { content: "\f416"; } +.bi-heart::before { content: "\f417"; } +.bi-heptagon-fill::before { content: "\f418"; } +.bi-heptagon-half::before { content: "\f419"; } +.bi-heptagon::before { content: "\f41a"; } +.bi-hexagon-fill::before { content: "\f41b"; } +.bi-hexagon-half::before { content: "\f41c"; } +.bi-hexagon::before { content: "\f41d"; } +.bi-hourglass-bottom::before { content: "\f41e"; } +.bi-hourglass-split::before { content: "\f41f"; } +.bi-hourglass-top::before { content: "\f420"; } +.bi-hourglass::before { content: "\f421"; } +.bi-house-door-fill::before { content: "\f422"; } +.bi-house-door::before { content: "\f423"; } +.bi-house-fill::before { content: "\f424"; } +.bi-house::before { content: "\f425"; } +.bi-hr::before { content: "\f426"; } +.bi-hurricane::before { content: "\f427"; } +.bi-image-alt::before { content: "\f428"; } +.bi-image-fill::before { content: "\f429"; } +.bi-image::before { content: "\f42a"; } +.bi-images::before { content: "\f42b"; } +.bi-inbox-fill::before { content: "\f42c"; } +.bi-inbox::before { content: "\f42d"; } +.bi-inboxes-fill::before { content: "\f42e"; } +.bi-inboxes::before { content: "\f42f"; } +.bi-info-circle-fill::before { content: "\f430"; } +.bi-info-circle::before { content: "\f431"; } +.bi-info-square-fill::before { content: "\f432"; } +.bi-info-square::before { content: "\f433"; } +.bi-info::before { content: "\f434"; } +.bi-input-cursor-text::before { content: "\f435"; } +.bi-input-cursor::before { content: "\f436"; } +.bi-instagram::before { content: "\f437"; } +.bi-intersect::before { content: "\f438"; } +.bi-journal-album::before { content: "\f439"; } +.bi-journal-arrow-down::before { content: "\f43a"; } +.bi-journal-arrow-up::before { content: "\f43b"; } +.bi-journal-bookmark-fill::before { content: "\f43c"; } +.bi-journal-bookmark::before { content: "\f43d"; } +.bi-journal-check::before { content: "\f43e"; } +.bi-journal-code::before { content: "\f43f"; } +.bi-journal-medical::before { content: "\f440"; } +.bi-journal-minus::before { content: "\f441"; } +.bi-journal-plus::before { content: "\f442"; } +.bi-journal-richtext::before { content: "\f443"; } +.bi-journal-text::before { content: "\f444"; } +.bi-journal-x::before { content: "\f445"; } +.bi-journal::before { content: "\f446"; } +.bi-journals::before { content: "\f447"; } +.bi-joystick::before { content: "\f448"; } +.bi-justify-left::before { content: "\f449"; } +.bi-justify-right::before { content: "\f44a"; } +.bi-justify::before { content: "\f44b"; } +.bi-kanban-fill::before { content: "\f44c"; } +.bi-kanban::before { content: "\f44d"; } +.bi-key-fill::before { content: "\f44e"; } +.bi-key::before { content: "\f44f"; } +.bi-keyboard-fill::before { content: "\f450"; } +.bi-keyboard::before { content: "\f451"; } +.bi-ladder::before { content: "\f452"; } +.bi-lamp-fill::before { content: "\f453"; } +.bi-lamp::before { content: "\f454"; } +.bi-laptop-fill::before { content: "\f455"; } +.bi-laptop::before { content: "\f456"; } +.bi-layer-backward::before { content: "\f457"; } +.bi-layer-forward::before { content: "\f458"; } +.bi-layers-fill::before { content: "\f459"; } +.bi-layers-half::before { content: "\f45a"; } +.bi-layers::before { content: "\f45b"; } +.bi-layout-sidebar-inset-reverse::before { content: "\f45c"; } +.bi-layout-sidebar-inset::before { content: "\f45d"; } +.bi-layout-sidebar-reverse::before { content: "\f45e"; } +.bi-layout-sidebar::before { content: "\f45f"; } +.bi-layout-split::before { content: "\f460"; } +.bi-layout-text-sidebar-reverse::before { content: "\f461"; } +.bi-layout-text-sidebar::before { content: "\f462"; } +.bi-layout-text-window-reverse::before { content: "\f463"; } +.bi-layout-text-window::before { content: "\f464"; } +.bi-layout-three-columns::before { content: "\f465"; } +.bi-layout-wtf::before { content: "\f466"; } +.bi-life-preserver::before { content: "\f467"; } +.bi-lightbulb-fill::before { content: "\f468"; } +.bi-lightbulb-off-fill::before { content: "\f469"; } +.bi-lightbulb-off::before { content: "\f46a"; } +.bi-lightbulb::before { content: "\f46b"; } +.bi-lightning-charge-fill::before { content: "\f46c"; } +.bi-lightning-charge::before { content: "\f46d"; } +.bi-lightning-fill::before { content: "\f46e"; } +.bi-lightning::before { content: "\f46f"; } +.bi-link-45deg::before { content: "\f470"; } +.bi-link::before { content: "\f471"; } +.bi-linkedin::before { content: "\f472"; } +.bi-list-check::before { content: "\f473"; } +.bi-list-nested::before { content: "\f474"; } +.bi-list-ol::before { content: "\f475"; } +.bi-list-stars::before { content: "\f476"; } +.bi-list-task::before { content: "\f477"; } +.bi-list-ul::before { content: "\f478"; } +.bi-list::before { content: "\f479"; } +.bi-lock-fill::before { content: "\f47a"; } +.bi-lock::before { content: "\f47b"; } +.bi-mailbox::before { content: "\f47c"; } +.bi-mailbox2::before { content: "\f47d"; } +.bi-map-fill::before { content: "\f47e"; } +.bi-map::before { content: "\f47f"; } +.bi-markdown-fill::before { content: "\f480"; } +.bi-markdown::before { content: "\f481"; } +.bi-mask::before { content: "\f482"; } +.bi-megaphone-fill::before { content: "\f483"; } +.bi-megaphone::before { content: "\f484"; } +.bi-menu-app-fill::before { content: "\f485"; } +.bi-menu-app::before { content: "\f486"; } +.bi-menu-button-fill::before { content: "\f487"; } +.bi-menu-button-wide-fill::before { content: "\f488"; } +.bi-menu-button-wide::before { content: "\f489"; } +.bi-menu-button::before { content: "\f48a"; } +.bi-menu-down::before { content: "\f48b"; } +.bi-menu-up::before { content: "\f48c"; } +.bi-mic-fill::before { content: "\f48d"; } +.bi-mic-mute-fill::before { content: "\f48e"; } +.bi-mic-mute::before { content: "\f48f"; } +.bi-mic::before { content: "\f490"; } +.bi-minecart-loaded::before { content: "\f491"; } +.bi-minecart::before { content: "\f492"; } +.bi-moisture::before { content: "\f493"; } +.bi-moon-fill::before { content: "\f494"; } +.bi-moon-stars-fill::before { content: "\f495"; } +.bi-moon-stars::before { content: "\f496"; } +.bi-moon::before { content: "\f497"; } +.bi-mouse-fill::before { content: "\f498"; } +.bi-mouse::before { content: "\f499"; } +.bi-mouse2-fill::before { content: "\f49a"; } +.bi-mouse2::before { content: "\f49b"; } +.bi-mouse3-fill::before { content: "\f49c"; } +.bi-mouse3::before { content: "\f49d"; } +.bi-music-note-beamed::before { content: "\f49e"; } +.bi-music-note-list::before { content: "\f49f"; } +.bi-music-note::before { content: "\f4a0"; } +.bi-music-player-fill::before { content: "\f4a1"; } +.bi-music-player::before { content: "\f4a2"; } +.bi-newspaper::before { content: "\f4a3"; } +.bi-node-minus-fill::before { content: "\f4a4"; } +.bi-node-minus::before { content: "\f4a5"; } +.bi-node-plus-fill::before { content: "\f4a6"; } +.bi-node-plus::before { content: "\f4a7"; } +.bi-nut-fill::before { content: "\f4a8"; } +.bi-nut::before { content: "\f4a9"; } +.bi-octagon-fill::before { content: "\f4aa"; } +.bi-octagon-half::before { content: "\f4ab"; } +.bi-octagon::before { content: "\f4ac"; } +.bi-option::before { content: "\f4ad"; } +.bi-outlet::before { content: "\f4ae"; } +.bi-paint-bucket::before { content: "\f4af"; } +.bi-palette-fill::before { content: "\f4b0"; } +.bi-palette::before { content: "\f4b1"; } +.bi-palette2::before { content: "\f4b2"; } +.bi-paperclip::before { content: "\f4b3"; } +.bi-paragraph::before { content: "\f4b4"; } +.bi-patch-check-fill::before { content: "\f4b5"; } +.bi-patch-check::before { content: "\f4b6"; } +.bi-patch-exclamation-fill::before { content: "\f4b7"; } +.bi-patch-exclamation::before { content: "\f4b8"; } +.bi-patch-minus-fill::before { content: "\f4b9"; } +.bi-patch-minus::before { content: "\f4ba"; } +.bi-patch-plus-fill::before { content: "\f4bb"; } +.bi-patch-plus::before { content: "\f4bc"; } +.bi-patch-question-fill::before { content: "\f4bd"; } +.bi-patch-question::before { content: "\f4be"; } +.bi-pause-btn-fill::before { content: "\f4bf"; } +.bi-pause-btn::before { content: "\f4c0"; } +.bi-pause-circle-fill::before { content: "\f4c1"; } +.bi-pause-circle::before { content: "\f4c2"; } +.bi-pause-fill::before { content: "\f4c3"; } +.bi-pause::before { content: "\f4c4"; } +.bi-peace-fill::before { content: "\f4c5"; } +.bi-peace::before { content: "\f4c6"; } +.bi-pen-fill::before { content: "\f4c7"; } +.bi-pen::before { content: "\f4c8"; } +.bi-pencil-fill::before { content: "\f4c9"; } +.bi-pencil-square::before { content: "\f4ca"; } +.bi-pencil::before { content: "\f4cb"; } +.bi-pentagon-fill::before { content: "\f4cc"; } +.bi-pentagon-half::before { content: "\f4cd"; } +.bi-pentagon::before { content: "\f4ce"; } +.bi-people-fill::before { content: "\f4cf"; } +.bi-people::before { content: "\f4d0"; } +.bi-percent::before { content: "\f4d1"; } +.bi-person-badge-fill::before { content: "\f4d2"; } +.bi-person-badge::before { content: "\f4d3"; } +.bi-person-bounding-box::before { content: "\f4d4"; } +.bi-person-check-fill::before { content: "\f4d5"; } +.bi-person-check::before { content: "\f4d6"; } +.bi-person-circle::before { content: "\f4d7"; } +.bi-person-dash-fill::before { content: "\f4d8"; } +.bi-person-dash::before { content: "\f4d9"; } +.bi-person-fill::before { content: "\f4da"; } +.bi-person-lines-fill::before { content: "\f4db"; } +.bi-person-plus-fill::before { content: "\f4dc"; } +.bi-person-plus::before { content: "\f4dd"; } +.bi-person-square::before { content: "\f4de"; } +.bi-person-x-fill::before { content: "\f4df"; } +.bi-person-x::before { content: "\f4e0"; } +.bi-person::before { content: "\f4e1"; } +.bi-phone-fill::before { content: "\f4e2"; } +.bi-phone-landscape-fill::before { content: "\f4e3"; } +.bi-phone-landscape::before { content: "\f4e4"; } +.bi-phone-vibrate-fill::before { content: "\f4e5"; } +.bi-phone-vibrate::before { content: "\f4e6"; } +.bi-phone::before { content: "\f4e7"; } +.bi-pie-chart-fill::before { content: "\f4e8"; } +.bi-pie-chart::before { content: "\f4e9"; } +.bi-pin-angle-fill::before { content: "\f4ea"; } +.bi-pin-angle::before { content: "\f4eb"; } +.bi-pin-fill::before { content: "\f4ec"; } +.bi-pin::before { content: "\f4ed"; } +.bi-pip-fill::before { content: "\f4ee"; } +.bi-pip::before { content: "\f4ef"; } +.bi-play-btn-fill::before { content: "\f4f0"; } +.bi-play-btn::before { content: "\f4f1"; } +.bi-play-circle-fill::before { content: "\f4f2"; } +.bi-play-circle::before { content: "\f4f3"; } +.bi-play-fill::before { content: "\f4f4"; } +.bi-play::before { content: "\f4f5"; } +.bi-plug-fill::before { content: "\f4f6"; } +.bi-plug::before { content: "\f4f7"; } +.bi-plus-circle-dotted::before { content: "\f4f8"; } +.bi-plus-circle-fill::before { content: "\f4f9"; } +.bi-plus-circle::before { content: "\f4fa"; } +.bi-plus-square-dotted::before { content: "\f4fb"; } +.bi-plus-square-fill::before { content: "\f4fc"; } +.bi-plus-square::before { content: "\f4fd"; } +.bi-plus::before { content: "\f4fe"; } +.bi-power::before { content: "\f4ff"; } +.bi-printer-fill::before { content: "\f500"; } +.bi-printer::before { content: "\f501"; } +.bi-puzzle-fill::before { content: "\f502"; } +.bi-puzzle::before { content: "\f503"; } +.bi-question-circle-fill::before { content: "\f504"; } +.bi-question-circle::before { content: "\f505"; } +.bi-question-diamond-fill::before { content: "\f506"; } +.bi-question-diamond::before { content: "\f507"; } +.bi-question-octagon-fill::before { content: "\f508"; } +.bi-question-octagon::before { content: "\f509"; } +.bi-question-square-fill::before { content: "\f50a"; } +.bi-question-square::before { content: "\f50b"; } +.bi-question::before { content: "\f50c"; } +.bi-rainbow::before { content: "\f50d"; } +.bi-receipt-cutoff::before { content: "\f50e"; } +.bi-receipt::before { content: "\f50f"; } +.bi-reception-0::before { content: "\f510"; } +.bi-reception-1::before { content: "\f511"; } +.bi-reception-2::before { content: "\f512"; } +.bi-reception-3::before { content: "\f513"; } +.bi-reception-4::before { content: "\f514"; } +.bi-record-btn-fill::before { content: "\f515"; } +.bi-record-btn::before { content: "\f516"; } +.bi-record-circle-fill::before { content: "\f517"; } +.bi-record-circle::before { content: "\f518"; } +.bi-record-fill::before { content: "\f519"; } +.bi-record::before { content: "\f51a"; } +.bi-record2-fill::before { content: "\f51b"; } +.bi-record2::before { content: "\f51c"; } +.bi-reply-all-fill::before { content: "\f51d"; } +.bi-reply-all::before { content: "\f51e"; } +.bi-reply-fill::before { content: "\f51f"; } +.bi-reply::before { content: "\f520"; } +.bi-rss-fill::before { content: "\f521"; } +.bi-rss::before { content: "\f522"; } +.bi-rulers::before { content: "\f523"; } +.bi-save-fill::before { content: "\f524"; } +.bi-save::before { content: "\f525"; } +.bi-save2-fill::before { content: "\f526"; } +.bi-save2::before { content: "\f527"; } +.bi-scissors::before { content: "\f528"; } +.bi-screwdriver::before { content: "\f529"; } +.bi-search::before { content: "\f52a"; } +.bi-segmented-nav::before { content: "\f52b"; } +.bi-server::before { content: "\f52c"; } +.bi-share-fill::before { content: "\f52d"; } +.bi-share::before { content: "\f52e"; } +.bi-shield-check::before { content: "\f52f"; } +.bi-shield-exclamation::before { content: "\f530"; } +.bi-shield-fill-check::before { content: "\f531"; } +.bi-shield-fill-exclamation::before { content: "\f532"; } +.bi-shield-fill-minus::before { content: "\f533"; } +.bi-shield-fill-plus::before { content: "\f534"; } +.bi-shield-fill-x::before { content: "\f535"; } +.bi-shield-fill::before { content: "\f536"; } +.bi-shield-lock-fill::before { content: "\f537"; } +.bi-shield-lock::before { content: "\f538"; } +.bi-shield-minus::before { content: "\f539"; } +.bi-shield-plus::before { content: "\f53a"; } +.bi-shield-shaded::before { content: "\f53b"; } +.bi-shield-slash-fill::before { content: "\f53c"; } +.bi-shield-slash::before { content: "\f53d"; } +.bi-shield-x::before { content: "\f53e"; } +.bi-shield::before { content: "\f53f"; } +.bi-shift-fill::before { content: "\f540"; } +.bi-shift::before { content: "\f541"; } +.bi-shop-window::before { content: "\f542"; } +.bi-shop::before { content: "\f543"; } +.bi-shuffle::before { content: "\f544"; } +.bi-signpost-2-fill::before { content: "\f545"; } +.bi-signpost-2::before { content: "\f546"; } +.bi-signpost-fill::before { content: "\f547"; } +.bi-signpost-split-fill::before { content: "\f548"; } +.bi-signpost-split::before { content: "\f549"; } +.bi-signpost::before { content: "\f54a"; } +.bi-sim-fill::before { content: "\f54b"; } +.bi-sim::before { content: "\f54c"; } +.bi-skip-backward-btn-fill::before { content: "\f54d"; } +.bi-skip-backward-btn::before { content: "\f54e"; } +.bi-skip-backward-circle-fill::before { content: "\f54f"; } +.bi-skip-backward-circle::before { content: "\f550"; } +.bi-skip-backward-fill::before { content: "\f551"; } +.bi-skip-backward::before { content: "\f552"; } +.bi-skip-end-btn-fill::before { content: "\f553"; } +.bi-skip-end-btn::before { content: "\f554"; } +.bi-skip-end-circle-fill::before { content: "\f555"; } +.bi-skip-end-circle::before { content: "\f556"; } +.bi-skip-end-fill::before { content: "\f557"; } +.bi-skip-end::before { content: "\f558"; } +.bi-skip-forward-btn-fill::before { content: "\f559"; } +.bi-skip-forward-btn::before { content: "\f55a"; } +.bi-skip-forward-circle-fill::before { content: "\f55b"; } +.bi-skip-forward-circle::before { content: "\f55c"; } +.bi-skip-forward-fill::before { content: "\f55d"; } +.bi-skip-forward::before { content: "\f55e"; } +.bi-skip-start-btn-fill::before { content: "\f55f"; } +.bi-skip-start-btn::before { content: "\f560"; } +.bi-skip-start-circle-fill::before { content: "\f561"; } +.bi-skip-start-circle::before { content: "\f562"; } +.bi-skip-start-fill::before { content: "\f563"; } +.bi-skip-start::before { content: "\f564"; } +.bi-slack::before { content: "\f565"; } +.bi-slash-circle-fill::before { content: "\f566"; } +.bi-slash-circle::before { content: "\f567"; } +.bi-slash-square-fill::before { content: "\f568"; } +.bi-slash-square::before { content: "\f569"; } +.bi-slash::before { content: "\f56a"; } +.bi-sliders::before { content: "\f56b"; } +.bi-smartwatch::before { content: "\f56c"; } +.bi-snow::before { content: "\f56d"; } +.bi-snow2::before { content: "\f56e"; } +.bi-snow3::before { content: "\f56f"; } +.bi-sort-alpha-down-alt::before { content: "\f570"; } +.bi-sort-alpha-down::before { content: "\f571"; } +.bi-sort-alpha-up-alt::before { content: "\f572"; } +.bi-sort-alpha-up::before { content: "\f573"; } +.bi-sort-down-alt::before { content: "\f574"; } +.bi-sort-down::before { content: "\f575"; } +.bi-sort-numeric-down-alt::before { content: "\f576"; } +.bi-sort-numeric-down::before { content: "\f577"; } +.bi-sort-numeric-up-alt::before { content: "\f578"; } +.bi-sort-numeric-up::before { content: "\f579"; } +.bi-sort-up-alt::before { content: "\f57a"; } +.bi-sort-up::before { content: "\f57b"; } +.bi-soundwave::before { content: "\f57c"; } +.bi-speaker-fill::before { content: "\f57d"; } +.bi-speaker::before { content: "\f57e"; } +.bi-speedometer::before { content: "\f57f"; } +.bi-speedometer2::before { content: "\f580"; } +.bi-spellcheck::before { content: "\f581"; } +.bi-square-fill::before { content: "\f582"; } +.bi-square-half::before { content: "\f583"; } +.bi-square::before { content: "\f584"; } +.bi-stack::before { content: "\f585"; } +.bi-star-fill::before { content: "\f586"; } +.bi-star-half::before { content: "\f587"; } +.bi-star::before { content: "\f588"; } +.bi-stars::before { content: "\f589"; } +.bi-stickies-fill::before { content: "\f58a"; } +.bi-stickies::before { content: "\f58b"; } +.bi-sticky-fill::before { content: "\f58c"; } +.bi-sticky::before { content: "\f58d"; } +.bi-stop-btn-fill::before { content: "\f58e"; } +.bi-stop-btn::before { content: "\f58f"; } +.bi-stop-circle-fill::before { content: "\f590"; } +.bi-stop-circle::before { content: "\f591"; } +.bi-stop-fill::before { content: "\f592"; } +.bi-stop::before { content: "\f593"; } +.bi-stoplights-fill::before { content: "\f594"; } +.bi-stoplights::before { content: "\f595"; } +.bi-stopwatch-fill::before { content: "\f596"; } +.bi-stopwatch::before { content: "\f597"; } +.bi-subtract::before { content: "\f598"; } +.bi-suit-club-fill::before { content: "\f599"; } +.bi-suit-club::before { content: "\f59a"; } +.bi-suit-diamond-fill::before { content: "\f59b"; } +.bi-suit-diamond::before { content: "\f59c"; } +.bi-suit-heart-fill::before { content: "\f59d"; } +.bi-suit-heart::before { content: "\f59e"; } +.bi-suit-spade-fill::before { content: "\f59f"; } +.bi-suit-spade::before { content: "\f5a0"; } +.bi-sun-fill::before { content: "\f5a1"; } +.bi-sun::before { content: "\f5a2"; } +.bi-sunglasses::before { content: "\f5a3"; } +.bi-sunrise-fill::before { content: "\f5a4"; } +.bi-sunrise::before { content: "\f5a5"; } +.bi-sunset-fill::before { content: "\f5a6"; } +.bi-sunset::before { content: "\f5a7"; } +.bi-symmetry-horizontal::before { content: "\f5a8"; } +.bi-symmetry-vertical::before { content: "\f5a9"; } +.bi-table::before { content: "\f5aa"; } +.bi-tablet-fill::before { content: "\f5ab"; } +.bi-tablet-landscape-fill::before { content: "\f5ac"; } +.bi-tablet-landscape::before { content: "\f5ad"; } +.bi-tablet::before { content: "\f5ae"; } +.bi-tag-fill::before { content: "\f5af"; } +.bi-tag::before { content: "\f5b0"; } +.bi-tags-fill::before { content: "\f5b1"; } +.bi-tags::before { content: "\f5b2"; } +.bi-telegram::before { content: "\f5b3"; } +.bi-telephone-fill::before { content: "\f5b4"; } +.bi-telephone-forward-fill::before { content: "\f5b5"; } +.bi-telephone-forward::before { content: "\f5b6"; } +.bi-telephone-inbound-fill::before { content: "\f5b7"; } +.bi-telephone-inbound::before { content: "\f5b8"; } +.bi-telephone-minus-fill::before { content: "\f5b9"; } +.bi-telephone-minus::before { content: "\f5ba"; } +.bi-telephone-outbound-fill::before { content: "\f5bb"; } +.bi-telephone-outbound::before { content: "\f5bc"; } +.bi-telephone-plus-fill::before { content: "\f5bd"; } +.bi-telephone-plus::before { content: "\f5be"; } +.bi-telephone-x-fill::before { content: "\f5bf"; } +.bi-telephone-x::before { content: "\f5c0"; } +.bi-telephone::before { content: "\f5c1"; } +.bi-terminal-fill::before { content: "\f5c2"; } +.bi-terminal::before { content: "\f5c3"; } +.bi-text-center::before { content: "\f5c4"; } +.bi-text-indent-left::before { content: "\f5c5"; } +.bi-text-indent-right::before { content: "\f5c6"; } +.bi-text-left::before { content: "\f5c7"; } +.bi-text-paragraph::before { content: "\f5c8"; } +.bi-text-right::before { content: "\f5c9"; } +.bi-textarea-resize::before { content: "\f5ca"; } +.bi-textarea-t::before { content: "\f5cb"; } +.bi-textarea::before { content: "\f5cc"; } +.bi-thermometer-half::before { content: "\f5cd"; } +.bi-thermometer-high::before { content: "\f5ce"; } +.bi-thermometer-low::before { content: "\f5cf"; } +.bi-thermometer-snow::before { content: "\f5d0"; } +.bi-thermometer-sun::before { content: "\f5d1"; } +.bi-thermometer::before { content: "\f5d2"; } +.bi-three-dots-vertical::before { content: "\f5d3"; } +.bi-three-dots::before { content: "\f5d4"; } +.bi-toggle-off::before { content: "\f5d5"; } +.bi-toggle-on::before { content: "\f5d6"; } +.bi-toggle2-off::before { content: "\f5d7"; } +.bi-toggle2-on::before { content: "\f5d8"; } +.bi-toggles::before { content: "\f5d9"; } +.bi-toggles2::before { content: "\f5da"; } +.bi-tools::before { content: "\f5db"; } +.bi-tornado::before { content: "\f5dc"; } +.bi-trash-fill::before { content: "\f5dd"; } +.bi-trash::before { content: "\f5de"; } +.bi-trash2-fill::before { content: "\f5df"; } +.bi-trash2::before { content: "\f5e0"; } +.bi-tree-fill::before { content: "\f5e1"; } +.bi-tree::before { content: "\f5e2"; } +.bi-triangle-fill::before { content: "\f5e3"; } +.bi-triangle-half::before { content: "\f5e4"; } +.bi-triangle::before { content: "\f5e5"; } +.bi-trophy-fill::before { content: "\f5e6"; } +.bi-trophy::before { content: "\f5e7"; } +.bi-tropical-storm::before { content: "\f5e8"; } +.bi-truck-flatbed::before { content: "\f5e9"; } +.bi-truck::before { content: "\f5ea"; } +.bi-tsunami::before { content: "\f5eb"; } +.bi-tv-fill::before { content: "\f5ec"; } +.bi-tv::before { content: "\f5ed"; } +.bi-twitch::before { content: "\f5ee"; } +.bi-twitter::before { content: "\f5ef"; } +.bi-type-bold::before { content: "\f5f0"; } +.bi-type-h1::before { content: "\f5f1"; } +.bi-type-h2::before { content: "\f5f2"; } +.bi-type-h3::before { content: "\f5f3"; } +.bi-type-italic::before { content: "\f5f4"; } +.bi-type-strikethrough::before { content: "\f5f5"; } +.bi-type-underline::before { content: "\f5f6"; } +.bi-type::before { content: "\f5f7"; } +.bi-ui-checks-grid::before { content: "\f5f8"; } +.bi-ui-checks::before { content: "\f5f9"; } +.bi-ui-radios-grid::before { content: "\f5fa"; } +.bi-ui-radios::before { content: "\f5fb"; } +.bi-umbrella-fill::before { content: "\f5fc"; } +.bi-umbrella::before { content: "\f5fd"; } +.bi-union::before { content: "\f5fe"; } +.bi-unlock-fill::before { content: "\f5ff"; } +.bi-unlock::before { content: "\f600"; } +.bi-upc-scan::before { content: "\f601"; } +.bi-upc::before { content: "\f602"; } +.bi-upload::before { content: "\f603"; } +.bi-vector-pen::before { content: "\f604"; } +.bi-view-list::before { content: "\f605"; } +.bi-view-stacked::before { content: "\f606"; } +.bi-vinyl-fill::before { content: "\f607"; } +.bi-vinyl::before { content: "\f608"; } +.bi-voicemail::before { content: "\f609"; } +.bi-volume-down-fill::before { content: "\f60a"; } +.bi-volume-down::before { content: "\f60b"; } +.bi-volume-mute-fill::before { content: "\f60c"; } +.bi-volume-mute::before { content: "\f60d"; } +.bi-volume-off-fill::before { content: "\f60e"; } +.bi-volume-off::before { content: "\f60f"; } +.bi-volume-up-fill::before { content: "\f610"; } +.bi-volume-up::before { content: "\f611"; } +.bi-vr::before { content: "\f612"; } +.bi-wallet-fill::before { content: "\f613"; } +.bi-wallet::before { content: "\f614"; } +.bi-wallet2::before { content: "\f615"; } +.bi-watch::before { content: "\f616"; } +.bi-water::before { content: "\f617"; } +.bi-whatsapp::before { content: "\f618"; } +.bi-wifi-1::before { content: "\f619"; } +.bi-wifi-2::before { content: "\f61a"; } +.bi-wifi-off::before { content: "\f61b"; } +.bi-wifi::before { content: "\f61c"; } +.bi-wind::before { content: "\f61d"; } +.bi-window-dock::before { content: "\f61e"; } +.bi-window-sidebar::before { content: "\f61f"; } +.bi-window::before { content: "\f620"; } +.bi-wrench::before { content: "\f621"; } +.bi-x-circle-fill::before { content: "\f622"; } +.bi-x-circle::before { content: "\f623"; } +.bi-x-diamond-fill::before { content: "\f624"; } +.bi-x-diamond::before { content: "\f625"; } +.bi-x-octagon-fill::before { content: "\f626"; } +.bi-x-octagon::before { content: "\f627"; } +.bi-x-square-fill::before { content: "\f628"; } +.bi-x-square::before { content: "\f629"; } +.bi-x::before { content: "\f62a"; } +.bi-youtube::before { content: "\f62b"; } +.bi-zoom-in::before { content: "\f62c"; } +.bi-zoom-out::before { content: "\f62d"; } +.bi-bank::before { content: "\f62e"; } +.bi-bank2::before { content: "\f62f"; } +.bi-bell-slash-fill::before { content: "\f630"; } +.bi-bell-slash::before { content: "\f631"; } +.bi-cash-coin::before { content: "\f632"; } +.bi-check-lg::before { content: "\f633"; } +.bi-coin::before { content: "\f634"; } +.bi-currency-bitcoin::before { content: "\f635"; } +.bi-currency-dollar::before { content: "\f636"; } +.bi-currency-euro::before { content: "\f637"; } +.bi-currency-exchange::before { content: "\f638"; } +.bi-currency-pound::before { content: "\f639"; } +.bi-currency-yen::before { content: "\f63a"; } +.bi-dash-lg::before { content: "\f63b"; } +.bi-exclamation-lg::before { content: "\f63c"; } +.bi-file-earmark-pdf-fill::before { content: "\f63d"; } +.bi-file-earmark-pdf::before { content: "\f63e"; } +.bi-file-pdf-fill::before { content: "\f63f"; } +.bi-file-pdf::before { content: "\f640"; } +.bi-gender-ambiguous::before { content: "\f641"; } +.bi-gender-female::before { content: "\f642"; } +.bi-gender-male::before { content: "\f643"; } +.bi-gender-trans::before { content: "\f644"; } +.bi-headset-vr::before { content: "\f645"; } +.bi-info-lg::before { content: "\f646"; } +.bi-mastodon::before { content: "\f647"; } +.bi-messenger::before { content: "\f648"; } +.bi-piggy-bank-fill::before { content: "\f649"; } +.bi-piggy-bank::before { content: "\f64a"; } +.bi-pin-map-fill::before { content: "\f64b"; } +.bi-pin-map::before { content: "\f64c"; } +.bi-plus-lg::before { content: "\f64d"; } +.bi-question-lg::before { content: "\f64e"; } +.bi-recycle::before { content: "\f64f"; } +.bi-reddit::before { content: "\f650"; } +.bi-safe-fill::before { content: "\f651"; } +.bi-safe2-fill::before { content: "\f652"; } +.bi-safe2::before { content: "\f653"; } +.bi-sd-card-fill::before { content: "\f654"; } +.bi-sd-card::before { content: "\f655"; } +.bi-skype::before { content: "\f656"; } +.bi-slash-lg::before { content: "\f657"; } +.bi-translate::before { content: "\f658"; } +.bi-x-lg::before { content: "\f659"; } +.bi-safe::before { content: "\f65a"; } +.bi-apple::before { content: "\f65b"; } +.bi-microsoft::before { content: "\f65d"; } +.bi-windows::before { content: "\f65e"; } +.bi-behance::before { content: "\f65c"; } +.bi-dribbble::before { content: "\f65f"; } +.bi-line::before { content: "\f660"; } +.bi-medium::before { content: "\f661"; } +.bi-paypal::before { content: "\f662"; } +.bi-pinterest::before { content: "\f663"; } +.bi-signal::before { content: "\f664"; } +.bi-snapchat::before { content: "\f665"; } +.bi-spotify::before { content: "\f666"; } +.bi-stack-overflow::before { content: "\f667"; } +.bi-strava::before { content: "\f668"; } +.bi-wordpress::before { content: "\f669"; } +.bi-vimeo::before { content: "\f66a"; } +.bi-activity::before { content: "\f66b"; } +.bi-easel2-fill::before { content: "\f66c"; } +.bi-easel2::before { content: "\f66d"; } +.bi-easel3-fill::before { content: "\f66e"; } +.bi-easel3::before { content: "\f66f"; } +.bi-fan::before { content: "\f670"; } +.bi-fingerprint::before { content: "\f671"; } +.bi-graph-down-arrow::before { content: "\f672"; } +.bi-graph-up-arrow::before { content: "\f673"; } +.bi-hypnotize::before { content: "\f674"; } +.bi-magic::before { content: "\f675"; } +.bi-person-rolodex::before { content: "\f676"; } +.bi-person-video::before { content: "\f677"; } +.bi-person-video2::before { content: "\f678"; } +.bi-person-video3::before { content: "\f679"; } +.bi-person-workspace::before { content: "\f67a"; } +.bi-radioactive::before { content: "\f67b"; } +.bi-webcam-fill::before { content: "\f67c"; } +.bi-webcam::before { content: "\f67d"; } +.bi-yin-yang::before { content: "\f67e"; } +.bi-bandaid-fill::before { content: "\f680"; } +.bi-bandaid::before { content: "\f681"; } +.bi-bluetooth::before { content: "\f682"; } +.bi-body-text::before { content: "\f683"; } +.bi-boombox::before { content: "\f684"; } +.bi-boxes::before { content: "\f685"; } +.bi-dpad-fill::before { content: "\f686"; } +.bi-dpad::before { content: "\f687"; } +.bi-ear-fill::before { content: "\f688"; } +.bi-ear::before { content: "\f689"; } +.bi-envelope-check-fill::before { content: "\f68b"; } +.bi-envelope-check::before { content: "\f68c"; } +.bi-envelope-dash-fill::before { content: "\f68e"; } +.bi-envelope-dash::before { content: "\f68f"; } +.bi-envelope-exclamation-fill::before { content: "\f691"; } +.bi-envelope-exclamation::before { content: "\f692"; } +.bi-envelope-plus-fill::before { content: "\f693"; } +.bi-envelope-plus::before { content: "\f694"; } +.bi-envelope-slash-fill::before { content: "\f696"; } +.bi-envelope-slash::before { content: "\f697"; } +.bi-envelope-x-fill::before { content: "\f699"; } +.bi-envelope-x::before { content: "\f69a"; } +.bi-explicit-fill::before { content: "\f69b"; } +.bi-explicit::before { content: "\f69c"; } +.bi-git::before { content: "\f69d"; } +.bi-infinity::before { content: "\f69e"; } +.bi-list-columns-reverse::before { content: "\f69f"; } +.bi-list-columns::before { content: "\f6a0"; } +.bi-meta::before { content: "\f6a1"; } +.bi-nintendo-switch::before { content: "\f6a4"; } +.bi-pc-display-horizontal::before { content: "\f6a5"; } +.bi-pc-display::before { content: "\f6a6"; } +.bi-pc-horizontal::before { content: "\f6a7"; } +.bi-pc::before { content: "\f6a8"; } +.bi-playstation::before { content: "\f6a9"; } +.bi-plus-slash-minus::before { content: "\f6aa"; } +.bi-projector-fill::before { content: "\f6ab"; } +.bi-projector::before { content: "\f6ac"; } +.bi-qr-code-scan::before { content: "\f6ad"; } +.bi-qr-code::before { content: "\f6ae"; } +.bi-quora::before { content: "\f6af"; } +.bi-quote::before { content: "\f6b0"; } +.bi-robot::before { content: "\f6b1"; } +.bi-send-check-fill::before { content: "\f6b2"; } +.bi-send-check::before { content: "\f6b3"; } +.bi-send-dash-fill::before { content: "\f6b4"; } +.bi-send-dash::before { content: "\f6b5"; } +.bi-send-exclamation-fill::before { content: "\f6b7"; } +.bi-send-exclamation::before { content: "\f6b8"; } +.bi-send-fill::before { content: "\f6b9"; } +.bi-send-plus-fill::before { content: "\f6ba"; } +.bi-send-plus::before { content: "\f6bb"; } +.bi-send-slash-fill::before { content: "\f6bc"; } +.bi-send-slash::before { content: "\f6bd"; } +.bi-send-x-fill::before { content: "\f6be"; } +.bi-send-x::before { content: "\f6bf"; } +.bi-send::before { content: "\f6c0"; } +.bi-steam::before { content: "\f6c1"; } +.bi-terminal-dash::before { content: "\f6c3"; } +.bi-terminal-plus::before { content: "\f6c4"; } +.bi-terminal-split::before { content: "\f6c5"; } +.bi-ticket-detailed-fill::before { content: "\f6c6"; } +.bi-ticket-detailed::before { content: "\f6c7"; } +.bi-ticket-fill::before { content: "\f6c8"; } +.bi-ticket-perforated-fill::before { content: "\f6c9"; } +.bi-ticket-perforated::before { content: "\f6ca"; } +.bi-ticket::before { content: "\f6cb"; } +.bi-tiktok::before { content: "\f6cc"; } +.bi-window-dash::before { content: "\f6cd"; } +.bi-window-desktop::before { content: "\f6ce"; } +.bi-window-fullscreen::before { content: "\f6cf"; } +.bi-window-plus::before { content: "\f6d0"; } +.bi-window-split::before { content: "\f6d1"; } +.bi-window-stack::before { content: "\f6d2"; } +.bi-window-x::before { content: "\f6d3"; } +.bi-xbox::before { content: "\f6d4"; } +.bi-ethernet::before { content: "\f6d5"; } +.bi-hdmi-fill::before { content: "\f6d6"; } +.bi-hdmi::before { content: "\f6d7"; } +.bi-usb-c-fill::before { content: "\f6d8"; } +.bi-usb-c::before { content: "\f6d9"; } +.bi-usb-fill::before { content: "\f6da"; } +.bi-usb-plug-fill::before { content: "\f6db"; } +.bi-usb-plug::before { content: "\f6dc"; } +.bi-usb-symbol::before { content: "\f6dd"; } +.bi-usb::before { content: "\f6de"; } +.bi-boombox-fill::before { content: "\f6df"; } +.bi-displayport::before { content: "\f6e1"; } +.bi-gpu-card::before { content: "\f6e2"; } +.bi-memory::before { content: "\f6e3"; } +.bi-modem-fill::before { content: "\f6e4"; } +.bi-modem::before { content: "\f6e5"; } +.bi-motherboard-fill::before { content: "\f6e6"; } +.bi-motherboard::before { content: "\f6e7"; } +.bi-optical-audio-fill::before { content: "\f6e8"; } +.bi-optical-audio::before { content: "\f6e9"; } +.bi-pci-card::before { content: "\f6ea"; } +.bi-router-fill::before { content: "\f6eb"; } +.bi-router::before { content: "\f6ec"; } +.bi-thunderbolt-fill::before { content: "\f6ef"; } +.bi-thunderbolt::before { content: "\f6f0"; } +.bi-usb-drive-fill::before { content: "\f6f1"; } +.bi-usb-drive::before { content: "\f6f2"; } +.bi-usb-micro-fill::before { content: "\f6f3"; } +.bi-usb-micro::before { content: "\f6f4"; } +.bi-usb-mini-fill::before { content: "\f6f5"; } +.bi-usb-mini::before { content: "\f6f6"; } +.bi-cloud-haze2::before { content: "\f6f7"; } +.bi-device-hdd-fill::before { content: "\f6f8"; } +.bi-device-hdd::before { content: "\f6f9"; } +.bi-device-ssd-fill::before { content: "\f6fa"; } +.bi-device-ssd::before { content: "\f6fb"; } +.bi-displayport-fill::before { content: "\f6fc"; } +.bi-mortarboard-fill::before { content: "\f6fd"; } +.bi-mortarboard::before { content: "\f6fe"; } +.bi-terminal-x::before { content: "\f6ff"; } +.bi-arrow-through-heart-fill::before { content: "\f700"; } +.bi-arrow-through-heart::before { content: "\f701"; } +.bi-badge-sd-fill::before { content: "\f702"; } +.bi-badge-sd::before { content: "\f703"; } +.bi-bag-heart-fill::before { content: "\f704"; } +.bi-bag-heart::before { content: "\f705"; } +.bi-balloon-fill::before { content: "\f706"; } +.bi-balloon-heart-fill::before { content: "\f707"; } +.bi-balloon-heart::before { content: "\f708"; } +.bi-balloon::before { content: "\f709"; } +.bi-box2-fill::before { content: "\f70a"; } +.bi-box2-heart-fill::before { content: "\f70b"; } +.bi-box2-heart::before { content: "\f70c"; } +.bi-box2::before { content: "\f70d"; } +.bi-braces-asterisk::before { content: "\f70e"; } +.bi-calendar-heart-fill::before { content: "\f70f"; } +.bi-calendar-heart::before { content: "\f710"; } +.bi-calendar2-heart-fill::before { content: "\f711"; } +.bi-calendar2-heart::before { content: "\f712"; } +.bi-chat-heart-fill::before { content: "\f713"; } +.bi-chat-heart::before { content: "\f714"; } +.bi-chat-left-heart-fill::before { content: "\f715"; } +.bi-chat-left-heart::before { content: "\f716"; } +.bi-chat-right-heart-fill::before { content: "\f717"; } +.bi-chat-right-heart::before { content: "\f718"; } +.bi-chat-square-heart-fill::before { content: "\f719"; } +.bi-chat-square-heart::before { content: "\f71a"; } +.bi-clipboard-check-fill::before { content: "\f71b"; } +.bi-clipboard-data-fill::before { content: "\f71c"; } +.bi-clipboard-fill::before { content: "\f71d"; } +.bi-clipboard-heart-fill::before { content: "\f71e"; } +.bi-clipboard-heart::before { content: "\f71f"; } +.bi-clipboard-minus-fill::before { content: "\f720"; } +.bi-clipboard-plus-fill::before { content: "\f721"; } +.bi-clipboard-pulse::before { content: "\f722"; } +.bi-clipboard-x-fill::before { content: "\f723"; } +.bi-clipboard2-check-fill::before { content: "\f724"; } +.bi-clipboard2-check::before { content: "\f725"; } +.bi-clipboard2-data-fill::before { content: "\f726"; } +.bi-clipboard2-data::before { content: "\f727"; } +.bi-clipboard2-fill::before { content: "\f728"; } +.bi-clipboard2-heart-fill::before { content: "\f729"; } +.bi-clipboard2-heart::before { content: "\f72a"; } +.bi-clipboard2-minus-fill::before { content: "\f72b"; } +.bi-clipboard2-minus::before { content: "\f72c"; } +.bi-clipboard2-plus-fill::before { content: "\f72d"; } +.bi-clipboard2-plus::before { content: "\f72e"; } +.bi-clipboard2-pulse-fill::before { content: "\f72f"; } +.bi-clipboard2-pulse::before { content: "\f730"; } +.bi-clipboard2-x-fill::before { content: "\f731"; } +.bi-clipboard2-x::before { content: "\f732"; } +.bi-clipboard2::before { content: "\f733"; } +.bi-emoji-kiss-fill::before { content: "\f734"; } +.bi-emoji-kiss::before { content: "\f735"; } +.bi-envelope-heart-fill::before { content: "\f736"; } +.bi-envelope-heart::before { content: "\f737"; } +.bi-envelope-open-heart-fill::before { content: "\f738"; } +.bi-envelope-open-heart::before { content: "\f739"; } +.bi-envelope-paper-fill::before { content: "\f73a"; } +.bi-envelope-paper-heart-fill::before { content: "\f73b"; } +.bi-envelope-paper-heart::before { content: "\f73c"; } +.bi-envelope-paper::before { content: "\f73d"; } +.bi-filetype-aac::before { content: "\f73e"; } +.bi-filetype-ai::before { content: "\f73f"; } +.bi-filetype-bmp::before { content: "\f740"; } +.bi-filetype-cs::before { content: "\f741"; } +.bi-filetype-css::before { content: "\f742"; } +.bi-filetype-csv::before { content: "\f743"; } +.bi-filetype-doc::before { content: "\f744"; } +.bi-filetype-docx::before { content: "\f745"; } +.bi-filetype-exe::before { content: "\f746"; } +.bi-filetype-gif::before { content: "\f747"; } +.bi-filetype-heic::before { content: "\f748"; } +.bi-filetype-html::before { content: "\f749"; } +.bi-filetype-java::before { content: "\f74a"; } +.bi-filetype-jpg::before { content: "\f74b"; } +.bi-filetype-js::before { content: "\f74c"; } +.bi-filetype-jsx::before { content: "\f74d"; } +.bi-filetype-key::before { content: "\f74e"; } +.bi-filetype-m4p::before { content: "\f74f"; } +.bi-filetype-md::before { content: "\f750"; } +.bi-filetype-mdx::before { content: "\f751"; } +.bi-filetype-mov::before { content: "\f752"; } +.bi-filetype-mp3::before { content: "\f753"; } +.bi-filetype-mp4::before { content: "\f754"; } +.bi-filetype-otf::before { content: "\f755"; } +.bi-filetype-pdf::before { content: "\f756"; } +.bi-filetype-php::before { content: "\f757"; } +.bi-filetype-png::before { content: "\f758"; } +.bi-filetype-ppt::before { content: "\f75a"; } +.bi-filetype-psd::before { content: "\f75b"; } +.bi-filetype-py::before { content: "\f75c"; } +.bi-filetype-raw::before { content: "\f75d"; } +.bi-filetype-rb::before { content: "\f75e"; } +.bi-filetype-sass::before { content: "\f75f"; } +.bi-filetype-scss::before { content: "\f760"; } +.bi-filetype-sh::before { content: "\f761"; } +.bi-filetype-svg::before { content: "\f762"; } +.bi-filetype-tiff::before { content: "\f763"; } +.bi-filetype-tsx::before { content: "\f764"; } +.bi-filetype-ttf::before { content: "\f765"; } +.bi-filetype-txt::before { content: "\f766"; } +.bi-filetype-wav::before { content: "\f767"; } +.bi-filetype-woff::before { content: "\f768"; } +.bi-filetype-xls::before { content: "\f76a"; } +.bi-filetype-xml::before { content: "\f76b"; } +.bi-filetype-yml::before { content: "\f76c"; } +.bi-heart-arrow::before { content: "\f76d"; } +.bi-heart-pulse-fill::before { content: "\f76e"; } +.bi-heart-pulse::before { content: "\f76f"; } +.bi-heartbreak-fill::before { content: "\f770"; } +.bi-heartbreak::before { content: "\f771"; } +.bi-hearts::before { content: "\f772"; } +.bi-hospital-fill::before { content: "\f773"; } +.bi-hospital::before { content: "\f774"; } +.bi-house-heart-fill::before { content: "\f775"; } +.bi-house-heart::before { content: "\f776"; } +.bi-incognito::before { content: "\f777"; } +.bi-magnet-fill::before { content: "\f778"; } +.bi-magnet::before { content: "\f779"; } +.bi-person-heart::before { content: "\f77a"; } +.bi-person-hearts::before { content: "\f77b"; } +.bi-phone-flip::before { content: "\f77c"; } +.bi-plugin::before { content: "\f77d"; } +.bi-postage-fill::before { content: "\f77e"; } +.bi-postage-heart-fill::before { content: "\f77f"; } +.bi-postage-heart::before { content: "\f780"; } +.bi-postage::before { content: "\f781"; } +.bi-postcard-fill::before { content: "\f782"; } +.bi-postcard-heart-fill::before { content: "\f783"; } +.bi-postcard-heart::before { content: "\f784"; } +.bi-postcard::before { content: "\f785"; } +.bi-search-heart-fill::before { content: "\f786"; } +.bi-search-heart::before { content: "\f787"; } +.bi-sliders2-vertical::before { content: "\f788"; } +.bi-sliders2::before { content: "\f789"; } +.bi-trash3-fill::before { content: "\f78a"; } +.bi-trash3::before { content: "\f78b"; } +.bi-valentine::before { content: "\f78c"; } +.bi-valentine2::before { content: "\f78d"; } +.bi-wrench-adjustable-circle-fill::before { content: "\f78e"; } +.bi-wrench-adjustable-circle::before { content: "\f78f"; } +.bi-wrench-adjustable::before { content: "\f790"; } +.bi-filetype-json::before { content: "\f791"; } +.bi-filetype-pptx::before { content: "\f792"; } +.bi-filetype-xlsx::before { content: "\f793"; } +.bi-1-circle-fill::before { content: "\f796"; } +.bi-1-circle::before { content: "\f797"; } +.bi-1-square-fill::before { content: "\f798"; } +.bi-1-square::before { content: "\f799"; } +.bi-2-circle-fill::before { content: "\f79c"; } +.bi-2-circle::before { content: "\f79d"; } +.bi-2-square-fill::before { content: "\f79e"; } +.bi-2-square::before { content: "\f79f"; } +.bi-3-circle-fill::before { content: "\f7a2"; } +.bi-3-circle::before { content: "\f7a3"; } +.bi-3-square-fill::before { content: "\f7a4"; } +.bi-3-square::before { content: "\f7a5"; } +.bi-4-circle-fill::before { content: "\f7a8"; } +.bi-4-circle::before { content: "\f7a9"; } +.bi-4-square-fill::before { content: "\f7aa"; } +.bi-4-square::before { content: "\f7ab"; } +.bi-5-circle-fill::before { content: "\f7ae"; } +.bi-5-circle::before { content: "\f7af"; } +.bi-5-square-fill::before { content: "\f7b0"; } +.bi-5-square::before { content: "\f7b1"; } +.bi-6-circle-fill::before { content: "\f7b4"; } +.bi-6-circle::before { content: "\f7b5"; } +.bi-6-square-fill::before { content: "\f7b6"; } +.bi-6-square::before { content: "\f7b7"; } +.bi-7-circle-fill::before { content: "\f7ba"; } +.bi-7-circle::before { content: "\f7bb"; } +.bi-7-square-fill::before { content: "\f7bc"; } +.bi-7-square::before { content: "\f7bd"; } +.bi-8-circle-fill::before { content: "\f7c0"; } +.bi-8-circle::before { content: "\f7c1"; } +.bi-8-square-fill::before { content: "\f7c2"; } +.bi-8-square::before { content: "\f7c3"; } +.bi-9-circle-fill::before { content: "\f7c6"; } +.bi-9-circle::before { content: "\f7c7"; } +.bi-9-square-fill::before { content: "\f7c8"; } +.bi-9-square::before { content: "\f7c9"; } +.bi-airplane-engines-fill::before { content: "\f7ca"; } +.bi-airplane-engines::before { content: "\f7cb"; } +.bi-airplane-fill::before { content: "\f7cc"; } +.bi-airplane::before { content: "\f7cd"; } +.bi-alexa::before { content: "\f7ce"; } +.bi-alipay::before { content: "\f7cf"; } +.bi-android::before { content: "\f7d0"; } +.bi-android2::before { content: "\f7d1"; } +.bi-box-fill::before { content: "\f7d2"; } +.bi-box-seam-fill::before { content: "\f7d3"; } +.bi-browser-chrome::before { content: "\f7d4"; } +.bi-browser-edge::before { content: "\f7d5"; } +.bi-browser-firefox::before { content: "\f7d6"; } +.bi-browser-safari::before { content: "\f7d7"; } +.bi-c-circle-fill::before { content: "\f7da"; } +.bi-c-circle::before { content: "\f7db"; } +.bi-c-square-fill::before { content: "\f7dc"; } +.bi-c-square::before { content: "\f7dd"; } +.bi-capsule-pill::before { content: "\f7de"; } +.bi-capsule::before { content: "\f7df"; } +.bi-car-front-fill::before { content: "\f7e0"; } +.bi-car-front::before { content: "\f7e1"; } +.bi-cassette-fill::before { content: "\f7e2"; } +.bi-cassette::before { content: "\f7e3"; } +.bi-cc-circle-fill::before { content: "\f7e6"; } +.bi-cc-circle::before { content: "\f7e7"; } +.bi-cc-square-fill::before { content: "\f7e8"; } +.bi-cc-square::before { content: "\f7e9"; } +.bi-cup-hot-fill::before { content: "\f7ea"; } +.bi-cup-hot::before { content: "\f7eb"; } +.bi-currency-rupee::before { content: "\f7ec"; } +.bi-dropbox::before { content: "\f7ed"; } +.bi-escape::before { content: "\f7ee"; } +.bi-fast-forward-btn-fill::before { content: "\f7ef"; } +.bi-fast-forward-btn::before { content: "\f7f0"; } +.bi-fast-forward-circle-fill::before { content: "\f7f1"; } +.bi-fast-forward-circle::before { content: "\f7f2"; } +.bi-fast-forward-fill::before { content: "\f7f3"; } +.bi-fast-forward::before { content: "\f7f4"; } +.bi-filetype-sql::before { content: "\f7f5"; } +.bi-fire::before { content: "\f7f6"; } +.bi-google-play::before { content: "\f7f7"; } +.bi-h-circle-fill::before { content: "\f7fa"; } +.bi-h-circle::before { content: "\f7fb"; } +.bi-h-square-fill::before { content: "\f7fc"; } +.bi-h-square::before { content: "\f7fd"; } +.bi-indent::before { content: "\f7fe"; } +.bi-lungs-fill::before { content: "\f7ff"; } +.bi-lungs::before { content: "\f800"; } +.bi-microsoft-teams::before { content: "\f801"; } +.bi-p-circle-fill::before { content: "\f804"; } +.bi-p-circle::before { content: "\f805"; } +.bi-p-square-fill::before { content: "\f806"; } +.bi-p-square::before { content: "\f807"; } +.bi-pass-fill::before { content: "\f808"; } +.bi-pass::before { content: "\f809"; } +.bi-prescription::before { content: "\f80a"; } +.bi-prescription2::before { content: "\f80b"; } +.bi-r-circle-fill::before { content: "\f80e"; } +.bi-r-circle::before { content: "\f80f"; } +.bi-r-square-fill::before { content: "\f810"; } +.bi-r-square::before { content: "\f811"; } +.bi-repeat-1::before { content: "\f812"; } +.bi-repeat::before { content: "\f813"; } +.bi-rewind-btn-fill::before { content: "\f814"; } +.bi-rewind-btn::before { content: "\f815"; } +.bi-rewind-circle-fill::before { content: "\f816"; } +.bi-rewind-circle::before { content: "\f817"; } +.bi-rewind-fill::before { content: "\f818"; } +.bi-rewind::before { content: "\f819"; } +.bi-train-freight-front-fill::before { content: "\f81a"; } +.bi-train-freight-front::before { content: "\f81b"; } +.bi-train-front-fill::before { content: "\f81c"; } +.bi-train-front::before { content: "\f81d"; } +.bi-train-lightrail-front-fill::before { content: "\f81e"; } +.bi-train-lightrail-front::before { content: "\f81f"; } +.bi-truck-front-fill::before { content: "\f820"; } +.bi-truck-front::before { content: "\f821"; } +.bi-ubuntu::before { content: "\f822"; } +.bi-unindent::before { content: "\f823"; } +.bi-unity::before { content: "\f824"; } +.bi-universal-access-circle::before { content: "\f825"; } +.bi-universal-access::before { content: "\f826"; } +.bi-virus::before { content: "\f827"; } +.bi-virus2::before { content: "\f828"; } +.bi-wechat::before { content: "\f829"; } +.bi-yelp::before { content: "\f82a"; } +.bi-sign-stop-fill::before { content: "\f82b"; } +.bi-sign-stop-lights-fill::before { content: "\f82c"; } +.bi-sign-stop-lights::before { content: "\f82d"; } +.bi-sign-stop::before { content: "\f82e"; } +.bi-sign-turn-left-fill::before { content: "\f82f"; } +.bi-sign-turn-left::before { content: "\f830"; } +.bi-sign-turn-right-fill::before { content: "\f831"; } +.bi-sign-turn-right::before { content: "\f832"; } +.bi-sign-turn-slight-left-fill::before { content: "\f833"; } +.bi-sign-turn-slight-left::before { content: "\f834"; } +.bi-sign-turn-slight-right-fill::before { content: "\f835"; } +.bi-sign-turn-slight-right::before { content: "\f836"; } +.bi-sign-yield-fill::before { content: "\f837"; } +.bi-sign-yield::before { content: "\f838"; } +.bi-ev-station-fill::before { content: "\f839"; } +.bi-ev-station::before { content: "\f83a"; } +.bi-fuel-pump-diesel-fill::before { content: "\f83b"; } +.bi-fuel-pump-diesel::before { content: "\f83c"; } +.bi-fuel-pump-fill::before { content: "\f83d"; } +.bi-fuel-pump::before { content: "\f83e"; } +.bi-0-circle-fill::before { content: "\f83f"; } +.bi-0-circle::before { content: "\f840"; } +.bi-0-square-fill::before { content: "\f841"; } +.bi-0-square::before { content: "\f842"; } +.bi-rocket-fill::before { content: "\f843"; } +.bi-rocket-takeoff-fill::before { content: "\f844"; } +.bi-rocket-takeoff::before { content: "\f845"; } +.bi-rocket::before { content: "\f846"; } +.bi-stripe::before { content: "\f847"; } +.bi-subscript::before { content: "\f848"; } +.bi-superscript::before { content: "\f849"; } +.bi-trello::before { content: "\f84a"; } +.bi-envelope-at-fill::before { content: "\f84b"; } +.bi-envelope-at::before { content: "\f84c"; } +.bi-regex::before { content: "\f84d"; } +.bi-text-wrap::before { content: "\f84e"; } +.bi-sign-dead-end-fill::before { content: "\f84f"; } +.bi-sign-dead-end::before { content: "\f850"; } +.bi-sign-do-not-enter-fill::before { content: "\f851"; } +.bi-sign-do-not-enter::before { content: "\f852"; } +.bi-sign-intersection-fill::before { content: "\f853"; } +.bi-sign-intersection-side-fill::before { content: "\f854"; } +.bi-sign-intersection-side::before { content: "\f855"; } +.bi-sign-intersection-t-fill::before { content: "\f856"; } +.bi-sign-intersection-t::before { content: "\f857"; } +.bi-sign-intersection-y-fill::before { content: "\f858"; } +.bi-sign-intersection-y::before { content: "\f859"; } +.bi-sign-intersection::before { content: "\f85a"; } +.bi-sign-merge-left-fill::before { content: "\f85b"; } +.bi-sign-merge-left::before { content: "\f85c"; } +.bi-sign-merge-right-fill::before { content: "\f85d"; } +.bi-sign-merge-right::before { content: "\f85e"; } +.bi-sign-no-left-turn-fill::before { content: "\f85f"; } +.bi-sign-no-left-turn::before { content: "\f860"; } +.bi-sign-no-parking-fill::before { content: "\f861"; } +.bi-sign-no-parking::before { content: "\f862"; } +.bi-sign-no-right-turn-fill::before { content: "\f863"; } +.bi-sign-no-right-turn::before { content: "\f864"; } +.bi-sign-railroad-fill::before { content: "\f865"; } +.bi-sign-railroad::before { content: "\f866"; } +.bi-building-add::before { content: "\f867"; } +.bi-building-check::before { content: "\f868"; } +.bi-building-dash::before { content: "\f869"; } +.bi-building-down::before { content: "\f86a"; } +.bi-building-exclamation::before { content: "\f86b"; } +.bi-building-fill-add::before { content: "\f86c"; } +.bi-building-fill-check::before { content: "\f86d"; } +.bi-building-fill-dash::before { content: "\f86e"; } +.bi-building-fill-down::before { content: "\f86f"; } +.bi-building-fill-exclamation::before { content: "\f870"; } +.bi-building-fill-gear::before { content: "\f871"; } +.bi-building-fill-lock::before { content: "\f872"; } +.bi-building-fill-slash::before { content: "\f873"; } +.bi-building-fill-up::before { content: "\f874"; } +.bi-building-fill-x::before { content: "\f875"; } +.bi-building-fill::before { content: "\f876"; } +.bi-building-gear::before { content: "\f877"; } +.bi-building-lock::before { content: "\f878"; } +.bi-building-slash::before { content: "\f879"; } +.bi-building-up::before { content: "\f87a"; } +.bi-building-x::before { content: "\f87b"; } +.bi-buildings-fill::before { content: "\f87c"; } +.bi-buildings::before { content: "\f87d"; } +.bi-bus-front-fill::before { content: "\f87e"; } +.bi-bus-front::before { content: "\f87f"; } +.bi-ev-front-fill::before { content: "\f880"; } +.bi-ev-front::before { content: "\f881"; } +.bi-globe-americas::before { content: "\f882"; } +.bi-globe-asia-australia::before { content: "\f883"; } +.bi-globe-central-south-asia::before { content: "\f884"; } +.bi-globe-europe-africa::before { content: "\f885"; } +.bi-house-add-fill::before { content: "\f886"; } +.bi-house-add::before { content: "\f887"; } +.bi-house-check-fill::before { content: "\f888"; } +.bi-house-check::before { content: "\f889"; } +.bi-house-dash-fill::before { content: "\f88a"; } +.bi-house-dash::before { content: "\f88b"; } +.bi-house-down-fill::before { content: "\f88c"; } +.bi-house-down::before { content: "\f88d"; } +.bi-house-exclamation-fill::before { content: "\f88e"; } +.bi-house-exclamation::before { content: "\f88f"; } +.bi-house-gear-fill::before { content: "\f890"; } +.bi-house-gear::before { content: "\f891"; } +.bi-house-lock-fill::before { content: "\f892"; } +.bi-house-lock::before { content: "\f893"; } +.bi-house-slash-fill::before { content: "\f894"; } +.bi-house-slash::before { content: "\f895"; } +.bi-house-up-fill::before { content: "\f896"; } +.bi-house-up::before { content: "\f897"; } +.bi-house-x-fill::before { content: "\f898"; } +.bi-house-x::before { content: "\f899"; } +.bi-person-add::before { content: "\f89a"; } +.bi-person-down::before { content: "\f89b"; } +.bi-person-exclamation::before { content: "\f89c"; } +.bi-person-fill-add::before { content: "\f89d"; } +.bi-person-fill-check::before { content: "\f89e"; } +.bi-person-fill-dash::before { content: "\f89f"; } +.bi-person-fill-down::before { content: "\f8a0"; } +.bi-person-fill-exclamation::before { content: "\f8a1"; } +.bi-person-fill-gear::before { content: "\f8a2"; } +.bi-person-fill-lock::before { content: "\f8a3"; } +.bi-person-fill-slash::before { content: "\f8a4"; } +.bi-person-fill-up::before { content: "\f8a5"; } +.bi-person-fill-x::before { content: "\f8a6"; } +.bi-person-gear::before { content: "\f8a7"; } +.bi-person-lock::before { content: "\f8a8"; } +.bi-person-slash::before { content: "\f8a9"; } +.bi-person-up::before { content: "\f8aa"; } +.bi-scooter::before { content: "\f8ab"; } +.bi-taxi-front-fill::before { content: "\f8ac"; } +.bi-taxi-front::before { content: "\f8ad"; } +.bi-amd::before { content: "\f8ae"; } +.bi-database-add::before { content: "\f8af"; } +.bi-database-check::before { content: "\f8b0"; } +.bi-database-dash::before { content: "\f8b1"; } +.bi-database-down::before { content: "\f8b2"; } +.bi-database-exclamation::before { content: "\f8b3"; } +.bi-database-fill-add::before { content: "\f8b4"; } +.bi-database-fill-check::before { content: "\f8b5"; } +.bi-database-fill-dash::before { content: "\f8b6"; } +.bi-database-fill-down::before { content: "\f8b7"; } +.bi-database-fill-exclamation::before { content: "\f8b8"; } +.bi-database-fill-gear::before { content: "\f8b9"; } +.bi-database-fill-lock::before { content: "\f8ba"; } +.bi-database-fill-slash::before { content: "\f8bb"; } +.bi-database-fill-up::before { content: "\f8bc"; } +.bi-database-fill-x::before { content: "\f8bd"; } +.bi-database-fill::before { content: "\f8be"; } +.bi-database-gear::before { content: "\f8bf"; } +.bi-database-lock::before { content: "\f8c0"; } +.bi-database-slash::before { content: "\f8c1"; } +.bi-database-up::before { content: "\f8c2"; } +.bi-database-x::before { content: "\f8c3"; } +.bi-database::before { content: "\f8c4"; } +.bi-houses-fill::before { content: "\f8c5"; } +.bi-houses::before { content: "\f8c6"; } +.bi-nvidia::before { content: "\f8c7"; } +.bi-person-vcard-fill::before { content: "\f8c8"; } +.bi-person-vcard::before { content: "\f8c9"; } +.bi-sina-weibo::before { content: "\f8ca"; } +.bi-tencent-qq::before { content: "\f8cb"; } +.bi-wikipedia::before { content: "\f8cc"; } +.bi-alphabet-uppercase::before { content: "\f2a5"; } +.bi-alphabet::before { content: "\f68a"; } +.bi-amazon::before { content: "\f68d"; } +.bi-arrows-collapse-vertical::before { content: "\f690"; } +.bi-arrows-expand-vertical::before { content: "\f695"; } +.bi-arrows-vertical::before { content: "\f698"; } +.bi-arrows::before { content: "\f6a2"; } +.bi-ban-fill::before { content: "\f6a3"; } +.bi-ban::before { content: "\f6b6"; } +.bi-bing::before { content: "\f6c2"; } +.bi-cake::before { content: "\f6e0"; } +.bi-cake2::before { content: "\f6ed"; } +.bi-cookie::before { content: "\f6ee"; } +.bi-copy::before { content: "\f759"; } +.bi-crosshair::before { content: "\f769"; } +.bi-crosshair2::before { content: "\f794"; } +.bi-emoji-astonished-fill::before { content: "\f795"; } +.bi-emoji-astonished::before { content: "\f79a"; } +.bi-emoji-grimace-fill::before { content: "\f79b"; } +.bi-emoji-grimace::before { content: "\f7a0"; } +.bi-emoji-grin-fill::before { content: "\f7a1"; } +.bi-emoji-grin::before { content: "\f7a6"; } +.bi-emoji-surprise-fill::before { content: "\f7a7"; } +.bi-emoji-surprise::before { content: "\f7ac"; } +.bi-emoji-tear-fill::before { content: "\f7ad"; } +.bi-emoji-tear::before { content: "\f7b2"; } +.bi-envelope-arrow-down-fill::before { content: "\f7b3"; } +.bi-envelope-arrow-down::before { content: "\f7b8"; } +.bi-envelope-arrow-up-fill::before { content: "\f7b9"; } +.bi-envelope-arrow-up::before { content: "\f7be"; } +.bi-feather::before { content: "\f7bf"; } +.bi-feather2::before { content: "\f7c4"; } +.bi-floppy-fill::before { content: "\f7c5"; } +.bi-floppy::before { content: "\f7d8"; } +.bi-floppy2-fill::before { content: "\f7d9"; } +.bi-floppy2::before { content: "\f7e4"; } +.bi-gitlab::before { content: "\f7e5"; } +.bi-highlighter::before { content: "\f7f8"; } +.bi-marker-tip::before { content: "\f802"; } +.bi-nvme-fill::before { content: "\f803"; } +.bi-nvme::before { content: "\f80c"; } +.bi-opencollective::before { content: "\f80d"; } +.bi-pci-card-network::before { content: "\f8cd"; } +.bi-pci-card-sound::before { content: "\f8ce"; } +.bi-radar::before { content: "\f8cf"; } +.bi-send-arrow-down-fill::before { content: "\f8d0"; } +.bi-send-arrow-down::before { content: "\f8d1"; } +.bi-send-arrow-up-fill::before { content: "\f8d2"; } +.bi-send-arrow-up::before { content: "\f8d3"; } +.bi-sim-slash-fill::before { content: "\f8d4"; } +.bi-sim-slash::before { content: "\f8d5"; } +.bi-sourceforge::before { content: "\f8d6"; } +.bi-substack::before { content: "\f8d7"; } +.bi-threads-fill::before { content: "\f8d8"; } +.bi-threads::before { content: "\f8d9"; } +.bi-transparency::before { content: "\f8da"; } +.bi-twitter-x::before { content: "\f8db"; } +.bi-type-h4::before { content: "\f8dc"; } +.bi-type-h5::before { content: "\f8dd"; } +.bi-type-h6::before { content: "\f8de"; } +.bi-backpack-fill::before { content: "\f8df"; } +.bi-backpack::before { content: "\f8e0"; } +.bi-backpack2-fill::before { content: "\f8e1"; } +.bi-backpack2::before { content: "\f8e2"; } +.bi-backpack3-fill::before { content: "\f8e3"; } +.bi-backpack3::before { content: "\f8e4"; } +.bi-backpack4-fill::before { content: "\f8e5"; } +.bi-backpack4::before { content: "\f8e6"; } +.bi-brilliance::before { content: "\f8e7"; } +.bi-cake-fill::before { content: "\f8e8"; } +.bi-cake2-fill::before { content: "\f8e9"; } +.bi-duffle-fill::before { content: "\f8ea"; } +.bi-duffle::before { content: "\f8eb"; } +.bi-exposure::before { content: "\f8ec"; } +.bi-gender-neuter::before { content: "\f8ed"; } +.bi-highlights::before { content: "\f8ee"; } +.bi-luggage-fill::before { content: "\f8ef"; } +.bi-luggage::before { content: "\f8f0"; } +.bi-mailbox-flag::before { content: "\f8f1"; } +.bi-mailbox2-flag::before { content: "\f8f2"; } +.bi-noise-reduction::before { content: "\f8f3"; } +.bi-passport-fill::before { content: "\f8f4"; } +.bi-passport::before { content: "\f8f5"; } +.bi-person-arms-up::before { content: "\f8f6"; } +.bi-person-raised-hand::before { content: "\f8f7"; } +.bi-person-standing-dress::before { content: "\f8f8"; } +.bi-person-standing::before { content: "\f8f9"; } +.bi-person-walking::before { content: "\f8fa"; } +.bi-person-wheelchair::before { content: "\f8fb"; } +.bi-shadows::before { content: "\f8fc"; } +.bi-suitcase-fill::before { content: "\f8fd"; } +.bi-suitcase-lg-fill::before { content: "\f8fe"; } +.bi-suitcase-lg::before { content: "\f8ff"; } +.bi-suitcase::before { content: "\f900"; } +.bi-suitcase2-fill::before { content: "\f901"; } +.bi-suitcase2::before { content: "\f902"; } +.bi-vignette::before { content: "\f903"; } +.bi-bluesky::before { content: "\f7f9"; } +.bi-tux::before { content: "\f904"; } +.bi-beaker-fill::before { content: "\f905"; } +.bi-beaker::before { content: "\f906"; } +.bi-flask-fill::before { content: "\f907"; } +.bi-flask-florence-fill::before { content: "\f908"; } +.bi-flask-florence::before { content: "\f909"; } +.bi-flask::before { content: "\f90a"; } +.bi-leaf-fill::before { content: "\f90b"; } +.bi-leaf::before { content: "\f90c"; } +.bi-measuring-cup-fill::before { content: "\f90d"; } +.bi-measuring-cup::before { content: "\f90e"; } +.bi-unlock2-fill::before { content: "\f90f"; } +.bi-unlock2::before { content: "\f910"; } +.bi-battery-low::before { content: "\f911"; } +.bi-anthropic::before { content: "\f912"; } +.bi-apple-music::before { content: "\f913"; } +.bi-claude::before { content: "\f914"; } +.bi-openai::before { content: "\f915"; } +.bi-perplexity::before { content: "\f916"; } +.bi-css::before { content: "\f917"; } +.bi-javascript::before { content: "\f918"; } +.bi-typescript::before { content: "\f919"; } +.bi-fork-knife::before { content: "\f91a"; } +.bi-globe-americas-fill::before { content: "\f91b"; } +.bi-globe-asia-australia-fill::before { content: "\f91c"; } +.bi-globe-central-south-asia-fill::before { content: "\f91d"; } +.bi-globe-europe-africa-fill::before { content: "\f91e"; } diff --git a/docs/docs/site_libs/bootstrap/bootstrap-icons.woff b/docs/docs/site_libs/bootstrap/bootstrap-icons.woff new file mode 100644 index 0000000000000000000000000000000000000000..a4fa4f024c2171080ebaf3112fccbf90cdb98479 GIT binary patch literal 180288 zcmb4~bzD>b`~FeipaO#E1Zfy8F{K*;=^o`sl>yS-sYnO{3&N4o4Kk!lL1iPA?ukx1 zq#M3xpFe;9{dhcH+kIWn>%Pxn8{?d_#{vx0)yb}qk&#{f{FsaixWDdv^gj)h|L>26 zv8f6f*_9iBF9$3Wjs%`y17nCN;5`AfGO(U0QX1>nxjpv;yf`v4@wa4TJ{0#KH0C+F z204(CNrK3(Djktgh$9SrbERL}KZlcD^`{2ehHX>_ZZM@z~a8@c~khM zn{OcCJp*RGCL`nUeKmPu=IUVw!HI z{kfYx;7J3$3cxSv>@SXP_Vn=aCA*pwNJjSPI~iFxbC&WI`oJu^XYgmwe!Y13?4#W? zZ?D~(&wur43E}M!FP=S*BtyuHWVa!oQ)@AJ{; zS)V`me*XM1dEpLX^!4!F`$zXf8SlTp{}jXc@pYv51SsYjJ7YxeqgArz;dh(V*vA=k zYIJwW1X6AifSnD@+L(*I9JHUg{?8{jy}hxpT}NF&xc9-Elp9lGpIoO!(PM+S@*fDy zPs3>*x}Rny>VHpc*7*L)C@LQ2Zp+u4hUE?o)T|wz=PU(+G_gCGVN5pMs*H>2QuxyHLemdfUa(poT;AdQLBuG% zT)n*3IX|P^p}g5S&!T*7>{fZIbJcVyv#I5ne!aO=8O^GLU&3msyJ@zGqhID~eoMLg zs{fevzM+CCWXy8kD9lu8%=VVywJ{FASfbPvNmvdT`Haa+*tUP5FO7CaT2!W$ zGK}f0+Si*18~2R~uA0`XwC9yE96pWYqt?Jd=xEV5!@$M%Do4c89l^u?m?H5fK zcR**xX!h%;%lykcM&0W*!YVq9l}g*4bEj*GLpWgenJ^m)L~&; zkh$v6((ImRxw_^TFsDQNQ*}T4L?o=SLxWHeyRs1chOMk;xi&bf!+=o3{)2WkcCY({ zPQga0oNxJUFe<0AWV!6*k%FEQFdi1%5U!$BmOE^)=D1gPB6HrBQ?Rre6x+zF)nRZ{}#P0m;%ZYg{2oPpLA_Q969=|3vT80lYGr1mM6>C18(e6*CY+kd=x z)hDkRH~NSn^JMYP2+qo>`ca}@h!1+@nY(1;`=mv)5xlQtBSxgSV#UE-YEF-KWMogY zU60)lv*L1sxp4Tv2;Y1dHE>&Obk=E8G$1pizuny4Kf`2>lS5p+c0*E89@#m zL0^OewNr^qzgdV9~K|;_OAZ z#A$!{Zszga*>jrrQHux}*9%Dv-Dz%KJ1no`&f@#yi8IG4zww#h4R3^Gfc@IXon=Wk2lmxO*b?Yw2%2? zv)veG#{BCVXEqyRH=IJI!W%kSpIx6;KA@4CO!~;R!7n$RRBN{(9g^ElP<+PziFPV> zgUi1yY*hc_-3@NJDg9dG4Lkpguvz^^v2|U!zQG2ANxlu^1EVdIL9xs5*SR&qmw zjgU!l|2%6r!wk=X+9@h*N~E!7(tN|^z^}Ed=_zsLuG3T@4&l{&98Y^ec^TiGh6G2 z2iH#v&hZznhtsy}HU7DC9uak&GfL}MLVmDeV>faSAg7HAFGeJ588ho;G8@SQs^x~V zw?sS{S`w^S18OU_n3^hP$2OTJCMCQkTGp(LC;BAZs0T{WE&J|KGwbs{?9DZEQtpkX<6%o30ZL8ma|WA^jT0LIoy|(KR|0;pddJS? zZbAaS7Fqum6e#!C3Ipc+HM4Hk}?w_IErBkZ2=!+M& z6BE1pVb>zwc8*HzC7#z`$Pz}Sb_c?A2;T|IGsg!Pyo4`=b&qY<^QsF;!nc6^xlmfd z$l-Qam=b|N`%m@EFruWhkFc?|eR%Rbyor55j}rhqisr<&_AXzZj09!;!Y@=|>FbIv4hxqmbQ-Gw06lHT!F4nc?k( zUs5M}7s8hf5j~w-jYqU+u@_vIwU=KbRy(%|$Lwdx7Yvu_mox0!PPyB#+}$ACe`*({ zmlKyu$=B~%{o{OdADZ`+pH2G>G|!ixxi@+z4_eAn{-%5(#WPr%D~omT=29$GSM)-@ zr&lTSYV=8-a?=AV*6N#ys%THQCK2&l11h^ez@MlmVwqJce#p*(WZz_V3+Dwa-#v*@ zUPyWPG!-EQnp-hTYxv`M0@qhM{^!{(MpPL`?uG55cH7>ON3p?UGyB|)e6x+U#{?BES z;UJdKwY8A!$-zP$+qLk|{78=FrWWpvD=s?!pMf;}#jVTeKSpY-dY^u(v8%p&bT8rC z?^?LfJ)IuWT2~=&Wksat&$-MUMq*l32MJnF>d&Tdu?Tkrj8|In>J-fO|`Gz>*Kl|G;lMfn_-0WH> z73V>6Uo-y**V?s7_{V4eajVr?XKMY%R%@`%eERLe>oLpy>)*b3X|gbFy$kr(`bS}V zURo&WUBU0}ZKSlKA`{=&w_eaJ7RPT>+i#EHp}dOBxye4iXQd&7$&jz)US3vrY~vw4 zMP5OnJRMB72{k>YUVc`0C%*4{sm|V)`qub+W_zxQC;YZjQtnrSKaJb1M`33I7c3Ep zr@t?bEYB1!=xD!2Z5zt7T)vC=*7*ndKB@VAa`aPB@^`!Kz}`ZYa(KB(xo^2{xodf7 zxk~wqa%j0XaGa!GUVLH|mKSc+xw@qnBsL`^(bw<28y_^*<~}|>vkqfA7|MW9k z=k`6R=C&?^3HZxD$>jHZOK-2fkzDxx144b{TKC*S&Ob-Z9>y~7yv`Q=^Yzw}e3{ju z{i^ewXWe`YFNGKczxf!K9Tmt{3Tc_!XBZ=XXe^Dg4%?1m-UnM?@_9I^U^4xcxF?@XD9PGHKbQx3*ua zye!WixF^f?lkKKXx%yR!>5)`MLvgmk)OdsWRE3+}%vT%7%xQ;)W?`(xhSI_N^N9<`NjTPXWl*L%h!yyb_zNs6~AlD=84{1)H6K$Mr|2^JRziE7kIsIn)x8@+^tWoi%y-K~I!src&Zmm2s zX_--)!?#DHZF3qEv1&_e@L#O#9Os$A}YVJSJMEy=ILP zCQhd6siuEj^+IwU)I2DSFGnd5Y(6}wcu-zm?g073P_bGbQ(mTz^>b4&)yb}Ot}u2D zlhe&E*EcSy5L@>QXqGk3E*dmjD%~ZTdoYwzjeRT6Ytgo@8X8|({@(Jo!_0Pxsaeq1 zcFy2%;@X}?yMAZc#9Hp&(5AMO;bnfr*y&z)-Pg94He#2P{{E%yBlGrK4TqB<*23mP zw|pu_bKUbZiM*`>o8|Cdtd61IBUx6|M2nciaVF8*g0DA#s( z{#Isp$in$Yp3vKh)a=p88v_UQ6XW$h8*_TSxEg5oPM&3xf-kMY@1X6oNp3|)=1Cou znLv%FAo^IIg>V0$fign3`nq=hX$MNQ(c91pb}>JR^qwaQ-*o!wQh>ADEA`E zHOUk8IkU!*jeWhAs16t*UvAaXk8ch}C~jS@ZprMhKK!BJ=P}na50`6_o4p-S(mLbj zn>lN_>2{bDGSR-(&_p{MyJ>g$_H;IEp`isbCwZ7Uv*~{{a3OZteA(r(Z+qf)A=o*$ z_0RS+J3O7R(Rmnhe&Olpde_6mJR{Ko9n{z6HvecVV_;EXw`1ys;zRa~bmzFe*d0&?4yN>j|ypV3||+#o@6nm zf4jGx*aTI`%P}!1D;X18h3#hr+t?OeUzO|ks&KWPn5#NSKkhr1=y=;nP+H5~-8#-a zs|n9lBGSeRY@-65T<=2?(tFgmV~_GrjLwN7Ug<3{o1zienhlSCRlj4mx%S&z)U91s zPu^Zw*Wu1tCz{RN5zOl`Ev+fT%IBAtsb3@Z@8d6#<puW%K= zsx_7_fpF$<;r4r5DF99HwRmU31xr9X3%T5c>cNGz%F8N?G$qjW;$@52G|n-VacrSQ zuSL@6J~oZdFRJpMW<9DNTsDq11CObX_ZGUR)Kiuj2_bJWWdDofC-57rn9TkyfWWi$2) z2_^xsA>J|7aUae7lzl5`J6s{z!~-_OH>NR8rMaKFuL3=Xx5t@8z}65<9BbbSDS9o^ zM>$|?$QIS{lR}EV>B!OBFbJoF$+(WzoPdie6k4w#!sS;}nT}@Sb>V_`+qb_Sy#cG? z<_S2%nHH+!gC)v-Vr^8N-&H1RC8pNjEc3$J=&UNjYPkG5EA_M#I9$Y_w7t_=qpH{j zj{T37!deR8wf(~HeZkktZekn25?bTqg}i;!F{2=u2e*XYctasudOd5|3buhyLUlY- zb0DSuS{V#Guj|}U*@(#Ca?ybL*te&S%ERQ484wpoCILwek=-EwXlA=#M)g zE32^&LyYRf*unKWa8v-ccD|#wTbN@IiPJbK2gB2X7@5{tU4NC(fUWI_=FD0U{l#zGbb?)P8txc)7g> zrM?xG2*lO^VvYbr6d<$#QlVLJSk0R_-x>oL7J#t^7#&(n?EwnFpj$v(3h14C0t^xc zs0X@Qcufv)2|Pd#2IvVP2|hqX1L8U$l(-YwPU)QXCX=-aq{3C0+P95|mlJc5>KHsD) zj2o19f;+wv$JUX0_<9a5f03!pkkpdpndVK)*sChds<4?q+X zfyNWxVN}41n5NEr(Ga(AP`YBmC!+O~S9XX%i#wQfRD7_W4 zLY}DMDlHv~q8UUQwKhT10?Rv>_6g+G0*uJ;4H-sBtYm8Hj2Frw(kitGx&RKNA`uM| zvD6|FWSXv40Ix6x)sgrKuH8blV8B|~ic+rj<%+Uu&ZhP*l4B%l(~9DfbKnT}b{vON zFj_f$k2C6QS%>2IXEOCpff6IJhYSe30s>J$V3Q-N|Gq8-=FuB!Q9FJ{`1fo$f-wN8 z>@cfGf$^dRjCR22#&L+npp_lok%`)p`kHoINiAh>|Krz$FZb4I#hGMdSbx z7C`urdbog|T)?0LdKeI2=4>@70wU;uzHfzy1RdN58XN8?*}%8dtH11l79F4k07^z z0){0(3A{ir4G;|g26>PK8z2rzf)fx|06`0gh$p~rVkg?Pm5cZic9}xGdFlxFBq;Gk zonDYL&K_0)qLVx7v?CE9=74BKe+eTfQyiYVh&D~g;eXj|fulmsfn8dggL~E-BEGa= zq)~6~2LPgz4=Hfe<5f3cmbP#i9s1L73-i){ml?J+aXW)pzj zIa8(xSRw;N6#V1$SllyO8uS;oGcAgce+-Q4UkHGy0hq(U{Y}Po|!ur7eT zsYpbFL@e>Wm1(|U!E?bCU9%H&Z)Vtvtri1zxD!5DXJ$1h!xy z3OqvfaDGxI8*Xo=vk3+oy`^B7F;oandrN1NG)VMaWxq4t6FYntO$RUHZZK| z3yQ%+Gb;Px`1@E_f?OfJ%+4s3UX7>*q_Kwl?4A8g!!83a7wBgE&VWHKUkKI0vq zV7o+6O6A@-{3>jv3jc&e&^TbQE-z_tG-wP_2gvWRz%Y2!(*OE7N&V@hetA-Umt?j*2KwPw zU>Ge_G|;3)4-Dak>6$s9;5T6y1r!6mcOBXG#LOX?Xpa>Q;npE(Auho>4Qy6rKO0^U zZhxR@13Y3HJ4~ef1c_I2kTeBJr;@lC^4ofChLA(D1pHA*B~QYX9V-mej*RT_jUt&Ap(0`a!Y9-^E0L+XM%R_HQ;1$*Y< zjoacPB1W9Naf@$QurjJNQ&~K*u7gNb$t65zCKVAepav`rpuXgcbyZZSnL2~Wz;`16 zvj?xIu$``G;EAeZ)YJEtw8Lo)Ita<&r`~b#$z*O5xgEt`Wf5I@QRu9JLK2Hd0u_i4 zfC9=u-WUbYVi3@v>*S59!-$eP?D0UbmlRAP1bnU%SnV1Je zZgw$Kyw-tzITF3zXTrxfm0qT-kA)bcv*5Oi+}@}#j0KUqPm~Xh7U~=2<%6ZkL}$Ta zizePEWy}api^5)?j}L>AiOL%FT-5c3R$%IIT2&5%ynOo@nb@pR$3-h|Xf9?KrxoTf z$Oo9skt9=vWG0ZzRRnsv&q`O{8DgBCHELPRCR5g^8|Dr5z)%ni=S9;I=-@spZT(f@ z5d?r2MZKYRm_EE#qCFE5&D3Y5tS{oXs7*2}aDZ9O%O{c69FsNrwD^%sS*`9}5^*8L ztGNK;q^<8PH1dvwWk{H+i@=-iq{ZgvuMjjkb&F`^ScNMXv_NZQ*K;Pzwj$+MD}{qb zVRAdAbq4^HLTY6DaR2}#zq(Ejm`Q-yhyqM-vh12JFoqdOGXS6(0CT`7cRm2u9N2IFo~!wAuE3 zfzBV+L?hJzw8pJDRW=DtA4xDVksK-_>8YAy)FBCNU z*Nf;CvBi~q8ln_5OSq2vbD^loc6i9S(^N-`?qLmmBft48aHlCC8P(IC`Izm{9UL^< zszvnL;za|73Sc|{j2_&da6MqizI4!R%?i=0(*e<=kfFtP_>w+oHhqfdWt+p1e7eI8 zh!WhN4tYJcrAz9dtjjv0*ToRB=UB;rZAmFselS7=Fy(ioFOLBLLG&C$IFfg5HQAOr zOP0Y(;J zPyt32aa-RO)g$LdGUMfQ0_1|^w`g_(=WFnPf&x%IyPM$TrSlj7NCALt=jhl2Z&!W9 zo(%gPvh$uNoCD$$x~Q?UyrP6mXO!I)3)(wuC;lWva3<$m2nOx#g%N*_9HKQ0E)(U0 zPqqMY$&s8B9w{GusJyd07mF(hU@wkjJLe%s?WV7cm796}8XnNVLyq5E-v@EG)=3#6)(0E%IT*9u^pw42W@26wy${qW zQSDO=Anx?K4Sr1##~EXU)!_US5`IO(4wR_ADN7QOgOZ3giM$0!gBUsf@46eQ(VB!? zN!Y)DqdBWRn}p>6>`F`O&LL&mNtqDR@Pj-KSk{J)GFEyf`8C|DL5UnsSSO=Ibxyqk zai3wM_%$yawmxvkWU}fiV_I%Pd<=v%b>RnB zj6!$g!#MtEZb^nHJMJUoAKV^%_z{{Gw&k)-s8X8#wojfsd@ZM>4G{& zgAns1Qc#{0Bqs&qNx@W7@Bt}kN(xqJ8%YY7C+27ARm-Z$WLn*d_m*tV0R46K<}*s! z#f|0jpXSJ6pp$>5Q@Sp)RRq?*l%;gBWvK(j3aL;A3QS5@NUoYd+u;C>wC~(qlnXNY%u(v>posnk;sHVX7pOCsGk^a zLPepr%`x!84)1g%@}$>VU)}k^MBKYkolQzCYPVSs|9iIvoG{dxQAsr4WWqKLCE~Rp zI0;U^c8&mH84S#40*UTGxM=GK`&2W^%#JM*icuU}rer~ZUy9ZFk*7@=S2zDKK}*-_ zL7q|*MxWfsz-hWDH`G1Eg6~-N&$ARY$?cxIo2K>KSm5Sm5&fbCNw|(M8yZ?54;1{!U7cBY# z=_mxPx-b_Z(6&aDyVL&K&uwOu1^T6J(P}l5S~Q1V3^KDl9{j(X{f)o+Y~;mlT?(s( z&If?Dg9yf7m(Cy4s37_l4g;Y#hecf$ zbx>(AF9xjQ@8Vz-ak2sx~6D;2)oVUA2a!Q1MYt@1_Of@S&H zVWro2;YHy)6DX3e0r-RzLz-g;qM_;lJ}<@sp?a&HJC>;>hh=m47SS`^0tpzru`N!j zG=4r@GNXEy-lduTL_?_!e4e{IIJRZwF#yD5MhAoela*xh0Ok|*#k^2Q@6tTrf`NMr zLUqoUuFeAa3#S?dpZ! zmsvSKULY0@EovapIqB@cSyTWBI5+!AEV{nbgGgt~V%M=b(F6F zzT&veL7w$Z6)(ur-XNdjTu2F%zc+FQif=ME z7U<1FMgV_*UQ9)XRLRDa^$)Y5rO}MUA3hE!)#@Q|tW}nt`r^vjUAWg}F83K&{t~nR znJ4D*Qd=H7YA!J5@FWBWB?%oI1a)GD{C1~b_GoZV6A)ETu z3ns$!nA+X>oc3C*3xBS4aK^H=X0imYvkl|sJhZq1I=K>O&vV4R53dhP&#-I#aRolB zs{=l(8}x@bot;4nw|6^HsvZOl8dyiJc*lX%@X<6u>yOJNM`De_V+ubX1oi6TZN}N{ zZumpyGc9_B0|@ZQM4;8!rB&#|IP`$UnV^W^Ovvg-b+Zm4yXOYc-RDBU>lK9Ts$=1a z4Ly%#+1bA@LtN`5B5E#?-8n3LgypXu_WrNa#e`q(3};fswDpUS>(~T8{(?*w5((Tv zeT#lg7EEPRA(6_;I1e zrTRt(4Te$qdsQlW@xzUjd`4ew#`5FZWijA`a!ED(VV3}ihd@;VO=;oJQaAE0_mow` z7k4p&crqy+p((Bpveb-LOFSjj$`ZO{Kz|4C4Hkjsx8x~NnbErfn(p)>A2^y}O^DY- zhXpWYV2&(^TZ)Ro_;cM@QKVyq#+4znTma<(XLkc#JS3J5Ma&9`7m}KQi@uf7efZvf zi`I)ktdW4WY2u^VR}E+vKJ0{bee>8xeoP7c3}6JL#(nBAJ}D zl@}*e#7Hv3_-jYQhqy2|ExOz=1vLyar4-^@_$P3}`AfYkTVpZ#{l(GD0>5%T6><1H z&SNFVe^LpdL^(xg^5a+xmme!HMs^K=;57WRDnO~CK`DA2_tU2@Dd%4`8meR}r- zQY#fnTMLl7)Ja_%Anp;$x&LY4OgB=+05}t+1WwmF`S*$=Tb6-SShYL|spnkN&h`}j zy@Q4$F^pA{=~OmO{9vDEcyi)PVQq~n0Ao?#JLa{RPJx5qhj{DCWhj>dwaH4UXs=R2`7+ua-YK%4wZ2P_p{F}HpF1`oPDOikFRqW^B z^D%wSD}%|Uti$2YOy2A1FP3!OCBnlW$ZL^Gaf8MS%NS#ltbvA!)#SH zLV!q6C?SZr9kv7*VXx#nwyy3Rbx`5|oQi-UK9 zEY)ME2iFutrE7o>@Y)&>-4_v$X-+RWf$Mr2M0+;jP+gnFpIv+)&!k-Flk;$Oqs8W~ zC1P!jEuyExy(rS=kcXW3Rgx0-wuYaBufh1S{`!Z=+{=us;o*F0{V!Vi^DiS*>5e~T zf_I!~)kdcpL0-un1#ylSIpCb*>+wxgN+^}{^Cy)1hhhSw1RH2+r>$n*ML19N$&3c& zeq%0ZbxUe^`M49UK7Xmqgz=Aj*Z(Ct>W$JjYw0KS=fsCHd!7_$Zl$ zGZ_QcV{2FBOr9M;^z1s~{~Y@ey(V^uwNm6efm>i;6%e=EE&;|?5UG2f4t98Z$^W83 zR=;-PEurJ+4gVIjP@uOJ#27DXeh&tmZmA{Z6LpY$JdQAsCSHs|&3h*-0ZJsE(%<8X z-LlML>F~I@BYKx1l^Y`FWhAgO+>@Y%FTE;& zS%`mtLQZ`uy%V%zpq7f)IcG5C`K6~U{sF)0p^OPzI{p1n z_LM1~LCC=PQw}SlK}~PumX65O^`YBQvd`CNTGVfBuPQIUj9Ia~+VlM8$B%EYKd!Re z)_${bW9sEMwaor1#H~ozc*F2S0-;u+X0e6+edoz|#nROC5@?Ob=$dU=`j~e%D~$+u z<6=#CPgj;~<7b-J9JFIoUo0&DxpOeJS-Khgr!1h4+%JG%Tee3RcJYqB(=P5v<^|Ps+Q`__&XirQ)+Zq>YFeak>1eW=3+zv}|KK9!1QVgi|a zZ4MdJLC#4f{boDdAIN@pv#bC3$}$xH`bWP{(Lhm$YTAkX(HC#Kq?CXY-<*n+-sGFA zJCamS7h&bpZIZ5!Lsk!7D@tj}*j~f9tnW29Ld+)y?fyb}qJp$M-#oqj`uQTymWMrc z>s?!|v=iOwMMy94>apsAwOgdz@qta-5p~CI!5^4sPJ4$$5-}*aF?Lyx&pG`HeQ3k& zsrbtMO}Qx%+@}^RfxnY^j1Bje%fr9k!lU$r`yi%aqW!svb4O8os+wK@r68hSBXpll zIqIbTeUM7Efj-<9ht(Ez1zx;L+Nt0nU`yMds2tw-%=q+xOo^dq*XOEy82x1e-R+&T z@R_6d>qoY)T55isb|fVU@aP$ws*Cl4i)FJ-h7?Zckh{Ibn<*%m1oXkh_izUcGy zCk*ybiEQ_ZymhG%`#LJDDyHdI#&lN>>ozig|7pS5AUu%Jr#A89CY{8{LH^`OrAnuV82x$P01BmJ9EWp#)`B3t;Ho*waYXa#oH?!S0iC9 zS`KC|kG%TWyp*Inn2+cpiz7YNbKIQ4oGlCVeK$&289v=?SGJjNu_JEeKU_(exAc#d zhs0ibOL_WWC;w}z?s%H9$&(ghcwqd;-q*ah!^hP_wA8LRHsmfDt1MciT=M0}zr01Y z-4)o93H~tibR1`*PqX1JQ903ly2&F2IXpG4Ea3RB>m3^=p>`TZ&a@NT_0C?p-cVwP_pzON7sKIqp}-i zID!sS4)UY?^5NDiX{qw=vku{XH^bA)I6I1?hUzhXqe-@}K5_xhnZ=Jd6=O%ZBy3@eHOQvK6<(A*3 z_m0A=7>{GF@M5Yvz*bOrGZs2Da&y0b=e|OnpljHNlNU>BsyPyW9WM=wpYta`nzh0Z%2(8tw8}yw@n6!-Es&Z7>XjmPvQz*omy8b7DS8UN#rn@Ntn2fZUaa`OiA%Jj5}yj$kT-~Wbh-f^rrF)@Xt zn7i;q1V4X7-co}W&wE3!3aJWvBCPk{(Vw=(i^!$KKb&X()$DeMF}Atiuguzf(ET*n zTKeYg4ZX7Vum8}kDA%sf%MiXF>jNQE)?9z`^)=<%-MJv{odM@RdyyeNFHAYMg3W!M z{^X0aHU3=Fzl|oe9%}ww4s_yw^Rsnc?SO@WXKTwP&0s-rSC%More@cphHpH4F|hV8 zJC}9nmC}nECGn*B;|57cWgd^BxTN-grFg6%-Pb(ryvSk*1JjS2PMkv+v0?{ClM3N6 zap$KQGVO|C6?bL+l^mH4Rh-BayR{bc(!FIOha|PXR$h1_Hus_|G#$qOCb~;+xx$O( zO7NMyZEKg&!nAdd$>cSEsSm*S-QJh(UZD_MRR5C8amA5rj}spAkWr9zM!DI9C1G-r z1M00G5Xez6Y5DH6WWKupm-U}lmfi70ci>7kfradE`U&`$`EH&;V5F$Uy@T5M4RMuF zfs}cj4BN>B;?{l0ibuODLyk- zf2~To8vYahph#^NzXAGm^YuCYBX#6GU&7s@&m!Z+G?VjYSN}dmhHLyZtH)q%N~=e+ zo-L#)evUdPTv>NRwe%bveZP82XS3}h<`lMee_63#@a)Op8Pip#&+f_33%wsp=fG^y z0-w?!UmU@qVb5M)k<2mkVD)%|d=n1({z2uTTCvs^zf8)}9sYkU_3`XCm{lmHLYAIH zTfw;EeW7Nc;~$Fo{FE}VA=}$Gc~E;E?kH|G<4t5?DCSu<;amh=%lxz^x+)d8yp<>U z_2T~9pUw)r-%acbpYpUjb%`LQUkF+AOr=l%P&dORE#R1(9(Z#IB8!cJw0YvoZ@axp zvsY6nc;Jl@dAXh;%VVrZWg6O0)<*-wQcrZsBH*T}T*lb?cxu7{-O+oIH2XeOUxN5| zANCFrb8$;iu22ig>I3WUt_$hzwe`LPM!mD1k^ho5(pGQ#Wr%+WcoRY+ANnq`>f+AF z8q0>FHk%;U50!WEvd^?AJ{-w5?G3MB?R#q5tF&2-{N(d-mho^H3dAt*3<<{csuIOqpx=@-U?{;`CShgL90G2Ga+5@%mC<1CMmwv+|7~ z$&NlDx7^JKYNm=&tA8i4h4}n7@LThhzoM6$q8&9>Pp_sGf!6TBa;i!_%?Ww zawA`NJ3v_Wfq!13M%437L-a5vNX6Nu{-eU*+xde}d~BXCE?f9rIDe9-&)}m^bsD=p z5S2LXJeHY5TQzPaApW>fh%M(;0QdQeXp=}j&Pn$XGUXD&5-VqwUaw5o+xZnqHjn3* zqr=oMI+)6~!E$X!V1M7Cg{q~}W8ufFns@&@-=>O|Z4wsz@9CA6gKL#}cWI7gN6i8> z%tF<^cU#^{>;$a}3huZy;(Mb#1a~$X`+D^$G-TDE$b0G=JzEWW@CfpAE8t>0hn3x*ugSLuyjm(yxYTyY`nlI8b$n7al=hzAJzIA<9*K=|*^F=WpuR zlv0)*;Q`GbGH6bI>Ta6Rx2m7Aj4UrdAbs7FiIVwfg1umEeVIwj$$C=BjD}r}NgTD|Fsu$@(2tm3ukMic$?*RbkCs z=PU%fj3urc+Pb#hlcFruNOS&{n*yK9&Y-G_;n#!Z-Mgn_A{A|?7 zok>E`#}9@`vJF#r21?tg+WMQ~&XH`2(eoEJeD0r^6%a@FF_gcCJt-}Ce+aBcP9^(1 zx1!tc`g%r-x%c*do|usC*#ocEVUe{eaP6Albt}TC9^X!%exZw6%`?pRee%AKH{QQh zwi4-4W{mgD`AaT=4(xfC??|T77!!nzr!ZQ$`nY8Rq%dIT>NIKo{7g>q& zt+(otHq>&i#Lj0R_``&ZD{sHOE>4#xB%7#?T-{}>dAdif0WP|OWHD;&|16&V`}pA< z>p5`+1xm}Jtud3eH%qb)SqfS#{lc7$qE^Gpp7MW}wGNs6x%cABC*2v5m(eORLgWo@ zmc^!@Um2B69<3&O2doH9o#-JVc0SElqxnN|nKsly)$tF)Vnkff# zj<4PJkj71}2xw1hY+XAKCEv5Cp`X9H|Cn`>^Hu*~xvcGonctHli$)Yd0{ zF-XYXMc%*O@sN!oRl|)Ar?qfZHk7M)K5ygKmc#5!7Pw)w3qMF7-6MHvh%8Yvf~qb1 zg9%=af6BGtWjy$Nk1JDg_cC7H`&u{laZx*-o4_=APlZ}TjLKt@VF=>;`QnGLQaNj` zKu^aNLhA1rct*qDYUBN3}cIz7fowdUfr_rbmYe1MDIi5^YAUaSMSG5 zG8haz%~9d`>*;DZVx~9bNvq!Se*iK-&A&^kqGIZnW)w`%Eou7d$v z55&;{RUgi7Z1#|LQ8Ie#@WK??kTg=RAFr21Q|b(z^f$V3b2za}@0V zX|O`DfiP;@;t{ z+`3V#5&D&{d}V3>mmj_Ey1_Y^1@wjowg@U!JOn1|5ptAwa%?oaLXMylBk7iK`fvp} z9o_Fwd4zaV{uwMl(~R2jnYbOn$0|18o!QkHGP^npmIi;w$4_=^l|P10L)-RC?77*z z{=h!6kys{Czh~;sv2o!P0&^6>0-gQ>e!X?3!F)*JPP2 zfvCW@49)tuQ{{Y?m086R4&iM}}5#34u;SRvkk# zLnpL+-S)J|GLF6EH-NlIic++69h$46#-?8QbI~w@xZ#Ol#A+f8S!F8gvSv1?VjH?v zH!?L%gkDPl-CT*I|MXH{ke>^z2s+r2O=eRZA+y-0^*Vf@iV7}q>UCxlbK>uU@`Z1g zgLyVI#KUbWz(H(02G!z|PZp~?e3)=nS0lU%hx{CS1$6x^i)j%&u&HLbR%~RJBMyK= z-nX~Az1eV<_D9ZhEmH$S8B|xb_)M{?nJw3P#_~vT;oC%gmcxSwLeYu_gBPFym`p8r z((*j($%CzvFeGH%KaS559f1}!j>S=(qbDJ&uEjhJsN!EGY2r4H0S{G+J4`KE?jaGn z*-(V*@OkL-#VX)TJnQp^p#POpKOgof_30L0AhgU6(4O>~|9w)uL+@`g zvjsZHX*7+pP6seyqwOA;asw5(7xDg#K2z9&!RX@S_ONevp=TzJj*|9R^2lJ14A;vL zlON&GJ`{Ponb(QF&BVzvz`%H*P3`g8u^=gAg_9cnA6z+1c8eUiYK!(bYnMz)OkiZfzf{gom4o1bxzyq`cTVe8rry zaHJ+vNs{JHt*HywT(?A4ua`v96lM4q`+a;Ns~1djFe${|<_daMQ0s&J4)tQMfL`3q zm$lw>?r3Pz_b}2LT~*0F?1@03zUjngb=Ns+q^l_fDftS-5CA zy@YDBmjpNR$)r;QNS+3?lUcF9aHBuWLv#aBYanjG0nOio^3ViUb7+FAH-QrQDXa^B z-Jja}tzlB|-jqL@&1wDOC?(Q9i4u%x;G^~wV#02AuKQYGxc@V&+3DaSb}b-fd2@wS#da9?#0#^0I-FIaW4Oet$#wQ{Eqq zp#{`?egtc1Vgv1;VWyw)K*TzZVxOV=?SaD3pp~Bx_n`-8I`vEG9Z$M*OTH+^|CzfEcxX4X5 zzZE5Ibdz>4e1p9|!dYQ;g-weS40xqe;wC!TDf$-MU&|Tpe+XrJ+o1o5m_N@|YIyq>I=8Pmd;W1%*o z8gu(%coYDN2XLKeOa8P!)}s z6Dtg5OObQ9Yznsw&@ONLk} zM#n-OUNJRm0*_~>s7eCAfkf#eYDD{o5IH!Au@@RZhU31oxadz=jw4%?TC(F;;=+Qe_Mg$mG6{s2>SOu-$v&1$Cl5v{M@PwOHZ7j{eJ{z! za(d9ka!LAleD#xDEF+MNCBitMhIHr17^@xHIXjH^zjkf`>8Ot-Zl63Fbmks8n)Ql(|B8ER*uRnr6$;%L56k8B z$K$Cn(Zw=Mj`4CeLXAQH$`HnEm=3Uw@vn>%tRer(gc*o2{*~?B{3{usM*OSYaj#$B z%$r6d{*?i%YK(W~(tRtFI;EHBTUj0NTN&_U>_+2Z6KSj|mDjI)?4D6^Nc>6W#U1o# zZ%8oeKCR|jgG3faF2PT}QJfYv(ipik0?VW-Cj$8+#to)xNR}^`0 zhB1<;Dm8(ZO-ZFvq>Nn1>zE3&ojA<-xxR@G&lLQ=?DF2^l3}=1BpJ+^uMq9Mqr-F_ zpd&`q@JaKD1BPw_!^b29O%bDOF*I1dHo`{mk+jgv-OXY7XdW4c-qI-EGNW_i??RYI z=sZA24E|xdp~qG@>@l-_Q4s8g;)lsN90eh_{t(;N^}@ZowXe)oJv7HKvEk87Y6dN_ zi)xY5Wwl!IBHHojGlI<4ETHX!zUk|P*Md!XsSLYxsr=Bz@byC%Ewi9uFPisL7bn!b zUwIzdVPh~RW~5`|vl{fLvTqN)jGcxev~}pR!ru+C2Wt(U=Encev-)xb9i?9uC$q~N zKeQ_}Ir|Ia{%5dvVc~$C%}m5|5t|*%{L+Z~^I8oIJMFmEihMbDRUfbbG_&9Nwx>*0^$x`GXiz$mhWN z(ABa)|8KGwXaEcs1f5s=C+au*fLfnZx8IKRGL+j*H@$Sn9aPpFdOM8FOzqxv5MV=> z*48B501;ll7tNynRoSs+884=Gyzmc15;nLNW@8E#n%(QN*!^_sm`A!dk`VqRyq~RH zXtO|G7%~1sW%bB`>Y=r=ug3PmS~S1jjvR~9q9}O=t~kb!Khd$G%KM#)^Gm49)#vGKsd{YqIgiCUy+`HSD z+aqW@QcS0%V^X`fO6WAn>VnHjWxqZ>TANiUDoU|XFPH0C={^oX%^iinFBfa|Vp%B^ zlyb3NW2I+Ppa#ZSn4J$}{6At*3DYYteX80VKx;NtF7nBP2~j@8$e<1o zhEv3>z>DrjC3Qa(5dD5`2oqZUQQ;Qh9-Jl0&};Mza}wF0#W=oQt#ay2cyL?PHg8Hh}|pe zOkK8B$D4sb<)}rcvFtISW8vF&?lHdCG)y2Qy(*XsqDE zfTE@^7en3z!{V~86=hkZN(>JmJqbD~fN-n2HU(m?*Mj?y6<|`xGV(%}iQ34Rf#lN? z8m97j7g*c(3vU!2yIlE<;@(k_FaOTB&K_S1jtLbudzl{VwP}RQ$v1nKqtOa^f-~ht zbM&5J0(w@r4ejR)Tc>wij=tNI?p7kETeVY#S}M!aSro;`UfuXDz)Qa&^fQ5%qhB?v5LgRdlOC=cjCAVI`7)0!>D* zGq!V3a(qWR=zuD4;o;}{Bt_3C0hQ)N9Qnuz+{lTVC{3SkwfM#38usDZ!}#VC%t+lz zgh8(+hJ>5-jpXJDu%e*$6l# z48jp529my?V~O3Qn% z6MX^4iu3bq?v^}N1@c=sN}@jbGOmczJvT8-86kO zBw@4U=vpD%S0tg~7zVYjTqsw{m4)YS2!d7<+s%#}hVE6m1H;II?>m+agCM))dbX-* zw(hOfH|u?y5y#te!XnF)cPo!9+5^O1vLGCcL8cyhLlZ^Wuq9!_?baTk`_44rdS~kG zrzD%E{LmyMR?Y$vek%x`U|NM8f{3XerhtS2e*({yinDBM1KCm&0BJt4=`qrwaifhH zpyBG3bHrQD!1*<8#b<6L$`3=o*tQQGUn}f8yFNf? zoovK&2POYz>-B(yUe#a!r_2K1tEDj0R?V6P>rD8t|+DhVlDe@d>y*x!v8Lk0; zlI2_QH5y=2MwFMTqO-U z!a<(V0Ynm;0{0X-gr|u3KcHU2GhSaHcE3Hm(RcKM1PBq))*b%_J!(~&vHqigtEroo zWzdzCM{|(9!!J_0^mdzSMPI9*JzLN52O*sX4jsn)N6-j?*3dBHMlVj{`;!C@%v(is zE5|qYV#(EdOOKnCR;N(2Ux@;v+akg&6-3PhoQ%_BSaGHf@V#nfMJoCQzo=3B?Msw; zmTnmwx108&Jzqc0b8XatpqfV z?u?4Xa;#fn@WGXp^``C{`!dac03bhmc5!i8@+>zHhG>i#LD$f?nxpYC(#Tg$yL@(T zFT!4{b7TH%4^6rx22^U+;s8fL(4HVt3@-U+14`=*y+oY{|ZN#!+@jP6KMl8sg; zFE=A8OZuTO&zJ>}R4XE-AS#!mphP0;4Q8QW8Wsur7eitZngj0!&#_(4)I~R}mF!YA zbVc19cP-Zs)u9z`vuq^{5TN-=x;hoX>^7K3w%beF;m}>)BKP9TH3<0tHXyPOjX}pS z3pbA8(oZ-XgDPN9<5;=&m}~b>Y5{Ui-eQ(%rf&}oa}X5`?-#mpB6ZKB;q%1|oF9l+ zqiA*iLZw`;FcW7xSJ}a{2M(NFSviZ=z<|y}Z}NVo^Vs{Dc!!s2xO_0Fx^JW0GES-y z003i8i{z5*L^Qp?sAc^qCY)w{6sG7)^P2Y(JMnj1*Kz)$uOVI?mR#F+4BrGEM__T; zp01n40-oKnP==pjOVJD5f+Ne4K{c?og22HuQ7!1YYWpHL7W+C4dy|vG^=K;&CyE@6 zoz3!oquYn$(%`rtD!_zZ!t{1Rh)LlguPy=^Nug-!x@SA3CZ3tT;rO;&nrB!^NQd(Y z;o;Cn&&Q?s1yz(Kz%vL6U_eqB+sRJB4MgPH8KlSHTv$A?aw#vZAV)DuY~1OwZjv_I zeO>ai(aaq)#dwCyL`71ys{uZ(Hi7dA$xy^y}uFe zC8_s9wRf-zixE^FKRixOq4qOSF#}*{f{@C&HdN)aCcSRoY#437X(zlMQOuD7K>xK} zvf=OFW)3@65Gj3T=5B;K2Pp zIz2{?I1f<{f;|T!l~x%bsJy@dia4M%W83tdcOJ_iYGn{#dvR@hn(YxWp|^+5mLW0N z+yDA-PyZl?wRL^g)Bo0BHy;3u1O2>`liz9JT^GmC%{^#B6Pk9$S^)hJtQ>Lvw}gy8 zHPq$5IG#A4MmPsLd?BA>$KiVfbVo+k&bdot@I^e5{)_c#_ zTD3F53FZws;ZN(3&f&*}b@?@zrQy)SDah91-;N$BV7 zTY?d0MOYEG67N($!UA1VY5v5x%jZ+zESpTADXiT;62*g}1~10IhBZm+1hq4@+Zkva z%x|4%c@;k_vY5dd3&dEH9!DsP)h!O8&){{R4W7y6!%k_`-h)QD%#owyxgUcF*vj2; zlz9(~I^jtD-N@i^8Q=#`>q+0)auB^E2^2W#8n zFg&h%Q(jmshVU^!XXI^@(|Iy?<8BI7djOPCPOqM44#9H+AdO@Ce|QFI{O}-HLo(Of zL*}v&oWThVG|5IGJE&+%4dt)~g*r+{eH>h`NB?>aM5C4#2IUen!5tK?Ojd~}`4iF^ zW*!dLO~&JU%ju4sK+=azo*=JJ4?zWmM|PLpL0WF^K})uzYpj!bl$5W)K>sL0M|c>b zGd?MgqvsoNeOef?fGie|6@{#vrz!3uu*Jp#ljbKd!tmlq`jCV`jRCMVNhM17{1_lV zuseBk^hMp!+Cw|!m_7lJ3F=}{7YQ$tW$3RCv3b&N7S@D0%o*e2Fyg6KH+yTCQgW4q z5w49rN|@ihVKa(8-CAXn=c_G+NGgFJs>q^-x!Z^)spw}`C334aU6fQswnJ62l-KA- z<}3Tl<^7fUBf25Vq6lLnViYu7>P19LcWa7D;QGh>Si*^A*HUx)Rv7^IDvRO;u-X7O zMMtU{?+tnjA1iL+E+jA}eENz?BuVof-|x&zQdGHOHw;={Tc@(F6r5NVUp+rRH(j0e z{n_gD-2A-03kqM+Odh&n=j?Et|j6 z1~OFUL{EgjxeAb?jiex|Qgd}nB$6bWTET$VE0|SK5kD(wMMol%=}UcDFgdhf1b_XI zB=(AXB7KYvgt^*bc!SNrG8?XM?#wL|8}p6g!n-oj9E+xs2=IGE$B-3O^2-tiGn`X5 z8axwYW8)Qxm`+B_NG00U9sIf?RXk9_eVOHJll+nOb#brN&M&9?CzXCdrMcBkKSb3p z(7xQ@do;lX`x*TOZ8`Ni}w@K;}`oH%~Kw~3SAxNXV*LfM=- zzWRm8_75CCakyWfV6kNK(-KragUAw#Pv{>o=qK0Nx zU6xE$(MqTnRIP`87FDaurl@L4iJzTL&iEtgz3sww6aIhl5!*28t+rjiyOxx06}I1z@9=zJB{r+g(Lo+a9lVg+$y|M zxL0_i@K)d<_JlE@j)=lP!@u1dBq_%0fZ^WDK8tFy)ksq4^$YwFI`IzCy%jIKIdnTW z-Ewo`=E#{{_DX7Z^DQ^o zH;3Nxtnj$d={s;brZ-4i{D?}tqTdLfY)yHM2sZgpkCHV;jFEsCdBKz@!;F&-W zXtEAvMVJ!ipr2oav09J8-NKBl7)BB{`okZV8U83~wNuA#`k$LsQ+e)8(0f0jC{Lj> zlJLn4Ph>S2QRPB-daWV9!;l{$U|BOwt*M!3atZJ6hGUXZ^9&0^*}@x-XNU8-4Q|r? zZ7LY;8|0#Wi;UM`Fn78sRGn@LPv-?z1>++y6*kIfo;LpuPl zJwJxdTf5)ac}B?Dek5qKAEeYG$x2N)wDLh%DOxC7YyVzSa9X$v`@#T20@;d^qa>Q{N1bQGqEzjWc%#Kb1lKpaY}1jnoWIV?ELbFe{ngO< ziQ<9J9AF!hbZ3(wx95_0x7iYJp{s;%v#`P&Gp@lP$tOHOLP?Z0>86`-9}?*0#hs-5=Vxz}as-QWIekqn?uy!#JhSh&i24Fw>9)wdI12-3Qj4FGlGrC4il%r|Vh}mQi z%TmzorEBW?vzthfqvXMy@K_BP<@^j7!3~QEP&W}U3-i_!!!@_K>fcTh-4inv8fdid z#6-{U#P+M+#YJkH^47%L8ZT}2ujJ?PD=hC)1Ms_*^&jKm&XwC^+gFnLe6`=cP=?}8 zZ+i%XgDlF!yh$2vKVwL6eCCrg=fdgR8of!Q3~ zQhPSR=Zzy^a*c}69jXxx{*+$>W2-a_M+(7(|L5U{6;&OCVdbJ=Xk_x$pu54bQ1eqT zurwKze>#hxC=WB5@L2a{;erqWP1b~~VZ3)E8~-MG($HOL*37Rwo=wD%E2--G^0k7_Q^lOqx!X}K*?h~onFMjYA{}}RdiEYp9F4qjjDt$_w z!D}7=YP>dElSE6q$+ax^e~PMfwW&NHNy#Uv2c~vCn*`W)qUN+wQ_tqFoSl;7azUB3 z+$}e=8NsMG-mnwg}jN zhiLz=#+;fjBG4@aznPQ(r>y9|Xvrc+-~E%o7G)pYkE=eg*x=F*MQz( zaf?$TMpa_$ge}5oE5@LS6%pfx*Ks=swr6A5;ZaXGBe^1O;B~f7PedEVsK_SJg)KX*=%QNMo ztlE+7+M0b5^spi;A`tPk-}gUZ9sw0I`>~Bni&2nx+0fC(b{m>yn+O5I7+MiF6y4C3 znf;PN4U4FjK^19#1Ot2$tGbGR8?#P%I~nA?w3ECP zw>%oGFlJqQvUvb{f#^NI!D=D3VkN0uq1I1EGvVvd_fCp1RhT~0B!VS4xTnGvRzafJ-!(#g5-!jwmJ1?k9*LQ!RPS(B<6#L!`eKJx@e#oTts(2v{En$a9hV#FUC1M9G>CI zYYg&=p{=eE*9y>B50W+P%wYN4xQkD_mJdS&Ji1Id`FL2lQL-#evn*-duh4=d)0rY6 z*OSvDm)RPszyw85CrV}*8Dp>Bj~5sSHFnN#>53v51$0YWvmptmHF&Kg2SZo$ewiyl zci)@MbcZ?gBiyAJWMhcd4Roq+V6wkX8-3{@Mcfh{?K6kY1BM2mU7)mJNlis|ZM~FW zk-sw|>6&eY#5D)V`%HqmDt`yR0rnXnC1H5moVn&hdj#OyZ7eimNTp(WG)O;=@ zBaSgt)~6j1z9DP~2Zh7Jaj-J)&dvR!KOwgva=gj*bpX+6Q(U8l`$>o~+bA`rKom5F zTW#8I*&_Pdd(1jzTTsB4`1HiKBIDGnd?O`_#2~R$CtN66&HWYG)!UNNk}8cEUoJH~ z7uZ(QZ8`L&4p${=C}!k{W*GTEKUMm)LHt@tvnn>I4MX}G%Z{K&q6{BiNpsr!W392| zI7bz~th&?tDwr%*8;1u#g5Hw z)@(@GwR9a!%^>g;7*!Rt2WztAIw)6;E6KG7wE_&e74KQ5Neq5`LC23lU)nL@l<*GW z-NFZjkLK1gcKX_QdSHG2FnWCh9e3F6^{LWe8;jw3n{GRwEX@H^smo$hF$)G?-`GW; zD0?Z5(;4h;J1cFmCf;I*BY7AhG7_;fBoio&mMR-9O>-4;LvllOw~69vT9Z9}Lz5{0 za>F)rr|j?#rdd{3@wm*1`9UmicSPEKhlYO+@UkE&eZl4&hc|)x^W;(E@HQ%wiC;3 zGmcJ_DzRn7m6C0{A*QUVMD?j@;?-jxj9yWs)b``LN2aIhQ3VrEg)Z1TUSq0Mnre73 zTC_sF(WF%q42SZJS6Aec6@p%rL#re!b#JDuD7smt&4wOY3d@BKeS$=mV3eSMos4@r zVeXbyu@`q^8q+Rq$Loj)+667PS1Gfce;Q-NE1T}(jh)Wv{q9wbxKgm~LM6T?E*Bi9 zP>#P*F5O=)RX3f**WcLLIQ{xX=QWly-FQo5+Oe_%lC6-N%fMZwI?!XEhW_b(;jN&% zenj{Q;h8L}3s*_uKp0>CgigG3k&opvAdS0|ZZ;H71P7-|FhDWQ#({@V_cxCFbdsY9 z4rlsTAMam1ugK@H2!|cKr?O4bd6DpkRrzsz;&EAhoF|5oclZ=dT5l^kBpa}+b9^pG zPNsDDMS0+3w@2oZeXnN+9!>UdTO!Qg612EPqk+gJKZY^WCf}-(<*HypzEfHWBHvYX zP`pKd$&)k*GeUbdG*K7ELMy~9DkAjklKO(8id2D`p&f*{O#_ANFQ^h+6Ir({X7%fA zEh<(P;%?CGi-YB9e_?uNrrwJ6y@2|*FH81sT40#`{zXD3!=Yjb!q?kEaZ z$0<2E8Wo_9{Va+z_tM>ov@=l4_l>2~pXO?7O(s?z*QIeXuuHgbUM3zH4HO;}j<50< z-2PK}Il(BeD{_$rW3i^Y#SXW|5@CBZRG4Qx8%vC>ApmQ9U!n}g&N%w8Ji%z!u{1g; zD!4r(Mqo0xaC@$uC(~PDSZWbch2dZzLRl7L5&ob+!~lkfRYC^I_UEEl!cB$)xF?GE zU5kiNgbT7P=Jm=PvnO~oaMX#}EEALfOx(8-lZP-beQ&+DyKsGYJcv>s!h6Qj`akaq z>G56KYo5jnV`Kn5BnL_nF91_Ir8sGG{kXv!*v#|KFI}?;?`FtC>xceqE9j^=t6` zWIm6wwF)!BK4CtIOz-f76keil!ZhkA!0a2zKMc^G<724j(0VL9$9^zIs8-7bKpAPg z(1mYr1@N1U2Qa?RXVLu2%y*B`r)OYHa87tccs$9b&#<2DCb}-mq!DL@^(4GB%eK*O z%-JOAylE088HE&2aj!@I1$d&z?@f{RY{;j{yS@DDk7CFx0b@$n%nM&NwQs6l=Mgte zj`366RG#5yC%15)F?2_$S9`JN#mt)w&ws$g6XJ#Zx$~Hs^uo6_vsGU7|x12;i=?ShD5E~fq zUQVVaC$rCa@-fCu&H&`--xC#g{Z3*Z`O)C-xA|GXuRoHIwS!f(YeU4Av#J?Oo@cCl z0jqd{v2$x{Yy0v3x}fD`F1CrYJZw34Si}|fo8685q|I~8u_%qBB4(Kr87I#xegB^w0r-X%S@Mcz$0EW@L2Mr$k#?5jSy{An4g6hiN`F?yr3X zt0Y~O9?c!P=Fr^Sp@vMUJa=TjYtJ9K^60W}29_eJtEx^^VkuU1f4x?oww!Xf8PzSv zwsso$E%++c)%wPjCpKrq%EpP4HB&B#mZ&LfDrnT%H+H)R<BvC zhpn{gWLcOPY;j8AE=yw2Xm2nL&fKER34k8Vp?Qy2pD5P@pkp~YUS`Ce18V<7LdfJ} zJD#15ckr-X0!jisi@B+tS@$idBHAsrY&3f`caPRoe&?I1^oFw|J%n;b=@cA!aoI1`Hut_{(9i!>+mIA-O}A1^ELpY+oMvA8ropAlXQdi(+5&B9xR zw?jYrgTi}+Cxstn{QgJcp`t(lx-|;!6XJZ6NV0aCgqXO@l3oJ&UK%9%7;I1gnOin%;_J$I&x)* zXV*+*7^~r_V3=VWIc8mxH_O8AWMIn=pj((x{-6{bsDhCh}3(|fB`nl!|b z&r4~Jfj7A&V#9kn`M>brC+gQHfkWy4f7_)UVjB*|w?oD_#@ohN4eO0Ed14D3)wgA6 zlh_9HtB|f8(zp5c_Y~vs(|haNpy6F=JDkvocE)n}e?_bHFQUZ`^{Cg3^rx5Ip!+f~ zp*dd+>nFEwXN+Bj^PHn=(2{1y{x720(cJTGF!U6#^`2sY{lJ)Z@c_H?G>H6PvjK{h zqkirud;T98SuT8g7h7RaKc#)g_X`gS4-M(3PY6FHd`kHF%d`nQAkxjm8lc0Umu3M@ zQgifD42NCJg>JyDgC~>!or!kfKZ2?7boxKpUYKMmT=?og?kT5CZ|%#}Sa-aY(2udN z48`C*IGV|NI1lVGw>?kQ~e9iyzCE4le zm~6N4_wNY5EBt}*g79a;e-geS{FU(cAbVMwiQop23)JNfI0Z67ui_)46t zd!ASZ(d&W`u5|`qvesY{+c`)E>g+$QBroW}%O;jNAOOlm0p3j?X9Ct`615Kn1VxOU zRZ$G|3x7XOnE#52>|FY-L^89l>H7Gg-#;;tZH%dmK|z-AHc6}vRz+4G5!nGfK1Q`; z0~l!-SPOrpt`C-d7UP=b8CV3pbtUtUW8@J zQpTfW`gSP0_Rt&BQz^9e_1^;@8~jV>`3L{&$2cyroLAGC4JHIE+hZfqjBFO7F80T@ zxD*MKO;R{%!y{*Kf$-TgY@zVkR_pOC_}Re&p-s5XZw7elY^%xdz@fjUg6AMO%(8i> z-ogCt%maO5x|z)i*`H3-@m$$ItV)kzgyD0h$3k$PLzVKFr2cRk^KATIzl{X9^WN%jX=8a{ImEgnP0-WB4_BY&Sf<9(Z#gFDh=D7qMLxayv`1Xq5P5vcX)c zotx?YbDn4MEA#nXdf5iK=SUJi1qYlfajhMM9u5HSo6|jUe;%Ls`T1m9!E8-UCE@>I z=2nDwF24{AvD%~qyI(TcS?<&pr9&0i zo`lCAMKmA9+t13X^5dxlDB>rQT~AXOs|o)HEi_yYyq;gKg&4Hr{6?I8{=Xv!qQW6$ zmFFPDx!OxDzGdxl91mVgA2q z5B^ht{p1M$k>dk_)!D9#pnECXStD8Un(eLL-UA4>drA(7Z;oK<^7ZT_mGn)-6I!K| z;hED3Dcr3gnMgAZq$_J^vd7O+=rh8 z@6{Zlt|nWTVO*a`+cb>BxYzAPs=i;6-VYxn7R6VmyHX z447td4HpckuF=)5Xll@DnqpVgI~TsKpYzX=C3>AGJ&yq`&r9NU^iEYRutAbE@b3NN z-%dN}`{_WW?@(RWp3_-v`amw=;i|WBY4X-kdg3gP`x2um_reUv6_151Yyeo(1mN2l zsP@`H*naxjbB|xU2=MLbUfnCg4}3f|2w4C_$Kcs#vlySH%=ah+sFV`MCV@`4h-!ibw#~? z#gq$0?~3}NL-i}Juh*x3fnPl&qt zcDkvZ81mRMT;SA0cR&w4Uw}5c2xvPDYgR#_QG_Zoil|bs{%YjPo2Ls?`}a>3rv0?= zQAw)KIfWpKYpz+goO%@bwlh~%*>&5GqPk<1O}7?@egUpuJMe8*$d4^%S%2{|U^$<_ zjw`b`?7uy7@a_Bu?@12I3R_aDkY;~fR*Nksg$sHUe$KYw=b2_R zE4Nzb_*q}?RiF=>L0uChO9imOB};6(eA}F44KYmzTy(C{e#CN5TJDD^{g7*&bgeC@ zbz6D6YrSZ>9}&fmu+_nyS%LP`s+gW`xjtXA`aBy*Jup9?k0q=KWwuk_kvtUr;oUGG zaW6~E7Dqg&7&Qaj;ZQLsa$vO|WivdF(nsL@SV`PPR_&A0?@RUa6`?KaYc@DvnqmC^m|0>0Yt%VrFE?>drv;=UXKW zo|X*w>V7n|syJr#;hTsjd}Q-+!?@l0@?uAE8=#{v3CUtOExlQqzICy=Fi2GOzb9)BqiC)~I+z!UmkBK(}_dgcosUO)Q~;*rY< z-Og|G7Z2?DHz0xelVm|2A3)RmN!(wihs3}W^cY6P^DON)J8W~Alt)DK#eVVkK{lC8 zO7znr9#uU5tVE?M`Zy}mXJI5$VX`Okcv<%L_l$knnSlylKlBn@C0G>~2P?#;0Ox2k zC3Mt;kgY~MESwVVfPU<(@FTm#OV8LEF9l$C0n+#uqLyT+vk+eM3%?7`uat91%?0{=H&5G9&=gbN@=ogDVHi9sYLuhYJ+ca(L zFVW5xHT8ap7qLmOTl=8_)r&<;buO{*{!maa$&LerEV$na4s09<*#1hr!#&*YX}{fW z+vun%%(dnUlA;+BFJdF+_n`6BPoJ(M5Xsl?cS6apm!&sg6MlnK97~%!UUu4~J?KlP z$wo92hBML2MGoA&YbN4*S|>i`RcNIpw$_a8&p>;dt#&6;P$GLQZ3nJtX(O}aMvK}c zS?M%I$kN=A<~~_9?pH2+b^fY_ib_4#)Lv_yITdZ+akcxymg)FCH;QJU(w*jsMdiJA z-SC6?s~7H*M48I^YwOih&3U>$PZV0&LcnIi3@%*1icxv5WjnXCR7-2?M_HCG^Z|bE$MUx^QPL!W2-^ z=Oo1l3?rBg6j33;^-HTay7uzM{<5NwUnP!rVqT-7XW6=04=sagM#0r-yjcB`D5;Vt zmga3yk#L^7dY~35fnE?j-FpoB1x+Ny*}!#lLu@Scmb@^YuPOzlzHfHlvMkBO^!(-J zeFjm8rcjCaQ@=onNQgcYN(zxA8qb$xDLPgzXd>7|0$6cDdlPA66O^&dn4PGs+>WQ%$}f~V z%qo?ZbCUtX`BZQfF(2Nb?URgjHYtvFcuIAf^!U(+ttxBByegKzI4idM9`e>koIgQ` zn45GH;o&999LNzmP+PrLzf4=l#LX$u5!F^aP(RN^%<9keL@SakWq;R-GTg;oW#IT0 z5k5po5uyC?l8F2Nu;cT&@}G)gT@=~je82cY3El$_NaFJ)37?cj@?qSv26rKXqx>K= z2y9>QYU#8{WZZc|l%?bS;t#=>Ra}uy$!7>2B|QHv+hw3C< zl>UZ5S%Monk^exFu73k!BI3tE5NVNMjy5!Yqco6Xq z37{`Ca{Q8rM+wj0o?xKJ$FmaqWW9?B+x0SlQwbPJnqf3xlR^J1b(&$Bi&-LVt0!aP39HLR;-Q z%CfmdEa5FnL<1%Kq9gX!E*91oWLc+}rcgJlmH&^rcY%`RstyF>y%+z8%#6&)$jGe9 z%Bsq&%Ixl{uIjF=%&bfECCkKV)#fh{!t8`wFNtT z)CauSfPaf-#@LeW+4X70XU(w&duJ`YXRu*?JiF+4&oZX9_rCZ?Mpk82x7xB)9U1?) z@80|FyZ65P?v*;-I(Pn-s;US>GZ<@+g zayK0E^~WN#6IXN!gBIo;36hqh+hmF2NOzQCe%@tGk|t=u_?S_k6OyE{`qJuB-J;d` zee+d%QI@`}=kxlPCD|)Q=Co|P?r zzt2UvJm6$-c67udw!sx0EVbrJ5iF^w}kj-CxTN4|N% zhV%RgF2cJ?Mbo=il&gCuA|K}jnG@aySi(Gqf{h~*=%NEIvm2p9JnnvuyP**y80g>` zo`His?uL##raer%-BrHY8FN13oWW6Ygs$@3Xh5M?GKFJH_AxjLVH&SEHVSEoc9G3b zm8Rx%rgM#B=13DH5#X&9;Bq8#JeC@bSR07Il%H9j+9z&qiuqO@+P&qe8Ov-S=} zODD26YsuR&8wF368>jaa*nuw*UMsv+ctH5L@EPF(u1!nQTS2wX&&-87(!UTQAFPQv zseo=Oy+Rd*{@1Hb;Zu8MDxslDjd`^CzV**R->R@W)T5L1?Q{d>e6{~CgtW#X?7uik z_xY<$)O9cW$HjjRTFwdA2`>lR_nh!S;pc_V3cn%zKCfm#LKmtV#h7DAXPB*z{mYcxH|MULwbAF(AI@JLDPAk z@CeU{`dh-kkL9;|5fal)c=KaAW;;v-)V?|-eJtv;VeTY8u|{fFhnA-zzAl5F#}nzn z$NW;lBb2U1OFK`*nBuWm!Gseb)u&>$ z6(X+KR_pqhRI(Tg=_i(4NjzbwKgeK;*#3!-3u4TmMXa$LJ)5BS6xivn7S4k8@=@W_ z(5ruUY>n$hP2_Ba>uOUtQ|r3A^sNdfVm8 zLwJYqv%=2_zb1TD_zyePxL(wB9i?zx9r})^b-nQPj&$t3F>Ck}!mkKl0&D5t#Wb!L zA2G*PxULRKpWa&QdckSAwbB*FNH1m3`g_9v_2Q;9p990ZzkD5`%n#%OuLN7+3Ijjj zQ^Z01AV1)>dxD^%{=f~gZFa6EWBd%!bxMdKF-aF0rJ_ucH7J(%VWJMF4MM1{QhQz)#b?JZ)!@TqS;*90Gvssv&*M`C2TRzO2ETZdK6x*Myse*9dR%eQ#ey zO)%s@ENpGgHC(-s`Hd zrW$R-ZsuT>4ZP^lDbzcTO!(N)`4b>ENv{7;~#;aVOeOADND z=czkTDn}_sl~9abcrh!0M9j}tnReTCxuz@LWwx3%O|La)Csg(0S5b1jRb$oJeD^wC zbeqkbrq!AN2W)45`|4;1!gl&#(spx)SMFgn!;6^AFB*L?(jDG`MLQ^{gA!_kl$Q>9 z;%bpQM(<&L@DE?yIzo~a2j1%EFlRsK#SS_auIA8xKH@LQ#O}# z)y|H$X2-iZ$V)=Mh8VsOBU_xZc1W%F#0eXwRO?2VC1=CyQaAGzK|Xu0 zzO%Pvayi4X8mr}bBBWM5M#JPue<%*$5j*LRy`Ek_>^J`#;qPDMUh@}7wSU2#?AN^@ zTKx;}o4?{}eN3+(=D*(*{^y`1X6 z$rAdN5+^4{EB0neug{oK-%_)G5lWoxRQnfPa%`>DUyYg8G3M5HrrEy;$^2rNTOUKK zzY64zXq`2${?viW-u?oQ zzk?J%_#y=>ZFzZ>18(HT#`*{){t67gCnCasjkA&g8~x&wferDK7gUWu9~EN4BaG@y#0S z&+{L=Oj?pe*O_#9j))>BgqNt|G*1&=DqX~9yr+4Z<28KqhV8urkWmitft4n*>P);w zcwJa);vDEH0tuNZDAFF(c*pwo{Q_|g)3DTFw^$$nCj8$)#&L)l|6hC`GY%6+6B_x6n2tkce>jk)7_(8u=={wL(6v$c$LL${~fTgqqR6| z{ySh(3f}?SLqm&q*S%6?QSJ>~H?k^R54`dQ;a=grxCT;g@seW0jDi^}JcdC#VbJg5 z%1<;FoKAlQ%TTsk?IuXMire&i9TqkA(v5W5VSTqjXrFp%{8o8>V)Pg2Do;Xj4!4q~ zqX?*2%S#6rt%_>=-QLrCxM14%nmw|lymtQ{r1hRV_|Lw(4a3QPUst)z`ecsyLc(x0-+gl29-hc)*=mC%Ui#f<*)OCI-S0Yt1<4(=aG~5~3E#-=~ z9b52+3zeP8xta3J93}!Q)GD^ims+ye_iMr+ULOzozLYT|k6?725R5JW>9m$etWT3# z3^IVD=tI|-nVs^W%a$XBs%uwj11%9s(hZ8NpcL1iq&I1|P9aV|)FeY$zo4E8x_O>l&1((8CylvN& z;}`ucn2nWw?5-7W@%*6oh+!}yE?X75Q1O(XidBNHC(=6<$(S;vJl`q>T`EX=gKrBf z(SB?z>ov{4J=khBolF%9q9N|BSZkHSI<|VfPyuA@6^%DZI`&0fvUOS3@!xAD$uOdS zN=;!}bf__HVi$Vkdqz9~Pgo|kV5Hb+S(RGhcKpW~_5D9My; zR3hS>+1?OBHw}>@Doa+y^E&&eB#5Np4TD&xZz4WTr&3)ODU(EPx+pOw zF-^vW{E7k_N!A#iS8*Nkjg+~*BMDa_?Gu=;FB0*jN*h7CQwy%5_EIakldwk z&-Ph?pJP>qrI5ISUeYyI!tPPp^Ughd=O0ItHD{FIDo@i!=#hxO27ll zjP48e_wEh$_EEMBKd&uOQWHsw%oF%)QC1_gB*~zd$RhSrP*CLg@<<|=Y(+FpadC}_ zGKv9NWQRtuN;K!VIOL;1Z)Ds%<#`NJGr@890-tG4c^tNzSys|B)v4?0?>TPDW#N@o zui&QbdyQhQqnO1{0zW|7I}vk3=vgz$dgPn%s&2A?>pM=_;PD_rF~Ic@!_Sw zF(Zyov`mU+@5Ve%S(`&yk4hx2p4pM|xEv7Ab1w4R=R^&dU)1hn(q8iU&~f6+lEsX{{Mw1k7aN{5#Y&Y#GIukxII!IWGoD8R3W z9`wgQrIZ7L$&V0_k77kNRknj30zfZtw11JQa3`H&1`{hQ>^uOd`ygM$p7d=F_WC!G zO5Y6YQ6uh}0*+F*Zi&Aj*f@qrV76|9$3`5?2Zh6(vW!kN7_0h&G-BVR<;+sf{D_a= z59Es^M|8~qp|9uca(=#ibI!<_xeQGIy6Ko^#kh$hyluhgP_Y%Y)Ua1-Q*XZK)v}gT zmAKxj3Nyl9&|FVprrj1OR4`x;JXlv-ewq8hL7sK36FPEsK$HhefYWG^V!l+K&zEgz z0E}FkPWI(WCj31-ib$`xM^SUC{Hm&M)hAZ$>7uIG6-{2$O`~F(k8Vw~$ghL^ja~VCf@gRw-XZZMaC$EHp?&+74zHUf zSyVMj%&abfP+#Z~O_gAnzIDND8uuKqi7AU(el}pBP1yQw!#->47QfCFsPOboZ@~Y)y-#?CFjvds2{(5(&XZ~!c}p}LSez~05^y^oH<*VjUM{Mgn=5~4ghXiIuyX(k-Az1f}*%ZcP? zu?jGLnk=Tjb-~9;iWUdQq(vfE{3uE!bHtCN#s?GG=_7bB)65_VPh8Impi&SjFPT;r zRKBl<1GYwFKGL4g1`H8nT?~QyCKBSqT4}0OcAPT&q;R!7F5fmtu%K-eroOq3OUTxN zHAZ6TPM!wWi@}R{*5vgQg+v;$9Wd-!Sq#2BKZ;>-no^bJ-`<8>l^Aa7!X9A-`qFK} zeOuvZnzRN%_8k~pVkm13x^An(rlVo%#6$b3k*eTByR za=KQ^6->=wxqXTbI)zoYO%fr)&@=$;@aMY)K0(Dc)JQ$)mxx!f;oC-{>6?AVz7%<(%~#zOE>{qC_T#c^8wop~y zTPLymWSmk<_Qg8T^`xK2JhdiW4nWxfl{Q5w4c*H}5#d4vlQ@MXyx@UtbXXe0@wOvy zh*=*tPhri#>IMeYZgAY5<5Shc*gQ9X2K(DQ!hgoF(1wg^fT*F?zv{=AC_X9&<74iE zp`JOT8k_3~%=+?3q+tYI!zdURx8p}S!H-?xdf|5A?%ioEan%BkLw9Z%rJO92H;Qu~ z49)awLw)D>vrPMOl%UKQhpCu#E5!BBz}A1gaBqgTlsZmZ_^JAOyVR~?;Vv67^O{6% zjHT`MFFV6-jy6wk!xTvwb!1F#a0fhyIUSvJl#HVDmmLSI6jUl0vEw)xy;G@(%os`5 z55NOp?K%|JBLLE{3oT!^uWc;fsuUa8?`) zd#hA1;LWK}_2b+1#i%~h49;(k){2LqJTVHGVeL4R*4{S{@M=NZebr5=tBSV}K3oAm z$N=Ww|0#M+|5TFY9%AEQ1^ps*%oIEVzL>Y^9Z2nim;f4{;NV6wwFtV{30`3%^rQq1 zob73xc7>+8bKqbJJUtl>ma6aBGL&ch3UaXdC5olkLf6k`b_3@Pm1i}8O*`zELef`( zYfxSx+=1h+?`7GxQA5PZ@@#FK^n4X0J>+GjgQ3hdVlQ_j&%8-`|#q zzdKc1u^T1yYUr|Iy&1h7%BvHyH}K8e!Da6i^v-NU=Uw=0GU!7muLH~duO)4C$bqLe-FmhZ{hK2knue}+t7O_ zexOW3ACI@j7Da62-M9YQ&Ip{8yVvc8vZ;1%NyWXPCNu`w)?+@TNY)lOoG;&v7ik-c zZ0%dhq`~81dv@5dBHLg(?d8byz+`*o;+~gD#IJ;y9^q}7kD)W+16oe&R@pwFB(~h` zJVEmw#Sx-&<2Zwkhg$N{R4qj@0qe2!Oh6{ISrN{0(r@d>;sF`ll{N3vS`s(LX~(=z zZbN-4Qg%2Q>OaGOa-|P>zCG=O(p>*p3O}7uM=5n&6%eq;}-(pCLZ7Ic)ESs7R zNK-R?YPe?Q>U!0-;iN0%Ys+N08xd2d_s_?0g|4?DY@N;<9QTr$`}~f$Gbsyh*^#vs zq($*Wo+lC#oR(}uSYFv| zl*civY1u+!$j3LTk(ne~OSiVp7w;w8yS6)v)ysw7Q|^~tb|_PVN*wh_1IJo;cAuq!~J$c5;UXV8xG?|R25u*g2A!8uBxBBaZBd;V20BV_s8Is zHw?Qe`F=uvp`Y>=;dPhmsoaKJcH+Oxc4r0d%yfJH&1HBuJ*hBatN}x#uvgEMxlZ+349gBx7$VmP8b^%%c{iY{V?_m z{aixYh8i}V0;eBQo(*lJA4TTTMen2WH5oT!xcRpfO;i4r_x1RC5Jf2R`rLelsT7J; z{-E!X_u?x{o?R99N7t}^<9tv@k<+F-K` z(j36c0CxjcXbr->?nw4{&RaruP(_j$>Mj27p$x9s!1Yt!qAmDa^Qai-Bss-LE5c#n zhMjPeQt@|&&uqw_kjDCCs7S4JNzApNKMtx41g9*%$V zuuyX%BlFYsb{+m64<(6XL1(rW;h$ldqE}V>f?wSjHjkAjCp-1}@rrehhv(m4sCdhb zVSMtOgG*8F4Ih90IwD+yye|f=D+dr^_}HM&F}WPe9@o8pc6k>5)~Yizu;XfZhaT37 zMeQ(k@{b}GpYyJ~jPM(0?EHji=#T1#IFYw2h5K>fR#M+zf?j*ltLyENfyHT00z~AODv_Crjw4pwVbc79-!Cs!3$$NME4RI|zsGJ;b z$mbuOdgU8DMFBPqzrkw-em`dkk1vGh1XmDzSA4oLy^8f{3M$~V8_{KM0r>d30ef=j3Pu`%JvG*!cQ3H;FM~zGW zU)*Ou4e;&}7Ezx{f5r8Bm(uaM+V!Ii2U4duP|{z{omLI@CDl+ja&NOLnnJYW$6q-F zhYbjnq)*5?pb;8-PPe3AoqFZew?nvC43C(JXCy8Mz!ja;;6IGtXO18Lnon`i;D?Z1 zn0j=o>CqH7u`x!0uMfcf;5D%4<01yEL)=c23fGXg>hx}A=7+F|eX!_7sZ=dXQWsUp zvZ@uu_)(@bxYI^SQMaRN=ePK^)e(BoqKgGtE))%AK0`R1N2$@7w4-b|XT6x#I4__~ z+anx=9x4p5(s~czjZ#L+%}y)8fo~mj`;{$@mi%6c=xPs`R5g04PNeJkF5i%yL%{iV?W%PIbJe)X4b%*rPmeb7w-)ci=k)2SOq9)8l;rc&6Y<1)c;0A=xN*_A) z0@eeU-TcqwUAaIdMWZso#20NQFCJawNozEn$W&7#TJ=(0JmqQg@8he#(a!w{mF3)8 zb1f&!w8Z33$m|C>%gVJRDw^uFB&tSP;nS8iN^4vbYAIzy6{Ts_6sh#8q_*DSE^s|nHXnB1J@X}f9cv!hd9v98msCib94238K`@ zo>x62ss3+h6x}o@X^bJJw4Gpnzpk_lnJF`pY7`kGmZ3^B3X_eNqQ`v#3Xct41ioCy zIhOgPg6ggQj7EzBiB>Hvk>X7*r}j~URH~riC~w-bKxd9H>zn5cmqq*pR|7Cuy0QRSvrZ)9|OM>aE6kv zI0zkIDbF_!3jO=lTp_0x-QwvGNKraTWqQ*Jli5K@d|J&ZN=}6f{WwS^0DX=Udebay z7WE6F9M17Z_`FGY8PCbIGpzRFjFvz#s3S|fj94&C8MCy!0} zw}=v;MIcm2TN|K!;_5RG68$$*~_ z&43(T;z;uG`a>VDip&Rjo`$?q{y#4Rub5;8XV%)X6XEr27G7igyDPl%(+Do$HWRO( z*&SYg$nlE&+H;iwZwoia8>D~#o9~FYbC`J}KY=JbZcapKE?jxq>sD;RhC z!>HUy%K^_mn;;X=2DA!p<2lU`?r9GF@bpUyP=+#dfpjqCYM%IRvCx~R#4|2b$~-}d zqt<0+dv2n_dCPHTpglH|NS(;ycNHSBbuYV}ao*E$r`H%yzF>&X3WZUj217&RQ=;hk zoxDF$+!U1t6My7Q2q@mq$8d3gs58+y$Ydq*e`6a9JfG)F_=<*LSp_c!0CwJvTHWcQ zNtSB)cQ8%v3ZD$F1N6Tj-{@2?3l8yf@)C&*tSz%B(|A#G_{>}5}*AlJIqUlR7 zpQb@&O<=0s(euF|^9$JtE#EH(ftwKx4IZt3BhO&qwTidk3efLC9#k4e#qNr97d(j1 z?UZIw`!Fxa0?(ToNULe|*B1f@-ZBP@xk0DbpZAP zlk2J@N*i8_e%fo$FR5Ny$w&P8Gf?M5)=&Uc`0rEG(zoI*u;Vjm!+dtf<@4E4Mdl^a z_ZQ;sj_=mJ{Iz^tE2g%_NVgp@;J@~sOfKAwXf??*1D_T)(DN5WZhLe14HAVbUIE^` zkcLC7e|FbQ`t&ePcFM46+Q0VlX+J9e`cbkw(%nDLc{ zd_`o$0~5kYVO=u#P^c@w0-xZ6nh!**Wt+R^gFgtDQL@B)@7ozO$T8V9#iKfS z+~{cO1*Zne?j_hYwa?VPv?D3DaQ^(}XhG(|KMD3R&Kk{g_)qvVDConB!Jh_y32RMx z;P%2$mFUz^10*sB4LI!nO7)9=a^EEnq6;46`>{1M&QIV0CN>o591}(MNonECnN1Ja zk~ei$u#<-|8ek^(B|Zo9k~9s^-oWHQoZEQ`YUe^i#4V0GC?S%i_u5(!w)F$kC_#jpTnutf8u;`T2( z&2qW97iTZtSqrA3K(^#e#mpPJq*F7mD@M+iOq$bWNi`MuKcFph3uTLyLZR|xrC{KU zCn46P3wt%&f8E|@d40m4+L~Bc&Idm&d zm%GQ>J)1`>VUXR7yH~`3kU`X0cI7PsgO}0zu)7ub73mNP0PXWI%M6k;(kDv$A$GVXH}TNde9$qxu6I# zS^IOa-C(EFjyVC{PD`nC2W^Xj*-Bg7{r9xT@jvJN{7fuo{737bs1t>|`)GPqhHFBX>os;K1h?~nlafJ9=_H+vxs@&RJU~Q> z@WX2q#B;3g!#J=+mUm^#Ebm^rq}6tG^$5w%0sqIkNgPtOE45n1uEMUV8@b&58l0__ z+*-{o)!>|F=5n#T@Nj|_%ahf7b+T+x%_v&=LMiK9WaCD;;!kgtEq?2)?A`cPzWUw2 z3flb0T=IVm?J#k!ohvxsM3ibq+#WBi6h>+aBJcEqm~^%>!J1R<4fw>O`?&UIHU9K3+M(6E;m-Er&q6Cod*3;SM0zS zjyQMXx*vy`Mn-LVu1RxGHDt7GU^*WW*LcHb&zNB4X> z#QmIS_!|8YI37)t1UzfQ2+m~@;=u%vM>9~{$soZu3Eo3 zBHXs^52A()GR}>}`G=))8BE8b;-`Hs4ck2ur?em1vU2o8@28jo%B{& zvu#CZMCRl6^lGErehnoOHC-pb0}SAj`8nvI7IaV_8D+PeA37t%VY*>_y+H;nR;t#OivAqrC?N#;*k^Mx*db2#~pKiOn*CC>#^my&OIAn=j>nb zxc}>DzO7xUQ9aU0`M6Go;UkF;4-f3AaXpI$$~Yi|*T=zaQlrSm z<*r8cxSml0UGijh%PVe$R}5N0C!Oq_1ym?5ef z$`C~nCHj(JUlOTA;GQB3+BC(mPl{pz#&HIHP&Y*w$QczuBKtdXbTKvthU5D<7#?$c zAA$Rgt1-GKWraV!XHhGhU_l37_I`>uKiF!7l*bz3lXAl!-^aoHnB)5h%$Kh8=uQ*u z7^ejzAlqVOk9ahQwHVgZn*JxoFy)qXX-+Q5bCSMfRkpV1)MZ6Epj52&OrtK+(W=4< z&q(?5xORh~(o50mzCoPrR(5LREo+uEHz!%zQW%7`9JXV5JCjdU4jfS6XOrVL*03>c zzgm*AN$}elz+i_-env>5Z%Ve)Gkwpc)?>vl(@3|nz~nq&?#TM=V~ z4T*W%Z`qRTcWX)}I>Rn4$^ia1j%iei33}XwaY(zN$c}8x?P;|GlXEKy?%4LM3G>3i zSoByHb;mbB6Z9O@5)Gg~Kf)MI$~nw?xl4-e$Tr=cV&j>rTM=sVFWlNN9-y?!D0+*ySVsc&;=a6w7 zPxu-5WMb|4AobC9GkaS14J7_~&4|q&+Yy-GCJ9i~(0*2g|H>ozQ8`GgS^NhP6e;ni z;H@_x;tsv(d+>7cyd>U;U%TdK5_9E=gmAI>DXCcqnD?SBJ)OyG@w>mo;6?7iPkzaWUk`60BY zjjJu+fg5sp$5lE=k-x?DpYJ~m<2XCPRN5=%^bcSZ<$0zKiaD^L)$d|$iVqyd z0Lv4M;dOlEJbNWvrXbTidbLOiq;J>D8?b__u-Y&fdR}(_5T|eB76YXO)y+Wu~|PbnFsq{r8&uNcY6mKdcJjV zk_Q1V*XzsgLeSrjRWz}%f)K)HdDT4!QTZ8f#EQ|k?*}V&(h#m0#iFsv1-&0o55N_T zSD#OSRxcV)8b!DgB%p$Ncb$UXda4*>Qa0@cWtiw+yk(PT+?Q ze}MXQ#`wr0vOZ8!g0SJ``&+HcqRP6$2=`0qs>EK7{0!P{X)B^|zy;7OH{5rhsKns^BaGl3@U?_8#`6Qa z{bFzsUQ>I|kj8WW)cQJPh?2OSt5JbGU~Lotb6|yZ2rUls^aG zILBD(_^XV)^{q%)xCCczO&-SDX?fqYhx&j!bmmtnz4u-kzT~##A<1n6QrOP$n|z%h zZ<3!0bue`11{SLySPJUhM{7L>pNt;Ir4EU= z$?V78w*i?rsLqE+h}wYXEa4enf7*s--(h$NLlJQN{Zt+1y)h)^cD(nYq}bn|JPiBU zGn^(FT#$lsh{&nuhv@fe7Cb8Bb3+7+;mk@=Cq)hX=69ku0Z5@Q4|Q~*7mvJ*)ZCc% z9ooP91w|-_aYn6TT;ujs>XEMcnp^^43^oz?M~A{Z<)1wa7yeR6Q@Ct!%x>OFc*uA304YOvO{NbQn}32<^!xh4V&i=wW` zqRE))*h)?lbCWu0?=y&4t1ptta$A>4;WW*!5mB6MktU_8S}f(MDr%~jW0dT#NE(q2 z802MnnXos_!YKx?7iC5lY$>OaNmnGKIh|8Q$)r?VI+$}O77RsHr>mNjZSmR;upxLg87~m}~V|v8Glen=b%WLJy52Y&D zFIuLJ&%nlxN~dTQ>nSvAU}M|$y8YgvdiGIUEI;FAMn(H!;D?es4pI&7r4W)Xb^o)m z2JuW;PvRN|`)sVuAs)U6Lgo;qQw%d;uduVRMj0xmal%bKYPB8VB3!c+(CS9v6}Y13 zGUyf9BVNi*jNr|C$!udf-*_~<-&-hmE=UBo9^{uDiP71FU&hj-WxMIhHI^CLJ{|bz_neIl%IU4=Zfi9$mu*dWma1V0MO`pckID zDns(*L5sO^hCAv0-KS4;z-I&5f5uo7nXHc$8^JmDk6k z%7gw4NCdZ;s`=(adIdUotPE9s2c6ol*#0X!>bz+>oW3kNq*DNd1+Z5tpVexm~cYgyyw_h7fB<0DJH%ysr3wYbsuk1v({Q z0LVOk^!i(;hj}OB&2UpGoOo}P(5Ec=87$vngsWXi(KINigQoSNgcaeH>r`b))Ua(D zyg<|~^H~HJHo%Hzv1n@2`(x&V%XOel+X|D;ib0)M!Ip%=y2&%3589%d22pRsbN|K zSEyTrSi_*(A^F4zej%uVpaG9og+8x#GKxQkhqnZK_8Zi<6X?I=T!=cRc!qP~PwDvS zC-AE#EgEM`>!rSR(8%X_HCi4_69ZVz;JdqZQmmKIFeufFB$Oc@>^ES(x6!btLH9~A zrscXEsyVA!Z6EpERIS`4K=i|n2;X_IC6j7OxqqpV^v zyC+GnyRMX+PUcCAmv!Aa{my2VdL5sTo5_@FSv0+C_cWajs=Q)KA|>zr$bp0z;LPd( z^W=|7-*XcTq12f~iVhJKi8v)H^Wr;VjpZnuL`!HqlHdAjv~3tWd>4~McCv-fbR{Am zemxjJY1+T-3ekQ{>u=|La6YgBb96%FNRnyE32i`*qn&l}ulPnFk-9t}uXQqE1SWap z6_?TPN7{d5a>Ymka6CSEIKxu%4ZtK1Y+NB8=!{B|r|g{U8(F3z?C*%u@6NOpWftmW z`-O!J-(p-*h*U6NQ5cNmh7&_tLa3Q}ZM%Pn?0~G1y1~>Ck(2S0^>qBCUl$&1Af7!r z9zBVrzN8a8s_aN??sfrReO6-glqw2s34-zbKRy2w{(e!=g(7fALzn{`9Rw}$7G5E{ z+3I!Oc4q(r4!5r2dO!ZbD*QM~zvs$IN9hkRs{?G6P7@>FU@uRW*iqV55Var{@&t@g zWVX*rk};=gqM_TOsOhRPAt`x)iPECPiZZpSLu|tAf+QA2xye{Ty?3fNU(jc}*YurS z_2`Lf+Gc6ta1#)9gi%ppCnTBF?7B!xRGenCC@Y0YMKx7zP7+nkklQ+Z&1gsxH4Lex zYO1c~L}sdgU){fU=)ja@!&@s-vw!?}x4tHeZ)hQk=sc6ao=?O|*0Cn(AccHqWZt$o zDI!XIC7MP4L6RsRk5Mt2fEI*U-l-bqX0h`)4k>w_p!6_K+V@u5oh7Qor#k&2aoqIZ zw3~UOK to@~8y*OQ=lMA)Qd8V>?KEnwNiAf`&o8(N*HRbu5J#Aa{qB|>AJ1+TP zo6!?EofJ5UN&7xD{C5|Q=LYwS<}ibN7xCTJvr|ydA_*suec-doM;Ck zeH5NwpN726-3%Fcj^aGxKn$)Pp8qrh&nI_-=Y3=H^Hz+!#w)R)%wO4pi|^!f^Ef^v zeN>A)UT7a?3mpu_r0y7_f52D*ocqSZ=kGBdw;RBBa4b|(Zrd;N`jD%9Y>VSDEE5^v zlf`;x%kg?<9HTb@54I?@+R_Wf-UK~itV$RfEQ)*Z38D2k4JZsf0x5)stm;Qn` zT4H;S9^K=Ga>Zb~7GoalG#=ZLy5S*Ci6PWixC30aonzeFlF5kp;g1+D8^+x z;$9!`C&NZTQ@v){X3p(YS<{8qfV{2(YMoZOtT~zrxZX2`dShwEuC^u9z4YUtonJr% zd?9G7^!)SBUm{DS&f|*O!V3CX2B;CjAV@G^(~Tb}8CQ5%=U|D-N*l&czb?XUpzdlg zG{BZ9KP`$BeiV`DL^%pq;3v3(w;2kBdyDe^BYm?p>(Jt~{k6&rtFKc9{kgE6Vj_tj zGzk7MeoCZxAW^i$#9wRdlc(#nFg-V8Hx^rhoYB6GE7HOart#vsB`>J8M2=Fof+W8p zO@HUq0s|7GoBnHg*A$BrIZ-BR=kif~PFqeoPu5B5)ST2p&wX9`ue>jApWiO<==>?nrw%^FcJT!8D)6XvwegDRt zKoF2NEIJU7c1+Ml5pPS7uWe5;sWM%OQw5sfwL^Fgco%1VxjMSwOP_YfcU-gw{tmG0 zQSx|mRj$<8OoclYp37#i3QElEamY-XgWzEHDfI~Gvc4!*{IIP5*st{y)B31pdY7uA+&&t6aLYTZ{^!tXTHPh_#fgNU*j$N^qb_wI1>B znjggroB6F|#VJo1%qB#`Urz5;rl+92bF(Ef4a1nf1~m@jD|Zd$NJiKN_@hWYRL@FvAU4>P$W$y6%Hk~mKli4oa?<4+8+$7|s`1w&e5gv#QCD*bwz zvE}gl25260V7uOotML;;Cqq3OzR=kYau=;!4|x$8GBw zE>yVA#R%>*k#YTODkg1$3$h3Y?snMWV_S$HjMH5fjth4R@65zddjx{`ekX;9kwQSp zMC4!?ao+wA-lz^dOcY~mQNgkiJcLeve+ZlY{;zE>Tz)@=Z-Lir_wkG4=ZWN~xuvii zfv53D!x8QN>s_@Y?w6P!?UyK!*pzFwOJY8nVIAR(IP2v{i1{F@AP=wI!fqJlafs)0 z$h0kny$y0WW13}m3^^K3`>=X)4s-rme7!SLIZuKqpH`<2@W2VT;AOzl%<>U4H# zda_ghbt+4g=)Gye?0M7fOqWQGXqr>x=jB{;K?r$qKd${*?38GSHFjg8p0I#&!}do9BsoYdn7BCVrlfLm<#6nE#;v)YFP z*g867V2ci!aSlF|r5|02jsFK=jC$RUsF&Tuk;9tTcA#0<^k5&_4Et>RhL0NXI6@?< zNkOYe?T^C72zz12KEAAj%kc4e?2iWl{|CC`)*WDMAKxMF);pAP_-)ZQvVDBa&*zgD zbl{~)%uWzW+(D;52qc-TbO!DvnD*pTVd~l3vwtedo*31?UL-CTKi1>| zTo7XKw}mCN+hXtUaG`mOB|pQ(yeAu*Zv3OAcUKw{WtGh2!jI?jdXCG&#Sg{7up6Bz zN^<-15j1LEDw{mA-YZo?C7*l(`Ur=GjGMW#BPDN;4OrJ z$UcE3_;_{8M|mkkR48FF-nNCrmKjL8?{-ZwwqcSqhO z(b!!dOKZl_oXCPN^FAbeMfeLscQ7k3B=P=bvTyp<@nz(zUhJHmJn>h2guHy(8+f@fzjaS=31}t)8EG=U(P9J0NtDV`6yx&$^4w`D{bYE&ej*kOFum9e z=&>aHCD(Pv*Ko#H1s>ft{vevSZh;&&gelCJY=a!dih-EGy)&F;Zzwn9Q&dzGvd*^+ z#tt9GzI1|T5q%(eNOGbAy2f*S`!rSYBJ`Z&JOwFB9Y=H5LEhYhxN2|P%(-JgoS97b zBb2VJ&`^NwPacj)t&7>>R#qYj$x_Ecl+W*bFz(NWnR2~+uY47U7y23{p?e3e#Q=O9 z$CVj}A4wejS%e=ci7q_!Yn>y$W~YHCi`O`hbx9{b@CpgE zJ=Nfu5H5qUWv0VFN#2m6x&kfkhn^RDd_H1i``va>CvLT)M9X}6KI2}pBzHF(L#vXm zBaHu3ScF@Y!d$U&l-3Epg$htD|nsO5t5QyZpOJz#<@Ypx%<6TVj$Gi3ukbbZ=T3JOKNLt zcC?EA*~HP>`SWme9*B zQ^t2(`mt&}{@{ZTKKda37caoPxp`r2?ZTlaHu<~={|4q?*1<;V1IBLVD+PJ&=%(*- zZu<*i`Fcpc7M8Dx^^)gQ`kqw)DD4e;Ub(rJg6c({w0oY74KSZDigjGgw_NW`PL}KS z@+7F=>yxnqvVNxM!X0(I&n=$g2SkArut(Osn_f!dkE|2#ZKd_~Quq`uR)cp~mRt1V z^nU{5?S7$*QOon?JYAwkVHn_is5EG&KnBp#!zYg~=G<^3Bh|7iR`HUboCYrY&E0<6!2|S^whfnu(wGWN8t`9IP3Q z@xHFy>4BNygqk>w}w!x(Ns#QWqqoiq~qUH1D)p9p&c~zHkgs7@DQCVFuM9`qEy^D*c zL^M&=EtCSFIfxpO%*DmMmhR90|95f#_*vssCinA9N*)2ghzje8xwt|cSh}Kg0J#eC zIq*HT+W=y#iS`C6*4~^0SFEw_9~eHgKd3lmUcU&`8u@X7qqUe-umM<0*QLa>@lcMC2W2|xV1((iQx$)Ej;74ZE0 z3F%)qm5J&>KYf}E8k8#AlT$nu-0*hN#+3(fOUeHQo0I24$k--swS%l|RxDZD*^C=6 z|MQ2U6mUsf>SMyc7M>7(*B?{6!Lqf~?@A>MVjA%amO>C)G~ySyFbF#u@e9KNd{0TU z>Nc#rA?^zK+u>9W6}bl^+|@&tAdBOEgVc9KxV1>RJrSlcI}!0mSUXPvSy;nN>%9O$ zvqQby@#;<;A>2T{^ykmuOXhL&6K?4~%WHqGN7>NM*;a)(R=ifH!ez={uf|G}6rJFE z_zAAJ&icS8EhPCYkp80oLD)PI+Sm4_9~;W|6r%)Ug~-O!p`Y_K$Q}*>Y}*^CwEiY0 zDnyMluxCAZ7W|xFcgEU3TGnNj-0F_8@7Hhx6QA1yeoLgF&PoXPe0mS=Yx7KsxZ!Bt zv>eAeAEA298%O8;DE-VI?i)|gA*kMUw{Q;h#ZmqbpC0M1GrDNkV7!A&XUSi0ffwG+ z{Q?BSMUllJkDw;H`Ns%r?zw zX3uYMa5ma7r12{}^>ipdktQ{s+c298XR+d{JL`~phDaS$b{mak)4S5OJy|diUpBeEP5Bqf6Ate5V9^jkXvuMaZCCVO2pBXyw0Ie@g!r95CI`y)J zq)(g${LTQ4d9s%gZ}Cq&IQlKYi6v(SUgt!%t2g)36OIZeg_q+DAEynp&nFMG&!-Ty z&!-RI0mnhO)CF6x%RO|o1A40Bz$MU9J1uy@z(c}HA27cS79CkR zCm#q-EORWtzr}5^04Lh`06ds}NAS{fh*QUj*LyYr3opm{yg2_CUEevhg8dQ|g(VV{ z#OmVA$G|JlH_ZhQDiC~f5B-)){5Ge%M7m?#<0-4q&t6q5+eO3DT_vZ;dBxSN8w{{G za+->Vl~U6-^QxjKIoTn_YmI`Iz9h^1QdoYPD395tYwVI*G)1OqU{9_ZI#@4~SyYK` z>3K^QMa=^J9nG^sNfw!!S2e9v-tuBNM{_`UPN;Zw0=>l=7#q-0ycsgEBE5=dl!?#b z40FZR+7-qothX0y;xze(LRGQy|4me+lH6IWi3W<1N2GVr;#7^3##@tzc9kPc2{#D$ z3O^5D!t6rcWau$3q-@Y{ca&ypz`xxp@boJ#7)%AqqXX$`hhw|9dW_;Ej?z6?AeG^J zIz4njc=xymGhc(Z1h3IR;7p6P;@hnW#wu;STES^_jWH`<5S_0QkzqW(h;jXjLcq|a zlo6%|$A`cMCE*P+pa`xqGK)E+i(L$NHy z_=={8OrrZlY7=%ll?jkYB1IX)7 z`r9>&)<;OM29i?$V4(8}SPSe{;WXyX8aOe>MzF_+1WYgHhim&26Rl`3v>L*?!hC4L zl1NTDGIY-}YGce4Y#Etqxurs}Q6v1M!Dta-gPs%e5=~DincSk=HeOG z+tzF4D)7BibZYU_{7stl7U(#%MA>I^W^JM{nGf3eeKG<1<~|;q9?awQh9>fyF9 zN2~YN>D*L#W`1%iXO-C`ovW88n-f()ESqnX3KL-b*>9{i5R};ocTy2gQp>C~fKAz~ zTb`2HIxXgIR@|ITk2fXDv}}6Puc7rl(1o$;7icTMuRY+`cBhMu&|V9J9o$}9Y0F9r z9i;1Jsk>kma;3(cw0_GiFO}!&rCh<<+m#*Le&3$`tjcDlN^WU#id8`nEVN5*G*&H= zCD0@ef!+58%zNA`S6r;y+u>j8b@{g(tf;P_D;EA?tj}PH=Bbo$c<*cubYYfgxdPST zKXJlQ6;;U<+1&j69J2}sr=-That9Qr`tsU=$;kt2%k^I%c2O^u3!pIQq(sUE-74jC ziV6n>RW&pi@h{Gr!yq`9PjUL% zED+PAmRq27mZ;JkGbEKBq>8DL8J`}{0zI%6Yqx@gcMv(qC`glb2b+c@X|-ji?6%hD zS=s*7Swm+>uLnswxzDyMtv$-jBl%pp4*ioVHQUIS@`|CC9Id93W}`3}`wnU+&^uhf zH}-bN?RLcJh&3d=wvb*kLmD1|%drn!?w#6oDG`DB-M@7rFiq+TOMT&)*?U-dQ zD*gV9`L={X&u5}ROKEjlE+;Ac`~1?z8D(%i3>%e~dV5w@q>z;ewWmiiFgL!}) zQL%oaS9@`p@(2Jx7rU34wDVe7{s)wu@;}J(Ydh40vq25JZ-Xp3;bjE|d5oE;c;Dyp zIP`mQ!OYKM&PlGhcd@#C=+pu+p_iDg?=OAhMMg*@oeT%i^v7!+a0DP>*DS)z21 zC`>ja$$;?zhQ^nJ`u%doR5(hV6k*VNDu^xc+H9v8q$Aldf+{1TB&zb1)+ch3;< zB~J@N&0oj42&0!Nl!PkJPq zp5y?`={i7jD4by?i}+H;--z)Jq#$H&9y)egLXz>?nUL$ROs=_Z?{Jx{HbYBe4*L@NNO)bo{oJL-Pny}}2ChoMh=Qurm|)55z0pnt%(7l^wu=zs)k z!Lx4aUnfS)Wl3bR+A0>C#bT>eYVw^4&}*33lvG_5pBGfA0J?gPl zU@P0P1Kh$$ShGvy(qHkXiTCvPMG0Q{=lok=;h$)hO5R6*Hr6c&pI{9BD-nl3?D98N z`NKv2qM2gszfy_6DmqsAoholb{0$WVKK_M(@#8h&Co^io$0nDfa`0aZQ$fWG!9Nyo zezN}i;uukEaURX|zZhF@E;-wG94Wk6shIKk#)Te)kvhnw;NT&zY(=v!75(g8hPO7EAuY z9gmo~`YU1I|M5T2YLqtk6b<)P``^2>9Mn$N3F?n2H{3RKZ^QckYPVnNq( za!!K1JRzpW;6ScQQhp77bMR-vKVr(cByOi*G<|0pw+heP>*d2l8~cSu=)szplL{E> zs8?`><=!ie%~N}2D&;ZJrZJECgYSAla9I^z2YN{omz`K=9lXG3G!7wO;;>%3(g@aEcy|yc|3o|m%PCe~XjZK9`mZLm)x^lwIt9Dwis14*$0PsB zJEkx^*Iea`GFDBDPM)HlzhbEMW8@IG*9)hhf4>8?0^tQ=J~xq~JYKOU3{U!-D}%o0 zB3?Ymfgx$fP`nAGHx!01Xt^S{$p zdY)fx;8eJe0EN7Y61ZhQVG2L+h*8{X(D@y}=!Az@{5e<9Rm)QKf~m=NC9gO~@E{KeFSjklusG`T z@p&k3j9CKf?d2FfwaqwlC6SaKRNiwXFq9rhzI7$=Qx*0KM?jaqV~erlilQbOC|0io zQvAW;;+4R~oX`_q0v64i#~csXmBh=i@PEzj@w1)4C-QFbrG)sh0ADM@ap5+QM)z<# z?=q1w*j}J-?j9wd7$w9>Z8x}B*;-^HU-A4l5uQE{R`Hd<5|8n1kYj|`fRXuuj9E*7 zCAm!F2Yk8OCZ({kV1Z!JjP^ z8+KVz?LvZb|bk(Ah%7s}reutzT=?<{3e>`veV*4Z-LL5XK#xNPQ zlh}u(GEW3MM-O@8A5Sz)6KGJn!1eafh+Hp}lQD5!J1{-dKYBDC22I1e;f763E89k} zSVez%VA#8c-L{7*`UM(zDN(T)qhWf3n3krsp(v^!-Q&#|HtReJU)y54DX!<{nrYRRmu3y4 z_QtvQJ*G0VDHdX64>`puA!VV2sgk4H}9;hn7?LhRj@l3H^d+?wd1Vuhm|pT99l zR!E8cIQtrTYL@KKJ{iPT5MnjpxJ4^@L7-m4@y@s$G0D` zXFR205Zb9S#eEaWhm|lI-*{-lpiOsrovaL5o}zAF!y#BS4WRyNspuFm`}rF};xn#f z%hA9Vir#M}gM}}rM)dBV04+TrJ5o?FVXDM$sG<5Q5FJQwnaKGs$Aj_~otV~xjM|RF ziT?Gm3RoM`zijm{Pxt=4%$)J+c>B$n0b^D3r8jS>DsLU|V7mH0)^)(is{D>Oi?k_S z`5NF){(Z^sgR1&BNi4rIUG2YFlJ;8%F$6Th4p;&^;7(RgDMO;|oe;BO^puJ~)a)3b zlw{k2)4PD0Ie+({NDJrpq7yDV=LF)SMNrOsYGmGhPejylyE75)j1ZpM&X5izQIXq0S?Bl5@s5saq0D!%^5ZLf z#UZ+|qZb`rc59W&R)2}E&X?Y&HxJk6R#)^HSyNlQY5Ygih-N+7_3`id@`cO4<@?dq zf1x`?Dw}SvH|wq+Z)1^NGocCYO~x#`HR%Fq*&mgz3Hy74kzKvXM`3yeais$GSj~rS z;aZd~U-e&0 z!^s)G!a4?ZsU@vTeVA!K$}+WrVJ4ypr^F|Ws%VcSn|C`yyK(p~%w~`6qZWR*cP?Mu zOF3zu6Yk}hl^A+|$lv|ib0r4`on1372nuQw4XNg zNAP>#@G=-2$q(*Da}qlE89HF@#}(-r>Aj=7Tq)8gVWkY0d29J)ww3vdL&` zhXPf)(J!WtJQm}ufAH#6PKUh=bA6W6=*ub3d_CeA+W;~d_Gi5fZykQUn}&V?zX%S4 z-Q6qk`XGDxt?VAPmlH-IH>1P^W}3BZJEm8X>m$8JD67eFC(AnsyC8pHx;2BYun{S; zE?BfiZ}%v_k5fa(-sd}MFJyRst>BbcZ{rPy zn|i94;{IGF2Mgb808Ng9E)(M7Rm@#BCo8IW;ldpe`sEf!+Jg0 zarj7ze?8ieNHq0AN{V_~hi(d0taPW|b&){z^tvU`O1LcUA>ClrPToG9W;q;??S9SQ z(;(%D3@sDdyqlFt0NQAmaUEK{;uMe-7**IQzYU&{KQFy>>omyWpDay=>&Fb!X!P^({3r5P4h>Ttdod+jJ=v>yL7;0rx%EQctp}oY zhWiq-Pv<>r46DYq+IapIt`x=PwlMzL|CBLfTsPo9dm$^yDZZpVKi1g3PpO<%@8ade z;xB9d!|1Qf5MO>yRj$kObww4w5I%Y@Tr=RKXs=hC6E+OhS(1HDCky50*>^-=B@e;; zT=D_FAoyu6r;oXuBROrcnYSA*ErmDmaGBS^AZyWkIK0A3ScrL?M}gyKSO+d%eP>zk z4<)wsh8}gDf5~<9>2Kg6dE!2Q;)kN^a44tGma;i?Gnk<{vimlU=Ojj3`uA6&$MR>q zmOS)je&Kf_)Kq~^3xL;Vw0Cm?LUcsGzcz~7i~Rfd`3tG#;yB>2{3d_Nz=HT5&Kb9n zXLm+NGW+Z+qvM)=ZZjTbZG;vl-Uu~12PVtl7N~PJB9fGalhdg?fy2A;NjT!;><)9q z=lDy3!}ZE2eQVb`%)$)sq?QFT^M8s-*nj`+(0jF{8CGso(Cj109nTI@?sIn_%IF z-D-HO3$)&BwmZvbNw>Py-`WfV_-r$%hFhCE{q9a@bYi_ezerSdd0AD-;(Xn_Q>*3y;A|wNUsQPa}ky;KvzouXlLu(9v1PafwEW zS}dxBYQ%M%*(dM+=~Atf{Ffx5-}zCrx#Hp)Q9Es{cZC~?*%I>xG7T1+V{xJda!vEl z9KMPNPX!jn()6~WQ|+dkoa=+K$rE_YGJAhj_$)dX?MW)FqfYDLn%EieRYP1kohMj^ zjT|ABP)MNz=cL!{;EF5{JH<7fPa`{Zn#)*2zu?}~sBYNo+!?3>#4NGMuxAxjHMQ^H z?rTH;OXH@ZB=@^l*&QhY{OTuUQ@d*5{n|C`Zx!3~($}RDvs}51Ss>Xh9;0r3*|2qW zK~?_>*E+uYD)Yi`;Ht>0wsBH7WnZ?90kvDh{&Z?D<1+(z=F#M-VjVNAiZ%+1wiGm@ z4(vCW%l};wjMu+M^uKDnJp9O32BOlyPhps4v7Q>%yd`{vA$pLQZ5HYY0IW_bDP$L3 z9|VSAi;r!?BDJJ;t8ln!Se9{vm8uzeZkZS5iM~5iXjZi7!AC9UeRVnd;v4YnA-H}z zhRII+HhgX%HL~?_lFZ<4SdCnTn}(g1cdgsTHEP?wZR6IO*Z9iXYt;S{;cKY^P63mX zY3)7n2}-XS#(vQ*TXz#4QQqIbj8E`wzP%@Y$_soUI32H}Z0Fe##xr7#cz*ENDE9dR zYNF7a!h?!7_|q>a+P(#}+lUtSqDA@dIt2?zSk{&AzXq&z+2ZIWF=?#5*pk**{rcp) z`y9<2YW8<y-eD# zeHWnm8zSso`hECkU{-3J2gw!e_0+D2WzwuvXSJ0XAH{sUGqm8$o$4s16)DJ4T0@vX zY}p%NVN0Ca=SF%1yiZd%kj+?aunja0;A~|~4}iE{?onw&ItjY;VO$O4Hd|6{AmaE0 zQeoz`xj14g1H3R-*l9Et2^ot9^_eOpM(je~R`F82&feMrh8LY=n z4}ewYR;d=xNL{G!(AHBf*op6j`>H#=Uld>_6X^2UiPSx>VZA<5gm=IQ{KL$9B1PZx zFQ(A#S0|IdKIZ%5_oC0h>w0fUXTSnNE1Mf{+>pa65u2E0)&bK2dk$doX1lYwL)mF_ z^9-TADya8rh(${%{Kay+!*=?^4QNhvU^ayw5iHFUp6?eIX6;7Rd17X*sN2DOFy|kd zt+rOHCB3y?oZC30>DuAtqFpF{B3LaNg@tueGG~s;s$tdYAd}`rL-%5FwW`R9T60U* z@uF{@Yg% z0gK4vDN<`6OWS+K%&b!}OF^;b6&qdM)lJ(f+K$!OUZ_;v+4GD0K{2ia!eUQV@RzXGD-KBXFQ_taqKAXRA06_<0=Te1wxhzs6hCJ0{FFgK;+CxH zjNwLQ@mn)%rNWGhb$EThR0w8DMb9>>q+%B@0(_J~O6Cn}nYGZLnRTm`h3y6axq7@+ zt^^CSi=n0}s%|JUFmKVRk*XIy3ZPSlLUgLOcEkH!+&j$`VYZ`g`rnZ9P6vrV;LT{?1PsajV} zo7YkNJ7U6IE`yiIq$BfAup$#?Ij)l?4VZt^AdCu;M{q`{rHD4fOZAOm7SmZ6#Ep^e5ByEq0VQmb~t7mBl5p-}VPW2KG5GnbGY+sDIWmNQ!ojg^@% z7Mv+KB2Rvw^(eAIPAst6|5CpSAa|D00>TCuEaw!nSP)%axf{5zzr~YRt4Io*XL=YX zsC>ehnJ<^gya~>_ts3N*Zq1eE+f-K!&w<|yQ$GLp{2@bAAD&ggH-}q(z6==C;_ak5 zS5kv|@yO(l6Q6yS*?>|RTafu_;VG)K;Y(^-!_>jN+HP#jyhK1z68j0XIG1Z|D$i|# zDY`kwrg*K1uEUe0t-#L$YtwKShzv!&pPQ%mW7lQ%uB3m1oWOD{su{XKl3a|i$})YE zfF$K@fSa+AgxwXvy5Cm-peOOU%^ZN1u}Z;{HqoBDN!Es7;^mA*m=?fp-rI|N7x385 z5k@C8&6{yK)gy7ik(gX5nb6Yfcf>g!qyU&vO74{W2#OE9?6Dzry1nP#l+1*HMCk^Wuw6 z;YL!BIDHQHM0?$+z*_vpCkb=p1Duhp$bM3V?WM~R?))Ku?By7SkF(ksFz zU4sAE$0k>_jmcZA(G|}a2GOBc*){?Xhgb$d!bTX&ETTXGNrO^lKU`W`Ut0PpQa=VH z-)Yc_T|It2EFE5SbjQ&uOTeg>t56fHPt6P)uI8!b?V}|V^l(9+Sqn|QxYns&#xGf4 zdT#F6j8@cYy;IeNvrTixmS;N^tG+O!>o(k9spyKMd-XB_b*GhSeXFM0O6l0)KqK(I zl~yu7NFxtp$$Z6D-fGCvifxkch*s%-ZLL;nEX^)8N^pjTDW~32qg$>W>7CxL*SAmi zj?~IvmL7^I2}DihN0Tf_t~4LVtfOvr{o%^fpVbTchcsdt|F>Zg&9IHvP>R8U0A?T8 zaP338Xe1?#RpGk}V0Wzye}CBV$Y84K2yolmiSf z+qbo{qUc~F+nx1}t>~6wHdY#@Oy6z5NXu#qTQh5R>iPVIf~5gXMW?vjVZfcA#}3Y6 zSk_FnP%IV{`H_MHy2^yxG+Qx^nM_QSuj8+S9({0PttHl2ju~!e2uDh1-8UI75pw+w z&Xxt%U~>nIbC?qOEBf;w?IXNsgsLomhNI>)JRboQKv9yn`3wBF$-w-@l8+m`8OkdC zwHU_)XRvT((+uMa*|;U&``(w%p|zBWxpZ*ZbDMh?fE0*qR!y}{z``s{nNm zT*scG?PbwDeL|-OHa6BPfu@+6cdrT-sS;EST?U)e(A`p2K0mLUfcUz= zC(DYip>?Dfl-QItj|JsQ4HZsonJU_LChT;dYU*Hc5ZzQmq3;`y+Z+L$FR{LFlVUf+ zk@}rbpaQm0-2|%<-k}G;y3)X%olX2)q(w8I3#u8U-{*QMRWR9JRzBi-=mrQ^&cYa{ zvT;&@;nJeVoBL~-{BGB?7U}15!jxnknMv?bLsp1qimu* z+5qrb5+o9abwS2#br?Yfydc?D9k!zZj!!B0LG(sTZ<5Oe42V@zl)nZ}TlBZs5;neF zL2n!G*V6C77O{B#3)O`x{2!77JzkA`0#8i9Z30OW4$9|*Gvg3_d>m=6@t9yf1AJ{9 z(#kk8JySqpRENfWhIM)xU-KcYk+lsLUEB>}dq)`C8ZU|uhaXGMek7>`mV$gkOo1N= zeIByo(*_N6ZfZ@u7?Pd{Vy33o)M|MgQaoHvPxGmLC5o^-z!Qq2iUGrODBxK)-CO}f z6OHMy<&aoqj!czEWOS88YtTfKyxU;$m=QVfQ8`u)Dyj>v5tEp}upaDBp>M7p91)ba zp!Rk$Qt-fv?zy3CoI)mt04fE+p~bQ70!x*gUT zniX>G^|7dHkK!^yz$yebd)@fA(+!&9uc!rI<|rQLaWgt^6$tzktQX>wl5FYPFW^Db zEjeUoX1TmkD%DG+c~*k29-j+LVOXwP@!+R|ua{g))8Gm_hPvUw{~1H~*sI5X;#VM9 zF&TgC?Z)djBJEB~=Ye{6gI(~T^a#krcS-LT_Jat-it4FvvQ?ETb~9|SPUOv?j}*k+ z4{$N;VI9Y`q9W$zcZA>UHZ76;_OevlMS{6Sg}?l!7RuJ=kXRuS>*IJ0Wz?Y|o}+D)4J|F3n1Zq*It1lAZBv z#;`)eU@(Vq-!*(gci0B1D(`-`%q%YqB(OkSCV1egwr8t~U-5r5Is3Arp1A!4NFrG; zw%g6sqArtng@=9l@Lh*x|FFP>XxN(;M&)dS#et(YtKdL`O{KbytP)LjT=i|05?TbT z?Sf!GVUF*Tv;iD)56mm9xR1+83G^MXfcRc8+!@BQc6NF^OD8-dgRGz_*5mu;{&nT- zg=4zxm?v&KZURL9@!O9p`szcgdUfU0irZXiK8R>5NPuUQgbah+L4Iq!<{ewcUNSo1 z3vP+-VzJ;wMR7gv9fq9}!xm}sKaUyaO#cqd?cE-V7*TAshcTiy_F%_Va9ji5i4v9B z5+lB^3S;^%ZKj~8m3aWH@@d^r?at8-Zsx1j8nb~_(QJ3VqRNF(lqYYss%(?_|&sz|R%(SB9YfaRIXz1WfWJ z{nacU0)~1PC;EfefADwY7&*qQ`8%b%fEypj+UKopENk9Sz%K7FwHji-$#jpA&aHK{ z({!IT58yhN+3#&;zV^GpW*_cPyjYyIDdzB%WUaAt@j`E2UfjL?!t9)-5sfxHvtp1) z$j_S&n(nR%0t8dYG$I>b%|`FXHNfsx6b-C>1um$?N)db`TQe-<5)H8$@vK3uknT6n z9QKQAXD^;!b<1I?VpmPi0oPbFR=Co8i_BK_(Q&ps4e-*y{e>HB3fE*^Qw%sXAJr_? zv@BD#OikN1w2D_O6pCI&Gk}Iah-f%3U65`Ed4E5v#>eKgd`4-=6iA2UtY9z5cIQB} z+YCC%5>k~dv80wlhKSz{Po6q9OX{1aP96pEZK$>G?H7+PHFhuFK1=VnEFIu?P1k1x z1dI%S#@1!<7AasNqdR$lD}|F_6#(^A1FQ-S$O-qpOQhsx*>^krQ~edExVpPQw3YLl z73c8TJI)>PN;BGRigExl-os5Mw74{l%3w<)Q59o7L(#0wHz%!OBy!m1!*!-jol8LQ zA)>j)!xB~T!ys$>DVlBqIDqjx6~$TGS_AXl)IOz|3-NVDF#dFcJz|LtymGs0tJPYq zs@haM8RDWgn09N#s zXbb0^!-?!!daYs?jWP7vLBk)Tn_G#BnB=C!_P%22N@VW8cMSb5%An*+B_EigQms}L zVk0Wl?9TeE(Al~3dhFN6@g-i|otaS_;YVei3-;cD70l%n^ad;04hYMbqNeS3L5= z8w%}28zkGyVb<@B=>fEPGJ!K*ai6!1Eh`T%UAC<)12F$$u66vu2zqz{T;4T|;0#B6 zH`h!bn&%DhMTgd;M^~IRrEo6<&P-g!z$|x>U`#`UamF%rc6f$LxRb>F zx*aBrP(HEnrAXTAy5d%V1;7kzloWk~W3u5CW{5^=#rv>ZkD|(!<<|<--i&q@BsmL*W7;;8zDriw($XNtF~DNTI0%qewmhEvv5J)w~*oDa>dRklwp zSBGL;HzQooi^4>b=qjAb%XzvqCusL1Q&8N)k*R@3dWM@g%tvLei@412RrwUI^Ktu{ zsxn_p9o0*By>Y#?(~!5$$jJw{te%#*!vRiP>~Gwfrb1^%(@erWGldEom30Oo!+eazym5+ zf&Y36l5fhG4c8B26$G~qJZ2$=a3~8rSgIN*#(~D{ogor{E+O)Zx+>dh`1deo`KaB> zn2lg}D`S?6WSncCj@c7ff3*y9Jp?h=)OrhqVaOWYb!gZF-N;K`o(nr;@^%Gjbqv8H@wAfiT;ncxG ziPUyLk(z`QRfE<7Ql0bMfOrNika}}vp46A`ty0w{6bAZnxA@$zZ{=x)~cequ3W0k%_uXTt$4~(L!ECf%^0fhQC5puOX$MK z{yn(fAMKruyHNuHfSuFLSUx!|$J{}Os&OD0dPs&&LWgw2SaUtj@54wz7sPdMnV zW5b{VX9{Y`PuKR?Mw4HA)TZB|_TC4*!g8I=uQcnVKn<8zt~XaDK@D_E5z}6ga1^Ua zIvrc3RdBOd=XBr_LqG37Z~|H3Qla|6ooA}ZEQb2P^VNbnv(%hd8%sbI+XDj4)k?DK zs>-URQ6C8C0U>Ea^|8fR?wmi9o%5l{KmBOVXRI@<85&oJXC}HZ-9@%wv;Dc0qg$Yo zsuqUqea%&CvYbqIfdQUill_5o7J0I)v}}}Eo+j(7DwT4^`?xf?#qpku(d2R5pMcW= z2JPO-$mNaE@mm}tD(<>F;P710)VOiMfd-}+g^EYV;*K9;EHaQEco+oOZ*2gIX}p`} z(0y0BZ~)3@yOhNHNrlbp!K5J&^x>SCM=*X61XXxBuFJ2TQgv3&N6-=RcwCeoxK(L5 z6{E>Rb7>4t2N;~6n~0pSrohLkiZy#iM`(+UPuLqK{CBLf`q6OpxeRd~Yv9!`d|DE1 zhyr|b3w-Fz%v&cEMMa2uwTiu(fjZqPZ^PGV_d5Yv2x*KUv4b8U=4!dTYLcHOmj>jm z^M%LNvV9XkdAu-h-DZ-(r3>b4MRvS}1<#Qyvkbapa@jLYuPkpX-A}IgON_gn9r(s-{%h0V>h$4%$Gt6H$Pk znL2EnWZSS$sk`SieE>GkP2G|Qx^`|?J!R8t8MtrqB6LAeco~Lr#j=*4Ib;~?7>-^y zj6=^XTh)4L6`5{3t$ycAX34y2+8>*l z`Iv21o_U6VRT4Pgae~*s32#PXmvKRUw4L95kwEje4ynAZ1eTM8W<0gCkhLe zwNQ9M3EaN~Gw9I6#$Z1~vjp4?wS?ncQa2dTYkqM(01J)MO3+2%*NgsIU=|z2pi&9o z1&2G{$FwS~@YqMW9icH{m^TQfdf`6)bi-^v%%Jm(d%$0&>%J*@6e*+5){w84h&=5{qf|D2x&cBH-)gkS>m`JpFz%V&?_9r7v|q4` z7wVrXwQaK0Dw_5)&+LDmbBIEodFFcS8b*b#wY;ayJF379%hfwf0HS{8)EVSsCqPD~ zxp4FWl88ubheAZQE+2SMS;;)=&|W_?=(`u{bq-poWZLbUE!!;Kk}kTakUu|u2H!z?BvTrxGST)Hz1?_|65zg_}el$BgRn`IC}QSt?*IPzwo zA(PnlVb44KF5DmUxQ*PR%?MaNF0c-Z^AF>Uk(JvbZOm{>%inC^UiBvDV_)vjn4to8 zc9sB&5f^p(z*vI_LlDw1P}M>kG;FDyAo(hAwfWbNJqAeqC1~iqy~nU~X@XMWHxQ+& zUwz9MtWG?;Gr+lf|M6#ca&6MPZ`E%=l$*(Bl4OGkD|2u_8})*k_GF8?v>nJ+t?)k) zo3G{At#AEde27Wd9oUY|!SB}W**rw0w3m%Ie%%9k6}Vv9kk82NCg?@l-T__c$&*Iw zM_g7Ve|8DW*+1bddFM@~!m8YlAE_lb{)5``lB1aCy`@vE@V>j#=qhLTgT9natF zc{K^s1JA3mxZc|A8jp0wckr1uK7^SY`8GH+wz;?NS+rDD^ z+XZ{wwqJb5ysmF(#QLYli$3b4~AIjV3a2y(Y-m+oXr3cS!G-_OLfzt0$KB;Se>G1GfZ* zYp09s!%Eu>bJTFH^`Xx@`JKm;&tY<@b6|>7y@WABYZH24`J$a9=&vRBQXJkPOwUJn5jnv!RFH zhrLkuWsRD$PAmYvt>|lK*4TCm(;~WTQceCjg&Zfc96Cgkcksj`-*pQGx2eghV=QPe zNh`F;O4!MAjg{zb(hAI9ZNYFOMMU36 zGSw8%_^{!ro@P_9o$d1vp0j;8vo+k|n4))SELpT6sx;jKX;RCgOgObfJdTnsiFKS9(->O7J6i?I6zatY`}xX(prQG1|&Y2nCtlKq=v(Xi&4)?XlnB zq}*@P%}%pi^{@HW0>*z7RhL!SQmA6dm|1DCJ089(qm z&*yH%=c@%a8P2P!s;ku8RTWc#|LRMuu(fH}gQ$AfW&FC!aPR+6v~kPvp5k5QhGzLF@S=qpS*8M+Hh4X176b}6(FLhSg(EslS+Q;nNZbn%X1dzT;MVi2 z0tsNaW(tfvCKmEgWx`Z*)i3W`#x>lytE(|~UyYIbuR(4^d#G%~M9=c2m^8a41zM>< zGn68Qfb4?|cw|MzHc@^Op?^q4}@|o~@}d z5L3O(YnfwyO-?oQs?P#hJ>2xrAbdS{sIvJ8L5514_eY3={W8@|y>sj+I<@9G&8N(y zQs}=tOrMFh(a+|PiRlaJAA)?vJ~~qN(FsI*AmL2Spzx1B@&DCuPm=Z_Y;JQbTf+}= z4y6^W`&dTN!RHaTcmPi}yK?FN4MqKcsyw8?|LEkGMrpq)e9TX*eEJKpB=kQ?BAJ(1 zW=s;&09S;@(f^SVu%5i{zGv^d@9q)WkHU5VZ+!N?uT0|4HGw~eyl3wUdR!x4oVV;_C|G9mg(Xlj^x!~k?|ezN983PBs@MjRFZ?+Og>pYPYC%W?g4!Lbv%BuG7R1CjF3o&`@ThF0{_2d z34n$i_>ZVaB=v$YUtgBK1C}+Luem^s3`4GjOnW`lKyyk(p{i%f5KXkInMDqcLk}D- zzuIPcyHITvsyFw*IYR}8ms;#<)o%l5+QuH1CC&7cn9JetE~rxY4d8d9GB;Ow6%Rjo z@$%)1=g*V1=sg_17VHN{Dxyrc;rp;Ui|`H8tou*!?|m?N(02>YtEgGw@DzK%OX(9g zq7MpAs^jpv=;3X%U01x8X6`ZWSp zcN0Hq>FM9;m${Mfs-VM#JlsgeNUsCG9AWzw(hUIp=pQfhR$burvZ8LB_%9Rr{A#^j zhyPzyz*hB&m0)&zHmG3XJW7Wy{5)GDSi!@78ULnU)^yh?xdqd<&4OEUT-(mR???B; zA{b%tQ??5xW;Mdh=kv(u2nPCxw9MyWMt=xyIM z;ReI@3jk^Ffm#oME%*SvPEFTu>&9HGG$YeOV0U_UP@pGnx;IZW*yWB}upKjo_@5*= zn2ud=JM8QG_$P9whhOkf_{(Jd!(;r?Wjk*rM((tfT)5Na;3G~5I>l^8Ko2nu0Si`$ zjw9IJf-BLu;Gz!(-~hYtRf?t>)4x~qN|pL-H7I(j<6AWbyw4%?8JGox?_o`2Hw4w$ zdb#WkQQ}pA{;^W%7|95Ex@QN)Kr8uXE&Ud|Q%Jx6?W)FZ2-wXT`uqV>Bhfp+hs)A& z=>o>!TVho`njP4PHCqCI3ar_Ww}E746Isi!CPOJ6@R&7U|94&y@ZODy6raD3^XVfg z8}3hIS)_^W#iWT&Z|9R_Bb@;#1DP$@Asw)aRwFAE%gZ3s&d1An-OQ36hU;nbdwQ9k zWaS-#&&UPLpDQe@@@J}So$Vy0-`ktnn<0x7Z&EC^`WabWE?}ZuLH*15y_d)Aif3q)?Yc75$V`r&g@+%s{F>603a&!%)nx?6fkdb{*2t2y7M7$FXK zz-^*CXL0!exUd@FVF4FQ;AFW2P*nTXKF-YT9t>^+m-_lxD;AC$NZw?VeK^)Jy5YON zIctWqb+54C6f4AOo_8&;RGtmtuEPt9wl-6S8_YA!MtsXvZZH_R zzSL{2Ia6-T8V(`!X;~&E8nhj!S+!ly)8|UMf2az+B%NzHln}?5ZM0;$M5}PmO4X{F zG`?w$+ZI=IJuzYZ$(P!a)C+j|^JE!ehh_aneh|wfMWZva9>F?%i>95jz(7&YYt|{v zy1Ab;L|jpnBTZdXHWUkfHNANR4wrRFtaTfJ)!4&bHLS)pGX~D0X6D}Ba5=3^hT~4} zx7ib|==uLDU4RyC*gs33tflbWmMlf@CtWJjI&$b2FAwir3UkOHR$D2HWUx{S|5+Xp zw9G!K+GG#BlRpMyGUv17k?(*1+1R0p`+iCPmes?S`tdWjcS21#|2f0>5X^r{-00-D z)RKBpGtJMLrgl*{mr~yvzEhT>b^Si(cO+l8Kr(N`PdxY0=xcwFob8|e*uBE{K9qeM z<>73Qb!i=}rnA!h%sXJ!pgh7#%PkOA7z#C1waYqDAdiJrzJ}V_2K$QXtmZP@fy#}Q z`{lhOP^*zcs&ACTx!FdyTr4Uu8j4H}xf~dlUp%xrFU#JHraCiaRagJ7?OwIoS@CT7 zKWQJLW@s+$?yMiBhF>~1H#6gtWmO|Y(;R7;Y5lXB#EU3a#7bwvL?gDq%Q#*tIn!($&(}LH26WY*d>r==5-ZD0k%} zTer`wY}x<^8dE8HFV?{k4434iAkL4 zxKvRpu3ne#TYfmL>4$#8A$VRh+Ypi_`vl_U6I@IIE*1pDcP@u#hQp0CKZeBLd!#84trvB0gvpn-gB+xNMnwvK^BSw|iw6_KWbvJG zsi~xIH(zt%y)v=GMCRe$EO7ii4^go9)5v@&1+JYy+)jI-zL-bzK?Tb9V?SD$a_*x|h4h6xcZTCIbzZmBa@SfM6REc>Z*#X(v?qWXFa;G0u(00V?*0@?Q zjhydx5fWc6Sjv3CR^}h6Iw4rScjZyBk02ciRvT`$=2o?aWnc7NuW!FLhIvz6ZAxX9 z;Td&=#?os+8mX*QyGv{ZVE_-j83Z?3be@GI$t*hp7w)~_S8uj(+2vk6s3n(h_#E z>}LfyeEGB?|C%gkp7^o6vHm00A|-kF)p7Dk8JhE>(kUt~Sc#(nAqSXO89YM-LVQ56 zu`Dt=bZtd>6n@+20b-%#%!2RJ=mf%jv9L`fF5GD;S((Y@kklWBB63SBafDegi=r>>ZQ7#-h-ig?U}fwVM@en(7G zqFvP0-4@D-@fOFI4ebu?LVMS~{mv>T4Yd@!QCF&W0@PBr_s0sZ!uR8jMaY}!Ye~^ z`yjN+HOfwt99o?`0I9By5K6r>J9Z)Xz5Qry_cR%K{DFv-1!N4dn3Zv75Y2EVhJp{~ z5lhR^3N6UH#?vbtveY`$EVUd$T8YJ`k;x`oLf1dI$~*4GhFg^6q_*&Ki|2|C+is_s z?Uv1r2&RGCokIT`Q>@J|<_`wzdcbh_NFMmPJe=A~XuHizO}4LVg7qeF^&~5`3oGNdIa(#9IyxTiF+T1 z%8J2WiommT$tuKE?Ia7Z%cIR`*YTXBG1lEXkP?3xd4~;pnZ+5T77(P#^^VS;eUgOTgbv-?{t%?3^4BG59D*jucE};s)FIA%**nLNxYEKVZ>q)=F}7`Fo!a| zgII$JneITn)>uHT)>f#}W(P!dp`qHc2&)V7Z4-B6v=X|oCZ`E6#X^s!c`Q*$>`t1= z62&j#Ok&`tI^!%xz=xDnZ2$&A_U$+0gvm>c&zP0+$|_TPa2uct_ZaffdufE;EH*oq z-c#+fI0-I?^7V-(*(mKhsm&N0X4iR}NNLD+>>tc_jA5I`%ad)#G1}zSTfZ3cvjrHtV;97VAD^u3+dXb=2n&NpxIte57cx06Z z&3MZa))C6~HQGtq8i{Q@7)=ghjYT-g)E-6YN=lBG^M~>Vj&y_=R^H6PtDe&2Qr_@p zW%<^G85Od9b3zIIWnM!+S9sli=n%j_l*5N*04#ZqsmrSp_;Rb@-fg2c`r8#71b3>_1jpqfZn zZW(YJfJ8zQEdj3gzZ{7~)cr$avN>T)x?yu&KEj$|gE@fVH|(-b^X%q_pC_iQ*`B7^ z+qR~8wkDf7qO5J3%G;?*EQ_f0?TVRQadQVp;bgQBet@kHf-5kCF4d68ZQ>kOH$Qid7wu!X8V zvyNDmBqj`_0$abDQ00*uhJ9G3^6DYQRA79HFLTKDVtSmn>5aoOk!N;QqI9kRc{2VC z1s+-jOX*^iMK(|3e5o*^!C5lSehY?n7qgWBOgd|quq7-?6>Q9UI>${jtfIYZ7cDbb ztg-^;cK z?s;IWmJ~Od=8=hD9&ZC?B4YnpzHE4T1X{mbhEKW-xubw)zLZdfF{yzS)=NiZoc^3J z0!I!+^!)>nTFub;2>8BJsC?^Gec{$9`7^on%dRzG-`}@RUdM_%z6kZKm?eu%&lX0P z4MSmPM2-aAwKP+;ZPnB)o$CAz>u!N>+qhvNN$%%oqvEyU=&W9#j#b2U2XBNcnhkoK zmEF^^*y5wnx?`Ic5E1cifi^fT4WuW9^|E-Y;Mq7_i{0P3Ui4*;BKtp zGcb!=IYtzMy}8JPBWB&NE0$NbN@cTzdu)lK*Bsk`ztU`KDzc`VwpY{WZ8C6+DHFw9 zAzXWw+^UaB3#G{bb6$T4J8?I`mCj7(B)a2 z?G9_2%=5tDo*kCp2saR#&jL?qU|DN54_qHzR!nMR%LT)BYT(s?tTD<)xnx!ht)eNW zE)y7rrfF%|WLMP{907MtAvh4S+|FU1zmb80hOY*JQ!{N<0V|Svm4XizrD|I`@hw^R zYO36Z0WpE-rruD9VOS+i0ZR%-MZN%opvgEiqw5cgZ12Fh8Je!4CU&Nfz-rWU2M@H%GYC)x5LMgQCZVn^Lc_R08IW?rmqG>$n+ixVR;OaY#{ zbQmiLPh5SPrr&ZFoIaSR=Uy3IV`@+H-#Cv7u0>Yl zdViPi&xV6OyjHq_RGYe1njaP7@A4N(Ulu#p#jxhCjj}u+2Hsba!hOTO1ZL(mdyGP3 z6&@JwFd5Pw$6p9Tw_JW=M0Wv%1b422^U(;doiERozcQ?X%C>QxB@{J|Gz3@*(u~yR zai*bX1rc!5IBZXRHiPe}JmP&-c>X1X@Jc>=2{9%vv(bLOd%~=llH@8(*eYdZd+(JVG)Qes7LO~*N{#}+cYXc?T` zs7~fRpxY11qe7p>q>aijvdMx)KI?u_KthcXTM*GzI3l_1ywBIhSEH1Ldl1?3B1hKt z4cjzr~A z)l8y&@E9R8M42Jvk46{LRm>o46OF?7Q4Q28yccRz(rE8o4?F4gv06jaL%mWxBey%) zWWCqH{S^XQ(-iaN7)n1_3`ik@5`3))voXsHH}YX6cP8lFm#4&2JQOJaTsBy5_+UKk zQx1%|@Y=4H$A`PSyX9Tv#6i1#GoKe3H^%i;M1DL3aC9-ocwnCFrhJK?OyW%d3wUsM zcW-wrf3`S>!cTT>j_d7XtUJLt3Z4+F`1VMMDY!pkzoq5bWU&0^WM%J*Y ztZ7BfhF?vl_D4%4ZQgO_|8T?yD3?lbe~JBn#HOW&ZYz!g|82cd8jgWum!mc5At44X z!Y4NaEC9Aa@(kS({NPu#&@S5s$XJ7@T1j;PYLytR5;00eN?s7{uoi18jE8n)k-dbk zMG@{|QES+CL%T;b!5EtCAehKP>=NzCsdi+(O_*!y4d+MSo5>sy@?nJ>-^8<^e_d9m)|H2sr{Vi6-R; zj8rO^mK}TxIRd+Rslu-!8XPapkhM{?>Io&T=cW#edHsiTGP1)+)u1Tkx+cyF5R$O> zre^~H{U6=fP(W=fTU(e2rX=rJ{*t(kvBuUhc2Yez{P3xJxPDX_P6LSFD5RXX9pKLu z0iY~+it*T(%>hK9U9|Tjomqo;ut*RS0cTHkKKg7Q`N#~xsDGy^M*TgRirbogaZ<1! zOUAS;Qz7pIi`WD^n!b-Hrj?EJucmSSepih1H{`H8jl6kb{=Gc1-pqkx>{bf_KCF;^ zD5hyP&YvIQhv#mm@%_g~V*Ay?uVo_pS4N}y*|pUfwze3r7K{k7cv`2h?ek|2(n0zo zMuU!GDu-5ODj$ye$2~q&?{B}O5OsG(Ci3B-bszML&m1(WkGm)GV!FX-IRC1!KTeF~ z-T-inQY{X0lYf>%dNq(8^Qi5*_EFQ30~94v#ujKK`{Cj(P$3T`2ibDaG=l?xICa~h z0hY=-IO-o4OFMUKCZJKKc89@P5g;$h5o$-}FXXeKlA-_lxCs7aYG0m6;Jqni z6?g#Yy3TlDGF5M#h#$Eny8YDHIV7wrXLR+EQ)M zll%?qONVcFhl19b2t959a&(YciiVMD9*9@@6&^W6hrl;JhR}NDRz1IvMYB-5qXa3%VRbciMnboPgms*)F*PcV7(Zv zaEdYb`bZ3Z8ZQem_<9}_v*kxk8#BK}d`2Qx$g87~cLA^3Mig;3^|}yohiBZkY(53@ zy;e}4rFpS-7WsgAFi)}%=uboUPfRa;=#S(f{O@Gj%slRV>56nMs(3bGoWdzF zbztnMD%ZrIdNYlx5Ap`Pe2|d3Wlf5y>+LwGE;6vdDgRsn8X2BesoFKuQDxb(b+1zN z2@IQM=><#CeAiLr77T%badmA$mVx9YfQ=|P2p0^Pff!devv!pac2%Cmn?z-z1P@MB zpoB2@nmls7yIc!AMhh>fi3se?EG}*=E&Z5f_*ihy2w9Fq`fRKzvyL5Bnc0?&i+6j& zqZ2iEGzS;nhwJPKNL>>G*cq+D+txb;sIo-5G5C7X-;$;zV>;H ziz^oV>Y9{|i}QMVz4Ys*$(S@Q-pb>-=iib(>z|B~Eh26snN5>-_DA(9wiDX%;w*7lwRRo}K1@Iau^=~gJwZ_2keAmS zCd0t60VozuI1WH(_o|}2?2Yb(+I|C(Y=N7eztspfaM)X-*ma>P%Oy6lmSdmJ7?DzT z&u5L<%;&KeQhz+OZ_rHM%R@noS4U`E%^RG*n2yUBgE+MhOvwc+3Ok)N)A)5%gd31U)qVWATByFf8x&f*@PnkjX8>xfU22zitA+M%sZbrj8!=Ys zvsmF$8Y>*(*%*lCWGDodZ5#Ft7P*F>tA@SbhBp`m%rfg>K<%ptS{lnn(1!F*pGUJ3 zHI^gmq9``6T8Nr=IEpPe&%cyJuYFQo4C3hZ7mg8`%<$h|5*EEQ@Cj&?M$x9=C1}Gj z>pqKFV_1qQhq(M?GY(oesQ~>n4$K6t{gIgUlli3`Mqs>Cz~=c}rn5$PuFiPw2;+ju zoY%~bdl*HKBQ6}^59s{MyXBY<2l>pn8?z();K18CJh{er@}zW@^#Z#U&K!agL)-Z2 zD3>B|EE2R^j`{RB!aIRiTQRq`+q>wt@%4X!q4B0&__C((sDHp8kkox?8RxzTMNbr(Jmb_h&o=orZB0_X>osW&I#us=@! zi*{pPb)6{@Z-MZiJ7}aE=>7Qpw_~9A_WM~IhihpV`5N|+Pi5K?(_cv}Vmu(zEbPbC zG@_jcA5q;r%ljKdRmOs<>TjLC#*yc3jg4*#)Vw+^stwP4Kf9u4V$AqgS-UQ_%X#&t zya!KR1Ae~}ee-ZsJJ((LBSpyrOfi09jPD|@x6Xi%cn4~+ILWL;*cm=vn7#s& zyIwM8i6i3A*<|lwG)tnQ8qpI#qsCSHhDi1*3N#;{g)dcB0QptRh@NUC4`twhbH*EV zrrn*S%=1~TTYP@dPB82xwGUx9(uWVj@!DRY%Fy16Kw%a8;Tivwzu*C(A=ScHI6yc2 z>T53-stC&s!)BWZzY@WOJqdph#Rt!Vr8JNpmfptm1)2<=;d&$#Tryq}A2ZQ#k&AVo zI)jrY#DE3Xs?}+~8+JQQ+7FxkP&mgt1B^?=1xscWq8KJsJ;OCDk5bRlZPoBpY8pSQ z*YrZIR9iO7=9X}dNeN}!c!i}TybLD$-{`tYO*BI1(gM4H$x+h`k3ZUPD7VP>U%S6_w zD$6p^$kKI7li{C%tJj+0;V#PciA>CRHlfuW($mtfOrcgKZ$y=*fp>5T>k*=7imD2Tn6p80j&D3p8rMvZ3MQjY&PF6PR9j~>ExVLcRK3cEMW@NIxCK|o&lJ4o=rAk}j6e?Qzia7= z0$*p~006mx=(-8icku!cR+B-u1=P}j>t&lNs>$dMEK6k=3Ek3z0}Y-uIzI2aweg9D z;0=#Yv(pVX``uC6UuCrSDBx{_JqoyT;=>#TVn)P2Kc4u%R;m??#lqhQZI=coPiFKF z=BL~yJs^E>qBIOR&TK+AMp zZ3F0|lGVvVfil|FlUO6}f_YB*Xnq|rrMHtIR9~bcb|CLXI-|+-${8668z#KBJ;ZzP z-4XBgyA;?D^iCgmu$w7Iwg!x087k{!=rPnZrJ)n zHay&F&&{=4bEA75&QF=cX=lQ2pXuF@cA2dc3Vn@6r{t%W78aI{9lN7YAbu$f;iXWV zS%WKZeRQ7v%Zgob27|e|R(p1~RdWVTh4;MrK_YK1!ni*?8CJTzF2}7 zUPC>I(xlvF-@TxFUnkth+{t^G!Qey;%zXids zng!FMt_j0!X}WJ~ocO@_MA78lV9;m`oWQ}gnh38lNP~;K_f8%^AIuKzL>oBJG!jQ8 zgsT}=mB$;RAMh7^f8ogT=H~L^;z>{B!pWv*VX(9Wc%5+vPT5`p<4=m$`T3k(V5^g- z$KWSI&V90A)XWRm{v-j9A7j8C_k-gVQZi%n?Z+24d=c(%4;B{(3k&X6kHqRVq z5U+KY7<_H;E4QQ*(gpO6b7cyc1(mRh(tzzsfg$Lp#&VdbB?THH9j36vtT+WXRpp6F-#woiPDBoG)11F5-((Yx^ez zYumvzhRE6m=RgMqX=)%XfJmoAE_tKYwFWeoHC^v^9amv2&h3s0V`Z1lnhR7s~@VqRqI3yeaXnWD3?_c2PAKAIGwu>l;@ zVVYnR;h!kf2}q8hSbqq#73i$Pehn>*Q49Xt%gciqbLq$eGce}o>l=%UVk{T!@g3BbNF4v5C- z|33ya1Kuo#V6t`<@RVI$h*{w{bb(jyy`@pex3k58Ix0v*=6X={;eJX$^^eiNB{>f6 zWKXTSb?DI6;MlRj;KYdxZn%4h%ja&vtvlU^rW-W zeYYrIa&4_}r{7H~2JD2Jc=sd@zdCGQ>GPCUP19S^X-Mpe3|`|>Mb(vAs=Ll6iW|pi zmoxSz#=maE+J+M~-()Tixws$l$g=YOlUaT5aSyv491o7?`eIYq`mE!ejXW_?7ob19 z2^ifO&)V@iD~~z*ql+>}$RwplgpRLtvTN9;v~%* z<2za3+FR${F&xc3@&gQSZ}`GCIOkItHzQ=wO;7UF3(?xaVX)551LwYN%=$q-KaOG3 zMAVF5%-aVuOw%1S!wA*U44cI(nk!uCS5E|Q9lK`t?F_3nGw%-JO2i;B7ld_T^dTMs z@AO@1WNdd9UY{3pR0Gm)M1h=jKezdc9m8+%vBLGWyC4 z3~|tC7~6wB{0z3GAw9Xu`Y_zfS1qT}U1yUGC?D|j=8)wwkgY-+s<1@ zc?I1gs{2LP^?fkf4DF7^Mau!U)2K!r+qE>{P+jwE(@;iDx^L@%m(r-$&mwAP2bPJ& zCxQJOQ#)6YHL5REbwihvIay}%=N$Nj_evjsPI#IXi=)?n~RgHs*)I|+-pRo40cAy#G9gZGjl#Pce#qhCh zjI6?_(-vWz%3x5j8x89qF*oy|A{FPbIF}Eo(Ec%Kgdv{1u|iz zM<1OT=wHQwRxtfw+DJbze&v5-^1$m@j3OC%ol*ry-q3h}8m^5*sBeA!ZE{{fdsJim z5Dbyc$Cx6)#;l6wPQktq%NP}4zjvUC1LXTCGn5au25joX2;PRqG7AhK-~We5|J)81 z^7GOMCVHUx>yzv9s95T-Zt1BL*WK!eogSwQ>mkxrFrVNgeI#^iu-=Jwx_h1qrf0+f#v-NmvQik|?ElT}?dOvMDh z(4SWfz|2so4|6|f)#E_a3kD}oy3@QB!S>;~XXsT=U4=ySaSnya8t^3N`RBmDDEq68 z#?rBixlZ!GL4U#>3fsKYBo0qtW z)mo-Nz@MJUJrF(9AxMC1SBk!nba2WKPUHcFu2`IK5c!_j_2^Bh$K%#xXFW5<8DI>! zu9y!hBrA#V{enj_#`wcR(&z2PF={y<&fN_$Cq^HJ=^ewCqWEMi0x;`ljmo_sazHlH9;Zi1uvJHy*=Xs#f=VDA`gM+OF zM8d1-CSpt#=4p~$GTyV!4DXoilI$$Kni<5ynIx0-(d6fEM{=Z<$uf~LaN_(tJ~;*u z$+&nSUV1IxA)mHp-GdXLKT6_!Me)a19Rid|A zyR9`)K$hndY|;+y@|i-!(fdXVZ^v)iY_lKH_{O=t|DU^e50m4%?gQ)Az4flHs_yEl>h5_@&vXOxYRvS^^nf4% z0+jd~iqr#?sRxFXL>aUt*?=NZ5@kIsFl$>DWm}5Jjvbqd<&A}Sy=%*#cb$kEf2)oB zhvSdhwf9S8f7xW=_;dWp-zML#vDrip$vx-XdUa0^1|TRWS#nTak6U%mIrnwWz32W; zj`U8zeJ={_VhUw@=TOFD@>|6DI4|2BBDWo-yH&~;%+T`;DX;ACVw&qA85Z?L?u*<` z_uCY^g4!8C)4?j!DRbXRw=KoNKg*cZW(&N4js)(KRF*d9>|v*Vu-b^BdgBx7>>ap^ zcLa^UKNzKUh^X<^2YF#ewk^kCIpsfHB66{Wbx@QWf_`M1iArD}-%6=IS*k$DR;fHI zN(=Xk4?5cgPVyo2;l<@6Ny$o-l9lU_pN@rXrKYUV%GL$2Z$G8{gz`(uZz;d4{IT*E z%KyvU6kSZmO^t}Ji1Nd2uQ>aNFb5J)qi!JV_}2DT0{4rw&4ew_FBn5F;1}xo4QMX#7Tog?P>bHcFe=hWro!!XJDbKvtjm`=^v-}@DH8&jlR24X zK5qcMNF01Jy@~Nz%GA;q%CsRdKLg^lo3ux>X=`&aPI-dzdio!cz#O91O`+RRZA#s0yf8ogzkcFXmD0{w9f?FlL9w%CQB97)YVUO zg9lZe7W+O8AJt-nMUDky`mb_LwLPK-%zCDOe)8PT92D@xiJe4%W>irbq8gcc)#GMc zfU=?5CK$EGpCbX>WJH0AD#Ta85T2iXgW#&cAD)`=!5GC&V_1){D(kL8xO%oz(Z%fa zeL?_L_fJjcg5F^By&!JQ^c0lx@J*CrCUDFj&CjapLY^tPx*)kNr}y@XTP zx8Ycb4i()P0qnOyyNwNWyTGafBM(*{h zSFqiwM6KC@Yb2Eh*`6%l8@LI-*v%Q;#L(OGK<_#ssSG7uZ+(@NA>0QnY!a5Y_4XR!BphW)NQ)d@v?sN zyv1C#D2ZwrAJyPgFg({kmaVgPLI0bDQ4w)s?xB5=h$BTn7D##o^~P7hX4*bOQ9gmC zbPs-y$^G{|mR-wV5P*!_ev0M41lngmiWprC*cJbm;pmJ%YU^MHiRbWP+gZk+84TE@ z^GSD}sy}CpRGme|u)e+dQ}F&CC#;lXSF8M@QwY z32SM4$)0R+-XW>K*E@A~Y3b}K@4YFGOb9n?@C)^;x7}`U_bjII_bZZS7@M(PO(>5Q zG#h%IG(1p)d+Z3hll)iKvHUtt@nO;N_`IxC!mJqIHY%ogRI(G6Dvazz9iQryQ>Pl{ zHmJV&&_ccq)$gtBp|n~Ve#JB^zVX>7M_8m^s#UQ@wJP@H2a0 z+1*9f5&?5bRV@u>L{k(}k)2``;G(}JHD2`csuMomRu?S1z@4l*&pK7+niFQ=T2=Qe zZq;&wofk;0zq(KA(GJ*4fg4;T3~fm0{!w-T?~}qLz9E0k@22|YY8nsZl=6D?4hg|7 z>z0U1QT~XORKrJ5GgOv(tg~D|8bK)}l3qCHITv8lef5td&DVht4y6(x=?n@)oq%Ra zTulP$#K3+i`C-P%y_9}>aq_y*&g1!cP5hDI6KZ<#h-BvF@0_QTT%TVho@OKtL?n@& zb1fMNZyQK6`KQbM^k`*+)%lGyKg|2@6ZXp07fk1xjr2$kT;k@EZQ=^fj$>ZfD`Hu! zQj7&c+X-(~hPssD0E7LOcKc7>l<>YPP}>&NldzQ=3ht~Mu&R4j%i>AtC&|lF4K6WFhP;|No3(_S` z7In}8T1*4n*qMMf5kq$wfk+Syv0W+Um;3cuiI@ zjFsE@9X*CFYYoO8&|&dwghZX5Z+8;vKIjIFQfe2}85Od{oI3hoooK)dX>cdoc)v$U z<86wbnO}D^IK&T$Fb;(k*KOv6pc31zYwL7s*JJBO50_1c2@SMS7;>2NQKK41oJVoh zz;M7!=tlY^aNegwF{vC3Diey)vRj5PVEkulHE@Lxzo`quH}W*bvEj$Z(VR1@Rp^vk z)vEC)LNg37&bSIiuN!_xxIq=iSB-PiwzU5dMoF{u{9fT#;468eV-mER#W&CC$V2X! zMn;ZlIQx=UFw>FO3sMe9DO#Y%N2u!pb&Z0!{So3G9De-6Xr<&beiY=wwL&n#h**Dd zpl#@1*oVe+u3S9@4zcX*Z=u5C~+nWe% zD*bdo{WIc?0U>=#oKL-;kX|TZapOc{#eu$EZ`ZTGW5wx19`xdF;LWYg`Mz&x6)TyW zORS3iKz1ASF<;m7`#lhD;5eh-k*C*Gu7jrG=^CW|(O@M2YY0AJYDRW5(e&?y`=FHJ zeQ^fA6*v-?O?d_S1B}r24&{ByGs=%Ezo`5QVd`ST1Z{U)0(RFCAJ#)9mr!xBA)|o- zT_G7FxKHRbS-M?4G6+*1S|-K7FitaSwjefwaY?XCf#!XRKz0p^M7l*i0;-~e7`ugK zf}ln4VxuF!1ii2-C$zhnaQ~^NS3pnpbW=xUa2U3|slcr09^7&4THS(CJ(@*_AFE!o z!8|+#l?%;CoQ4MepA8&{9e5_r;EC<{@)6hl zNChPuT{3*f#(HSkcgj-Q2cva*!ZbPP_BgEq8b3G9iD|H+K%E48&er537SS`!hI<-+ z18D4EzzWAjxM9axFwlOrDu_cX{5>H&A9P_ADvRI^imYnc(3&c?^|Vnu;X=G03~J#Z zurA}K16od6-1*qn0^PVrxKIg&J~~B8e=mh;iH!bW8x=xHC|JZc2nx-bft`AxIuMgt)8G7ZthVGc(;d}@5`ALoudN#Ouz3No1 z_+ia9o;6+99Bc(m$9H1Ew2G>l&fn%Hq=)1f)@Oq&x&5{T^fwUudH}7_PbV;eq=B4v zf>8l6`n!m0sYk!P8ze;F*ZqjOs>$Nu^+?%sy7AtMZoJ-ft~UdqBJ{6RoT?uK1*%%n zSPA21C6(8muR>nsiLhG`)$Kf`p~PO^+s`5Z-Mp~1qF63$5%aq zhi9|I_?8UDn(>pBHLm=$Goqu6Gm6#Kk@SNZG@}|)_o9A<(5d?=93ta6p(!V_J|y2p zl3x$BKXOW#Fk*R*XK8_3vprLs64#MTUs4Y>BxoYJK=peTRiSxYSWfMDQq{Q+THGSH zinSo5yQyp_=Wy4=;83!H{S$nXVmJ%`+wPo9+);Pt`OCR;H zLjr@@S@ZO<*+LD=ssGT2kTdp4YO>IF-$)U@BCeb2P~@+FCEIW_*czm?*RW|H#}=)s z|J8wzV)9%Wu5ZT(>wbiS@Kx?n(qox&=%AGodvtS4$oQhUM*1Wi1Fu5s27 zPuRY1KOqdIzy&kFYFkL-kCf>hMbji&5mGZ<3o26>xG!P=C@rJxm#@*HK|#+IO!HM; ztPv@@7qPp^<{yKH?;bs`xs&#!0 z^oK8?dTUvz>V5(AiF}UcI?d6bbq#ipgu}1L62?uE&*^+)D_#4GlKMs#YdK0{-DqP_ zybNpv)TK7g+e53qt_x^;hQV}US+wf+%c_dr1GdU(*D|Wbj?FZk;jT9m=l_`PFsQw( zjq~JQFxS2V$aQJ<2Ml-h2~~X;Qn9m1L5HiZiEknwC7%q$2H|!N{s8Xas^8#uX~aR zeF{A?Vsb_xAU||P$wQ=l6_^oEKMf4BhZtk;0y{*b$eFtu*dtHl+0)-(DpR_wz0hF4p?r`$x6AxfqY&EytDYAMs!f7y?N7{*XJOD0su!IPk_ zp&Pug!5(rpS<8iQ<0OeeXgcByNe*7kBwQG9f#M`Ey3VRobs(g zigMDWD^a8%3H2~VjJqgbc_YByH2myFd@f}cI7->&m5O1367QVyqlCcq146+5<$9qr;`~Hi zIj)>W{L`@Do_ODuutwQH6Bo0Qc__Cyt@61?!?sMN%XR227#*u_W>#qL22(gSGTcD> zpXdiyi0S4FtdtV!>55EcYK2{b>$RBX8$)09OCQn1FmEC8_Li*m>sbNHtxrXXld~dm z(KV*oL5AlF(VWhvSGS>MLcW1ZqsOBuxjGW1v9Ag}4akgl*|d=97(LZlQ!C^^6`=f7 zd^J7EKVE!UFV;E(&>NF7X1I^bH$Ke;cRO2?y12%5{w5fXcQoV8oKcU`;rtzM=Nb!{ zrhVWYoTu$weye@>*9H;R^1;^T8Ft{y;hWWt`sVT9pK8M4$;$V@?WUr>^3p3Wu^#Iw z_aPQ{xF-E4VB|*)C8i4+wjtYT^ev!^?K2ebEJoJu zl!}_3;ba;nLYd*DbVrI&P0uJ0Rnn$O>jAuPBwe3YUXy{5{7u#ORh1c*&7rZ`oT;23 zYbvTPgsOtFZW(yPP*ovxwSvzKt}<>{b-``RVCrpu;nHJU^%KjJsyexRqP}$}a2N!B ze^q7E-~GIg{KDt%tElm@rN*&Xt=xBys#O+_EmU6rAT=koRL(z{*K;ZYs_34Yo=v9( zNX4&bwSHPn&rYYsPX!ofP2jYep5fw1)*RIBtUau$=@~AiK-(yJ3jWG}289|nS6Z!= zjpbHr`9F(tyw+UVSZTJFfg(k`@*iLMkL(0Hp}1g4UQm7u?F%pUYR5gZvYVOj3|^a_ ztH(xK{@C_Dwv~@<+tiZxs}t4g#5^8OHRqe~_mDO?y4fe&CkCo z`VOXHw@uslw9v+lS6(3Q>X#pYaQNRUybbA={JRtzH7Bs z)47a)2lTqQGbkKxSEto!^+x3G7fVkcY%FaoPw?nilcGOizVf8ejajoke;gAXpReyW zmz!#Ge0^m~g)}-j&Gdlmj@nu(`DL|~8H}cRP=2`g3go1soPb!l8G8*ByEKTXslOpG z{l(r|yJF9+oe1CXqtSfCApiL&nr8+%my()(-y6acYjbv`z1Caw&EVnP2-4IkVLrzr zIvSO zb8#-!_1#LvJ$+PdjAj>u8or>q^YcVaWqP8@DwS}pWtZcrU@QnF4Klf%ZflC_XyPS< ze0|ljqH5Et&Gb+AXKG%v8r5V>L(7Vjxygme>CI{QgOj-=zC4G44Cl)GH3Frh^e}cB zMG&Q>#&m=>Zk%x*U-3^XjWCYGMkS!ZYwsXIK@`n`aVY6}wl&jClIBcnc73_oTwed> zafCh_&&2Q-X7rM;70o?{6#r?oDzc=m%TSOJnZSgJJ6NY6kuWUbtq7e%5oNF|JwvzS z-Ei*Me9VIxbWWUF>N zX1fbXTBrH)-xL_>RK*WKr)@%)PjOLo&M@c(DBg~VQ=2dlIG~`5Y)?YUm#IvW6_N$C zI?&o)6^r{)=I_1@PFXXJ+WA^=oXv%;l0Q>lxr5eV$x)pS>-8)oNPA8K8J}Vu@*|tq zqxuZ%Z^^~@NQM~QN?o6JCc6_8-AP#9{|8ywztp)@+dD7xXD?`Ch@VB%c@C+6j!q9SHHll0cJ?)4?LSw{ zdE=bZ2}N1#;_6cZ+P(n?9BkO28|7Y=TX<>UsueC-ZEv#96)n&w<_*{8eBSUa)u~oA zK4Tc75>!;f1jTp$ZMu%BKBIs6iVkU2Zo9@D*DHa`tiYIglkfw}2|WH5UbE)kt_K<< z`-~nGa|%e?Lvj>CpY9~yzKiKt-8ohFB&OiISl2OfFS(s;ZzNFfPchsTAlpM68TEJ| zCsc7WRI4|wX-&@*D%8xt1TlHGt(r4I* z7HCk|D}M$2twWt^f$TAE9Y(Zkr@uvbBGx^Qm@RDL(geEHs>dy_eo2_(Qr-K9?E7(D zqv18KG6FZ%)kLSrbif!e<(~D;pvf zCb|lP7`*wWNW2+c17cOKMVeMK<&GMmx%#AL@mbIT>T^qtl}G#iM^|QBo*jna+*A^(x!H_NF1mxggH{ zqZrq9;5@qjkyGL1-ES=Xy-<%^QBEpPD3_H_;+$%>BX*Oj0XY_C6XEE;4@KPVz%6ns z?NB|WMfomRo+<`%OFMwhHmW5cAF8D&oHcc;V{GH18JZfjvJKW?$7A{IK}lrq)@>Lk zv;bFGbj?%w#DZa(HZH7jeu*25Cz=5w)Oc_1)Ph#=w3;4izQ%ObHmA61slrlCt!{uc zG+Uc)s0MxzjBYTu@8OQ=sDfF%Ay`?mR}I9pv~}Aw9d4Cv!U$20AgsQuJhg8%dmbKIo`mmFsF* zep;xuj-Q6Y2vuEU0oQa~zK&IXTr&*qI9FpK0@t5DyER>2N5Xi~ZyN3ShWXz%#xg&} z4rSg`%lnDnGsJprYLs*HP{zHx-f&Nu@!2xpjj!A^(+jKm;!v5teQY0>&VAu(Ji1U4 z_qcTlD*z3D)2Li0(xG#kHW^||L$z9p1h^kA_IRlZ)zWb}`7r`bp|BCfompljcH)X@ zYN5cE0{qYTj*0jYssO&A0SGk$ewbmgg;PVN?|H87qCX}^@InVm#!MH64yIOOw^~Ec z01%(i(rvqnq3}5B>y`_4q%J_r(9S}=eaE~qGXA}1q!x@7$a+a2G$f)(jCB;sb|#ed zgHpjYew@B3$>y1{f&rT%a!D?TNN3YVqQfQA>Ych{Z36eH72@f+x}$ULP~o6!DM+VM z(QStvCLe=OZ!db@;^59LrJAqHxk^oGf<>|bz4aQQ7u>DfOGw6VQyy2oS9!mpY~|C| zgo*~rQooIY(Lr4vv~^>kOND;3Yt$1u1En4%v_&>`J09R+hEZa@8^(v6dT zrz?GZqk`$@>VYO!?*=~fg}A}AB z4XJzhUISA1*a_7>uCc_>+VKK*r9r(^Sih=IL4))x)0;iljN@i6Y4m!HzN(fhO{WsvRp&ZZ|A^nT1};T zpYky1WAB7Ii7~Z4HcqZF!fwG?Y@l+VN_L(^ix0O^xTxey>FNf?hcjZ5ak8D@J5Zfb zzJtynPErZeXJdMr%6NN7$b#3CyP&2vLYpze_Y(eqvC~@FF_I^l-e}fZiOxREMNm&_ zx-DEMR1MbSN#*m6&~b&`!!JauK_%fJaJU~BEYUDsLl^Ygu*{(uFvkwT!qy&{p3scx z?q;jCw$^ItcTYC-wKcsld9P_s=_gsw3~jF0Rwt*r)5eBfgCQ?Gc9One;(Jp)xUWr2 zKW<|(+nkrLrR&bGyv!!p8d$I%#hg|aY0lqBjIJ@Q4!T=7{fj>B%)yn5{+)MLPkvnW zLUZ{8ANcsmA2UPmhxB?~pWYeRo0sj1s;&Osdp~)3^G%vs$!#>;|AyEGxYOKNmpC&i zKA<6EOeO2sv93d*wzpUtY>`@jnxt`ja3_5irheb({K3x{KytX z?k?>|+L!xIj>)gk&G&d;x zRnUKcEcPx=noA84HxEW3Yrg!yy`ZI&nfGv$ufL9i0jch)7GFO*K*WZZ|8;m?WK)zU z-YocuJ&xwfMZwqKNbZ9}`A=r~FOr%tl4-m_S+bZjetsmohgFkudjqGBm$G?+AI9Uz zOfN+lPWSeszdib{-6W6S&L(xm`dc_<4mK6>sNH}^S~MHU^fWt~$NwAdUmVKjan5pm zY?W{?dig9j;>=KO8;!9Zja)nCp5Zv=1=G1o$C1M@qD=l|*T~M4%obdweS`+tBoxg# zY*+iZpAh#8c8{Pc8S$37ytnt23l}cDFqXP7Cj*4`9j0H{h16roJemH|w!@UpmU2Cn z)fwdx7<~_TLJc}Y*Js$sbK}P8w?@AgItER*Et<|AXykMb2X+B|$p6uFzBV?AT}p8+ zeLVhf@`g{5Z8ztg=LlyQz4sA{-+NK{2*`mD12gBXVOPlPI(wc(`iQHfyvF!xeL^iF zq%-TMlKFY7_nze{aLiQKu`m0sBC zp4jW;aE*QVxo~&)!nyRET&}C`zEiC_U(&_d-937;ivh|g?OF7OvhsDjavlCbLTph+ zTh%Sph2|x3a$HkoMyGQv&*Qztx4t(oz27|W7_%*&uXW(RJv?-F zWJ`Xrr~sD=;ug!TT2btLY{quoQl_C@A6HH&n>kwBxV;q6x=*PHC6_gFw8PRCju4Mn zK)BK}($b4Iyjzov8ZTqoGjMk>YdGv5 zb^22JTR!ZKxhMC#j_scg(kts<(x*A1PCGgHT<-2qpC91IV@3T1OW?r!_`HM;P~w-I z%xOpexuKgZ!$kY`!L;ybC~=OTR>dtq)0XZQ^|YmYlkAZe z^gJu%0fQc;ZzEJL)MGcd^ONM}?|{LSog@??zMKXdm=Enm{@iWab^urM=We+P*OWi< zirHrRdv@r}eJ8+ocJSPXAKE8-b5}MiE^}EZFQm5F0a=8SaIna-6M`d4@5mElT$&^A zT#+=Klmwo9l~)Y6@B4^6kct#!C8fv?5vna^YTI`Yy;-&`RtdXNSs-Gsl=Ou_u=)BESnDN3=ob(OFL7ole5(|KU;YD1qdp|h6|5?OOJr}3zZ^N{2I z>C;2@5#k9R+_6&1rvMDxp--1l0e7xeFUUrfPiK`PtjqMB)4sHdNgzck*o3r?YnReSnm7Uh7sdy=*Li7t~cX4=MAvx zz<_P=UjP$tN>zWgHOsY^xX!q%8Fo``swO0W=feFJFc2pp?JotK@_pqMwha6tR$z+3 zXOQ7MJh={>f<B zJ6!9SZkYO->-B@CX6wu}Im>xY^A4l_HtzPr#Z1~TuIC#j)eiZ562QartWxnI2j3D7 z?mbnF7Wa&&O^+u%O$4zy1;jC@&$tOjoUJv3zUQv#rfIG|Y(<`GOg#gHWpM{E@6*cn zqGwlF>{%Jeuo3yi3{E)9-Aw6<7_NgMRW!wX7Xq%Nl9Q7T>LG$lK7}!7HPtaOCZ49+ z2F4rE4BV{Dv=-N%)`1N~99CB~hnXGVWy*{Lq4g5(nNN=sbQi2^{lheG!*JD=9Q&pi z*R>|$lDcN!w$_BU_6RowUlp4EQ@VMUO6Qp=L-iu-;Z=~%Na=JGr7WYf%J(VX|0-m} zXh-{*?Ahjaa&tB8NI`v6;}e`2LLdqh$?2#Hd6RMyP*v}M@mEyw`HyCzx{upw?fdHzG zK)gl#Zs6>?0oUthRj;OfXC399DpIL+>&A z4cj?GsXmtaYtY_OS`SVzL@_yM^l+*QLBOe(8*G4R{$3?!Dlll&Vmn~ITd{RqcXWbt zZfK(?FNS#JjM+MOjrxRTJCJtuoNHk+!wodu&?aKj<+zZm3Fi9nt6FvgSY^V}bzDT& zab3nR7@h>)3<$uCG$_?w2W)0R_;JFiTADCHY(f}SQ*ghEUhgVfS~e_|)wqhOG!>+6uGu+x6F&X#CaOM0G@L(5>BL{-R@ zT!N_QLp+sES{j>~Z_9y7!gc%TO2QmZ){<%!YKe+||5aabvubGEa&058B^m_81wy%O5LZif{e&I5Y}9ef@{ z5Ixq6{Z0p=hdQ8`>{gsl+jWeuUAI5&R3y>|9n-O3ntVVPl-H$W0aBH9=?91cZgfA8IgZA4pl$|wDi&0Jy%Io0;4`?zk>~|VCC$V1)};F~H0B?! zgkj}}p(@KeSshmXPvvD8@6VxTN;I6o4a!@a7^ipxkEz>ZTb}s96B+47_M5%b?Hlc1 zKyvIv)1A<6I8NQdU5QIjpm4YD>Uz~q99;`-O13n)WG|h8VF$?RYnt7wV}v>(PAqc- z&^%!ay=QA$Pf&t;PGtMlX`Z>E%;Bv3)`<2=sExS!EI;XDf}~3$40I#88rmaxXzjQJ zp*dqa*KE5jD&`l=inxr(ydkQ=DV%!xbDt1*8>VTL^m-#*%PO?&2&9#6{YE2vW4qgz zTfo;ad`_l=XU^FD?1VJ&r`$lg=mu`htui{l$O4zP=>9WF@tlO1rtlAbyi;{?qb_dG zrQef8_({10`gEceYYD{mt$E7R_l!8PMYR z*|ikSy&>UacT&M$EOS*WxV=aL0j{Om|D^&z{zb`yEx)E=nH<7(?iB3&boR1dtf3es zt9G|sTKT^FjFlUd(ZM@t2~o*~wcL`bg$GOP_|Vml?Wd*Jq0(YeaXwUXSMoDB?sZTB zHFJJ4Tm3#-XL#SZ5-m*c{LxMDEj_d|C+=aWcZ5wxJ9W5pJCew>Noix{5vD-zxrK*k zJNv`s`=e4m70K}nhsdZ?6!nkOoF`r1L-HxgTlNv_${or*8NNqc%y}Is$?m9?Jidkg z$-%PSIOP7765%`Ll9YUnX{bZxi}QTPfc~?}o0PYsFVLcdWj~0zpYe2HqGga3o-E9R zIQ<9S7>mgN6-i!47WOxfOmR6a96Z!YLg-1k2>J7ON`CxdA(38+;-7+prF|Fl`B>k( zN*~ABLEgDby2%SHl?xggSZfh1xogPIA3G#tq<@NrtMGLi6!f)p1X$DmbytXMTy$0a z3;Jf!HSMKCfhFXiP{AH)(zPGOap6(hefNEg-KSlW>>F|(Bb|>?zA5*{r=^g>GvOxB za*PKFn*i^dV5e#3A7EApYVz$opu>xfd6y3QGYpx6nfhtNSuE;LI#&aEIgnS6a?4Oi z+G!mh^b?tLy7zc+Pa00`Bw`XO`CNtpb$LndfE|Ie!HqI(xOX96|K>_Ftv>cN?nQFa+SFXRj*l=y z+cx)RK!=*?&+Op^D-q`xVr?bfzJ7cbfA}5>4;~x?$OTYQ>hozerq+D zs8{cM=e@PC;rE{MCv2`-p{erP#!6T@-jsXhSX2u{uz2j)qA#ko-*d?Ojj2_=*;}8X zEp-Logn1Q?<2#E(xSUSsq#iG*c(rdRiplU8x3n7Gs%aKK=2SD$ux4{v$_Cfv<(90= z;UtE>b2JgS^dy8dK$_fhs{9Vw=6!vd$?X^(OP~r6#M$U?3VGHa`W<}o&7v|j|VnD6`UWdIllU+EH;# z>0Jd|Db;i74w!OL8o((+4>hnv-SQt1)v)gD*&CD*$ z&o9i*Otl)_rXlBgUwIk6y9VE_&`e*H?wjkIH z=fC#?tzP%5^|&)THK*2vsH<~Rvz@qJ^|2U!dSPLq-CJAxwSrF!ce?ZjyngC+I35hw zi>5@=Bd+DfrR1jS2r&f~t?Nz9tleaVA=-m5X-rPe&faw8k+gzo3Hrh`v<@RNG7@Q* zKU~VG1)%X)7A6-b*XO6Jkh3?r*j;N+PR{pcru+&IW){0_ZgqEOZ+32ada~K*PIzi% zX?N$Xb92*E6DK-NS5rjV4%eZ*OoH8WhOl;J(Nj)?E=^@^r*a_K$c;-eJVjt##M;K) zC8<3B-hJ~^NpyMw33I|ZjW;H$$L4&)XiY!td3Q`UpcU74T9yfvS|;bsCUm!9W8H>s zxf)KdZ!CA)jl}Vh@aa3(P3!Eur8SNE^NlgY?1*YANbGtuKl zHEK@G7UQJ`b-Y3m6_pSJ*+}A{$>El|?81^tm*$vSPc}A^y2|F3Slg;jRqOB{{4ATI?gj9lR~PU1r{dPs9Q-%cil>N_6a#%t zsUs~kAspv3$2b%81tBgAHp%$ITzpc%5zYl$R@EI)J;?$=PSFu+Mywi;ukDu-^H)*@e<7 z>sF0{N@LlfWz`mKE9_*ywOUTsDvVrrDQ{3NC?8NhLD2-H?VrxhNpmQlMe1kv0YdL> z(ON0iVgpTHqYK?zvSsv#jjCi=wc9@6O)-*w^!e!fmr?U4B~H$QkgLrOS^$$ZyM}-A z=RLTeP#rlG=YL@1yls9{o{Rh@TLA^qF?SvFis?v93p(8eiw%sN$PR2LaH0qfa2oB> zHyC|+5qFevIxOWmzO9sCDSgV-MnMl2M-k7lN|rfVw(n9dD_>N8M)|LmtIDq_zkyoV zsKk?D*RBKpD#?f)e9)4=fxlMSf2V}EiJ>GjHGI3D^tajx1^L~Qo_P_TV-!quN_u{% zT;7)p+$#w_zxk~(rREhEJLCeKRsiXCi_T-6&dJ)PP`ZNc?k?`Uxbx!JB2pP2QvzwZ z>=xOKEyI6HRz+4Rvg&YsXXn~ABIm{0M*XHo!&8Tp;wC`)4*ziK>f>>`UoXr}FYHP1x|U4iU}W4If`GRon4=vOL!_)*EO z(1gx4cIp(Gjy);Qi!EAMuz>5J{@+8)(jnyF9U|8F&o-uVQ*zj7L%HLS;2vec^w?j!k{ zOAPwOKslf4gp%N>sH{liV3dJm$kVC>&zrkwWEK6(83UCd2M66N@v>L209I$tcPa@M zq)fQ)Nx?Rs-Yc{7t#l zC{TkNbM#}t(K4~ILVWGzn6OoXi24^dW@(wiXr5jn&i0;8VN%~i=uTg}Axj6!=*+7t zqi(6ox%uL8PGUtvEUa57m|eNXFjOAs-+0d2AE4Q^zCwe@*F;*38X86H>DIeRP{2a zXwmunJ?6Vez6V3!rT}hZC@{7LpSjN z9=Pe=Lpv~rr7nb>e0}$beuNoAgO^;5qh+w8I+Htx#x04iC$wFOb~#ihvD{vVv14wb z)+d)?~gw>i}X zrrI`xgT^&maE7QNV6mX7ffsaJWz5EdBh#n|0fYsH$ULe{<9JRLw{IUPKN4D1Mwd$(t&CGbNT5pZ7UC|}k823sO_a)jY$~wg}8p?HW zz#8dp9WX=k{$a2`L`Gb)I*`ap(P?xj813HG5-EEnBO@z|v=_PiX{-=W@8x~+D#`K~ z=n3~9(RWcNG9|-P46;em(nc?IvqTdZJsih(Z*OZ%sg`}wt$s6z$+u${jojEbosM(Z z2%|0}TFqXB7Ocg7SnMVY{kVqSA)#p(eht(P<(PR3?QoN#mgPY>=wWw|nej(8s$aLw zcqXRZ`KHZIX1v^}UA%+HFWA|Wj5sv@Q|tmc{;xp)ehbz^2cg`I__W%^wMGQ+Im&SO zm)=~1TMyq|nNP&yZhO9I+0FU6mT4X}-bWU1%z6F0ZIR5+S1hYJ5AVWpPS&fG2TgIL z6|p#mv|BJBm^h5i&Jl(4eTUKcYe!iVWA*6axssITD2KE_XyWa^4n4ZiWqyF7NP-@z zp&E%c?4qEtKbt*uBY8J(S%-*KX7L=BB8 z>63jo;AF=%b^ZJCgulnFYT85G@jUHGL(}G^WaqIta7jGJ=74@W8Lg8rHtuGt!l+@A zcRs~^F1OvINIt^~Z^;h;rLN$%aL*GKJ&=iw_?Hf4;3MZXv5)A}y6y^_!+TF-$R(@= z9EJVZ;jFy#yet8w>|Y;}*QYX|)!KGWIB6rr)Ju*6)uoVXbL8)MZQpciQLvBB<^OZd zG55*S6fSB125aH*x?}cw=)~FUna(p9tQxPQC^#=2LzM!P59ggWQR|ylY1TN$SD#h~ z`kIaz}V{| zz^H)$f(R4{mM(2`TL;51(cz3>1JNT8w=1Cs&pJ9mZ4aVt+QzmH#^Fyh#!ASr?M26p zf?7LbGrowt`bwZLoow>NoAc{2bB%@8e8+L>GDV=({rYlsB*i{1-LRi2!An*(XS$kn zY(BX)9k;!f=`yQYwfxSs0Go3$^j6j?n5LF=EHSw~6}A1Q<*0ToFoVtvOB1cGmT(nK zimaKt$P+9U8e);GHg~Zr6Nu$K@rbIc_ik{VzfM9Qy(A&So?!g3O_ix{CdKZ2(Lb*e zHp4vjTBEyCiU5d|6C8{|R(GHt$-NQ&wQLW>eOb<{X2q|VU>RM<=P!^(8KS%Exdou$ z-Z?ltY*b9MVn7=z(}DZ6(UUNZ)=7&yBdg#M(wC9r(=zwvEW6!w2YBq4h*@{cZ$M6v zA7plaN)8;LT|JYNvvL)bT#?gZD$_v6*^x0A&(y9I#^2Rvt zl8N|_;^1rOb{+>Zf77`d#D?Six#_F}ksJ2{x$};B1+CWrIKf2F;M1RPf-w?Yp^l&f z#}&@z?*(gh@gjkjqN}KvN#^r9)ZX$FoH?qLBn}Z92pFGd?pb_Z& z{7Ei;)T(^2V!d89)WH5TJAmJ7;y&y+16OGGVR-cK;o=VH)}1>9mwuK-zHJ!c$L5^0 z(HpeePSSn#H$%w-=XqoU16UmoWFLN$u2>uIUoSQ73DT!ub@Z9AKXZm~p( zp-i`wcVYC`(1`NUB1K!6$Ic4cYP>-RCU^sG_vK1>=J7OW>zNDtb|SZ5U^7RQSxSSO zU1dO*!O)v;t2QSI$YQctRV!v=Dlsc6S6g>XA}H*{ofE2>ED9akvff|}N5QjBz`~FP z4lUY1(}gZs_`ZPt`guwjXw0~a3DBL)ck3n<^#FV<{_t0we80ioMg76Ll1+36&>Mwgv?f;^y{_ zEx%RZdRt3+*^}&?C=;XP_P(*B&9PNjhNLdkOt}l|O~Pbe`6| z5-EfrQiSzHeqGSel+*IyGHcT$r$|iG{_=bm_b%9|ym) zu;@=OPcODTx(`piHl0&SZ+!uu`nf)aetuJk8#-($8~O$=(6;C06y_P0N4Y69gga`g zuQ3srbyOzOsIz$%%gJbE2sNUVcN1(N)CSA(=!_v!Xpb}$MIRl_ zbs#7k>c_*T+_8lFotdZA%|I~CSL+g0ri8!}mMDZ)$+$S%M2*(|^ayT@^4p-V)=0m| zs7Nrjo)k<*$A5oPbwJM#jR`x_RbdHRo$%{E{QX12!pPZgon_3_p;CBXftDNjzA_wV zc9u{#M|F$?d}k{s#h%w+8ReD95|D9l34rCthZy`o4iZ$90q#pXp`64W3qy{J2X>eF z>LCR&c9YrThm=DZE+#C%X@2OCf{^8KRrw1gK%eKsYr_Fqr1>3E!kPR7<(%?X!u`OQ zwzwlhI(*@dqTID6PU7?~?cR_Peh1rwY!B@gVRm;4*Uu<-JTR$lyQl;O5ALE?=RdSdVmG+%XqtnO>QwPY;Pj1P z)xp)sO#ueomSa9hb`yLigr5gVO@%L)^i9+YHYs}eO))goJHBujk(cFe$`=pIe;155 zvf!|vEaDS2pl+U19zpNDaNZO3X|ZuyY_18TzmZ@-mAc_^8pe1RjPuhXhZHu3Or*aQ`*0+srLg=~#RFZA$G$P25M@8#}7n zp^cFDK?i)>f;&WR+jnJi+(Q$S{{_lzZ=Bq2zrq!Avz4`c%*I(l9FjYO@3y2aU$Vv0 zl4i4$w<#aiyrSv6+2p#mfBVg_B$p~!eGe!Xl*{N#*N+C<(DHKmeAmTOo71$}P|9fM zHbu05<%1#T;RiE8{rq=LPQx7)^jzOo>Wav3uy5=H-G9jMfDHJ%;dDD7H{xN zw=F5XBqziod57|Y=&v-`-Y8qdplPLxrZY@-TZn}9U6$Q1aT9tJ=vPb~_n}9_myh12 zB)`s!UJyQK@R92e+X10=7TAU?euQ54kn(Z~KBW7kN zDz-k%f7jbL3=|Gl=+L=+tp%|G9S)s!hi z-?>4Fp9A|({u-*}NOb7i)?L0a^feQ|fAKYtotewd1Zxhx8@@+*pYkc?i=}ldBf$Z? zSo!`>*w&x35M0@+Hrt#B)RsMes@%Fe>EU*p_@C*f>6&J{+E$shL?U$EH@?;_x-5V9 zfczx{RyyZamh#~j-);Ht6%roTvA%X)>_s8L@Rmf1X+{!HuO53XZN##5Ej2Bi#5>@% z^4*r~-+%!OOaL}fM9?-dzg>;>A8`1J;Eu?@n121~+m)ioWr!l1R^PPk9`rf`zYt#EA zjD4C6Lt)_Bv%GM^_|%OgW9O&H9E#>^K@`wRykmY1zkyR-S3$@qCO^JpWoh9%Cx;}~ zONE7kOV_qn*qRc7gb>poV?dWoMwp;4FOg35Tdj$Bh*5J+cNYQf=VTbXCuGj z`=T)wvKMsmakFNAT`89{d~&`z$XAR+&%^Mg|<`W$Z2EF(ybzQWmwP4 zdodTibp&F>Xv~Ar2rMrVTte1ZiH$1-@w>(8esOxpI#=&z@NF>M=cl|Ef_> zu7>5lDSrmz3GM2_xS#O-?aaLIrJ?@hq1#4OJ)F3omLTcr@SPvJZE_&U)YzHzUghIB zA3@O<&>a*HbSCUdZ+&Jrn$?qI9Sf|tfJ-M)N~Tu4+9!0?m<(hbl>O%MN|;~}2b?Xz zB-uZfgq7oOnmE4TRzoc)J@P}%ukJ|xv)HG~wK4I(o>%@m<#&{CD*saXx5_Kbzmb2J z97aYFM@F%6^9VeLKffV@$pM6uquw8Re$@N7@O@l5>J}@^*9**(-^+nTk|DGa#tz-ONkOG0xPYzfZF!#UQbySc z=SSRJEQl_{s^lMixOlGRH~A4a-#F%`isPei0&U-^6u!=s56vG%9Cmzhy4tTVq`jY6t2fob455+es@H9Kz!61y(Al zQcYMas^5#n=Q<+^Zgh7i&#wdEI&COD}TaTglV>*98*@(@mOxz!pNrSsxU4AR}pZFLc-<$&I|pL zRDbEmyOjRNnxGexcKq^xC{$}^2<!f}=ue`!cXi-hMXIXmuQRI$vii*~o z2T7fv9sLx;hXT$I*1Hm1aT{+%7^?yu=DMI~;p6ymRo~P3jtYbE->(ss&fYFwlM69W9rDgZaNj)5KK$`lyhEZLU@}?yDB$edf>jqRw!~HGpg?M&%41tCeP~f zegq3Nt%-Cl6HRBSEe?I_C86VV^w0;d>*8~t6M9(stSk@oS?MZwQ7mk^wv=ws$h>9d za;KVfRmJEQJvF+XqTi9n+I4<;GEzaUq9LR6{TAFs0!H4LLAWXyTx2T(U$je5DiCpIgZ+fV>OBwWn9*qq@qki6U$&Urd~J7P{P$L=dxcD z1?@IokfB_Qts~#OR?N>0$(r&wXwzgad}@xrn5+4FSMl2~NXZ_OgL0dBJpUBt@ytd1 z-o-=nFmk_Chdi=RD0eFlA~x8dJbhO_&yed7ZQUq67>o+JdO*k&nEt}>;bL)N=Qp1( z3WLJ%8Yf9$SFcM&Wk>#;OP4N|Wxw)5UTOdG`2g>`rMtLlGnw7oIjPf*3Qg%lh zEr9BQ0yuXIJZ438O-3T7Sn*#O!=rwHMgRIRizOaqoXjn-Z0<#kY)~K#Zfr+~7T!oJ zjfyduY}YKF@bv?{4e|6$UIfrkb;r04)jNcuOP%#MhYRdlQOY4sSsTvI*G%U{XzX7r z)yo6?l*%SLw4g?35Rkt)!XhQp1;cM5t2;O5=VN&f1lA(T^@A$^1&EY<`3 zl>NV($`tO88XL zAkSrrBK-)(0ng%aV+e1Y!EPtxVsnq)gLDJDSB`NE>GpOrd&Qq0!FBYAc3H|Wa`J!F(eYUx_23L^xl#AtiQ^Sl*H~-AZdWG)Rb#H%tlCR<;Ci-c zIT{m!8!i*>%(?aXsh|RCG6s3G0-XmzB@6`4^OI3-Gpz#sZNh&A>ImY7%mE}8Lmm&4nxydg{f$AVn}<}~+?H^t@G4aL zZpUcr-41bOG&&7k6I|3a+smk*_KA823`yH-PA#8qRBBG6YWYpmWttjHRNHoK(qWbr zb+z4PU$V(qFbQnNfzaoUo3=W_&vLUh(_E-06E#!gDi?w6R=_;1SsI8AB-omC8qBC^ zx&N(77v|zUQHq zuFt`rp#@9HmqfPKB&;0AGGHeZPl=)3Ze!0kNXi5dQiyJhqoXSkt2QuPqWF@^Gg7|( ze00ajW#9Y7gCuR>Uh`|{oce47vAdCpjIGEG8>;&hh~EG1X(J+>#Oa!7W(QMw6D@lE!KQ36rQDrdZzKYV{#k zm{m`BmD-8kLdC6lMDrb|!Ga+wukk&d@(t^7@)r;N8 z6z-dW*T{`~+}O$%c`)OWUKi3RL?6zF}RRw*HR1yFEZk0veJ2!4N> z{UKM`{2Ayz_PMSXr)*i(`42eS^U%{}C$cX~zc+vA7Y({KpsPc^{+TUJSDWvn;)Dgra=xEcAYJ2lM*k=S=PX%WyBpFwbzs#mnv_@;<0Oa&wBYE??eA z@6)tEeu6#ftlx?oaY(a5+-;wPj?rL7@MxZ0K#XO10{Kv%9aRq z0Fy8=62?~3qe%%JyWQ9#j;gxesc=${^TYkIfpN(@aX}ZtLizp)jg(iIPD%+ z&oR}Lxt^1W9B!-3$@Zqb%n*S9`@=Mt5`}~Hu?xxEWjh0$;z$MrF(S7|#1Y|H8jm%r zbG@K#nWE~#cRfuv=AD_?@wvR`+n%1^qO`x!tgg)k^LA?@)*Zn;(CgYxJmdIo&%%2i z_v#_M0k=H2(!#`ff6-FDkf}7G$(Y<|zgRIGZ{j)4Vp=mH+**aEAdhvJIo zHtC@_M}{-S2;09k0OfdqGe%@6Y;8hs)lVmsJG4)4eXAWCQN?141scyQaJ;Y@yB@0~ zo_A4IUCVV=r;@-i^;Iau#H>`zmtV%?Ii{d`}Zsv6nsM5X)s%o2yXp=>L4kHDa&e zbs7@yk)fYyTv1h38^>23^M}V@5@Jovm0-y3kqD=604ZElKBWAx@_FUwm9HqjrF>oa zW^O-7?uUeA{B=Iby!meXYlR!$t|nf<(--KpboVMD`j6iICZ2wC^zJ^U-M_iJ<8w=+ z%N&v$Ym0I?#?*f@#Y~;Mm1pD>coQ#T)%gEc{gB<@P1ldC_^%fQa=j?h;k#Lp4&Tjy z0dD5*_}uo=N${hy`%h9qQjE>qw`s(e{?Lo_y7(IM3x~ymn@(|eY~NP&*(}ZP0p)S1 zi#OY68#3TDIu4$e&esuQgXq%RkX9|a?R9DN`E0!(wYO*(*9Yybbz^JLKcWLa4V|jc z1cDyfC?uz9JHi0Nl^lm+3G{!JiH{RST3^Tfo_Ckz}mMr$D_F2Ew^G0+dJ2QQ)9#!Yy(3RX)RF zu~MDvWzv0Sl@(nIocPdXD+=U#qqyA8-C5KEFAD9z{S{jY{SO*)D3|3L=6r#4q zl)&{Oez#q#mEL;^5#uyESfM4Qb(fqd-c5hf$8ZRH<<$B73-T}PW)Jv3d-H8IbAw9` zoE%Y`b_@c6Fo%A|mb@qNGIoc4WS<69|Haro?Qn{FMMpO7uuHSikahW|nEx?o&+weI z%BF^#d^+g1h0${KtMq$ozZX4!%kaYDIE*;U>O zE#mugOE|?qXb+(rMD5h!Aq{lSx7tP-mIBRALt+j_{jF|4U+$*?J|ZB6t<1w5+QW{} zEjI|$iK*VC>6(@uxOT16v1HNw4o1AMT6;T$M#(P(t_5#gwU8Z(0wm7it<-Hf)N~UD zNbXx#+~DM1F}ojH2q5oT`}?7Ea_G6ie&9~RKadO-i#a5ZJ4qVvQ+`nSSh}K`F1#mM z=$j(uaAqdS0C-@u1Gk+Fj(=+~eISzYHf`NXjHsUq*NF6(d=T^~!60cl%tTLUwj0N(Cb$>_6t&yce_diH>*u2??TQAi*w z>06ERJO>TqOom8>S2?zEtzdw&Mf^lnb@(-B$g98aS~g3C~@vN!+ypyrAU%vf9Z@y$lp3FBHYj-DJi{5kYtryVfW>c1C z_$X8r3b)QZ_jS&>=ltg)C*@)~Zsve*r#Olx$Hzo3q$rF{@o3su<~^p%`ppVX34 zO!%gHhiVdaS*BRwC)mM)ZyAm~VHB$MaJo<|dRpiV3WY#!D4@?x4V+N(ip9coSg#h0 z3EMF&zi^N}p{W0a!UGLCkdhoKSV!y)qH!62+KptELBBGBY22rY)`+l(|} z_0{R|oc43^uZ;t6&uzT|HKj znI_8%3&^$Tn5sK)-(q$+S+2O2N8vZ(x8wPptkWIRkt`{M8Tg=dglFPHKTXW4CdLGg z5Rsw;6L7agPvJ>Q^4Zn0^BxnAI3!}ZG6oq41X|1oY~=cjB9Fy6)bT55`2Gi|xmPd% zynyUM30(OK9-7=g4!2jT_{g&OVT;lN2t5_?F@xC(b^62N>N{xxJlS^ze}=E9;>%8p z--~~DDzc^U*Ds~7IsqjVD3r`UW~h#d5Pw))3RS?%@uaI-3Hs z6GXA87^S||k8{SysVQ^I_j5%mQkEzRi1{Eg7A=3XY8S3FB3Lm+9?5u7f9lOe8prz9 zxG%M;Th?8^RWDw;6g7N!>Jn~KUJ@%k-jmXtHK3E}z_nRv1$1^HZ}Kd7y&Z(5G~)`A zt{2M$s)rMesN5#f6K&@xyqA-#tZwmCY6|`NtUfmcF~bDLRG%$z5s@yY70UUZAg>pA zu7+Vw@6Fjmhr^W^&Ua;Scx@%&@YYVYPILN@(j0FujOFNqoH)chPIEKxxT0xk4tj$$ z=tVg%`$4NI=Ffrfk6R*aH4Y_hbr0oxNdRoUx(e^+Dd@J=1xwKluH1TS!Ty1$apjJL zkBahCk#csO0Ygw`KX; zgpeX0$hT$8Hy-;(R$}j9iEuNoOPZ}N)3`hENwU(525YPvM7=@ZC4Cl^ z0E5t#iwoe+b;b3t8csC&iQ(}Q0u`Mza^1kOzcsj zOI)02iuHho9>_v1b{MCS%tPh{MGJ6d?QjqZ4E9uig-kk=q#Vu6MCBWNfT zN7NR{EJJ$!dpoL>T%SdM)uZt{4v zHR%zU1BCq8KfKDlBo24FE$*BRe*+<3iA1tpywl<$RX;-Up}*SXD^)YrQW9vw;On&o zML{o>f~HR0Med#g0n5-BA+|R++i)FI*9bGrLcueflI(>GcTX?OEKFB}3L>ahg6e6d zUJPbDyA~ErO)d~pK)-6Y6s{hfp0`YyV2DapmI?f&ZqZPv+o1d>$9(b@?D-{Z* zS`~D(oAJI)4aV`JvYze$(D#T2XF3Jq zfkJtu7#0E$2T#?wv{n;7N4s921LX&FOE%cs3Hcg!`>*&;px7^!KveBuqRw^+1y)*W(A6r2*WlalxIhpl&S1zxl0h8S4yO;TR?{!UN z?IzS6HAzu-;sk0_HB25ZDDGSA+AWxnT#$~&xj_v5t$A)R)uAU`Q4v1QTjj{NZ9gho z9Rt;7V>{}Gc4gX&KSBgqT*O0IpPxTEKcAQP5D&cs{q6v_yd*PUzYEGLjHqruwovpU z9t$BHAYLj~itx{0-z=Xzw2erJ?j5?W!h~RIhFpCa^~vja_{xO#L0OAtevpJNK1OB? z7-`E=CO7fCkt?vm-^(*KW)z$tooO$JwHb(PM>m{ z1qrQ02M^3Qk~GOP2ikMy!^f|3ceE0lGWCpjWrp>T+*6!(%*kbyaY*O38M$x3CHDo8Fzq}NGjVD366y;(Xhy`ASDNKHN>lp*Jjx5Ipp%gBTZ^Tk(7+AHmC)IRYX^PCt>H5$#Rl4w`7b;II2f{7rwov=0Bpilw2Y zRTJx0wm4;HMtV`}4E>RYe8OBV$BF%{9lnt};?R>sbC2H}>wKxf zf%z|G5FBuiiYW4bd}WMii`@g`w)tTU^?9+Q@_Okl(z~P|-gmzjOp3Z0kG{VFG2|}I zA&y_m{zN4>@)^3#Bmni7U*u`kU@N;449*|85XZ%C9f94t@U-RqgtzB zpxYL&_2-9bn^c;`zTgw1bsnH*oSOfWF3{~a>N2Ms^Uerfv>Rz6jl9LPzw5cdtBi4YptBw1c9FvZ5hFnh@A8dmXgtu&225nx zMFD6nNvDh2w{`#&(gO$Xo(}_+PH7fV!s7=hPccbu=Ou zC}R_CAZ16BRR2B5eYT2}BkKNU=Cnx5*lXa_o=ZUtens?ZSU#cIfdnMgAst?PazZ{hHl2<)g zPxEW=Sf}+7d7Ynefc6t4zVDC}bw36YT$1t2E#VChBedK)&?-Z_h26@L*iA-Nj#Rp# z_7d7^xA0I?6*SbLO_A?6SLP<|gfib_sU9idPM>K}NYHhW;QcGjJk`l%a*8{0+4 zWjZHwtKhh!WQvMhearj(kj?zs*_J!uehGdxO8ar?e(vjjyR@TyTuZ8;;kUO@ky1Dn z6?tVGqf|6Xw^t+ob)cXGZjo2ap|T0x&(G>d<9>6Hui^K^@!9+AEueNT#ZLu8*~d@q z)qg%F(zbO(l*Sit-G^%2B*qt#^|kQw84SN0GDh0~qY&9&D9zI+st!j(}t;O~q>aOP){zPdW zM1ZEM*KgkZxXOsGeq3Yh!d(-^uhaT$Bv(s*;hB>2gswgkw8QHEWH<)=E0juqPzoMK z_4MAL_S;N*5`Kh-LxsY<_vZIoa1X}55Oe7*7;@VYXyd}aiC z$Ix^a{?~NPWVRyH8UxL=>7| zIAwp#hAFujkVU8pw$`f3|BII6Nj+;Cf<`%=Q~jlhiKYIjj_Yb#*|KWYYR&p_e{y2J z4PCw+$6-!zn>1SW8FV;IJ%VVXWuDDSp}=rV9ACztY_gc6lnjx0MCRr43S*XxM*sZLa)XC)<< z5A7@}z7Y1C+l(%i_1PJJ*#2*Iu2#3_LLId>Um7S%%j)dqJ9atX%@ z(Vn98{kpZzccuPZVZI#YQY3gv!!_ep1^w@F`+eiwZK`lF7yCrIk1*WYo5uoisrnIdcbLC$9n z`@&eS-`u>8pRg(??tt+p{J0lG+s2>BLQ!<`iEc5&(12U(>zkqbJO@2-LxD$|JH9Zq z<~}Dh@u9;75eF)cmL6{>>DDf{uV_je@4?~fdMAEu=yte|gU=IGm-x44>{prLuyR*I zu}RVqWNqK-Z9}&|lX^A}*%1Za!(r*8(vL|`Nxv_BHN_W=n`&t5eYfVpkb+mEg?d3N z8g;R*T8W*XqL;(;G+20%BaDQM1JA67)>hhSY=0s9yJIOKe;&9`BRlnbgpzR>YTV% zU07YHl0`bXP|+@2&?*a)AAV%w-~{|j*8iAa0dTB6hG*OzkH4Xlyt_fpQ}XHWHdBVa?Q0v&j&5QbHa{Ks1_9t z3u=1pdc#uiF zT@lL4fa+N9!2W<je+3oVZERbZ`N0-p?VG1$?Rhj zq{?;FKwv(l87s2X75!e&MGO|CeGO{HE@5KzZtV*q@p`HB1>exOb^FF{?B&#Rk@%x9n7o0d}c!UoP>M4hgvof!rvGo4;FRH+*v4un_G>~dxM zGlVG3iuTCs98C>s@O<=97*5mzRv^&0tJrTRimbb;YAEon;)TvJWjbV2C+@P8XhtJ) z^kcs)-~9LRRp=_esus$sEGO|I2c`d8n!?Q7?Xn|7ZCbg(hNj!zhCC&+yhlG-tQ=Tb zsL7q8?PG($p(EE8Rt{9!T9T|q+pf-6Y1pme10^2uQ|*QnZf0>_v3(WZZ%gyiQRy_= z1M@j-@y+9j+JP^Yp8~IQJN6t(1wSb0+ClHKl7#79$g+jr$Rv(ag4mVOI+&T1<);-% z`1t<-ACKZ(hPlk4)3h)GtCJz}^`_)O>i0I9K58Yr4ojXK%^hB>4|8^6z9CcuR6Mw$ z3E}A~^D7IJG&oQNx`+ql!Q+)~_!NdBB~S5_Q9hrR-nf50@0syxG%{`pzns-8IcaB20@bXg{vnB-c@gHl4XE|QFxx#Ly+`_x^fBp^(l1EABK>3OpGyB+ z`m*#V((}>_(hccF>Hj5Ld}R~)c~kQzKSA^R@SWVrRF)EeIYgYK*57n-8$LnRX%NO{ z@7^vC;mOV=XOIvyNM4T{DkEabK3?A)>ISRO4@lJE$qzP2H;fzt1V*@tGlfw3Arq$q zw3nh0q6~+oI0cDx4ZjT|t;DrqA#=@KhE`1itq0D5N zMid5Ov_e%x5RqjK;hGt&02G6;6h^5^DbZArQmF>F4G>vP3!c*zLLHYXDilF!!Im*y z4s>H3-bLlf>E~kD0Z}t8+N;*1Uy4nHv5fY~9-O`+Djz%5IHFWHeu;~=2e|EuZ=cxf zE!Q(&_U(GF?demI3`-t*1;Ei_vRy!~;Qo;7U~n8Pf~E=jh=Gw;8lp8JSAca)0hS_C zHZoPgxHhVyC5tNf9^j)UmyV`$@I1&m5l8(+Uwbs5CBSDGRklQ0u;Sy`Mw_GdsA|Y} zBCflkempyE7N#cMVxfF6vN3G&l42$}B>d!GFn3~VLbvP#2jh7a->FJH4Ad_%D{U4masmAn*ph;a+!o1_m5&kFvx&-KY90S@=#)M<{02HLr$NKzofF-x4Wy*BB;Q5`oasm3kVY^;A znhab^l^>~lhN2smTeNK$I||baM6E<6&$i&M?Rn*ruBlpcCYq+UC%g5@13f`Sf-1ij&hOuPT69Mjyh4WHFU#uiLR)+ z$;_YW5QEu)-8@70EC`SK1fbTq{<9mh0$s=dfF8fA>| z{dUF*fBl7#nj>F;AF@I*kWYiv!0{cBJ?hjgxwKwOd9sYr@hNYXg-F!bE7|}zqEGd%o;k! zjgJ%1>k%$f@X&3TK~TjSh^-$CB`&e8-dn6WiUkF%`F^K_`E<~q@4IA< z%t@B8SRs_>YNyM>fQitQ-bw^&t^;EJ+MuhoUUJ(`(RI4+`Rc;N#6q=$0rSve0-6R zGFL!B;P@0cs1f`o>0UhkEC{vMkodVRj5hNkao1%<^@6}7v?D8@P~;9R;+3XcD90K? zxpj?j6HeoZu%x_GRgNeVjS1RSM4oJ=OW_i3s?V02bFpf|?R+`f1JKzvq_?2IXKKYs z*JaEE#w!AfTrxp(&h|0-i93O6QQ&Zp01nQFfTQ@(0Aa2}t~c@dJ~mbzEltf%mH6S5 zU#oR$wJY4!p*U1if)y`e{*9uos53u0lbl{6f;WCi6ykYPcM5AC_YfUh`(>D!yr`%t z3o|nd@TSO9mGx9!LY$;BVyuYybvjY?G#<}0ALAJ1Gz8e@J}L^$sxfCBrEC_2YHFn4Ez0=@chc zCyKa>ElwzDYqZX{a(Ei%`0Om=jOTMNh#1fivuO;)fOdge5#`6kG8p7TKA)>hhZEIM zDL77{mJ9A|Zuch_CLeGnok1@C-sZOH1sv(mFnyqXKB?-_ME2)pHRfoQU_H_zgSquB9}5ju-ysG#dAr_@$r0 zGC!LcXgBdinQaL5c+7Xx;5OnNH5xUzj^>%TFjTcCGk^Mgvcel_-F`4Nqkc09Al5Tl z7-@4qutzW_?Esf9Ex_)|5k~~P%1HtuOHOkIqW zJR}|ANX2QT2*>C}?#qq7a*1KTo7gteJO3^;i-s9@#W~LogyfUQXkfYvnNiBU9yvhKQxfkP%LtTe`C5%Zj3umNb_PBJ-UJi?ga zhBObd9U_otu`_Y1CpRB90#aGmC5dnl^;?Vvhq?Ln4Ato=N*{a&PO9IE8kc^if3}W< zM#bme^S~1v$x(U7843^S@)>TdZG;Lu^gdCaiOo$?{8lP^OD~WXpE2^Ws_}UmmYSX? zzSX#YdlnW`V3R=chLT~8MvD=y*e}6~?eh(Y%>UvlM%-M*FT_2*FqbkqULq5?4h%3j zw3XUVd1pvgR=E2dC=Wd5SomLG;2Zk5YyYipaSJsUT!4%h6*adX9B^bF%!CXpbt~I8 z1K}i_d6!~CZsIb24ZUTTxheGv!f?EufN$nPN68{WIb?xcTd`Ruj#A6di3fR3mnH78 zF7^jD$fz#}_wxu*;uB%ASotyz?`~^&!B_wp{({&)NDf@fGK%4np!N%Pk)RnkD3m8ZWL_+>8+MT3J^PJHr#QvkPQ055<5duiSl~hq zL`aofC=W-8mxlrf)1Slsq3ldOx4y{sMYmL7NBEt?+p?l|;p)xI~6{EHW=p_(MaqC!bWkWuJ8)&#-!c-_PB#}m|De%Xa^>PU8^{jGHx0zuu zTQ8R3a{O%#)1lSTmKdy1rjeQsfA;)E{`NmuM_g%LmBSUP=~7Nl_M{)e6>Sv8dH}0A zVgb~#MhNc`lpUx9-w9aeXaOfkcZqM3gF*@w7bs*5eUJGN;K|8&$BNRhGY*V}TE!oU z>~3jwK1UetH-*wi z_?jaKj9r5Qz7NxXZM(=7p%}`FZt4owvj3{~kuAhof;W6bHB|V=*>Ley?kFSk#$B(l zr{vbU+v^{1+(fMom%!WX7nj7QiIkrwZ0Y?YD5W!Um z>o>f@w%%he{r1{^PH6P;))&ZLx_Xl2)8hEtDS~{&bW<*je{K!O?Mx-tsXQj zCg3U1qskRT8lps18C6}wVz^^v+-86JB4472ImJxPsg$CErP<8%;7i*zWe`fTb!S@o zap`BVckNlB*S3GLWYPPqL3UxmtJ~im75x5)y$gSS^40Bp&%_I$G=!~JljbC86a{FI zkH78ZFEaDfhs*+|VOcjZ6-!}rJ3-I;rGj}1z8XGcai{{*9ubSA-QRL6o7nKXzcSt? zc6}TnehTuJDhT?J&68t;58FIh@0Z+>L43c!!#l^7(QPiWW8Md0V7 z@y8oFU6CH=P9&u4?{Srp4pHf<0>vEC3}PxW>sBniK=qPl{2Zl|^AmMLQ(TQz!j>+cI7Eo@ z*KTBnn);sOv+cRMb`l*xsyUle3-tBl(!J8_(H5KH z{*1}U-P_HLSSZnak3*dFyE)NuCo$rmfIB)bAtM>)HHE8T4_?_g(}PM zlx2Rv7~U&((N7$Cb;}nw)HIss8%jR02+t%3h0e>ADwO7Ik}gNZKPVlQ9!=wU5mZz( zN@Asml9O)UDw8)|bn|TEIcBryneCjXvY?}#MHvgD!G+AS@f2qewCFBLT^ND*)+nKu7tuNu$K^= zL&jMmc{;b!{HzyZ=dU>6c_AayNP8DqOgM~HyZN0wsV~O$tE2|I49l+oE681-iKAbN z7#}^ptS7rEh*=qrl}t*Fa=81MwT>_Sy&&m(tpxk$GBoxfXz}N`KOW(6(=Q9xy^kq; ze^7wi!}-sg(hyR6dz0@aUT%wkrZ%6rmbqP$yJLJyJ*`nwO&w88s$Ge*Y~V4&E}D=G zX%<$5lN<%>zmcSqP%$wR#3LaILd#cz??<|%%LN+NfKvByfw57zOjH*@Zx75elC-~6QP2T#7)^AC#~Qm$W%7_U;C zLDG@K2pS$Unv&c*@;m!ab&l8V>SLwHs#fiI_e|J*=uENu;cS&BRl0D`{k6xQeDbl{ z{r4>VpAWoOE|%W=fK&YOOj^KK^EiV8#UckY*5X z$VZJL5|PYeRqmx}IrxFC#u1(QLyKp6#Wc->zXNKf@0q4_@gAIKV7B1@)Dm<}Q(VhL zA*4+WZHvh0odk~qF-PvX%p+zM%-I36P>IOm4CWP+%4AD3Xq%8^%ydW#Xbw=?Ch_F3 z5&_MekRGU8Ea$VQ^!kNtw7rp$94X01t}689EMx;dwzW+eM;N zo%-!ErT4Z!PUIz7Das36DvU9|xVs2$P1$^0CA`IGwOOejBef;)0ix}rK{x8MAjjpd z3q1jY?-CCGmCS9x&!#;1&4tQ>ws2YSRy`rt@57wc3PuAWKhYe0E#>gf!^00RTvlVw zR^|KZGQqey;A-j%HxD$%)a8&|2EPD3?Nh3}3eW#Gl)Wmeq$|sp6z$g$)B4xByJ2ca zndkWZk{`uI4A$aI5s9PiVEac@c@fHb-7m}Pr-q9rs(oWD}N!SPa(9)&|C95U0JGgzXFhOS_pQ)^RMu9>gem( zUBNjFg8(qhZy*wY;vQ6#MGRb#sj4&6kM0JA74yk#R%S?JxzRYM_+F{hjPKrA#^}V! zj;!kiw`{wvU3Lq)E?;ac^T#jhX1QHZ)7!$eNXqi@AgxV~F^U+IkK>+rd!@HQM679! zu+}P1w8ATKxH}xZuz@}joo+L!$T6`Q4yXKAYrSqNnkPG6FcpJJuY)FjcjTK4A#n&* z^ztKRrqE3hTzOxEhx2{HvYEy!>_4QGS>0Qw3M+T-;NLdlaKs%PC~3?xB2qCdrd<*t zb?vCZ*;08}A^fqDZcbHoZDJY&ucLGER+@M?w`YeqQRNsjDBdYr;=mqE!|fu>S)IBO zG;z(#BOQGg#-LhI)Mpj**Ky0gNIY9K+GlOPU+-Byw#npoVK6?cDh2gfdKbSR6@AfM zm*SoMl88l3V;ko<-qLZ9{O$+Y@8LM6e}KE3h$$7sg1|D`h0yI2$mLUm@VxC~23L&u z2?l*Q=|()+2*`f@)sv((=yjuBA4ImJsu@uQCbhs;Fp%PiVh120XfzUp`RxzwQno%e&)Iv*#-WwOtnksE^xN#o66qobf zxZlN*omUJ)W2OO}o|sHd`l}S3qud{bNwp@9qi3ePKm*)2L8yiwrrH@n;^ ziKl*ueN85d%rsW0?}urU$5E)=ULH3x=#Ln=xMZy}zpAUfSbG_v5&s zru}NcJg(ZhtQ?|5Q3ySx65Uph8~IpY#2A=GTK%12vKfX%IymAPC6Tl{S!C?F)cd+7 zM&XB?pn7*TaJWqhA@mb3E}{Kg6|J)BBJ_c)2(PY;E{jKquBOOQoQ^bhYlll)LVQf$ z<%}5dn#=wqC$;8(o@aw&`qUFsI>Wt3B<7MJ`N_%hH?TV2C{Hfq`uNb1^fq%jN3vw;m{ppmz!iT)Z&0$UbV|m zMJ}&!iT^o8OB6A!Wk^7vceu?gyYBuLtujNWbkJJM-%JH8t_pN`#pj6?^OY&416A8au3=tA#eMn&Uf3MkC*cPI!0dFs~i<()utM{$~?QzDyQ?U zh+|j;ZSP*`p`z>b}S52#G|y)tDS6j_y4O6`n6^DW>}g>AibWJ&3b|VK^HR zkbhGGx?~!0l$W_-kEdqh;Otz}@oK5YFZgYFPB@#B@vK?f@jQ7&?_Cq_@V1op;|b2s zYHUXt=4Zc?vNKv;OHyU#^^Z7(W+%s+E#kUKAGP#gCd7b{P2F18t&WwiU09wi#1pXP zBjlQI={&o_7BO|-*GMaV`~r@R_lzG>W9Eb5xivzY%yP0c zAaV|dvA)XlK{nLh&mB@>I#6*oz{$Br&+jrDC?j*hU3-qHXt-K&TEVz_alN{@h>Ra9 zf1K4ywQbBNXyarBM>#nk-}~>$D)%^lOy2QxDa(B>?1H=51Y<#VeN@@n658diCO**@ zllceboey%)wA+$)UaL9jR>ILgd5tEiJ!PtMufd#^>8-j{1Fd1Cx5`5n)d3m};RLQ> z?Yb%qnO8wkc~;FSE-&k0Q8w*~s%^<$nD2o3uJ9?{tvVk3ajI^*hAxpwZUZ?0@;>g* ztYxob`=*NnYH&!47gSGIHQ#5d?#=Cs+LmHzdcoF#Z-J(`X2G@#rmLLUMnxV zHAiH5gCklEc-Cre8xwlpSha8nJuk}JqPQKZw)X;Q#}{9!vW zxQ`CgKaRZCF8KT zrHa{Qp;$09rydq9n7c3Sx*W#i=u#=E7D65Bd`M}#E{>TVUxqe2cB>h$x2F@Wzne1u zlp;J=YFg@}y6YUdKJ*xOc^Q&74XFgW#~P1i&V~IYk$^z%f;?0MCZISuMiREdo>fRX zS4S{&b9CtVRM9OjI2L%8uFw~E)+^~;@m|MojEtT_GRHB|Fxz8l8~d`6gB&?a8YHwRMB*}6(z?f@X z!?9Fn57Ekg7!3MVFk4e|y2)Kta5o1ZIa`oj-9s{T1b z&4Qy^rRY>tvQ(#FQt}f52=lXu_-m1T)&o<&rdtKI{TdWzgyQ%@jc5|J#8BPTc!8L}_iRt1R`Vl zPCv8PuxvyZAZ5CM2g@ZA$b?fD7$b- zzyzBZx*4o>6X`f}(7rk@xvQW0#A&5+tJ?@BvsfxaS#@#JscqmU!>u zx2WD{(n0@io*mC(ZzZC}+oH1Er4(zqAgZ_^q$%a|xn%AMs;;VvYSU49yn_2kqiaZ3 zgLoOw0IkGa6)zR%QxZenuRc)q^$@2dPHem${A7-p=Od>~d?(8C&L@712e}_(Rhp3w z^IiKpay0eEvNdQ$ec{oEG`5h)ZZF^)_^p1g5C5^i`;$vrh^D476qf~8mt0n!R zbr8?i@lUdR@!W!hrx}E=I#-{!bP(smf`^26I+osP`|Y9q7@cQ}k=hv!C5Gq>hLnf2 z3TuNQR)&#S0|*nr(w9I=_=tiLjjq4uySjD}iGPQpy*K77jK{EeS-5~)W*UJ%FjVcL zY1?Me{tuklrV%svX$DI;+=%T)-@7T@L-$vuY97syc6&2)qoZCi8Zc<-5WG#j&06QUb-QDD>}zBC~hh5O9a z(EXzA1>RNcK3BZ}8tRK~I6P)dVHes0%xcB^Ihi~BdG?YS0r_GMd3d_F||+vqQuYH%r{ z?miT_7)Rj*ui8ww3Ek_Onlr@tqN+!Q!hD+wnUv2Vig5)y{bdr-U_C72e29ljA|5X1 z{DMIbMa;aH;GLoDJqa?(+oT_nK8cwOM_o!XN0KOY9q9}U=S`kGbBTx!A+Wj_(jp*E zJ7@!J2}CdGI1YzQ=Qv+HVP0=7f%VE+Q?7%4h3P4=7O-4fA_O9L=PMu>GsT1@zz!CU zX(6^QBAh8ERRZ1|#VglN2`!hPMfvRAdo%rM<+g zZ}UXRc+o~q^0Nns4y7TKXaU;8;^U}Ib=pP;=fG4kZXrMnQ=+KwR%$3j(-qYKHQi_0 z4`diAvEQn6Q?%n?L}=(H{*9ejQ3;DBflP2JbdgFtToh>vllg|1H7y<3nVXCA80)B|IC(D5)37exi!nz#vLd90T=X(S z3^xuR-C1p;9?gR&rZB_cDqHKsU#}tL+sL<@VQ~|QyT2H23EDm>V_SP3M^<);EWsKwccQmQG%*`lJsS$RIo<;h~+ACc~t9+TdaM&+f5ru|XLEM2b9R0`w8Asvw| z0F!uznDuOl@DZ`b;wQA-9=L`mbNA~a$EDy@TlAKTG~){J>f1Eq8QlH4f}Dw&#lB1# z|BTu7QYL!(Il=UrNHXym8M#%BUSxO&%gPd7?p#5?>pc7P8t*9gDl!&*dw`p|MwdV-ktn!5F0kaX++2H1 z1drT&aZFsv<(akS&+_P#*ip!d7Q5(9})Rb+Sw(YcwbwtDXZQJWGfUqxthf8JLVX!BC517a!sBd$Li z7K};LaqJ~Ur*uM9Ct#LbcG_h$Yfz3VMmcPm;;6LR4ex_HARC*Qm`K%dN|h0@9m~tf zE=8`RJu3aU^fUR~Jh)JA2%k)jQ2+g~jBUtqLU9HKwD1dbn?-mE9u?aWp#eNUpo0_I=Dq4v4Wt+@V zRVmt(zJaK!A41nTtA(L<4titgYw8;)wTmLo1~g*a4?M^*;ssJG*KJv^8}CpcleJc( z2^_<05t!v9re}#9rRp*TNo#)orTKZxVz8{zbzsxYzXp-%b$;VOGo;1oGNOaDA5(bh zJP?$WP1Q8jua}!;xir(AjpTQt4E9dCz+=Z!dOF*%md(71k{Lw z@w6C_rEzr~p{Dsl2(8nF>VzAhN^Q?>EEN3Z230&+E?S`FsMN8_ldW2Lx~Qobt*1C% zbZ~lNzFM9Qtun~j&iuJ!h4%eqaeDpUyH^V}cN3<#Vqlj--}1Uslg-kUXZV^ddkSIA zQf00h9#~nZn)<9;DO66q@sUGmUY=NP%WwjObhZN?ua=+%+Lw}yKroMb94Jx1C0<03 zWsbD04%+~*{AF(Wje2XlCjc8ow$Bg>YYCQsayiRK^kRy6ShT+wBOSuwLQDb=u1#X& zn8@L{1C2zaAL7BDnI-v2%t?7lQ8MI_r=cfoK{r^YCe7LMEGQFwtFuy;M_#Z4UnD7e z7i5vIlOu>CxeDbmME+U)+8la_Gpl&>#nPRSpS)ORKxgL!%**0 zN~sOt20SlI4*a4Uh+r~-Uh%Kr_anOgVOA`%?UNsS02JKh$1rE2uCmPSQkeHlYHP0C z2Ze$=bE5t|C3n&E4s67%92|>X;Qj=#T%sl)Fq}aQ{XGw%#G&;a+bPb@=$92!JzVR~ zRHnaVTekIZPlHubtE$~|paysAH5t^UQXO>w)pX`w$4pShzU2P7R^%i%bKzdvxlpDW}!ex!E}tW?(0rLcf6?*EDOtG z4?Lyq)b~MM62NqV?2}G+vRo=p-X67^%LqZcobdF!Fee@2UU0Y&Qb$INX^?&6L^Ojn zbj<3;AJ{KY?&Y}`V77+G`F5gTT{?Pnxkf4nj~uIjsM7QgmnJAJ)X@r3pR6mgrPLje zStm-=Z5qU^ojSETDNnDRI@Pbks<}PY?>L3o{;{>LYnBM3O;_#f`g9%sIt{6HNp!sKz<`gzi;>xnK(V^t^Nk`t@;WmHVWJq;t~a z(%YpA()*+zl0GUuDgC7MDd`ube}=PtD_V;Nn7IZ6;JY9c4*0Q)cf|cc5ARHq9rsm! zM=b|~&Olx5vyeq9|GkR&6PP%U@Z2T&^ZcFs{gqx<>&E$XleEYw3ZDFHRVMCF_R&Ifg% z3J3q@H~1am^6ziHocqcD!3+5lUSPlre~Q1T%3pe#6EJIo$|s9 z;@!N^3H}0=7o97)nk%`$OD^(~4N+U4-wOHHmD~>|co7r1+Ok}2BmVXP2zhRpI1a*? zUpo$rt{rG;NNV@4 zB{SJ>Z&y?ye85iy(2R=7s&kikqNVknAQP~j9Y9Mu&MiDn9@x6)JBId%TQA{W1s)cZ z;k1Qt@q?qavXQpGCYi8umZVUcfV*AkptLF-lTO0Ccv{+o znd1#SbJ1I+cS!G+E=eDjeoXoV%pE^3{gU)q>2uOE(z7^+FmxdA#p#W=&6XmEnSX`MuCxmgD05qS3ki9jvIqzCZZ z2>$orcTs%4SBG9!6{_hi&ue;Kt5j<8lL=kdsM1t*Q&GMr>8h(Jq(Dmk%|9c)@59`2 z^KX))=I1W(NJ{WgA~*kn|C)$j|Ba$Tk^hFj>$mtTnkA2a_QuT~B+1VzlC_e67ZULj zE4&bo7dYeP{*>TPD}Sx?Cv{$zd#--irSdx^ zXH)$9ZD5jBv`Uy_$8xP2f6Q zSpF$Ld#HU4W7@CjmL*A9EDZ9xEK{=PNTo-hr)7JdF# zbB#FK|9x1^e|b#*2e$lIpK-Vw?-FzQWXw*n@I&o)^InldVHbH1$-xNgg6o~m^~|#LjPR)bC`=$|-n|pyzts5R z{_N&<=0&*OX{T1Fr_$-?QsNysBX;j&n8?!!LWRJw%lsnI)`t0B@8U>0qr1LAmT-nU zT!|nVIkx^Gv{dRgDR8ESE;2FWqKNxArH4gg+SLi$BwqNN0(DPKQ?KnfB`mjK4dfY|7^yokws*ylxt5b#@0O{oxxqmeA^B3wMwF7Fu!fmj3ehe`oYMk z+#Xlaf3#culG6)WKj_3Vj>TR`+w_Nq>PwPfni$BmBVM_cc805YFHA|&hitnGyjQ)OqEVNa3Yv$7=A@7 z&de{)mPz%>m8YwVg<|RS{mW$O{?mTZYA?=D+ibEcNg00DLD1ANtL!7(H!bs8??thn zQG{DOXvE^$Cih0_CRrbH{j3!vvNg0wl+Geun3XQ@`l;>IHBL=j=Bk!MKwuCdHJkBD z&QW}Hv(1@x_1d*-v5Ru8J>p>p#Z+W3bP3`gT;YyIy7e3y@1KL2lq)08abMYd?xYsz zr98J?080!kCb&NBs}@%}?Kb>7zZ;dEcBj+cor=WIK=>IWnzHEE7zfr0Mvz{I#&16{ z_;cst#9IRf(lwZ|5}%EKn>aLa&y7+scFqQcBy@e>4Yv_q7uJv?%<7=e(K_@@{Op9q zb{y@N;sEp5o<*2#AC}&p_d*|nq)mAyO`7-ryI!S zRq*55T;cWG_TkIawHu!BGr;6{GP{D6!Fq|nx3IYGVikG#TW6hz!lfv~aQjHijSQRW zpmc+074LEH?->19%n>M5@XwJvi#++N@QJ|C-24o~XA_LN)2)jZ9 z*uPX0|9kZYCpnP>LiY$zDdx^Pk7XrAyOgXNsecC0Z1BuvCo%G}ozTMa9)Cl5t8#rk zOdQ$7XMUXs6Swe~%x@%g=MI?7+BH%6-1z zr^m=q;@Jlk&69~tjR}Lor>7|gZI7s`>YB{LIoV>S3zz$U^#8JbO<`_9mSH7S(ebFr>3@oFf)psfCX|_71*_ z9(yiDnKRVi$vb>MB6b}uxW={0wPG~8 zbaER5We4q!VJ>Kq#m^|V&hmTkpMRpL!dF*B>+bPj7?iKzS-1r&Zh)#vyraGhGr|pV zj#_~F0^eT~HxTJAeeB=({`&dzn@5gxe80_4w&7%J%U|EZwA_B@NXhp%;bXJ22_jf4 zDKPUO;H8K+=5F$bw*4bpn^4d?lzWw*uWz-XSbSHzwCbN?MoO`j8n;v_pfCL+rOJCw?~NGKtNz)@+S zq8F}AS){W1oKqx(F2N$>nPzT7Nujb~!^)#6MP}LxhF8jl=`phq1cnvL^rNP0!oQKc zCnEZP_q-><X`%!Dbc!t4- zEUJ*TNoS2GX=|cqL@OO1y|b{ADeaAJqiCs$OEuzpj$NMeDJ*&mx@~*5ZTyL?X^ZAXJUp?)JR-(X+bUnBZ1Gr$}YRje)A2g zd{CjUr|>U6`J?^xow?i(#7S-c{U=wKwEqaNMlMtdu}6qYEQor8ewW>D|2em#TIbK4 zdGDDs@7h=2*;%_&_~ZAUdGqa!@5S8s9<|EeW;0Ob|Kf@i4PyxAWhddZEZPU9UJ{(YEZ?W~W19wH{%3?t+97`qfJn~V0x7zv)KKNUmLbrtirVpy5|zJ%%Eu2 zo$8c#2R=S>LmHA@CP302@p3_7E$VeQgastv{s65Z0i`-KS)aCxwMwJz6pQ(cYt8MW zM>mwP7*xys!i1B}Pa?ltm)94hi&WAW##QXC@D_<$-4++T`Kxo%0jcJwI9jO{?dkgD zOtmV=7%PA@t3feTHjWa@Bf zb2sh&l8nCZqc;hnp^BSp7u{5sy9t)hmWr|WnZo@ ztjtC7#60()%G~IEI=fhx8zJ6x16rzAX_?v>QDf5|!<(kuT)Xq=fgCnE_C?Hr#_@@K zA@GVWIgCCHQ&tzVwuGAS>)Rk*Hh}ve91k#sI>$oEy4~+*z4J>>)0wW_UDJr6Grd|Y zcqRECS6z>+%Z(2UZ~{`zI`);U!@kKdmVN(mJ2W(p-gv4>Tekg^L7ZSndn6$I(Qg%*F0#sscAU)rAQ>onD=qTAjwTiG^yr zQNgpISuQsNJgYQ1mX0Sl!0;32FgqSwv#~!mS~(w(-X#5ibW!?I>5I~zjUamOzIVbe zrpWkRm9a+0p>v0fH%#)BNwIGgCY=)|WdUl)oo2@zu*yR9f@H(dP(QfPT`80-k zzlVQGO&PN+0q9o`{o##!p(%U>JH z6d0RV+XDJ3x%@Lq)RHW}B%XOmmP;zZm+bs+8Dnn3e?$Gdzk{x0#`EATNM=t<&q%)| z{hstE(*Gv?rS!MbcSJN;0=Y2e5GLX^;#IO3ykN|slZf7H5eVOV6o?0u%y%uR*^OR7 zcYY;9U{>9up>5tXZqXakhd@BSMaQ7&_jY0D*}l8@_I~>|X^rnKw&+(k=mu{UU>r+`QFkyp5%d`^f0oim|KK zcH&m`UUibrVk>ftg|S2>G<}xqT!>Gy6H9B~G`=FT(&U<>>`G~SK92P|erwwHr1kqG zFU#&b%)2xe?d0v#H+uc5k$4@yy)L|H^6_ewG4X1N!6*}uW3-hlR;?uhF^4gyDjX9d z#apTX67)3Z`kf zh%qyC1Sm3 z&jX|dBk&ICZ6Jj#<=`SwMgXZ2MGw3J`I2fFoz8_3j+ZSANMeFmBHVDSP4m2xB34V- zkkNw7K^42dO$)^WosnftmuIL+4^>p1s!Nm+SfNc>`;F|HD2x&95Y^NT9ETgMpex^{ zmP%*f*1K$s>8i!ajqG>fm!!;eoedPG$aGy*-=HBZ0~Dhi#4;;gjWB*qp?F!Lm9sqQ ztzK~1x@sy%KqFKvnbu{5Q$#o>{3hoo!12nadF063xOaoFD@8o__$o(nKr>HM;~+z6 zR_mcmE3C;n-9c0iV|z0&H$bm6o^mJ<8ew0UK|aU~qhJ^{LoYCbK})5QrxHabtYA#y zHwEKLHel{Ev`Witn6_b9Ol}iuwW^v2@)3&;96C?|ow=|resnhh<|1|jOv6N02%}_G zGYt5lnGH@~^T;yO3<5t;6?nhAN<7VU9mLDM084QjO0_aX4 zLh)04LHy-29KD5@KZrf>Kv|ZVE|<%gaYZg4NbfPcr{lde{y&iF(lKdMAQ8t%Q(QH3 zI*@kD&GH{-rx%Bw z`Gl=BaFBSwiyM=aLa$IsTc&ifGIu!SfH+>a;WyH=(Pt(#6-t01;hp9Sp`5E5V$b$@ zZ3IBjhRip%(XOn{EQqhmG6o}y*g{xFQOsEAizvwp=~9l`#w5)CwcTwCjCa& zLT5an%BHfZ!kCy+O3n z3;DM^O`;&5qmrUtSWeR?;$RWiA;0JEZ~r(((~)|`^-FfCxNOj$9*UIpPMOqf*ynXE%y zmx!X-Zk57JPY*XHiypBxUVFnbvG$s&JxK|TuNBpz@T+x-Z5GG=@iyDD#Xj(;raj6E z)zWlOGn`VC+Cw}_00%*w3H%8ZPRtSVL3qLL+7YAMN*EXh(?*s>*T3#z=ymK$%S2HWET z15Gi*FfF@j7B%$X7SniUTHtAD1Jgsxz!}CmG;oeMGt-SZ-AoTUeGW8|=Kt?~TSP`K zQW*xR^6hc&|NnRU@4f&3{Z#d=vfpy6sdQmpmxxym67g#4B=O#;C`WK3x}Zl#xv?)d zR!;+`ig2k}o6NA)ewf~bh#@zb^sK6$r7vg3x0QKWYcD0R1WWA%n_yLuin?sN(!4n# zo8du)k-bMxT!=0%@ zUmgoPK#WQi7c~J|+>!WUDl$t1aXruUwSSlE#|40fA|Zo<&uy-0=lfF}zahr`vV^3K zE~AC(f0)2By!IE##ZMK$8Ez>8HAuOgr@(j!Fy0G{P`x}kj|_{q>=!cFhu8N4fVgK2 z4w=T7*!w z5Cvu`sfGQ_5I5O}!REb03P!fuXu=BG+ZCc^UKv|crInS^l+HT$c9?!2wD2%MIP|bA z6W1pc?n4AZ4@>+$-*V{2y^65fd_kCSR(f&w3GRLsOox}k>5!yByWSR7(Gsp2Rxo-k zMy>4-IUpFIo5+N?voeuGGo7kr++kxG_ zxKgrIH1~rJ@(}?_`X!~Istw)`amWOef5XD(5RLc;TH&t`tj47Q3wO3A|t{xbvCJNFT>0QSX8vQLj#k|D;lJE)CxXi zt3fk{zb8C2OvK_VRgIFw@hlVGbl~j_Xq1miPhynrZMo~p!<03S@{CFgaO`0xBUsx+ z3^6RKs1j9JA0>gGZT4{Hf!C+yt^kOI)`AU+OK!kc1VD&Zf!nX?&5G&+bx+${s%#&H zAxs7qSf!)+rrzc(EZf1+Q$u7|p-|=D2~|?BqVOv32xP;vSe2ROuX7#*ll*@abnE~y@nvl1$Y|C`hp(s+wNMqqw z$|j_4d4~LbK?QOrHJGhjAXE$DZcr(K2JA0%rfQ+9{f;$LhVp^gg3b6+yq45`#M9oC z&PumS?~>kEjH$o}`&D5Jh2nq{pQH)la$G(!{6o{g(S+gsV57%)oB$kXP7|R!a8RvQ zPe5pG4r5$fhuMm2YA9Ec|W$rDqY?%)98vcqOn7U(H zvu@LkWHUvV_wHT|O*G3z9oY(3FShMHo0v*s(3lN6XX^DJCZ2B2QG@*vf#R#oE)HWG z{);ykW@FF%&k8m@Nivdtx(;){mUK~i5ajoM>BG|ZN#74r6vhrP)4>G=?g$ej;^8`4 zHn;dayg{(SR24|nfz(eRbBY*lavVb@CW~clC{7soX#B}gEWE%pJY5@k!l>4(hH5FQ zJ=2=OSP4^lRmWMM+jU{0cPoOi&Ml#@iAmLts$IrKLCwGiOLGW8+WzRWSg*X8`q}Zm zxjM3Cbf55X`U?~OQx!|K9LG|0TGe%gz;K_Bz&t`#I}plV=sZT~T9DD-_> z+?z?KMzZ=&$L^E(jqgeq=gkq>FL8TNi~{?8(lzP&p`@S7Q>;{g&b#|bdhy1JDjv5w zI&5iNJXq2%9HPMfISQ8}lU+TyTt1dbTFBfPyH}I*kL_E2rF>!eTv|p&d#t&FztRX| zLSbv1V->`^pX@dv`&a$@*DcQi#Sis|>5XZ)iCSee(-l2R(SB@o{r*0F2I?VvwgX?| zUAYy(-PI%{QMSgFV&0yV?mUF`SQZZlLH0)Jj&?tqXgl_-pkT|=_u^>}!?6VS|3`JJ zz~6b@D)5)hB~dru;L?u*q<@gaml*l$N4x*f6bMthw6oLgia)f?7JrsbmeGA4bgWYP zbZ4j25r2Sf<*H>_u;o$XLH{+CJY`H;YH#MgiJCSN7&zzJ69V%`#tFbLYJ>E~?@KRknUg zG`~;4Anle*x>=e2Y2U{9TjwbM(^3q=dwB}btRTreh3tW9Do0Y?Su51H9*;ruB)9V) zohjz%9b@N-xFad+JycE)A+C)W{XoUiZ7Gq)%abI#Yu zKq2rmjK-qWI!O-&hez^BMN?7sm!blCyeL?E8jW(SM2>YHdn-W1G17kN}!p((ae z-5B;ZhmkfMRASbRhn2Y9jr*VjZZgn$2b(PF_J$QuTYCLUK7{UBH;4UbtP9H~wx5_% zfLOom1hneAks6jwxhcaxvn>0O>(grBlqoz_rbr-Q;xFw}JFmcmCGM?sZ*M?5CXa<&UFC4OJK0igEqQqrNgL$e( zZlf#DjIHrQY5}}nek@m}~b|wF{a!^k77|V<2 zu$V*wNc&;5OI(=H&hcI=MC?w1xtVMBsPimMCbQn_N$Rasu8RzV&o_mD@Q zhY&((2tT#M$YLb(10-=D(4r_n%YEZA5bF>Iw8I(bz1I19&oCaMOK`l20PrjF5L${W zqYY?0%vK(H{q*XbVY%neyOwdwl;19E&H0*aO-)&HZN90M+x}D~@xy&4hGr7q&PhYkU}k7-LG@He%@)BXIKy0x6=u zCSGD}nz%nir%@i55$B8;HENsmhqw;0j_?Cw=j6ErvVhgYh7z@BEH6-xD)c^eYQ9>X zpHeRl!fBO0s)S|7DThj(!zBDKx=#JFFS`~c2%i2bADFHZ_yH@m=2&n}4JvA5zOF{$ z9S_t0-ZT|I@>C1ELyv|b)R2JGaUU?j;|1B{SUiJ~eS;x)ZB1>?lJ>zPM`1PT#XMvR zpGuUD>-7BrHPzFUPHP@L4U)WTPr%hA%(xk!r zss0Jvq1u9pfLz2=2$ER1=XuN*;U&YXYHzUF9U1NW#har3Gc3ON_9txps3BmHN$^7g zd48E1hNbJr1rUB!+>vGY(E80}$lic)8qsJ*4sLc=c$lmwWEcrCjKZtZSsrn&aqPs}4WpqaFp87F1KpsaVF2-7ZdSUhg^)0$no!dIM zH8;04Cs3AV1m@CKb%$C$y)e5lhcDraFLQ*XGDl02#2O#(yN*c?^pYIuy_kNSX?bhd zRctHM@`$a((<9kkO|q*D2S;MLwzRpqRDHU++H9_F9cwg>y;R71H6=VS-TC$5`kd{w z*RCcXZml-Cy~*o;&E;`SDkGL7t}>$$JLs0FT#5_-e^}Bh$8I`#G;kJAoT~A}-;$^I zzS^l1i%z(F@}^@Iy~N4jfT%h41f_cDB0A+Og7od|YQNNe$@ZV8p~l(k>$FGHq3c-ng^LPGffrox;eD3Lh^p zKzaf-%m-CQ7O64}TMbWEjOq8Pgp!)}+%=uN3y7DUr?;- zTxctryLv{k<;%*~uT_j|Dj^@ugJ#VrN>w#wmCjbN{ruYvpA5=F@=}J?y@*_ z*s|D%lS3B9Zbl9&jXjvi%OjL&EZfSNRaaB&aIR`8 zk7MDf*NorE*>+`F=~!5YTqUOHW?g_?~?!-!1oz!^(XGitTVBf1Ikv5fkFL zN)IXQKr94IsN?I0l<@>I4;1e>od*dvrIL=xvd>%MUeZ)Xnqontiqh4-XdkgIgG z!jU-cC)n5iW6t9x5!D@f#GBxP!F8$^<}zNx`O98Xjt@)zL~;N2e&kP-_gD9)UC#FJ zY|su0Qs=~SffuBSUF@BSBy)+q7he76L{^j9#`#0{NqZtMgTipQwsKCTCB77f>jPLB zOZygWq0N-VkAznQ`sS&V+RwSe_E873a$tMfiV%;9nG>vI^u{$YF0J!>ds9@l<9>Hi}q{YkAgXDh~8ckZS$ zPAe8|Dxp`%eR;p0Yd>-)O8LL+PwqqkpV^bxH(%dz1e=V(*KHlHzQ03JCI@FdWUbeg z32|NV`bO&h!E7B^_xI=Ppcb$;S?^tb0W9(4Zr zZdB3)-9kP4`rUu*Jh&lcc4p;dZ)%mt2theaCG)DmRN_l}iU@!DSe$yPL3OQl{QU7& zesJ8y4=%d@L7W`^=&#(^abmY7PRm>3yk%&`V^i&sgTd|y-jiYq@wc2A7BRm?EL)O&cx00 z1&g*{zyVCRpr;N8GgAk!GRinPJSJC7k-(2xB!)Vx*hd$55%*e;JXf+4v1Ivha& z&18vd*nP3mnzF6wIqQ?E`blekS`S-u9{r>-)d+&dl<`UV)u65gv$KKboOIojE{)o= zmOB@mu$Wn$uA0m`k?MO%zIw8oEfr&<9YhAptnt%}SH;5J$%E*7R($ts$-ZeVF-$s` z>ht2u$I~6uw4TmDJ#B)9atClAOl!CSh(LAY_BGtBq}Ahrn$heg2{znHOj|jC$S@vV zn1<=-V~si`%&}@=&CnUs4Y;rzMrgA(-(2j?_Nvo5MpL#M<%UtV%Lbfnj}c36G@g{@ zFC?X7OYB#Gf(IWuKPKiOYu*UQW>Sh?O_>Yvmd zczYjAueK7mi)dZW=XojL=cRjYkn`M{L%4|ZZRWv^us<(?^UA7j>MGNqIlO89e;t9X zA+?WDgTlYFDp&K8K4Av>glX)dN-fSN`9}3bE>=m z$@1O=>gJ<3mCA~!P%n`-w2(W9I@T)+J~KZ!fW|t@q-!QIZ}%nh*|WI>w?**YF*zPN zn9?MkB5q0?K;D4cTBDY?KUvqtV_^$gP8>{27HDgC_=y8(LrjAyBy9>V#3W*WB6+}@ zChomskKYu~vm^8l52iOBa>UhS-IQr!g@5}XVmncU20RrEYObW$s&YVSKMLQ=mKr7a z!?@~Sf!_*}v;Je6Ba!XbIlOcKhE7`hwcRlptsN{Qjy4jf&ZfBcbbxex(^oAMs*nq{ z$h1`dfP%z5ovzB5+Ql87@iFAi8|+ETW5iFB8|g*gW*Qk|G>qIg--&*&;ig=dB3t&y z`M&LjN08iB{6;v|lP+UNy@3(qV`_ppJj&w(H^}3Dv2JdJ=b<{@7tuG*`&-AlsU`;E zk~293+*@M3KgxRh0M@S~D1MP8cep=G(3|~w7^VbihHk&&yz>8Utu3}hUXH)?bxJKk!m;JfL-0D!^C;xF#l7oBx}+Yr zKJF!A*iAxSZCJdE9@q7;78rUhtXQrx?~jlddOl;Cs2cM>IZmtVSy!)CB_FtogP3vyTCpro8sHSYI4%pB z+>k_WgzY!aT{cF~5gR>;1X?JD{)lp$D43CbPV=>=C^7YcrC-vmfo>8?G)?=I=2-$b z-tw~cFVdRdJGGd{NDv`R`;(IX>!+R?=+-4m-<5~+sZYTL+-CmCb!f-8OW!ShdIYNy z=agK;$$>k$47t_wK&%;$TyZo1HcL0^h3EfhkkvAe>z#%TEWXUGXtt>FWrMD>jV;LBGq7niqNU+Lza4I78QYO4VM5SKRRHwf~!&f6*ftCq~z}=bJ_# zq2s!xdarG*D7)K$# z3!@nBU!n3*LXOHbJ%3w;W>|JS&na78$u?W1Qp>bU`7>ZMeM)EFn!9ZOOyL??PO;XO zB`WEX%OgV{kv64m>AZANdWa)1^w-Nv&`q?(1>?uwIB>D}C=&4C_=n#k6k_tLkvD@r z!iTqe;@zX@B6FUa(|GpqppJkv|7*who#WMN7z8!VVYa5Yb$m38zJB>!CVRj_YK5`jY9Ba2FEl4Xc7dt#fTgb#NKa1{J zP!@e)JFHesMX(NapqjqAGY}F8G%ciUcnTe~6^+Pl6cPG`ZdYsA)YQ7B39_KRALElP zE)gH)(dcwKvyH~jj0kWP6k76=by<{G!0n(h>hd{`(f6qI0qLXCC#5e)KQ8?&T16wT z@gO(58Wyf2E{{=Ya{j2epNPnKqPi5H4ihN)$@MBuaO&g2+aU+W5a68L_NzEl+y#Pb z2_Kd_#R*3JoARaIBTf+X4cCBwC9H3BQQQQ~n)+N)4YdH?ENNEL>hQYSfeuMUvN+HZ)Y{FAs)&22vo>ig1{+pms zVl^l*J>&&e@v;)r;P|Dq(A0Y;dVasaTZ)yHjFS~-Fji*yn@V1KW&=xab~Y=$C@s8M z$Jx${@438U6fm4}eOF-PHzpwC7ve^ZqTc^x^VBK$HwJ7!#AnU1bmP6#9ZmBW@y8QV zl!_Ssh|AmKeJSrihX?e5AAvM$`*de7Uxy5C-mj}V1TS1dqrCjaMEwbvJYSX+tL!x>U;KOtw4hXb$JQp+K&2%tS6u2)mhuG zrtrG`2I|Vf1o^fxL=ewfV_0i&r2uuqvBniEvOF)V@Fy#A)2tDvX)<+8{vj2>JCt0$ z$*B>y0iD!nSyZ_NJjj9L6GJv!eb`Lgq;WIu0HLVNY&xW7Hj4xu-%mRzK}XqeNzJ+G zN=Dvy?_X{Q$t*$zn&BRCdr*|$sLVb+k=AjMO(Jg(neCD5LG}3`PoyLG4$Dk={lC2a zU&tC+18uv*+uI7+meFOb*Us>%V5YGxW9&pSMcN21%m&?h5DhQvOx>ZerkDu4b!z9r zFbe9oF(b62YCpNXosfnigNm<`?z@v8y;UojtE;ZARjc`4;!(c0J|(T=Zq=ZOloAic zY_Qt{y~zbaQW9BC;*bsUvFXfZt7Nc~6*oL~=4?-#>Sr=aXR3vb@-JT2-PKjIq}^0M zd*)c^w#BJ(S|-hu?%9OSOjbzethAW8tKMlku9?d7?305#?xC?)X?Pp(XzQ&z7cDX$x{l=*{3kL0 zBT^sHP)Ct&#zqDq&>pY4Ax+9h2Azv~{zQNwDf9tKLp;Cj~dTU?T`??8}ddo0OyshdVF?3Z`_^WnV zH#LR7!yXTQ_kd3o{k-^)q2@};VYvQL{`FUUU7-(&cdLfYUjaKt7HbIO5ww7#6Vh4f zHt8-AZy6Y<6qRcvyjP?+eK?#Hpa=xQ1<_*(>w@L~y{sFAQq$56)6@;B{?nWj(}4TU zUBQX^Cr*@4oaoE)t#E|<`}oa2OL;tk%;^bN{N@wm(TS22vfm~NVUe<|TrH^tI>hbL zy)YkrKh9|iGZSIG81*Iu1pq;ZX>uugr7n+$R;nv*=V{!)E@kr z07hIx=N|8KqoH-+;>T={*aYSywq5e7E?n!jZrWw9?^L$7gDKyi3XCa)PYCQEHZ9w> z@ZjkVYyS9ntetz5U$G6Uf$S7T^-bF{V9G#sS)sn^oI7*IvMQz@hCUtwH*)J2^0=wX zk|Bj$(>hr|V(CX2CQE9?yGzaJj;;b;7d8mGI5mU;2pJhMe~DN+cV+DA<_lar)|U7V z7y5kD{MFG}Ljhtei>r?H}o__hO^m%t)~P((U^M za=TV)rXyGf^wDNut^US7QQOAX1}4d9z%gdpgJgX_U7#M7(I=3w0-fU`LPAzYXqzOT z(Hu?*beqWoO@YEoWAd5*+m#Peg-9&us2wLdcz1QI4*is@k+LiwR}|vdrXA|qc(A~R ztZd4vsVWtwRqW+u-B#HI8SRzb0W$iMw~K(j(r`2^;Xl|-=UCW5GJ&)Sa*8MCc2HaU$=&&T-(fki1hW_MK@hXN#XS>Fq$}V& z5E;<2LfUgJbnE78(D4wVJ_f~QP;njeMc8j>nz@7VzvR!Tilx8ynrit3ZDVMS3Uk7p|uhEW!N3I(3>=7 zLot=_eo!d~difGR{?E4NQmZVxs_M%BhaQxb%AMlIgy**Xv2t0iRNij;Ah-qJw%zbI z`1N1f7In2R^S2kLn9F2KpPF~5NnL7emlZE4DW#3-(N?KsuQ$&eZz)raX|ll6)cA3` zTmcH+Vwy@^k$m zc?L(RqZmNNUzS=&tL^D^J0R1;GsnYHX4Am2YfHkPNG$9}?X;o7bw9^9gR4Z@#IbdS zXrI>}K^^Ondkrm= zh1rRz%E@{W($kl=xCMOl1}Wm;`wW94w|m2@2a*Q*;M1=At(RYNT@vh1AS8v+oG*1U zxy=HdGvjjW?l& z_mV+N$ej5I@bZX>HzjI5@m3P4k&jJL#-9p=)VFlR+Gh ztB`!2S2xS)@@3Dve8qLIJof}oU4@$vuA9)De2%N3&+GO(FCk_G9$r#ur$g0d zsT)qIwA-cX)W1j|C4R?-PqzZ=87tt21V^&YW3ZQ`3iOjrX&KtU3BK|Xvjm)m3DXBQ zgsDM0W_^$JSqu6#K{Dfj-Ga%4v&1P1CtJfm2xb)p2s>`z z*DYiKUOmoPMBYAzM)a@Xfy@W9B(UDo{dL=aPyHQjr9E9Q0U5si>)rQQ!Iy#29boZS z(M10hJYX5T{yOI;0O=ovmV6%i`nPjldSlG2$E+RUKQwZ}jS~DPFg|uM#}Rr40+x6% z%A6A@>NBbqB6p6Wg!Som$+w>_0j(kD`&mVC1e>9zURCMp*>NVFK&I+fOTgt8;lBsw zPVxkR`?JJBhD%>n>5EXRoy%CL|8>rCGG}C*XI!^hgFf{p>1M<~5r{?{g;rFi-Y8O* zSl!^fC6Ifu*ctDm5MW@3+4DGtco!LkYLvj7OeI^Q%Dke!6POF32#w2^SD}JpX*NZj z!~>!uVNLxVyni*pVEY|anU}YauTE2?TTrp#=Urg&T2e&=OXyOl_pOqqREAdEl~!T= zz9d}{F)i5|cS_n^k?VW@;^QPYEYEB%b#p7*`(yn8~X3ZYacP0eA7<><;a z&$Qdqv%T39^Km6ynAI&ErjANH@99MTy4+Ygwop+TOKS_!A2I}3meKG}#=U05uCJ=j z>|z8@4b_{94M^M6f70{K>6UNLVC)czkoR?2g|S+->Z#P zF{6^Iob+p!TArS**|a?UKE`Cipx!9VG?=2QW;vhxh&W5D6XGnffxuDE784S5^#o!) z$2$4FzNz+wK~-Nh`_we^NK8M{nbN4znaW~5O?4Ei@xvvJ7BKCTh*YCs@r6~51V{cL zbo<{!ME4PTp4}Va{t_o`5`D)fBHfSrA})_d)jdF9#Rct$c8RR8g6$qoW+EokiG5=h z33~P>YI3Zo@1=B{zR7W;{*AJS`~`|L=8Joq1%Cka*e4Z6>`?)8d{Nj^O zetXaCI5E-b)1N$jdbIs?CbXX}=QaaX5hajU#!n%tU>|V{m{w>nS+&e1Dou+05NCF- zEe?Mzz&HCd3vMH%YYDBpu`Q=N*s3>PnF_4o@}b;|mb zB%SJBDfME;6XUfNE})uDO79C$F%Rn33ki>v56?5N77y*}ODEOSNzH#kzkWcj2i4r& zv|RgJ>(>t;y;!Sv4?h#@_P#PZM8Dn>b$n7q7d^q`+CKH2>(|Aaoaom(6GOt)yCu4GJ*tcJw$b7K{e6+~^s8X{J|A*<+ZIl-1xS@VM*FCdh8SIGqCA5Y^_v@2V0zG6Tv1|ME>m2v+2$ajL^dQEsjyKVD zDJnCV-neqR)zi>EXRv`-uG<9tnv{sUafyx4%CLgb?Kee`4fqni>too0_00|RSZMPY z@(E|4XV-1sY*E_t{&O5b!u33*YL`QNo}3ca^!mmdTAN9t-v#b5Z`1T zQw*j%nrV2AkSse&R4MhFhFOk-*_vakQC#XbEVFj9>^N5qjakgl3{#~FvviCpt*I5) z3N=PyP9z%?Ua16L!Q{t?T#Un@Cwn#+9};JVh+n%c-O8~)#dh^c66gKmAPEpU1=T6> zQN_8xaI#+_y#izv6HwfzL`>1d(fxE-FO{4bA5Zmg#tGqK)`3TN;^E)mV|#Y@+q-Od z{yigKht7*|7dm@={o+VYBkiy{-VO`P5yjT`cEp&uf`>xWGtfuw3LeJVTX+BVmSlj7 zWs_Uk6H1cV6=iZ0`+Y^^3x{+rz@V?Q5vPXl)9{7Ab)qWDiwJK62e{VZtl^;;TTIwC zkC}q!NmR;txQ4YfPpuf2;jt^JY)14+5l8yq*b5`{PKvCsmh-wt2!*%j;*zp{<|X(a zW9=5xFNp2;M}MOwSg>`;;C2w}!VaQ@QMPb{-y=K{Nk3|HSFrX#0JLnAE}QrQ;av?E}k z#SMSFBamE5K@aZZ5eEi)r16cMtS{3EY&=UQ z@j=P%UyvG?DWR!b`l`T4oGbXd?Ti&bXO8>K4}B<=0>3>zPNT@0R`*^yea6TCXbthxIUK3q!wT9E-V= zA-XNYsLZ{WXXLU7iIt&etWPU(rN4&0iMYavVUgF+K@mL=PXqJ)P5z{j!mZP;Kz!q78{yMUGv^7^( zH7dJMf`rJL8racBWCyAS@1Ou(nQE%;VBlB_WBtmip{j-{W1L`3VV6_p@ew4YGn9^^>bB*XYC2|Oz5lEv^~KBwUGfJa3f*abix>%ToFTXY zEpEFwBZ8_0^=8n^Vl8Aq%N~iaic~!A?yqrU6HrM7Mvb_|puBNK>#oXC%p>%IDhabE z8-4fdXAHtX+BCut&uSDcyj(+bX0a8=a0p6kI>IF;ux7AP#Z6bD@UY zBu-7`KSvVq=a}1GzXs}LIsZ9^VaA_l<1{aWKOQZEB)rWa!C2m-NV1Z_hCWt62&Xn9 zBMMNlpe7gCSiwy$zp-MRRGd5x0xwlQH<(bmHVUs^H3+CTG@Mk_p|8QI9mj1DnC1r~ z1&;zX0+q*;H>#onj8y}16gjBDggOBk$c$%zvEx-goK!{fJh0Pnu)-)#USY~MFZhPr zg0wW>oK$^GiX<40V_>j)YK~SW=)zQ`ZTdX#mfPU9$}aD&T)VQ`UDXOXA<=nO#hSM} zt3pN0$3R{B5|28Usc?l#*_&Jq2WbUFT%xpV817Nk;)#_jg6dQmuT3nkKbS`pUl(J! znpUP>Z9)ZV*Xvkw=xBM?dSlfDe!IJBG#agmKNY3l>UKKM3LnpBvzpMXdXoy@TlQdT zWXhvu;8mNu3m8+_U8Z{{kQUpgRw|X1O5zhC{WWp8O?u2xHQR$>;=A1UNa8)-X1#P} zF~Z+WMwmZpCwvuG++Y5}2%DP^=D2nK~S*?m6cc5;$)mPuJf4?wYr- z@QbLbd@aKE(S;GX%h6J#B0Y@z0wX;vqaiMkwii9WQXphq(Dv+ZdVa0;*kd(saq;Kv zw-6uxe)B+jgnU-^l8=`y0Ad{%5mT@m+eiG6c$?7DqdY z+i`N(Lc)09oJa8RI5%pbaL~Su_y2gTME_f{6uFh02w!ogWF^CKPxv8>W6~VsXdC1F zWMQd>Bh!~uy-qEpL) zZpCoJa?7+Z8ldT!X1zq>>SuSiwV!oOm6knC4`)i2Gidb9z=VHyzx$#e1|Oc>@KV~b zp3ex{O9^T0ARhLj{ZElTvJV5F*iAce9=jW;{L`F;(9Bu*nTf=Y%l-5lkoz93_Hbe! zZNvMD{h>V?^tjwlzX7@LLHpsvK1%!kVqcg{{N%nUB`R6MN~yYmzDQwjv@gO1gYmZO z9Ml!<(HD*KlS%mo`l5`VL-$4JCiSiAzMYYj+9cNbIxDX6_MuhZAw86>9wlo+dxZ7c zCVL0`+WR-pChIz4#pW(m#PEGmJpBoA`kK%T|F7gF$X0z3`F&AEM5Jf%a^%qD3vM|i zB)=*I{w*w*Wxn4S&u)k~p2H1XTG1kb>!w9(d>4HU@pdAd0I}5S6iYL)aK#nan7fH@ zBrj7#)%MSunh6thRbi&W>YciQA-x+QDI%0M-Iky-jV2`&j}y3Rk0Ae%0pD~{mM>d7OrP2T@FD%kB66qE8J%V zZujrzi`qMW1YcHe!|#FsKbE9CHd`9scuhJX-I~?FY?Xa5PG<^!%tU85P2wUdc}9Hh zZkH3iBf`vSaE;Xag3>z^`r)w0s{Df@np=!q%tpr(K=Ooh;7DQx-*eHP&PjJk50AH} zywB@yj4Zg0bQyeCg}XgtHDfFCwmdDnGU5=5IA)b(0(Cod7Xfw`figwaX>0@2Dt(@+ zY19)}*5o@?MP{aiOnG^Y7R0dEi{+YIFYJ{J@{n^y{<7JG!Za*6_m6 z3KdiD9DiB-Sea7ktSpDv(So4vP()lAae5n<5jWVpsL(r>cjmoQZ$A>)Gzh32RBO*n zZ=9ainG%Ky)2B~wOlR$&A^i!=YG$S5(#;^P_i|5LUf)|9m_>l`QLnrlZ2- zy#wlk?C3@{2*ZkIqLcr#LA4uIjKE@xlt5?esH>XlYwdH2{cyGHlw*UfUG;RM>{zzt zx{mHRWnHt+2EON*j2V8z51GwOW>|LJE?3L0raSN@$kkRaQ9@T~plb7XQqdv{#YNOrn`@4}8}6ZHPUUATOs-hY!K z`?9G{--{~_DqVb}r7DUXx2DfjnXR(MZLLm&Dw^IMU8f$HB8K^eqY%mD{d_fhV2NXK6jV^&dqkkTJil-b9a&&vE#JRsWWyC;3Z zYt0tTNUM2c+vOsYkyr;C6f5dwYepShLFJB&C@dUbFzTT1v1WS2Jy~; zitvs_#a0#{))e)eM-1&AQ)cXe)6^!;-I{i{Lu`8b0mftmU6K=Q&o+-fC~=hoQY3)upa)Ka zR!lxZaVwEhBdo6z3*Jx#_OT&_~M{A%_k5lhZs9BGdR1BF{SET6>t& z^bQ7G-;t5fmg((7l{mMk6;8o!Npvzo&QoG;sM>|LB8m9K(knbh?rG^AJpSkmXbPhI zU6KaL6@|Y|gzx9x?@yBr9FmgigKr1i3I>(D;g^U>95uA(DV?`N)fv6LiD-nuAQ34_ z1fvEUz5Sv}sA77u?3oH$tf;0d%P^h#8vNJ^RhyWyou_5XCV^Y$>cq6t+eJvhg47g9 z+H#9G*l)i6I=6l4@Te_s0m)3uIS>ttp`j;8uddt{5uAH5_l01|!fjFImf%ti#IPScUw-UwK`|`6>C7uFe*86)2^CE)h?M#4~>xCT|s53(zSyC)TQ^$ z9Bc4yvva05#|EIYwPHK+jgA%Citd|{YF4YJs;gnh6y5qbbSg7(>azRdl%dpsgp8cpJ<~P!cs?xDD6%fLu^Op3kx_Xf@ts{)8>p;=cC6W1LPl=PIN> z*_iE;rfff* zJh_Zv4wCkZb55LX-YnhDYjM;@dxeo>ngJR>vxq*!w(;`CCll~w-j*I@fAlw$Gg(UhG=eVl^ z@A;wPU+_^1YBxLFj@5q$Z7W_Bz5EWEgZXi=n(+6t*qRO&NNBNdA~N?knU%JsX^_F9 zhz}&9QDUe>8~}j@9OqzAM^Cw!pGqYBWF~w5U z1|Arj>LNmoTB0gPV&@BN%T(9Obm6A+TeC;ra{ClxXq!;Sg;B=pw5;j$yU*}ttxc7t zK1r{?iufI%%NF-)3ie9bQfO2GZCUKY@~u<`!?c161H%C>F&1V;xPx?@!^5kzlP-S& zHMl_7!2M6g%AV2cpV(R`v*|UM%r)7O*YWF3T!>Sz^94DJ*5Rj2Q|c;b zymI{b+7ykB3{S4lsurD_>7Uw|p58dspGn*8YYBF+RAT*M++Sn8c0By#0~_=68})kc z>^ZXh^XJcRY<%W3BXg1CyX`hvD=H^;OWZfJ-Rcc+$$PMoL;^zh-1RtGA-PrO2LeVN zUw4_YFgMk3X6&*~r*%g&y0eX%-7K1VzQ=+&JMhU&J8aC@Ys|12#lkXduQ_8L(^%er zmZVqsoTh`?cR%j;+6*zyg?kk)PDdPi6iubDjZKkL;mu+7OniE$zS;P&W-?0WZk{iL z+8fS<=LUo4pa1c@?)m{j8NO<{A&GRA>9$7#n-ur(6^^_ib>^Zu8V%!91TIMJwZ9_T zYkzh1DxUv+d-kU%dmjmP`M#xRXK?Dsq?h0_d&1q2AU-Igv6DU-> zpiw1oyrYXHyAx|}>qyJh!kH2YXU^GHvra9j1kKQ>99eFX@aK7}fDugjfehv;$(x&~_@#^Gig8XVfO#8{5Flm&9c1=kgvp7U@MEpBtB zLCpqrJqdXR)l^2)_3J^?C$i#1Z7b{^ad;$6=pG2UNJ!|)FuhUqnu8w&Q@*1pezU4G zRkrjybqq7dDl2oAHy@MA{PKK-M025BnU6eBKbiqkHAttv*emOSjD}mKsEimR%^89Q zT(W5gQ*%v^IED`CzwE#)8+u}9IfgNNba`5~DxE0mR5U7AJB#gdS{5>y#c}WS7&y<$ zgIcIPsH)=hm8TecirQ41GJQa-i?%1=q~aQFI)`cT3Ci%llTG=4Lhcu*52?0otM_Tz zedz^>RQ2PErhHtS{yt(%Kdp!Q)9FPvR&%>r#E?MACyIiW7#g;O;UQNbcFOH?xxLUX zd!BL3i7|dlId+a2o>y*@T6wO_|MjMQYuSxsRgGhJ+484*bL9*ts1Eblb5K)xRIjcE zLoPa`Z{k!8J3gte~7wGd=M5T>y;^bHI!96~(jm!j2Xb2TdYb1@H{AgF?g zg$raYgszRy+O``a-7ZWxocL?45OwdlO3)}p%d@k~QK=DB=6pN+6;5;|HaXR{;UiL^ zZ`hnG6RK-mXmiUPn-yCbI*$u0%V9-yUs#1P`bORyf52VnR?(2K?p9%TeZ*F>R#2?ovK@Ixu%~q%B-%mq5U1<(W}-)1RLICx^gdTRHq5F zslmoj*pUu5u{g_V1I6Nv#0a0XP8dmgiRmfI_&N|2yLDPMykKTNbfHnP3k({S8+4{a zP68wbixtXt)|wk2akKRGln*qSL5Mbl)fJy*8$m{y&NA4EK3%Tio(l*H(mu(JJ4_0{s9z&eYYwdd~0^YG@+TqGnLV zGoG`8PG>dQ?#nm+idTiX=Q8vPOE6dIC%S7l88_YzfsCj!bXt_Obe1^6$=hdj#Z8Azu= z+NrFg{$`@FbN8CII3}Le!@ihAv2?`8St8;N0@(;IajD{U6CyDh?h6?C1#j-#;lPXc z@r?>xjYnjN>td}`piZbG2&f}R`JAXH-67pAeb?CTM1Sv_ z9?tI*sF+w2GDp;=9@>&8X5?*#C|LPShl}Kj*dkaI8x%*xopM&CB=jqmq1b`7g9xdr zY*-aP)Kmj1lcirqJsA!!?o&J9>Jn5gm|dD7)j_+~43#jG($IvNFVw89&daDHXTGdT zCW9WYOIVX~u96tdeNCLl8N-?c3Np!>0KJ`PX%lF2x-VUaCcbxV=M-HomBd;Vr=tTJ zdq0UW{08OQ?F^?15`(n&pN%L7RSssJsH?en%B<({i(P zQFF1N*5XPW{wowMAZ=)k|VJ!Px09BbJ%sv**Gbj$t#4C*MiSi*QTe}s$w9U z8rkTSQtX{v9w($brFY;y?;Dl~>T;}&ixTnQh;SbF>K=O+^Xm7FN(py`Z(K?nUVX-K zX6oL3`-*F?`ZLUp7ze4f97y2rZ2kG&B#gD)!UruIg%G}p>a%zKdBYOcJ!)3Wkvp`Y7(k`i{O=kXjCsM^yrtLgH}YY z$dq1D=}{%SRNV(8CD~ilvwRSw5CfMC(ZF%Y4eK&hDvtVB_ejfo`veM-{DB{{u=kF8 z(}=vfC>`avXvcT&#&;6LvjXZ_J3&56BD$eIjcW**S%Aa@@`_x1czr5)bYZmzko>}-#4l96`|tR z31ZiYJ-%+TA_iKLFyP8Fh^~qZvi&!f*lO)sm2cx{ooZ+>E1@a1C5!z@Vnk3%R_VBb zgGhLyk(Qt$$uqYPJJ2#rN!PmfNp%n7h1dQ{z?J863;8}*=1*P#wQuA6kuUp4Fkhlq zHJ{#3;iQ{<9h=)n+^=g_DLnS!bT)OC&gO6-_stFy#LFzTb}F-8zqno`@Joih_7#zS zD6BfS?knVB=~wT6=Dy4=TbNkhQlRaAWp!V{ceV?T8`w z0{>l8zh9@%K(3kxxsr2Y<^N_1a(IUNl%T;#AysAQPFZ3>stO8kqhBOI-!mX6!tMt_jF34cBpN2v zMml~CA48H>KF_Vg4EJsrq27b2`=vx{#l=l-O2DTpna)~SACCAKZ=j(8E~y~8JfFbu zBGx!iKjZeK*=ACd*=k0;;%Ie6w^TRQJee{>)(A|yaG+VzDwzu;Rhh=%uEviEX9=S`yIJ1vTMlrt1&ab<0u`!x~5{hQ{s zGR&jsjP583Z8?64SzC0T8bp?f0T(z!^&l;ho*6&qIuFVYV=`d$$IH@}IEs0t4>KDc zqY8Lq2k}05+^bD_X7jiU}8Lo2=aGcm`#jWQbuAH?9=uN(7oKj^nXEE96X}XHWbDB(4 zJt}NT%SMwjActy;L{?`^&7gJAp1j(0$5((gPS)$MzWyp-OTx8h9P#xI=K z-}u=awyh}xBqN(LU7>7|dD@aKTP17C-MLby%pxsIwwE*yUcm?O8A!;Of)5z2U)gb| zaG$V{-`0US78mewPM%;Q^tu}dk@821F0U%eD$XQkxTD8IGs=PV1@H_0LzqU-K*uyA zb3Bp)&8PWludt2fp~*Ls!3kBeRqopfP3z5ab&G1z5>u7h`)<`kR#NE_l${=ED;iR( z-u$MRE>X3_LjBhF)fAPLsHL=2OaT%N^hJ%HcvCWYW92yPAh#lxQ5%>Gn%5xawh@K!cB-kBE4L*df@-Ja{twgwBU#Z{{ zSj1ftqv&9LMON@LbQZ;*<2C=e!oK6>x<7|ESgv~u;06nKZ~4e0^0{H@+@Jt%l+R>M zS9+EE9!AnV(tD-vl|Ck2!!=!Df>h~uai%fcjHAkCH$HZXa3{l+_Z6;Xnkz#+(ZPXiSU~N zCWD3!ZIsj%qG~FEHoU|%1*Rs*?@L?#@QhEIQaK zy65_)t>Sz5Y@NuV9V{Q$d%KZzje}t>FiO->A))E!Qo%wnKd1o3klZD0~S2;DXw7p6?UKh7a5= zA{z)JWyrXQ>pC!{b4#9Af>YVKm%wCCmKRvL(q15Bp@FUQ_ zz7bBhXM$j+Jsmzy)#JFxeq5!m@D)8!Jk#|&KK$v{f(*&nY7Olhv3b2kC_|^Xb0$wG zNZhznTj)B+iCmVX!T1VmJNL=%rKpwy8Fi)rdHwvBaKqNLPYADTg*#o(yn@E5FW})m zv7V&iW8p{-?R_S(PZ^W{2fp+2?~U%Lj_#q}P|J=Z-i*et1C~R$-@HlQoxBGF+_DtSr5tFPPFF-MQ zs_LP3X4^^^XyZdM5cL%9+1Pvs$A>RC|9E&MuM$G2;S;#f{ht)Yqn7IPeI;Ag*AqjJ zO_YSqcbR+%=;q5Wn{cxJ_Uej|8n5ge<##oW(F2|G4b_!*C@4tI zb0XA4AaB0L=*sTY_;qF*RfoCSw6r2^XK`Qi*;;{9WOK~iI3C+vxI#o5$HM||-!n;T zzb*HK%)BG7CR4C?@RmN4HvC7EvV}v)i#ILY#1BDwC9@?Non7|!+_M~cvy&qsbhuj$ z_Z;d>d@5GNwVTotCpbB!z5|?|X=w@Oez%NK6z^ZDq7i`6;!QUv!Io3d4XR8}EBEHE z8TsLn{PSd9JFny*Fi;505sx?%u4j-3pV_UIXD774&d#V%@X- zs*f)Ot!iOk7;&wSk7z=uAn)?A8ns6&-ZaWDmK*%Qef+rJ6=>93SlPFryH*qfNrA&l z$i*|I1|f~omvhM5w?m8A!k+cGyatyBUYbh2M|hOmi4UbS(p#l>7xtaGZl8H7t)OjP zKY5nW&7UP!V-ZVtyZh-yug&_~@(|Km3)sHs)19M|VV4jSs)vdl8j&@eP)-QvKn zOqOk*V}^$Fb*}DKlhG6VNQ2AT&t!d8x)XZI%hLBrUwHFU&n%ZmOp>`BJi6gwXbe8D z0)=Ws>l;DzDJJwr3IWA=ucA0O%DJ+BKUJ%9bDU+IE2tEdMlthLwF-sS9nX&;*-^wpD0^U6RB~U?a?2OUB#+M+JXx6Z9jTH*fUUV;9-gr-275uLEHr*Ym&>+D1)YfCiw(YH*Z%aZWyvOU zboZ`*9W|Q~9`4a2FRIB*vz%yQGm2f;b*fQgDrz|;vl=wJ3r9LrJykV`syp?d9=Ii6 zcdHCEu1}Tavaab*iG=X*E0$TWDykkk<=GOk?6`5UUbQVNSfaD8v3hK2rCBkUrkAV$ zay1R2`-+m|AS}a3c|Yoiy|oc;No#L*(fw>UzkH1ndK);F`J&|Ju=|wen^UD`OEz@h zZwzj0&IaXDFx#B(HCBU~HxqaIo5$Dci&YI;GPS~1+=|0`+0xB9gEDfo29@40L&K5X zf1z5Q)1FnSITO~G>aIUC|GxPd-*qb|*iz`6K689Km@eB;9qMj8Rc^SpY?+p-=w#8* zDjLRLXlq;0`HG7gGJDEZr1^t-tGH zVj@rP&a7ag2zqk~eI19XtyvLMVhlB)q+1l)=5OfQEVcA+{ag}f78jyEuhUry|KP&f z%3F3uKjz~J?227D4-;~xa}jIz&ZQZs-x|po-EU`qWA?cmc5-Kwg3{+_XY)DBQOLWO z^w33pTUaWOEk3Mou5k2>p|Gk|;N9H>#gimFrb9|0TD{=et zEi5}H>9FmI9F-D&Ed9lOgwcctQRMRw!{Xu_33m@A+`c7&JKR$&Ffl7D^;TWs+ppOr z7fGR<)B4rN1WEJufzJNpNB=^9(RoX$H$3xdJv|;A( za_tChnprzKNd`RrwK&6@7@qG}#Y&~?rBdl~sdQBw_-XH&wHk(7@O`Np?u228S0y-y zseLx^q>Lbl%>Yk0^NU0)v;(PZ6c z34IYbg3XdBH&#To>6N)nIQPd}LT`{4qgJ`xinhXXIo#sci|E_-LCE?t&y1g5=H713 z!t#Q1J@v%rqORYsnxPlSkL;bHw(Z;{=q*xhBKIBmUSk^3O^THYEB8n}%U%I#E@k zYX(^^onYGfI&@93>o;9mneo>`m`keLlukqHXnm}OYYO$N4r2>!Zb8+fDQ|t9>crHZ zRUl=UvkhS`Kc2LK845pWsGmor+oT_tegS6+8v3_@Cbvh zfQagfcv@N1%wBhx1i|8K7HzG^ZLGz_VH#6tb5skBP0QLU4n&D1`f#(COtCkIYh8TC zjn#+U%u0gANhGh$NH$N; zvj~MdQ&%zEm2LqMza`7M-+ouy*JW8vuU>;B6i~5nvE0xc3({h~K@_Sf%5-EIOlO`I z)(~yg32j?Jq(s+KY?Y{nLoMHc7r;P?z{#dWrZ8t@Otm7IEyFVz!{n&whu}G~Y9Sy@ zpjSiF(_l(!haTFg`k`xBmZIqTG=bE0U4eAu}DW-S$_Gm|Er!@B9@__aA`@ANs0##1Q)tzaW-BJ}0!- ztBI@AvNEkY`V-c1>{yOlPw0+1t^D(u>y7g2^_kns4XBXm;x=oyV} zwIz+Lkz`Aru?${IvJsYiA&bDQcZAI$V{C9cFj%%RUTby>M73$ZKq|KH2Z%Iae@!gj3GlUHTtd+&co{^$4OZYXdT#=!Y5$#mBF z!I*maO8iERpA`gbM$bk~oh!b*>9hGw;B(G0|6!sYr|c}F$F)!pI6RH?I}Ma%xjToj z;6clOSrYYUCaJlf337f3RZ3q1QhxY$+rMzZw{LG~-={JdTWzL(pDJmstQsiHG00?!?*Qp|DvRXE~6H8d1lGznzH2FF>9+k`l>Im`NHn1 z9|_7v{%SWApzier%OM2gk7%f{115Zk;ESM}2bdC4_)2JmIM%{`3e2z+zyhiS1G&T|Fej%|~!+!<|{*2#X775{=O^t?@xvysXNy~4wIHkM= z2Z?Xj_L){lwF^Pg?ZzSHoSr8NydM6PpPqov*tV-wcJ#+XmB%Yj0f+M0Ywi!62wcMC z0ejbz=|ZOwvl3aDC9&)d2QX*4gCPKAK$^cYCC3n4>li^F$?biRiV2ZTkwKQ%XL~<( z`$a$Uc+W1HJ!)9QHb~JMD@C6X!zPw-^sR*aT)FcW$Xh2n24+R+{Qh!p(&eHz_wKNf zO+E7&!((16ah@2|Jk6DvBQ(iB`X`b1;!wp0dAI{y!9jtFyn%X)4Jy*Zx)fPr zL=}UB#HIZt?PEiL`Q2rUT7*5_m(QhL{5^tL&~5u(w352)ul#h7r>}A z&J*CQB+J+rM&du_CumOBuM>b)xvF(lj;iB1Vi?Bd>efY+wJ%zF$Sr}Gx*PbDQCzCz zF}Hq(Z#6Hn-rtwuTkT%M61dqg3z#Sdqx3J#FvQ@o*c%gJnZQ7NX!qKmo@nT42`+Y> zZheUgMJ@fc7hd?X#vaF3ATU;OWE3YCceLH&J@PC%(LGDTu)s@bR6^(}klcnjU?hG> zgs+_Z{%7)1uLnFD;+&Eh8oT$pG5tjQb!}VIY`OazN@Y$fN`D(OHUGW^GLou5_ekHP zZRO1u#b9dW%<~yN_g7ICL_)*8c}X)_(O+v33r4L)TK@82`ASyOZ)YWUp5;0rI)|N} zVcCgqz;xw6ZaE0!jP2uj+2aJ=0)|5*1d&5BjS!*#NDp(I$6U*B?E2+&<}V2RTGJCgvsUf zr(tnW#Rm8prm5`HiV91jObjmUF>Z+I47%kp{vRuRFGk_d`A(Qc_H)dhxMhU^J#WLGo zaaD!r zmhcFVj{)75>9*H=oV*`#W#1p|cpb1q|BX=cr)K%JrS}Rf^zaDk-VzVq*6sIBq8b?W zQEjr?S=k`{kKwEF{V%_~y%a+8Qple|F*{4D6gWJKz^NQBV>wCyUV#J}ry}Gi)5c*d>Uytt|`3G2*AD8c%tq=Xgz!BpGU7F2Q)AY*tm9aMkptV%1E2 zLj9`R@XRlI4Yles37P3TESzemCaZZa+pkg9fbpgv&On1vZ9j9p8Z*=ORLI;8t4{}P zW`+gRb#_45UbnUBZQq4f^&_d-%f6u=>M>UPy>4FuiLOe_gu&W(*!q7@n1jk)MbmkM zQu`^J(gxQx1y#NdBi|u)&bZE6cgnR?<*;T_P7H%^YHEiS&2*=_YmQsWm#2&PgB(j9 z(@-IVbY|Ph!1~&BC?ICDPcX_2N0taLLz8c1Y1bC(NxZ)kbVjE~=w#Da8q~_?%|oNH zF8j%3I)T3r*^1fd$DPs4%t!#THJ4iyt~Gmbtpk4|9`jIZDpRNLpN$H;`%6NrcLYcD zP_o-Fg?50G3Lr^n%TD*mYzY!7tGG>GRMgPbTbgg9+WkCKPPbmreo+eFpOIpH%~Mp` zqH1VXFCz!h)y;kI-H2oH5BM3(eNlFcRF!=S?Xug5S+<#=-QjrU#>!m<2b#t?-qGqL z;K_t?LS{!>6N*JtHx{lL{ngAW52O5a)Wp2m7`5>j25@M)*^HhOx-nN@Ixd#!ON-DWv+aqIrSDt@T z<|>#Hkv``tj~4zaz(y4cE4Rq~nFnpiY;T!&NPK9WKzk1#I$ZKD82iI^OP;Z1zvlkh zpw~Swsh?@F9+wS-&G~``K##3M!{w2XV@+Kv$OYWNvR#$R9#XZ>3nCFS)41f#CR-(P z+^SpQt(?CW<W1b$5vpm zn}JEpz+$eU!+-&*s6Q$s6wQZ|Y_Ol(?iZZ#0E@s8-d*`67z+aC^d#n{A8!TfoD7T2 zw;)_z^PNKxVLICzNa&wI<^hK36#A|N6O&q1RGolC%EeP6S0280C@eGroE-iqgex7> z3adeAnqg24EwiH+14TY zEMvqeU4pGcxwum=y#TJgH?TYdGu-R8=|@xUd{m2!B#msQ7|j+&^0`jzcO3YhP=j*L zP%#3Z7OvQO)pBEh)@f#T7wGR8`a7sJVVu9K^6|icSjL6J%7&;AI$x%TCXA%+$vy>e{i1t+&0hk?O zLm2FEETmn5DKE0T9!@fw9BS6kTF1NSPuo9?d^GPO^gI*_TZt@%pzq59AF&UEY*vPC zOM77~UXF3ksX$xrqFHdbHdqq{tO*SE)dAc-fY;ArllW{`VC@U`E|KgBMnw-+H)saT zei%Njn6fq<9)^j3xF-UjQSXP79~voBF{Jqy8QYW&@Ry5(FkK;*hk8vA)mUcVE9o#k*_(4%DFW^g0U8w}B=996S`%RwWaA67lI`{|U}Xlkb1WK6X=Rk+Gkg)vKYdQ4Xh1*)bX%cW@; zL=A<5R7Ulhf(=tB)|J8^Lli9#)u76Xg7Mz)68<7ImqHgRKpX-RMM&g-_|(mg6`C=# zEzKrrTuXokra>)7fw|)$3?9^u;P_WeCZ2CSOww&4-$M zn!_BpM==Zr0yk9%P|AdUU<_&xR}_%L2~`cv<&Fw0rB2?V!EbP%Zdc8~s3K^Y?U1-0 zaU%py5c7Lm#8!N6L1j48xvCioHRC{2xLtL^(CqY(B!+^fR8*UzF&87>i5ja=6^`kQ zq068YD2XtYD@-+jMnE|gCsM+Mwnw3h{z;yf{3{%`D7Vm za#`hw8c3Mp+n2TCcv%YJ|3#cQkBxuGj!SvGY~Y$sY%6`Z+NM*556KDiB3VTT4V;|7 zM&a~=FQk}@LXTdm(I2BO3xvd%#7@6_+3|6FSUNm>*)EQ=3VszjjXy4*cpOy&;=ad9 z&&cD9H;n{Nf?tUQ-Y1VSN#<}3q&toPqr4lh_Tk?xYo`VW-jp0z=pFjEGjV(@h9z_G z9|nU5w|;7&*ZWNG)TvVi?c2g{t`e^DwA<(K;Q(`vDdrScK4zb-fNB+J@=L=!8zJK2V-3fJSCzj&zs29=B zRJ`mGPLf%mNls5qv{UEKf!lD$dc4XNpjC+ZNhPqW^djtXczyig`nh`j z+(+sM7s%++nKPH}z4ub5G4q-H*?r>K{^YZHN=3d44)2HR57g@qoDJF`SIisVbN7m` z8Z&Ftqu;pWj^8+Y_Q!}DR$bfT)}4Mr)W`P4;iZ6C2S z@FUWfIe<5^5zkB2`h&0<$AK40JNjM^@K1@)yeX_27N&$^m>^TUt{^Z~?v>zKg>m@TAa`bHx!SGHq6l#AG-M=F*1ZWaNsnuP?! zlFpg`f5LMESh)^lu12}xhBcyCPLTLPx9K+xC#=rY+HXucF-W^ZQI)UhD(}r%-0=M7 zRL60X-b%Ape@l=={V2I3tCY-@_jMTeG2%O;7P-sYRHiCj9WK$WDPnl^W{MwzDXQb4 zrIWipXs8suVO0J>T_dImM|u21<$u8(nn$TB?e@g@Oa8!pze3{XQk}-cYk1wXUJskGX@?ZTnvXfdh2ub$TOZcw3+Veh7m+Ge)LfoBASp9mopg}J#tnMBdW;wR~&F$zx#+OwA$+z{xUCA5WVz22?YzZBH#bG6#Zbl!sg9dtb3CL8jn+XK(^b>E?$|5D_;iw$D$zvaF4 zIe4Ic9&hN@Kcm9pugo0e%#RMpUyh~gN9%!E8`bO|2Np9Wp~rfKo%^7OUz@2Ms+_8v zsXSPD3_Ut5g#`49PLx<1^Bi&-OR3xyyT+TCf>+T-YkG2Y|McXQk^}Xy%#sn z=I@19K3lr}eD?G@z6jqT&gZiiW)KwOj(rG;F)a{ELYb#F_aA6v`t*~6u8&rp+=<*> zBAf6P-%hr1#*r)>-%`645OUSZv&W{T!>FpZApF5|-*`1?`7mjDwJUR+MdY;pyG+r*C$MkaN!qvyXru3|? z$q2OZi1<{Bj?wI{y+N<)>cawbk_{ywdBuVR5(~P3oAefDA30rY$7_%!m zk94K-5=b_4BI7HXSJCrcW_UzDd^E(CZS+?({ss`N5ze0yG680R`+x`O8hM^!G+TQn4ipJdImh67pJgzCW0>-$M_ruetE4Q z%lL2!X0pcPH6a3Jn(4!Ro}%^?Cp_w6rwFM(u}tZZvJoN6PaI@qMA`Dv6HhF`RW_vb z{-{)eYA z#~g=i!y_wkDq@fNYeNi|5>Y|Puxy*+MR*Mi<1O8`ecL{BLSvfhYrYEm6R2sSU%>7C zV{G$Z8Rx+MuXfdjzoxc)FN`9_HYwd?3`WMi%bJ2|>6Ayt0P3aW+BhbJFNADEB`lIk zW6n$LF%f$peH;*t4g~_VWn}TY*WC;ALHRrMJ7f3giq1()bohsQ8RE+z-23#*d5-9( zpHMWaDvv1er&3LMqO{h{%DkV#14GEItJ@cDoVb^xZWO|5X`mhB0&X6Px?~ZqE-zzz z(0nUAk5|u!EeuL2<@udO8TJ}V*v^9NTH-V4h;acodzXEoYMsYB&Rf-d{9-u-{O6*y?gV zmpPO$uc^fCEx%d~mU545>lNxUL4|T2yAa0PiOOq*zwdi0AE()LkY8z& z*>=VHZ^0L!3-aYj!8?6N1R7mqLtlLL70%~wqtX&cGexJ1o}HY#!(Gz8!8jPghf}26 zff@)oN&U(3$4XcCBWwQ-VA@gYk(MoF*x~4Nl&%ZD|8sctbNld#lAgKpbwR^Q*$KZK z6EVW|;1X`0D=-3HkbK^<^y;pRV=nPsHSt9*zinFvlH!LkB)~VbB49HrkQ_fHUvEgJ z^F)Hsu}Su=s=Op{LL89TJEa^?-6Fbq+XC>oK#4zxVbb?t;Ql$?QWfd?v3VVaO>e5o zb4a@9M2v(SUzbZ|EL=+|d^NL@ua(N%)GgoMw0$V_oCMD=7i;OC!Zqd7+zLJ|$M(2i zgs)N_0pBUgm>e#K2oe#Q=KkSDVDRXRl+qVe1v5+Hrp0K0mtj-Maz>*sM}`xTrGUxa zF0wLh4~*8;4yOCjfMPS6{<&gQU&hljNV7AD=z_nk+w@Idi6H-xV0qIeGw}EN87mL!LS2j&yTe5{!W|7)GsJN=>)U zi=}`F0jOvv#xeH=(%^1*7`xUW21XT{I~=Tyr@?cR^|*9Ng(lCaTLOMVlz4t;g~A%_ z&z$L~`p&s=l~F5V7(_)yWWz4AMDso2r{Ve9j=Ay%%S>w`@_s5!P3sLxhJ86v_WG+U z9chAA-mdTjo}58?Xqr6b24)U|d89;6NbE=@+vd`1U3hFNvD&f8&< zgl(=1-bLie-CubPT8f18rqDN{B1~uvL^dQ;Nv1iV6G&Myq;wnZ&oQA;mY$!z*^f>U z$|6;bbi=R|FZP*fdQPkv#POB5l`!AcdDF6qi<5B~Hwe4ki5LYQMkBois{RC{26GLS z1(D-K0aM+YYA}l{wN?V7R$!VFBb_b|58yyqQPWiG{oOS%39fK0s`J9+;Mvd=BoN<<7OFoU8l%cKl8w>%)TjIitEc+c!U;YP!U(p?$MKAv&Od+COGJ>ff zisJ}&EpZRXMm03pDzL*7xb$vHiTF)kWby|3%Y<8GmZDom22P6!vU$O`j%oBS1jfst zO*0bFl7w1N2z9Y>F0}%Mvh?Zb5I;#FskB||9~Mc7lC;d%z)YJY(1~%a&yE{Me_U(@ zg=!xvxAl2q@{78S`LwW6!KLR+Qf*h`D2ic6M%hDx&SS!ULGGp0pJq2e7yOwHPZJD1 zxPmXda^*@kUc00#w1K@M->pY+UJcQ1lcJ^r?a4foMq`is9@QBLgmWG>_1`&4ExtjI ztK{%!RO0=+Hwj0oI|-QqxsmB~Zi8F&=zruU^+J!RpE*p_#bs-gWPv;ha-DftQmb!eDs#9Tlr-#>id)D+b{74O7N6^dPV*d$ z`bR787Lm<+stU&W>hgo3CQ}daY(Lb5KO_1giG6{b)y)r5@dLs~$bH%q=?>8WP3%j` zf-jC$2pN|t|7MtlUR(4AYH7H?M>P$u(08kb4!d_|;o&l_`5h|a8}j!k2JY@=s-;rS zZ(y3Gz@F5{Dvb+cMaSD-#Vgv^UbC@YX_<)Juk!+R4Y{gW-XF>c#Y8w~zy&xVi}cuu zg+@?wJtcA%r@XEXUmDx!5tiC!va$SUi?6x!(CZJmLBBzi)seGw%x|c-P%_57&Fy6i z;!7i~poPkLo7z6_bLjsqgyool(Vuz6j(g&A36MiF`|HxFF&xux{{%cof$g4;yJgI_ zG~9;rQc5Ua)N|LdR~jI5r6RKmKQOLd=IZJ>B`3{&s08N z`L#SBYa*Bo5dbW(_l35~C1cHiCM~5x^C4|(cr3V=v96(~NwwBVBDJAN3i0CJSeYOV ztQ#Ub=mrr+De>w-5yXa{XO0GL{0faNozgV3GT72B&7h9rxr*X2MOPB;=?YI3qN)vC z6B?>YloW@$sV49{L(pZ@fSsWMCAK{blK`08t39otQ>J)$Nm70@^9#;gtKX72NR!3< zX|CuV-~O;HnHeS`KVPNj(!)FIU4D9^)w$>Ll&sSAGA4agbbYDsbEJn4B;%EtBC!;Qoi>Ms(b_F!Wo$@SmUcpf~aFiB$;zX4)-GQ@&(g) zjjz@ZE+)oY?b%?Af7Ht0kI)?WA-87u%Y8T4ztqmtrASDnP?{hMzmAtG-^wtej`X~7 zbXJ;(m{HyrI9$Uvxo9Z|7f|S1IH*`7+jb1oG+o=i46;~PW1ETwl8?4oowi-0)~Fe- zJ)O${Ss6{~J-EG;{!jv{tgfVcmbW@HLzVd+dvvdIA8EY3PDibY(sO^XZvj8Igy^lf zC@qg;UxyM1cYC&}%p(3i)l?TTNKjc^RDX)eG!d*ljmBj-rj|0@X8K=IZA(-{*>@`-h-Jl~{|NcFz zn)@qZJ$I|)SIebudv~G7%bst&LMy+zYfE;maQ2Hh!6G3}K z*89-1f><74w9=?7{}=jUjGakEcJs{4gyCW~A$_!8|@&B(-RG{AVa?}iAtEk@w*;BuKS+}l;>^t*9@7jz$@)0OgRX)|z zt)5lrEy;mORB50mWe8$*yiKYaiiUgJGvEBV6BB_518wxJ+n?s@e=3AN(qmO86){N| zo#Yc>Z^){M2NIicni~78x zt~o&vkuV6H*ExY3GK|<|p&K|WV<v~1*7^SROu;H zb-4)QIL}ndn9H+}w{wLP-(wgU8^>>!!u1;%Qw;^^p;026OnrsKm#@(=Hiuk~>2UpI2XZg-vr)auSYLKeg%Ih+) znak)E`M9j`K@>h`;tSFoc`5T&R25Cl+Xljjns}S2i$SQFb#ApXzT3yb7yKVe7D)iZgiDY8&{cDzl0D28A+R*SNv*gG14r!_=5i7XguMySY$n z&DHlSx?vz>C3H5t$tc#`1sJjT%|#zI*@`IT!({caz_9OeWC@3T1Xo>MX;XAU94-+N zx`>O2OaU*_iVBw)epnOO_9BuF$TnO-z@C4Khg17*+!w`nc6zW+-#0s@F4-)c9nIDc zc08XwZRVr6h!-^9lbu?ckR3Vi(-FL&8?(K1~?}mNt z;U83)v!u3fTGomz(HZbUkv-nWVcozyVA_KM#)7ire#AT42 zVMPMjjLb4lRTXY^7|Z08|5LdH-?}dPK^3L7iHJ%bm$g^%{~L-~eCr}3Drf!kea8E* zP@j)LeWs=my_44Kw0D)-<+}ShVpqIM9cs8-Sr_;}m0?fBJE1NKM?=cOYCjowXd=wQ}5H5*jBYqC-8xf|WU7l*+O zRhS*JVK=x{5AXFK$lB$IRz85f%fFACzt+-(8qmrpX0x)rp~^jOibLx_6M$k(CW9F8SKWQ6qHo{4nYa7K zQ%%NuueM8n6Pl8wMRVhb0;8p~YwP9AUkloX`8`%v(>Q{@_2{(lB<%Kq*`ng2D>@E1 zT%k+Glor5-4e=+K?GmhSb%>L{n?J$P3vnn=myu=r*Y!GK7LM zYARK~5&Mmnu4|roQ-)-^h=q7-o0CJ`8*Mz z6S;zPtT)7!P|F}G24e@2?5CVT&wh>N*AH*`CMGL`uUF;)9b87H7Z~&A$3^-|{6hKC zTLC_JZ&#Jy65hv}{Kfk%MJ2o??BBVoHG*68TOhS4GM&v#46m^S(j|I|r1|AUv@y?x z%Cnpsqat5#0X|)5ICIdx{-mpx6m5#+c*6o4O5HPGZx+coBXwO{1fh)GAv>vEMy3g=@mI3tfd1MlN5 zi=~)~TgA%y3SlPOe;;mhQ;~u(R5uZKcGhwSBT=R0an0COMZj;p{ErCp2@`~u znqe0Awn}XqXCwW#sc&uR=4DF{L$rg9+a|}_fy$DIH!M`ICAeLwU+-^o?@`w}u?l1# zNwZH&?!pWl?*6f}&&z*K4}ACM!Bz7ne@F9T zm%PdU-1)Iv*5t8Y!?^#BRE|w}Ll5`r!STRFdcp7;tn#&01O`sm&@HT+wS50%kDe%J z!G$r%gUyj{oqyKimu0hz$!?vL8Gm+)Zz|JMJ>hji=dC%=>WFADsx zu+oCLbGq^xk$I{Zqot$VvH?p$St*n+2tsZv<>|_iepr6(Y?gj>N}Al2d0EFzKf(4q zFL$wj(bAuX(bKT>ODL9I(ydDqFw{Bj=K>UFMVM29$@U*guc<#*wg z2K2m03jd!?{V6e;$MHXT9v*>Bz|*zvG(CZltv@XO`*HHw&wiE!{#)KzeS$oZe)yB= zdyDoiRt{AL0>%7HE}YAPUfyM8d;B*1+C)Y&0L1{e;1@&#-knzYKh5{qgG28)izD_kQ-C-swu2o~h8z91~KbN75nJl9NPi`dnU`2o1!n5=qLZ zF=ndIdqVv`jNV5TrNul8cDP~kn0eiC`J3}rbmVw+b5QpK&zqk6b>FXzewJy}Fw`o@ z=c>o>7dr^khdOSj)SFvH2JPv3BC_80bO@RqEfR-*g<>!-qvyXMNx@M-tN^d3zg z#}6HXwlxLXT4i3eE#WILEQbRA0>wj2mziMAF%4d^ zZ;4K`RoxVJ?oVs$mfIxiOwvjuW{oT2TqLHifyNNAz zWwzEIuAKzokBV$5KU7Yy@@~eHDR&?5e8W^_t`y9hQY2>~)SXH=d-pii%MW=|v99dv z@b~YQVMQI|!W@*iF!K}3Jg$O!Ec9e?JUD(2m(-ONT((zMO2=E{&QEsyD341yG11p% za5X=hei7BY)24c4cQ2cS?ON&z+uh0LkJxU_fMYQhGyF5H;#4B&Nr~ACs~|3kNBX?a z(S+5rtuKCDRX%6w(9 zQdupMk_%TxqA`r$>&*&vz%oH{KnEc?pu4tg{Yf4EYH}A2PMjDpJvcsKY;YSMvcaY} z8Q+6Dk_?W+Tjdr zT@Jqr9eV|v@=JTsZ!wo{z2v^V3CBux5Omv))3GCq{nhA3IP%Ds5$k~zHT=~*iB^~Q zqQN69)pl=+W#hZ@BK+SH{^onv<-Wa&y~^q#^d%XFatvSTo6ssSM6DktdJwRX0(%br z`a<`QsCOF#m4NbU(ns~-vc%*PnR1f|(Yokbe~D@`DOQ_ceh;p7KR7pS>#c^{(N>+P zswi{5JM$x^jf#I3xvI+jx}`-uLt%{k4R!jlZd4uB(QGY1M=j1w2-K=ZzNQ+CP*n%M&`>FbU8w`c?}WAiNX|Ss=yS@E9eDJX_zvEw4;bz_cldc7j_uzoHo-r{9?k_SGj@b?4cKpLVALfJwd%}r$f?F^AFtvUL36N!e$S?tfn@n%;WNW$AS{^|)4{Zs6 zX0cfzI?eKW6k~GzM}x7??n+0Ydi+=>PzDoMT{QU|`f?U;vT-fBt{W=*hsy zfC4yV0cNfQrT_qVob6d#5`!QN)cf@QcWV`?wu40^u0J^#`g+*n4Okh8!=o{Y_{irwP^WRr3<^g=NF(bK2w% zVqbmz>HK(cz7LJ~XEh-9N>~oHUZz0`sP{gb*OC63tmC3{<5;mL4l|zT>t?Fe@Qcj{ zi)OE{-|^XdGp6Ex$J7@>9R_+aQ8 zEcGJxIgTBq|Gxk_7Y0qTbE2FM^_RNF5gL~A?h5f+_bI_y#_Z14_v>9mdS)m+q2H`I zYua3Uh~!zy7f6duY=!?DS!u$(msdZ#4+y`Yo#$!C;xO*loZX8-_roIThJv{mExKJdBsT5Ag- z2_Ym!H;F=V5T%PQ4qfymL?IlMLQyJ}LZ}?wRFYJvgiw@1NQESX5K2WzB}w>w8vil= zjWNes>wV{Z<};r;_j}eV;{X3!5|L}bR!8Jpu`LlveKwi7PdhPtS$F2SFg#+Ps%%|E zncflmirsfY#D3M;h=~0wGqGixvlS5s@HwyyTM%&&{BkMVdz}|?u=|61MU;nEepkdH zGa@Psh&Z$?<9`^8!}dfRE_X%uM+}ZQ66GW1J_>fF^$|yRW@RZ-$E%|%E>-cYrjBYbPT+IG(ufn+M%3U_V@E_y*P3u@HDOaDYU5cO&)U{b z>d3^^u~!Gjlj}0^b?H#o`YCdsvL@nGHJvI?J=c1r5%u}i@5}g{CiXN~r_<(iv1f=m z1Gfg<7+o6T+>qaym6+>U`f=9Sh$6Za;Zua;*?iAY%Q^U*D@P+WHj?K&vFEA%eEH7T zhsJm{R!`%t5lvj1(D?$qE>Le%zD@ZwYs9QIm#?`Vw9xYl%Q3pP#IY4!Tg%@@zBZmO zqQ^ye7VBd%yo=j0vvG;IwrXhyuf4qvur9U!Klhj6bGh}))zgXp6|kur)pJcTgWH8~SD4pUVD_)`d_C>1r(HL^Z&1$-w779t#7+3#v^b)~eu-Ld#`l&I z=KfZ-b;r3oeY)e*!}@KWZ=+LBxq9;HH7DYB8s4sVcUZp@_ulyQ)|WnNx=Y=6QgL?WP z4Tkd_zB1w=_Yd=V#N3Zm_b7g&+?R@d%-(1@##kFOGh$pD} z6LFfTPm}0AiPle;b+W}|eSOmJ=}8(-QOgv%J>~f+K2MvqX=<46c?M21tUV*<*-a5M zX)_y#IbvRf{gNDWVZ7q{DvtB;c#R&fvjuW36u;2CzTtk6`$g^-yMMDHQ|nu>-gf^s zjhE=rJ954w&%1Pg&;5J2FU4mmKJTmfef?fWuVs3$9H-^tR^aym9X|Bi`pDWxbXiI7 zkLk5a%qsm}4dYWWpTYgybqy|G==GQOzf}8I_^wsQI&-m(_TQ=Vdpdp(`v>}N@Eh95 zce9!ONzN_w`&FK;=46|^J8<2}XP4jMZZ+qqVg&quC^T&0ZH=7sDtDTkr>~CO8FT!pfZMQBugM%Q=&~L|tuZ)D}j&s*!82*7kUJz`KJymzFTk z9qD-)|I52Zt`nY}U|j+C$^mR%YPCud|q|)pxb~tMR&qHrL>Bjr%SY zm^!=2(G||MxL#-PdcNIoxB=dcd~RYT`ckqkayR36OYg|tIxKSCmqe}yoqOPRn_7CR zt0(Px(dTxY?w~<$n)JrA4_o7a+=fq%+(UdGmirML zAAvanzme(~h07?jI?DV$3j0xhrPfOIx>VlB%;#ffXEc7J@fxGQV`x1V*RlFPj_)|} z<7hXI-*~@?@i>eZ`?!3Mi?5}WtW7r?7X%!7tnbS{Tuhz#; z&FE+5?=yaDV10r27i#;``dapletsw4dR#Zy|B+rBadX_}HmP&7>t?h1lf9qB{S1GL zIoV=Hf6>=p#rU z_5Z`~A9MFFpMU+{|JxDy*cJJFeKt1oX;I{}J&`Z0jr=~HB44HnbHA_aekE*mVp{K4}gU%o8!T;6kqijhB*?_m=nf4F={w2J(ZeItLA z=SpynUK9Cay#iN;bKJVfSHa8Kny-e#2{=`+9{C!bBVTiB#=*lPf%f%^vPXjshVM*hr3jPF_9BJa;lzR3OAy&``OUgzT4 zs0`zG9{ls$F|m#5(?m^8MnwJs`xgvg)|Wu`8BWd9$hWY6q5YP8Tk>fIx3$>T z{Mt;8{6%Um#^qwVU&8m2(#W@^Yg_y6)YfiAg*|JFFbEo%kARspxd4Hd(*BDjqjq_-T3tt-%nlr$Kg93jx#Vn zo_3GJpFq2bVkeoKCn_=hnygooVNFrf6uF-=>rcr!RqRxnOjYO8w3|kwY5b<+G~L<^ z^Y9FeXVmm8e$UbFIXcZ0H&gs9d1mS9Y;!)_%swx64t?gVkNgWXebN4lej6|0Jr}Q+ z&Faf=UQyF4;$PK=SH;Z3X+Hht!+1?!UYC0TUJK<}Xr2~Ye}e|j$NVB#i|xH>7Mzdy zx5U0J*OI+PgLiOw$Ms#@-_wJo^n9NN%Wz-jx|}Y{{pMHDWCfld(ELMsd}!?>JzYu5 zl{kOw_qs~$tN46kZ8hyyn2mfk`TcI9$7XeHmj5U7^b@W> zLDHouK+aJReP!T%5X|FIzK#kUr$+H!b@O?-jp$<;Vq!@A(pRsL()b+qhe?FPO#S}&nxiJD8)bhFr7^!gS#Znb}_ z9y>>q?)u(C{@b=h($gID!s`yccjD%~GwGu~-@3`&^t>CVzIyDNH|Zy~AMNjv?;g4O z<269-1Nq&H#~|E?h#xX1lKW^dv@)|cjBfY0i{t?{K8TO++~gtpKcr_5dw!V4-Y=6! zXfy)%k$OB*{7C&6MNemGQcCyI$&vW}O`N02X!?wXJqD*SdNqdLW91vGu5o(l3{57e zdm^5b*c0+kmg7l2Q^ZeE*HiYrCnir@ds=T|(P;%+0%dO^@HhX{qZnam(>op`H)q z|BwzVY4fq`Dm`-MC7;sqb91x?))(Tx#OW)1zf#{?wXem`8JB!R>u;=mYc{^uv-Rd< z1Koe5^F}cn@z|)}&az}PeD90NPiEj}*gv~^XH2%JXN&z`VEw9=U(M=oc=%pUe#h%~ zXUR7DZO7lYbF#zUA9C!3|EHXPy8n~UE;{bg=fCuGx4Qne_qX569`pL|`bcvr>lJB! zaHMJFNVC1RCelK4HZ#(F8bn&g{k{Vt-LGq;`!9|3fU>MJTNmkpVzC(=XgAF?CT3Tq=hbY7%~t&a5YVzx5UiZdcTVs4~I!afRzO7M?%Jx1PR z7e`vz-f?`YG>PzsQ+-C5a@o!!s(iXiLZ7#&2rMg-4Zf1|jYTubCB!Rcmt-s0Z7WO|F9 z+$!I#cyx!`L)>j@^gfyP;?oP)+x6=XF?Zs7C;q+d^_Hs-eZ5zvck5$cJe-GVKmPaF z?{8iP$T<*)fqHZ=%t3GlO^tMjUN{re`^?Eual`5}J-Q#a2gEoN)8YC&oX`EKh;`lw4EI%2auumg8y90gE_v$J5|WqwjRwrqh4AzRoa1GtBBU z?w=Jq({-l!S@O?f1S;XJ+RwiS#u%uhU_HdKS`X zq59r{xk%ncFc;(frde1*k9YLrUHk9RXQ|)9QaJC!S!O<#({lygSHSy#&xi0nG@BpU z`v}HLbGVWwAG@v+|B3#uW}ngF3p~FN;~P2s5|^*c(ptS-E8kkVzgF+pH2xaSH)6h_ z(YN@limu0 zR(;;4KikdRc33;`{KE|Gq~R|9-sRH2VC<&vZaV+1uX||rkKgS-e&7G<&wq6IZ$@O% zgw2U8SB9;OEI%T$q*G+h$1GhNSvEGZLL;_5vVEpTR;DwX8<{gQ+pjs>71{pQ%l3`z zfMVwU!1|FLRE`actX!+e4wj=l-|{dHfnT8#TM^lzgW1-|4zqSR--;!X9nmYYBP%e^ zN5OMWW=B_N){kBn*|D%IPmb(3ysAuy?07iUR=qb{8d(i_Yw)S57T@4m zEjYE-L{?jUCzWOL)@i`zMRu~fPR6h9@W@Vaf2zFoaHwzpG<;51$LTQ7=*~7p) zZ!>x{x8Gb{E#z+DdZDZL#;heCE%9n8e=GI3rekZI+Q4a}zKh^ohBj;?}M%!?ivB?e(?;eJ-Uu#oc;MaprJ!p5E8g6s# zX|1RDUU=Lt_71h)p?7!UaHm>(+jq8R&ep7toPFqVS1>qtgRe7UHjYb zZ?C_(7=YhE&jZcIK)t%x+8~+?7B@s~L)3Pkz7NHJDBXt1c|X4gTpzSI+}u0__Yu5& zzh{r&;Tt|1L7$O&ITH6#>KjGlQEGe?)}!XBltz!?I)?9<9g&TNKTf{!a(nO09=GP) z%_f@RN!Fgg=Lu_1>dlklrr`3_g2x3q1@v54 zmBC&_zeRApcV^x@v&Gil)RQ;ye9K&W@648X_6?rBM>pqgwoI+d@%tc+>_fBq5#3kf z@v$DS((6_HKEd%5b*xs~r?mW3+-LgqnOvXK!S{ByM$f-c+n4rzYiD2a{~G4kIDD%w zKj68Z9_y`daNU5zkNmucW zS+@7OBMN1^N8x~AGuWmm9N36$iNZm1qEOC#xdl-;xIXh-zFQP3^oqivo)4=Kg~R2k zSeH$R!VyJLII>9;j;b7mO4g4q6NO{;+Sn)@E2eU}C>$s5I614#jl%I_s;-DaHJq!- z;T^SbB2LwDuEDQ{=bFWAR}^Y>X0El{G4-4@H41gAvo%rhzFMej{S@n`!mQ`H9^d*S z{txr%@gx8Mc${NkWMJTsWsGOgWdH#tAm#!>28RD&J_7(5r2)wRc$|fiJx;?w6okk5 zL)a1^AyG!#fRIp}A5o>DOFD`a>1}82II_LgdJ`!PC*UNUfD>>8PQn40EL*uC`{eca zX5Q>tGJqR=!NX~JxVHOgb#TG%kGrHh$361B<30jBJ04JfaqQy>uZ{!U;>Z)c-X)bG z-W_*vg%8JF>Yt8#s zuBC2rRf%ahX*o+-NgWxv5%Ezphiqm{DpIXVu~3zfMWIBk)lMcR+!|BQ$K%xLVWLXJ zP%MLnk4A(VBjiY^Rn%6H$goF2N1vJf-(B-0&3A5lfhj^v&SaL%R5lmUm)I~D^Zy8X z2Y%O#szJ&=<%~i}TG;Gqx?m|Pwe@yX66ztgHdSMeF)MA&hxYdJ7r@qakN^Mxc${@z z1$5&^0`2hFjv=&AW=`8pw%lHs8LmvStt4)2%eCylmYJEE`O3`9%*@QpbVHIxcDnDy z`u`7VG)y}ioK62jvrYPs&jlbr00ROjV1R=JNP-mT0BMi`S&##rpbK<^9?%P>fT>^_ zm=0zKbAUO)Twrc6511Fs2j&M0fCa%qU}3NbSQIP<76(g!B|#rp3M>tl0W&~97yvWD zvS2x|JXis&2v!0sgH^z);6GqBusT=+tO?cvYlC&bx?nx9KG*hvLb_XM%3@V@s zJWvCBfI9F&12n-X7z5*A0?Yz?g1x}rU>~qA*bnRv4gd#&gTTSy5O63s3>*%Q07rtO zz|r6sa4a|u91l(aCxVl}$>0=lDmV?C4$c5)g0sNc;2dx+I1ii;E&vyTi@?R;5^yQF z3|tPb09S(lfvdpP;2Ll(xDH$oZU8reo50QB7H})L4crdy0C$4Bz}?^;a4)zI+z%cA z4}yol!{8C{D0mD!4xRu{f~UaK;2H2Ncn&-dUH~tGm%z*574Rx}4ZIHC0B?e~z}w&* z@Gf`{ybnGAAA*m-$KVt2DfkS04!!_ig0H~W;2ZEQ_zrvzegHp$pTN)H7w{|i4g3!N z0DpqNz~A5>I2!~ILIg1+kU|DIOu!^e!48;)8JLAR*a^E}H|&AEa0;9Xr@`rPb~p!| z6V3(ahV#IA;e2p@xBy%bE(8~bi@-(UVsLS|1Y8pK!KL8Ra2YrQ_QL@<6D|vvgUiDe z;EHf1xH4P?t_uGHSA(m=HQ<_XEx0yZ2d)d(gX_Z$;D&G`xG~%WZVESpo5L;OmT)V$ zHT*B!25t+tgWJO$;Er%7xHH@Z?h1E<4$Q*>EJ7C!!XY>eOK^8M0?V)htI&frxCg95 zA2whUj>0iG4kzF&xF_5T?hW^W`@;R;{_p^JAUp^j3=e^a!o%R<@CbM$JPIBSkAcU+ z6^Y8`uB76zH3}1n-!q?#I@D2DTd<(t}-+}MK_u%{R z1Nb5Q2!0GdfuF+9;OFoQ_$B-beht5Y-@@e41a;Y!r$QU@DKPW{0sgK z|3R}MfFME$BZ4Smh@%8bq7>>tX_P@(ltZ1U3w5I&)QhH|sc0ISj%G)5pgGZ8Xl^tQ znitK7=0^*l1<^uiVYCQZ6fK4pM@yh3Q6E|gEsd5zGf+PoKr_*@XgRbzS^=$yRzfSI zRnV&FKWH_yI$8s*iPl1Eqjk`_Xg#z(+5l~cHbNVtP0*%jGqgF{0&R)5LR+K%qHWN& zXgjn$+5zo|c0xO&UC^#*H{_r^Dxe~A(I6T^!>ELIM6mSEB!+tI*Zx z8gwnX4qcCKKsTbB(9P%;bSt_I-Hz@+ccQz{-RK^4FS-xij~+k|qKDAK=n?cNdJH{| zo^eg%e{f_=Xf1Da8wMC+ zgfS+VVum?R;3Q7r4xGjroW(iZiMwz&?!moy3Z9Cm;pupGJO`c=&xPm4^Wb^$e0YAm z0A3I;gcrt(;6?FbcyYW0UK01=rSQ^t89W2`;{iMqFN>GM%i|UBig+cwGF}C*ivNRG z!>i*p@S1onyf$73uZ!2i>*EdZhIk{qG2R4kiZ{cX<1O%(cq_a${x9AJZ;Q9X+v6SZ zj(8`$Gu{R7ig&{f&f@|uViynMAv}yrcy~O4%eaE8*uyov2d-luH*gb=;xRmqC-5x1 zC*BM1jrYO(;{EXc_yBw$J_sL-55b4x!|>tw2z(?y3LlM+!N=m`@bUNrd?G#xpNvnz zr{dG_>G%wMCO!+FjnBd7;`8wN_yT+(z6f88FTt1M%kbs+3VbF0AHE7-jjzGi;_LAB z_y&9XVq(pWnBcx0!q)I$eBYTiK@kxU;$tW2k<79%&B72g($lhch zvM>`x9L2aEfC^?KAPL3c)lB3AcB6mlv#jhs%- zAZL=Z$l2r^axOWKoKG$w7m|y}#pDulDY=YXPOczVlK+vb$kpT;axJ-zTu*KwH@-6v}d{2HLKa!uw&*T^KEBTH5PW~W&lE28`2!8F2c477MdzmT(0S>6bbh)3U63wB7p9BQMd@O6 zak>OulJ?Q1=+bl|GB0Y(oOi!Vw($nba^bC3?J&T@A z&!Oki^XU2X0(v36h+a%Dp_kIj=;ibZdL{iIy^3B*)3L26`jCiQY_ap|{f8 z=tJb?VOf@A zove#>vmVyVrm(4O8k^2$XLGPQ*<5UHHV>PZ&Bx|v3$O**LTq8S2wRjb#ujHwuq9a^ zTZ%2smSHnkKO0~(*|Kaowme&bt;kklE3;MDs_Z{(HMTligRRNdVr#Q?*t%>zwm#c{ zZOAra8?#N=rff5|IopD5$+lu!v;VSf*tTptwmsW{?Z|dwJF{Kbu535vuskcUB6Haw z8)Cz(#CB&RtjsE`$~;zMd$2n5S%Wp%C>vwrY=X^Vd$PUQ-fSPXFWZmp&kkS*vV+*c z>=1S+JB%I9j$lW!qu9~x7jvdcVU?;MZ*vae^b}BoKozBi+XR@={+3Xy4E<2B% z&n{pWvWwWo>=Je=t$_yN%t>?qGMa zyV%|A9(FIgkKNB6U=Ol~*u(4*_9%OdJ=pJZ zdyT!$-e7OCx7ge49riAJkG;=6U>~xN*vIS>_9^>}ea^mMU$U>**X$eiE&Gmr&wgM( zvY*(`>=*Vc`;Gn1{$PKyzu4dGA3hrg9CE}lC!BJ|IZyB;Pw@_(<{6&lIo`>;csK9i zy?hFv%BS(^e0DwupOeqU=jQY9dHH;Ne!c)-kT1j+=8Nz}`C@!=z64*A_wl9p(tH^{ zgZJ|RK9euYm*dOx75IvLCB8CWg|Ev0!&l?0^ELRId@a5H+4fuw9Bfc@; zgm20>_?CPtzBT_Z--d6?x8vLM9r%uXC%!Y^h40FD;||aB0xxox5Aq>C%u9TC zKElhq!mHflHNFS0bDuYOlaKN-KF%ljEWRh-i|@_%;rsIa`2PF=ejq=HAIuNohw{Vt z;rs}GBtMED&5z;7^5gjN`~-d?KZ&2rPvNKX)A;H941Oj*i=WNU;pg)6`1$+-ej&ez zU(7Gzm-5T_<@^eMCI274ieJsI;n(u(`1Sk-ej~q$-^_2}xANQg?fedYC%=o|&F|s& z^85Jx`~m(Te~3TKAK{Pk$N1y?3H~I1ia*Vt;m`8t`1AY){vv;gzsz6ZukzRU>--J= zCVz{+&EMhg^7r`r`~&_W|A>FgKjEM9&-my33;relihs?&;otJ_`1kw={v-d1|IB~k zzw+Ps@B9z`C;yB8&HqWvmH-KuKna{637TLDo=7B;iBzH^kxpb1*+eeUndnM%CwdaS zi7APxiD`-HiP;l#B<4)am6&@rG^2kYy-Z)BR4zQIzt%mXH5e~+e94`t2LGh(&_ zCS==oz|#FO+W`}@Z98D;ftc-p3E8$Cu=LEB?SKi{wjHqavN78M6S8ePVCm&zwgV<) z+jhXx%g1a7OvtwFfTdT6*$$YHZQB7$uNbo(Fd^Hv1IC>~qcmD-O!PXXdadkK-9EQE zRI0kZvX^UB)1jce30Tr8JN1gvh=StR9d|mMa%rgAm-iYCuVP5Stv1|xLKC-IG;*a> zESBArCVs=IH;k2rSEB;eoQW={TpM=sZlkYRtGV@p*ors>M>lX?S%cSW5hfX3+J!K*gvqJHm=sqT19REpD#R`AMYr{=qTqi($+szl>= zWH7~W?JTsGj>(;d4K~YVzfgDGYRV`TZ`2LE4BS%9I~~8~7DRz?8YNG?SBI@|#}^e_ z$sd7EBk7De^`dEBB*b~AFp`!(HSwq0qJU)r(697FNJE2xxWPbZFf(p2QyKUIno2IB zbyvKNZwhIfoCp;W$KsINH&6`XsF{&xj@a_d5hJep^B}+;$uCtATNc?u>opRaps=Dq9NaSleCNaZ=pW21+ zqAI+o7M+q#GG>U#lGPC+e`H3hi#G}@x`>ubrstH2YuSj3Twn7OAy4HUf5g=uQH?wF zqdy2<5hD)R;y^C%G(;hqP+p1tn|ygK$dVe8VW&Kp3P{--V+N=4t~27+P1p*vygTev z3nGWR<+84f6!Oc#XG=yLODG)9Dk+EZ(a-Xw!i1?i#*mC~CULAJMuiaUv8%sP&@A4vvbRg1ToPFx|E9FsxLqy7iPH z@)HKubXPyH<~1!hy5DPv-4x^SXu9Q%i&G+6szy$yw#&+OXPX{ZRF5pCC}%w}$#gn;TSa9x+oD?WRilT9wnoT! z+Z9uSq>dyWWR0{0zUu^)zhOuKksHSQO}UpS%Jj*IV+o1)aYZo}JrFUN3>tH)xp)OR^?R=j)zR6p?Q9)k@Vw$b<{g$&sZ(bZ{#oyBq3?Mlc(Y!BX8Flx5Ix-x+l3 zCEpkclkX6Eb(aP!_{y z(eD!ZHV~!v(#P(&VyelQCjD-eL;%y{k`+pe;INyns4i%saB zxvfM&h~BPw(@b28{8NQCWL6s)*CH#GQq?q)nYdeX&KfbK~vOlHQBo~ zM7%`Zt`I{i4T`!PluLf2Ls60QWPO@cq*QT+WKAfbw4ssg-HU{(i^fp(z0|PW;`ZEG zo1Bak%9{p&4?ka{B(^VssYtVCz3=~k2K=l3aZZ-dXb51 z7S*32q;@447cEPAWZGg$iB{M$_qK+u#;YOKjw8>K5!Zp~OccIEwnenLF76SJ-Xqtl z+Sa1LbFHc!h45XnEn+g_+FSEI!#L+!)tI15qa{Sq?rf7|7NdxFw#l)Wgi+76swqp* z-zc=32q~5*q05}30+Yzf&KL2>Of?hV!yOg1 zsahinrh9X?DC@c|ThJ4>F*|DM$`J)pa;cX0!q&}{k+|3$ana3lOq~$ZEUN3HklOW8T(m6Nowm4Wg>Ci6 zVw&Zo))WJqT*QNZRU{-r+#4dh+nZ}udn_S*`)rG7b6t@|+^)!4RNGpV1i4n#jzX9S z*%s0EOC>{_UrOz?gmF`@EhQO|WFhP|r8OKD9UHGcK@=0=dCj6dFJ;1utKGI>It`h) zX52*IAY}>0z4WT=nKgw>T!!^qW=t zBMRE7QL`3il@41Wis(Rm(_2(nOB0qP-oY!nW}-zyReNHIvFt!*<(i{gkh4SP8%4ZU zHpAa+i zhum$}z0Qb@i++z9mj+5rPP0d}-mJN9M@T1J@kN?--^@`3SoWZ(#$9S~V%k#C5p1}{ zoGmG5mcSG)4{3K%2QqYL^{rBtfFwISvgb(SCTfl}E~z=vxTNcWxF*JlabY|i;}KJHq#;vtq#@Hq zH>Ay4GQ{INfZ3uuS}MquWu1wW5f6-fKW-#=rdV=@>Q1H4tl5V&G#H2*40H%o@v5dy z3W)5SF+);C>G=#@1!=6MeoN}t(tsrmXlbS;&D7Gemb9#vmb0YgMC^RM){P}%^2e(e zMeO{r{$hsY%(Ld1u1v}jdIc7>Qobq1GsB)}az*vvl)Ei8*h`TsdZJ8;3f6Z`rC|vf zg}s_xM52@ZTYREmO8uJep|O?*ENOtdL#A(`K)vJ^kw8gzcezdeV1g!r`q4l-jdm_PqQVv`RksDpo~x0Uoa6; zBv4ZP$>vDp2MJA8!3RZ6D)+yjL8sa~C>QAmy}H^=m~WWzb*nlpCRm@OdlG}rn5J4t zTVaE)BeMoK&;Fi4S^u?EFWDBc%i^Y5Nynsa#pJ}C=nU0NhK_4FO-ofLXbdeu2bizB zj;RA9u8ph(g^24A)X+_(e@L}Kv1AsL5+R*aAyH)2UZs||p879_vrnR%ROp@5XpWc~ zPn9W?n@x+$Q7Uy$Vi1pLlxkh=dfaN1ie2q`JZ534cDBiJi(x8vw#o6pqrO&GyWV1T zyfC>{smH@C@G&w^)@2M<%l>^>~)870r5Us~XRcq7w6i`gszAcw&V^i_SK=)uMT$R*Ox) z#iHj=_DQAO@;bG~WUo_e#LIBKR2UA|QFhQ}N*l}- z*F^W+DT;o+8O==lH`91}gmLd|lj9c0Jktntw#o6xjayZAsKrxeR;e~g+6uM97P5u} zWjz^jV-%L{WW;q19YrB5!-X49XM_m`*XP45chVM?NewiI4^c!CH7ojX_W*5+OCgn=-%yrn77;&!=OO zexoRlCnK(-ZsqBeCFuOonul|(s*Z28ZW&T-5a!WDNOd4)wO?Z$;~)?6fME%gL$#%n zD5Sn*V?vH+oI)xhrN|&(sYM0_%SFMDkAvbs}fG*M_1P?e1IFL?*GU`Bu0i?nFc?Gp$#u6fJ|I<)q?SuT-fG*koozyvATe zL>9KlaLppsA&b-+X`5J~*8E}=x0)5{x-%9T)bo*hUv!r(CO%7K&mWFF@b@TNWOOKU z(-1w7$f#kbTf=_4#&{zlW6o&g!CI%lw6nl{85>7-*4)l7I$9dhLaL$!hB&fUad*_=$l5+%itZ%zdmSoY*xcu>{G zG@@uq&|1x`lW5$bALe+6A@Vuq)@PV!z(s!Y%4+Mq>{6x-(bcQQstyed)L__PUnE>G z2a<_v+|Y5Vf$^(fjo+CeM79!sQVeuP`bMgyK~W^FQ4lkPsPS*_U{f?gwPvLzI;w8a zR^?jNOeE+EDxlfuV3{cVrAE>^Xg1iaR*i>LT;H#DR&N0}}~jSflP#eL+06&s@E~A$-W}yA$Df z2~k&RV=NIGDmAG18*b+1qwM6nhss`F)SMMpv=xq7nvZMK4fRV-pVO49I^~jHLGPK& zWG*erlNoXr&-a>*VQob^nf7m{#y~Cr$(npn25nNb-GC^Ks^9+9kmn7VCY5T;hiXl= zh?UdhGBpBJgSTWPWHb~5J!QfJnjWf`ihVQ8p#vVUP6Y;pJY){8bl3_HNMLWE&E9}* zZy=$7{xkw*#ZS$edQU4J9)66iQ1O7JV+&9`V0752h>w>Ymggr+BERT{w%6h!3smyD zOth-WNYE~n>RbB*TGeh_2=)iWwGK&xQ+3P`JS@-J1?x6B394>m%rm3DlqIAku7@Wt z1D26MZ2;8eH>5})!73%4!V)FrUeDUFS9N^_ebJp6tuq5tdInHu5^G1FhH~v8r(v`& zBV`Fh;jH?#W;r5G74*}?ZY`P$iU*kJ7BvGmsyrF8T;Za$NXk=`qKcHArL?A|>y%Q=3oYrc zl13bB3?|C1GiVY}piEixGW+BTt6LXdW>hVkZ#ySwcc#`4&u}W=$x*@5+H6uDA_{SIj(AT7pV5INlI2BtTaD)ji)+yZfDrp9r}y z5u*@w>fdvUZjlE(SrOHrxj;!lUh%|-Zi+!>xWh23kjfXjF^o8tFelPRkf=gRS%NT> z3s5n`P!K)^Ej3XvrGCxE42`ukU`Yd=dRDF~x83K(i@L?ErO1q$jJUB}Gj*KoOW8`I z>W=wpIX7FC&5@`d`uwp{qcEJU%C!+|ZZP5*1*18;kP0_)XF%O8Hr3WZUTx|uj|8CA z(NeMGB&wqobI4Mn4trHJB&wTd2$jQMr<9S8VAtWO+vU~Npg@edisl}ZbWEa>N!QIr z*=?j_SKIJ_rDMl^c)&Vpj!29?edJe=a(JGG8N$u8KcNy&ZZ;OE?x^uoBHZ$bB}&Vm zaKjM~Sgz)XWVXAHmM}%*w%%TwY<#gc%UVKK<7h{0#Je@zqbcgZ!1qjC6I5o;V8u2O z(oT)+qZhW4)I?=#1!>Kh5b4!hEA$0>vZ66wGE&n5Mh37}$khrZy)n~_fHI-r%T16x zpvjsWZ08{g@?gsZ5+EgWj@k2^HrNajHIt$>APJcokOWNlBDY=XlBhA0pI#V?;Ol~p zi%w+HOn}SXjsdJ!fe666H_kv-tjNTQUKJ0#jHFJ=If>yjAtC zJ&JG0wx!4;Gdz{JL$0BPTLJ=NUBncVm|;o{Gi7(ktlevIjR%y}l%#cj2?#a!iW{M;c(p0S(9*&_JckEHu8#zRNt1?4+!j{dx(ym494Y|Fq zE7z)~LZLhqIk7t~xmGm_-aby;BJzNfJ(^zKA?nCvI<}U=1D1|0l<I!ODe+tK z)SaR(lc!bk-dLvY7F?0UqJ!TM!!TxON_bp@L85Zuh@PLJ9W(D@FJzU9%cNu6e z1I472Vd}eS+@T+4#l;Z$lowSAJH=wDLF(?1JI?iGi+wYw2IAdnk^fXbz4G4}MGLDN5$C@Fu;B_s+8^U=_JRGN=Q<^poRQ1X4R?lZsOd2;mqN|JN#mF(1jV&>AUi-RjVv_*b3Do?Yl!2dDE2Wj5(t{VrMWdCF>d>t#)FPfz&@9bsjOBysIS}R#JK_cX zqK!&bN<<5UBY6u~MRQBe5o)y#|&mRKa3I-}6#%ln0ku2bv_K2bU* zP0`Gg}*W%H&0=ZUIzfRRNcN)kWXQQOD<(@zhgVd2=YAxF$P7S!ZRUq)Lt6kTU zXlly!;Dlm2CS`nmqqLcM?Tx5jrLo?}QWK$|(=xnO*OcU#))UbviLx!?>=E}>7?F3q zlN!y@rbeDmncPf=IT04WWW=e2j*gYu%hVs)&^#T&FbgTBCW52ajx-)n0V;uoioHWS zq(~qURMqJlb4z(|ia#Ryy1}$}*d}(i$VhlCE`Ph5wiZe_Kb_Ia81fX#-4rIg{=@pnA+D?_dCtAKU`twfs*tqA_ik}I*9vK zrzWr7!1Ba0kw5+Fcc9ysb6V;uc(b{nEQ&&0>$JGsWKeFTV~S>h>qN+U6{;labed}D_8c&E4VR5E*_b?P4p_gC(>JPBqE9?!rMnRQn#i`MARI!_;sC1TCJUx z%;W_RSV{r2k4fXSs!qcpY`}5~*dt6!NQCt?mMANKtZF(L@r;BjUj#8Wl**kiqYl-_ zx)XjguSa-XBKevbzbOw@mz#OxGN7Fb#m<%5N>&kTGeX3*kzaF6h|Uos#FWSVRo1x0TSZROhrqSZ8+m4>!?&R;=JLOUAZis zkszAynPO3^M(k{pEsJsh+N`!&G;&X*Sl6Yrh*KjjhDwolUF~{zBtsB95NyjF@WNLZ&t( z1=XKOC`FoO6bcs>l8Rb(#)O)cNK`KJ?m53S%T0z{ep3x|a?Pot>n**HCng9Fv$i1W zrkDj;-N!75yq&Umhg?c_%vBW3kZ!%ctnQx*@^&)PL;y{>i!bk)y?ZH3=#f>Kyfe;i zi2kJ6u$^rYQ->8^Ix32DL39a=`YLrkL zA73|HOq?{YiYoe283^}nP8AesG^ng(y>#95mQSf;W@)b z-Kz~x1ind}X{i7HMV1bcP!-{@DaWKDvU#_dGt5qgP#_AkhRAD9rGy&Ian=}BwqRqF zHq;_zLOx`M6lNMF^u~9uTx5DP`V8~zH_rj{oN1oRn&)yU^^{x1N`)@H(OSHh$SeAP z%E%~5W8X1-Z%G&9YT9@qQw$apakQfZ)O=^_J7)6Gg=rm)`V$pgll zRb3?z0lcdGZA?rRzj8B!T;nVhXZPc`n)4>Q|l2yfO3YT6VDK=tJ^ z$)=z0(~Ipy!HoP>^GCW}3@MjL)wU9-)%M7SqG^q)CG&EIDLI@Q=K)h8i}p}_JtSaa zR9?N=kefb2)Sn#Hv%)pEniws)V`{y-Lm}18aEpAjB)3;ITryg!xL$I!RGl!lA1Ek( z>rJ1k-~Pm?S1P!2n?-I^ZVj>a-lZ%dFbp>yq%0w8a4`LsjCjUCGy9bYDIBe*#+-7{ z!c&cze)JR7rINp*`#I+33+7I6suLUF@mTP=M)W;K|_G5DUR5S0gS)NxB%{f<3q0Khi{{e;Ob1VP= DSDONf literal 0 HcmV?d00001 diff --git a/docs/docs/site_libs/bootstrap/bootstrap.min.js b/docs/docs/site_libs/bootstrap/bootstrap.min.js new file mode 100644 index 0000000..e8f21f7 --- /dev/null +++ b/docs/docs/site_libs/bootstrap/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v5.3.1 (https://getbootstrap.com/) + * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t=new Map,e={set(e,i,n){t.has(e)||t.set(e,new Map);const s=t.get(e);s.has(i)||0===s.size?s.set(i,n):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(s.keys())[0]}.`)},get:(e,i)=>t.has(e)&&t.get(e).get(i)||null,remove(e,i){if(!t.has(e))return;const n=t.get(e);n.delete(i),0===n.size&&t.delete(e)}},i="transitionend",n=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),s=t=>{t.dispatchEvent(new Event(i))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(n(t)):null,a=t=>{if(!o(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},l=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),c=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?c(t.parentNode):null},h=()=>{},d=t=>{t.offsetHeight},u=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,f=[],p=()=>"rtl"===document.documentElement.dir,m=t=>{var e;e=()=>{const e=u();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of f)t()})),f.push(e)):e()},g=(t,e=[],i=t)=>"function"==typeof t?t(...e):i,_=(t,e,n=!0)=>{if(!n)return void g(t);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let r=!1;const a=({target:n})=>{n===e&&(r=!0,e.removeEventListener(i,a),g(t))};e.addEventListener(i,a),setTimeout((()=>{r||s(e)}),o)},b=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},v=/[^.]*(?=\..*)\.|.*/,y=/\..*/,w=/::\d+$/,A={};let E=1;const T={mouseenter:"mouseover",mouseleave:"mouseout"},C=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function O(t,e){return e&&`${e}::${E++}`||t.uidEvent||E++}function x(t){const e=O(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function k(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function L(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=I(t);return C.has(o)||(o=t),[n,s,o]}function S(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=L(e,i,n);if(e in T){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=x(t),c=l[a]||(l[a]={}),h=k(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=O(r,e.replace(v,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return P(s,{delegateTarget:r}),n.oneOff&&N.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return P(n,{delegateTarget:t}),i.oneOff&&N.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function D(t,e,i,n,s){const o=k(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function $(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&D(t,e,i,r.callable,r.delegationSelector)}function I(t){return t=t.replace(y,""),T[t]||t}const N={on(t,e,i,n){S(t,e,i,n,!1)},one(t,e,i,n){S(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=L(e,i,n),a=r!==e,l=x(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))$(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(w,"");a&&!e.includes(s)||D(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;D(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=u();let s=null,o=!0,r=!0,a=!1;e!==I(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=P(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function P(t,e={}){for(const[i,n]of Object.entries(e))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}function M(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function j(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const F={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${j(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${j(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=M(t.dataset[n])}return e},getDataAttribute:(t,e)=>M(t.getAttribute(`data-bs-${j(e)}`))};class H{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=o(e)?F.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...o(e)?F.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[n,s]of Object.entries(e)){const e=t[n],r=o(e)?"element":null==(i=e)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${r}" but expected type "${s}".`)}var i}}class W extends H{constructor(t,i){super(),(t=r(t))&&(this._element=t,this._config=this._getConfig(i),e.set(this._element,this.constructor.DATA_KEY,this))}dispose(){e.remove(this._element,this.constructor.DATA_KEY),N.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){_(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return e.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.1"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const B=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return n(e)},z={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!l(t)&&a(t)))},getSelectorFromElement(t){const e=B(t);return e&&z.findOne(e)?e:null},getElementFromSelector(t){const e=B(t);return e?z.findOne(e):null},getMultipleElementsFromSelector(t){const e=B(t);return e?z.find(e):[]}},R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;N.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),l(this))return;const s=z.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},q=".bs.alert",V=`close${q}`,K=`closed${q}`;class Q extends W{static get NAME(){return"alert"}close(){if(N.trigger(this._element,V).defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),N.trigger(this._element,K),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Q.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(Q,"close"),m(Q);const X='[data-bs-toggle="button"]';class Y extends W{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=Y.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}N.on(document,"click.bs.button.data-api",X,(t=>{t.preventDefault();const e=t.target.closest(X);Y.getOrCreateInstance(e).toggle()})),m(Y);const U=".bs.swipe",G=`touchstart${U}`,J=`touchmove${U}`,Z=`touchend${U}`,tt=`pointerdown${U}`,et=`pointerup${U}`,it={endCallback:null,leftCallback:null,rightCallback:null},nt={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class st extends H{constructor(t,e){super(),this._element=t,t&&st.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return it}static get DefaultType(){return nt}static get NAME(){return"swipe"}dispose(){N.off(this._element,U)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),g(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&g(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(N.on(this._element,tt,(t=>this._start(t))),N.on(this._element,et,(t=>this._end(t))),this._element.classList.add("pointer-event")):(N.on(this._element,G,(t=>this._start(t))),N.on(this._element,J,(t=>this._move(t))),N.on(this._element,Z,(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const ot=".bs.carousel",rt=".data-api",at="next",lt="prev",ct="left",ht="right",dt=`slide${ot}`,ut=`slid${ot}`,ft=`keydown${ot}`,pt=`mouseenter${ot}`,mt=`mouseleave${ot}`,gt=`dragstart${ot}`,_t=`load${ot}${rt}`,bt=`click${ot}${rt}`,vt="carousel",yt="active",wt=".active",At=".carousel-item",Et=wt+At,Tt={ArrowLeft:ht,ArrowRight:ct},Ct={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},Ot={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class xt extends W{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=z.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===vt&&this.cycle()}static get Default(){return Ct}static get DefaultType(){return Ot}static get NAME(){return"carousel"}next(){this._slide(at)}nextWhenVisible(){!document.hidden&&a(this._element)&&this.next()}prev(){this._slide(lt)}pause(){this._isSliding&&s(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?N.one(this._element,ut,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void N.one(this._element,ut,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?at:lt;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&N.on(this._element,ft,(t=>this._keydown(t))),"hover"===this._config.pause&&(N.on(this._element,pt,(()=>this.pause())),N.on(this._element,mt,(()=>this._maybeEnableCycle()))),this._config.touch&&st.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of z.find(".carousel-item img",this._element))N.on(t,gt,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(ct)),rightCallback:()=>this._slide(this._directionToOrder(ht)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new st(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=Tt[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=z.findOne(wt,this._indicatorsElement);e.classList.remove(yt),e.removeAttribute("aria-current");const i=z.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(yt),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===at,s=e||b(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>N.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(dt).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),d(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(yt),i.classList.remove(yt,c,l),this._isSliding=!1,r(ut)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return z.findOne(Et,this._element)}_getItems(){return z.find(At,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return p()?t===ct?lt:at:t===ct?at:lt}_orderToDirection(t){return p()?t===lt?ct:ht:t===lt?ht:ct}static jQueryInterface(t){return this.each((function(){const e=xt.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}N.on(document,bt,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=z.getElementFromSelector(this);if(!e||!e.classList.contains(vt))return;t.preventDefault();const i=xt.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===F.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),N.on(window,_t,(()=>{const t=z.find('[data-bs-ride="carousel"]');for(const e of t)xt.getOrCreateInstance(e)})),m(xt);const kt=".bs.collapse",Lt=`show${kt}`,St=`shown${kt}`,Dt=`hide${kt}`,$t=`hidden${kt}`,It=`click${kt}.data-api`,Nt="show",Pt="collapse",Mt="collapsing",jt=`:scope .${Pt} .${Pt}`,Ft='[data-bs-toggle="collapse"]',Ht={parent:null,toggle:!0},Wt={parent:"(null|element)",toggle:"boolean"};class Bt extends W{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=z.find(Ft);for(const t of i){const e=z.getSelectorFromElement(t),i=z.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Ht}static get DefaultType(){return Wt}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>Bt.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(N.trigger(this._element,Lt).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(Pt),this._element.classList.add(Mt),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Mt),this._element.classList.add(Pt,Nt),this._element.style[e]="",N.trigger(this._element,St)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(N.trigger(this._element,Dt).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,d(this._element),this._element.classList.add(Mt),this._element.classList.remove(Pt,Nt);for(const t of this._triggerArray){const e=z.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Mt),this._element.classList.add(Pt),N.trigger(this._element,$t)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(Nt)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=r(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(Ft);for(const e of t){const t=z.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=z.find(jt,this._config.parent);return z.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=Bt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}N.on(document,It,Ft,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of z.getMultipleElementsFromSelector(this))Bt.getOrCreateInstance(t,{toggle:!1}).toggle()})),m(Bt);var zt="top",Rt="bottom",qt="right",Vt="left",Kt="auto",Qt=[zt,Rt,qt,Vt],Xt="start",Yt="end",Ut="clippingParents",Gt="viewport",Jt="popper",Zt="reference",te=Qt.reduce((function(t,e){return t.concat([e+"-"+Xt,e+"-"+Yt])}),[]),ee=[].concat(Qt,[Kt]).reduce((function(t,e){return t.concat([e,e+"-"+Xt,e+"-"+Yt])}),[]),ie="beforeRead",ne="read",se="afterRead",oe="beforeMain",re="main",ae="afterMain",le="beforeWrite",ce="write",he="afterWrite",de=[ie,ne,se,oe,re,ae,le,ce,he];function ue(t){return t?(t.nodeName||"").toLowerCase():null}function fe(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function pe(t){return t instanceof fe(t).Element||t instanceof Element}function me(t){return t instanceof fe(t).HTMLElement||t instanceof HTMLElement}function ge(t){return"undefined"!=typeof ShadowRoot&&(t instanceof fe(t).ShadowRoot||t instanceof ShadowRoot)}const _e={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];me(s)&&ue(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});me(n)&&ue(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function be(t){return t.split("-")[0]}var ve=Math.max,ye=Math.min,we=Math.round;function Ae(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function Ee(){return!/^((?!chrome|android).)*safari/i.test(Ae())}function Te(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&me(t)&&(s=t.offsetWidth>0&&we(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&we(n.height)/t.offsetHeight||1);var r=(pe(t)?fe(t):window).visualViewport,a=!Ee()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function Ce(t){var e=Te(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Oe(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&ge(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function xe(t){return fe(t).getComputedStyle(t)}function ke(t){return["table","td","th"].indexOf(ue(t))>=0}function Le(t){return((pe(t)?t.ownerDocument:t.document)||window.document).documentElement}function Se(t){return"html"===ue(t)?t:t.assignedSlot||t.parentNode||(ge(t)?t.host:null)||Le(t)}function De(t){return me(t)&&"fixed"!==xe(t).position?t.offsetParent:null}function $e(t){for(var e=fe(t),i=De(t);i&&ke(i)&&"static"===xe(i).position;)i=De(i);return i&&("html"===ue(i)||"body"===ue(i)&&"static"===xe(i).position)?e:i||function(t){var e=/firefox/i.test(Ae());if(/Trident/i.test(Ae())&&me(t)&&"fixed"===xe(t).position)return null;var i=Se(t);for(ge(i)&&(i=i.host);me(i)&&["html","body"].indexOf(ue(i))<0;){var n=xe(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function Ie(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function Ne(t,e,i){return ve(t,ye(e,i))}function Pe(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function Me(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const je={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=be(i.placement),l=Ie(a),c=[Vt,qt].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return Pe("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:Me(t,Qt))}(s.padding,i),d=Ce(o),u="y"===l?zt:Vt,f="y"===l?Rt:qt,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=$e(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,A=Ne(v,w,y),E=l;i.modifiersData[n]=((e={})[E]=A,e.centerOffset=A-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Oe(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Fe(t){return t.split("-")[1]}var He={top:"auto",right:"auto",bottom:"auto",left:"auto"};function We(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=t.isFixed,u=r.x,f=void 0===u?0:u,p=r.y,m=void 0===p?0:p,g="function"==typeof h?h({x:f,y:m}):{x:f,y:m};f=g.x,m=g.y;var _=r.hasOwnProperty("x"),b=r.hasOwnProperty("y"),v=Vt,y=zt,w=window;if(c){var A=$e(i),E="clientHeight",T="clientWidth";A===fe(i)&&"static"!==xe(A=Le(i)).position&&"absolute"===a&&(E="scrollHeight",T="scrollWidth"),(s===zt||(s===Vt||s===qt)&&o===Yt)&&(y=Rt,m-=(d&&A===w&&w.visualViewport?w.visualViewport.height:A[E])-n.height,m*=l?1:-1),s!==Vt&&(s!==zt&&s!==Rt||o!==Yt)||(v=qt,f-=(d&&A===w&&w.visualViewport?w.visualViewport.width:A[T])-n.width,f*=l?1:-1)}var C,O=Object.assign({position:a},c&&He),x=!0===h?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:we(i*s)/s||0,y:we(n*s)/s||0}}({x:f,y:m},fe(i)):{x:f,y:m};return f=x.x,m=x.y,l?Object.assign({},O,((C={})[y]=b?"0":"",C[v]=_?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",C)):Object.assign({},O,((e={})[y]=b?m+"px":"",e[v]=_?f+"px":"",e.transform="",e))}const Be={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:be(e.placement),variation:Fe(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,We(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,We(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var ze={passive:!0};const Re={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=fe(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,ze)})),a&&l.addEventListener("resize",i.update,ze),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,ze)})),a&&l.removeEventListener("resize",i.update,ze)}},data:{}};var qe={left:"right",right:"left",bottom:"top",top:"bottom"};function Ve(t){return t.replace(/left|right|bottom|top/g,(function(t){return qe[t]}))}var Ke={start:"end",end:"start"};function Qe(t){return t.replace(/start|end/g,(function(t){return Ke[t]}))}function Xe(t){var e=fe(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Ye(t){return Te(Le(t)).left+Xe(t).scrollLeft}function Ue(t){var e=xe(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ge(t){return["html","body","#document"].indexOf(ue(t))>=0?t.ownerDocument.body:me(t)&&Ue(t)?t:Ge(Se(t))}function Je(t,e){var i;void 0===e&&(e=[]);var n=Ge(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=fe(n),r=s?[o].concat(o.visualViewport||[],Ue(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Je(Se(r)))}function Ze(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function ti(t,e,i){return e===Gt?Ze(function(t,e){var i=fe(t),n=Le(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=Ee();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+Ye(t),y:l}}(t,i)):pe(e)?function(t,e){var i=Te(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):Ze(function(t){var e,i=Le(t),n=Xe(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=ve(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ve(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+Ye(t),l=-n.scrollTop;return"rtl"===xe(s||i).direction&&(a+=ve(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Le(t)))}function ei(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?be(s):null,r=s?Fe(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case zt:e={x:a,y:i.y-n.height};break;case Rt:e={x:a,y:i.y+i.height};break;case qt:e={x:i.x+i.width,y:l};break;case Vt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?Ie(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case Xt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Yt:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ii(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.strategy,r=void 0===o?t.strategy:o,a=i.boundary,l=void 0===a?Ut:a,c=i.rootBoundary,h=void 0===c?Gt:c,d=i.elementContext,u=void 0===d?Jt:d,f=i.altBoundary,p=void 0!==f&&f,m=i.padding,g=void 0===m?0:m,_=Pe("number"!=typeof g?g:Me(g,Qt)),b=u===Jt?Zt:Jt,v=t.rects.popper,y=t.elements[p?b:u],w=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=Je(Se(t)),i=["absolute","fixed"].indexOf(xe(t).position)>=0&&me(t)?$e(t):t;return pe(i)?e.filter((function(t){return pe(t)&&Oe(t,i)&&"body"!==ue(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=ti(t,i,n);return e.top=ve(s.top,e.top),e.right=ye(s.right,e.right),e.bottom=ye(s.bottom,e.bottom),e.left=ve(s.left,e.left),e}),ti(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(pe(y)?y:y.contextElement||Le(t.elements.popper),l,h,r),A=Te(t.elements.reference),E=ei({reference:A,element:v,strategy:"absolute",placement:s}),T=Ze(Object.assign({},v,E)),C=u===Jt?T:A,O={top:w.top-C.top+_.top,bottom:C.bottom-w.bottom+_.bottom,left:w.left-C.left+_.left,right:C.right-w.right+_.right},x=t.modifiersData.offset;if(u===Jt&&x){var k=x[s];Object.keys(O).forEach((function(t){var e=[qt,Rt].indexOf(t)>=0?1:-1,i=[zt,Rt].indexOf(t)>=0?"y":"x";O[t]+=k[i]*e}))}return O}function ni(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?ee:l,h=Fe(n),d=h?a?te:te.filter((function(t){return Fe(t)===h})):Qt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ii(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[be(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const si={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=be(g),b=l||(_!==g&&p?function(t){if(be(t)===Kt)return[];var e=Ve(t);return[Qe(t),e,Qe(e)]}(g):[Ve(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(be(i)===Kt?ni(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,A=new Map,E=!0,T=v[0],C=0;C=0,S=L?"width":"height",D=ii(e,{placement:O,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),$=L?k?qt:Vt:k?Rt:zt;y[S]>w[S]&&($=Ve($));var I=Ve($),N=[];if(o&&N.push(D[x]<=0),a&&N.push(D[$]<=0,D[I]<=0),N.every((function(t){return t}))){T=O,E=!1;break}A.set(O,N)}if(E)for(var P=function(t){var e=v.find((function(e){var i=A.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==P(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function oi(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function ri(t){return[zt,qt,Rt,Vt].some((function(e){return t[e]>=0}))}const ai={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ii(e,{elementContext:"reference"}),a=ii(e,{altBoundary:!0}),l=oi(r,n),c=oi(a,s,o),h=ri(l),d=ri(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},li={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=ee.reduce((function(t,i){return t[i]=function(t,e,i){var n=be(t),s=[Vt,zt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[Vt,qt].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},ci={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=ei({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},hi={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ii(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=be(e.placement),b=Fe(e.placement),v=!b,y=Ie(_),w="x"===y?"y":"x",A=e.modifiersData.popperOffsets,E=e.rects.reference,T=e.rects.popper,C="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,O="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),x=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,k={x:0,y:0};if(A){if(o){var L,S="y"===y?zt:Vt,D="y"===y?Rt:qt,$="y"===y?"height":"width",I=A[y],N=I+g[S],P=I-g[D],M=f?-T[$]/2:0,j=b===Xt?E[$]:T[$],F=b===Xt?-T[$]:-E[$],H=e.elements.arrow,W=f&&H?Ce(H):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=B[S],R=B[D],q=Ne(0,E[$],W[$]),V=v?E[$]/2-M-q-z-O.mainAxis:j-q-z-O.mainAxis,K=v?-E[$]/2+M+q+R+O.mainAxis:F+q+R+O.mainAxis,Q=e.elements.arrow&&$e(e.elements.arrow),X=Q?"y"===y?Q.clientTop||0:Q.clientLeft||0:0,Y=null!=(L=null==x?void 0:x[y])?L:0,U=I+K-Y,G=Ne(f?ye(N,I+V-Y-X):N,I,f?ve(P,U):P);A[y]=G,k[y]=G-I}if(a){var J,Z="x"===y?zt:Vt,tt="x"===y?Rt:qt,et=A[w],it="y"===w?"height":"width",nt=et+g[Z],st=et-g[tt],ot=-1!==[zt,Vt].indexOf(_),rt=null!=(J=null==x?void 0:x[w])?J:0,at=ot?nt:et-E[it]-T[it]-rt+O.altAxis,lt=ot?et+E[it]+T[it]-rt-O.altAxis:st,ct=f&&ot?function(t,e,i){var n=Ne(t,e,i);return n>i?i:n}(at,et,lt):Ne(f?at:nt,et,f?lt:st);A[w]=ct,k[w]=ct-et}e.modifiersData[n]=k}},requiresIfExists:["offset"]};function di(t,e,i){void 0===i&&(i=!1);var n,s,o=me(e),r=me(e)&&function(t){var e=t.getBoundingClientRect(),i=we(e.width)/t.offsetWidth||1,n=we(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=Le(e),l=Te(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==ue(e)||Ue(a))&&(c=(n=e)!==fe(n)&&me(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:Xe(n)),me(e)?((h=Te(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=Ye(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function ui(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var fi={placement:"bottom",modifiers:[],strategy:"absolute"};function pi(){for(var t=arguments.length,e=new Array(t),i=0;iNumber.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(F.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...g(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const i=z.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>a(t)));i.length&&b(i,e,t===Ti,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=qi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=z.find(Ni);for(const i of e){const e=qi.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Ei,Ti].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Ii)?this:z.prev(this,Ii)[0]||z.next(this,Ii)[0]||z.findOne(Ii,t.delegateTarget.parentNode),o=qi.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}N.on(document,Si,Ii,qi.dataApiKeydownHandler),N.on(document,Si,Pi,qi.dataApiKeydownHandler),N.on(document,Li,qi.clearMenus),N.on(document,Di,qi.clearMenus),N.on(document,Li,Ii,(function(t){t.preventDefault(),qi.getOrCreateInstance(this).toggle()})),m(qi);const Vi="backdrop",Ki="show",Qi=`mousedown.bs.${Vi}`,Xi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Yi={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Ui extends H{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Xi}static get DefaultType(){return Yi}static get NAME(){return Vi}show(t){if(!this._config.isVisible)return void g(t);this._append();const e=this._getElement();this._config.isAnimated&&d(e),e.classList.add(Ki),this._emulateAnimation((()=>{g(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Ki),this._emulateAnimation((()=>{this.dispose(),g(t)}))):g(t)}dispose(){this._isAppended&&(N.off(this._element,Qi),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=r(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),N.on(t,Qi,(()=>{g(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){_(t,this._getElement(),this._config.isAnimated)}}const Gi=".bs.focustrap",Ji=`focusin${Gi}`,Zi=`keydown.tab${Gi}`,tn="backward",en={autofocus:!0,trapElement:null},nn={autofocus:"boolean",trapElement:"element"};class sn extends H{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return en}static get DefaultType(){return nn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),N.off(document,Gi),N.on(document,Ji,(t=>this._handleFocusin(t))),N.on(document,Zi,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,N.off(document,Gi))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=z.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===tn?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?tn:"forward")}}const on=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",rn=".sticky-top",an="padding-right",ln="margin-right";class cn{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,an,(e=>e+t)),this._setElementAttributes(on,an,(e=>e+t)),this._setElementAttributes(rn,ln,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,an),this._resetElementAttributes(on,an),this._resetElementAttributes(rn,ln)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&F.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=F.getDataAttribute(t,e);null!==i?(F.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(o(t))e(t);else for(const i of z.find(t,this._element))e(i)}}const hn=".bs.modal",dn=`hide${hn}`,un=`hidePrevented${hn}`,fn=`hidden${hn}`,pn=`show${hn}`,mn=`shown${hn}`,gn=`resize${hn}`,_n=`click.dismiss${hn}`,bn=`mousedown.dismiss${hn}`,vn=`keydown.dismiss${hn}`,yn=`click${hn}.data-api`,wn="modal-open",An="show",En="modal-static",Tn={backdrop:!0,focus:!0,keyboard:!0},Cn={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class On extends W{constructor(t,e){super(t,e),this._dialog=z.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new cn,this._addEventListeners()}static get Default(){return Tn}static get DefaultType(){return Cn}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||N.trigger(this._element,pn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(wn),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(N.trigger(this._element,dn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(An),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){N.off(window,hn),N.off(this._dialog,hn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Ui({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=z.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),d(this._element),this._element.classList.add(An),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,N.trigger(this._element,mn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){N.on(this._element,vn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),N.on(window,gn,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),N.on(this._element,bn,(t=>{N.one(this._element,_n,(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(wn),this._resetAdjustments(),this._scrollBar.reset(),N.trigger(this._element,fn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(N.trigger(this._element,un).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(En)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(En),this._queueCallback((()=>{this._element.classList.remove(En),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=p()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=p()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=On.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}N.on(document,yn,'[data-bs-toggle="modal"]',(function(t){const e=z.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),N.one(e,pn,(t=>{t.defaultPrevented||N.one(e,fn,(()=>{a(this)&&this.focus()}))}));const i=z.findOne(".modal.show");i&&On.getInstance(i).hide(),On.getOrCreateInstance(e).toggle(this)})),R(On),m(On);const xn=".bs.offcanvas",kn=".data-api",Ln=`load${xn}${kn}`,Sn="show",Dn="showing",$n="hiding",In=".offcanvas.show",Nn=`show${xn}`,Pn=`shown${xn}`,Mn=`hide${xn}`,jn=`hidePrevented${xn}`,Fn=`hidden${xn}`,Hn=`resize${xn}`,Wn=`click${xn}${kn}`,Bn=`keydown.dismiss${xn}`,zn={backdrop:!0,keyboard:!0,scroll:!1},Rn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class qn extends W{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return zn}static get DefaultType(){return Rn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||N.trigger(this._element,Nn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new cn).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Dn),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Sn),this._element.classList.remove(Dn),N.trigger(this._element,Pn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(N.trigger(this._element,Mn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add($n),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(Sn,$n),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new cn).reset(),N.trigger(this._element,Fn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Ui({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():N.trigger(this._element,jn)}:null})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_addEventListeners(){N.on(this._element,Bn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():N.trigger(this._element,jn))}))}static jQueryInterface(t){return this.each((function(){const e=qn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}N.on(document,Wn,'[data-bs-toggle="offcanvas"]',(function(t){const e=z.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this))return;N.one(e,Fn,(()=>{a(this)&&this.focus()}));const i=z.findOne(In);i&&i!==e&&qn.getInstance(i).hide(),qn.getOrCreateInstance(e).toggle(this)})),N.on(window,Ln,(()=>{for(const t of z.find(In))qn.getOrCreateInstance(t).show()})),N.on(window,Hn,(()=>{for(const t of z.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&qn.getOrCreateInstance(t).hide()})),R(qn),m(qn);const Vn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Kn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Qn=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Xn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Kn.has(i)||Boolean(Qn.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Yn={allowList:Vn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},Un={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Gn={entry:"(string|element|function|null)",selector:"(string|element)"};class Jn extends H{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Yn}static get DefaultType(){return Un}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Gn)}_setContent(t,e,i){const n=z.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?o(e)?this._putElementInTemplate(r(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Xn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return g(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Zn=new Set(["sanitize","allowList","sanitizeFn"]),ts="fade",es="show",is=".modal",ns="hide.bs.modal",ss="hover",os="focus",rs={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},as={allowList:Vn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},ls={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class cs extends W{constructor(t,e){if(void 0===vi)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return as}static get DefaultType(){return ls}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),N.off(this._element.closest(is),ns,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=N.trigger(this._element,this.constructor.eventName("show")),e=(c(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),N.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.on(t,"mouseover",h);this._queueCallback((()=>{N.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!N.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.off(t,"mouseover",h);this._activeTrigger.click=!1,this._activeTrigger[os]=!1,this._activeTrigger[ss]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),N.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(ts,es),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(ts),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Jn({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(ts)}_isShown(){return this.tip&&this.tip.classList.contains(es)}_createPopper(t){const e=g(this._config.placement,[this,t,this._element]),i=rs[e.toUpperCase()];return bi(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return g(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...g(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)N.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===ss?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===ss?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");N.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?os:ss]=!0,e._enter()})),N.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?os:ss]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},N.on(this._element.closest(is),ns,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=F.getDataAttributes(this._element);for(const t of Object.keys(e))Zn.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,i]of Object.entries(this._config))this.constructor.Default[e]!==i&&(t[e]=i);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=cs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(cs);const hs={...cs.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},ds={...cs.DefaultType,content:"(null|string|element|function)"};class us extends cs{static get Default(){return hs}static get DefaultType(){return ds}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=us.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(us);const fs=".bs.scrollspy",ps=`activate${fs}`,ms=`click${fs}`,gs=`load${fs}.data-api`,_s="active",bs="[href]",vs=".nav-link",ys=`${vs}, .nav-item > ${vs}, .list-group-item`,ws={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},As={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Es extends W{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return ws}static get DefaultType(){return As}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=r(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(N.off(this._config.target,ms),N.on(this._config.target,ms,bs,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=z.find(bs,this._config.target);for(const e of t){if(!e.hash||l(e))continue;const t=z.findOne(decodeURI(e.hash),this._element);a(t)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(_s),this._activateParents(t),N.trigger(this._element,ps,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))z.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(_s);else for(const e of z.parents(t,".nav, .list-group"))for(const t of z.prev(e,ys))t.classList.add(_s)}_clearActiveClass(t){t.classList.remove(_s);const e=z.find(`${bs}.${_s}`,t);for(const t of e)t.classList.remove(_s)}static jQueryInterface(t){return this.each((function(){const e=Es.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(window,gs,(()=>{for(const t of z.find('[data-bs-spy="scroll"]'))Es.getOrCreateInstance(t)})),m(Es);const Ts=".bs.tab",Cs=`hide${Ts}`,Os=`hidden${Ts}`,xs=`show${Ts}`,ks=`shown${Ts}`,Ls=`click${Ts}`,Ss=`keydown${Ts}`,Ds=`load${Ts}`,$s="ArrowLeft",Is="ArrowRight",Ns="ArrowUp",Ps="ArrowDown",Ms="Home",js="End",Fs="active",Hs="fade",Ws="show",Bs=":not(.dropdown-toggle)",zs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Rs=`.nav-link${Bs}, .list-group-item${Bs}, [role="tab"]${Bs}, ${zs}`,qs=`.${Fs}[data-bs-toggle="tab"], .${Fs}[data-bs-toggle="pill"], .${Fs}[data-bs-toggle="list"]`;class Vs extends W{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),N.on(this._element,Ss,(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?N.trigger(e,Cs,{relatedTarget:t}):null;N.trigger(t,xs,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(Fs),this._activate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),N.trigger(t,ks,{relatedTarget:e})):t.classList.add(Ws)}),t,t.classList.contains(Hs)))}_deactivate(t,e){t&&(t.classList.remove(Fs),t.blur(),this._deactivate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),N.trigger(t,Os,{relatedTarget:e})):t.classList.remove(Ws)}),t,t.classList.contains(Hs)))}_keydown(t){if(![$s,Is,Ns,Ps,Ms,js].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter((t=>!l(t)));let i;if([Ms,js].includes(t.key))i=e[t.key===Ms?0:e.length-1];else{const n=[Is,Ps].includes(t.key);i=b(e,t.target,n,!0)}i&&(i.focus({preventScroll:!0}),Vs.getOrCreateInstance(i).show())}_getChildren(){return z.find(Rs,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=z.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=z.findOne(t,i);s&&s.classList.toggle(n,e)};n(".dropdown-toggle",Fs),n(".dropdown-menu",Ws),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(Fs)}_getInnerElement(t){return t.matches(Rs)?t:z.findOne(Rs,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Vs.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(document,Ls,zs,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this)||Vs.getOrCreateInstance(this).show()})),N.on(window,Ds,(()=>{for(const t of z.find(qs))Vs.getOrCreateInstance(t)})),m(Vs);const Ks=".bs.toast",Qs=`mouseover${Ks}`,Xs=`mouseout${Ks}`,Ys=`focusin${Ks}`,Us=`focusout${Ks}`,Gs=`hide${Ks}`,Js=`hidden${Ks}`,Zs=`show${Ks}`,to=`shown${Ks}`,eo="hide",io="show",no="showing",so={animation:"boolean",autohide:"boolean",delay:"number"},oo={animation:!0,autohide:!0,delay:5e3};class ro extends W{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return oo}static get DefaultType(){return so}static get NAME(){return"toast"}show(){N.trigger(this._element,Zs).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(eo),d(this._element),this._element.classList.add(io,no),this._queueCallback((()=>{this._element.classList.remove(no),N.trigger(this._element,to),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(N.trigger(this._element,Gs).defaultPrevented||(this._element.classList.add(no),this._queueCallback((()=>{this._element.classList.add(eo),this._element.classList.remove(no,io),N.trigger(this._element,Js)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(io),super.dispose()}isShown(){return this._element.classList.contains(io)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){N.on(this._element,Qs,(t=>this._onInteraction(t,!0))),N.on(this._element,Xs,(t=>this._onInteraction(t,!1))),N.on(this._element,Ys,(t=>this._onInteraction(t,!0))),N.on(this._element,Us,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=ro.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(ro),m(ro),{Alert:Q,Button:Y,Carousel:xt,Collapse:Bt,Dropdown:qi,Modal:On,Offcanvas:qn,Popover:us,ScrollSpy:Es,Tab:Vs,Toast:ro,Tooltip:cs}})); +//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file diff --git a/docs/docs/site_libs/clipboard/clipboard.min.js b/docs/docs/site_libs/clipboard/clipboard.min.js new file mode 100644 index 0000000..1103f81 --- /dev/null +++ b/docs/docs/site_libs/clipboard/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return b}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),r=n.n(e);function c(t){try{return document.execCommand(t)}catch(t){return}}var a=function(t){t=r()(t);return c("cut"),t};function o(t,e){var n,o,t=(n=t,o="rtl"===document.documentElement.getAttribute("dir"),(t=document.createElement("textarea")).style.fontSize="12pt",t.style.border="0",t.style.padding="0",t.style.margin="0",t.style.position="absolute",t.style[o?"right":"left"]="-9999px",o=window.pageYOffset||document.documentElement.scrollTop,t.style.top="".concat(o,"px"),t.setAttribute("readonly",""),t.value=n,t);return e.container.appendChild(t),e=r()(t),c("copy"),t.remove(),e}var f=function(t){var e=1.anchorjs-link,.anchorjs-link:focus{opacity:1}",A.sheet.cssRules.length),A.sheet.insertRule("[data-anchorjs-icon]::after{content:attr(data-anchorjs-icon)}",A.sheet.cssRules.length),A.sheet.insertRule('@font-face{font-family:anchorjs-icons;src:url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype")}',A.sheet.cssRules.length)),h=document.querySelectorAll("[id]"),t=[].map.call(h,function(A){return A.id}),i=0;i\]./()*\\\n\t\b\v\u00A0]/g,"-").replace(/-{2,}/g,"-").substring(0,this.options.truncate).replace(/^-+|-+$/gm,"").toLowerCase()},this.hasAnchorJSLink=function(A){var e=A.firstChild&&-1<(" "+A.firstChild.className+" ").indexOf(" anchorjs-link "),A=A.lastChild&&-1<(" "+A.lastChild.className+" ").indexOf(" anchorjs-link ");return e||A||!1}}}); +// @license-end \ No newline at end of file diff --git a/docs/docs/site_libs/quarto-html/axe/axe-check.js b/docs/docs/site_libs/quarto-html/axe/axe-check.js new file mode 100644 index 0000000..8808085 --- /dev/null +++ b/docs/docs/site_libs/quarto-html/axe/axe-check.js @@ -0,0 +1,145 @@ +class QuartoAxeReporter { + constructor(axeResult, options) { + this.axeResult = axeResult; + this.options = options; + } + + report() { + throw new Error("report() is an abstract method"); + } +} + +class QuartoAxeJsonReporter extends QuartoAxeReporter { + constructor(axeResult, options) { + super(axeResult, options); + } + + report() { + console.log(JSON.stringify(this.axeResult, null, 2)); + } +} + +class QuartoAxeConsoleReporter extends QuartoAxeReporter { + constructor(axeResult, options) { + super(axeResult, options); + } + + report() { + for (const violation of this.axeResult.violations) { + console.log(violation.description); + for (const node of violation.nodes) { + for (const target of node.target) { + console.log(target); + console.log(document.querySelector(target)); + } + } + } + } +} + +class QuartoAxeDocumentReporter extends QuartoAxeReporter { + constructor(axeResult, options) { + super(axeResult, options); + } + + createViolationElement(violation) { + const violationElement = document.createElement("div"); + + const descriptionElement = document.createElement("div"); + descriptionElement.className = "quarto-axe-violation-description"; + descriptionElement.innerText = `${violation.impact.replace(/^[a-z]/, match => match.toLocaleUpperCase())}: ${violation.description}`; + violationElement.appendChild(descriptionElement); + + const helpElement = document.createElement("div"); + helpElement.className = "quarto-axe-violation-help"; + helpElement.innerText = violation.help; + violationElement.appendChild(helpElement); + + const nodesElement = document.createElement("div"); + nodesElement.className = "quarto-axe-violation-nodes"; + violationElement.appendChild(nodesElement); + const nodeElement = document.createElement("div"); + nodeElement.className = "quarto-axe-violation-selector"; + for (const node of violation.nodes) { + for (const target of node.target) { + const targetElement = document.createElement("span"); + targetElement.className = "quarto-axe-violation-target"; + targetElement.innerText = target; + nodeElement.appendChild(targetElement); + nodeElement.addEventListener("mouseenter", () => { + const element = document.querySelector(target); + if (element) { + element.scrollIntoView({ behavior: "smooth", block: "center" }); + element.classList.add("quarto-axe-hover-highlight"); + setTimeout(() => { + element.style.border = ""; + }, 2000); + } + }); + nodeElement.addEventListener("mouseleave", () => { + const element = document.querySelector(target); + if (element) { + element.classList.remove("quarto-axe-hover-highlight"); + } + }); + nodeElement.addEventListener("click", () => { + console.log(document.querySelector(target)); + }); + nodeElement.appendChild(targetElement); + } + nodesElement.appendChild(nodeElement); + } + return violationElement; + } + + report() { + const violations = this.axeResult.violations; + const reportElement = document.createElement("div"); + reportElement.className = "quarto-axe-report"; + if (violations.length === 0) { + const noViolationsElement = document.createElement("div"); + noViolationsElement.className = "quarto-axe-no-violations"; + noViolationsElement.innerText = "No axe-core violations found."; + reportElement.appendChild(noViolationsElement); + } + violations.forEach((violation) => { + reportElement.appendChild(this.createViolationElement(violation)); + }); + document.querySelector("main").appendChild(reportElement); + } +} + +const reporters = { + json: QuartoAxeJsonReporter, + console: QuartoAxeConsoleReporter, + document: QuartoAxeDocumentReporter, +}; + +class QuartoAxeChecker { + constructor(opts) { + this.options = opts; + } + async init() { + const axe = (await import("https://cdn.skypack.dev/pin/axe-core@v4.10.3-aVOFXWsJaCpVrtv89pCa/mode=imports,min/optimized/axe-core.js")).default; + const result = await axe.run({ + exclude: [ + // https://github.com/microsoft/tabster/issues/288 + // MS has claimed they won't fix this, so we need to add an exclusion to + // all tabster elements + "[data-tabster-dummy]" + ], + preload: { assets: ['cssom'], timeout: 50000 } + }); + const reporter = this.options === true ? new QuartoAxeConsoleReporter(result) : new reporters[this.options.output](result, this.options); + reporter.report(); + } +} + +export async function init() { + const opts = document.querySelector("#quarto-axe-checker-options"); + if (opts) { + const jsonOptions = JSON.parse(atob(opts.textContent)); + const checker = new QuartoAxeChecker(jsonOptions); + await checker.init(); + } +} \ No newline at end of file diff --git a/docs/docs/site_libs/quarto-html/popper.min.js b/docs/docs/site_libs/quarto-html/popper.min.js new file mode 100644 index 0000000..e3726d7 --- /dev/null +++ b/docs/docs/site_libs/quarto-html/popper.min.js @@ -0,0 +1,6 @@ +/** + * @popperjs/core v2.11.7 - MIT License + */ + +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Popper={})}(this,(function(e){"use strict";function t(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function n(e){return e instanceof t(e).Element||e instanceof Element}function r(e){return e instanceof t(e).HTMLElement||e instanceof HTMLElement}function o(e){return"undefined"!=typeof ShadowRoot&&(e instanceof t(e).ShadowRoot||e instanceof ShadowRoot)}var i=Math.max,a=Math.min,s=Math.round;function f(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function c(){return!/^((?!chrome|android).)*safari/i.test(f())}function p(e,o,i){void 0===o&&(o=!1),void 0===i&&(i=!1);var a=e.getBoundingClientRect(),f=1,p=1;o&&r(e)&&(f=e.offsetWidth>0&&s(a.width)/e.offsetWidth||1,p=e.offsetHeight>0&&s(a.height)/e.offsetHeight||1);var u=(n(e)?t(e):window).visualViewport,l=!c()&&i,d=(a.left+(l&&u?u.offsetLeft:0))/f,h=(a.top+(l&&u?u.offsetTop:0))/p,m=a.width/f,v=a.height/p;return{width:m,height:v,top:h,right:d+m,bottom:h+v,left:d,x:d,y:h}}function u(e){var n=t(e);return{scrollLeft:n.pageXOffset,scrollTop:n.pageYOffset}}function l(e){return e?(e.nodeName||"").toLowerCase():null}function d(e){return((n(e)?e.ownerDocument:e.document)||window.document).documentElement}function h(e){return p(d(e)).left+u(e).scrollLeft}function m(e){return t(e).getComputedStyle(e)}function v(e){var t=m(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function y(e,n,o){void 0===o&&(o=!1);var i,a,f=r(n),c=r(n)&&function(e){var t=e.getBoundingClientRect(),n=s(t.width)/e.offsetWidth||1,r=s(t.height)/e.offsetHeight||1;return 1!==n||1!==r}(n),m=d(n),y=p(e,c,o),g={scrollLeft:0,scrollTop:0},b={x:0,y:0};return(f||!f&&!o)&&(("body"!==l(n)||v(m))&&(g=(i=n)!==t(i)&&r(i)?{scrollLeft:(a=i).scrollLeft,scrollTop:a.scrollTop}:u(i)),r(n)?((b=p(n,!0)).x+=n.clientLeft,b.y+=n.clientTop):m&&(b.x=h(m))),{x:y.left+g.scrollLeft-b.x,y:y.top+g.scrollTop-b.y,width:y.width,height:y.height}}function g(e){var t=p(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function b(e){return"html"===l(e)?e:e.assignedSlot||e.parentNode||(o(e)?e.host:null)||d(e)}function x(e){return["html","body","#document"].indexOf(l(e))>=0?e.ownerDocument.body:r(e)&&v(e)?e:x(b(e))}function w(e,n){var r;void 0===n&&(n=[]);var o=x(e),i=o===(null==(r=e.ownerDocument)?void 0:r.body),a=t(o),s=i?[a].concat(a.visualViewport||[],v(o)?o:[]):o,f=n.concat(s);return i?f:f.concat(w(b(s)))}function O(e){return["table","td","th"].indexOf(l(e))>=0}function j(e){return r(e)&&"fixed"!==m(e).position?e.offsetParent:null}function E(e){for(var n=t(e),i=j(e);i&&O(i)&&"static"===m(i).position;)i=j(i);return i&&("html"===l(i)||"body"===l(i)&&"static"===m(i).position)?n:i||function(e){var t=/firefox/i.test(f());if(/Trident/i.test(f())&&r(e)&&"fixed"===m(e).position)return null;var n=b(e);for(o(n)&&(n=n.host);r(n)&&["html","body"].indexOf(l(n))<0;){var i=m(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||n}var D="top",A="bottom",L="right",P="left",M="auto",k=[D,A,L,P],W="start",B="end",H="viewport",T="popper",R=k.reduce((function(e,t){return e.concat([t+"-"+W,t+"-"+B])}),[]),S=[].concat(k,[M]).reduce((function(e,t){return e.concat([t,t+"-"+W,t+"-"+B])}),[]),V=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function q(e){var t=new Map,n=new Set,r=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&o(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),r}function C(e){return e.split("-")[0]}function N(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&o(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function I(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function _(e,r,o){return r===H?I(function(e,n){var r=t(e),o=d(e),i=r.visualViewport,a=o.clientWidth,s=o.clientHeight,f=0,p=0;if(i){a=i.width,s=i.height;var u=c();(u||!u&&"fixed"===n)&&(f=i.offsetLeft,p=i.offsetTop)}return{width:a,height:s,x:f+h(e),y:p}}(e,o)):n(r)?function(e,t){var n=p(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(r,o):I(function(e){var t,n=d(e),r=u(e),o=null==(t=e.ownerDocument)?void 0:t.body,a=i(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=i(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),f=-r.scrollLeft+h(e),c=-r.scrollTop;return"rtl"===m(o||n).direction&&(f+=i(n.clientWidth,o?o.clientWidth:0)-a),{width:a,height:s,x:f,y:c}}(d(e)))}function F(e,t,o,s){var f="clippingParents"===t?function(e){var t=w(b(e)),o=["absolute","fixed"].indexOf(m(e).position)>=0&&r(e)?E(e):e;return n(o)?t.filter((function(e){return n(e)&&N(e,o)&&"body"!==l(e)})):[]}(e):[].concat(t),c=[].concat(f,[o]),p=c[0],u=c.reduce((function(t,n){var r=_(e,n,s);return t.top=i(r.top,t.top),t.right=a(r.right,t.right),t.bottom=a(r.bottom,t.bottom),t.left=i(r.left,t.left),t}),_(e,p,s));return u.width=u.right-u.left,u.height=u.bottom-u.top,u.x=u.left,u.y=u.top,u}function U(e){return e.split("-")[1]}function z(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function X(e){var t,n=e.reference,r=e.element,o=e.placement,i=o?C(o):null,a=o?U(o):null,s=n.x+n.width/2-r.width/2,f=n.y+n.height/2-r.height/2;switch(i){case D:t={x:s,y:n.y-r.height};break;case A:t={x:s,y:n.y+n.height};break;case L:t={x:n.x+n.width,y:f};break;case P:t={x:n.x-r.width,y:f};break;default:t={x:n.x,y:n.y}}var c=i?z(i):null;if(null!=c){var p="y"===c?"height":"width";switch(a){case W:t[c]=t[c]-(n[p]/2-r[p]/2);break;case B:t[c]=t[c]+(n[p]/2-r[p]/2)}}return t}function Y(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function G(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function J(e,t){void 0===t&&(t={});var r=t,o=r.placement,i=void 0===o?e.placement:o,a=r.strategy,s=void 0===a?e.strategy:a,f=r.boundary,c=void 0===f?"clippingParents":f,u=r.rootBoundary,l=void 0===u?H:u,h=r.elementContext,m=void 0===h?T:h,v=r.altBoundary,y=void 0!==v&&v,g=r.padding,b=void 0===g?0:g,x=Y("number"!=typeof b?b:G(b,k)),w=m===T?"reference":T,O=e.rects.popper,j=e.elements[y?w:m],E=F(n(j)?j:j.contextElement||d(e.elements.popper),c,l,s),P=p(e.elements.reference),M=X({reference:P,element:O,strategy:"absolute",placement:i}),W=I(Object.assign({},O,M)),B=m===T?W:P,R={top:E.top-B.top+x.top,bottom:B.bottom-E.bottom+x.bottom,left:E.left-B.left+x.left,right:B.right-E.right+x.right},S=e.modifiersData.offset;if(m===T&&S){var V=S[i];Object.keys(R).forEach((function(e){var t=[L,A].indexOf(e)>=0?1:-1,n=[D,A].indexOf(e)>=0?"y":"x";R[e]+=V[n]*t}))}return R}var K={placement:"bottom",modifiers:[],strategy:"absolute"};function Q(){for(var e=arguments.length,t=new Array(e),n=0;n=0?-1:1,i="function"==typeof n?n(Object.assign({},t,{placement:e})):n,a=i[0],s=i[1];return a=a||0,s=(s||0)*o,[P,L].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}(n,t.rects,i),e}),{}),s=a[t.placement],f=s.x,c=s.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=f,t.modifiersData.popperOffsets.y+=c),t.modifiersData[r]=a}},se={left:"right",right:"left",bottom:"top",top:"bottom"};function fe(e){return e.replace(/left|right|bottom|top/g,(function(e){return se[e]}))}var ce={start:"end",end:"start"};function pe(e){return e.replace(/start|end/g,(function(e){return ce[e]}))}function ue(e,t){void 0===t&&(t={});var n=t,r=n.placement,o=n.boundary,i=n.rootBoundary,a=n.padding,s=n.flipVariations,f=n.allowedAutoPlacements,c=void 0===f?S:f,p=U(r),u=p?s?R:R.filter((function(e){return U(e)===p})):k,l=u.filter((function(e){return c.indexOf(e)>=0}));0===l.length&&(l=u);var d=l.reduce((function(t,n){return t[n]=J(e,{placement:n,boundary:o,rootBoundary:i,padding:a})[C(n)],t}),{});return Object.keys(d).sort((function(e,t){return d[e]-d[t]}))}var le={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,i=void 0===o||o,a=n.altAxis,s=void 0===a||a,f=n.fallbackPlacements,c=n.padding,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.flipVariations,h=void 0===d||d,m=n.allowedAutoPlacements,v=t.options.placement,y=C(v),g=f||(y===v||!h?[fe(v)]:function(e){if(C(e)===M)return[];var t=fe(e);return[pe(e),t,pe(t)]}(v)),b=[v].concat(g).reduce((function(e,n){return e.concat(C(n)===M?ue(t,{placement:n,boundary:p,rootBoundary:u,padding:c,flipVariations:h,allowedAutoPlacements:m}):n)}),[]),x=t.rects.reference,w=t.rects.popper,O=new Map,j=!0,E=b[0],k=0;k=0,S=R?"width":"height",V=J(t,{placement:B,boundary:p,rootBoundary:u,altBoundary:l,padding:c}),q=R?T?L:P:T?A:D;x[S]>w[S]&&(q=fe(q));var N=fe(q),I=[];if(i&&I.push(V[H]<=0),s&&I.push(V[q]<=0,V[N]<=0),I.every((function(e){return e}))){E=B,j=!1;break}O.set(B,I)}if(j)for(var _=function(e){var t=b.find((function(t){var n=O.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return E=t,"break"},F=h?3:1;F>0;F--){if("break"===_(F))break}t.placement!==E&&(t.modifiersData[r]._skip=!0,t.placement=E,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function de(e,t,n){return i(e,a(t,n))}var he={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,s=void 0===o||o,f=n.altAxis,c=void 0!==f&&f,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.padding,h=n.tether,m=void 0===h||h,v=n.tetherOffset,y=void 0===v?0:v,b=J(t,{boundary:p,rootBoundary:u,padding:d,altBoundary:l}),x=C(t.placement),w=U(t.placement),O=!w,j=z(x),M="x"===j?"y":"x",k=t.modifiersData.popperOffsets,B=t.rects.reference,H=t.rects.popper,T="function"==typeof y?y(Object.assign({},t.rects,{placement:t.placement})):y,R="number"==typeof T?{mainAxis:T,altAxis:T}:Object.assign({mainAxis:0,altAxis:0},T),S=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,V={x:0,y:0};if(k){if(s){var q,N="y"===j?D:P,I="y"===j?A:L,_="y"===j?"height":"width",F=k[j],X=F+b[N],Y=F-b[I],G=m?-H[_]/2:0,K=w===W?B[_]:H[_],Q=w===W?-H[_]:-B[_],Z=t.elements.arrow,$=m&&Z?g(Z):{width:0,height:0},ee=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},te=ee[N],ne=ee[I],re=de(0,B[_],$[_]),oe=O?B[_]/2-G-re-te-R.mainAxis:K-re-te-R.mainAxis,ie=O?-B[_]/2+G+re+ne+R.mainAxis:Q+re+ne+R.mainAxis,ae=t.elements.arrow&&E(t.elements.arrow),se=ae?"y"===j?ae.clientTop||0:ae.clientLeft||0:0,fe=null!=(q=null==S?void 0:S[j])?q:0,ce=F+ie-fe,pe=de(m?a(X,F+oe-fe-se):X,F,m?i(Y,ce):Y);k[j]=pe,V[j]=pe-F}if(c){var ue,le="x"===j?D:P,he="x"===j?A:L,me=k[M],ve="y"===M?"height":"width",ye=me+b[le],ge=me-b[he],be=-1!==[D,P].indexOf(x),xe=null!=(ue=null==S?void 0:S[M])?ue:0,we=be?ye:me-B[ve]-H[ve]-xe+R.altAxis,Oe=be?me+B[ve]+H[ve]-xe-R.altAxis:ge,je=m&&be?function(e,t,n){var r=de(e,t,n);return r>n?n:r}(we,me,Oe):de(m?we:ye,me,m?Oe:ge);k[M]=je,V[M]=je-me}t.modifiersData[r]=V}},requiresIfExists:["offset"]};var me={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,r=e.name,o=e.options,i=n.elements.arrow,a=n.modifiersData.popperOffsets,s=C(n.placement),f=z(s),c=[P,L].indexOf(s)>=0?"height":"width";if(i&&a){var p=function(e,t){return Y("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:G(e,k))}(o.padding,n),u=g(i),l="y"===f?D:P,d="y"===f?A:L,h=n.rects.reference[c]+n.rects.reference[f]-a[f]-n.rects.popper[c],m=a[f]-n.rects.reference[f],v=E(i),y=v?"y"===f?v.clientHeight||0:v.clientWidth||0:0,b=h/2-m/2,x=p[l],w=y-u[c]-p[d],O=y/2-u[c]/2+b,j=de(x,O,w),M=f;n.modifiersData[r]=((t={})[M]=j,t.centerOffset=j-O,t)}},effect:function(e){var t=e.state,n=e.options.element,r=void 0===n?"[data-popper-arrow]":n;null!=r&&("string"!=typeof r||(r=t.elements.popper.querySelector(r)))&&N(t.elements.popper,r)&&(t.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ve(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function ye(e){return[D,L,A,P].some((function(t){return e[t]>=0}))}var ge={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,i=t.modifiersData.preventOverflow,a=J(t,{elementContext:"reference"}),s=J(t,{altBoundary:!0}),f=ve(a,r),c=ve(s,o,i),p=ye(f),u=ye(c);t.modifiersData[n]={referenceClippingOffsets:f,popperEscapeOffsets:c,isReferenceHidden:p,hasPopperEscaped:u},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":p,"data-popper-escaped":u})}},be=Z({defaultModifiers:[ee,te,oe,ie]}),xe=[ee,te,oe,ie,ae,le,he,me,ge],we=Z({defaultModifiers:xe});e.applyStyles=ie,e.arrow=me,e.computeStyles=oe,e.createPopper=we,e.createPopperLite=be,e.defaultModifiers=xe,e.detectOverflow=J,e.eventListeners=ee,e.flip=le,e.hide=ge,e.offset=ae,e.popperGenerator=Z,e.popperOffsets=te,e.preventOverflow=he,Object.defineProperty(e,"__esModule",{value:!0})})); + diff --git a/docs/docs/site_libs/quarto-html/quarto-syntax-highlighting-ed96de9b727972fe78a7b5d16c58bf87.css b/docs/docs/site_libs/quarto-html/quarto-syntax-highlighting-ed96de9b727972fe78a7b5d16c58bf87.css new file mode 100644 index 0000000..7bb4f73 --- /dev/null +++ b/docs/docs/site_libs/quarto-html/quarto-syntax-highlighting-ed96de9b727972fe78a7b5d16c58bf87.css @@ -0,0 +1,236 @@ +/* quarto syntax highlight colors */ +:root { + --quarto-hl-ot-color: #003B4F; + --quarto-hl-at-color: #657422; + --quarto-hl-ss-color: #20794D; + --quarto-hl-an-color: #5E5E5E; + --quarto-hl-fu-color: #4758AB; + --quarto-hl-st-color: #20794D; + --quarto-hl-cf-color: #003B4F; + --quarto-hl-op-color: #5E5E5E; + --quarto-hl-er-color: #AD0000; + --quarto-hl-bn-color: #AD0000; + --quarto-hl-al-color: #AD0000; + --quarto-hl-va-color: #111111; + --quarto-hl-bu-color: inherit; + --quarto-hl-ex-color: inherit; + --quarto-hl-pp-color: #AD0000; + --quarto-hl-in-color: #5E5E5E; + --quarto-hl-vs-color: #20794D; + --quarto-hl-wa-color: #5E5E5E; + --quarto-hl-do-color: #5E5E5E; + --quarto-hl-im-color: #00769E; + --quarto-hl-ch-color: #20794D; + --quarto-hl-dt-color: #AD0000; + --quarto-hl-fl-color: #AD0000; + --quarto-hl-co-color: #5E5E5E; + --quarto-hl-cv-color: #5E5E5E; + --quarto-hl-cn-color: #8f5902; + --quarto-hl-sc-color: #5E5E5E; + --quarto-hl-dv-color: #AD0000; + --quarto-hl-kw-color: #003B4F; +} + +/* other quarto variables */ +:root { + --quarto-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +/* syntax highlight based on Pandoc's rules */ +pre > code.sourceCode > span { + color: #003B4F; +} + +code.sourceCode > span { + color: #003B4F; +} + +div.sourceCode, +div.sourceCode pre.sourceCode { + color: #003B4F; +} + +/* Normal */ +code span { + color: #003B4F; +} + +/* Alert */ +code span.al { + color: #AD0000; + font-style: inherit; +} + +/* Annotation */ +code span.an { + color: #5E5E5E; + font-style: inherit; +} + +/* Attribute */ +code span.at { + color: #657422; + font-style: inherit; +} + +/* BaseN */ +code span.bn { + color: #AD0000; + font-style: inherit; +} + +/* BuiltIn */ +code span.bu { + font-style: inherit; +} + +/* ControlFlow */ +code span.cf { + color: #003B4F; + font-weight: bold; + font-style: inherit; +} + +/* Char */ +code span.ch { + color: #20794D; + font-style: inherit; +} + +/* Constant */ +code span.cn { + color: #8f5902; + font-style: inherit; +} + +/* Comment */ +code span.co { + color: #5E5E5E; + font-style: inherit; +} + +/* CommentVar */ +code span.cv { + color: #5E5E5E; + font-style: italic; +} + +/* Documentation */ +code span.do { + color: #5E5E5E; + font-style: italic; +} + +/* DataType */ +code span.dt { + color: #AD0000; + font-style: inherit; +} + +/* DecVal */ +code span.dv { + color: #AD0000; + font-style: inherit; +} + +/* Error */ +code span.er { + color: #AD0000; + font-style: inherit; +} + +/* Extension */ +code span.ex { + font-style: inherit; +} + +/* Float */ +code span.fl { + color: #AD0000; + font-style: inherit; +} + +/* Function */ +code span.fu { + color: #4758AB; + font-style: inherit; +} + +/* Import */ +code span.im { + color: #00769E; + font-style: inherit; +} + +/* Information */ +code span.in { + color: #5E5E5E; + font-style: inherit; +} + +/* Keyword */ +code span.kw { + color: #003B4F; + font-weight: bold; + font-style: inherit; +} + +/* Operator */ +code span.op { + color: #5E5E5E; + font-style: inherit; +} + +/* Other */ +code span.ot { + color: #003B4F; + font-style: inherit; +} + +/* Preprocessor */ +code span.pp { + color: #AD0000; + font-style: inherit; +} + +/* SpecialChar */ +code span.sc { + color: #5E5E5E; + font-style: inherit; +} + +/* SpecialString */ +code span.ss { + color: #20794D; + font-style: inherit; +} + +/* String */ +code span.st { + color: #20794D; + font-style: inherit; +} + +/* Variable */ +code span.va { + color: #111111; + font-style: inherit; +} + +/* VerbatimString */ +code span.vs { + color: #20794D; + font-style: inherit; +} + +/* Warning */ +code span.wa { + color: #5E5E5E; + font-style: italic; +} + +.prevent-inlining { + content: " { + // Find any conflicting margin elements and add margins to the + // top to prevent overlap + const marginChildren = window.document.querySelectorAll( + ".column-margin.column-container > *, .margin-caption, .aside" + ); + + let lastBottom = 0; + for (const marginChild of marginChildren) { + if (marginChild.offsetParent !== null) { + // clear the top margin so we recompute it + marginChild.style.marginTop = null; + const top = marginChild.getBoundingClientRect().top + window.scrollY; + if (top < lastBottom) { + const marginChildStyle = window.getComputedStyle(marginChild); + const marginBottom = parseFloat(marginChildStyle["marginBottom"]); + const margin = lastBottom - top + marginBottom; + marginChild.style.marginTop = `${margin}px`; + } + const styles = window.getComputedStyle(marginChild); + const marginTop = parseFloat(styles["marginTop"]); + lastBottom = top + marginChild.getBoundingClientRect().height + marginTop; + } + } +}; + +window.document.addEventListener("DOMContentLoaded", function (_event) { + // Recompute the position of margin elements anytime the body size changes + if (window.ResizeObserver) { + const resizeObserver = new window.ResizeObserver( + throttle(() => { + layoutMarginEls(); + if ( + window.document.body.getBoundingClientRect().width < 990 && + isReaderMode() + ) { + quartoToggleReader(); + } + }, 50) + ); + resizeObserver.observe(window.document.body); + } + + const tocEl = window.document.querySelector('nav.toc-active[role="doc-toc"]'); + const sidebarEl = window.document.getElementById("quarto-sidebar"); + const leftTocEl = window.document.getElementById("quarto-sidebar-toc-left"); + const marginSidebarEl = window.document.getElementById( + "quarto-margin-sidebar" + ); + // function to determine whether the element has a previous sibling that is active + const prevSiblingIsActiveLink = (el) => { + const sibling = el.previousElementSibling; + if (sibling && sibling.tagName === "A") { + return sibling.classList.contains("active"); + } else { + return false; + } + }; + + // dispatch for htmlwidgets + // they use slideenter event to trigger resize + function fireSlideEnter() { + const event = window.document.createEvent("Event"); + event.initEvent("slideenter", true, true); + window.document.dispatchEvent(event); + } + + const tabs = window.document.querySelectorAll('a[data-bs-toggle="tab"]'); + tabs.forEach((tab) => { + tab.addEventListener("shown.bs.tab", fireSlideEnter); + }); + + // dispatch for shiny + // they use BS shown and hidden events to trigger rendering + function distpatchShinyEvents(previous, current) { + if (window.jQuery) { + if (previous) { + window.jQuery(previous).trigger("hidden"); + } + if (current) { + window.jQuery(current).trigger("shown"); + } + } + } + + // tabby.js listener: Trigger event for htmlwidget and shiny + document.addEventListener( + "tabby", + function (event) { + fireSlideEnter(); + distpatchShinyEvents(event.detail.previousTab, event.detail.tab); + }, + false + ); + + // Track scrolling and mark TOC links as active + // get table of contents and sidebar (bail if we don't have at least one) + const tocLinks = tocEl + ? [...tocEl.querySelectorAll("a[data-scroll-target]")] + : []; + const makeActive = (link) => tocLinks[link].classList.add("active"); + const removeActive = (link) => tocLinks[link].classList.remove("active"); + const removeAllActive = () => + [...Array(tocLinks.length).keys()].forEach((link) => removeActive(link)); + + // activate the anchor for a section associated with this TOC entry + tocLinks.forEach((link) => { + link.addEventListener("click", () => { + if (link.href.indexOf("#") !== -1) { + const anchor = link.href.split("#")[1]; + const heading = window.document.querySelector( + `[data-anchor-id="${anchor}"]` + ); + if (heading) { + // Add the class + heading.classList.add("reveal-anchorjs-link"); + + // function to show the anchor + const handleMouseout = () => { + heading.classList.remove("reveal-anchorjs-link"); + heading.removeEventListener("mouseout", handleMouseout); + }; + + // add a function to clear the anchor when the user mouses out of it + heading.addEventListener("mouseout", handleMouseout); + } + } + }); + }); + + const sections = tocLinks.map((link) => { + const target = link.getAttribute("data-scroll-target"); + if (target.startsWith("#")) { + return window.document.getElementById(decodeURI(`${target.slice(1)}`)); + } else { + return window.document.querySelector(decodeURI(`${target}`)); + } + }); + + const sectionMargin = 200; + let currentActive = 0; + // track whether we've initialized state the first time + let init = false; + + const updateActiveLink = () => { + // The index from bottom to top (e.g. reversed list) + let sectionIndex = -1; + if ( + window.innerHeight + window.pageYOffset >= + window.document.body.offsetHeight + ) { + // This is the no-scroll case where last section should be the active one + sectionIndex = 0; + } else { + // This finds the last section visible on screen that should be made active + sectionIndex = [...sections].reverse().findIndex((section) => { + if (section) { + return window.pageYOffset >= section.offsetTop - sectionMargin; + } else { + return false; + } + }); + } + if (sectionIndex > -1) { + const current = sections.length - sectionIndex - 1; + if (current !== currentActive) { + removeAllActive(); + currentActive = current; + makeActive(current); + if (init) { + window.dispatchEvent(sectionChanged); + } + init = true; + } + } + }; + + const inHiddenRegion = (top, bottom, hiddenRegions) => { + for (const region of hiddenRegions) { + if (top <= region.bottom && bottom >= region.top) { + return true; + } + } + return false; + }; + + const categorySelector = "header.quarto-title-block .quarto-category"; + const activateCategories = (href) => { + // Find any categories + // Surround them with a link pointing back to: + // #category=Authoring + try { + const categoryEls = window.document.querySelectorAll(categorySelector); + for (const categoryEl of categoryEls) { + const categoryText = categoryEl.textContent; + if (categoryText) { + const link = `${href}#category=${encodeURIComponent(categoryText)}`; + const linkEl = window.document.createElement("a"); + linkEl.setAttribute("href", link); + for (const child of categoryEl.childNodes) { + linkEl.append(child); + } + categoryEl.appendChild(linkEl); + } + } + } catch { + // Ignore errors + } + }; + function hasTitleCategories() { + return window.document.querySelector(categorySelector) !== null; + } + + function offsetRelativeUrl(url) { + const offset = getMeta("quarto:offset"); + return offset ? offset + url : url; + } + + function offsetAbsoluteUrl(url) { + const offset = getMeta("quarto:offset"); + const baseUrl = new URL(offset, window.location); + + const projRelativeUrl = url.replace(baseUrl, ""); + if (projRelativeUrl.startsWith("/")) { + return projRelativeUrl; + } else { + return "/" + projRelativeUrl; + } + } + + // read a meta tag value + function getMeta(metaName) { + const metas = window.document.getElementsByTagName("meta"); + for (let i = 0; i < metas.length; i++) { + if (metas[i].getAttribute("name") === metaName) { + return metas[i].getAttribute("content"); + } + } + return ""; + } + + async function findAndActivateCategories() { + // Categories search with listing only use path without query + const currentPagePath = offsetAbsoluteUrl( + window.location.origin + window.location.pathname + ); + const response = await fetch(offsetRelativeUrl("listings.json")); + if (response.status == 200) { + return response.json().then(function (listingPaths) { + const listingHrefs = []; + for (const listingPath of listingPaths) { + const pathWithoutLeadingSlash = listingPath.listing.substring(1); + for (const item of listingPath.items) { + const encodedItem = encodeURI(item); + if ( + encodedItem === currentPagePath || + encodedItem === currentPagePath + "index.html" + ) { + // Resolve this path against the offset to be sure + // we already are using the correct path to the listing + // (this adjusts the listing urls to be rooted against + // whatever root the page is actually running against) + const relative = offsetRelativeUrl(pathWithoutLeadingSlash); + const baseUrl = window.location; + const resolvedPath = new URL(relative, baseUrl); + listingHrefs.push(resolvedPath.pathname); + break; + } + } + } + + // Look up the tree for a nearby linting and use that if we find one + const nearestListing = findNearestParentListing( + offsetAbsoluteUrl(window.location.pathname), + listingHrefs + ); + if (nearestListing) { + activateCategories(nearestListing); + } else { + // See if the referrer is a listing page for this item + const referredRelativePath = offsetAbsoluteUrl(document.referrer); + const referrerListing = listingHrefs.find((listingHref) => { + const isListingReferrer = + listingHref === referredRelativePath || + listingHref === referredRelativePath + "index.html"; + return isListingReferrer; + }); + + if (referrerListing) { + // Try to use the referrer if possible + activateCategories(referrerListing); + } else if (listingHrefs.length > 0) { + // Otherwise, just fall back to the first listing + activateCategories(listingHrefs[0]); + } + } + }); + } + } + if (hasTitleCategories()) { + findAndActivateCategories(); + } + + const findNearestParentListing = (href, listingHrefs) => { + if (!href || !listingHrefs) { + return undefined; + } + // Look up the tree for a nearby linting and use that if we find one + const relativeParts = href.substring(1).split("/"); + while (relativeParts.length > 0) { + const path = relativeParts.join("/"); + for (const listingHref of listingHrefs) { + if (listingHref.startsWith(path)) { + return listingHref; + } + } + relativeParts.pop(); + } + + return undefined; + }; + + const manageSidebarVisiblity = (el, placeholderDescriptor) => { + let isVisible = true; + let elRect; + + return (hiddenRegions) => { + if (el === null) { + return; + } + + // Find the last element of the TOC + const lastChildEl = el.lastElementChild; + + if (lastChildEl) { + // Converts the sidebar to a menu + const convertToMenu = () => { + for (const child of el.children) { + child.style.opacity = 0; + child.style.overflow = "hidden"; + child.style.pointerEvents = "none"; + } + + nexttick(() => { + const toggleContainer = window.document.createElement("div"); + toggleContainer.style.width = "100%"; + toggleContainer.classList.add("zindex-over-content"); + toggleContainer.classList.add("quarto-sidebar-toggle"); + toggleContainer.classList.add("headroom-target"); // Marks this to be managed by headeroom + toggleContainer.id = placeholderDescriptor.id; + toggleContainer.style.position = "fixed"; + + const toggleIcon = window.document.createElement("i"); + toggleIcon.classList.add("quarto-sidebar-toggle-icon"); + toggleIcon.classList.add("bi"); + toggleIcon.classList.add("bi-caret-down-fill"); + + const toggleTitle = window.document.createElement("div"); + const titleEl = window.document.body.querySelector( + placeholderDescriptor.titleSelector + ); + if (titleEl) { + toggleTitle.append( + titleEl.textContent || titleEl.innerText, + toggleIcon + ); + } + toggleTitle.classList.add("zindex-over-content"); + toggleTitle.classList.add("quarto-sidebar-toggle-title"); + toggleContainer.append(toggleTitle); + + const toggleContents = window.document.createElement("div"); + toggleContents.classList = el.classList; + toggleContents.classList.add("zindex-over-content"); + toggleContents.classList.add("quarto-sidebar-toggle-contents"); + for (const child of el.children) { + if (child.id === "toc-title") { + continue; + } + + const clone = child.cloneNode(true); + clone.style.opacity = 1; + clone.style.pointerEvents = null; + clone.style.display = null; + toggleContents.append(clone); + } + toggleContents.style.height = "0px"; + const positionToggle = () => { + // position the element (top left of parent, same width as parent) + if (!elRect) { + elRect = el.getBoundingClientRect(); + } + toggleContainer.style.left = `${elRect.left}px`; + toggleContainer.style.top = `${elRect.top}px`; + toggleContainer.style.width = `${elRect.width}px`; + }; + positionToggle(); + + toggleContainer.append(toggleContents); + el.parentElement.prepend(toggleContainer); + + // Process clicks + let tocShowing = false; + // Allow the caller to control whether this is dismissed + // when it is clicked (e.g. sidebar navigation supports + // opening and closing the nav tree, so don't dismiss on click) + const clickEl = placeholderDescriptor.dismissOnClick + ? toggleContainer + : toggleTitle; + + const closeToggle = () => { + if (tocShowing) { + toggleContainer.classList.remove("expanded"); + toggleContents.style.height = "0px"; + tocShowing = false; + } + }; + + // Get rid of any expanded toggle if the user scrolls + window.document.addEventListener( + "scroll", + throttle(() => { + closeToggle(); + }, 50) + ); + + // Handle positioning of the toggle + window.addEventListener( + "resize", + throttle(() => { + elRect = undefined; + positionToggle(); + }, 50) + ); + + window.addEventListener("quarto-hrChanged", () => { + elRect = undefined; + }); + + // Process the click + clickEl.onclick = () => { + if (!tocShowing) { + toggleContainer.classList.add("expanded"); + toggleContents.style.height = null; + tocShowing = true; + } else { + closeToggle(); + } + }; + }); + }; + + // Converts a sidebar from a menu back to a sidebar + const convertToSidebar = () => { + for (const child of el.children) { + child.style.opacity = 1; + child.style.overflow = null; + child.style.pointerEvents = null; + } + + const placeholderEl = window.document.getElementById( + placeholderDescriptor.id + ); + if (placeholderEl) { + placeholderEl.remove(); + } + + el.classList.remove("rollup"); + }; + + if (isReaderMode()) { + convertToMenu(); + isVisible = false; + } else { + // Find the top and bottom o the element that is being managed + const elTop = el.offsetTop; + const elBottom = + elTop + lastChildEl.offsetTop + lastChildEl.offsetHeight; + + if (!isVisible) { + // If the element is current not visible reveal if there are + // no conflicts with overlay regions + if (!inHiddenRegion(elTop, elBottom, hiddenRegions)) { + convertToSidebar(); + isVisible = true; + } + } else { + // If the element is visible, hide it if it conflicts with overlay regions + // and insert a placeholder toggle (or if we're in reader mode) + if (inHiddenRegion(elTop, elBottom, hiddenRegions)) { + convertToMenu(); + isVisible = false; + } + } + } + } + }; + }; + + const tabEls = document.querySelectorAll('a[data-bs-toggle="tab"]'); + for (const tabEl of tabEls) { + const id = tabEl.getAttribute("data-bs-target"); + if (id) { + const columnEl = document.querySelector( + `${id} .column-margin, .tabset-margin-content` + ); + if (columnEl) + tabEl.addEventListener("shown.bs.tab", function (event) { + const el = event.srcElement; + if (el) { + const visibleCls = `${el.id}-margin-content`; + // walk up until we find a parent tabset + let panelTabsetEl = el.parentElement; + while (panelTabsetEl) { + if (panelTabsetEl.classList.contains("panel-tabset")) { + break; + } + panelTabsetEl = panelTabsetEl.parentElement; + } + + if (panelTabsetEl) { + const prevSib = panelTabsetEl.previousElementSibling; + if ( + prevSib && + prevSib.classList.contains("tabset-margin-container") + ) { + const childNodes = prevSib.querySelectorAll( + ".tabset-margin-content" + ); + for (const childEl of childNodes) { + if (childEl.classList.contains(visibleCls)) { + childEl.classList.remove("collapse"); + } else { + childEl.classList.add("collapse"); + } + } + } + } + } + + layoutMarginEls(); + }); + } + } + + // Manage the visibility of the toc and the sidebar + const marginScrollVisibility = manageSidebarVisiblity(marginSidebarEl, { + id: "quarto-toc-toggle", + titleSelector: "#toc-title", + dismissOnClick: true, + }); + const sidebarScrollVisiblity = manageSidebarVisiblity(sidebarEl, { + id: "quarto-sidebarnav-toggle", + titleSelector: ".title", + dismissOnClick: false, + }); + let tocLeftScrollVisibility; + if (leftTocEl) { + tocLeftScrollVisibility = manageSidebarVisiblity(leftTocEl, { + id: "quarto-lefttoc-toggle", + titleSelector: "#toc-title", + dismissOnClick: true, + }); + } + + // Find the first element that uses formatting in special columns + const conflictingEls = window.document.body.querySelectorAll( + '[class^="column-"], [class*=" column-"], aside, [class*="margin-caption"], [class*=" margin-caption"], [class*="margin-ref"], [class*=" margin-ref"]' + ); + + // Filter all the possibly conflicting elements into ones + // the do conflict on the left or ride side + const arrConflictingEls = Array.from(conflictingEls); + const leftSideConflictEls = arrConflictingEls.filter((el) => { + if (el.tagName === "ASIDE") { + return false; + } + return Array.from(el.classList).find((className) => { + return ( + className !== "column-body" && + className.startsWith("column-") && + !className.endsWith("right") && + !className.endsWith("container") && + className !== "column-margin" + ); + }); + }); + const rightSideConflictEls = arrConflictingEls.filter((el) => { + if (el.tagName === "ASIDE") { + return true; + } + + const hasMarginCaption = Array.from(el.classList).find((className) => { + return className == "margin-caption"; + }); + if (hasMarginCaption) { + return true; + } + + return Array.from(el.classList).find((className) => { + return ( + className !== "column-body" && + !className.endsWith("container") && + className.startsWith("column-") && + !className.endsWith("left") + ); + }); + }); + + const kOverlapPaddingSize = 10; + function toRegions(els) { + return els.map((el) => { + const boundRect = el.getBoundingClientRect(); + const top = + boundRect.top + + document.documentElement.scrollTop - + kOverlapPaddingSize; + return { + top, + bottom: top + el.scrollHeight + 2 * kOverlapPaddingSize, + }; + }); + } + + let hasObserved = false; + const visibleItemObserver = (els) => { + let visibleElements = [...els]; + const intersectionObserver = new IntersectionObserver( + (entries, _observer) => { + entries.forEach((entry) => { + if (entry.isIntersecting) { + if (visibleElements.indexOf(entry.target) === -1) { + visibleElements.push(entry.target); + } + } else { + visibleElements = visibleElements.filter((visibleEntry) => { + return visibleEntry !== entry; + }); + } + }); + + if (!hasObserved) { + hideOverlappedSidebars(); + } + hasObserved = true; + }, + {} + ); + els.forEach((el) => { + intersectionObserver.observe(el); + }); + + return { + getVisibleEntries: () => { + return visibleElements; + }, + }; + }; + + const rightElementObserver = visibleItemObserver(rightSideConflictEls); + const leftElementObserver = visibleItemObserver(leftSideConflictEls); + + const hideOverlappedSidebars = () => { + marginScrollVisibility(toRegions(rightElementObserver.getVisibleEntries())); + sidebarScrollVisiblity(toRegions(leftElementObserver.getVisibleEntries())); + if (tocLeftScrollVisibility) { + tocLeftScrollVisibility( + toRegions(leftElementObserver.getVisibleEntries()) + ); + } + }; + + window.quartoToggleReader = () => { + // Applies a slow class (or removes it) + // to update the transition speed + const slowTransition = (slow) => { + const manageTransition = (id, slow) => { + const el = document.getElementById(id); + if (el) { + if (slow) { + el.classList.add("slow"); + } else { + el.classList.remove("slow"); + } + } + }; + + manageTransition("TOC", slow); + manageTransition("quarto-sidebar", slow); + }; + const readerMode = !isReaderMode(); + setReaderModeValue(readerMode); + + // If we're entering reader mode, slow the transition + if (readerMode) { + slowTransition(readerMode); + } + highlightReaderToggle(readerMode); + hideOverlappedSidebars(); + + // If we're exiting reader mode, restore the non-slow transition + if (!readerMode) { + slowTransition(!readerMode); + } + }; + + const highlightReaderToggle = (readerMode) => { + const els = document.querySelectorAll(".quarto-reader-toggle"); + if (els) { + els.forEach((el) => { + if (readerMode) { + el.classList.add("reader"); + } else { + el.classList.remove("reader"); + } + }); + } + }; + + const setReaderModeValue = (val) => { + if (window.location.protocol !== "file:") { + window.localStorage.setItem("quarto-reader-mode", val); + } else { + localReaderMode = val; + } + }; + + const isReaderMode = () => { + if (window.location.protocol !== "file:") { + return window.localStorage.getItem("quarto-reader-mode") === "true"; + } else { + return localReaderMode; + } + }; + let localReaderMode = null; + + const tocOpenDepthStr = tocEl?.getAttribute("data-toc-expanded"); + const tocOpenDepth = tocOpenDepthStr ? Number(tocOpenDepthStr) : 1; + + // Walk the TOC and collapse/expand nodes + // Nodes are expanded if: + // - they are top level + // - they have children that are 'active' links + // - they are directly below an link that is 'active' + const walk = (el, depth) => { + // Tick depth when we enter a UL + if (el.tagName === "UL") { + depth = depth + 1; + } + + // It this is active link + let isActiveNode = false; + if (el.tagName === "A" && el.classList.contains("active")) { + isActiveNode = true; + } + + // See if there is an active child to this element + let hasActiveChild = false; + for (const child of el.children) { + hasActiveChild = walk(child, depth) || hasActiveChild; + } + + // Process the collapse state if this is an UL + if (el.tagName === "UL") { + if (tocOpenDepth === -1 && depth > 1) { + // toc-expand: false + el.classList.add("collapse"); + } else if ( + depth <= tocOpenDepth || + hasActiveChild || + prevSiblingIsActiveLink(el) + ) { + el.classList.remove("collapse"); + } else { + el.classList.add("collapse"); + } + + // untick depth when we leave a UL + depth = depth - 1; + } + return hasActiveChild || isActiveNode; + }; + + // walk the TOC and expand / collapse any items that should be shown + if (tocEl) { + updateActiveLink(); + walk(tocEl, 0); + } + + // Throttle the scroll event and walk peridiocally + window.document.addEventListener( + "scroll", + throttle(() => { + if (tocEl) { + updateActiveLink(); + walk(tocEl, 0); + } + if (!isReaderMode()) { + hideOverlappedSidebars(); + } + }, 5) + ); + window.addEventListener( + "resize", + throttle(() => { + if (tocEl) { + updateActiveLink(); + walk(tocEl, 0); + } + if (!isReaderMode()) { + hideOverlappedSidebars(); + } + }, 10) + ); + hideOverlappedSidebars(); + highlightReaderToggle(isReaderMode()); +}); + +tabsets.init(); +axe.init(); + +function throttle(func, wait) { + let waiting = false; + return function () { + if (!waiting) { + func.apply(this, arguments); + waiting = true; + setTimeout(function () { + waiting = false; + }, wait); + } + }; +} + +function nexttick(func) { + return setTimeout(func, 0); +} diff --git a/docs/docs/site_libs/quarto-html/tabsets/tabsets.js b/docs/docs/site_libs/quarto-html/tabsets/tabsets.js new file mode 100644 index 0000000..51345d0 --- /dev/null +++ b/docs/docs/site_libs/quarto-html/tabsets/tabsets.js @@ -0,0 +1,95 @@ +// grouped tabsets + +export function init() { + window.addEventListener("pageshow", (_event) => { + function getTabSettings() { + const data = localStorage.getItem("quarto-persistent-tabsets-data"); + if (!data) { + localStorage.setItem("quarto-persistent-tabsets-data", "{}"); + return {}; + } + if (data) { + return JSON.parse(data); + } + } + + function setTabSettings(data) { + localStorage.setItem( + "quarto-persistent-tabsets-data", + JSON.stringify(data) + ); + } + + function setTabState(groupName, groupValue) { + const data = getTabSettings(); + data[groupName] = groupValue; + setTabSettings(data); + } + + function toggleTab(tab, active) { + const tabPanelId = tab.getAttribute("aria-controls"); + const tabPanel = document.getElementById(tabPanelId); + if (active) { + tab.classList.add("active"); + tabPanel.classList.add("active"); + } else { + tab.classList.remove("active"); + tabPanel.classList.remove("active"); + } + } + + function toggleAll(selectedGroup, selectorsToSync) { + for (const [thisGroup, tabs] of Object.entries(selectorsToSync)) { + const active = selectedGroup === thisGroup; + for (const tab of tabs) { + toggleTab(tab, active); + } + } + } + + function findSelectorsToSyncByLanguage() { + const result = {}; + const tabs = Array.from( + document.querySelectorAll(`div[data-group] a[id^='tabset-']`) + ); + for (const item of tabs) { + const div = item.parentElement.parentElement.parentElement; + const group = div.getAttribute("data-group"); + if (!result[group]) { + result[group] = {}; + } + const selectorsToSync = result[group]; + const value = item.innerHTML; + if (!selectorsToSync[value]) { + selectorsToSync[value] = []; + } + selectorsToSync[value].push(item); + } + return result; + } + + function setupSelectorSync() { + const selectorsToSync = findSelectorsToSyncByLanguage(); + Object.entries(selectorsToSync).forEach(([group, tabSetsByValue]) => { + Object.entries(tabSetsByValue).forEach(([value, items]) => { + items.forEach((item) => { + item.addEventListener("click", (_event) => { + setTabState(group, value); + toggleAll(value, selectorsToSync[group]); + }); + }); + }); + }); + return selectorsToSync; + } + + const selectorsToSync = setupSelectorSync(); + for (const [group, selectedName] of Object.entries(getTabSettings())) { + const selectors = selectorsToSync[group]; + // it's possible that stale state gives us empty selections, so we explicitly check here. + if (selectors) { + toggleAll(selectedName, selectors); + } + } + }); +} diff --git a/docs/docs/site_libs/quarto-html/tippy.css b/docs/docs/site_libs/quarto-html/tippy.css new file mode 100644 index 0000000..e6ae635 --- /dev/null +++ b/docs/docs/site_libs/quarto-html/tippy.css @@ -0,0 +1 @@ +.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;white-space:normal;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:"";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1} \ No newline at end of file diff --git a/docs/docs/site_libs/quarto-html/tippy.umd.min.js b/docs/docs/site_libs/quarto-html/tippy.umd.min.js new file mode 100644 index 0000000..ca292be --- /dev/null +++ b/docs/docs/site_libs/quarto-html/tippy.umd.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("@popperjs/core")):"function"==typeof define&&define.amd?define(["@popperjs/core"],t):(e=e||self).tippy=t(e.Popper)}(this,(function(e){"use strict";var t={passive:!0,capture:!0},n=function(){return document.body};function r(e,t,n){if(Array.isArray(e)){var r=e[t];return null==r?Array.isArray(n)?n[t]:n:r}return e}function o(e,t){var n={}.toString.call(e);return 0===n.indexOf("[object")&&n.indexOf(t+"]")>-1}function i(e,t){return"function"==typeof e?e.apply(void 0,t):e}function a(e,t){return 0===t?e:function(r){clearTimeout(n),n=setTimeout((function(){e(r)}),t)};var n}function s(e,t){var n=Object.assign({},e);return t.forEach((function(e){delete n[e]})),n}function u(e){return[].concat(e)}function c(e,t){-1===e.indexOf(t)&&e.push(t)}function p(e){return e.split("-")[0]}function f(e){return[].slice.call(e)}function l(e){return Object.keys(e).reduce((function(t,n){return void 0!==e[n]&&(t[n]=e[n]),t}),{})}function d(){return document.createElement("div")}function v(e){return["Element","Fragment"].some((function(t){return o(e,t)}))}function m(e){return o(e,"MouseEvent")}function g(e){return!(!e||!e._tippy||e._tippy.reference!==e)}function h(e){return v(e)?[e]:function(e){return o(e,"NodeList")}(e)?f(e):Array.isArray(e)?e:f(document.querySelectorAll(e))}function b(e,t){e.forEach((function(e){e&&(e.style.transitionDuration=t+"ms")}))}function y(e,t){e.forEach((function(e){e&&e.setAttribute("data-state",t)}))}function w(e){var t,n=u(e)[0];return null!=n&&null!=(t=n.ownerDocument)&&t.body?n.ownerDocument:document}function E(e,t,n){var r=t+"EventListener";["transitionend","webkitTransitionEnd"].forEach((function(t){e[r](t,n)}))}function O(e,t){for(var n=t;n;){var r;if(e.contains(n))return!0;n=null==n.getRootNode||null==(r=n.getRootNode())?void 0:r.host}return!1}var x={isTouch:!1},C=0;function T(){x.isTouch||(x.isTouch=!0,window.performance&&document.addEventListener("mousemove",A))}function A(){var e=performance.now();e-C<20&&(x.isTouch=!1,document.removeEventListener("mousemove",A)),C=e}function L(){var e=document.activeElement;if(g(e)){var t=e._tippy;e.blur&&!t.state.isVisible&&e.blur()}}var D=!!("undefined"!=typeof window&&"undefined"!=typeof document)&&!!window.msCrypto,R=Object.assign({appendTo:n,aria:{content:"auto",expanded:"auto"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:"",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:"top",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:"mouseenter focus",triggerTarget:null},{animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},{allowHTML:!1,animation:"fade",arrow:!0,content:"",inertia:!1,maxWidth:350,role:"tooltip",theme:"",zIndex:9999}),k=Object.keys(R);function P(e){var t=(e.plugins||[]).reduce((function(t,n){var r,o=n.name,i=n.defaultValue;o&&(t[o]=void 0!==e[o]?e[o]:null!=(r=R[o])?r:i);return t}),{});return Object.assign({},e,t)}function j(e,t){var n=Object.assign({},t,{content:i(t.content,[e])},t.ignoreAttributes?{}:function(e,t){return(t?Object.keys(P(Object.assign({},R,{plugins:t}))):k).reduce((function(t,n){var r=(e.getAttribute("data-tippy-"+n)||"").trim();if(!r)return t;if("content"===n)t[n]=r;else try{t[n]=JSON.parse(r)}catch(e){t[n]=r}return t}),{})}(e,t.plugins));return n.aria=Object.assign({},R.aria,n.aria),n.aria={expanded:"auto"===n.aria.expanded?t.interactive:n.aria.expanded,content:"auto"===n.aria.content?t.interactive?null:"describedby":n.aria.content},n}function M(e,t){e.innerHTML=t}function V(e){var t=d();return!0===e?t.className="tippy-arrow":(t.className="tippy-svg-arrow",v(e)?t.appendChild(e):M(t,e)),t}function I(e,t){v(t.content)?(M(e,""),e.appendChild(t.content)):"function"!=typeof t.content&&(t.allowHTML?M(e,t.content):e.textContent=t.content)}function S(e){var t=e.firstElementChild,n=f(t.children);return{box:t,content:n.find((function(e){return e.classList.contains("tippy-content")})),arrow:n.find((function(e){return e.classList.contains("tippy-arrow")||e.classList.contains("tippy-svg-arrow")})),backdrop:n.find((function(e){return e.classList.contains("tippy-backdrop")}))}}function N(e){var t=d(),n=d();n.className="tippy-box",n.setAttribute("data-state","hidden"),n.setAttribute("tabindex","-1");var r=d();function o(n,r){var o=S(t),i=o.box,a=o.content,s=o.arrow;r.theme?i.setAttribute("data-theme",r.theme):i.removeAttribute("data-theme"),"string"==typeof r.animation?i.setAttribute("data-animation",r.animation):i.removeAttribute("data-animation"),r.inertia?i.setAttribute("data-inertia",""):i.removeAttribute("data-inertia"),i.style.maxWidth="number"==typeof r.maxWidth?r.maxWidth+"px":r.maxWidth,r.role?i.setAttribute("role",r.role):i.removeAttribute("role"),n.content===r.content&&n.allowHTML===r.allowHTML||I(a,e.props),r.arrow?s?n.arrow!==r.arrow&&(i.removeChild(s),i.appendChild(V(r.arrow))):i.appendChild(V(r.arrow)):s&&i.removeChild(s)}return r.className="tippy-content",r.setAttribute("data-state","hidden"),I(r,e.props),t.appendChild(n),n.appendChild(r),o(e.props,e.props),{popper:t,onUpdate:o}}N.$$tippy=!0;var B=1,H=[],U=[];function _(o,s){var v,g,h,C,T,A,L,k,M=j(o,Object.assign({},R,P(l(s)))),V=!1,I=!1,N=!1,_=!1,F=[],W=a(we,M.interactiveDebounce),X=B++,Y=(k=M.plugins).filter((function(e,t){return k.indexOf(e)===t})),$={id:X,reference:o,popper:d(),popperInstance:null,props:M,state:{isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},plugins:Y,clearDelayTimeouts:function(){clearTimeout(v),clearTimeout(g),cancelAnimationFrame(h)},setProps:function(e){if($.state.isDestroyed)return;ae("onBeforeUpdate",[$,e]),be();var t=$.props,n=j(o,Object.assign({},t,l(e),{ignoreAttributes:!0}));$.props=n,he(),t.interactiveDebounce!==n.interactiveDebounce&&(ce(),W=a(we,n.interactiveDebounce));t.triggerTarget&&!n.triggerTarget?u(t.triggerTarget).forEach((function(e){e.removeAttribute("aria-expanded")})):n.triggerTarget&&o.removeAttribute("aria-expanded");ue(),ie(),J&&J(t,n);$.popperInstance&&(Ce(),Ae().forEach((function(e){requestAnimationFrame(e._tippy.popperInstance.forceUpdate)})));ae("onAfterUpdate",[$,e])},setContent:function(e){$.setProps({content:e})},show:function(){var e=$.state.isVisible,t=$.state.isDestroyed,o=!$.state.isEnabled,a=x.isTouch&&!$.props.touch,s=r($.props.duration,0,R.duration);if(e||t||o||a)return;if(te().hasAttribute("disabled"))return;if(ae("onShow",[$],!1),!1===$.props.onShow($))return;$.state.isVisible=!0,ee()&&(z.style.visibility="visible");ie(),de(),$.state.isMounted||(z.style.transition="none");if(ee()){var u=re(),p=u.box,f=u.content;b([p,f],0)}A=function(){var e;if($.state.isVisible&&!_){if(_=!0,z.offsetHeight,z.style.transition=$.props.moveTransition,ee()&&$.props.animation){var t=re(),n=t.box,r=t.content;b([n,r],s),y([n,r],"visible")}se(),ue(),c(U,$),null==(e=$.popperInstance)||e.forceUpdate(),ae("onMount",[$]),$.props.animation&&ee()&&function(e,t){me(e,t)}(s,(function(){$.state.isShown=!0,ae("onShown",[$])}))}},function(){var e,t=$.props.appendTo,r=te();e=$.props.interactive&&t===n||"parent"===t?r.parentNode:i(t,[r]);e.contains(z)||e.appendChild(z);$.state.isMounted=!0,Ce()}()},hide:function(){var e=!$.state.isVisible,t=$.state.isDestroyed,n=!$.state.isEnabled,o=r($.props.duration,1,R.duration);if(e||t||n)return;if(ae("onHide",[$],!1),!1===$.props.onHide($))return;$.state.isVisible=!1,$.state.isShown=!1,_=!1,V=!1,ee()&&(z.style.visibility="hidden");if(ce(),ve(),ie(!0),ee()){var i=re(),a=i.box,s=i.content;$.props.animation&&(b([a,s],o),y([a,s],"hidden"))}se(),ue(),$.props.animation?ee()&&function(e,t){me(e,(function(){!$.state.isVisible&&z.parentNode&&z.parentNode.contains(z)&&t()}))}(o,$.unmount):$.unmount()},hideWithInteractivity:function(e){ne().addEventListener("mousemove",W),c(H,W),W(e)},enable:function(){$.state.isEnabled=!0},disable:function(){$.hide(),$.state.isEnabled=!1},unmount:function(){$.state.isVisible&&$.hide();if(!$.state.isMounted)return;Te(),Ae().forEach((function(e){e._tippy.unmount()})),z.parentNode&&z.parentNode.removeChild(z);U=U.filter((function(e){return e!==$})),$.state.isMounted=!1,ae("onHidden",[$])},destroy:function(){if($.state.isDestroyed)return;$.clearDelayTimeouts(),$.unmount(),be(),delete o._tippy,$.state.isDestroyed=!0,ae("onDestroy",[$])}};if(!M.render)return $;var q=M.render($),z=q.popper,J=q.onUpdate;z.setAttribute("data-tippy-root",""),z.id="tippy-"+$.id,$.popper=z,o._tippy=$,z._tippy=$;var G=Y.map((function(e){return e.fn($)})),K=o.hasAttribute("aria-expanded");return he(),ue(),ie(),ae("onCreate",[$]),M.showOnCreate&&Le(),z.addEventListener("mouseenter",(function(){$.props.interactive&&$.state.isVisible&&$.clearDelayTimeouts()})),z.addEventListener("mouseleave",(function(){$.props.interactive&&$.props.trigger.indexOf("mouseenter")>=0&&ne().addEventListener("mousemove",W)})),$;function Q(){var e=$.props.touch;return Array.isArray(e)?e:[e,0]}function Z(){return"hold"===Q()[0]}function ee(){var e;return!(null==(e=$.props.render)||!e.$$tippy)}function te(){return L||o}function ne(){var e=te().parentNode;return e?w(e):document}function re(){return S(z)}function oe(e){return $.state.isMounted&&!$.state.isVisible||x.isTouch||C&&"focus"===C.type?0:r($.props.delay,e?0:1,R.delay)}function ie(e){void 0===e&&(e=!1),z.style.pointerEvents=$.props.interactive&&!e?"":"none",z.style.zIndex=""+$.props.zIndex}function ae(e,t,n){var r;(void 0===n&&(n=!0),G.forEach((function(n){n[e]&&n[e].apply(n,t)})),n)&&(r=$.props)[e].apply(r,t)}function se(){var e=$.props.aria;if(e.content){var t="aria-"+e.content,n=z.id;u($.props.triggerTarget||o).forEach((function(e){var r=e.getAttribute(t);if($.state.isVisible)e.setAttribute(t,r?r+" "+n:n);else{var o=r&&r.replace(n,"").trim();o?e.setAttribute(t,o):e.removeAttribute(t)}}))}}function ue(){!K&&$.props.aria.expanded&&u($.props.triggerTarget||o).forEach((function(e){$.props.interactive?e.setAttribute("aria-expanded",$.state.isVisible&&e===te()?"true":"false"):e.removeAttribute("aria-expanded")}))}function ce(){ne().removeEventListener("mousemove",W),H=H.filter((function(e){return e!==W}))}function pe(e){if(!x.isTouch||!N&&"mousedown"!==e.type){var t=e.composedPath&&e.composedPath()[0]||e.target;if(!$.props.interactive||!O(z,t)){if(u($.props.triggerTarget||o).some((function(e){return O(e,t)}))){if(x.isTouch)return;if($.state.isVisible&&$.props.trigger.indexOf("click")>=0)return}else ae("onClickOutside",[$,e]);!0===$.props.hideOnClick&&($.clearDelayTimeouts(),$.hide(),I=!0,setTimeout((function(){I=!1})),$.state.isMounted||ve())}}}function fe(){N=!0}function le(){N=!1}function de(){var e=ne();e.addEventListener("mousedown",pe,!0),e.addEventListener("touchend",pe,t),e.addEventListener("touchstart",le,t),e.addEventListener("touchmove",fe,t)}function ve(){var e=ne();e.removeEventListener("mousedown",pe,!0),e.removeEventListener("touchend",pe,t),e.removeEventListener("touchstart",le,t),e.removeEventListener("touchmove",fe,t)}function me(e,t){var n=re().box;function r(e){e.target===n&&(E(n,"remove",r),t())}if(0===e)return t();E(n,"remove",T),E(n,"add",r),T=r}function ge(e,t,n){void 0===n&&(n=!1),u($.props.triggerTarget||o).forEach((function(r){r.addEventListener(e,t,n),F.push({node:r,eventType:e,handler:t,options:n})}))}function he(){var e;Z()&&(ge("touchstart",ye,{passive:!0}),ge("touchend",Ee,{passive:!0})),(e=$.props.trigger,e.split(/\s+/).filter(Boolean)).forEach((function(e){if("manual"!==e)switch(ge(e,ye),e){case"mouseenter":ge("mouseleave",Ee);break;case"focus":ge(D?"focusout":"blur",Oe);break;case"focusin":ge("focusout",Oe)}}))}function be(){F.forEach((function(e){var t=e.node,n=e.eventType,r=e.handler,o=e.options;t.removeEventListener(n,r,o)})),F=[]}function ye(e){var t,n=!1;if($.state.isEnabled&&!xe(e)&&!I){var r="focus"===(null==(t=C)?void 0:t.type);C=e,L=e.currentTarget,ue(),!$.state.isVisible&&m(e)&&H.forEach((function(t){return t(e)})),"click"===e.type&&($.props.trigger.indexOf("mouseenter")<0||V)&&!1!==$.props.hideOnClick&&$.state.isVisible?n=!0:Le(e),"click"===e.type&&(V=!n),n&&!r&&De(e)}}function we(e){var t=e.target,n=te().contains(t)||z.contains(t);"mousemove"===e.type&&n||function(e,t){var n=t.clientX,r=t.clientY;return e.every((function(e){var t=e.popperRect,o=e.popperState,i=e.props.interactiveBorder,a=p(o.placement),s=o.modifiersData.offset;if(!s)return!0;var u="bottom"===a?s.top.y:0,c="top"===a?s.bottom.y:0,f="right"===a?s.left.x:0,l="left"===a?s.right.x:0,d=t.top-r+u>i,v=r-t.bottom-c>i,m=t.left-n+f>i,g=n-t.right-l>i;return d||v||m||g}))}(Ae().concat(z).map((function(e){var t,n=null==(t=e._tippy.popperInstance)?void 0:t.state;return n?{popperRect:e.getBoundingClientRect(),popperState:n,props:M}:null})).filter(Boolean),e)&&(ce(),De(e))}function Ee(e){xe(e)||$.props.trigger.indexOf("click")>=0&&V||($.props.interactive?$.hideWithInteractivity(e):De(e))}function Oe(e){$.props.trigger.indexOf("focusin")<0&&e.target!==te()||$.props.interactive&&e.relatedTarget&&z.contains(e.relatedTarget)||De(e)}function xe(e){return!!x.isTouch&&Z()!==e.type.indexOf("touch")>=0}function Ce(){Te();var t=$.props,n=t.popperOptions,r=t.placement,i=t.offset,a=t.getReferenceClientRect,s=t.moveTransition,u=ee()?S(z).arrow:null,c=a?{getBoundingClientRect:a,contextElement:a.contextElement||te()}:o,p=[{name:"offset",options:{offset:i}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5}},{name:"computeStyles",options:{adaptive:!s}},{name:"$$tippy",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:function(e){var t=e.state;if(ee()){var n=re().box;["placement","reference-hidden","escaped"].forEach((function(e){"placement"===e?n.setAttribute("data-placement",t.placement):t.attributes.popper["data-popper-"+e]?n.setAttribute("data-"+e,""):n.removeAttribute("data-"+e)})),t.attributes.popper={}}}}];ee()&&u&&p.push({name:"arrow",options:{element:u,padding:3}}),p.push.apply(p,(null==n?void 0:n.modifiers)||[]),$.popperInstance=e.createPopper(c,z,Object.assign({},n,{placement:r,onFirstUpdate:A,modifiers:p}))}function Te(){$.popperInstance&&($.popperInstance.destroy(),$.popperInstance=null)}function Ae(){return f(z.querySelectorAll("[data-tippy-root]"))}function Le(e){$.clearDelayTimeouts(),e&&ae("onTrigger",[$,e]),de();var t=oe(!0),n=Q(),r=n[0],o=n[1];x.isTouch&&"hold"===r&&o&&(t=o),t?v=setTimeout((function(){$.show()}),t):$.show()}function De(e){if($.clearDelayTimeouts(),ae("onUntrigger",[$,e]),$.state.isVisible){if(!($.props.trigger.indexOf("mouseenter")>=0&&$.props.trigger.indexOf("click")>=0&&["mouseleave","mousemove"].indexOf(e.type)>=0&&V)){var t=oe(!1);t?g=setTimeout((function(){$.state.isVisible&&$.hide()}),t):h=requestAnimationFrame((function(){$.hide()}))}}else ve()}}function F(e,n){void 0===n&&(n={});var r=R.plugins.concat(n.plugins||[]);document.addEventListener("touchstart",T,t),window.addEventListener("blur",L);var o=Object.assign({},n,{plugins:r}),i=h(e).reduce((function(e,t){var n=t&&_(t,o);return n&&e.push(n),e}),[]);return v(e)?i[0]:i}F.defaultProps=R,F.setDefaultProps=function(e){Object.keys(e).forEach((function(t){R[t]=e[t]}))},F.currentInput=x;var W=Object.assign({},e.applyStyles,{effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow)}}),X={mouseover:"mouseenter",focusin:"focus",click:"click"};var Y={name:"animateFill",defaultValue:!1,fn:function(e){var t;if(null==(t=e.props.render)||!t.$$tippy)return{};var n=S(e.popper),r=n.box,o=n.content,i=e.props.animateFill?function(){var e=d();return e.className="tippy-backdrop",y([e],"hidden"),e}():null;return{onCreate:function(){i&&(r.insertBefore(i,r.firstElementChild),r.setAttribute("data-animatefill",""),r.style.overflow="hidden",e.setProps({arrow:!1,animation:"shift-away"}))},onMount:function(){if(i){var e=r.style.transitionDuration,t=Number(e.replace("ms",""));o.style.transitionDelay=Math.round(t/10)+"ms",i.style.transitionDuration=e,y([i],"visible")}},onShow:function(){i&&(i.style.transitionDuration="0ms")},onHide:function(){i&&y([i],"hidden")}}}};var $={clientX:0,clientY:0},q=[];function z(e){var t=e.clientX,n=e.clientY;$={clientX:t,clientY:n}}var J={name:"followCursor",defaultValue:!1,fn:function(e){var t=e.reference,n=w(e.props.triggerTarget||t),r=!1,o=!1,i=!0,a=e.props;function s(){return"initial"===e.props.followCursor&&e.state.isVisible}function u(){n.addEventListener("mousemove",f)}function c(){n.removeEventListener("mousemove",f)}function p(){r=!0,e.setProps({getReferenceClientRect:null}),r=!1}function f(n){var r=!n.target||t.contains(n.target),o=e.props.followCursor,i=n.clientX,a=n.clientY,s=t.getBoundingClientRect(),u=i-s.left,c=a-s.top;!r&&e.props.interactive||e.setProps({getReferenceClientRect:function(){var e=t.getBoundingClientRect(),n=i,r=a;"initial"===o&&(n=e.left+u,r=e.top+c);var s="horizontal"===o?e.top:r,p="vertical"===o?e.right:n,f="horizontal"===o?e.bottom:r,l="vertical"===o?e.left:n;return{width:p-l,height:f-s,top:s,right:p,bottom:f,left:l}}})}function l(){e.props.followCursor&&(q.push({instance:e,doc:n}),function(e){e.addEventListener("mousemove",z)}(n))}function d(){0===(q=q.filter((function(t){return t.instance!==e}))).filter((function(e){return e.doc===n})).length&&function(e){e.removeEventListener("mousemove",z)}(n)}return{onCreate:l,onDestroy:d,onBeforeUpdate:function(){a=e.props},onAfterUpdate:function(t,n){var i=n.followCursor;r||void 0!==i&&a.followCursor!==i&&(d(),i?(l(),!e.state.isMounted||o||s()||u()):(c(),p()))},onMount:function(){e.props.followCursor&&!o&&(i&&(f($),i=!1),s()||u())},onTrigger:function(e,t){m(t)&&($={clientX:t.clientX,clientY:t.clientY}),o="focus"===t.type},onHidden:function(){e.props.followCursor&&(p(),c(),i=!0)}}}};var G={name:"inlinePositioning",defaultValue:!1,fn:function(e){var t,n=e.reference;var r=-1,o=!1,i=[],a={name:"tippyInlinePositioning",enabled:!0,phase:"afterWrite",fn:function(o){var a=o.state;e.props.inlinePositioning&&(-1!==i.indexOf(a.placement)&&(i=[]),t!==a.placement&&-1===i.indexOf(a.placement)&&(i.push(a.placement),e.setProps({getReferenceClientRect:function(){return function(e){return function(e,t,n,r){if(n.length<2||null===e)return t;if(2===n.length&&r>=0&&n[0].left>n[1].right)return n[r]||t;switch(e){case"top":case"bottom":var o=n[0],i=n[n.length-1],a="top"===e,s=o.top,u=i.bottom,c=a?o.left:i.left,p=a?o.right:i.right;return{top:s,bottom:u,left:c,right:p,width:p-c,height:u-s};case"left":case"right":var f=Math.min.apply(Math,n.map((function(e){return e.left}))),l=Math.max.apply(Math,n.map((function(e){return e.right}))),d=n.filter((function(t){return"left"===e?t.left===f:t.right===l})),v=d[0].top,m=d[d.length-1].bottom;return{top:v,bottom:m,left:f,right:l,width:l-f,height:m-v};default:return t}}(p(e),n.getBoundingClientRect(),f(n.getClientRects()),r)}(a.placement)}})),t=a.placement)}};function s(){var t;o||(t=function(e,t){var n;return{popperOptions:Object.assign({},e.popperOptions,{modifiers:[].concat(((null==(n=e.popperOptions)?void 0:n.modifiers)||[]).filter((function(e){return e.name!==t.name})),[t])})}}(e.props,a),o=!0,e.setProps(t),o=!1)}return{onCreate:s,onAfterUpdate:s,onTrigger:function(t,n){if(m(n)){var o=f(e.reference.getClientRects()),i=o.find((function(e){return e.left-2<=n.clientX&&e.right+2>=n.clientX&&e.top-2<=n.clientY&&e.bottom+2>=n.clientY})),a=o.indexOf(i);r=a>-1?a:r}},onHidden:function(){r=-1}}}};var K={name:"sticky",defaultValue:!1,fn:function(e){var t=e.reference,n=e.popper;function r(t){return!0===e.props.sticky||e.props.sticky===t}var o=null,i=null;function a(){var s=r("reference")?(e.popperInstance?e.popperInstance.state.elements.reference:t).getBoundingClientRect():null,u=r("popper")?n.getBoundingClientRect():null;(s&&Q(o,s)||u&&Q(i,u))&&e.popperInstance&&e.popperInstance.update(),o=s,i=u,e.state.isMounted&&requestAnimationFrame(a)}return{onMount:function(){e.props.sticky&&a()}}}};function Q(e,t){return!e||!t||(e.top!==t.top||e.right!==t.right||e.bottom!==t.bottom||e.left!==t.left)}return F.setDefaultProps({plugins:[Y,J,G,K],render:N}),F.createSingleton=function(e,t){var n;void 0===t&&(t={});var r,o=e,i=[],a=[],c=t.overrides,p=[],f=!1;function l(){a=o.map((function(e){return u(e.props.triggerTarget||e.reference)})).reduce((function(e,t){return e.concat(t)}),[])}function v(){i=o.map((function(e){return e.reference}))}function m(e){o.forEach((function(t){e?t.enable():t.disable()}))}function g(e){return o.map((function(t){var n=t.setProps;return t.setProps=function(o){n(o),t.reference===r&&e.setProps(o)},function(){t.setProps=n}}))}function h(e,t){var n=a.indexOf(t);if(t!==r){r=t;var s=(c||[]).concat("content").reduce((function(e,t){return e[t]=o[n].props[t],e}),{});e.setProps(Object.assign({},s,{getReferenceClientRect:"function"==typeof s.getReferenceClientRect?s.getReferenceClientRect:function(){var e;return null==(e=i[n])?void 0:e.getBoundingClientRect()}}))}}m(!1),v(),l();var b={fn:function(){return{onDestroy:function(){m(!0)},onHidden:function(){r=null},onClickOutside:function(e){e.props.showOnCreate&&!f&&(f=!0,r=null)},onShow:function(e){e.props.showOnCreate&&!f&&(f=!0,h(e,i[0]))},onTrigger:function(e,t){h(e,t.currentTarget)}}}},y=F(d(),Object.assign({},s(t,["overrides"]),{plugins:[b].concat(t.plugins||[]),triggerTarget:a,popperOptions:Object.assign({},t.popperOptions,{modifiers:[].concat((null==(n=t.popperOptions)?void 0:n.modifiers)||[],[W])})})),w=y.show;y.show=function(e){if(w(),!r&&null==e)return h(y,i[0]);if(!r||null!=e){if("number"==typeof e)return i[e]&&h(y,i[e]);if(o.indexOf(e)>=0){var t=e.reference;return h(y,t)}return i.indexOf(e)>=0?h(y,e):void 0}},y.showNext=function(){var e=i[0];if(!r)return y.show(0);var t=i.indexOf(r);y.show(i[t+1]||e)},y.showPrevious=function(){var e=i[i.length-1];if(!r)return y.show(e);var t=i.indexOf(r),n=i[t-1]||e;y.show(n)};var E=y.setProps;return y.setProps=function(e){c=e.overrides||c,E(e)},y.setInstances=function(e){m(!0),p.forEach((function(e){return e()})),o=e,m(!1),v(),l(),p=g(y),y.setProps({triggerTarget:a})},p=g(y),y},F.delegate=function(e,n){var r=[],o=[],i=!1,a=n.target,c=s(n,["target"]),p=Object.assign({},c,{trigger:"manual",touch:!1}),f=Object.assign({touch:R.touch},c,{showOnCreate:!0}),l=F(e,p);function d(e){if(e.target&&!i){var t=e.target.closest(a);if(t){var r=t.getAttribute("data-tippy-trigger")||n.trigger||R.trigger;if(!t._tippy&&!("touchstart"===e.type&&"boolean"==typeof f.touch||"touchstart"!==e.type&&r.indexOf(X[e.type])<0)){var s=F(t,f);s&&(o=o.concat(s))}}}}function v(e,t,n,o){void 0===o&&(o=!1),e.addEventListener(t,n,o),r.push({node:e,eventType:t,handler:n,options:o})}return u(l).forEach((function(e){var n=e.destroy,a=e.enable,s=e.disable;e.destroy=function(e){void 0===e&&(e=!0),e&&o.forEach((function(e){e.destroy()})),o=[],r.forEach((function(e){var t=e.node,n=e.eventType,r=e.handler,o=e.options;t.removeEventListener(n,r,o)})),r=[],n()},e.enable=function(){a(),o.forEach((function(e){return e.enable()})),i=!1},e.disable=function(){s(),o.forEach((function(e){return e.disable()})),i=!0},function(e){var n=e.reference;v(n,"touchstart",d,t),v(n,"mouseover",d),v(n,"focusin",d),v(n,"click",d)}(e)})),l},F.hideAll=function(e){var t=void 0===e?{}:e,n=t.exclude,r=t.duration;U.forEach((function(e){var t=!1;if(n&&(t=g(n)?e.reference===n:e.popper===n.popper),!t){var o=e.props.duration;e.setProps({duration:r}),e.hide(),e.state.isDestroyed||e.setProps({duration:o})}}))},F.roundArrow='',F})); + diff --git a/docs/docs/site_libs/quarto-nav/headroom.min.js b/docs/docs/site_libs/quarto-nav/headroom.min.js new file mode 100644 index 0000000..b08f1df --- /dev/null +++ b/docs/docs/site_libs/quarto-nav/headroom.min.js @@ -0,0 +1,7 @@ +/*! + * headroom.js v0.12.0 - Give your page some headroom. Hide your header until you need it + * Copyright (c) 2020 Nick Williams - http://wicky.nillia.ms/headroom.js + * License: MIT + */ + +!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(t=t||self).Headroom=n()}(this,function(){"use strict";function t(){return"undefined"!=typeof window}function d(t){return function(t){return t&&t.document&&function(t){return 9===t.nodeType}(t.document)}(t)?function(t){var n=t.document,o=n.body,s=n.documentElement;return{scrollHeight:function(){return Math.max(o.scrollHeight,s.scrollHeight,o.offsetHeight,s.offsetHeight,o.clientHeight,s.clientHeight)},height:function(){return t.innerHeight||s.clientHeight||o.clientHeight},scrollY:function(){return void 0!==t.pageYOffset?t.pageYOffset:(s||o.parentNode||o).scrollTop}}}(t):function(t){return{scrollHeight:function(){return Math.max(t.scrollHeight,t.offsetHeight,t.clientHeight)},height:function(){return Math.max(t.offsetHeight,t.clientHeight)},scrollY:function(){return t.scrollTop}}}(t)}function n(t,s,e){var n,o=function(){var n=!1;try{var t={get passive(){n=!0}};window.addEventListener("test",t,t),window.removeEventListener("test",t,t)}catch(t){n=!1}return n}(),i=!1,r=d(t),l=r.scrollY(),a={};function c(){var t=Math.round(r.scrollY()),n=r.height(),o=r.scrollHeight();a.scrollY=t,a.lastScrollY=l,a.direction=ls.tolerance[a.direction],e(a),l=t,i=!1}function h(){i||(i=!0,n=requestAnimationFrame(c))}var u=!!o&&{passive:!0,capture:!1};return t.addEventListener("scroll",h,u),c(),{destroy:function(){cancelAnimationFrame(n),t.removeEventListener("scroll",h,u)}}}function o(t){return t===Object(t)?t:{down:t,up:t}}function s(t,n){n=n||{},Object.assign(this,s.options,n),this.classes=Object.assign({},s.options.classes,n.classes),this.elem=t,this.tolerance=o(this.tolerance),this.offset=o(this.offset),this.initialised=!1,this.frozen=!1}return s.prototype={constructor:s,init:function(){return s.cutsTheMustard&&!this.initialised&&(this.addClass("initial"),this.initialised=!0,setTimeout(function(t){t.scrollTracker=n(t.scroller,{offset:t.offset,tolerance:t.tolerance},t.update.bind(t))},100,this)),this},destroy:function(){this.initialised=!1,Object.keys(this.classes).forEach(this.removeClass,this),this.scrollTracker.destroy()},unpin:function(){!this.hasClass("pinned")&&this.hasClass("unpinned")||(this.addClass("unpinned"),this.removeClass("pinned"),this.onUnpin&&this.onUnpin.call(this))},pin:function(){this.hasClass("unpinned")&&(this.addClass("pinned"),this.removeClass("unpinned"),this.onPin&&this.onPin.call(this))},freeze:function(){this.frozen=!0,this.addClass("frozen")},unfreeze:function(){this.frozen=!1,this.removeClass("frozen")},top:function(){this.hasClass("top")||(this.addClass("top"),this.removeClass("notTop"),this.onTop&&this.onTop.call(this))},notTop:function(){this.hasClass("notTop")||(this.addClass("notTop"),this.removeClass("top"),this.onNotTop&&this.onNotTop.call(this))},bottom:function(){this.hasClass("bottom")||(this.addClass("bottom"),this.removeClass("notBottom"),this.onBottom&&this.onBottom.call(this))},notBottom:function(){this.hasClass("notBottom")||(this.addClass("notBottom"),this.removeClass("bottom"),this.onNotBottom&&this.onNotBottom.call(this))},shouldUnpin:function(t){return"down"===t.direction&&!t.top&&t.toleranceExceeded},shouldPin:function(t){return"up"===t.direction&&t.toleranceExceeded||t.top},addClass:function(t){this.elem.classList.add.apply(this.elem.classList,this.classes[t].split(" "))},removeClass:function(t){this.elem.classList.remove.apply(this.elem.classList,this.classes[t].split(" "))},hasClass:function(t){return this.classes[t].split(" ").every(function(t){return this.classList.contains(t)},this.elem)},update:function(t){t.isOutOfBounds||!0!==this.frozen&&(t.top?this.top():this.notTop(),t.bottom?this.bottom():this.notBottom(),this.shouldUnpin(t)?this.unpin():this.shouldPin(t)&&this.pin())}},s.options={tolerance:{up:0,down:0},offset:0,scroller:t()?window:null,classes:{frozen:"headroom--frozen",pinned:"headroom--pinned",unpinned:"headroom--unpinned",top:"headroom--top",notTop:"headroom--not-top",bottom:"headroom--bottom",notBottom:"headroom--not-bottom",initial:"headroom"}},s.cutsTheMustard=!!(t()&&function(){}.bind&&"classList"in document.documentElement&&Object.assign&&Object.keys&&requestAnimationFrame),s}); diff --git a/docs/docs/site_libs/quarto-nav/quarto-nav.js b/docs/docs/site_libs/quarto-nav/quarto-nav.js new file mode 100644 index 0000000..38cc430 --- /dev/null +++ b/docs/docs/site_libs/quarto-nav/quarto-nav.js @@ -0,0 +1,325 @@ +const headroomChanged = new CustomEvent("quarto-hrChanged", { + detail: {}, + bubbles: true, + cancelable: false, + composed: false, +}); + +const announceDismiss = () => { + const annEl = window.document.getElementById("quarto-announcement"); + if (annEl) { + annEl.remove(); + + const annId = annEl.getAttribute("data-announcement-id"); + window.localStorage.setItem(`quarto-announce-${annId}`, "true"); + } +}; + +const announceRegister = () => { + const annEl = window.document.getElementById("quarto-announcement"); + if (annEl) { + const annId = annEl.getAttribute("data-announcement-id"); + const isDismissed = + window.localStorage.getItem(`quarto-announce-${annId}`) || false; + if (isDismissed) { + announceDismiss(); + return; + } else { + annEl.classList.remove("hidden"); + } + + const actionEl = annEl.querySelector(".quarto-announcement-action"); + if (actionEl) { + actionEl.addEventListener("click", function (e) { + e.preventDefault(); + // Hide the bar immediately + announceDismiss(); + }); + } + } +}; + +window.document.addEventListener("DOMContentLoaded", function () { + let init = false; + + announceRegister(); + + // Manage the back to top button, if one is present. + let lastScrollTop = window.pageYOffset || document.documentElement.scrollTop; + const scrollDownBuffer = 5; + const scrollUpBuffer = 35; + const btn = document.getElementById("quarto-back-to-top"); + const hideBackToTop = () => { + btn.style.display = "none"; + }; + const showBackToTop = () => { + btn.style.display = "inline-block"; + }; + if (btn) { + window.document.addEventListener( + "scroll", + function () { + const currentScrollTop = + window.pageYOffset || document.documentElement.scrollTop; + + // Shows and hides the button 'intelligently' as the user scrolls + if (currentScrollTop - scrollDownBuffer > lastScrollTop) { + hideBackToTop(); + lastScrollTop = currentScrollTop <= 0 ? 0 : currentScrollTop; + } else if (currentScrollTop < lastScrollTop - scrollUpBuffer) { + showBackToTop(); + lastScrollTop = currentScrollTop <= 0 ? 0 : currentScrollTop; + } + + // Show the button at the bottom, hides it at the top + if (currentScrollTop <= 0) { + hideBackToTop(); + } else if ( + window.innerHeight + currentScrollTop >= + document.body.offsetHeight + ) { + showBackToTop(); + } + }, + false + ); + } + + function throttle(func, wait) { + var timeout; + return function () { + const context = this; + const args = arguments; + const later = function () { + clearTimeout(timeout); + timeout = null; + func.apply(context, args); + }; + + if (!timeout) { + timeout = setTimeout(later, wait); + } + }; + } + + function headerOffset() { + // Set an offset if there is are fixed top navbar + const headerEl = window.document.querySelector("header.fixed-top"); + if (headerEl) { + return headerEl.clientHeight; + } else { + return 0; + } + } + + function footerOffset() { + const footerEl = window.document.querySelector("footer.footer"); + if (footerEl) { + return footerEl.clientHeight; + } else { + return 0; + } + } + + function dashboardOffset() { + const dashboardNavEl = window.document.getElementById( + "quarto-dashboard-header" + ); + if (dashboardNavEl !== null) { + return dashboardNavEl.clientHeight; + } else { + return 0; + } + } + + function updateDocumentOffsetWithoutAnimation() { + updateDocumentOffset(false); + } + + function updateDocumentOffset(animated) { + // set body offset + const topOffset = headerOffset(); + const bodyOffset = topOffset + footerOffset() + dashboardOffset(); + const bodyEl = window.document.body; + bodyEl.setAttribute("data-bs-offset", topOffset); + bodyEl.style.paddingTop = topOffset + "px"; + + // deal with sidebar offsets + const sidebars = window.document.querySelectorAll( + ".sidebar, .headroom-target" + ); + sidebars.forEach((sidebar) => { + if (!animated) { + sidebar.classList.add("notransition"); + // Remove the no transition class after the animation has time to complete + setTimeout(function () { + sidebar.classList.remove("notransition"); + }, 201); + } + + if (window.Headroom && sidebar.classList.contains("sidebar-unpinned")) { + sidebar.style.top = "0"; + sidebar.style.maxHeight = "100vh"; + } else { + sidebar.style.top = topOffset + "px"; + sidebar.style.maxHeight = "calc(100vh - " + topOffset + "px)"; + } + }); + + // allow space for footer + const mainContainer = window.document.querySelector(".quarto-container"); + if (mainContainer) { + mainContainer.style.minHeight = "calc(100vh - " + bodyOffset + "px)"; + } + + // link offset + let linkStyle = window.document.querySelector("#quarto-target-style"); + if (!linkStyle) { + linkStyle = window.document.createElement("style"); + linkStyle.setAttribute("id", "quarto-target-style"); + window.document.head.appendChild(linkStyle); + } + while (linkStyle.firstChild) { + linkStyle.removeChild(linkStyle.firstChild); + } + if (topOffset > 0) { + linkStyle.appendChild( + window.document.createTextNode(` + section:target::before { + content: ""; + display: block; + height: ${topOffset}px; + margin: -${topOffset}px 0 0; + }`) + ); + } + if (init) { + window.dispatchEvent(headroomChanged); + } + init = true; + } + + // initialize headroom + var header = window.document.querySelector("#quarto-header"); + if (header && window.Headroom) { + const headroom = new window.Headroom(header, { + tolerance: 5, + onPin: function () { + const sidebars = window.document.querySelectorAll( + ".sidebar, .headroom-target" + ); + sidebars.forEach((sidebar) => { + sidebar.classList.remove("sidebar-unpinned"); + }); + updateDocumentOffset(); + }, + onUnpin: function () { + const sidebars = window.document.querySelectorAll( + ".sidebar, .headroom-target" + ); + sidebars.forEach((sidebar) => { + sidebar.classList.add("sidebar-unpinned"); + }); + updateDocumentOffset(); + }, + }); + headroom.init(); + + let frozen = false; + window.quartoToggleHeadroom = function () { + if (frozen) { + headroom.unfreeze(); + frozen = false; + } else { + headroom.freeze(); + frozen = true; + } + }; + } + + window.addEventListener( + "hashchange", + function (e) { + if ( + getComputedStyle(document.documentElement).scrollBehavior !== "smooth" + ) { + window.scrollTo(0, window.pageYOffset - headerOffset()); + } + }, + false + ); + + // Observe size changed for the header + const headerEl = window.document.querySelector("header.fixed-top"); + if (headerEl && window.ResizeObserver) { + const observer = new window.ResizeObserver(() => { + setTimeout(updateDocumentOffsetWithoutAnimation, 0); + }); + observer.observe(headerEl, { + attributes: true, + childList: true, + characterData: true, + }); + } else { + window.addEventListener( + "resize", + throttle(updateDocumentOffsetWithoutAnimation, 50) + ); + } + setTimeout(updateDocumentOffsetWithoutAnimation, 250); + + // fixup index.html links if we aren't on the filesystem + if (window.location.protocol !== "file:") { + const links = window.document.querySelectorAll("a"); + for (let i = 0; i < links.length; i++) { + if (links[i].href) { + links[i].dataset.originalHref = links[i].href; + links[i].href = links[i].href.replace(/\/index\.html/, "/"); + } + } + + // Fixup any sharing links that require urls + // Append url to any sharing urls + const sharingLinks = window.document.querySelectorAll( + "a.sidebar-tools-main-item, a.quarto-navigation-tool, a.quarto-navbar-tools, a.quarto-navbar-tools-item" + ); + for (let i = 0; i < sharingLinks.length; i++) { + const sharingLink = sharingLinks[i]; + const href = sharingLink.getAttribute("href"); + if (href) { + sharingLink.setAttribute( + "href", + href.replace("|url|", window.location.href) + ); + } + } + + // Scroll the active navigation item into view, if necessary + const navSidebar = window.document.querySelector("nav#quarto-sidebar"); + if (navSidebar) { + // Find the active item + const activeItem = navSidebar.querySelector("li.sidebar-item a.active"); + if (activeItem) { + // Wait for the scroll height and height to resolve by observing size changes on the + // nav element that is scrollable + const resizeObserver = new ResizeObserver((_entries) => { + // The bottom of the element + const elBottom = activeItem.offsetTop; + const viewBottom = navSidebar.scrollTop + navSidebar.clientHeight; + + // The element height and scroll height are the same, then we are still loading + if (viewBottom !== navSidebar.scrollHeight) { + // Determine if the item isn't visible and scroll to it + if (elBottom >= viewBottom) { + navSidebar.scrollTop = elBottom; + } + + // stop observing now since we've completed the scroll + resizeObserver.unobserve(navSidebar); + } + }); + resizeObserver.observe(navSidebar); + } + } + } +}); diff --git a/docs/docs/site_libs/quarto-search/autocomplete.umd.js b/docs/docs/site_libs/quarto-search/autocomplete.umd.js new file mode 100644 index 0000000..6090a55 --- /dev/null +++ b/docs/docs/site_libs/quarto-search/autocomplete.umd.js @@ -0,0 +1,3 @@ +/*! @algolia/autocomplete-js 1.19.1 | MIT License | © Algolia, Inc. and contributors | https://github.com/algolia/autocomplete */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@algolia/autocomplete-js"]={})}(this,(function(e){"use strict";function t(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function n(e){for(var n=1;n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function a(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,u,a=[],l=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(a.push(r.value),a.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=n.return&&(u=n.return(),Object(u)!==u))return}finally{if(c)throw o}}return a}}(e,t)||c(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e){return function(e){if(Array.isArray(e))return s(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||c(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){if(e){if("string"==typeof e)return s(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?s(e,t):void 0}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function x(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function N(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:20,n=[],r=0;r=3||2===n&&r>=4||1===n&&r>=10);function i(t,n,r){if(o&&void 0!==r){var i=r[0].__autocomplete_algoliaCredentials,u={"X-Algolia-Application-Id":i.appId,"X-Algolia-API-Key":i.apiKey};e.apply(void 0,[t].concat(D(n),[{headers:u}]))}else e.apply(void 0,[t].concat(D(n)))}return{init:function(t,n){e("init",{appId:t,apiKey:n})},setAuthenticatedUserToken:function(t){e("setAuthenticatedUserToken",t)},setUserToken:function(t){e("setUserToken",t)},clickedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&i("clickedObjectIDsAfterSearch",B(t),t[0].items)},clickedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&i("clickedObjectIDs",B(t),t[0].items)},clickedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r0&&e.apply(void 0,["clickedFilters"].concat(n))},convertedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&i("convertedObjectIDsAfterSearch",B(t),t[0].items)},convertedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&i("convertedObjectIDs",B(t),t[0].items)},convertedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r0&&e.apply(void 0,["convertedFilters"].concat(n))},viewedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&t.reduce((function(e,t){var n=t.items,r=k(t,A);return[].concat(D(e),D(q(N(N({},r),{},{objectIDs:(null==n?void 0:n.map((function(e){return e.objectID})))||r.objectIDs})).map((function(e){return{items:n,payload:e}}))))}),[]).forEach((function(e){var t=e.items;return i("viewedObjectIDs",[e.payload],t)}))},viewedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r0&&e.apply(void 0,["viewedFilters"].concat(n))}}}function L(e){var t=e.items.reduce((function(e,t){var n;return e[t.__autocomplete_indexName]=(null!==(n=e[t.__autocomplete_indexName])&&void 0!==n?n:[]).concat(t),e}),{});return Object.keys(t).map((function(e){return{index:e,items:t[e],algoliaSource:["autocomplete"]}}))}function F(e){return e.objectID&&e.__autocomplete_indexName&&e.__autocomplete_queryID}function U(e){return U="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},U(e)}function M(e){return function(e){if(Array.isArray(e))return H(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return H(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return H(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function H(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&z({onItemsChange:o,items:n,insights:c,state:t}))}}),0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(e){var t=e.setContext,n=e.onSelect,r=e.onActive;function o(e){t({algoliaInsightsPlugin:{__algoliaSearchParameters:W(W({},a?{clickAnalytics:!0}:{}),e?{userToken:X(e)}:{}),insights:c}})}l("addAlgoliaAgent","insights-plugin"),o(),l("onUserTokenChange",(function(e){o(e)})),l("getUserToken",null,(function(e,t){o(t)})),n((function(e){var t=e.item,n=e.state,r=e.event,o=e.source;F(t)&&i({state:n,event:r,insights:c,item:t,insightsEvents:[W({eventName:"Item Selected"},j({item:t,items:o.getItems().filter(F)}))]})})),r((function(e){var t=e.item,n=e.source,r=e.state,o=e.event;F(t)&&u({state:r,event:o,insights:c,item:t,insightsEvents:[W({eventName:"Item Active"},j({item:t,items:n.getItems().filter(F)}))]})}))},onStateChange:function(e){var t=e.state;m({state:t})},__autocomplete_pluginOptions:e}}function J(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1?arguments[1]:void 0;return[].concat(M(t),["autocomplete-internal"],M(null!==(e=n.algoliaInsightsPlugin)&&void 0!==e&&e.__automaticInsights?["autocomplete-automatic"]:[]))}function X(e){return"number"==typeof e?e.toString():e}function Y(e,t){var n=t;return{then:function(t,r){return Y(e.then(ee(t,n,e),ee(r,n,e)),n)},catch:function(t){return Y(e.catch(ee(t,n,e)),n)},finally:function(t){return t&&n.onCancelList.push(t),Y(e.finally(ee(t&&function(){return n.onCancelList=[],t()},n,e)),n)},cancel:function(){n.isCanceled=!0;var e=n.onCancelList;n.onCancelList=[],e.forEach((function(e){e()}))},isCanceled:function(){return!0===n.isCanceled}}}function Z(e){return Y(e,{isCanceled:!1,onCancelList:[]})}function ee(e,t,n){return e?function(n){return t.isCanceled?n:e(n)}:n}var te,ne=!0;function re(e,t,n,r){if(!n)return null;if(e<0&&(null===t||null!==r&&0===t))return n+e;var o=(null===t?-1:t)+e;return o<=-1||o>=n?null===r?null:0:o}function oe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function ie(e){for(var t=1;t=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,u=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return u=e.done,e},e:function(e){a=!0,i=e},f:function(){try{u||null==n.return||n.return()}finally{if(a)throw i}}}}function ce(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0?t.wait(Math.max.apply(Math,o)):void 0};function fe(e){var t=function(e){var t=e.collections.map((function(e){return e.items.length})).reduce((function(e,t,n){var r=(e[n-1]||0)+t;return e.push(r),e}),[]).reduce((function(t,n){return n<=e.activeItemId?t+1:t}),0);return e.collections[t]}(e);if(!t)return null;var n=t.items[function(e){for(var t=e.state,n=e.collection,r=!1,o=0,i=0;!1===r;){var u=t.collections[o];if(u===n){r=!0;break}i+=u.items.length,o++}return t.activeItemId-i}({state:e,collection:t})],r=t.source;return{item:n,itemInputValue:r.getItemInputValue({item:n,state:e}),itemUrl:r.getItemUrl({item:n,state:e}),source:r}}function pe(e,t,n){return[e,null==n?void 0:n.sourceId,t].filter(Boolean).join("-").replace(/\s/g,"")}var me=/((gt|sm)-|galaxy nexus)|samsung[- ]|samsungbrowser/i;function ve(e){return e.nativeEvent||e}function de(e){return de="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},de(e)}function ye(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function be(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==de(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==de(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===de(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ge(e,t,n){var r,o=t.initialState;return{getState:function(){return o},dispatch:function(r,i){var u=function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n0},reshape:function(e){return e.sources}},e),{},{id:null!==(n=e.id)&&void 0!==n?n:d(),plugins:o,initialState:Ae({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var n;null===(n=e.onStateChange)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onStateChange)||void 0===n?void 0:n.call(e,t)}))},onSubmit:function(t){var n;null===(n=e.onSubmit)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onSubmit)||void 0===n?void 0:n.call(e,t)}))},onReset:function(t){var n;null===(n=e.onReset)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onReset)||void 0===n?void 0:n.call(e,t)}))},getSources:function(n){return Promise.all([].concat(Pe(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return function(e,t){var n=[];return Promise.resolve(e(t)).then((function(e){return Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,n.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));n.push(e.sourceId);var t={getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:_,onResolve:_};Object.keys(t).forEach((function(e){t[e].__default=!0}));var r=ie(ie({},t),e);return Promise.resolve(r)})))}))}(e,n)}))).then((function(e){return m(e)})).then((function(e){return e.map((function(e){return Ae(Ae({},e),{},{onSelect:function(n){e.onSelect(n),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,n)}))},onActive:function(n){e.onActive(n),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,n)}))},onResolve:function(n){e.onResolve(n),t.forEach((function(e){var t;return null===(t=e.onResolve)||void 0===t?void 0:t.call(e,n)}))}})}))}))},navigator:Ae({navigate:function(e){var t=e.itemUrl;r.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,n=r.open(t,"_blank","noopener");null==n||n.focus()},navigateNewWindow:function(e){var t=e.itemUrl;r.open(t,"_blank","noopener")}},e.navigator)})}function Ce(e){return Ce="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ce(e)}function ke(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function xe(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var Je,Xe,Ye,Ze=null,et=(Je=-1,Xe=-1,Ye=void 0,function(e){var t=++Je;return Promise.resolve(e).then((function(e){return Ye&&t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function lt(e){return lt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},lt(e)}var ct=["props","refresh","store"],st=["inputElement","formElement","panelElement"],ft=["inputElement"],pt=["inputElement","maxLength"],mt=["source"],vt=["item","source"];function dt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function yt(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ht(e){var t=e.props,n=e.refresh,r=e.store,o=gt(e,ct);return{getEnvironmentProps:function(e){var n=e.inputElement,o=e.formElement,i=e.panelElement;function u(e){!r.getState().isOpen&&r.pendingRequests.isEmpty()||e.target===n||!1===[o,i].some((function(t){return n=t,r=e.target,n===r||n.contains(r);var n,r}))&&(r.dispatch("blur",null),t.debug||r.pendingRequests.cancelAll())}return yt({onTouchStart:u,onMouseDown:u,onTouchMove:function(e){!1!==r.getState().isOpen&&n===t.environment.document.activeElement&&e.target!==n&&n.blur()}},gt(e,st))},getRootProps:function(e){return yt({role:"combobox","aria-expanded":r.getState().isOpen,"aria-haspopup":"listbox","aria-controls":r.getState().isOpen?r.getState().collections.map((function(e){var n=e.source;return pe(t.id,"list",n)})).join(" "):void 0,"aria-labelledby":pe(t.id,"label")},e)},getFormProps:function(e){e.inputElement;var i=gt(e,ft),u=function(i){var u;t.onSubmit(yt({event:i,refresh:n,state:r.getState()},o)),r.dispatch("submit",null),null===(u=e.inputElement)||void 0===u||u.blur()};return yt({action:"",noValidate:!0,role:"search",onSubmit:function(e){e.preventDefault();var n=se(t.plugins,r.pendingRequests);void 0!==n?n.then((function(){return u(e)})):u(e)},onReset:function(i){var u;i.preventDefault(),t.onReset(yt({event:i,refresh:n,state:r.getState()},o)),r.dispatch("reset",null),null===(u=e.inputElement)||void 0===u||u.focus()}},i)},getLabelProps:function(e){return yt({htmlFor:pe(t.id,"input"),id:pe(t.id,"label")},e)},getInputProps:function(e){var i;function u(e){(t.openOnFocus||Boolean(r.getState().query))&&tt(yt({event:e,props:t,query:r.getState().completion||r.getState().query,refresh:n,store:r},o)),r.dispatch("focus",null)}var a=e||{};a.inputElement;var l=a.maxLength,c=void 0===l?512:l,s=gt(a,pt),f=fe(r.getState()),p=function(e){return Boolean(e&&e.match(me))}((null===(i=t.environment.navigator)||void 0===i?void 0:i.userAgent)||""),m=t.enterKeyHint||(null!=f&&f.itemUrl&&!p?"go":"search");return yt({"aria-autocomplete":"both","aria-activedescendant":r.getState().isOpen&&null!==r.getState().activeItemId?pe(t.id,"item-".concat(r.getState().activeItemId),null==f?void 0:f.source):void 0,"aria-controls":r.getState().isOpen?r.getState().collections.filter((function(e){return e.items.length>0})).map((function(e){var n=e.source;return pe(t.id,"list",n)})).join(" "):void 0,"aria-labelledby":pe(t.id,"label"),value:r.getState().completion||r.getState().query,id:pe(t.id,"input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:m,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:c,type:"search",onChange:function(e){var i=e.currentTarget.value;t.ignoreCompositionEvents&&ve(e).isComposing?o.setQuery(i):tt(yt({event:e,props:t,query:i.slice(0,c),refresh:n,store:r},o))},onCompositionEnd:function(e){tt(yt({event:e,props:t,query:e.currentTarget.value.slice(0,c),refresh:n,store:r},o))},onKeyDown:function(e){ve(e).isComposing||function(e){var t=e.event,n=e.props,r=e.refresh,o=e.store,i=at(e,rt);if("ArrowUp"===t.key||"ArrowDown"===t.key){var u=function(){var e=fe(o.getState()),t=n.environment.document.getElementById(pe(n.id,"item-".concat(o.getState().activeItemId),null==e?void 0:e.source));t&&(t.scrollIntoViewIfNeeded?t.scrollIntoViewIfNeeded(!1):t.scrollIntoView(!1))},a=function(){var e=fe(o.getState());if(null!==o.getState().activeItemId&&e){var n=e.item,u=e.itemInputValue,a=e.itemUrl,l=e.source;l.onActive(it({event:t,item:n,itemInputValue:u,itemUrl:a,refresh:r,source:l,state:o.getState()},i))}};t.preventDefault(),!1===o.getState().isOpen&&(n.openOnFocus||Boolean(o.getState().query))?tt(it({event:t,props:n,query:o.getState().query,refresh:r,store:o},i)).then((function(){o.dispatch(t.key,{nextActiveItemId:n.defaultActiveItemId}),a(),setTimeout(u,0)})):(o.dispatch(t.key,{}),a(),u())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length}))){var l=se(n.plugins,o.pendingRequests);return void(void 0!==l?l.then(o.pendingRequests.cancelAll):n.debug||o.pendingRequests.cancelAll())}t.preventDefault();var c=fe(o.getState()),s=c.item,f=c.itemInputValue,p=c.itemUrl,m=c.source;if(t.metaKey||t.ctrlKey)void 0!==p&&(m.onSelect(it({event:t,item:s,itemInputValue:f,itemUrl:p,refresh:r,source:m,state:o.getState()},i)),n.navigator.navigateNewTab({itemUrl:p,item:s,state:o.getState()}));else if(t.shiftKey)void 0!==p&&(m.onSelect(it({event:t,item:s,itemInputValue:f,itemUrl:p,refresh:r,source:m,state:o.getState()},i)),n.navigator.navigateNewWindow({itemUrl:p,item:s,state:o.getState()}));else if(t.altKey);else{if(void 0!==p)return m.onSelect(it({event:t,item:s,itemInputValue:f,itemUrl:p,refresh:r,source:m,state:o.getState()},i)),void n.navigator.navigate({itemUrl:p,item:s,state:o.getState()});tt(it({event:t,nextState:{isOpen:!1},props:n,query:f,refresh:r,store:o},i)).then((function(){m.onSelect(it({event:t,item:s,itemInputValue:f,itemUrl:p,refresh:r,source:m,state:o.getState()},i))}))}}}(yt({event:e,props:t,refresh:n,store:r},o))},onFocus:u,onBlur:_,onClick:function(n){e.inputElement!==t.environment.document.activeElement||r.getState().isOpen||u(n)}},s)},getPanelProps:function(e){return yt({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){r.dispatch("mouseleave",null)}},e)},getListProps:function(e){var n=e||{},r=n.source,o=gt(n,mt);return yt({role:"listbox","aria-labelledby":pe(t.id,"label"),id:pe(t.id,"list",r)},o)},getItemProps:function(e){var i=e.item,u=e.source,a=gt(e,vt);return yt({id:pe(t.id,"item-".concat(i.__autocomplete_id),u),role:"option","aria-selected":r.getState().activeItemId===i.__autocomplete_id,onMouseMove:function(e){if(i.__autocomplete_id!==r.getState().activeItemId){r.dispatch("mousemove",i.__autocomplete_id);var t=fe(r.getState());if(null!==r.getState().activeItemId&&t){var u=t.item,a=t.itemInputValue,l=t.itemUrl,c=t.source;c.onActive(yt({event:e,item:u,itemInputValue:a,itemUrl:l,refresh:n,source:c,state:r.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var a=u.getItemInputValue({item:i,state:r.getState()}),l=u.getItemUrl({item:i,state:r.getState()});(l?Promise.resolve():tt(yt({event:e,nextState:{isOpen:!1},props:t,query:a,refresh:n,store:r},o))).then((function(){u.onSelect(yt({event:e,item:i,itemInputValue:a,itemUrl:l,refresh:n,source:u,state:r.getState()},o))}))}},a)}}}function _t(e){return _t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_t(e)}function Ot(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function St(e){for(var t=1;t=5&&((o||!e&&5===r)&&(u.push(r,0,o,n),r=6),e&&(u.push(r,e,0,n),r=6)),o=""},l=0;l"===t?(r=1,o=""):o=t+o[0]:i?t===i?i="":o+=t:'"'===t||"'"===t?i=t:">"===t?(a(),r=1):r&&("="===t?(r=5,n=o,o=""):"/"===t&&(r<5||">"===e[l][c+1])?(a(),3===r&&(u=u[0]),r=u,(u=u[0]).push(2,0,r),r=0):" "===t||"\t"===t||"\n"===t||"\r"===t?(a(),r=2):o+=t),3===r&&"!--"===o&&(r=4,u=u[0])}return a(),u}(e)),t),arguments,[])).length>1?t:t[0]}var Ft=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-ClearIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","18"),n.setAttribute("height","18"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"),n.appendChild(r),n};function Ut(e,t){if("string"==typeof t){var n=e.document.querySelector(t);return"The element ".concat(JSON.stringify(t)," is not in the document."),n}return t}function Mt(){for(var e=arguments.length,t=new Array(e),n=0;n2&&(u.children=arguments.length>3?on.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(i in e.defaultProps)void 0===u[i]&&(u[i]=e.defaultProps[i]);return gn(e,u,r,o,null)}function gn(e,t,n,r,o){var i={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++an:o};return null==o&&null!=un.vnode&&un.vnode(i),i}function hn(e){return e.children}function _n(e,t){this.props=e,this.context=t}function On(e,t){if(null==t)return e.__?On(e.__,e.__.__k.indexOf(e)+1):null;for(var n;tt&&ln.sort(fn));Pn.__r=0}function wn(e,t,n,r,o,i,u,a,l,c){var s,f,p,m,v,d,y,b=r&&r.__k||mn,g=b.length;for(n.__k=[],s=0;s0?gn(m.type,m.props,m.key,m.ref?m.ref:null,m.__v):m)){if(m.__=n,m.__b=n.__b+1,null===(p=b[s])||p&&m.key==p.key&&m.type===p.type)b[s]=void 0;else for(f=0;f=0;t--)if((n=e.__k[t])&&(r=En(n)))return r;return null}function Dn(e,t,n){"-"===t[0]?e.setProperty(t,null==n?"":n):e[t]=null==n?"":"number"!=typeof n||vn.test(t)?n:n+"px"}function Cn(e,t,n,r,o){var i;e:if("style"===t)if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof r&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||Dn(e.style,t,"");if(n)for(t in n)r&&n[t]===r[t]||Dn(e.style,t,n[t])}else if("o"===t[0]&&"n"===t[1])i=t!==(t=t.replace(/Capture$/,"")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+i]=n,n?r||e.addEventListener(t,i?xn:kn,i):e.removeEventListener(t,i?xn:kn,i);else if("dangerouslySetInnerHTML"!==t){if(o)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!==t&&"height"!==t&&"href"!==t&&"list"!==t&&"form"!==t&&"tabIndex"!==t&&"download"!==t&&t in e)try{e[t]=null==n?"":n;break e}catch(e){}"function"==typeof n||(null==n||!1===n&&"-"!==t[4]?e.removeAttribute(t):e.setAttribute(t,n))}}function kn(e){return this.l[e.type+!1](un.event?un.event(e):e)}function xn(e){return this.l[e.type+!0](un.event?un.event(e):e)}function Nn(e,t,n,r,o,i,u,a,l){var c,s,f,p,m,v,d,y,b,g,h,_,O,S,j,P=t.type;if(void 0!==t.constructor)return null;null!=n.__h&&(l=n.__h,a=t.__e=n.__e,t.__h=null,i=[a]),(c=un.__b)&&c(t);try{e:if("function"==typeof P){if(y=t.props,b=(c=P.contextType)&&r[c.__c],g=c?b?b.props.value:c.__:r,n.__c?d=(s=t.__c=n.__c).__=s.__E:("prototype"in P&&P.prototype.render?t.__c=s=new P(y,g):(t.__c=s=new _n(y,g),s.constructor=P,s.render=Ln),b&&b.sub(s),s.props=y,s.state||(s.state={}),s.context=g,s.__n=r,f=s.__d=!0,s.__h=[],s._sb=[]),null==s.__s&&(s.__s=s.state),null!=P.getDerivedStateFromProps&&(s.__s==s.state&&(s.__s=dn({},s.__s)),dn(s.__s,P.getDerivedStateFromProps(y,s.__s))),p=s.props,m=s.state,s.__v=t,f)null==P.getDerivedStateFromProps&&null!=s.componentWillMount&&s.componentWillMount(),null!=s.componentDidMount&&s.__h.push(s.componentDidMount);else{if(null==P.getDerivedStateFromProps&&y!==p&&null!=s.componentWillReceiveProps&&s.componentWillReceiveProps(y,g),!s.__e&&null!=s.shouldComponentUpdate&&!1===s.shouldComponentUpdate(y,s.__s,g)||t.__v===n.__v){for(t.__v!==n.__v&&(s.props=y,s.state=s.__s,s.__d=!1),s.__e=!1,t.__e=n.__e,t.__k=n.__k,t.__k.forEach((function(e){e&&(e.__=t)})),h=0;h0&&void 0!==arguments[0]?arguments[0]:[];return{get:function(){return e},add:function(t){var n=e[e.length-1];(null==n?void 0:n.isHighlighted)===t.isHighlighted?e[e.length-1]={value:n.value+t.value,isHighlighted:n.isHighlighted}:e.push(t)}}}(n?[{value:n,isHighlighted:!1}]:[]);return t.forEach((function(e){var t=e.split(Un);r.add({value:t[0],isHighlighted:!0}),""!==t[1]&&r.add({value:t[1],isHighlighted:!1})})),r.get()}function Hn(e){return function(e){if(Array.isArray(e))return Vn(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Vn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Vn(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Vn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n",""":'"',"'":"'"},Kn=new RegExp(/\w/i),$n=/&(amp|quot|lt|gt|#39);/g,zn=RegExp($n.source);function Gn(e,t){var n,r,o,i=e[t],u=(null===(n=e[t+1])||void 0===n?void 0:n.isHighlighted)||!0,a=(null===(r=e[t-1])||void 0===r?void 0:r.isHighlighted)||!0;return Kn.test((o=i.value)&&zn.test(o)?o.replace($n,(function(e){return Qn[e]})):o)||a!==u?i.isHighlighted:a}function Jn(e){return Jn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Jn(e)}function Xn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Yn(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function vr(e){return function(e){if(Array.isArray(e))return dr(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return dr(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return dr(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function dr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0;if(!_.value.core.openOnFocus&&!t.query)return n;var r=Boolean(y.current||_.value.renderer.renderNoResults);return!n&&r||n},__autocomplete_metadata:{userAgents:wr,options:e}}))})),j=f(n({collections:[],completion:null,context:{},isOpen:!1,query:"",activeItemId:null,status:"idle"},_.value.core.initialState)),P={getEnvironmentProps:_.value.renderer.getEnvironmentProps,getFormProps:_.value.renderer.getFormProps,getInputProps:_.value.renderer.getInputProps,getItemProps:_.value.renderer.getItemProps,getLabelProps:_.value.renderer.getLabelProps,getListProps:_.value.renderer.getListProps,getPanelProps:_.value.renderer.getPanelProps,getRootProps:_.value.renderer.getRootProps},w={setActiveItemId:S.value.setActiveItemId,setQuery:S.value.setQuery,setCollections:S.value.setCollections,setIsOpen:S.value.setIsOpen,setStatus:S.value.setStatus,setContext:S.value.setContext,refresh:S.value.refresh,navigator:S.value.navigator},I=m((function(){return Lt.bind(_.value.renderer.renderer.createElement)})),A=m((function(){return rn({autocomplete:S.value,autocompleteScopeApi:w,classNames:_.value.renderer.classNames,environment:_.value.core.environment,isDetached:O.value,placeholder:_.value.core.placeholder,propGetters:P,setIsModalOpen:k,state:j.current,translations:_.value.renderer.translations})}));function E(){Jt(A.value.panel,{style:O.value?{}:Pr({panelPlacement:_.value.renderer.panelPlacement,container:A.value.root,form:A.value.form,environment:_.value.core.environment})})}function D(e){j.current=e;var t={autocomplete:S.value,autocompleteScopeApi:w,classNames:_.value.renderer.classNames,components:_.value.renderer.components,container:_.value.renderer.container,html:I.value,dom:A.value,panelContainer:O.value?A.value.detachedContainer:_.value.renderer.panelContainer,propGetters:P,state:j.current,renderer:_.value.renderer.renderer},r=!b(e)&&!y.current&&_.value.renderer.renderNoResults||_.value.renderer.render;!function(e){var t=e.autocomplete,r=e.autocompleteScopeApi,o=e.dom,i=e.propGetters,u=e.state;Xt(o.root,i.getRootProps(n({state:u,props:t.getRootProps({})},r))),Xt(o.input,i.getInputProps(n({state:u,props:t.getInputProps({inputElement:o.input}),inputElement:o.input},r))),Jt(o.label,{hidden:"stalled"===u.status}),Jt(o.loadingIndicator,{hidden:"stalled"!==u.status}),Jt(o.clearButton,{hidden:!u.query}),Jt(o.detachedSearchButtonQuery,{textContent:u.query}),Jt(o.detachedSearchButtonPlaceholder,{hidden:Boolean(u.query)})}(t),function(e,t){var r=t.autocomplete,o=t.autocompleteScopeApi,u=t.classNames,a=t.html,l=t.dom,c=t.panelContainer,s=t.propGetters,f=t.state,p=t.components,m=t.renderer;if(f.isOpen){c.contains(l.panel)||"loading"===f.status||c.appendChild(l.panel),l.panel.classList.toggle("aa-Panel--stalled","stalled"===f.status);var v=f.collections.filter((function(e){var t=e.source,n=e.items;return t.templates.noResults||n.length>0})).map((function(e,t){var l=e.source,c=e.items;return m.createElement("section",{key:t,className:u.source,"data-autocomplete-source-id":l.sourceId},l.templates.header&&m.createElement("div",{className:u.sourceHeader},l.templates.header({components:p,createElement:m.createElement,Fragment:m.Fragment,items:c,source:l,state:f,html:a})),l.templates.noResults&&0===c.length?m.createElement("div",{className:u.sourceNoResults},l.templates.noResults({components:p,createElement:m.createElement,Fragment:m.Fragment,source:l,state:f,html:a})):m.createElement("ul",i({className:u.list},s.getListProps(n({state:f,props:r.getListProps({source:l})},o))),c.map((function(e){var t=r.getItemProps({item:e,source:l});return m.createElement("li",i({key:t.id,className:u.item},s.getItemProps(n({state:f,props:t},o))),l.templates.item({components:p,createElement:m.createElement,Fragment:m.Fragment,item:e,state:f,html:a}))}))),l.templates.footer&&m.createElement("div",{className:u.sourceFooter},l.templates.footer({components:p,createElement:m.createElement,Fragment:m.Fragment,items:c,source:l,state:f,html:a})))})),d=m.createElement(m.Fragment,null,m.createElement("div",{className:u.panelLayout},v),m.createElement("div",{className:"aa-GradientBottom"})),y=v.reduce((function(e,t){return e[t.props["data-autocomplete-source-id"]]=t,e}),{});e(n(n({children:d,state:f,sections:v,elements:y},m),{},{components:p,html:a},o),l.panel)}else c.contains(l.panel)&&c.removeChild(l.panel)}(r,t)}function C(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};l();var t=_.value.renderer,n=t.components,r=u(t,Ir);g.current=Vt(r,_.value.core,{components:Wt(n,(function(e){return!e.value.hasOwnProperty("__autocomplete_componentName")})),initialState:j.current},e),v(),c(),S.value.refresh().then((function(){D(j.current)}))}function k(e){e!==_.value.core.environment.document.body.contains(A.value.detachedOverlay)&&(e?(_.value.core.environment.document.body.appendChild(A.value.detachedOverlay),_.value.core.environment.document.body.classList.add("aa-Detached"),A.value.input.focus()):(_.value.core.environment.document.body.removeChild(A.value.detachedOverlay),_.value.core.environment.document.body.classList.remove("aa-Detached")))}return a((function(){var e=S.value.getEnvironmentProps({formElement:A.value.form,panelElement:A.value.panel,inputElement:A.value.input});return Jt(_.value.core.environment,e),function(){Jt(_.value.core.environment,Object.keys(e).reduce((function(e,t){return n(n({},e),{},o({},t,void 0))}),{}))}})),a((function(){var e=O.value?_.value.core.environment.document.body:_.value.renderer.panelContainer,t=O.value?A.value.detachedOverlay:A.value.panel;return O.value&&j.current.isOpen&&k(!0),D(j.current),function(){e.contains(t)&&(e.removeChild(t),e.classList.remove("aa-Detached"))}})),a((function(){var e=_.value.renderer.container;return e.appendChild(A.value.root),function(){e.removeChild(A.value.root)}})),a((function(){var e=p((function(e){D(e.state)}),0);return h.current=function(t){var n=t.state,r=t.prevState;(O.value&&r.isOpen!==n.isOpen&&k(n.isOpen),O.value||!n.isOpen||r.isOpen||E(),n.query!==r.query)&&_.value.core.environment.document.querySelectorAll(".aa-Panel--scrollable").forEach((function(e){0!==e.scrollTop&&(e.scrollTop=0)}));e({state:n})},function(){h.current=void 0}})),a((function(){var e=p((function(){var e=O.value;O.value=_.value.core.environment.matchMedia(_.value.renderer.detachedMediaQuery).matches,e!==O.value?C({}):requestAnimationFrame(E)}),20);return _.value.core.environment.addEventListener("resize",e),function(){_.value.core.environment.removeEventListener("resize",e)}})),a((function(){if(!O.value)return function(){};function e(e){A.value.detachedContainer.classList.toggle("aa-DetachedContainer--modal",e)}function t(t){e(t.matches)}var n=_.value.core.environment.matchMedia(getComputedStyle(_.value.core.environment.document.documentElement).getPropertyValue("--aa-detached-modal-media-query"));e(n.matches);var r=Boolean(n.addEventListener);return r?n.addEventListener("change",t):n.addListener(t),function(){r?n.removeEventListener("change",t):n.removeListener(t)}})),a((function(){return requestAnimationFrame(E),function(){}})),n(n({},w),{},{update:C,destroy:function(){l()}})},e.getAlgoliaFacets=function(e){var t=Ar({transformResponse:function(e){return e.facetHits}}),r=e.queries.map((function(e){return n(n({},e),{},{type:"facet"})}));return t(n(n({},e),{},{queries:r}))},e.getAlgoliaResults=Er,Object.defineProperty(e,"__esModule",{value:!0})})); + diff --git a/docs/docs/site_libs/quarto-search/fuse.min.js b/docs/docs/site_libs/quarto-search/fuse.min.js new file mode 100644 index 0000000..adc2835 --- /dev/null +++ b/docs/docs/site_libs/quarto-search/fuse.min.js @@ -0,0 +1,9 @@ +/** + * Fuse.js v6.6.2 - Lightweight fuzzy-search (http://fusejs.io) + * + * Copyright (c) 2022 Kiro Risk (http://kiro.me) + * All Rights Reserved. Apache Software License 2.0 + * + * http://www.apache.org/licenses/LICENSE-2.0 + */ +var e,t;e=this,t=function(){"use strict";function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function t(t){for(var n=1;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:3,n=new Map,r=Math.pow(10,t);return{get:function(t){var i=t.match(C).length;if(n.has(i))return n.get(i);var o=1/Math.pow(i,.5*e),c=parseFloat(Math.round(o*r)/r);return n.set(i,c),c},clear:function(){n.clear()}}}var $=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.getFn,i=void 0===n?I.getFn:n,o=t.fieldNormWeight,c=void 0===o?I.fieldNormWeight:o;r(this,e),this.norm=E(c,3),this.getFn=i,this.isCreated=!1,this.setIndexRecords()}return o(e,[{key:"setSources",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.docs=e}},{key:"setIndexRecords",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.records=e}},{key:"setKeys",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.keys=t,this._keysMap={},t.forEach((function(t,n){e._keysMap[t.id]=n}))}},{key:"create",value:function(){var e=this;!this.isCreated&&this.docs.length&&(this.isCreated=!0,g(this.docs[0])?this.docs.forEach((function(t,n){e._addString(t,n)})):this.docs.forEach((function(t,n){e._addObject(t,n)})),this.norm.clear())}},{key:"add",value:function(e){var t=this.size();g(e)?this._addString(e,t):this._addObject(e,t)}},{key:"removeAt",value:function(e){this.records.splice(e,1);for(var t=e,n=this.size();t2&&void 0!==arguments[2]?arguments[2]:{},r=n.getFn,i=void 0===r?I.getFn:r,o=n.fieldNormWeight,c=void 0===o?I.fieldNormWeight:o,a=new $({getFn:i,fieldNormWeight:c});return a.setKeys(e.map(_)),a.setSources(t),a.create(),a}function R(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.errors,r=void 0===n?0:n,i=t.currentLocation,o=void 0===i?0:i,c=t.expectedLocation,a=void 0===c?0:c,s=t.distance,u=void 0===s?I.distance:s,h=t.ignoreLocation,l=void 0===h?I.ignoreLocation:h,f=r/e.length;if(l)return f;var d=Math.abs(a-o);return u?f+d/u:d?1:f}function N(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:I.minMatchCharLength,n=[],r=-1,i=-1,o=0,c=e.length;o=t&&n.push([r,i]),r=-1)}return e[o-1]&&o-r>=t&&n.push([r,o-1]),n}var P=32;function W(e){for(var t={},n=0,r=e.length;n1&&void 0!==arguments[1]?arguments[1]:{},o=i.location,c=void 0===o?I.location:o,a=i.threshold,s=void 0===a?I.threshold:a,u=i.distance,h=void 0===u?I.distance:u,l=i.includeMatches,f=void 0===l?I.includeMatches:l,d=i.findAllMatches,v=void 0===d?I.findAllMatches:d,g=i.minMatchCharLength,y=void 0===g?I.minMatchCharLength:g,p=i.isCaseSensitive,m=void 0===p?I.isCaseSensitive:p,k=i.ignoreLocation,M=void 0===k?I.ignoreLocation:k;if(r(this,e),this.options={location:c,threshold:s,distance:h,includeMatches:f,findAllMatches:v,minMatchCharLength:y,isCaseSensitive:m,ignoreLocation:M},this.pattern=m?t:t.toLowerCase(),this.chunks=[],this.pattern.length){var b=function(e,t){n.chunks.push({pattern:e,alphabet:W(e),startIndex:t})},x=this.pattern.length;if(x>P){for(var w=0,L=x%P,S=x-L;w3&&void 0!==arguments[3]?arguments[3]:{},i=r.location,o=void 0===i?I.location:i,c=r.distance,a=void 0===c?I.distance:c,s=r.threshold,u=void 0===s?I.threshold:s,h=r.findAllMatches,l=void 0===h?I.findAllMatches:h,f=r.minMatchCharLength,d=void 0===f?I.minMatchCharLength:f,v=r.includeMatches,g=void 0===v?I.includeMatches:v,y=r.ignoreLocation,p=void 0===y?I.ignoreLocation:y;if(t.length>P)throw new Error(w(P));for(var m,k=t.length,M=e.length,b=Math.max(0,Math.min(o,M)),x=u,L=b,S=d>1||g,_=S?Array(M):[];(m=e.indexOf(t,L))>-1;){var O=R(t,{currentLocation:m,expectedLocation:b,distance:a,ignoreLocation:p});if(x=Math.min(O,x),L=m+k,S)for(var j=0;j=z;q-=1){var B=q-1,J=n[e.charAt(B)];if(S&&(_[B]=+!!J),K[q]=(K[q+1]<<1|1)&J,F&&(K[q]|=(A[q+1]|A[q])<<1|1|A[q+1]),K[q]&$&&(C=R(t,{errors:F,currentLocation:B,expectedLocation:b,distance:a,ignoreLocation:p}))<=x){if(x=C,(L=B)<=b)break;z=Math.max(1,2*b-L)}}if(R(t,{errors:F+1,currentLocation:b,expectedLocation:b,distance:a,ignoreLocation:p})>x)break;A=K}var U={isMatch:L>=0,score:Math.max(.001,C)};if(S){var V=N(_,d);V.length?g&&(U.indices=V):U.isMatch=!1}return U}(e,n,i,{location:c+o,distance:a,threshold:s,findAllMatches:u,minMatchCharLength:h,includeMatches:r,ignoreLocation:l}),p=y.isMatch,m=y.score,k=y.indices;p&&(g=!0),v+=m,p&&k&&(d=[].concat(f(d),f(k)))}));var y={isMatch:g,score:g?v/this.chunks.length:1};return g&&r&&(y.indices=d),y}}]),e}(),z=function(){function e(t){r(this,e),this.pattern=t}return o(e,[{key:"search",value:function(){}}],[{key:"isMultiMatch",value:function(e){return D(e,this.multiRegex)}},{key:"isSingleMatch",value:function(e){return D(e,this.singleRegex)}}]),e}();function D(e,t){var n=e.match(t);return n?n[1]:null}var K=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e===this.pattern;return{isMatch:t,score:t?0:1,indices:[0,this.pattern.length-1]}}}],[{key:"type",get:function(){return"exact"}},{key:"multiRegex",get:function(){return/^="(.*)"$/}},{key:"singleRegex",get:function(){return/^=(.*)$/}}]),n}(z),q=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=-1===e.indexOf(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-exact"}},{key:"multiRegex",get:function(){return/^!"(.*)"$/}},{key:"singleRegex",get:function(){return/^!(.*)$/}}]),n}(z),B=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e.startsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,this.pattern.length-1]}}}],[{key:"type",get:function(){return"prefix-exact"}},{key:"multiRegex",get:function(){return/^\^"(.*)"$/}},{key:"singleRegex",get:function(){return/^\^(.*)$/}}]),n}(z),J=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=!e.startsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-prefix-exact"}},{key:"multiRegex",get:function(){return/^!\^"(.*)"$/}},{key:"singleRegex",get:function(){return/^!\^(.*)$/}}]),n}(z),U=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e.endsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[e.length-this.pattern.length,e.length-1]}}}],[{key:"type",get:function(){return"suffix-exact"}},{key:"multiRegex",get:function(){return/^"(.*)"\$$/}},{key:"singleRegex",get:function(){return/^(.*)\$$/}}]),n}(z),V=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=!e.endsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-suffix-exact"}},{key:"multiRegex",get:function(){return/^!"(.*)"\$$/}},{key:"singleRegex",get:function(){return/^!(.*)\$$/}}]),n}(z),G=function(e){a(n,e);var t=l(n);function n(e){var i,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},c=o.location,a=void 0===c?I.location:c,s=o.threshold,u=void 0===s?I.threshold:s,h=o.distance,l=void 0===h?I.distance:h,f=o.includeMatches,d=void 0===f?I.includeMatches:f,v=o.findAllMatches,g=void 0===v?I.findAllMatches:v,y=o.minMatchCharLength,p=void 0===y?I.minMatchCharLength:y,m=o.isCaseSensitive,k=void 0===m?I.isCaseSensitive:m,M=o.ignoreLocation,b=void 0===M?I.ignoreLocation:M;return r(this,n),(i=t.call(this,e))._bitapSearch=new T(e,{location:a,threshold:u,distance:l,includeMatches:d,findAllMatches:g,minMatchCharLength:p,isCaseSensitive:k,ignoreLocation:b}),i}return o(n,[{key:"search",value:function(e){return this._bitapSearch.searchIn(e)}}],[{key:"type",get:function(){return"fuzzy"}},{key:"multiRegex",get:function(){return/^"(.*)"$/}},{key:"singleRegex",get:function(){return/^(.*)$/}}]),n}(z),H=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){for(var t,n=0,r=[],i=this.pattern.length;(t=e.indexOf(this.pattern,n))>-1;)n=t+i,r.push([t,n-1]);var o=!!r.length;return{isMatch:o,score:o?0:1,indices:r}}}],[{key:"type",get:function(){return"include"}},{key:"multiRegex",get:function(){return/^'"(.*)"$/}},{key:"singleRegex",get:function(){return/^'(.*)$/}}]),n}(z),Q=[K,H,B,J,V,U,q,G],X=Q.length,Y=/ +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/;function Z(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.split("|").map((function(e){for(var n=e.trim().split(Y).filter((function(e){return e&&!!e.trim()})),r=[],i=0,o=n.length;i1&&void 0!==arguments[1]?arguments[1]:{},i=n.isCaseSensitive,o=void 0===i?I.isCaseSensitive:i,c=n.includeMatches,a=void 0===c?I.includeMatches:c,s=n.minMatchCharLength,u=void 0===s?I.minMatchCharLength:s,h=n.ignoreLocation,l=void 0===h?I.ignoreLocation:h,f=n.findAllMatches,d=void 0===f?I.findAllMatches:f,v=n.location,g=void 0===v?I.location:v,y=n.threshold,p=void 0===y?I.threshold:y,m=n.distance,k=void 0===m?I.distance:m;r(this,e),this.query=null,this.options={isCaseSensitive:o,includeMatches:a,minMatchCharLength:u,findAllMatches:d,ignoreLocation:l,location:g,threshold:p,distance:k},this.pattern=o?t:t.toLowerCase(),this.query=Z(this.pattern,this.options)}return o(e,[{key:"searchIn",value:function(e){var t=this.query;if(!t)return{isMatch:!1,score:1};var n=this.options,r=n.includeMatches;e=n.isCaseSensitive?e:e.toLowerCase();for(var i=0,o=[],c=0,a=0,s=t.length;a-1&&(n.refIndex=e.idx),t.matches.push(n)}}))}function ve(e,t){t.score=e.score}function ge(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.includeMatches,i=void 0===r?I.includeMatches:r,o=n.includeScore,c=void 0===o?I.includeScore:o,a=[];return i&&a.push(de),c&&a.push(ve),e.map((function(e){var n=e.idx,r={item:t[n],refIndex:n};return a.length&&a.forEach((function(t){t(e,r)})),r}))}var ye=function(){function e(n){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments.length>2?arguments[2]:void 0;r(this,e),this.options=t(t({},I),i),this.options.useExtendedSearch,this._keyStore=new S(this.options.keys),this.setCollection(n,o)}return o(e,[{key:"setCollection",value:function(e,t){if(this._docs=e,t&&!(t instanceof $))throw new Error("Incorrect 'index' type");this._myIndex=t||F(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}},{key:"add",value:function(e){k(e)&&(this._docs.push(e),this._myIndex.add(e))}},{key:"remove",value:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){return!1},t=[],n=0,r=this._docs.length;n1&&void 0!==arguments[1]?arguments[1]:{},n=t.limit,r=void 0===n?-1:n,i=this.options,o=i.includeMatches,c=i.includeScore,a=i.shouldSort,s=i.sortFn,u=i.ignoreFieldNorm,h=g(e)?g(this._docs[0])?this._searchStringList(e):this._searchObjectList(e):this._searchLogical(e);return fe(h,{ignoreFieldNorm:u}),a&&h.sort(s),y(r)&&r>-1&&(h=h.slice(0,r)),ge(h,this._docs,{includeMatches:o,includeScore:c})}},{key:"_searchStringList",value:function(e){var t=re(e,this.options),n=this._myIndex.records,r=[];return n.forEach((function(e){var n=e.v,i=e.i,o=e.n;if(k(n)){var c=t.searchIn(n),a=c.isMatch,s=c.score,u=c.indices;a&&r.push({item:n,idx:i,matches:[{score:s,value:n,norm:o,indices:u}]})}})),r}},{key:"_searchLogical",value:function(e){var t=this,n=function(e,t){var n=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).auto,r=void 0===n||n,i=function e(n){var i=Object.keys(n),o=ue(n);if(!o&&i.length>1&&!se(n))return e(le(n));if(he(n)){var c=o?n[ce]:i[0],a=o?n[ae]:n[c];if(!g(a))throw new Error(x(c));var s={keyId:j(c),pattern:a};return r&&(s.searcher=re(a,t)),s}var u={children:[],operator:i[0]};return i.forEach((function(t){var r=n[t];v(r)&&r.forEach((function(t){u.children.push(e(t))}))})),u};return se(e)||(e=le(e)),i(e)}(e,this.options),r=function e(n,r,i){if(!n.children){var o=n.keyId,c=n.searcher,a=t._findMatches({key:t._keyStore.get(o),value:t._myIndex.getValueForItemAtKeyId(r,o),searcher:c});return a&&a.length?[{idx:i,item:r,matches:a}]:[]}for(var s=[],u=0,h=n.children.length;u1&&void 0!==arguments[1]?arguments[1]:{},n=t.getFn,r=void 0===n?I.getFn:n,i=t.fieldNormWeight,o=void 0===i?I.fieldNormWeight:i,c=e.keys,a=e.records,s=new $({getFn:r,fieldNormWeight:o});return s.setKeys(c),s.setIndexRecords(a),s},ye.config=I,function(){ne.push.apply(ne,arguments)}(te),ye},"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Fuse=t(); \ No newline at end of file diff --git a/docs/docs/site_libs/quarto-search/quarto-search.js b/docs/docs/site_libs/quarto-search/quarto-search.js new file mode 100644 index 0000000..d788a95 --- /dev/null +++ b/docs/docs/site_libs/quarto-search/quarto-search.js @@ -0,0 +1,1290 @@ +const kQueryArg = "q"; +const kResultsArg = "show-results"; + +// If items don't provide a URL, then both the navigator and the onSelect +// function aren't called (and therefore, the default implementation is used) +// +// We're using this sentinel URL to signal to those handlers that this +// item is a more item (along with the type) and can be handled appropriately +const kItemTypeMoreHref = "0767FDFD-0422-4E5A-BC8A-3BE11E5BBA05"; + +window.document.addEventListener("DOMContentLoaded", function (_event) { + // Ensure that search is available on this page. If it isn't, + // should return early and not do anything + var searchEl = window.document.getElementById("quarto-search"); + if (!searchEl) return; + + const { autocomplete } = window["@algolia/autocomplete-js"]; + + let quartoSearchOptions = {}; + let language = {}; + const searchOptionEl = window.document.getElementById( + "quarto-search-options" + ); + if (searchOptionEl) { + const jsonStr = searchOptionEl.textContent; + quartoSearchOptions = JSON.parse(jsonStr); + language = quartoSearchOptions.language; + } + + // note the search mode + if (quartoSearchOptions.type === "overlay") { + searchEl.classList.add("type-overlay"); + } else { + searchEl.classList.add("type-textbox"); + } + + // Used to determine highlighting behavior for this page + // A `q` query param is expected when the user follows a search + // to this page + const currentUrl = new URL(window.location); + const query = currentUrl.searchParams.get(kQueryArg); + const showSearchResults = currentUrl.searchParams.get(kResultsArg); + const mainEl = window.document.querySelector("main"); + + // highlight matches on the page + if (query && mainEl) { + // perform any highlighting + highlight(escapeRegExp(query), mainEl); + + // fix up the URL to remove the q query param + const replacementUrl = new URL(window.location); + replacementUrl.searchParams.delete(kQueryArg); + window.history.replaceState({}, "", replacementUrl); + } + + // function to clear highlighting on the page when the search query changes + // (e.g. if the user edits the query or clears it) + let highlighting = true; + const resetHighlighting = (searchTerm) => { + if (mainEl && highlighting && query && searchTerm !== query) { + clearHighlight(query, mainEl); + highlighting = false; + } + }; + + // Clear search highlighting when the user scrolls sufficiently + const resetFn = () => { + resetHighlighting(""); + window.removeEventListener("quarto-hrChanged", resetFn); + window.removeEventListener("quarto-sectionChanged", resetFn); + }; + + // Register this event after the initial scrolling and settling of events + // on the page + window.addEventListener("quarto-hrChanged", resetFn); + window.addEventListener("quarto-sectionChanged", resetFn); + + // Responsively switch to overlay mode if the search is present on the navbar + // Note that switching the sidebar to overlay mode requires more coordinate (not just + // the media query since we generate different HTML for sidebar overlays than we do + // for sidebar input UI) + const detachedMediaQuery = + quartoSearchOptions.type === "overlay" ? "all" : "(max-width: 991px)"; + + // If configured, include the analytics client to send insights + const plugins = configurePlugins(quartoSearchOptions); + + let lastState = null; + const { setIsOpen, setQuery, setCollections } = autocomplete({ + container: searchEl, + detachedMediaQuery: detachedMediaQuery, + defaultActiveItemId: 0, + panelContainer: "#quarto-search-results", + panelPlacement: quartoSearchOptions["panel-placement"], + debug: false, + openOnFocus: true, + plugins, + classNames: { + form: "d-flex", + }, + placeholder: language["search-text-placeholder"], + translations: { + clearButtonTitle: language["search-clear-button-title"], + detachedCancelButtonText: language["search-detached-cancel-button-title"], + submitButtonTitle: language["search-submit-button-title"], + }, + initialState: { + query, + }, + getItemUrl({ item }) { + return item.href; + }, + onStateChange({ state }) { + // If this is a file URL, note that + + // Perhaps reset highlighting + resetHighlighting(state.query); + + // If the panel just opened, ensure the panel is positioned properly + if (state.isOpen) { + if (lastState && !lastState.isOpen) { + setTimeout(() => { + positionPanel(quartoSearchOptions["panel-placement"]); + }, 150); + } + } + + // Perhaps show the copy link + showCopyLink(state.query, quartoSearchOptions); + + lastState = state; + }, + reshape({ sources, state }) { + return sources.map((source) => { + try { + const items = source.getItems(); + + // Validate the items + validateItems(items); + + // group the items by document + const groupedItems = new Map(); + items.forEach((item) => { + const hrefParts = item.href.split("#"); + const baseHref = hrefParts[0]; + const isDocumentItem = hrefParts.length === 1; + + const items = groupedItems.get(baseHref); + if (!items) { + groupedItems.set(baseHref, [item]); + } else { + // If the href for this item matches the document + // exactly, place this item first as it is the item that represents + // the document itself + if (isDocumentItem) { + items.unshift(item); + } else { + items.push(item); + } + groupedItems.set(baseHref, items); + } + }); + + const reshapedItems = []; + let count = 1; + for (const [_key, value] of groupedItems) { + const firstItem = value[0]; + reshapedItems.push({ + ...firstItem, + type: kItemTypeDoc, + }); + + const collapseMatches = quartoSearchOptions["collapse-after"]; + const collapseCount = + typeof collapseMatches === "number" ? collapseMatches : 1; + + if (value.length > 1) { + const target = `search-more-${count}`; + const isExpanded = + state.context.expanded && + state.context.expanded.includes(target); + + const remainingCount = value.length - collapseCount; + + for (let i = 1; i < value.length; i++) { + if (collapseMatches && i === collapseCount) { + reshapedItems.push({ + target, + title: isExpanded + ? language["search-hide-matches-text"] + : remainingCount === 1 + ? `${remainingCount} ${language["search-more-match-text"]}` + : `${remainingCount} ${language["search-more-matches-text"]}`, + type: kItemTypeMore, + href: kItemTypeMoreHref, + }); + } + + if (isExpanded || !collapseMatches || i < collapseCount) { + reshapedItems.push({ + ...value[i], + type: kItemTypeItem, + target, + }); + } + } + } + count += 1; + } + + return { + ...source, + getItems() { + return reshapedItems; + }, + }; + } catch (error) { + // Some form of error occurred + return { + ...source, + getItems() { + return [ + { + title: error.name || "An Error Occurred While Searching", + text: + error.message || + "An unknown error occurred while attempting to perform the requested search.", + type: kItemTypeError, + }, + ]; + }, + }; + } + }); + }, + navigator: { + navigate({ itemUrl }) { + if (itemUrl !== offsetURL(kItemTypeMoreHref)) { + window.location.assign(itemUrl); + } + }, + navigateNewTab({ itemUrl }) { + if (itemUrl !== offsetURL(kItemTypeMoreHref)) { + const windowReference = window.open(itemUrl, "_blank", "noopener"); + if (windowReference) { + windowReference.focus(); + } + } + }, + navigateNewWindow({ itemUrl }) { + if (itemUrl !== offsetURL(kItemTypeMoreHref)) { + window.open(itemUrl, "_blank", "noopener"); + } + }, + }, + getSources({ state, setContext, setActiveItemId, refresh }) { + return [ + { + sourceId: "documents", + getItemUrl({ item }) { + if (item.href) { + return offsetURL(item.href); + } else { + return undefined; + } + }, + onSelect({ + item, + state, + setContext, + setIsOpen, + setActiveItemId, + refresh, + }) { + if (item.type === kItemTypeMore) { + toggleExpanded(item, state, setContext, setActiveItemId, refresh); + + // Toggle more + setIsOpen(true); + } + }, + getItems({ query }) { + if (query === null || query === "") { + return []; + } + + const limit = quartoSearchOptions.limit; + if (quartoSearchOptions.algolia) { + return algoliaSearch(query, limit, quartoSearchOptions.algolia); + } else { + // Fuse search options + const fuseSearchOptions = { + isCaseSensitive: false, + shouldSort: true, + minMatchCharLength: 2, + limit: limit, + }; + + return readSearchData().then(function (fuse) { + return fuseSearch(query, fuse, fuseSearchOptions); + }); + } + }, + templates: { + noResults({ createElement }) { + const hasQuery = lastState.query; + + return createElement( + "div", + { + class: `quarto-search-no-results${ + hasQuery ? "" : " no-query" + }`, + }, + language["search-no-results-text"] + ); + }, + header({ items, createElement }) { + // count the documents + const count = items.filter((item) => { + return item.type === kItemTypeDoc; + }).length; + + if (count > 0) { + return createElement( + "div", + { class: "search-result-header" }, + `${count} ${language["search-matching-documents-text"]}` + ); + } else { + return createElement( + "div", + { class: "search-result-header-no-results" }, + `` + ); + } + }, + footer({ _items, createElement }) { + if ( + quartoSearchOptions.algolia && + quartoSearchOptions.algolia["show-logo"] + ) { + const libDir = quartoSearchOptions.algolia["libDir"]; + const logo = createElement("img", { + src: offsetURL( + `${libDir}/quarto-search/search-by-algolia.svg` + ), + class: "algolia-search-logo", + }); + return createElement( + "a", + { href: "http://www.algolia.com/" }, + logo + ); + } + }, + + item({ item, createElement }) { + return renderItem( + item, + createElement, + state, + setActiveItemId, + setContext, + refresh, + quartoSearchOptions + ); + }, + }, + }, + ]; + }, + }); + + window.quartoOpenSearch = () => { + setIsOpen(false); + setIsOpen(true); + focusSearchInput(); + }; + + document.addEventListener("keyup", (event) => { + const { key } = event; + const kbds = quartoSearchOptions["keyboard-shortcut"]; + const focusedEl = document.activeElement; + + const isFormElFocused = [ + "input", + "select", + "textarea", + "button", + "option", + ].find((tag) => { + return focusedEl.tagName.toLowerCase() === tag; + }); + + if ( + kbds && + kbds.includes(key) && + !isFormElFocused && + !document.activeElement.isContentEditable + ) { + event.preventDefault(); + window.quartoOpenSearch(); + } + }); + + // Remove the labeleledby attribute since it is pointing + // to a non-existent label + if (quartoSearchOptions.type === "overlay") { + const inputEl = window.document.querySelector( + "#quarto-search .aa-Autocomplete" + ); + if (inputEl) { + inputEl.removeAttribute("aria-labelledby"); + } + } + + function throttle(func, wait) { + let waiting = false; + return function () { + if (!waiting) { + func.apply(this, arguments); + waiting = true; + setTimeout(function () { + waiting = false; + }, wait); + } + }; + } + + // If the main document scrolls dismiss the search results + // (otherwise, since they're floating in the document they can scroll with the document) + window.document.body.onscroll = throttle(() => { + // Only do this if we're not detached + // Bug #7117 + // This will happen when the keyboard is shown on ios (resulting in a scroll) + // which then closed the search UI + if (!window.matchMedia(detachedMediaQuery).matches) { + setIsOpen(false); + } + }, 50); + + if (showSearchResults) { + setIsOpen(true); + focusSearchInput(); + } +}); + +function configurePlugins(quartoSearchOptions) { + const autocompletePlugins = []; + const algoliaOptions = quartoSearchOptions.algolia; + if ( + algoliaOptions && + algoliaOptions["analytics-events"] && + algoliaOptions["search-only-api-key"] && + algoliaOptions["application-id"] + ) { + const apiKey = algoliaOptions["search-only-api-key"]; + const appId = algoliaOptions["application-id"]; + + // Aloglia insights may not be loaded because they require cookie consent + // Use deferred loading so events will start being recorded when/if consent + // is granted. + const algoliaInsightsDeferredPlugin = deferredLoadPlugin(() => { + if ( + window.aa && + window["@algolia/autocomplete-plugin-algolia-insights"] + ) { + window.aa("init", { + appId, + apiKey, + useCookie: true, + }); + + const { createAlgoliaInsightsPlugin } = + window["@algolia/autocomplete-plugin-algolia-insights"]; + // Register the insights client + const algoliaInsightsPlugin = createAlgoliaInsightsPlugin({ + insightsClient: window.aa, + onItemsChange({ insights, insightsEvents }) { + const events = insightsEvents.flatMap((event) => { + // This API limits the number of items per event to 20 + const chunkSize = 20; + const itemChunks = []; + const eventItems = event.items; + for (let i = 0; i < eventItems.length; i += chunkSize) { + itemChunks.push(eventItems.slice(i, i + chunkSize)); + } + // Split the items into multiple events that can be sent + const events = itemChunks.map((items) => { + return { + ...event, + items, + }; + }); + return events; + }); + + for (const event of events) { + insights.viewedObjectIDs(event); + } + }, + }); + return algoliaInsightsPlugin; + } + }); + + // Add the plugin + autocompletePlugins.push(algoliaInsightsDeferredPlugin); + return autocompletePlugins; + } +} + +// For plugins that may not load immediately, create a wrapper +// plugin and forward events and plugin data once the plugin +// is initialized. This is useful for cases like cookie consent +// which may prevent the analytics insights event plugin from initializing +// immediately. +function deferredLoadPlugin(createPlugin) { + let plugin = undefined; + let subscribeObj = undefined; + const wrappedPlugin = () => { + if (!plugin && subscribeObj) { + plugin = createPlugin(); + if (plugin && plugin.subscribe) { + plugin.subscribe(subscribeObj); + } + } + return plugin; + }; + + return { + subscribe: (obj) => { + subscribeObj = obj; + }, + onStateChange: (obj) => { + const plugin = wrappedPlugin(); + if (plugin && plugin.onStateChange) { + plugin.onStateChange(obj); + } + }, + onSubmit: (obj) => { + const plugin = wrappedPlugin(); + if (plugin && plugin.onSubmit) { + plugin.onSubmit(obj); + } + }, + onReset: (obj) => { + const plugin = wrappedPlugin(); + if (plugin && plugin.onReset) { + plugin.onReset(obj); + } + }, + getSources: (obj) => { + const plugin = wrappedPlugin(); + if (plugin && plugin.getSources) { + return plugin.getSources(obj); + } else { + return Promise.resolve([]); + } + }, + data: (obj) => { + const plugin = wrappedPlugin(); + if (plugin && plugin.data) { + plugin.data(obj); + } + }, + }; +} + +function validateItems(items) { + // Validate the first item + if (items.length > 0) { + const item = items[0]; + const missingFields = []; + if (item.href == undefined) { + missingFields.push("href"); + } + if (!item.title == undefined) { + missingFields.push("title"); + } + if (!item.text == undefined) { + missingFields.push("text"); + } + + if (missingFields.length === 1) { + throw { + name: `Error: Search index is missing the ${missingFields[0]} field.`, + message: `The items being returned for this search do not include all the required fields. Please ensure that your index items include the ${missingFields[0]} field or use index-fields in your _quarto.yml file to specify the field names.`, + }; + } else if (missingFields.length > 1) { + const missingFieldList = missingFields + .map((field) => { + return `${field}`; + }) + .join(", "); + + throw { + name: `Error: Search index is missing the following fields: ${missingFieldList}.`, + message: `The items being returned for this search do not include all the required fields. Please ensure that your index items includes the following fields: ${missingFieldList}, or use index-fields in your _quarto.yml file to specify the field names.`, + }; + } + } +} + +let lastQuery = null; +function showCopyLink(query, options) { + const language = options.language; + lastQuery = query; + // Insert share icon + const inputSuffixEl = window.document.body.querySelector( + ".aa-Form .aa-InputWrapperSuffix" + ); + + if (inputSuffixEl) { + let copyButtonEl = window.document.body.querySelector( + ".aa-Form .aa-InputWrapperSuffix .aa-CopyButton" + ); + + if (copyButtonEl === null) { + copyButtonEl = window.document.createElement("button"); + copyButtonEl.setAttribute("class", "aa-CopyButton"); + copyButtonEl.setAttribute("type", "button"); + copyButtonEl.setAttribute("title", language["search-copy-link-title"]); + copyButtonEl.onmousedown = (e) => { + e.preventDefault(); + e.stopPropagation(); + }; + + const linkIcon = "bi-clipboard"; + const checkIcon = "bi-check2"; + + const shareIconEl = window.document.createElement("i"); + shareIconEl.setAttribute("class", `bi ${linkIcon}`); + copyButtonEl.appendChild(shareIconEl); + inputSuffixEl.prepend(copyButtonEl); + + const clipboard = new window.ClipboardJS(".aa-CopyButton", { + text: function (_trigger) { + const copyUrl = new URL(window.location); + copyUrl.searchParams.set(kQueryArg, lastQuery); + copyUrl.searchParams.set(kResultsArg, "1"); + return copyUrl.toString(); + }, + }); + clipboard.on("success", function (e) { + // Focus the input + + // button target + const button = e.trigger; + const icon = button.querySelector("i.bi"); + + // flash "checked" + icon.classList.add(checkIcon); + icon.classList.remove(linkIcon); + setTimeout(function () { + icon.classList.remove(checkIcon); + icon.classList.add(linkIcon); + }, 1000); + }); + } + + // If there is a query, show the link icon + if (copyButtonEl) { + if (lastQuery && options["copy-button"]) { + copyButtonEl.style.display = "flex"; + } else { + copyButtonEl.style.display = "none"; + } + } + } +} + +/* Search Index Handling */ +// create the index +var fuseIndex = undefined; +var shownWarning = false; + +// fuse index options +const kFuseIndexOptions = { + keys: [ + { name: "title", weight: 20 }, + { name: "section", weight: 20 }, + { name: "text", weight: 10 }, + ], + ignoreLocation: true, + threshold: 0.1, +}; + +async function readSearchData() { + // Initialize the search index on demand + if (fuseIndex === undefined) { + if (window.location.protocol === "file:" && !shownWarning) { + window.alert( + "Search requires JavaScript features disabled when running in file://... URLs. In order to use search, please run this document in a web server." + ); + shownWarning = true; + return; + } + const fuse = new window.Fuse([], kFuseIndexOptions); + + // fetch the main search.json + const response = await fetch(offsetURL("search.json")); + if (response.status == 200) { + return response.json().then(function (searchDocs) { + searchDocs.forEach(function (searchDoc) { + fuse.add(searchDoc); + }); + fuseIndex = fuse; + return fuseIndex; + }); + } else { + return Promise.reject( + new Error( + "Unexpected status from search index request: " + response.status + ) + ); + } + } + + return fuseIndex; +} + +function inputElement() { + return window.document.body.querySelector(".aa-Form .aa-Input"); +} + +function focusSearchInput() { + setTimeout(() => { + const inputEl = inputElement(); + if (inputEl) { + inputEl.focus(); + } + }, 50); +} + +/* Panels */ +const kItemTypeDoc = "document"; +const kItemTypeMore = "document-more"; +const kItemTypeItem = "document-item"; +const kItemTypeError = "error"; + +function renderItem( + item, + createElement, + state, + setActiveItemId, + setContext, + refresh, + quartoSearchOptions +) { + switch (item.type) { + case kItemTypeDoc: + return createDocumentCard( + createElement, + "file-richtext", + item.title, + item.section, + item.text, + item.href, + item.crumbs, + quartoSearchOptions + ); + case kItemTypeMore: + return createMoreCard( + createElement, + item, + state, + setActiveItemId, + setContext, + refresh + ); + case kItemTypeItem: + return createSectionCard( + createElement, + item.section, + item.text, + item.href + ); + case kItemTypeError: + return createErrorCard(createElement, item.title, item.text); + default: + return undefined; + } +} + +function createDocumentCard( + createElement, + icon, + title, + section, + text, + href, + crumbs, + quartoSearchOptions +) { + const iconEl = createElement("i", { + class: `bi bi-${icon} search-result-icon`, + }); + const titleEl = createElement("p", { class: "search-result-title" }, title); + const titleContents = [iconEl, titleEl]; + const showParent = quartoSearchOptions["show-item-context"]; + if (crumbs && showParent) { + let crumbsOut = undefined; + const crumbClz = ["search-result-crumbs"]; + if (showParent === "root") { + crumbsOut = crumbs.length > 1 ? crumbs[0] : undefined; + } else if (showParent === "parent") { + crumbsOut = crumbs.length > 1 ? crumbs[crumbs.length - 2] : undefined; + } else { + crumbsOut = crumbs.length > 1 ? crumbs.join(" > ") : undefined; + crumbClz.push("search-result-crumbs-wrap"); + } + + const crumbEl = createElement( + "p", + { class: crumbClz.join(" ") }, + crumbsOut + ); + titleContents.push(crumbEl); + } + + const titleContainerEl = createElement( + "div", + { class: "search-result-title-container" }, + titleContents + ); + + const textEls = []; + if (section) { + const sectionEl = createElement( + "p", + { class: "search-result-section" }, + section + ); + textEls.push(sectionEl); + } + const descEl = createElement("p", { + class: "search-result-text", + dangerouslySetInnerHTML: { + __html: text, + }, + }); + textEls.push(descEl); + + const textContainerEl = createElement( + "div", + { class: "search-result-text-container" }, + textEls + ); + + const containerEl = createElement( + "div", + { + class: "search-result-container", + }, + [titleContainerEl, textContainerEl] + ); + + const linkEl = createElement( + "a", + { + href: offsetURL(href), + class: "search-result-link", + }, + containerEl + ); + + const classes = ["search-result-doc", "search-item"]; + if (!section) { + classes.push("document-selectable"); + } + + return createElement( + "div", + { + class: classes.join(" "), + }, + linkEl + ); +} + +function createMoreCard( + createElement, + item, + state, + setActiveItemId, + setContext, + refresh +) { + const moreCardEl = createElement( + "div", + { + class: "search-result-more search-item", + onClick: (e) => { + // Handle expanding the sections by adding the expanded + // section to the list of expanded sections + toggleExpanded(item, state, setContext, setActiveItemId, refresh); + e.stopPropagation(); + }, + }, + item.title + ); + + return moreCardEl; +} + +function toggleExpanded(item, state, setContext, setActiveItemId, refresh) { + const expanded = state.context.expanded || []; + if (expanded.includes(item.target)) { + setContext({ + expanded: expanded.filter((target) => target !== item.target), + }); + } else { + setContext({ expanded: [...expanded, item.target] }); + } + + refresh(); + setActiveItemId(item.__autocomplete_id); +} + +function createSectionCard(createElement, section, text, href) { + const sectionEl = createSection(createElement, section, text, href); + return createElement( + "div", + { + class: "search-result-doc-section search-item", + }, + sectionEl + ); +} + +function createSection(createElement, title, text, href) { + const descEl = createElement("p", { + class: "search-result-text", + dangerouslySetInnerHTML: { + __html: text, + }, + }); + + const titleEl = createElement("p", { class: "search-result-section" }, title); + const linkEl = createElement( + "a", + { + href: offsetURL(href), + class: "search-result-link", + }, + [titleEl, descEl] + ); + return linkEl; +} + +function createErrorCard(createElement, title, text) { + const descEl = createElement("p", { + class: "search-error-text", + dangerouslySetInnerHTML: { + __html: text, + }, + }); + + const titleEl = createElement("p", { + class: "search-error-title", + dangerouslySetInnerHTML: { + __html: ` ${title}`, + }, + }); + const errorEl = createElement("div", { class: "search-error" }, [ + titleEl, + descEl, + ]); + return errorEl; +} + +function positionPanel(pos) { + const panelEl = window.document.querySelector( + "#quarto-search-results .aa-Panel" + ); + const inputEl = window.document.querySelector( + "#quarto-search .aa-Autocomplete" + ); + + if (panelEl && inputEl) { + panelEl.style.top = `${Math.round(panelEl.offsetTop)}px`; + if (pos === "start") { + panelEl.style.left = `${Math.round(inputEl.left)}px`; + } else { + panelEl.style.right = `${Math.round(inputEl.offsetRight)}px`; + } + } +} + +/* Highlighting */ +// highlighting functions +function highlightMatch(query, text) { + if (text) { + const start = text.toLowerCase().indexOf(query.toLowerCase()); + if (start !== -1) { + const startMark = ""; + const endMark = ""; + + const end = start + query.length; + text = + text.slice(0, start) + + startMark + + text.slice(start, end) + + endMark + + text.slice(end); + const startInfo = clipStart(text, start); + const endInfo = clipEnd( + text, + startInfo.position + startMark.length + endMark.length + ); + text = + startInfo.prefix + + text.slice(startInfo.position, endInfo.position) + + endInfo.suffix; + + return text; + } else { + return text; + } + } else { + return text; + } +} + +function clipStart(text, pos) { + const clipStart = pos - 50; + if (clipStart < 0) { + // This will just return the start of the string + return { + position: 0, + prefix: "", + }; + } else { + // We're clipping before the start of the string, walk backwards to the first space. + const spacePos = findSpace(text, pos, -1); + return { + position: spacePos.position, + prefix: "", + }; + } +} + +function clipEnd(text, pos) { + const clipEnd = pos + 200; + if (clipEnd > text.length) { + return { + position: text.length, + suffix: "", + }; + } else { + const spacePos = findSpace(text, clipEnd, 1); + return { + position: spacePos.position, + suffix: spacePos.clipped ? "…" : "", + }; + } +} + +function findSpace(text, start, step) { + let stepPos = start; + while (stepPos > -1 && stepPos < text.length) { + const char = text[stepPos]; + if (char === " " || char === "," || char === ":") { + return { + position: step === 1 ? stepPos : stepPos - step, + clipped: stepPos > 1 && stepPos < text.length, + }; + } + stepPos = stepPos + step; + } + + return { + position: stepPos - step, + clipped: false, + }; +} + +// removes highlighting as implemented by the mark tag +function clearHighlight(searchterm, el) { + const childNodes = el.childNodes; + for (let i = childNodes.length - 1; i >= 0; i--) { + const node = childNodes[i]; + if (node.nodeType === Node.ELEMENT_NODE) { + if ( + node.tagName === "MARK" && + node.innerText.toLowerCase() === searchterm.toLowerCase() + ) { + el.replaceChild(document.createTextNode(node.innerText), node); + } else { + clearHighlight(searchterm, node); + } + } + } +} + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string +} + +// highlight matches +function highlight(term, el) { + const termRegex = new RegExp(term, "ig"); + const childNodes = el.childNodes; + + // walk back to front avoid mutating elements in front of us + for (let i = childNodes.length - 1; i >= 0; i--) { + const node = childNodes[i]; + + if (node.nodeType === Node.TEXT_NODE) { + // Search text nodes for text to highlight + const text = node.nodeValue; + + let startIndex = 0; + let matchIndex = text.search(termRegex); + if (matchIndex > -1) { + const markFragment = document.createDocumentFragment(); + while (matchIndex > -1) { + const prefix = text.slice(startIndex, matchIndex); + markFragment.appendChild(document.createTextNode(prefix)); + + const mark = document.createElement("mark"); + mark.appendChild( + document.createTextNode( + text.slice(matchIndex, matchIndex + term.length) + ) + ); + markFragment.appendChild(mark); + + startIndex = matchIndex + term.length; + matchIndex = text.slice(startIndex).search(new RegExp(term, "ig")); + if (matchIndex > -1) { + matchIndex = startIndex + matchIndex; + } + } + if (startIndex < text.length) { + markFragment.appendChild( + document.createTextNode(text.slice(startIndex, text.length)) + ); + } + + el.replaceChild(markFragment, node); + } + } else if (node.nodeType === Node.ELEMENT_NODE) { + // recurse through elements + highlight(term, node); + } + } +} + +/* Link Handling */ +// get the offset from this page for a given site root relative url +function offsetURL(url) { + var offset = getMeta("quarto:offset"); + return offset ? offset + url : url; +} + +// read a meta tag value +function getMeta(metaName) { + var metas = window.document.getElementsByTagName("meta"); + for (let i = 0; i < metas.length; i++) { + if (metas[i].getAttribute("name") === metaName) { + return metas[i].getAttribute("content"); + } + } + return ""; +} + +function algoliaSearch(query, limit, algoliaOptions) { + const { getAlgoliaResults } = window["@algolia/autocomplete-preset-algolia"]; + + const applicationId = algoliaOptions["application-id"]; + const searchOnlyApiKey = algoliaOptions["search-only-api-key"]; + const indexName = algoliaOptions["index-name"]; + const indexFields = algoliaOptions["index-fields"]; + const searchClient = window.algoliasearch(applicationId, searchOnlyApiKey); + const searchParams = algoliaOptions["params"]; + const searchAnalytics = !!algoliaOptions["analytics-events"]; + + return getAlgoliaResults({ + searchClient, + queries: [ + { + indexName: indexName, + query, + params: { + hitsPerPage: limit, + clickAnalytics: searchAnalytics, + ...searchParams, + }, + }, + ], + transformResponse: (response) => { + if (!indexFields) { + return response.hits.map((hit) => { + return hit.map((item) => { + return { + ...item, + text: highlightMatch(query, item.text), + }; + }); + }); + } else { + const remappedHits = response.hits.map((hit) => { + return hit.map((item) => { + const newItem = { ...item }; + ["href", "section", "title", "text", "crumbs"].forEach( + (keyName) => { + const mappedName = indexFields[keyName]; + if ( + mappedName && + item[mappedName] !== undefined && + mappedName !== keyName + ) { + newItem[keyName] = item[mappedName]; + delete newItem[mappedName]; + } + } + ); + newItem.text = highlightMatch(query, newItem.text); + return newItem; + }); + }); + return remappedHits; + } + }, + }); +} + +let subSearchTerm = undefined; +let subSearchFuse = undefined; +const kFuseMaxWait = 125; + +async function fuseSearch(query, fuse, fuseOptions) { + let index = fuse; + // Fuse.js using the Bitap algorithm for text matching which runs in + // O(nm) time (no matter the structure of the text). In our case this + // means that long search terms mixed with large index gets very slow + // + // This injects a subIndex that will be used once the terms get long enough + // Usually making this subindex is cheap since there will typically be + // a subset of results matching the existing query + if (subSearchFuse !== undefined && query.startsWith(subSearchTerm)) { + // Use the existing subSearchFuse + index = subSearchFuse; + } else if (subSearchFuse !== undefined) { + // The term changed, discard the existing fuse + subSearchFuse = undefined; + subSearchTerm = undefined; + } + + // Search using the active fuse + const then = performance.now(); + const resultsRaw = await index.search(query, fuseOptions); + const now = performance.now(); + + const results = resultsRaw.map((result) => { + const addParam = (url, name, value) => { + const anchorParts = url.split("#"); + const baseUrl = anchorParts[0]; + const sep = baseUrl.search("\\?") > 0 ? "&" : "?"; + anchorParts[0] = baseUrl + sep + name + "=" + value; + return anchorParts.join("#"); + }; + + return { + title: result.item.title, + section: result.item.section, + href: addParam(result.item.href, kQueryArg, query), + text: highlightMatch(query, result.item.text), + crumbs: result.item.crumbs, + }; + }); + + // If we don't have a subfuse and the query is long enough, go ahead + // and create a subfuse to use for subsequent queries + if ( + now - then > kFuseMaxWait && + subSearchFuse === undefined && + resultsRaw.length < fuseOptions.limit + ) { + subSearchTerm = query; + subSearchFuse = new window.Fuse([], kFuseIndexOptions); + resultsRaw.forEach((rr) => { + subSearchFuse.add(rr.item); + }); + } + return results; +} diff --git a/docs/docs/theme.scss b/docs/docs/theme.scss new file mode 100644 index 0000000..30df0d3 --- /dev/null +++ b/docs/docs/theme.scss @@ -0,0 +1,31 @@ +/*-- scss:defaults --*/ +$primary: #39729E !default; +$link-color: #39729E !default; + +/*-- scss:rules --*/ + +.sidebar-title { + color: #39729E; +} + +div.sidebar-item-container .active { + font-weight: bold; +} + +.sidebar nav[role=doc-toc] ul>li>a.active, .sidebar nav[role=doc-toc] ul>li>ul>li>a.active{ + font-weight: bold; +} + +/* Code ------------------------------------------------ */ + +code { + color: #373a3c; +} + +code a:any-link { + text-decoration: underline; + text-decoration-color: #ccc; +} + + + diff --git a/docs/index.qmd b/docs/index.qmd new file mode 100644 index 0000000..00a2793 --- /dev/null +++ b/docs/index.qmd @@ -0,0 +1,89 @@ +--- +date: today +date-format: "YYYY-MM-DD" +--- + +# Readme + + `Py4Stats` は、主に実証研究で用いられる、探索的データ分析および回帰結果レポート用のユーティリティライブラリで、回帰分析を中心とする分析でよく使われるR言語の機能を、Python で実装しています。本ライブラリの主な機能は [**Get started**](./introduction.qmd) を、実装されている関数の一覧は [**Function reference**](./reference.qmd) を参照してください。 + +## Installation + +[`uv`](https://github.com/astral-sh/uv) をお使いの場合、次のコードで `py4stats` をインストールできます。 + +``` python +! uv add git+https://github.com/Hirototensho/py4stats.git +``` + +一方で、`pip` をお使いの場合には、次のコードで `py4stats` をインストールできます。 + +``` python +! pip install git+https://github.com/Hirototensho/py4stats.git +``` + +## 使用例 + +``` python +import py4stats as py4st +``` + +[`py4stats.diagnose()`](man/diagnose.qmd) 関数はデータの全般的な状態についての要約を提供します。 + +``` python +import pandas as pd +from palmerpenguins import load_penguins +penguins = load_penguins() # サンプルデータの読み込み + +print(py4st.diagnose(penguins).round(4)) +#> columns dtype missing_count missing_percent unique_count unique_rate +#> 0 species object 0 0.0000 3 0.8721 +#> 1 island object 0 0.0000 3 0.8721 +#> 2 bill_length_mm float64 2 0.5814 165 47.9651 +#> 3 bill_depth_mm float64 2 0.5814 81 23.5465 +#> 4 flipper_length_mm float64 2 0.5814 56 16.2791 +#> 5 body_mass_g float64 2 0.5814 95 27.6163 +#> 6 sex object 11 3.1977 3 0.8721 +#> 7 year int64 0 0.0000 3 0.8721 +``` + +[`py4stats.compare_ols()`](man/compare_ols.qmd) 関数は、計量経済学の実証論文でよく用いられる、回帰分析の結果を列方向に並べて比較する表を作成します。 + + +``` python +import statsmodels.formula.api as smf + +# 回帰分析の実行 +fit1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit() +fit2 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species', data = penguins).fit() +fit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit() + +compare_tab1 = py4st.compare_ols(list_models = [fit1, fit2, fit3]) # 表の作成 +compare_tab1 +``` + +| term | model 1 | model 2 | model 3 | +|:---------------------|:---------------|:-----------------|:----------------| +| Intercept | 153.7397 | -1,742.7202 *** | 843.9812 ** | +| | (268.9012) | (313.7697) | (403.5956) | +| species[T.Chinstrap] | -885.8121 *** | -539.6864 *** | -245.1516 *** | +| | (88.2502) | (86.9425) | (84.5952) | +| species[T.Gentoo] | 578.6292 *** | 1,492.8283 *** | 1,443.3525 *** | +| | (75.3623) | (118.4442) | (107.7844) | +| bill_length_mm | 91.4358 *** | 55.6461 *** | 26.5366 *** | +| | (6.8871) | (7.2326) | (7.2436) | +| bill_depth_mm | | 179.0434 *** | 87.9328 *** | +| | | (19.0997) | (20.2192) | +| sex[T.male] | | | 437.2007 *** | +| | | | (49.1098) | +| rsquared_adj | 0.7810 | 0.8258 | 0.8613 | +| nobs | 342 | 342 | 333 | +| df | 3 | 4 | 5 | + + +詳細は、[`py4stats.compare_ols()`](man/compare_ols.qmd) を参照してください。  + +*** +[Jump to **Function Get started**.](../introduction.qmd) +[Jump to **Function reference**.](./reference.qmd) + + diff --git a/INTRODUCTION.md b/docs/introduction.qmd similarity index 76% rename from INTRODUCTION.md rename to docs/introduction.qmd index 5e351f8..2730720 100644 --- a/INTRODUCTION.md +++ b/docs/introduction.qmd @@ -4,13 +4,13 @@ import py4stats as py4st ``` -ここでは `Py4Stats` の主な機能を紹介します。実装されている関数の一覧は [Function reference](./reference.md) を参照してください。 +ここでは `Py4Stats` の主な機能を紹介します。実装されている関数の一覧は [Function reference](./reference.qmd) を参照してください。 ## `py4stats.eda_tools` - 探索的データ解析と前処理に関する機能を提供するモジュールです。このモジュールは、複数の DataFrame バックエンドに対して共通の API を提供することを目的として、[`narwhals`](https://narwhals-dev.github.io/narwhals/) ライブラリを用いて実装されています。詳細は [Technical Notes: py4stats.eda_tools における narwhals ベースの実装](articles/narwhals_in_py4stats.md) を参照してください。 + 探索的データ解析と前処理に関する機能を提供するモジュールです。このモジュールは、複数の DataFrame バックエンドに対して共通の API を提供することを目的として、[`narwhals`](https://narwhals-dev.github.io/narwhals/) ライブラリを用いて実装されています。詳細は [Technical Notes: py4stats.eda_tools における narwhals ベースの実装](articles/narwhals_in_py4stats.qmd) を参照してください。 - [`py4stats.diagnose()`](man/diagnose.md):R言語の[`dlookr::diagnose()`](https://choonghyunryu.github.io/dlookr/reference/diagnose.data.frame.html)を再現した関数で、データの全般的な状態についての要約を提供します。 + [`py4stats.diagnose()`](man/diagnose.qmd):R言語の[`dlookr::diagnose()`](https://choonghyunryu.github.io/dlookr/reference/diagnose.data.frame.html)を再現した関数で、データの全般的な状態についての要約を提供します。 ``` python import pandas as pd @@ -30,7 +30,7 @@ print(py4st.diagnose(penguins).round(4)) #> year int64 0 0.0000 3 0.8721 ``` -[`py4stats.tabyl()`](man/tabyl.md):R言語の [`janitor::tabyl()`](https://sfirke.github.io/janitor/reference/tabyl.html)を参考にした、クロス集計表を作成する関数です。 +[`py4stats.tabyl()`](man/tabyl.qmd):R言語の [`janitor::tabyl()`](https://sfirke.github.io/janitor/reference/tabyl.html)を参考にした、クロス集計表を作成する関数です。 ``` python print(py4st.tabyl(penguins, 'island', 'species')) @@ -41,7 +41,7 @@ print(py4st.tabyl(penguins, 'island', 'species')) #> Torgersen 52 (100.0%) 0 (0.0%) 0 (0.0%) 52 #> All 152 (44.2%) 68 (19.8%) 124 (36.0%) 344 ``` - [`py4stats.freq_table()`](man/freq_table.md):R言語の[`DescTools::Freq()`](https://cran.r-project.org/web/packages/DescTools/DescTools.pdf)をオマージュした、1変数の度数分布表を計算する関数。度数 `freq` と相対度数 `perc` に加えて、それぞれの累積値を計算します。 + [`py4stats.freq_table()`](man/freq_table.qmd):R言語の[`DescTools::Freq()`](https://cran.r-project.org/web/packages/DescTools/DescTools.pdf)をオマージュした、1変数の度数分布表を計算する関数。度数 `freq` と相対度数 `perc` に加えて、それぞれの累積値を計算します。 ``` python print(py4st.freq_table(penguins, 'species')) @@ -76,7 +76,7 @@ print( #> (52.725, 59.6] 5 0.040650 123 1.000000 ``` - [`py4stats.remove_empty()`](man/remove_empty_constant.md):完全に空白な列や行の削除する関数。R言語の [`janitor::remove_empty()`](https://sfirke.github.io/janitor/reference/remove_empty.html) をオマージュした関数で、全ての要素が `NaN` である列や行をデータフレームから除外します。 + [`py4stats.remove_empty()`](man/remove_empty_constant.qmd):完全に空白な列や行の削除する関数。R言語の [`janitor::remove_empty()`](https://sfirke.github.io/janitor/reference/remove_empty.html) をオマージュした関数で、全ての要素が `NaN` である列や行をデータフレームから除外します。 ``` python penguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy() @@ -115,7 +115,7 @@ print(py4st.remove_empty(penguins2, cols = False, quiet = False).tail(3)) #> 343 Chinstrap 3775.0 NaN ``` - [`py4stats.remove_constant()`](man/remove_empty_constant.md):定数列の削除。R言語の [`janitor::remove_constant()`](https://sfirke.github.io/janitor/reference/remove_constant.html) をオマージュした関数で、1種類だけの要素からなる列をデータフレームから除外します。 + [`py4stats.remove_constant()`](man/remove_empty_constant.qmd):定数列の削除。R言語の [`janitor::remove_constant()`](https://sfirke.github.io/janitor/reference/remove_constant.html) をオマージュした関数で、1種類だけの要素からなる列をデータフレームから除外します。 ``` python penguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy() penguins2.loc[:, 'constant'] = 'c' @@ -134,7 +134,7 @@ print(py4st.remove_constant(penguins2, quiet = False).head(3)) #> 2 Adelie 3250.0 ``` - [`py4stats.filtering_out()`](man/filtering_out.md):`pandas` の [`DataFrame.filter()`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.filter.html) メソッドでは引数 `like` に文字列を指定することで、列名に特定の文字列を含む列を選択できますが、反対に `py4stats.filtering_out()` では列名に特定の文字列を含む列を除外します。実装の一部はR言語の [`dplyr::select()`](https://dplyr.tidyverse.org/reference/select.html) を参考にしました。 + [`py4stats.filtering_out()`](man/filtering_out.qmd):`pandas` の [`DataFrame.filter()`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.filter.html) メソッドでは引数 `like` に文字列を指定することで、列名に特定の文字列を含む列を選択できますが、反対に `py4stats.filtering_out()` では列名に特定の文字列を含む列を除外します。実装の一部はR言語の [`dplyr::select()`](https://dplyr.tidyverse.org/reference/select.html) を参考にしました。 ```python # 列名に 'length' を含む列を除外 @@ -163,7 +163,7 @@ print(py4st.filtering_out(penguins, ends_with = '_mm').head(3))  `py4stats.regression_tools` は [`statsmodels`](https://www.statsmodels.org/stable/index.html)ライブラリで作成された回帰分析の結果についての表作成と可視化を補助する機能を提供するモジュールです。 - [`py4stats.compare_ols()`](man/compare_ols.md) :計量経済学の実証論文でよく用いられる、回帰分析の結果を列方向に並べて比較する表を作成します。表のフォーマットについてはR言語の[`texreg::screenreg()`](https://cran.r-project.org/web/packages/texreg/index.html)や[`modelsummary::modelsummary()`](https://modelsummary.com/man/modelsummary.html)を参考にしています。同種の機能を提供する Python ライブラリーとしては、R言語の [`stargazer`](https://cran.r-project.org/web/packages/stargazer/index.html) パッケージをもとにした [`stargazer`](https://pypi.org/project/stargazer/) ライブラリがあります。 + [`py4stats.compare_ols()`](man/compare_ols.qmd) :計量経済学の実証論文でよく用いられる、回帰分析の結果を列方向に並べて比較する表を作成します。表のフォーマットについてはR言語の[`texreg::screenreg()`](https://cran.r-project.org/web/packages/texreg/index.html)や[`modelsummary::modelsummary()`](https://modelsummary.com/man/modelsummary.html)を参考にしています。同種の機能を提供する Python ライブラリーとしては、R言語の [`stargazer`](https://cran.r-project.org/web/packages/stargazer/index.html) パッケージをもとにした [`stargazer`](https://pypi.org/project/stargazer/) ライブラリがあります。 ``` python import statsmodels.formula.api as smf @@ -196,7 +196,7 @@ compare_tab1 | df | 3 | 4 | 5 | -`py4stats.compare_ols()` の実行結果は `Pandas` の `DataFrame` として出力されるため、`.xlsx`. ファイルなどに変換することができます。また、用途に応じて表の体裁を調整できるようにしています。詳細については [「回帰分析の比較」](man/compare_ols.md) を参照してください。 +`py4stats.compare_ols()` の実行結果は `Pandas` の `DataFrame` として出力されるため、`.xlsx`. ファイルなどに変換することができます。また、用途に応じて表の体裁を調整できるようにしています。詳細については [「回帰分析の比較」](man/compare_ols.qmd) を参照してください。 ``` python compare_tab2 = py4st.compare_ols( @@ -222,13 +222,13 @@ compare_tab2 | nobs | 342 | 342 | 333 | | df | 3 | 4 | 5 | -[`py4stats.coefplot()`](man/coefplot.md):回帰係数の可視化。R言語の [`coefplot::coefplot()`](https://cran.r-project.org/web/packages/coefplot/index.html) を参考にしました。 +[`py4stats.coefplot()`](man/coefplot.qmd):回帰係数の可視化。R言語の [`coefplot::coefplot()`](https://cran.r-project.org/web/packages/coefplot/index.html) を参考にしました。 ```python import matplotlib.pyplot as plt py4st.coefplot(fit3) ``` -![Unknown](https://github.com/Hirototensho/Py4Stats/assets/55335752/637437c3-f943-4817-a1ad-21bbd538e97d) +![coefplot1](man/image/coefplot1.png) ```python plt.rcParams["figure.autolayout"] = True @@ -242,10 +242,10 @@ py4st.coefplot(fit3, ax = ax[1], palette = ['#FF6F91', '#F2E5EB']) ax[1].set_xlim(-900, 1800); ``` -![Unknown](https://github.com/Hirototensho/Py4Stats/assets/55335752/4c2dbfda-c67d-45c5-ba28-0f7fc72bd7d3) +![coefplot2](man/image/coefplot2.png) - [`py4stats.compare_mfx()`](man/compare_mfx.md) - と [`py4stats.mfxplot()`](man/compare_mfx.md) は、それぞれ `py4stats.compare_ols()` と `py4stats.coefplot()` の一般化線型モデルバージョンです。`statsmodels` ライブラリの[`.get_margeff()`](https://www.statsmodels.org/dev/generated/statsmodels.discrete.discrete_model.DiscreteResults.get_margeff.html) メソッドから得られた限界効果の推定値を表示します。 + [`py4stats.compare_mfx()`](man/compare_mfx.qmd) + と [`py4stats.mfxplot()`](man/compare_mfx.qmd) は、それぞれ `py4stats.compare_ols()` と `py4stats.coefplot()` の一般化線型モデルバージョンです。`statsmodels` ライブラリの[`.get_margeff()`](https://www.statsmodels.org/dev/generated/statsmodels.discrete.discrete_model.DiscreteResults.get_margeff.html) メソッドから得られた限界効果の推定値を表示します。 ```python penguins['female'] = np.where(penguins['sex'] == 'female', 1, 0) @@ -285,7 +285,7 @@ py4st.mfxplot(fit_logit2, ax = ax[1], palette = ['#FF6F91', '#F2E5EB']) ax[1].set_xlim(-0.2, 0.85); ``` -![Unknown](https://github.com/Hirototensho/Py4Stats/assets/55335752/f62e934a-91da-4ca8-9272-3006df2383f0) +![coefplot3](man/image/coefplot3.png) *** -[Jump to **Function reference**.](./reference.md) +[Jump to **Function reference**.](./reference.qmd) diff --git a/docs/man/Blinder_Oaxaca.qmd b/docs/man/Blinder_Oaxaca.qmd index e348db0..104a8cb 100644 --- a/docs/man/Blinder_Oaxaca.qmd +++ b/docs/man/Blinder_Oaxaca.qmd @@ -114,7 +114,7 @@ py4st.plot_Blinder_Oaxaca( ) ``` -![Unknown](https://github.com/Hirototensho/Py4Stats/assets/55335752/a0b8e389-5d17-4476-8626-755ad51d0018) +![plot_Blinder_Oaxaca1.png](image/plot_Blinder_Oaxaca1.png) `diff_type` を指定することで、一方の統計量だけを表示することもできます。 @@ -125,7 +125,7 @@ py4st.plot_Blinder_Oaxaca( diff_type = 'unobserved_diff' ) ``` -![Unknown-2](https://github.com/Hirototensho/Py4Stats/assets/55335752/36516540-82c0-462b-b122-880959cfd9f1) +![plot_Blinder_Oaxaca2.png](image/plot_Blinder_Oaxaca2.png) グラフのサイズや解像度を指定するには、次のように行います。 @@ -145,5 +145,5 @@ fig.tight_layout() - 朝井 友紀子 (2014) 「労働市場における男女差の30年― 就業のサンプルセレクションと男女間賃金格差」『日本労働研究雑誌』, No.648, pp.6–16 *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/Heckit_from_formula.qmd b/docs/man/Heckit_from_formula.qmd index c22aee8..c3ec8bb 100644 --- a/docs/man/Heckit_from_formula.qmd +++ b/docs/man/Heckit_from_formula.qmd @@ -107,4 +107,4 @@ print(res_heckit.summary()) - 春山鉄源(2023) 『Pythonで学ぶ入門計量経済学』 https://py4etrics.github.io/index.html *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/Pareto_plot.qmd b/docs/man/Pareto_plot.qmd index 771d194..8298228 100644 --- a/docs/man/Pareto_plot.qmd +++ b/docs/man/Pareto_plot.qmd @@ -76,4 +76,4 @@ py4st.Pareto_plot( ![Pareto_plot3](image/Pareto_plot3.png) *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/arg_match.qmd b/docs/man/arg_match.qmd index fcaeda2..88ad650 100644 --- a/docs/man/arg_match.qmd +++ b/docs/man/arg_match.qmd @@ -86,7 +86,7 @@ my_faivarit2(['apple', 'orang']) #> Did you mean 'orange'? ``` - `Py4Stats` では [`eda_tools.tabyl()`](./tabyl.md)や [`regression_tools.compare_ols()`](./compare_ols.md) など、文字列で指定する引数をもつ関数で、引数のアサーションに `build.arg_match()` を使用しています。 + `Py4Stats` では [`eda_tools.tabyl()`](./tabyl.qmd)や [`regression_tools.compare_ols()`](./compare_ols.qmd) など、文字列で指定する引数をもつ関数で、引数のアサーションに `build.arg_match()` を使用しています。 ```python import py4stats as py4st @@ -99,5 +99,5 @@ py4st.tabyl(penguins, 'island', 'species', normalize = 'ind') #> Did you mean 'index'? ``` *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/assert_dtype.qmd b/docs/man/assert_dtype.qmd index 0e547ed..d2b54b3 100644 --- a/docs/man/assert_dtype.qmd +++ b/docs/man/assert_dtype.qmd @@ -170,7 +170,7 @@ build.assert_numeric( ## 参照 - データ型の判定には[こちらの関数](./is_dtype.md)を使用しています。 + データ型の判定には[こちらの関数](./is_dtype.qmd)を使用しています。 *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/coefplot.qmd b/docs/man/coefplot.qmd index 7a14498..951c847 100644 --- a/docs/man/coefplot.qmd +++ b/docs/man/coefplot.qmd @@ -75,7 +75,8 @@ fit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', d py4st.coefplot(fit3) ``` -![Unknown](https://github.com/Hirototensho/Py4Stats/assets/55335752/637437c3-f943-4817-a1ad-21bbd538e97d) + +![coefplot1](image/coefplot1.png) ```python plt.rcParams["figure.autolayout"] = True @@ -89,7 +90,7 @@ py4st.coefplot(fit3, ax = ax[1], palette = ['#FF6F91', '#F2E5EB']) ax[1].set_xlim(-900, 1800); ``` -![Unknown](https://github.com/Hirototensho/Py4Stats/assets/55335752/4c2dbfda-c67d-45c5-ba28-0f7fc72bd7d3) +![coefplot2](image/coefplot2.png) ```python penguins['female'] = np.where(penguins['sex'] == 'female', 1, 0) @@ -111,8 +112,7 @@ py4st.mfxplot(fit_logit2, ax = ax[1], palette = ['#FF6F91', '#F2E5EB']) ax[1].set_xlim(-0.2, 0.85); ``` -![Unknown](https://github.com/Hirototensho/Py4Stats/assets/55335752/f62e934a-91da-4ca8-9272-3006df2383f0) - +![coefplot3](image/coefplot3.png) *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/compare_df_cols.qmd b/docs/man/compare_df_cols.qmd index 14fb9b1..09d96c2 100644 --- a/docs/man/compare_df_cols.qmd +++ b/docs/man/compare_df_cols.qmd @@ -88,4 +88,4 @@ print( #> 4 year 2008.03 2008.03 True ``` *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/compare_group_stats.qmd b/docs/man/compare_group_stats.qmd index a98959e..9360c53 100644 --- a/docs/man/compare_group_stats.qmd +++ b/docs/man/compare_group_stats.qmd @@ -124,7 +124,7 @@ py4st.plot_mean_diff( ) ``` -![Unknown](https://github.com/Hirototensho/Py4Stats/assets/55335752/696cbbe0-2c0c-435c-bb9c-71a59a3742f9) +![plot_mean_diff1](image/plot_mean_diff1.png) ```python py4st.plot_mean_diff( @@ -134,7 +134,7 @@ py4st.plot_mean_diff( ) ``` -![Unknown-2](https://github.com/Hirototensho/Py4Stats/assets/55335752/735866a9-aed2-4e10-bac1-6fc7004fba8f) +![plot_mean_diff2](image/plot_mean_diff2.png) ```python py4st.plot_median_diff( @@ -143,6 +143,7 @@ py4st.plot_median_diff( stats_diff = 'rel_diff' ) ``` -![Unknown-3](https://github.com/Hirototensho/Py4Stats/assets/55335752/7a496916-e828-44e1-a0e0-d50bb22ecc12) +![plot_median_diff1](image/plot_median_diff1.png) + *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/compare_mfx.qmd b/docs/man/compare_mfx.qmd index 1a4b118..ad95d86 100644 --- a/docs/man/compare_mfx.qmd +++ b/docs/man/compare_mfx.qmd @@ -49,7 +49,7 @@ compare_mfx( - p ≤ 0.05 `**` - p ≤ 0.01 `***` - p > 0.1 表示なし
-詳細は[`building_block.style_pvalue()`](man/style_pvalue.md) を参照してください。 +詳細は[`building_block.style_pvalue()`](./style_pvalue.qmd) を参照してください。 - `stats_glance`:**list of str**
- 表の下部に追加する当てはまりの尺度の種類を表す文字列のリスト。リストの値には次の値を指定できます。なお、`None` もしくは空のリスト `[ ]` が指定された場合には非表示となります。 @@ -104,7 +104,7 @@ from palmerpenguins import load_penguins penguins = load_penguins() # サンプルデータの読み込み ``` - `py4st.compare_mfx()` は [`py4st.compare_ols()`](./compare_ols.md) の一般化線型モデルバージョンで、初期設定では `statsmodels` ライブラリの[`.get_margeff()`](https://www.statsmodels.org/dev/generated/statsmodels.discrete.discrete_model.DiscreteResults.get_margeff.html) メソッドから得られた限界効果の推定値を表示します。 + `py4st.compare_mfx()` は [`py4st.compare_ols()`](./compare_ols.qmd) の一般化線型モデルバージョンで、初期設定では `statsmodels` ライブラリの[`.get_margeff()`](https://www.statsmodels.org/dev/generated/statsmodels.discrete.discrete_model.DiscreteResults.get_margeff.html) メソッドから得られた限界効果の推定値を表示します。 ```python penguins['female'] = np.where(penguins['sex'] == 'female', 1, 0) @@ -155,4 +155,4 @@ GT(compare_tab.reset_index())\   `table_style = 'two_line'` としたとき、初期設定ではの回帰係数とp-値の間に改行記号 `'\n'`が挿入されます。`そのため、print()` 関数や `display()` 関数を使った出力では、改行記号 `'\n'` がそのまま表示されます。この場合でも、[`pd.DataFrame.to_excel()`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_excel.html) や [`pd.DataFrame.to_markdown()`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_markdown.html) を使って Excel ファイルや markdown の表に変換していただくと、改行として反映されます。 *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/compare_ols.qmd b/docs/man/compare_ols.qmd index 5d81323..c89b685 100644 --- a/docs/man/compare_ols.qmd +++ b/docs/man/compare_ols.qmd @@ -46,7 +46,7 @@ compare_ols( - p ≤ 0.05 `**` - p ≤ 0.01 `***` - p > 0.1 表示なし
-詳細は[`building_block.style_pvalue()`](man/style_pvalue.md) を参照してください。 +詳細は[`building_block.style_pvalue()`](./style_pvalue.qmd) を参照してください。 - `stats_glance`:**list of str**
- 表の下部に追加する当てはまりの尺度の種類を表す文字列のリスト。リストの値には次の値を指定できます。なお、`None` もしくは空のリスト `[ ]` が指定された場合には非表示となります。 @@ -251,7 +251,7 @@ compare_tab4 # 上記のコードと同じ結果 ## 参照 see also - 一般化線形モデルの限界効果を比較する場合は [`py4stats.compare_mfx()`](./compare_mfx.md)をご利用ください。 + 一般化線形モデルの限界効果を比較する場合は [`py4stats.compare_mfx()`](./compare_mfx.qmd)をご利用ください。 *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/diagnose.qmd b/docs/man/diagnose.qmd index f6c80cd..dd168d8 100644 --- a/docs/man/diagnose.qmd +++ b/docs/man/diagnose.qmd @@ -45,5 +45,5 @@ print(py4st.diagnose(penguins).round(4)) ``` *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/diagnose_category.qmd b/docs/man/diagnose_category.qmd index 61398c2..db07df9 100644 --- a/docs/man/diagnose_category.qmd +++ b/docs/man/diagnose_category.qmd @@ -66,4 +66,4 @@ print(py4st.diagnose_category(penguins2).round(4)) `evenness` は、各列ごとに情報エントロピーを $[0, 1]$ の範囲に正規化した指標です。本実装では、対数の底をカテゴリの個数(`unique`)に設定することで正規化を行っており、これは底を2とした情報エントロピーを `log2(unique)` で割ることと同値です。この指標は正規化エントロピー(normalized entropy)としても知られています。 *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/filtering_out.qmd b/docs/man/filtering_out.qmd index 2820e3c..27059ab 100644 --- a/docs/man/filtering_out.qmd +++ b/docs/man/filtering_out.qmd @@ -100,4 +100,4 @@ print(py4st.filtering_out(penguins, ends_with = '_mm')) `axis='index'` による行を対象とするフィルタリングは、インデックスの存在に依存します。したがって、`pd.DataFrame` 以外の行ラベルをもたない `DataFrame` バックエンドでは、このオプションは利用できません。 *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/freq_table.qmd b/docs/man/freq_table.qmd index 7c59523..120f919 100644 --- a/docs/man/freq_table.qmd +++ b/docs/man/freq_table.qmd @@ -94,4 +94,4 @@ print( #> 13 Gentoo (55.017, 59.6] 3 0.008772 342 1.000000 ``` *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/glance.qmd b/docs/man/glance.qmd index 0a06627..7fdf927 100644 --- a/docs/man/glance.qmd +++ b/docs/man/glance.qmd @@ -61,4 +61,4 @@ list(py4st.glance.registry.keys()) *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/heckitmfx_compute.qmd b/docs/man/heckitmfx_compute.qmd index 78038d6..2501b2f 100644 --- a/docs/man/heckitmfx_compute.qmd +++ b/docs/man/heckitmfx_compute.qmd @@ -22,7 +22,7 @@ heckitmfx_compute( - `exog_outcome`**pd.DataFrame**(必須)
 Type2トービットモデルのうち第2段階の regression equation(賃金関数)の説明変数からなる pd.DataFrame -これらの引数は [`heckit_helper.Heckit_from_formula()`](https://github.com/Hirototensho/Py4Stats/edit/main/man/Heckit_from_formula.md) の出力を使用することを想定しています(使用例を参照)。 +これらの引数は [`heckit_helper.Heckit_from_formula()`](https://github.com/Hirototensho/Py4Stats/edit/main/man/Heckit_from_formula.qmd) の出力を使用することを想定しています(使用例を参照)。 - `exponentiate`**bool**
 推定結果に指数関数を用いた変換を行うかどうかを表す論理値。もし False (初期設定)であれば限界効果と回帰係数の推定値をそのまま出力し、もし True であれば出力されるデータフレームのうち `unconditional`、`conditional`、`selection`、`beta` の列について指数関数 $100[\exp(x - 1)]$ を用いた変換を行います。例えば被説明変数は対数賃金であれば、変換後の限界効果はパーセンテージで表された賃金の変化率として解釈できます。 @@ -118,4 +118,4 @@ print(heckit_helper.heckitmfx_compute( - 春山鉄源 (2023) 『Pythonで学ぶ入門計量経済学』. https://py4etrics.github.io/index.html - Hoffmann, Rodolfo, and Ana Lucia Kassouf. (2005). Deriving conditional and unconditional marginal effects in log earnings equations estimated by heckman’s procedure. *Applied Economics*, 37(11), 1303–1311. *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/image/coefplot1.png b/docs/man/image/coefplot1.png new file mode 100644 index 0000000000000000000000000000000000000000..82a4975e75acc123b8af90833183992413f89d35 GIT binary patch literal 17557 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 VWm3qy17Azgjwl?CKX~%;{{vYFtq=eJ literal 0 HcmV?d00001 diff --git a/docs/man/image/coefplot2.png b/docs/man/image/coefplot2.png new file mode 100644 index 0000000000000000000000000000000000000000..7430971e9500c8be6d30ba5feda64f5692d83d89 GIT binary patch literal 24639 zcmeHvc|4Wt+W(S96-^oxQW_AARK`k!mC8J3NF`Y!nP>Jc*(IqJ2^q>fCuAO?R1}#j zbCM~UGxPi2t9{y?efGQG^A3Of{&;=P{v6w0mS;WBeP7piy6$W8Cyp#+;b5UqC=01F z2NfxlnfoaerjEI@@e||a>w58jdo2#BTPR&TXJM^prcXJpXJLBbqQwQn(`&8t&CCri zn(P$XEwp{h+Vd6`rskqsw;KO=fzU-WgRQkJbKUSJ^Gszl%qbK$J@OAzq*R0~1&eS|6v{qMgCT1s#mDB7RYi^3P4qwCQ6!CKRp%*#NIe(Zka9VQ)jV0U7 zw#=H6)@0^5XQ>6_!~gVYPKhp{1kIg0SH7nqTcQ;I)xkA~*(DVpd*n(LO~uUYac(g_ z_{M#WOnE1dxqZKP;dwHPD3Z-qncn{X0@R~NkJ77-e#WA5xJ-U`#DdbaRLDoxs5-XH zPuS>_S^9)FD}@qS&@M)?asPL2dYae*7fqwKr|TRu!uCBkC|<^KTB-5G@v4nNuN(E5 zC@vqGgi5U>)4qp2lz4reVNP6@xes;RnSc7dv5b)QXfEB$In80T>`so*Dwm+j z&PAd8R+-wYZqiXvQBy+C1!7d=%0sDlCbVbE8_$?AqcX$ND8-~+lZlC`>Ph{P70wAC zlk@}MwzT1I;!f_;>-bEo-9*u1b)3_rt24wIQ6eKNB@i@ac1`ktNr=N}rtV0*I>kxF zK>F5)a~0vo`L}Etv|g1b9FzPyE^c&Fis1C84dZv`*ImW+Q;pw9X{=9S+Gi}?$h32N z-PHxDJQ8;{aPC>B9qxIHXVuO1J6QXs7Y7SP5AnS0sE80Y`y?Z5{6YDR|L&Tugj^wN zQE~B|=cg5PbQ)B83YtyZ1MR;m96NSHGu0$cO~m@62Av z5t^2^NBClc7H(I6^k+P}dgtj$4hg$tyeb+OqvJe1-Y9JT`Pc?t-bjt4b9Te^)&i9) zmo5$Q(RI?GQmNN(-o&1~D>*r+lww?~x_$e0yN}m4on7fORlQkIQ03C4ORjTX7k66; zNJ;6Aj*gmT)~jV_C(3%BpYmzT(#bVwGf_*Hq}W`}2{D^$7vr^Kn>eZB_#&#{g+*s? zqQHlSsCjI^T}#)byxacYUVX`}gndCi-3sMMzCjSMN5d{QSm0<$T#X$EndapSs2yt9CA1zWlT8 zvllOPUqv0}Y%xn8e6=a4{f?aE?c&yc>%A0t!FDmBxbSh-YYoiPhe-iSk({||$JyWT zsU)e2!(Z!#?FP>aYNb8;@FW*E!1zNlb)cgHx&ZQGqvQ<-Uf zap7u_WAw@}*%clf!qNGgN3UvMqX+uWMN?`&$1mzCU4T9HDo!z&|`IkkamU) zeQdZVAwU1X3LGGYR21zvnJ47@l7mr;Zlc6BzfVpgJY6lNq>F@8aOfjmF{VF9SR5BpGd9w`N;_H2D>51v2bN+8O zQfVkK-nALMfk6q*%@QizVte+eKYjXCr)suV)G2?JNt5%@K9cpVRb%=me8%b*b+trO z?k)W3>X&y-H$-(L+K2f_McTE_@8PpN%1L)rXQwzvp)kCtbUL%kigGv=7Nq zEc54+wIpm(r>;0UQ88V25nbrx$B%=b{V%Gf$KiI`=G4grh=$?02&2h-pv~&c5V@o` zrZQk^{7UT7tIPr!MVG3FCD%NvL`4SaU6j17`x}`mPYZrgJbi4m`%+9sQAX7|VfWj9 zI`7*TQ&Obkf>@I*IuzryGgaxy#|Qxa^&1=cJQj6R^=(CkyM|njlqY9X0V$!Cx}WdJ(UuvkiG8>r<3$T zwb^+K+QnQnO=K=c>B!r@Rag}h<}fOqO?x6l5e~0*TU!w!SA!LMHnrBWCwrLo?aO

f+ zWLU;Hjn_7+zN?lPt_xXxF-rlh#f_D-93QDE-E%a1xFM!K(^`O!kLo;HtQ#HY6dX^z zPK#8LtB)_a*6Pf&@R8=(`HyT4+{V35>5QuNURL!e`VH>)0o-r1+cngsT${N&c)Z=X zn5v!K*1b7h{BE^9t5r ze|mX)Z=e>veA)YYIR1nf+wzX2xLN$7O5u;jM25PT6)#)a#F0Pj;(RZq=hjHT&LrJR z>oxpdPrAKJ?jGfNs`z60v0s>I+b`xa(@q|y zyp!*Ej8znAT>C^=Yq9+8Dq2-sYD1^(*ZIaD^DBWkHr39i=sxJ7L^p2j6g$1Xh?{cE zbDd8rJMXPErFZ#uKE@x}HtX=O zl-_x%wQ<;ARK&~hdD5WruIFQv6J zf5(aY{+$c|WlD&$ul_6wCTepjSOepBHwglaODeLLzy*NhL3%M7! z*Wy~XEeP0i=>WYl?a~>5GAT7c`c8fVj8F5OFH-1!vw-5PPKmS5hL4XmM1^3;9@wJvfqXU=R7_c!UcUWFgeWc>KvGRCFe zo56VSdMo+)_-^wG(<)__yFV{w$4$++P5|@Dc{B1hp`I3t(5-Pp3DrS@W^N%1OlzrNV zNC&<#lc{Mb${KomQAx?&ijF}vYDzF`NDqba#K;H!Tl(~`x0mN_<19*~f2?YZW(uv< z7F3~0;P+LZw+WEe;svMm$lol0y#XhvilJRyOFw*b4Ijv6BR2BB0LJsiMsX8-`4=w4wqd2XBrxg-7i#CFOVMla#2xHspEl;;wQ_g_$4mfmyUzIyYQpx^6lK2RIU$> zgm$)CKZ`1d=FF2WZ$Xy~KeIZ|J@Pr=^<=8bso11o!u6}#{k!Zt; za9TrFx{mXtB~?*JClE^?ATHW52v9|-G*E(l_39WxY7(-)`5C--opc(iQtPaa^M4o; zQk89Q-Tgl4MN-Kx%yS5ef8T8t78-gUpq^F}A8=GwwhAbhsz{?nf3eCexxcr?R@chv z$%iM#F)v@rghfQCsjITPKYw`0eL3HT4TqYWn>lu#yYcO7eT=_J2DPlLjAPp=mz&&D zUp1rz1&^0Xj>ndlmoHnj3U_|j-ZiWegKwn?$V2am6+HPwIlZ*JT#|84R5N&s6{(5d%Tq%M&K*6@)0tBfZBq8y!zV9h zhgo)28v@%Au2>Zz$4!>U9M(1RdU_Aez424go5VfpX!X%0{T}7rB&~UNsqNRY5Vyh` ztCU)&&b_|(0BEFiJ%phyO@$ZtC3+?^mdlQ6pP}4aLL{j?{RJQ!c=I6MDEr~Bgsm;>F2izOLG?$$`F1-EN|cqAy--ZQW^@S|H|EqQU1%xv z;1IcRj~BR~np$V(o-_K{pMUryKH{4oDP17>47}E2;LUEecb{9uM?c-6)uknprGmRO z)KPH+w@DG4%5JdzQrXL!Zd`UUcqbO@-tN@K`1bbm5+hBQ>7kO2V_H_cFM*I%l$Af( zuGwRnM?Te+nYMwmbCbV3e7>-4>V?r&1*cjqO87HDGxQsw^*_;p z{%9du^+>OPrR(|g=eB`!X3bJbV^#7I()J1nh+DPu+-A^Dqnh}t0yZhFRwq2dFRR!U z--~SBv};%8K;5~dC{ShbRjyUk$WMLjl`f>I)hwLK zV|hVA$(t#ykWpl`3je`HB!e1Gi0s{~vAe-0BxkHMMmNhNBGB&Ws#UA(rYDElmn?Z` z5ag&TVgD_*kpCAWnTm}*x<~kPxnz=7_SDRgZ`;N>+eJ=&%ko2q5A*NXp@?qZ*hVSig7>#9O;eq`_(2xVtu0 zPR!~{T6;ERJyEkyzn!?hN1?uzS-1ox|M8`?b)~Y)yEcrm#vF=X!7EW2bIzUF^f(V` z(!c!jOUCrnxFs%FVB4+z1{7Ku&ed3vg@WKD_=TJTry z374~nE_q=ZsASNn3flw#itV^q3(|L7jJbgTlT!NvXUc?J5BK)0LB37=!EtR%Drkx zBt)(N=Bivt0BTcyB%_c1mB#$9AnBJ(^l4wn661e#V#vmMn*btavvK{5<16$S@B3$w zce8*%#dUT8UMeXl{|r3<+gM3uVwt3|9;WIQX74bign=|wi zCSEktMfZ!idZ=9LvdEDOz6Yc)bk;^ieR$?Nnu+H}s07bk7Y=XxPhL)`7D*!AV)2xi zL#pndL_+t*SVzeYn1UZ)ra$Bu%RI(-xqMvaHkziU-;SL-1++h#?g1lC(JPouRm6fu zTQsmm3qS{ox04d)5feLk?bS@#kOhQHH*meHahZLg-G-RkjC+J>&e*BsB@#rWv4L+#5 zcwZE6Me^(gD}%8$?5pKuWh;_O zC1cS0Ni75*K!s4yHuHtvTvBBE;x3< z=oe3d=qaZ}Qg+PLNHcvv-uc&GXJn6m&Gg%4NLP*1Y)zU(C$G2biW@_R7IZ6MD8ob^ z!D8o+^#SJdl$uhXHEY)OYuCyub8ISad^|J>2m{jeWUL;% zV^xB#F5RNHY5yeNwhC%cu=8Y>?$~(abUgIUQk|N~>XR1@>oY7rq?<=HI1X!*PU*g4 zYc*h%vbs9akX6*3af|FmTYXgI<<~}3M6EVSdukqNKiK|Y`I2xfUQCNc}|Ig8f$)ta^w~EJv>dc=OzYW2 z_+2fYQq^xCNL%)QqCzow*|=fs;H686FfRaapAGFdy^Xp!_`Z4udjOx3x}*P?)pdQA z1@bR?C0zUpd)83y`J^^7rS$u)t$J#bsy1e)u70oWZc0^HaPU5?8x^ooAb$2WYqk_@ zBW}{ITek!n8i4)10t0nA9s|pwU3SrAXUF?N&xZ`MfjT)hq;%@kb5DOr&9tQ}K6{oE zHOV|3HC$+0cf{p_=Ey|H6vK+c8X6iLVpg%>Ktd?WaEaTCx8_b9;(iOqPFPc_R~G6D znxbtWX!!^WQ6zjtW=0u?9PuO=VN&}$MGsdI*m~o;)MXm>uP*ctgplW|z%;TTH3DxY zOsw18BcZTgvHWvK-&}+%h<41x(8FN#lCPgkZrHgDEr;mEyd5QCJ!b=jD3sn+4q9%NqZpzNZlB}$H^asp#~lj_0IVr4qBn?y^*1-^?{r9$;DwNxn3=tA-){ax ze0siVCMD>R`j*GzTgy>^Hc(R=oiZU*O^`|w8N-nN@X;LdyRD3%yne{G zPeokde@iG`2CWGifZZQYrEeZn-X>t30|yTLdU(aoMKilyRF6%XrRcuAvVyv{J#{A_^~V(wfD@RR2~Nj;ecWHlkyX^=(}76ruJ8A z*(ru>o31rh+c>q6n$cIdntjotrtboz{)e2FzcBvO!U=vQf;Ak`qx1}`Zd%|u$R(9~ zDu#%i{&z0F)}4E-*g1f9&&%$V*Xfr}1r<44t)>@iPbKiSatrA?4Tk3O&x|)@2*#H3 z0GjL8uNS`XZd+J*co8HZlT-n5aV>nzz@Toc%#A1Rw-49>ioz@UT$KTmp>*~vY&~Yn zqNtrJQg@wHB_~@CwD*}4tNmng7}G%k`h=zqXzDIC)Y~E!Vk;<1o?MT{NMyC?l2- z807BmKB>OYwDkn1q*a-b$3(WXQ0#Tln;qNmX=_}DwbVAzztzHoG)jVJ=>8wr}7uOOgdZ4bd0CHDYo1mS9Tw`e?E zE~vQ~{*v=pMG$|M!BA&aC+rqtekPtd;)uoPQ|APM1i_iGkr5lxVSp5Ce0Qpeh&uyD z!u%T$|Jc&vT$VV4^7=B7z4A)Ip>}~f#c3oRc4OnN?rkoBueBF~$3CJjHQ4t^aEe;U zT%NhOe6Qcu`?QeMq+5+O;al_qhJhR?psJm9}g(r6nJc(q-ajWjS zbS3nzoQGrKCjz1$K3rGYf-pjrS>3+lhAS&RJ#_Q^#x}wXLN;;`?3hqV2*-J00Hb{C z)*X<&yQS>ewWVY=Q59iEZIla)1t^xKb2*LZ!Pb_ChV}O4?e#;Mjgu#W9KZR3=*9Nr zPV4vs_*Z8@(}@K3J4(0v_9cp#k;A#u*}wk!D-@VbhmIUE>Z*>TRfK!2Teptz17hS7 z>$1?3JAtH;goNVrt!ff<6YxBZ@RVq8gMZ;Qgpb(yAteTszvX>l>r7y#J$uqPJXfZu z7ILFnsb4xz4$v{iPqICYsp@_8h{hQ@DNmc9o_Y z=;YZ%ujwP@uBRSS?>J9~?E(6P+;)c-ihp)*{`|4t0yfJ}FBg}JLX=%$T!V}b$oR=r z6Ly^hpxXX{fhx$9Gzr#9N6YA*^Xk*(#hR5qOU@Ks^t6wHNla&$!1NZOY}QkXj16An z5*o@&WIT9~cD+yM2dgAFsqvl-RQTPB@Ri_bxEQH{6GCDTwfeF-rYah_4HZ)ulv3Dp5L-ga0Cf){*zg(s3c^S2+=2cYxnpFL~icw3BOIj50%3WYxWdk}0i(@U54d$9(D?i-VsDDhoEKuaz&qsPe4 z!A6(I)~kX5J)vF1z8brch+8O0W0}iCD2fc8kGi(0hjy#+&P+W8OJY7^jq zh)LaMD(>EcRY2>Kh9xq2fj?Xx(YX|zGpIWP*s6L_1Lb-SN zKZ}6IclRv9);Bs7z&(#17#Ke|I7oZ13JVVL7+xx(j-hQs&z>Db6qN?;PbFs>s34;w z+#eEMGyw#Q7cU;`hzJ^dx!yC9KsP8du)LH7Q{c;;yqMK@70Xvuuy!?QDP(I|)Q04n z-d@!slHA%8+1E?&b~x|!bWf|hO1@2e-e}bEu971rh8ohuQM&>x*D`v5=Vi*-y0l9K zB>?1o^o>}_$r)$e=%_~eJMdX0GN`ooH7j%-cnZ=E)-0g(ZWc7RPtketDrhW?u3Km< zb8I#v-1CSlSv3;z*)b9ILsopTNNkHS>PweV8$+vqlfv0Vsd8GqP? z7A_zpbb@&ftFn_*j=?AzOgK?9(GJ1MHDQFMtg(l>Konu9Mja353s=Rc$w5R+Smd$= zKn%n}6_NoQum{c)E!=_nXuKTaHjl!O`-dZ3LS#`-@&4a74W5UE8rpwbz$&xeJe~kk zV95PYS&tA`l9|=;5R#%~r#K$V;>B7C>B`GQ% zu4@r0C)QtetVReLrqM`mGf~2L4FN*OKDuvB)-PU8(w2Z1NJ`yOcFK&&aUAa)>1zQu zCDLC!LWs2fPp{~q_&{AxYE6_N)}ay%;Zi!kyic-gc3r_AcLuM}e0=s=&P2Z~}s-HD~dHZ{Vpem$OBhcUs zdz+qi;%~X``xxRWNr!;)wLTNd$j0oU>XVw;b}77uh>6lep+>%JHjRXbWY^-cn`|aQ z?F?n8vLrbACGiC#{e`@#JctJRe)PnI1JaX+5O`I~b(+lLQrK~(aDl6|@UA8O~F-Sp;#|L3+RKiK*r2-dvBZmOz20WRU3fujmsAXp;WEUDC=~=c( zU_x<-3d_)m9tMO@gZr(SZWc!9hxJ!2xIp+Hyw~D$N!rQ<08uHX%?HROqoUG7;mI39 z?jOa?S#~O0c2-j9 z1oR&d5LHP!_l87Eh)GSBJh6xwi6c@3u$hRsU2jow+()7irHY2X&mfBP4jg+;OX&pN z91@=suady(*-y*ba~&m``&@Azs6B$3He~!8H=c*P7`Uk$02Rd(0^KIU+;W_jPANC6a@frg6mUnYRy&cs$aNL@}?2tZ;Io{-bPbYq%Ys9LqIyQ#>o>l$?7{C0Dn`+ zr+DYlbx3W~#jQmW-(UCurzXt$gdyq~cBBdt<~$P!t+6bKwXq@6`@2UENEMM&oG=F| z(tLF47qT{wa62l)iyj-Sh{=7Y1$&>ct2Y5+YOq%1y{$EN}Q1;y2eI=}1JSK98TdCz;K zS-CecF(dUxb|{tjRVC0dxc$6Q4j-PO0a#2;*aqx1KP)FP zoSEog4Gh(U3mFk?B5@3gsOlyDpK-6L6QE308 zbMGJPlVFGw61Pq4Ov%vixj9s_|M;5kXFxaOW^kfSyq^*ij)-u@wo9)e?QrmXZ*V zfn*bc!2EIRckWbz^?}0cNn%1smPmYicZMhc0Df&ITiQy4)X>8q&kVYI?!`@|Cp(Oq zQ5Au{3E7mGo*00esiL9bi&h*#!aRHT?j_z2FW>t0(r}WbuP!LVPE|p>T*xh{MMTe< zajxAa_p!GlNZN>4j9iX`3Jjiu7hhYtX&Dz+JTO7o&JWMNkI#^K1K3Sl{ojP6OYsW` z#1ttAFEi6bGr+76kuW1z_3-U8-?tZGm z!bxp@$_OLsr?KGT#mVON=o&?@Uk_^ef7JB8b0-9k9k+HQb6M_V^({J$g5hat>Uw&5 zaHSNH#`hE`NI?+qwfXRa8#ivq>cq@(v9{vcQf_c^zOqI5F})$<&RRazxHAderK&k| zUWL{S114HvoO zFdKbbYvF-KTkFk=1;3BeI1K=(wf{p5$JUxS?G&_Sx7nwcMo#?SW%|g;2`+{K2px0g z4@RZ66ro0S#7}z~>i-<}n>q8|SD~X|6jFbYJ+1BjR;MbuZr!gxu@kvDnBfAwI{lm_ zPCfAeO4I*XOn2Sqyn+&J@>nyjvpmfGPyB>TnE|sf436)f#JY{M7(M&@Jel6gs|dI7 zP)Yjeud|#8j2(kxeCMB2r;xYF*C`P|XsnUo z%T796B(_CEkp6t#s;h(V8$(0G%cZkJUv^Dshn2#4K#tXKi*AmVRpw-L>K!a0NLWb6 zy$O^!2|PD|yrQy=jg4!~8rCCWwWN5GDG|VOyoQKGNTdN!RI1dp%aSzD7b~$EONvXU z)nF*(p5*C>{-FA+pUixw1*oHL#Xj5;9SJOsH;KR*>=zmlp}XT&nj+9B1Twq+SDO$u z5od$@j&UZf!4IWmXn=%~aDyHYz>n72Rg+MIEkx4uh|1(>c6x<=Pa)=hc(NNUk|yR! zkvF<8+A{v4ytF7HS8J|>Q;D(HR_CsrjWr)PF=qK9FO!b|%ya$~eZynT;_0vKe+TQO z7g9DFXz`nltSa8AAsPQn_G;+l5nk?^Gp}vyVurRuL&yCKBL>l~> zi&n1eb>qeYZ!a$yI&r-3-D}sV>98RBE}(=e$`>p{b-icL{u5OHYN?Bse1eVy!hzWb zD31Z%$ebKdLMIY=Q+=M!Hg^fX0(K>XV~CAMA@3;B|8jlc+Yq2QdeM>icimQ{>2{d6 zsC*zj2Tz?KFRaHH`4@;7M8ZMkmz2~2&F7GE%4!q0BVCS>YoM6M?X?`ar^c4lS7XZv zXQ7;;3n&8yZ>8li<<GZr|piq8W77rY68*#0#tp z$G>%x6aw_)EmTp*v1F3%h5{@AoFO$e5>gT<5wk+a=0UkAQJ67RN(@P_f@b-nN3VZP zZ{vc_NG*pbHHZvT7sPcUAo5=kR67G)j6noi?UQc(8f{>YK*w(ym7%&*&ox; zXmwWE@*jcx`11!}{nMbB;Q>xYH+49G*s_ZYg@9SYgqOi3LcagrF$5K%cqgBIwFIeB zqj!(=I_uJtcrm04Lsu4UpN2VG9f!U{j*xdn?FJ*Ozf0g<9=jXl0Y|VB*OLvOkUNz@ zQoj%pvGUG;txJa!7_F8Nh$RS0ne0y6<2;pxIA$b?TJZ5vfpjqqR)Iy3Y*H`EXscj` z;XzJg4Cff3+?dvptuyCIO;3=FKbCPM_P`rh>hxWh8#*2+{@&b)2>$?0WV|A97z=E& zna%kYpaMV~?s+i6fVyTF%6d}{xL*atPgRUK5kNQqv>RFaV4Kvm29UBJhRXnx;eLdY zdropIBodY2Y5sF6W5`}1^{sW2X7#r4Yu{I9v)@`2qmp^7tkr1gLv`k*e2_JmXD@gw zyEU7ajDcMPbrSDF?0ASCnw2FEo`|6fq+sLnzmX>lf<|Tn@k@wn1nP_U$CY!CHA<)s zwlx`;Z0iv`%j|9R)3|x+<<5Y&0+c;o;;lc%1v6Pv!X4y9A`r?AHqcif2z}CO5u?D6`p;6JZ z#e~~;4}^f4S1~OMSXos8_0_s&xa8V69(Olfl_U7+yQQH!-8UZEUMMLLk&!Ue%$Pty zS2Eaa2`?h;4UY?l53)1Q-B-j!M#`{Bjs%Av^Lvu`=F;NF@#h=IJT-9&t41kh&WdnL%1|XhdnAI)4OH5^!7%@(Qb$N41llp zYYwyJfr7D|dMEd>e@wxt$9y+H5+uEHm&1l+%uA5PN%EbTXPd;>_8k(TyfSa8#bCPv zsCE=6Di9Q1*{SR;GPWIX$xy6s1lo1-)kA>BNTVWBx|k+Z^H{aBaDZExM5oCNB|>Ej zId;k5pSMsZR5UgDp&m$~?81|Jc1Rdu+0xCo=I<{?L_2hF(1I9iME5`;CAN)^3G%HIduOeIFOLoIjAo7XV^$~>UJN(d9;ZEd@AM?G?;#*7je zncekAZrTWK6T9^BAg1&RlHPz77{ciykdznW_X<*Wx6MCI03NXMq>`q|>a!M=RFXoIMmJ{#0f@Gf%HUUa0VF@wGHvwib(-|!nBuVN! zQZOVU9Ch4Z1f3u-Gx0vMvgl-*$>+A!D~OSTF=}sb?NxZqx{O8Q0v@VX7h`r z+1wB9xY1w6gHb@{TLgJUm8vf=>15@GA*l-Fj1{zugQK&@Ouhi+SKONE<;$08pYGdI zENfCmByOQ;;8v8T@Wrd({^CI^Bj%Ya+b7`u-0YCGd-`(cHu;?xoYeiN69S&x@~du` zpKLeINoH`MvmS$#OO!Eyw@H|YQ$i7i+21}GK{LeKBIw;ELqOy}r+LV(_9y+$MwcjN z8yFsrsYiP2-II7td(V!E&j9dc>pjIk5?{b_5fUL37sDHC_V)V)u>kWsxcxZlfEd8U z==i@$tpA(D`u~3ti(v}=Fu1;tUtx}oaZ(5gk=I_#6{K>AT15Uuh#c)<^nVm0C!=DB z%>0=;V%P+u);)ja!2Rn5LTKluvWfS){KW;*=}Vk_z!s08A-e4TJ^b@;4%XsW5=xLE z*lDgT-eDseLf&dPOb+?yl8EH}mpQQ?>8bGF=j;g8rZWy;IF~eIa$-CCAj~L7h^G`8syoBiYV@=*vo;MoV zvf6%bMhLKaEvtIlsE@a(ypM4`>uMQWw+%6e9;@>f+>#vk_o`I3i}b;SNp8$cm!nnJ zJGK@3Z1t%($?fd^1a%F^6~KZ?GAO-UZ!#>7s2@8Qmrk>=TY*A{6_P^X=yQDAx0Bg- zWMOImcF?WAXlz1S9X5}oRJdP1I-hNc5)fr>anxd**kYI$oAQBfeSrSSY&F06Dzo(B ztxtyjIM8J@=@@07a7a(D)Xs05DTRNREOX(nx_)~t5=LYi<*qTXFh4Q`^g&GO+v&)m zA7Oj}Dz`@KxaXR^4~Z%VjerC$*pXT#b`Y{Ch&WY%$HVcncrO|~aIe9pWg$B|yCDRL zs>j(y3)bwBC)O8I)urDqrNH=8?fS;`-T1T3sc&;i?emQb3mmsu-&vtA}aA zBsUt#4yW)_-wSRvkSW5#G~!yB4UrfggpS?eYY5;?SutR7_Z8i0-!DHH^ zCEjy*$311Ll6B9NwD@S9OVs2gyQzVFdPNm@Ch|Y?L4;$}5_AYb26rPf=CE*L02l!^ z%Ha%IkaJ7MA!Z|Hycx$U#UQy)aA(Q=QEUEeSPA5$m_VKf5ZoE_+xTs@k;j&z0YoN1 zx(75ff>3{qe}*g**a6n4x?0dOJzH05*O-+dV#1}GijKjI!QXMu$h;3TkX9oSnr zqz`EF!D(rGvXOQS)R&SXfs%z>;_Bd&N+AC17@j=BW&6xLXaMEa5K?!bF8lOrvjBub@Y)9iY*>mFV~5{4u$1OW_x zmCU8#d?{Y)`olNgLez-GpYFmUi+Ve#<$>|Mm#t<|K>0dx(-?&jfaVSFu;$lU^9g$H zc$X;atnN$>TM!K(8C?b}^iH`aU3&$0N!_ajq5X1AT%Ih&N6S_ZQksW zkM5xKcW!b?M8gm<0#_jRD)O3ZqbA%RV?xqzr@>8PBB1RNe+cFS{s*BPTWUp>DeM{& zGsFT=0ZrjGgro)vaU0=`2u$oix-x{BLZ*Tt2Ux3YYL`l{Z>`wQ9}}|!S<7nh%?;Gf z#@yVJAgKf*GLV_vu&&zQWeYU&KV*v-3<+Z9Z(x@LCMEiJnW`Xkg1zU5P`zWV(_%HV8rG~Pp)BpP z2x*7_ME$`UIzdD`3>WLzb!?z2BFG``@f)u;kvWRo#6ry#!1-cO(EpT|Rp@k8J19qdpuWKzy^q`yiSAfMnuGqCdKB8cLOVa~qPg=P}Dk7A}aA#g})9?l)VcR?mU4f(&Cq zLJ=2i+NM*D+V2L;Y6{+s9cZN0*8JJPw5S@7J6X6CBK~A5Ru7(hi zbW`ISM~@dr1_rE=6w03XWw=YqDQH>!NVN6I*2GDM9g^|!w_OmwF!!XYpm3W^03G+; zafqQ*2a5B7;zOdNDw>$Y^G2bp(u;E6Vaq6Wu)p>fHVVfE2PIWGe?Vwrs7Z>{X$1X< zyh`S|RW;852O=jL{65K`i%?IL4xGN#xm9ZwOeL6zMiAu?!Z39$e7bD``Lj3~XlRYO zoMlXjSWKwM^~wZ55DW&E3SJT*NA#GVK4W=tm4fm3Y{~?dlH;7{Uwo|9 z(qoqog+061U)!Qu#{G(R+wZx|D>d%fGxk|#K9mw$v259S2opqa#Fnp2H#a~Fr1En+ z*)%`YFetfSrX(j32Bv;eK|z5yC&;izV?@kGNc0=5$4G1*%+6JjW4Dm&^x&4#LBbo0 zW2}XHI&$&)!&=IhpP%lV5dM6iVBp_zOv!0h1i<68hg|tqczR?o)e%Q^`K&RsOJU4K zg7afn5=Rp9S=&clq6|QZQ&v^AdS#0=YoK>=D>;FS%tB*YuoJ~M>wH5$Okl9%%>~)YZ;cdhkGxT( zm^1M}NBHClicQD$1Gjp6P4PxJaD@OgNR1U}5gVuoenK->gn&Y(An`y?ko~m5d-oy% zwRo>L=aleYpsNrmjg%!8Xnp`BgAj9wbxnLz9EX)+KWtKZt0t%zf)VIN0`zRO(XN|f zU*B?C*F8W(h}?g9HcoU@!C`*OaHay8wnX>o-zvGEj6r@5D}3>y3(rjn8eLV~$=!et zUF4K19AZZ*3k15UkB%x~XhCDex>FA^dr684=~|UBYNI~IfFFZCm<_@UvOlqRoP_Cs z#@QL4`Bf2lRVXOCa3URi#_W7M)PE)P(5hrZB{CetsPn=ZV}@KQ3O}Z;ws04&!kLH5 zPxW0{7qE1-QI%4v0AJDWX@6#y_hpQ`42-<1`Ir9NT#B~si%(5jZ!X^w?qG`pG@=(# zqR(!R)+^WgK7o*Mo;5;>fM>YMP+F#hTK(?$_(Y(zw0{1qn&#S2ir^cdYDAHx(B_|| z8%@XOV^0YM!0_hv5-+~koa2sS&!a6bbW3j36%Y_mLI8(2$^~8X$C)C<9EK$JH7bmc zKJ2;GsoJ9;@XzNrDJo5C1$&dgXCqU1#s#xKWScmxbVayI->j)Ah0!W8g8&LKFnCps z>eFo^QZY^(#ULFZ4C@9tbML<&zp1&NG2Wf>ThxJDWc(3o=9Ex~Dk=Mjur&4TkS{j1 z7p0s#+}KxKX5HjN2$ToSmz7!hDo+&Ul!*gdaCo2C9Lnd`Zfi=*d_>qlkN!9o^wh^S zjPr)ZCI(73P!aOkG=Rf4e?B&8+X9AY{l}?6|H_|!aM>SoG=EUP%z``vAuZp`w6u4n z-g(@l=zsg7L2b=t7V&?BX`V>K6_V5GO3eQ_@U!ZG*_JwGj{$STl#V)^T5B*t$ulXM#|M0J-@bioG$s8s zXpfXnVS4(mlH*mh;?a4S^RS+`ZLuAj%zgi8Q}Ry>k%C9MAMJTGG~5zGpYyF^Z#Y&bHl>%(ysnL%i1|C!si@z|}&(56>~qi6YPH zKTF!$kfA&PVLBm+=wwe>x?***HFL+R5{Na4Sy#uAW;gb`tFJylM`92NcXuTe2IP}V z{KRi?kRf8ciui(E)yEs1#^Z8jqZeaVZXV#Mg`~q!0&U1Bh1I*9N@9z|4BWEh&tg>hX z!w@`HBoVI!wm40#uM-%oI0Ab$t9`f~urtuIvwxInU(cnmcCpv>)-r=!Di3-_Rx#)4 zW5V~{2wWrESFPCOhmniuLmr>ws@_V1=R9y0?HSaaK+8bqDO+NK7UD#dg{ig1S(xNF z4CnO{rZaL?3xp@?!cm^9SEbHk=cR9B9wjtj-3bQV6*a# zVD6?}0xYq6QU-Uh)GdD&D9di7Sac^3jcec}j~gI4iTOrw%C?aSu!!rll9+@XS{2A1jiO4^e8li6=2E4rCDLM8MmuUkE?6L8<-%4<~?}vD<-?Qi49>9c)?!&jq zAu=P6*nTn5ql32BYr9o6<}!d z)mzqR`)EbP?=fw1aRMgbFFiueRRBlDNqK1X{Gy_oyX#CZx1|IJudTOj3kWnHAT$z3 zAb?c_T9RXKuu8i~(8{<^I5eZAfV9nyp7)43VqE7o$DSpPQJupwA15f5oY`)}g!W|Z z?@sx;ftHE44L;W1 z^zn89xz)xJF^1m86(EC!MPp99Ts*&_NT5k zdSm;0$6<0UH|7mSzDOq^)d?y_h4b{VGeht|#eiviYHWbH^4uU-l{@%*!D{UNohQkG z(@O3)Zh*z6eX*O~>$MBPG;(q(a0>|wf&j+AC?YmL#*4Z%de9vJl*vgCz{lhf;Kc%) zH%I1+!fvjzmv=gsTD!rU`y}>)ctXwdGjXp!K6e+Gs3Sfg&?-3=0kWD<21~kfU){Uz zZ^iLSwYKIraxDVpOVxZcPXV4}kz&JPM;K9kLJm_v(DmtH+nmTZ?Gn)#qH%QFjc?99 z$+_II&1FTMiM4BxwvbP#bA&%h)8fddJ1kueU`iP+E8l6y6dyzxvZ z`sPlKy#PllA5f^dnX#pCl?!<_h7I-2k#&m0EA*k7Kk+$;7%?g?L&aggo-ExDnNJ7cLZ@8mq~* zd$JSuU12P`TlzlM!_L`vRqCWTToCCw&+TTtGgSV#*GVF%~qMD*5U{@5uz}rYlr)mu$?+Q$fb4_OSGk}T|&qs z=km!5z^R z@fKcJWywVnnjsKY7*_`svIQk_c&J%9v#6vLwBQD|*D5%+jAnpz{Ayhs<>qSn+RTZv z^Wkus86n}**BV;N+r<_XoL*V;P6f$6^5x)S^gZtO)4_s&V8kDe;}6^6M|6;k!r<#a gLqUue9c!Lu);D>nVP7p&O@2T?)}~G|K6VGKG!kqz4rR7^1+pms-Hg&P<_D7Eq-RDpDvj z_E9L)+ULx|cRDT|)y4nqwmhV6sbp$kX`^p`nj)ufX?D)k@|@v`HP)xiEeuUfwh8VO z+_GuSSxZYZ3sE7V^FMw;(A4~lP%ZPEYj}~lX3`oK6v`rf^1o>jlHrCFiq0JB!F|fM zeqD7JZI!I*C;RpomMK0@U`Y)P4V}X@bH=fK`}QvJa`Xz!k85mQQ{eLGlkKetv2030 z^O|p7Zf-femoCj?T7R8c^iuxybNglIdWY`iySZ7;&dFK1Up+{6f9;H-F)N)EX><9a zkH3wW!a}5uSnZP$*{piKD5EuP844d*?7QzC7Z(_>Z67V_G|h@g3or`xi65 zIL>@|4daV!mN}Rs{Bz-3e2MV|MQP4})imB!7cX8EHUE4)N;z`f&D>8N<`hcR${b-&!*&~~2 z6z{8_>{$1Eb}0Mst8mk&D9W*#6?qlISsy=YXY{>ZMGIMb;OZNL#E}>4D7~>UF`IH< zy?P<3;F55-=Mx*=gEt~1W8T^~R_&$2rBN!;rPAJeO-$nU@88c&=i0_Tm+~g>*$i)1 zJJ#a&X_RcAZ5#}T-hC;c=w0<9jiiwb+QoXoy^YRLec(^d7lQ-*UQqptuWcShv=%r@@ z9m9$x#*PU37F5ykS1dQkPY?Vj4?&xA)}b1!VRwmCs$injxmitp>S2271;TS!(1@7%%p z{-eS-#(!rRI0bn(w>apmqfk}{+3fR@KP6)^$s?z?!SP${0R8s3bGXo*FPRUsI4EX? z0(ZRDSf}YMycWD^ht3Aoc->gJhdT_vyt|(%m@5>*AsOCXwzKWrb0ym6{A~kc^Wq%? z?KJDcO-tLuYxpv)PdBh=8+EdBfkfa z6y!;)sfhaW8pHp>u_*T}Yy12w@`ILTl0YMu&o9M%?@(-c4 zNk-%TbZwpLIdkT`zqPZzwPP!V!n?$db&+4%(Q#2($-=-%b9&`QNtO{2DZ8&qZ3^Pd z4f1q1U7ywkSZTdQD!H#)iUX_O2OU_>#uk}s)zMy|rsu;Q8Wxs+;wi6)$Y9hw%UvAp z716%y)~&N_zO~b+>E#vQ*hIs!4M`?-nqFRBGDnV-kM(5r=sv&DeE7g-lH}OjX2aBo1_^_2io*8~1;H+g-JKkM)rZ`yo|J%V+JCvC$RL zYQ7O)sCPEBO^)?cJ<-o$!H7l&J34Ajvnrk$ma(i_6)kGjezrQ{^h_i7>(}33nmLb! ziz~jj*NlgUr|ph{#IfMRw^)`e3ECLwpm_Dzhm96()mUv#(uLlq_zdK3W-1hx$K{;K zPv1bH$jr+q@X;yADBxndc-Zw}fGq!{b*pXDwCnacw9?zGDgFiD7EpTks4c&=N%NU> zU7C%Won7kP&01l7&3V4VInTMZ1${>c+JcQLqWCs%mXn+u4pvlD^uBxdi|(1)=jYqY zBkvq`Ul}woV9B#_V~3a2>JsP4uUtc-8X6i8cA5t4Fs_^-JH7e5Z!xm)4ys+t$|B zUYC}PXBPI`>_z+{A}U{7ipjiLjt&?Ojc!y3C@+?rikTQ264B-CAPDn^#{+QnPc2QgVhjCS_b56!y9XgsVWn5($H6B@S3ku49 z|82HaZ{t2Xoj#JvLD|a|WW)C{sU~f_Bqey`ypQ=x7rP&lDqx|q_KnN5>E+3$dQ`<| z)!6OlJ_v8td={b1e5e26Wh`dH`t*y;%*={rW={;>-3wwDF?vxok|#MCB=0Y3`2Nv8 zS_tO2z3Cd4U~jA}ik_~0mxxNduFk%F`yTAEiFl?birL(h)G>4 zcF2Le+nfT&x^Au7S&8@OrgHAFF2AvC;#x<6`ES6A00p7F4E3@?i`EDL*U zloWL`?{y?v?R8Zz4vG_*u=FD{sD4fgL+1oQwn!O{6B=bi_s)7fLwR_Jw zI@8Tl2Kw^2I2BGy;wHb^WY(Pvq8tm)*QKglxNxDnMNl_A;?=8HOtqsEvyE@D zi?FO%5msKVTxVXe`AWB>sA!F&BrmTt&D-B!=W&g*USgra9d5Fx-kjI5E99!m8hG&d zoA`xK2Qdjn6T1Wi3Ze}jqry&2ev-@=FqqRa+LPr|VN}vuw9__y5ryJ#r9RZG%BZJb z%4faNiY!I8K6>Uf3J)Hkw1I(vYu@aI9K5}*PD$(5ulMot3Mva%h_)MSr}bZxpLEKa zJ9nWoVn4hlM-dOF#ZZgA%s>%^tt@Q|53tQkc;x7r1+ zs0meLNKP$LVL6+0Qk5U>I8Wp5`tbAsS-dAb#8vsPP!;jb@`z*WZ><*B+`W6Zs7<%u z)%k4e!pqup&%C<6#I7e}XaMD;KzROcfB8cHJ!(qf@|&N;daajg|CnN7F6z&|)5H%u zGVY;irUp&<>4`&}l1|!J^|dQG?#t!09<9?(zRKh_vUt%G&GH131$8S`lHLqbD7_m8 z1UD$BoG3}Qv*r`r&o7w$L^EVqns04t@A+wz@p_djYm~x{l;AB+C)ZYlD{vLw+j2nM zj^#qN@S>SBW}NM+NfLFQOh0k*WJUT#3#`wSY_pQrw^orwRq40ef@S&g(94%+Obj=B zjFtsXDj(O%up2BrpIo;AXWx3M+pQBr4QhM$x^PD-1WJ%~{i(S*2}?^cdP-B|jM+Su z$i?bs7cV`Y6d`kEZ{g~XkNpIuQySafr!~6GvZV3PSibtQ`sR^>u?D3~t7#M&|J>f( zq=I}hf{LI6vjeps7y6k4I{V^U;WO!?rQs?IvYow{V9ekIina* zB={X_M$-A(N=Gh=%ggs^+AWV?_M1B0CKayv>*A0Yf;B92s7)y@E-nRva&ssyLhsWa zaWnS*tJe%HmCX`2=Cx)o^)sE$CoZl-!&&zB2_Sl772~(YlV)(IXbUFdk`mLSSiL?-Ym8dr-o(==*V=a}WQCw_R&SjED;jtU* zN*?@HYg*7|If^rt;K`>7fh{6Y7AS_6!~_&;)1 zvm4rbX}KqkojVuv*PSzcdPS148W<>c#5%^q0|jLKQ~I%hvMpEcRRpTS^W>o(xVF%z z(BSL&efXtAgtd|#m~}zaKT{B|@#qzqev2d5@HPJZXAc?t&hyk$bsS#wzdYIO?7f4X z)n$y`lDM0;w(En?#Dn!$X2{Ad3yFAgLXS~x^hLo*Uznh}{*vmcH?A54K#O!7`=*u= z*zf7*7xUu9uD~uX-CZD4Bfi@m?+;Wbm-_DMpYqQ<@?gwl(wwq4ay==SVW*O7>1Mmi zQ>~2kd_O$}*lcV3{Wq+$dQk=s3*{^zJS;AK+?l7Xv1FV+V=d)qJGLSqriB38p@xBJ-5r&%>HH9Mn{y98KflaiM^%;NWZ$Bp z1lh5=C;GpcWDKfaxpplYRlO$7Cf?p34=z$G*(9O13)D-wr#_?N#f6jf&z~bMG{2^W zU~mN{$sI4R%)@w_S_vWaq&h7B< zI`d{1Z7rv$;BsGmHd@oJfGnrAjFm&qu*THqXG_*u_0;Qtt7twycmK5qS3IG4)suL+ zn&;=E(|R(s7G68RY>T_r`OrQEA8x z{25{2v0BOe;55Jg{(DV|ML4%%!QIW~yEvlMpFZYp>ut&z?Jp1-1VS=y$aEYETY($~c|0XXmQ75>_C4cT-8wfot9XxNT+Otm@8vpK>*y9CyWg;|QsE zd}!X#h3@x3zpZv2?^`$Id*@DYOiT<@az`C_k5$o~!90n^l2MAwrzMwAz&mPw#eLp= z^TkU2@IhV9Z`U!^XqCbCin8IpW)bJfai$K)2y#irRd;b{`wHp|lqpE2_!2_!+pGmN zqQFGs7e+tb6mt7$iZd89F9u8!P`B2R zBS&r+&!l8){qfjVELn1_@d5^se~S4X4;~O7AD`RJn-&d(v;|9ftWX#F&PO7$pIrrI zBToY?c5JApDopNSIatZMAwX8Ep$Jcb^NG8#cC8wctItJgBpP_t@|#Tf`T4CI+6l7a zzuV%q;~vY_qc@B*R8?+AMCMP4AMGD(nJfq%oJPr=2W<}J=QQ88ZHd{<(`PUAZlj-C zwsfgw?fGOwaAsZ8=E(4XQatm)dix$eZtjE5W3>(CPfzA4#*_|S`t7&n92}h;Tl0N# zjl3R|`$$x4CJb8mDVAN{8plj|cg5?EMQYimc)sQtRdI5zEGu?L-fH`pci(o}_8uo> zBR;*~4Zvr9&U@er5%bT|9?$zKwM^TxU8iI5wVaM$Fn4YVQ~@i<0i}Xmr#JH-al7dm zbN6voB7+hn7?gBOqloRF!^ArkGYpWf7^|6d>M2W^H-!?%_bZk#z?(RM9dF$H`WD#- zAPFkr@|+L?rb;i*T_%%$3;Z<_DuCPd>qq@Xt;(ZR1TrSR)ppbIWK^r-bSh%CcE&9< z-^~7=8nsy2cJYa%&q6)U3PBGURbG9*;8tgy{QP{yvu7iU{B|oHFA}6scz$oW-gC;p zAPS`Vfv8oK-9T#)XqFK)2=-lOkG5{xrV=W%T+dg1!;ztFHtUo$pUcZoix-J+TJcsm zL~OnD4CyKR5X}k)9UhAIHURmTyZ7O_x#=g@#t%E-jmBt6p*#S>SRrc4%HCt?Y*+Pp zH*GqycJ12Lrl#1x?N#v&%YDh7#0jpZwKe@%^n>kTftK6{YM$ziibyffz5AfzB#^!L zT7oiNPVC~iZCPyGg#=IW|yeL4tqhl#Pg^W9pzgS*{ zKEB2~|3f+caj^a!j5DcSo93j19iZonzd3q>oXETPFWyTlG${LRkpx4hqsUw)lp@FS z58U{ZNPTbNbm{!U!V0(L0^C#-V{%ZFfl{vg36-;UJB~h!m&Lbuw-7|f@plOF{~R6T zf&OiDSl5m^5QO*MfV}KtgQ4J8D3qU&3f_u9ZJZ1=Zqy!GSJ!bP{KnKF0t*?G0Wf{n zg_odDl>i zaXE5R+iQ}dnWm3aV0b^N*!nApdjAuG`iBDkZ$|Y4nVVUyY}~1>3BIN+%Q)+R7r3j> z?GPVr4gMLs{sKI;3A=DZfI`Wap><~r>3;bDsQMGv5}ptLB;_Z-`G0$?KSnR;HBUOB z`rPQ(z$uhJeERQ8P5N(s2w7@iBQ-!8+-*>2RgbU9V#jlH{=rp%x}gQVcbz`_)XJ;> zJ^yRG^vNXzcyIxi#K)gj$ned%(%8Nj^e?9{TN--@?gLI2ZYtChC5Rs$0+>8r4hHw~ zTH_Luo-Wo^ohW7ht@D_!Zoq#(Qeq6bNY0r*zZ@EN-4G6HTT@3NM}E>Fw(q?!U)|C>;3(1z)Xp;~5=#{2hhkYYOEb zu>BX+<;R2m!MI&B1u4C=U0q$-g^#=Zw6uF!mk~@(6wZG&*dynwnzoI8zGit^=gqNO zeg~qo(h|DU(qh5J9dyWA@Zo&x*^%cs`ek_S+ZB&$yU#^a?9c0|&7@S#@HqS*Su>MS zLrSYbJC?Juwj@pjcZR|<3D}nPUVQ3n$`_{use&C`o?V@5Icu_Hr%b;Y;KwZ;OQ%sJ z6jwM(Yis-AFJ-MB3I{<#@^hw^`SO`g*o^kQq)ym=dC{*s8NPj}Zk!GV?Nej9GObP! z$~vk1l^Y7=!sY!fAzbVEx|-9>$Nf?j8bY`f6=Z4J7q6P@T(uwZn5_^!HXsMQk0tN- z#@j&1xAZn$vS=H#prq|~=iU3}z~HjDB(0fj;y*u!*XfWp>tupuT9LsX`l!y=<10%q zo|%mQO`!OF^||oZf_2@|7&V32ZfqOh*a_F(;7ea^CX55TvK*>KxmadXsup@2@PtZl z3|GX>-CemZ)oQRkI$nmRsHAlIsk--r2bwh^M$od`KRgY7{P?kQmXqT|GuM=vP};MG z1*>+n0(hv{+P(k)425%&TD9A<)e{tzsDi-sgWYvnP=8e+=|k4sL^Y~QP3p8x6V!gu z=%izAo&dQ$1b-T-m*q6`?(*CdPtOAG5)uJPZ2(fE@zmr*Dv$(0lihV`9XL_D2Wyi} z?sE_*vK^gKUXo|?d7ThAB$rIXoL zcBF;r0-cR$hEVBV&sJfgIK)12lA;kEpI8|1)Ck>~CzSpOU?bIc5641spe$LkBo#hs zl3COKp#-R%@Ja!B?P&xr><}xHGSmE!E$n)%mc?g<0#RGI3G6H<QL`I^KA#f3VvkY}P`K2pAGFv;fC%8bho?T#f@? z;Nm>gK&R2j${3Ac;3+c@f3lNxZ%(w8n>8uvmX zN+gL0*B*9$=RkUoQ zJb6I~_S>DtZ3_b>v$E~5a+GjtolerM2$f}>0MY9{4Gv%NXy0$#)V{txqq4ADnZuuM zf;GW{D15k60o*o9HTFUGi{{%*wVR3n{E6sEgaBwD@GcUepFMi?XpL3t`=$g_d&138 z0cOsc6{VAA&Aez))qzFgz&~&xo;EC$`zM|!awkU5LcD!#k@lO-wIHrekx!h?OpcF` zqJ!DvrQ#)?uh^viD7nE&OX@a93AXFA^R+w3uwcY7FI-sZ&bCcC`0#?E=Tf)WL!pK# zz(n@tCM<+uS3FLIYKWtH0|ZGTYwX#hwf?aC(TXUQl?vZhq9C3&dg zb^}MRFfV^*KV(8xgde=)+=oXv9;2KlM%lNVxXewqG|FNbme8prO%eTTF^dwH?|DD!8mVCEC-Y){K$qQ3#B>oGr z28trD!o&_}PE91MY1fZ`y4F2*@hXdEiK=cWoFZxc33(%P|e3FsJ8t=YgCa!*Y6dB9|HNr$U-dkF|5(v8BGx&nMEI4==Acxk)!&o&1u6 zL;9yrpGath{^iT;ap$SA2GlMgaxS10m8?-%BA(~`6B&UhBzlud%_~jSd3ml~S5j3u#8Qmy2(}r53jVOd!%-L70_?kw?caZCwQZv-^a+D^E8*VC z5&Z=53PRfgHdyiu2(CW+V2$IboNGAKg0^RJc58UlT(eA#`{ze$Wc0@_qQtFT?J+|m z)iQGIlFaz8cyffFIgFUY+b<11pN{z#HEVRS z?*4eO+W5f!{g&gy7vOfJJ}bBuNW7_s9hFD3Pg|VWBx+R>=Fahu`zBM&ili8=13M3^ zWRw~pu$1z0)PG}u?S4{t_w=N%r;<6lx8)>B6~M@jfS6=d9^rM^V|6S_JNB3SfvfYq z$~1as+(k;D3OjXxC}p<%?%_o+bCFIMI_tjM;tTJ#ZDo#+hgkI-N+wnlJOBs-+rkKk z|AVck-OSC+m7!|pzJA^Q?*1nQmdVy&kM>Ys-BKI^kHzi3wO(P>^{mLhGDr51@;w&T zV~y!+R!}P}LfKiJZBlKb54m}GuQS#)6rfNpF1d8%{?Z}}g^qW>As!L|t%+DGbp=xRn2`FS zP-j=mUHm=Cu&8lGl;YZ6=6%wcILlP{XBd5JTtU}ngI9n9?Ah6p{iyyaI0U%?ryzT_ z747LMFAbIDp-!7NO*73pwkS|C9zq@wKrwj;xtwtAx_0?8!9r2Tg0E^m<9%5C5K)O} zNVHLUS(zp;nr7*|Fx!V&z7W{l8TQbm^uyDWDrwf|t=dWtL3=zFD&s>UEYLrXm6Vi3 zDTUvLkt=fQjpvD>q4BT99c|%(syH{6Bl?1Io&DBXeY(H?h~eIik^7G}ZIn*Z?DrkY z3U}yWaxr$#<$cRtY^-iz5C*9=5-xlcW`G=!YwpBBVFxta=WpaY;IMY_V`swqiAl6bafi4 zeMPcq!`4-E6$4P^aX>8;@6DdxEl_j5I^hrwp9&yEsLR18l7BDOo(oKUH};NVDLp~+ zSw@)3){qr!f-_(J;rx!I%20Z5(421DI>>vL9{(3wk$rch{z~R~^OU5eujkd)CY-(r zG215hG`+dE&~Smvm6II^QUG2HH3XB#6dwlusG zY7hSXTaQP{Z{>1cd5~@ZpN@YvceqhuQ9pn7mj9ur5GxeIFlwGBH>SW_KNLhO{!eR; zgbiy_t)jX4wrue_3^qS3!mua*3)KUa`l!ch@sB^zb@<-^4a+$>8D`9%QpgY0%^jgg zc=6a~vb6Fi`UigUze!#anI}UOI$FrA1?=yoF;9QUH4L)~|Mj0`On+!`**xacNI7XQ z4ZZmjODEmbna+kJ_#&TW`);-yiJax;GVcR7Rj z5cv12yzY;=T-@5hL~%Y2OpVOSUsA3J*|ff1WjbKRhF9U)&oHcad|&58OHzbF1SZ5y zb-QsxU!4z$9%F`SI;qJ-gW4}KIegM_ye|*TB~x%V>`-aOPk*Q_|H<%v$Tn-=SIwkM zW+QP1g48{R0ZkG`nPg_A$#O+l@@F&opS=10{(eHvsNmYCelg7P-UB2<@;@FXj?iBW z6Pw^?VfgwjC>=x&|5MHasiZ2ZtFO$FnMQHZV+hr~RZBfTo2L-q3jV$S|3_r_?-M-( z$?t3~btH7oRhRxGAQEvO8!MH5SBr$Q|J1MlX_yc&fQni=jmewpGRJ1-V`hhd8wvoEz}= zO_SLRQ>ZF9+)_JJBt@OZUzntI?I59<2FD?P*r%D3qsE-O%=U7MTE5S{$toKvPbFd1 zg#e~TwX3$AI2g$(Md2~SJ7;Li?72I&tJqWf;>eUtDG4ag-A`ep3WkG8{!%ei#tw<# zQ%PT(O^IX#k)bV@Rj<4{@r()vpjcf6Y3kIcjCOniYtR@8w{1_?B_RL#FxV3i?#2` zP{WUuAQkaYky?5ntbYlXj}Xow-3&WJe4HrtEm=$CzzcA6K11S_s)z$!#Qxhkl}N=y zkP{wkHzbl94?WPq92|kjB9I8Iz83B@1`j4MjJpk9ER6MLa(u&x?V$VWRd#_8SM-Pj zJQ0e6Ou(mwdj%tp23>-8t=O0X8Nd*R8nM=3oo{@YAasc8#vHKaP!K4BJgU z?sA-(7$PCsWRp4)aK&e$M>R;s1$ebQJX+ANO;h-GbEz;}JnFmq_JM9_%_|lMyN1Os&bVCw^Htm(%b*xI2&+D`Be=tc0T8mO0j~ z1mDiOr#==kI|(f-NKQQaQXELQKnH-bGK@zb8V#%_6xgS&$9XDkgF=9V1}FJF3Dl`r zy)0d@?NQj6WXb+*m7NC*L4dVEj5nM2t$}awWBh& zOm1gg2>GDMS$n|ei$-2i0PZB5*;3@lBT)d`NMu9I_DQOBR}^@YPpkGC zl%L<dnBmzNX>WyK6NIO}bc_j_NZ=Nt>F-;q?Ms|1dq z46BYLNaHg{qs%QVlFaEc{^ItkiD!!M78)o4n|k~CIpk74gK26)eT4E7Hau*LmzN6= z(|`<7itHZ`6%0cY)+cCQ7?~o(pF{g6h2-Ss&Y8p8I}TtOjd`kw)6s%jb%&dTWy!M} z8y5Ta;UtlSRAbbeoc!xds=gLWlFde_5O%5L#DG%J7|2>GQ9d4;q*7^?m|(JQAK;tZ zZBSX&py}YJy!a~w;#%>s%6#>lA|Xn6w~8Zk@*{=tcHu&9f)0~WRC%-BZo1V}KyfKu z!od*}pEao|lsWtu<+41(-lh;ZnWmg*Aa~{R^>)UtT`Do^ z$7U~DT@FSD&_cwrp{)-Kt#jG&hN1IV1<$^_x5cji?Z$bV(zfdu0RP$b<+7sFK#6oV z;OEMgmID=;j&)`^3lcPA$#U9r{lzm$DoOI#pK{M>dJo}fyYr;OkR7X__EG4WV;7W_ zm0e5N@VvXL^r(LdJH=#yb`SYKcn}2;$)dg*$!-KKN%W_6n-%7XgpkKBsH(2mcYU^7 zhYr7#chSfRiZ-Vc>%=00je2FVQ%RLVc?l)~j$*N|?xe7vHZaIXcvOlS5)vX!8x!N) z@leiwsC)BbOKnAD20}wZcz5nh-aFi6DY|^6`jgEN2G!{KK7-h>5db4|mzwX+C8>*~ zM){R_tOMmr3Xx}u1IPj;yjRO4zvgxTua~BOKaxlaX0MLxy zm-E=So_cdyM19kWAzn|}eFg9Vh*m2|0R zwEmn21Tf$rN`=_YLnWgPq276RGH>Bf-^GCvsX?cOL3@dw`x}&+Cf5J z@HJATOvJ`}b3|=>AB8Cd3Zm(3a{Qt=_FO6yA*(!28}FJedz;3e+eB)6XoaM1vYO=n9 z6~s7!nt<}avta{2jxy3Jk$&+jH+?oM;m3)^644Nn36O{GhIq;a4>1VSLIa=gC`6&z z0z1K|_Id1=B7gf_Q7E|~kYuAE*pN8;{sRX{KnADFQ4l*fH#bGp9?QN@XstM82&+jq zs|A8Cl~(UKq(dEPSv6AZJQ?h(Ye$8wuL=^(uN?7+WYHk=Sn5rj9`0?zyAeN=Y*?I( zM!k(ht<$+N1ikpIRacD)agU(D54>8YK%`Q}?*bv<6lld^Y3;G&X>C^x6a#$f@QYu+ zyfsKL5+0Y8VWGeC znq3>=VS}+iP5(O;cn^fa5D&g{=>z8w+{C{luCU>`bA%aqA_}zgpby%_TLjg$obenf1OUm z3vl#y{E|}tU_ajjK`Iyyw;|aV)#v__(`Gz?|6^uAdmSqyue)m1UnCup&%pMo_&MF) zCd_z?pBOn*9#8Lw52NussilZWoKCEE&;sS(yM&}-_FP_*Z3=<#zX~Z4h=k(tb0UU3 zS=c?$m47DpzmQ`Pzu|@r(jJ>!Pvc&|vFqrLhlP2|L0VZDog84_;~VzusjcF{=ki`j zQY5$k{uvpZ1i$dBnTzt=1ewk$XAq%)73>1P;@n*eDZQ4Ng^hMuW zg8$5j&)MhF;3sZh`Ckn%D-u-q=SP6)BUSMC*(Yc-Tpp0!^UjHS^m)k@UMeZIF_k20F}_}y-p$!Bc>P;8X`Los_(a}=_jf3m#-q6 zp>wUc^-kBqE92j6i@i4SR7SRyJs>MR>z|^B8>ElvXT~w}KHbVSw=~nyUhcv6NabWU zR@U&(pFbL-Z{$k%NMP|`{u%qaVw=EB>YrW4>YT{d_GFI5by|<9n4ZBI z0T=ZypfnI9vgvin*lBcq*KZ3UboQ}TKn3LSSk?>1Y2PJ|8;qbF-nj%5}5KJHz8Pe3<4>3Fl`t9)taQq zg)0PBLgv^Av4OyGq=HE*L=f&{cTXDu^*AJDPitLigFFzFHzQl5^rUS`}Q zhfNdPokwN$S=Z$wpr17oIS{^@uKA!?Ij*&XxiQpy?mpt_AS!JH%tuffSbr??zei}q z@RqwLypJGU61_g2O(6kpAbT1&K0fgtK_rPq4~Rvt@5VQjfw&3F#Y^4sp1LIq&V!S8 zsujKu|FbXzbK0@%%E`FFeKbHB-cOAePw|S1Y9g%?LNLy>>9fwFs~kBvT8L@p$l;T( z-APP>Uo9?%_&KHxnY0i%bsgwYtt2+_(xs09j@!{*?4`ewkO)w;Ae59kJfsKP&fLcE zG(R(vEQfD%M1no-Cw?akU>HfkJ_2g|YuEnXF}322oKdrNZ9zOL zbB~z}{FGxkt?&CcEuqA%BIxm^P-X;JXB1#7X=5hwn$7A@_9CNGP816?9@jygAwP;z zix*`0k4P>&bDFS2OC5>!p#2ilIU;ukAB%u8AU_!zx;A5=N<_oKm64aP1cLrpCj3W& zAPhD&FHC93K#4?cfWs$ElK|tybjm}YR)poP>ojt@&S|VmZKA#y{0L11B-mp!dyVhq z%a;ib6zoL|qGbS$cE<2|AeIvSXSL(NF=}e3ICe4>jyh>sueWVp07lhL`p=0&i;Q1q z=Q(0&>pAq1?zh!;t!w3AP?FR(^owXTEP=oqqMMy?LYxI;Ld2)Wzmj!Pf3by=Q`}Bj zL9FjG5h3u)3phoUg)#HAm<(66;*^g;@}uqC-XA!ra8_b9PX69d%xd zE7E10W=9`%YYowE5#?gzYebTDmnQj78aKom3CGb0WWtDv4%!sq?ahM0P-zIC zm1DOvwagwNhB~+xE1Qe9dH-kX1boSwEaxm_@E7JpW1WfL`$>r0bNb8~*?iNOzvOaC-V+k4h;9j#7=qtP z6o}00m01iGCO@CwEXT*O|3E5}%&^pkY$M|O`66Oz<|u0aErw)rNT(?L&kFSU)CGFr z0arqd96;4Pi@=GDflnCuDi=47wWW0h%nSO+-` zM4dcj9?dCSv7nOWG=bX!!k}##L)z??XqF*L7MhfaE{Bv@85)u!JtRh@Y0pl*UCJrp zpdJ|+2?fj-aDxXzHR*&xj*o15$X-_$a<cKEd+&uAE_BbLqie*TOp|3 zT0hA{t`i{Y5m}dnbb(A+b!)#3qm`y*vqI0(h}wCNRZ_Mp4wVt%x5m|5O3+<^sML|0 zD>j!x603N6Qi?oF8rn(DlaFbdHSzp5$L`0ZxgWzOTOZvgED&tiwi!gAHg=!)U>A`g zf+kj)S5& z7;n7cJd|jSsC4KCB;A&z*nNI`M<}}K z-wJnh=c_`%h{)wAk?s!C+;VXWE0@-v^;GD_Y%YhRI;oak+$5?(L=j*$W}OD~fQ_^S z`og+Kv*3dr=c5pRLx+ofD$912IBgB0?Af!(>En6n9%sp;@yKqs>DC4n;>QgtIKV81 z4*4Dll+f9-WeYes5yq^VUe0ucTE=6S1u8_*8v(>}E_1E(%e>@+6^6h-m}6 z@Sli`A5~XZca2;RJq|~WwWJ9$Zg8u^QJ>GEF^lNUsHZ_otE>%cec8Pqh)ngAMiAx9 zG=`g~1tb%PGz22U;W%>mckY~W_MF1*Ls8Rh$Hf;!?SUXFqv&+tsokK_W{re{a6V9) zz4Tcm=f}g1_^xfo0z4U_k;MpA1`i&m_?aTV3k|UUls}z3zC-1}xzT3nH%L9W_H7gq zo(y5yJe4e5?73gyZp_7*6c)0U3EIIz>nJ< zz}#`&MTR9P9-i^ek7mDNwW0X6ERE%Yf1T;vmNAjJXe2lyf_KQfPBuQ}nG?+Jfqa4Z zRw(3(=mr|V;#;0J1+*5M-Asxgh!T>6gA8z@m0VOeq}@N(_|hPePeLN|mD+DXHYuWz z`$<|#Vz_ZS3XqKpnjnDY@fGF;GVtj~f~{f91v8?6Q0kx+x(Ry7mreVi_Sf< zbj#!xkH1Q;PM0ifwbSxXbH72pDG8VPP)qTK&v1Yf;nD8Xjg8L$5{5pO!PLFQw(T%U zKOZ^b4zG+TiiQYF!U-t>sKROISy0-I0&R@?WH&KbB`dc4wGs-m61u+Zx4*_^7I3`U z0(Oo=L`-csiS(`&^i8a@^Y!T(*saHqRwvj0z)cuRK7NRynwH86wE-iSU<(broF}Ah zttes}u5TG(5~mgX;p?Rt>YK^M6DIEbqukFaE&{SR&JnDFl0FwoT@-}A?&567b_4?b zZ)IXK7X+;DIlJ4s^B#CpI08>?X!K{_X5fy6p^Os>LDZ;&fn_`-zD^>B=vpjCe;^Ot zL!J$NW+*~R$7dKBGOi{8ZOKR9I+n4%zJ9lbi83sUJP$546BCo5mY!k2Sg8A?!4EFS zS=cg~fDNZxWZ5L0(zkBi3XThpZ4;K~Sa(|dk@{tgzWi$Glcs~6irSam{1r@+r2D)S z_dn|~7W7yZr$O&`t{}+uueXv69L3>2fYZVl2oiQR#_!Xe{#AanPO7rv9 zNb-fWQv>Xy1nH8SlO6{LlMYANta?wWW5F$f&bs7$A~#53RU{#phXX+H&XB=ji&@D> zeVARZ%vw85^=6dvobt}!Pk;S7gJN(LX=Joui5OQNu}-U-$aUdH9FZTd57!k5z&MgU zhpDEc=w$X3_y@mAzO)52VBrzAO3k zn4;8lL)D z^eJ(=7Hi|on-~1u1OHW=&ko@i9x5(fIR?m)glOzi|I-rxNDV&qZ5D~f^=aF!+pHaJ z8ol{vth7rgIYuoV2z*(wN#aQ2?Bt^kT?vNr)3O_U=tLnOYX4IqUw-j~d19*NjgR0O zLzedhZb0h>6}+k4vJ`jPeg5(V*EmcmhQNsu>YHmjE#Ciog7E8sMK=#^bsxXe`u*Y< z#0T%GQzfPH>3(ZYw_zqLAem#V)}+^CVjSAVcH_zzfy^(+pT5VvSozVf1ke&=6||93 z3p4MzX+s=zinQX-CP|tqLHn<4UA4pba9@&uamDbSq>f%T$I*-fqTXDWVlJj;u;*3s zeyKo@w+^BlPNQubb8~YI;iPp7)IPE$Gz;Pl`bKgsbsOz|)wz0S-H0=b_MW(r#i!um zk^Y5xpcAG8GI=1u5ZOnbBs@lbGV~3dAZ5}EeTqsD-@j88=&o_q4Iy_HEf^5YS|Mv51v%X=A=o zp=6!x*|WS^F00`e@#npp&LLEM;hk7cU%$2?=e9{H7W$3)T>EkVf%$m_7987(&CjeNRy z!RpV3VniGN_L|6o;vb&j8>>^;+l2lSY)IBKdI9*`y@jsopT$9++H`dl;aNyB7y^XQ z)t)RO4K6sUfU;q*M`uEG+g~N_F#H5@`DyrjJ}6lvuZmbv!BfqKub*wnR4x+hbwN^^ z1xT?z!(L$X=2(vC!9@Wai4FGck>O}fBwcUMXO6NdcvPWomOt7z9c>uo-U`qo!NC0! z*Ei;!Ln-~ zY-^qlMfB|Uv+uKQ@d@3L=4F=;FI&0CI;I5Fb3F|CblD*`h1=CV6R`DmAkc0gy%pdg zKS*(^v8~T;gzkF_%_r>F7IE#sm8T@JwO&xL$ZQt}T{SWOqWL?3OoJJ-XRi`ajS-%| zeyXPinH9r>Qc|m+De_jOx(eWWzSV!sh7{vU(c+Plj7v-JiCs)6!AZtcOiCoKs1wFW zZF8$EJ1V;p!h&#@*lXaZf*5%{$aevK(27`X1R4UC9ohre=9c|j`frHsgT%i17AN;tNiP?Zi!&Q2$YE|4d93e zHVXzRcugX6jTghqG{QtiS7AbM%cDDynrsEpao~CC9E|289W!Ju{p}fhWXvnmk6T9Q zAk^_>reb0S1AvwxK;xWS6{DM>Y4h>IwXvsY8HPZN?$?T~u@$VO_YKdOo^X;xNC=zt zjh%wPpatTD&U_2WD%|)%Zbl(5T#&A-_jSOQWVlGS7DQ|;g?yiJr<3>jr%o@+PFlak zxqgN)Z$!iFHGEsu(ntJb00>N=1Tq!Ro-xDQ(0}q(*~!X;)3QX_k(?S&97|awIerv9 zi_k8d?pMuYxmF)~_Mg{qe1`1t$n$e0$kmSk70Yb}L2UqT%0VS=I!+Majk-;=O58*! z6us5)OX-&3<}I+?Q$O|X#+F>VY?+X~gs5oh!Mv}UEp2_H!4PN|f)RvDui;3$3ohu=gNTetd9U@Q^fS&*iBz>M~8+{W|@Ti8m9E;=yX{;a| zotOiFSAepaiZ~GqLJc1A4hS9!w&|OX8i^fwpy$(W=Ppum7wo$5>2jyFeNZy8QLv%j z8fA=2hUcE(>z{FwMp6@X4qppNZ$8mWu{;y(1SBllw7eu&2fw^sT)|P?;ToRTF@z-& zjy+%m2OAzOe}FYh$2=SYO49t~tlqNC*cv9r*z!iEp8%#`XeAN)Rk#%;T{MSAwEhc9VQC#%I|7%C=dmc^Bbf&*584*fSs<0v`6(fpb9=~~NRwn?%qjmTv1s!{?a%|E|c z?%`2qlGSOuB588)by+h*iX^>rAw;Do>kaXq=jM?WdbZ~85CTRuS%Wm33`sVnRJI9; zO|ad(bxQ>SI-=~YJ}e3XoiRDuG1~asB9eyiR%nv=+_nX`BR(K%xg&^K_XhN~u0949 z0rAlhf>2dgl#eQcIl9*4d%0Nf3pjhRwAHv3wweMH1IWuQhwsO!2Zwo(4<>Os&wYW zH?17u{^G+~VCXppi8$ehXWIFGDoL}wTAyq2NA2*F{3dvLO_djfzPAwAGM2Eh8Ddf9 z*|vrH&i5^#>pFqItU`gz!sqaM@W4oVD`<;*Yilc0GAPDK`(|$vVPzw#6Zu=*kyJ{O zKRANiv1Qm0AAFrPIVd!gid4^5To9vw@bF=F@?E{je%AG{($zx84pKd;aKN}DGo}44 z5%|Hen&)YpO~APOgjY5D+??J{+X?iTy+*Xk9d}8s7ZdyV0_0WBiY-T0#_keVKeogYfj#qyg_!EEM7e>>N-dQNPazs!$s?jNY8esGT$xv~X!Puct% nWcd#d{{P>V;XhgsdZ(soi+UOr$8WMGZ%RERe=u(U@k{?7<U zX+ojUT>Wkh{^t8lR1N$l;wY`{sAg;8=yJ~9n4);j@q(4Dqm}tjKR6rPJDA(r@N)}u z^K$-R=ID6AL6nEb`p<9RwzW6qX#t5*u?(b&ul+Lzc@m(qh-ZoI?n9XU+;Y=k(w4fZWY5NAYnc3si*ajLqw#v z%d0ngN^Ce{?nCBIBR^aYg>o-bclYua)1vG7$rq0puIwbgYx_OlKz`>ud5+u!%J$ep zE6MLSRYGX+o9`>OO7h2NKhfb%Q7C75*Yig+o|2VSId<&lhI6hO#!oVJb8Q$!9nC@q z6vKrS*R5NZ|K-6=f%C7wm#q~WE{yG|3g-|IQ1_ahP%$tth<~|?BKT{Vpym0j=D^5E z8z(jcwNPtL+aaAi`}oC?Yf?!DMehCe$#*yHkxWb1%}p^XyOpAw`|x4mm|T29g24sx zq&8epy({f@&f8Tcb$F!@6_Sh7M*hqaItLFP)XDtm%9;%f(bla`%-=>I%^xnF%XXi% zXmhBMSifo06YdL?BmUILNbc~egup<$smCv_Z64?ex7C~)YMbm1Hne#E=p4EH`V2#< zSFc`~54PmYcJ5h9N>B{f*>Tunl~3wQiZ89;*=H1erv{B1H*Y%d=;Fe4a%~3fOsr=o z`p6GYOw^s0r?%u+YBj{HpjbTm^2KcML!O#Hqo6&{9Nx^azy6?N#9@_9*N)>d8>TvZ zGFGnL^d;0ZQe~hqz2S+qE^X{d#iQreM3*`o-erGy7jwm}JyHh!j~_jHl(JzXMfv8c zRja-{uHYWmcAlTMlO20463?}={JHYU==GiplTH2aVz2c#rl;QI&Ofzs&4#xR^$Xq*H|pNh)L`bXzpsF!$qUAcD6a(d*`>|kz(_>QWFnW@|2{KTa;EF9s-c*enC@or5nt~7FMFq)o|Y`mrk07`+`-d`1@RC! zAj!Dmo_nXiuz2LsOmCD^1y?Q`C#Qlxld$H};(~nF6I@b!T%1{FslUa$2Uqa&2_{ux zeT}-dTwCe{oAhEWGm07)o~C*3mz7$WxNB25da@y1R|`Mi7_~HSdjGK9gLIlck!rwwWJq&)w6Kyho27?P)fR5@Zs#5s(k&7EIU4 z;nUKyyW(*_J6nL|jY6b&v!2Ib4!MN=2M&}?^fy$n9ys9fviQQMW1YRdrr!ozP5pRH zzP`^)usY_7oX>;ii4AyrJHGlsoCU2_UqivunN~+@&pSig? zKDqPI2lLsfVOuOATk5j>R#uL2r9|_!c?=iDf4ez4Iyxlz z@TpJ1=NlZAb*H7Qg{)i7V@1*%Wi?lh*GLVw_k8^I(tc6VmTar$T2B4^`ZU9mcJYa~ z$4gDJLWMg#>x$a@8&dsQ9h!}UL)S99J|q9msrU4)fZ5w;dT!l8`+0b37>p{htNfy( zqC&;p9?vY!4OgX|$x^txU$OGE)WUh(rjBB-{o>*uJ~+2p_f+td2%re?W8WUybnQiv zlAZ2Je@5e$C)SpDRwkR6#mypp7Tvbd(Vf4wTdc=`M?#|Qy_L{-wb(F&QF(9;A3wk1 z`SWpk^J5iNkBuuTu^KCX*}|f5;>2YcCANUEo`;`ziTW&h8u{^J3-w&tVQ`50A%ALIalvH;0klj+=AL^6U$~G_wRT|CU zdlj^`-;2=l8!7pG>}$zMEql^g7Lakl?mJ4m>Ye9bD|!0-coT4qJX+@zKfM<8;A(C9V%J! zu1i)s&}pCdp&~*l(HylvCJk$hJlizg-0GsV!#q{t!Zk%!<$(ti&b_!g^!$f8Gz>`AWRig+xKKHT?~r*^SxHtkA!_Uy=1@xuIk zJuVR&xx;hZ-+OLQn6zQ$3KkZYhJ2@i^@Fq&i~KDtCtbyr6cp-zy|lJ1Aec)xq1bDV z9ed8GNQT+%#F;Z^X3;Xm?`_^A`Jr}rS(OZcG zDOT3Fm!iD9yi}zfvef!mna%0?1)AFqD5?jCbFzsUZ`hez zy%YFNZ&Ty8bLqH>Z`!b-9@S;?TdOU{zJ1bYH=400{T7qG(K{wLC>kBybtGD4vP?dTwAHB4u@6CZI&dex&+QZ4`i|@ptgdJI! zn`*)naQyso-9oR_(z{mMlEL;|b!W*r+W`FYZHW!ZTzUUi&3W+Q8X-Q&^Rpks&0YF-EwtpCFv~cqVfB5kUe^8l z^Y@gMmiGG#x4$)9n$?n+`mkobPvY4I4mYS2zwRaGj%VImGaUs5xQ?Kc|*#^L_GvB@2<^_dGV6DnEw7EVx2 ztV{qqE9;5fV$Sshb^rYHiYZaDdCH^~RU&gM2m4bqG*6xSrKcupIMWjlucgq<;mWtw zlm->F3v>;M*{?qHoqL9|H0j?Zp5Eg%_T~Wd3#NU2=-qc;e0qy#IGE|#R~ye9pp{{e z4!r7Gc|%*=J_a`f82lc=PJru5wS6%GON&z_L1AJ2nNe40cl2Y~@bDW*Nl9(oEvimH z$3%_KqS|K3>FBw(Do=dkWS#b86 zY|tVM0SG%5jKI7l+k9y9`HL4$b&A4$xV8o~$BCwrMGdtCg?BGDOQivN%2P>6b{cHa zs0ik1A}AX-@%5(*UvR5~Kpk-Nb6kcErbK~q>b<7g5`k%7ENnb~hAhH`lBKDo`gr*r zg4QkdMTO>d35*i%+1R;pzz$lLO%EG-qkJCX;@JfS8@!5I0uQQX`z(34Io2u8j#cnX z_9aH8nASwz@b^!DJGXuN_Jor8ZXTU%vpeYK@wO!knzqF=2}6bB)%IS;fnnQxX;ubC zMP=M!k+G<_#}&qJdJ90#@YA9yb-zML^v929Cx_Z}$>%^*iY0|n{vPMMZ1XzttI@4i zLPcZc9PT}#rrB=eCPiqijN-13z)8}7Jbv{QwWs=is%E;5`QrQxU_`iq$Dp9GsVR8k z8LEKY=M#cvZ;wd0PrQA8g*L~yVtdgfw+sk%sCdpM%X`7yp-QkRBs%(sZM%0{1EngUl6e$WRw|6YJ-#_~ zWaI+6^6t8r<7>(H1~lmux##pXriX)L@&fVplrq^0Bqt{i^~#5<^eY@tia3Nf>H*m2 zo}9^Z=ncc72ty~@wq?sXX1A_8Tk9wpIyvRpmQB^G)~pG`Rts%1^l7UM7alG&IT0b^ zkRYp|Ab^gLaQxb)9_%*0sSggDv-nmd(HnS8YLIJ0^E7gw>^D|bQ&YUQX}4Tu`Se`# zf?W7JUM{Yx54cA?4{mbv;U)Hqh%|dnypv%bNHZvEIUy|_>NWQ*6vedd^3|)1*It}k zvzhrT?@FViM=!d4y0Sw7@K$1WjDN5>tL%eY@BIW6=LC=x@-m#dPb!V>^P7fnDuSg} zUD_`xYgNqpsD~)>h{!sj6hAj;=?K4&98Up{PHJh}iY2v^0NiuKXl3jc-fF-n`4tzlzgu7F$P4 z%M!EV2v<+~xvO1UC?mVO-|SOZBvQtIBW;jx`%@W7)1)&QMhOWmiPOJl)0Tg5-@bVJ z6)QY1*BMV#)s*zd4*R?lmRe#@tkB-Ql|m6*AwpN8#o>L{{o}KXjE65oH=LtL8o&B> zDeMua#@ej$4;6cN|H|0GBU_|hiKI)&`07E6XmIR1p(u7I#4Y`H#awn)+gzN+fPrs%GPEYl})@i3g`p) z*C=wI1nv1DPw!#5H;3}22zIu|qL&$8^zkv4I9`)ux^RxQnN?ByUW$S2ma(kXl*6Kw zr1sas#s0f)IEW~Ea4uJqX=kSUQ^>DRsH5o za-0io!_itp$sEzkIxkL%Vr43tpXq;}9n3PVciV%-T=gOqcf&Detbsb zzmq?q{y`crl0$EG1A0tgNC+E55CC6-x=`ZpW2@$zf3uZHZzz6a&hw)kA2Us-Ik#Q?hvULcI);#qpck>=Y8aeFQd@B;j29i z3||&YN3QMhehdDafi={R8(#P3?tzBK#_|DPPG8=}yj;9{_pUrwIqN|V4*5i-`?as{ zuuQ((cG^`uI5P4fI+bkgs~v`(jUn><&R@0h?8+AoA2@I=PKTCm`*sU7A$QStUmhMk zPWS!yXPr(pv?pY9ZoI!_9XfF3+8V8+0!ONjGLKq!F`epCjtGy>;%i4oC3;}-Y(Iyf zMg1v&hjE_eLuhIa(7E`TDkv#~vmUPu6w$G+DaXZ zDU^t{_H5oYwK2bG(bXX|>({Nz6kSE}-TXrbc6x^Ko+P5+9EIY#a%Rnu zGYsY5k!t=Q^=!1t8l&=`C`UAwuO<9kb>ld=Aj`EEG3bd`u3R~@dlMy^>Q)eSAb@gY zPzxXJx6eVOaPkh17@9(UO{B--24A4Yp~v4JU7}Dj@N$1#nAGBQ?3^Tp(tf0vMtS=` zf40Ar_1|9ZpM-f6{>o-|1ABY>t_z0)@83^H4@`Z59>`}qHI5FKw7_25#XL_d}-Ey_uZqzdnre(PmoKf#ue{03JeQNsjpYJ%iBkJru$l$Qhw~e z_5hZzG^FZ~>44jtH*fB|_@wOY{N(xb=V_bP_Ck9=1CmumRe>V(Y70#gcVS!2T^Uc> znKdJd^nC*}7tN;yP{y#FQeRLg_4Zv%6ytMjEaXMC{rF9`+vWQS#Ty^w7e4(dhU~>3 zq{Ln@rsx120@Cf5g}xazzc3RFPo+34(01Byh4u@MqUVKfUZ zsDa_q)6>U;h*(xfhzw2E)zukiHD_Biud??`QWKeYJyZ=}E$u(0LgJ%x+_2)9v0(K4L1G0yPli(PJo2=FXiv@FMCA z7sqzA0X;HjeA=iK{O+=GGP^ZnWPbNO-HA&6nlHeoY*Pb~;%=%pw{z7J+68=H70NGDGCy{+wyw?z zMU?zeT3Q;Nv56=;72E|19^by+0VxBF&2b(532bLBZLX%KM$6l~c+O5qN$E;QIBL$m z;wz$e?>Mp@IGwI4nL1Kz=RMzDAAL48mhzF7oh2aJ*-Y3x{zjLn69fHEth+0#>(E`C ztXkgoU+~p=Gmync^mRKsJ4P|*w6D$u01OGZm6kn~q09q{p?uPxK7D%JI+*|IDpNM# z`ud`3$N>USLRYU|ElYh68w=pf?X@`5OWIAOd;h^JmoF1mUhA_oXIK>}p$o2~0uzI1 z$bwd`LrNxpbzrMk?cd3U=9%)8qt59XcWrrQ;dzgyuxvnW#b8H?AtY?MQ>QNQaImwh z0!fKC-n@0oxnuK&4eAC4uNFsRV`EY1JH0)@ci;3m_UH9R)~(zu9!*%K`^c|rb8I^# zNq2<0?vi1d+p3Xk)8;Vb18tE}&?4}+8+g~k)oezoij$$y;LY`o?Af*vQBVmKmj*Pk z2|un}zJ2fKt!gZ$!cD?!9}74x<{CfLYOmp=uvZUUIRl2$044^lvA=L?%dTB%*yB^3 zetv#i2c~C&c5OWbQ*0x{p(EkKwwhQZa4I-ny?prv=%Bp3T=mkL#GB;pz&xY)uVO_^ zH9s8>ig4@aV|k5A+2G0aU%-P^cd8NgJV}$*8}!_2R7&cz~Vs>~#PSp3?G z6Ni5$UwgB}-DtKFB3={JsGzEok7+2bGK#O4FVL93^w4l}SERH(AYHeP)PVysup^tB zo7dCQrj87V=%2(A2n-ER9C=%JeC71^^^}wV+QHuRcBu=+sJH5oHzp<Ac}iWQnem;Fi|7D<_2@^^FqE` zMftd!)cxdQ!zT62i3vwMaQyc%_OQ`^XGEiMpB_gA!3t}eqM?ke8QbXl_$~jl#O6Wg zh77}w{zG^myZ#OZI{kKfk|t6-{h3x)HGo-y!C(btWIg%03#A(*tH4$VGD;dD3P92} zb~;S))w$uhGMe*0H0XbJ&PQ1oN6Z%&7m0KHrFb*NSNOIqCGbiljbxQgE(hFze}83- z>ADAG`#4}?Q-0=k$v$P_hh({9m2 zg?McA?iuh}O%*qWPrm=WMY`u~J)9`dfF)U%^8p(q>o^c)ly&_*HZ zGR-}+dwU9l&svH_7&}iT8fGGZ7jZ&T3>k4j>F>Rjx7~~HKkFRnaVCyMyK`<|vP;D& zT9)G)pNA<&6xF+r?`#5DBij391q}DRKf1Q0pL}i1SMiNLmZ_RnQf4aWljP=iQ<9QX zCj8FG$=zu8S@Ht6>q84_ij%!tpP7zk-LHKeOpI=@lT{C5D@QC0?NH9cMoRLod{c^x_(ziS0`|anHm+0*{T3)NJUzes5w6y!FUhVy<4XU?G_LLwwpsryM0`^{T zGx`5b1GjE|EZwBgs%!GYhxnB;a{co|2%tt;-D9ohc%^v zFu(svuSQ3Yg(|6ZY3=5FtmxWGkSXh6yH@81psH7Vy71ICGc%Lkii`5h0!?}8?T~fX zmf@_i=@rkeJf6^-U0j%JJHF{AmVPoM2Ic{28JU9NwQJU}^JM(A+t$%B8+i$F0~aD( zXXq*`M+25dI_<&oXaM{E5a3{Me<~%%x2~_A=+cdf8yjZJIl5tXJDs9bzxXG{8_yEp zYUma){PVd%G{k2W?_BLg@6Xn_bU<`ggxtb~61MK%b`wy14RkOd$dvJR8Ndvb>b3xW zK0dj$@ww^@eD{r8w;JJ1sth%)Tfg2u%I^5!Cr8mqcs!@5)Ycr8vp;k$UJOe@6Q%F_ zt}*6op=t)tW7!)QR%y*#8|A+vQ^+Hdc{Fcvlc-_s)A9^n4z>&C-KHF@vT*)aU)kxq zHN}(72o?eq2MsVW@Em>M+`6yLS>2AJ#(spAC(7*c%Kk8C*_NL}OgWS-D5>T^A;vc2 z#E97AIdXAvGQ$T90iCxhg!ecc$l}`xG!)Lyrn%;xC9JZEQl3%C)1%YgvI_Gm6{9Yc z=>4f<|FdRFoLD41wh?g)UDl!{J9%+DYUxYNHRk-~_pUE6j_cWA5&PY>-V0B@lX--% zUkq!_e7CrXQm-y#q+o73r*ajFqsXpJL^V3n~u5rd^ZO|3ZmD366oO;SDDM=a-04fq*%1r*+ zLE{@%TH80atWy5oY(%c|Jx?UnX{cb>xnnKm8Po3sEvl!tHxWfrclR1f^gR|rGXLlU z5xkd9JBZ#VDnD!AW}oSme|3@d{L=z(cmat{)%NXSKA^IKQh1T{whhLsNYnT~#J&Ep zr}T||s)NrbaN*;TDKETI;l@`#%sBz$Le1EpLPk;(x*uTU}b7^;zLG)o6;L#C0@vo6Ma;5*a?{>OWekAwI z@x?~rr^72LA2%*H&_kC_kB^V5+1o$<>z*lx9Hn;sZ3$f>5E2VvMKYxn)xwF$a*P(fzZ`iNFb3)3={p+!*pFO#Pn8k20usFgHS+(xL}Ik<+qcgg(J`_};_B`< zL(LRG5T(1jI~m~tB1z+-_sODQXdtWtektfR>uCMqsS42;k>|=btzm9RR+Aw`7H-`E z*_M2#RMMmoLXrpXX+pLj5&l^}Ae<#!>04PkZ0q-!c1tl23mBnuksq?mOw$JtEb zD9xKKN2-o>=<_dszS{Nts8y0)vw*R31nVwm?s6!?btxLDWUHH1hVa4z z4k3;jF#NJQj>tvgKKXlW$QS@5sX=PX@tSjn9)J3@#AM(-Zv7O*+1LRJ$iE_HlLL!x zs`4a6c6H`A&7n3{FB3FzYT4qQ=2>18!GDP^dOGKr)3S6>o_R zz5Vr4@1irWl$0Tg!%&%sh)B?6;~5h*9nI^ux;5wF9=uUY4XjDwPGaxjNnEp9clT@^(OsBsfP9?f{;3xk;9JZJaFPS5bhmz3q#TK^gf? z{H&hTb!<8*BV&oR(2{9%Elk+a?9Smsu`DC@g%aQ$6W_RAtE^C01L)I*w; zYe=$>-=y*_$?ZV`NCw1Xo?EwZBUhH!-@Chor`>jDo#Kq4?HepJx?Zj^xK+vsksxfb zDP8j#&9k-Yn#?i74?{`GRyAMd&h+1ZAHBzW`sl@r7xzVW6uM$5PaH8rUZqKep`hNovCfa3$uKJ+hXaDwqOhD%dYjSP4pP)@QIaVH~ZzYV5h zX>jb{e-f7PsP+`-kns~9HZ~G%0e`>CdO%1Ss2ST`u1NFO{Rf|KNvjSPc$m|4a2g!v zJBsHCltCYo~vCb#$v514s}-%W;U};*hL!M*Ib9NLkEfNZeAK)C-d3ltn%@ zoER=BI|NP=ffTONK_fr-H3FW~BjxT)7IabtiU9kvqW53dsL#6s9c&e&sIyG8QIy3r zbk3PTO@s4+XG{W`aM~LXbQ5r&FeCikqP;M0sA$Rn3XK_pZDbwFoD*~%Ig3x=bi>cD z9$PxwbH;w^`xo%J+7P`XNg|*+lH{5E^6ogUa^_5D9-@I0VC`USdcq$rTta*z1KvtM z(yEQ5C}6V?DUa}Tl%i2`)e(QA;-$Y)@o=3b-NViW`Ve+hk$#z0+({9r>-uMj(4{l{ z7V2D99+}j-efpSdH^X2RHEYripH{0C_9$X>0>A&mYA>DP|D>YFo z`VqMMOZFxZ1nkpkxV`N!0z6&5O!j{R38=wXM{-nXRxd}kQhc?Rd9wkHWO`E4sVvi) zMqo`1b@lWA-fC?T2DqYUMTo_py*u0daZgOj$YYCC2ewLR|VA57iP35V(Hm&^& zQh}If|Bhl&F_eGnniPwJ1p6Ssf*=0NzW5IcLg_Hx1hNHWymqfW6pHPi-a$!833j-p z69cq}TV#iN8vphzh?W7%1I>}jibej~BM$b<&m7;f5jf$5o=*woO@*oMWIeHIV>j{x zr-c8;E`iu~3-V@EDpkO;ku%5a-7%`Vx_aC}wFEO5j6@y-Ga;dLSa9;xtDAPG{PN3p zBn*!H5Q!-6WtrLDuJs-_+@?)ODOknej=VJcV^P-mrT;DCPTO)MN2Zu2MJiRwL;dD+ z1b91;a59v%YpXhGCCWTDO9Q1=m< z_SCMEm=D$+#rjC)*QuSBh>w>Kw!poB4E&b-D-f1-d*K1UEZ{wGa83M#S|ULHCnkwUZ=6**Bh|3F=QqMu2{T$PB^tlp`rG z4NzZvKnny~ci#G8aPMaG}Lq zzkXfr^l2?k&3gol5ZHJ9K;+2#glVgAR`@GXS!{RXkWN5?Rb?3@u{P*DTehXVmaJUR zG6H8@d{eTZM;!0<(d}`E&7|@D#tWZbvlRP#u2lEY^!b*w{r{$K?_*^>B`U#b4@dS! zK!6rNn|g+U1eZ?ssrzCsk^=)fHk*qFL-qzp&`8oxTEy-o^3b2;5nkpEr{cIwL_}aT zY4vN{hR1zZ*4JlwG0a!|bL(s2Ba^0+rU4eb|3CKUv@z!uY*K$T-L@@}fADbBGWIJC zQ4%TA|8JV^m8)0fsEB(xwp!;V!y!l9M+IsuX}$X1Gu@hkJC2A<+U!ggxzxh;{FBJ} zAAni#^@x}WvP`OHW}07^_#GTn(D%Rnn=}_6AD?%PPc!K66g^GOkSQoJI{Kr_ae28- z@mD7Q!LXgE24ive5 z!-nj?oMCk7LO44_jGv~Ul{x(B%l?Nsv5=rGk_dSnl$89(7N!H61clJ#uNL;tk^`Lj zD9mO=V+=^1%Ixu#mxw7$-&3MB|M2$P0o~I!(ZHob2dn;5o&Ljr|0l!z4?W&U^W?J4 zOakNoAXVV$xI_I(`%~|ZZ`@#<-E5_kW#SJmo^%WvHG*9!0mVzw9rN?45!^-)?kIsb zBCZgl;D~?rPjg2}mg!Qn+mJCFEaW)i0QR4`*n~ErY7-mO6YO{^XHZAm> z_EEL4NI`@tZM3t@!>ZuyuPc!8X2U2*krj04pDUOi&L zFm26|WwOuH%b#r2ovc?oO+rS*FeRA`B9R|B9a%r}=>GG=m7OY0AAT&0u)x zXfPHtW8GvlkkuUdAi`LPeTR?@8Lb1xLmDbf!sAIh((d-dK4`ln%8l`wH0%&G0JC3z zUX4t|;Q=9BXCubgxSv{6QcjxK7&LRxX#66+;-l5;Gq+RB&;3R;h0s(yI5)3b_bxzc zF$v^j$O4K8ZMc_H49AbKVU;Sz<3E=iBWaf!NRc_wUyiai`=~)qI~F^hA$7waFD|a%kallr>*3?Q@{Am{ zThfjstvX+=JPU=B;Ci6ub%!G{levb8Q9 zUWr6lhL;fBX48bJGY*J}EHbyuUf=$adG&`qiz90>cyJ1C>3vpn#2pC8nwtTiPC}NC zFkA%Fpb`t7d%lVcUum=|Q|NpCP<*$wgx=T_FdY0+x}HL*xRa&4rQz|RENn+)S5~Z8 zQIF^uvYr-jQb-0H;UqGE2%-Y7T#l$FMgbBDh{6`+o`!2G&r=jfE)@V_7SRNW{of^H zjWj;gPsQbaAybA(**g!nr=!~FzSYrA2Ph+B3=QX^S0ElzA92*0?$gMw*)5;GYsA;n ziVT#7tuv*7|sU!-_kDATbCU+Iy$rVLN{t0MyYQ1-K6>5`6Hzm7p=W} z1?AaVP@#xFh2H-}C(`^z+#sOze@~%E`g*SXsAq-wIH&IgRsIZjA+BUXXp~&fpm*eN zG2DM2x|$j91&Rik#n!pWvVu~7@(%%%zw`@Kp1;h*|C`Vi?LTC|{s+0Men@pxRx-_l z!oFQ*6(!04ccK$z;-`X5@>hraZ=+Xdc77TUdCWjjrY8;Ol}Sj}WMNlV7p4c;Ff5Af z`7)n6zbx%jl;UY+Sloc+F6q3KW!@oPO znd|9IAb~buqZiSwSDuV`xa4J-XLtHunGuXjU>IBPMU6dPOE-&WX0&F7C`mMh&ZSl) zl!L5muCt-Jkj;lA#QwE+ui<=zE;SkUEq-qF(dzK}zE?b?ZPCWA@TJYd7f$Y@v~7a6 zmrfSX6%B>uUM${7v7lton?QSNK#Z~|XHG5)Ax30`oB9tazk-39MB+~{>jJue*N#1X zX_Q&$r>xgz^|ex>6GVoeW6sUS9l0ezjDKU#vO|^1C|S&BJt!!sftitd0DKZyBvU(7 zBL5&bL=00%i)3WM8v7v5a!wD{;{?!2z8FyIh(u^>IBiz-i|Pe|mDd66M&689kU z7bpTm`a^vGLk$#J4B7Ny?o}BoE*&%TLzEwL4E0dsFl(uf0jOFsKY^5%1m^8}=bWS0 zAZi9HRl|Ix$BkgL^zyfRD1vfsvrhu!lgkm1O8$AT&GrwJk9yo@nx(J~EuqD^k5>sV zhq6!>bIGtd;9t?w;v9zHlMrxf8`!*)@5I_oyWYa3!9GjCu2v@gV{N>A+W;qmADbm6 zZZCezEs>>?CQm$>D6em!gxo^UB666R^H*gPlLS$hp)`albjZJc``R2k)K)-*C}bd0 zJ))o|*HQN^-xHLuWZRD7mSV4hhb4>dBnwO|XvCYUn;X#);XD@X>Fw&$d#$^cmiVrt z)?=Z5aX>FEf%oE}6lv<8rC12s_TCwru)bzLR?ps@CFi9d7*Gp6>DAa@feFvGSCU#!mu+LHf;6@w*eZ*wLoXQki`~1R!Q}2BjIVy}Y0grE1 zMAb!ArpBQynBkcKch)2IMu$KQm>R)3(1J;YhY;8|+Va0=oE-Iye>ZSjm>XnFhL$9s z(!DuNJJw=()WC!O&2ZWP&9f_G&df12DeX7L6=C(SSh*55^btYFqo$QeI*lvxjEwNvlbm?W;nbMt$1A3SjNO`6`i_k_Gas~#$~mj;vG0IT zQg+j7iux_~xr==eIpnAi%U!BZboEY^WNio0*95uF_L#DPU6L2PWBYb?yu;tDUx(sv z*irr5?TFKS8)}0OF}?oP9z@}zqodbbU+O<7l6mnD5}CswB)jF-S;?oAB=z=cmhQn; zSi9P=lbSvwle;IQs+<8c{|H;q)6soFFpBg+GEXWo_L`-E@y z&_brZuS9Zd$^mO&ys`D7#mgF-x@qr3+Jz1ufrH-S#fDq==uzs~CafvSS#Ifv3gF#2 zbq6h*C^h2aeyn6BO${SW^_fO8C^G#>Lf63{s)uTlHDn4cf}Hw5&??EF-H~B_N0MIf zX^2uwAU-)R0wH@a6$3KmAHr)S{*CuvrQv0k>i+HPL5P;*EC}qtc6Tx5s)@gt>BNEG zm}wI7C^z@6^c|PMu#8}E6@!{(@2b<#Cm<+aA9&0DSEw5GKr?ynWW(PRu8G%p#;o}$ zZ{`*Xg{MyA6&j99&(5+Jlx|461&=u4k__W$qlBJ2xzL`l(8T= z>7;%CWoRl>M}i|(n7-y)$lbd}cC1hu*@ilb1PgfFR#7ZUZgg#3pEVvB9?l^PIX&kv zBv@fs0Og-9xEhyi#kY7Kb+f--HFDgr_f@yOIi``w(GDo)NcNjJoiezy40p9#v|r2| zW7^kYcECDKw3Gp_K#H`pM|Z%yOP(G{-yb`E96C>Vj-r#BZQ+$~4OZD1Cb3@aDtGjr z@5~y)L-iUiI}$`5uf`B6*E-QEC2efTSAyYBsQNz!b!JKe8k9usa1x z8SaLKS?t}rw-S>;hWiE&DjMh7kyk`CsWl`h$e8>XGgOKcbLE5V1^%XTva-C$-tvL# zwObv_bB(=^M$Au+EfI0*546kEGePF52hU$fDKSf~Wx^w<4Z#bO5F9>3-pNm-Etohj z8yF5nTQGJ>_tx=XEw(#iR7xRC;LRy^!9;SRN6*88AwDuvJOdTD^1e&EIoyYVSN8&| zb=^!cMPPy=sPS&q<{XI*b>}$@iQw=Huy1zD7kTP&UZo7=91#aJ{V=4`6YJ+y?gm8h z8s}#0-%|oD#Gx-fIE*}ROm2mM(T>Ad3&+$>2=pc+g~`L-bS9>}=C!P_+c^S^m*#t= z6p;it$i~K&xd;JB0XFsA+3m2AgK)HlmiRrunsAPc!dgz9?AI^L%5*hD++zKakm5rk zfFC-Lrj~|^lHT}Pevo8-?%;|dP8bHK_?BjBeEfJDI;VL9M>$Cp zmYBQD6~7zF0|mpy9GQ!Nt|X}6cHzZF=8Cz=fkfi>GgmAQFD;(N;wNMC98x3eM@}+@ z!=xqy%@~^->P1UP{cUQ-Ervc4^QeHYv&kn4k82I2dzXhwt!w;Tp}Ai5cI>jGxL)2T+9jJDY-RHcZ+G33kwoXXRPiMg(v z>52-bLA`v(WcP_LDxY0+5V0wI`}1Qg0xWgoPi;VaizDWDy`%G!Y!t+>_o$FJjoEZ7#rmX2=kmL zd20kaz%cTH$(04M5{Qt(To&;BD<^d89i*ah(ym{x3ba27+!&beeQC``x?Q_qXRx!E z8!eC!FG1!IC_deP#_>$oTD%UYX`~@}l0>93Ij)SXd4KA zqBPo>mD3tt_^!0W1N4IkDUkg1T%Yy+s%yOq0t=ZKfzSSk$|5P%Zq`dws;5s6lc5Hf z5XuO#EURxAuP`t>+KiVWlLLe^k`MLi#kEuvZE{)z84Kmfj<(RqHk9n}lItBRD0;=@ zR)&!ShhK4_cyZ3mb|t_~*~SdknUD9RbeB{VXXUM3BA@NveIB;Ob&>`0^&8bTpvr_} za&Pxonh(yn+6YF4$v>47Cr)$=f8C&&GpYdSrb(6&Kp>Z4@rO>`^|l8W6NaYj3{Hj1 z=_WqqiXW_N#RvU~lrx0rB>i`Zs4h*HNeMW9d0S3fxB~y?voK&t63l4OoIEEyy$jzV z=ameKs0KCREty>*G85*NNur^md+ZoTbrq9!Wp%YC24r-eSS2GsLfl6(m=8XR)mPr> z@0}-Jm|0V+9pr-Yp8)Y0K^=3FeZkQ!5A%8$F`g<7c9@j?EoghVx(8WmfF>WA^Bw^T zcztU&B?q23LM!!%S>3Do?pu&cl;Grakc_p6cShmZ4MGZWECxAOVd{NiLs?CUoI!jT zIqT!waEDK|ljPF;_}1O-1_qIjA3p|T*8gb%e0KqnAH;Q(iAG6|#rZI>G#cQej{Qo` zvr;D?EJbL0_@Q$@lTmjpnWUHB)7iq9u`8=bZq}hxyU^SG`dsCtyl&#Oo%!5^5ZRJ= z2S?1bCWC-tF~}r$cxncf+jQb6mq|=M4B#jNoE0eDEG^AU#+PxaIOe~CHOmRUa#vF*t z(nXDZgBJCi;>SBnBv`D0Jn1zbIqwqNw15nz>`GLmQdwB z86;*e=-a)bx2TP~zC*{(rrpd4sxLWG45LS~QJ!PhQZkgr?i%Y4(5Z#FAvr4-?6^UI*fA!RE9@;i z!7fqQXtjiP8es68mrQWPGq1EA(`-LDX!WSBZ=(N{e@moo;XBFXu1tiNsdAAsBTxP) zof#;dWLOHXsEZHFtr95P&^4{`Y6FX)3jEvazx;9tXMypRGB{x3xeiN#-)*cb%Vr$* zXb8@&2t|gQ(a4Xqd~%A_oAPqe0U^!m@-O~E&_kLoU%3*BT-C308xP+^P_yiWj7&Ig zGn0|u8OX;t4S*kquBlyj0%}zxK#-hM1?RpJ&dKs|3W(c%HRvtd<0Al7Z|KZEm%$d} zy(}zM52SCVBpi)T`YMDLc{2eSC*~~rGwF|8r#*0{(ZlUoe45T;c+n~hteY&t3l9gP zA&}7lcPAWUIoi&i90mR)G=zhZ?uvl*09QawAOCo1bJ&+JUo80j$7e*Nyk`_dD;#G? zwtgoD{N7Yl@RNd-H#byJg|%iF8WVg|c&r*-!ipT}c7vY7k2lfu2Qr1Gh~}aInMkWu zt#usu(H2Oor^PZuknjfHo{74JLkozytvlX!j6mTlc^?(3jas*r1Fogu9dcd&KaLGQRvRKgRer4sKavze!Af8ZfP4P=JGHP>K%DWm`C@|U|-=@ zkn=DIUc$8BR6Y&{;TLXmynEfxPXG+6C$o&1gSTNC{ZJ7?o`Sl1Aflt8Za4)dHI2&@ zCq{lne$4Lhu6X8LqA!-WYNkC7=nPGfU%m!@7M2$i!yO%$uU!jA{dK_6V)v$-eN!|; zt;N0PpYDV)mWPL`h#dd*8#nlH8~LP`<{g4^E10m{qx!6_Gz08c-v048d1rD>7{N|{ z+;MMS!nUiiyCOIoio)`t9yoa?gzPa-%=&B8Mq(4NXL*t5=Y~42h-Ll3=O#Hjk#pf# z{N6zhjL5zU3GPh+V^q(er|MRh& jJ{ literal 0 HcmV?d00001 diff --git a/docs/man/image/plot_Blinder_Oaxaca2.png b/docs/man/image/plot_Blinder_Oaxaca2.png new file mode 100644 index 0000000000000000000000000000000000000000..d268b4b8ead261eab57fa8ae27b9716bc9b8e3dc GIT binary patch literal 16077 zcmbt*2RN2}|M!WqH(A+4DMEH3x)33RBzq)#OLp0tY$YVw84(%TD;kuUEtQc`_I$sm z?&o>#=YK!<|9#%$J&rrM9l5USJkQ_n^Zl$}sG6z*2_XX^f*>S{moXX$f>i{6g79(S zCmoVwP4Jhvi=2+jHTzpGcZ{9P5fx(>2OE1A8%q;bH*+UvOMAO>e4=~;XIO8$xHvdV zoIPv%&ws#Y?__cIGa-I3ya<8A#eTm z4`D&J0EB`f_DBaW6a1~NB47#sXU6~k^0n{9rC?GSt~fRhj^^IXPsg461^D<#86v-C z&a5wuM{}opQAR~YeIKn6wHvDqy_TbzdA-=+_E@d>W1nryr`g$(P8U8^!8@vFCC0{L zr6>ngRf$bkKNPi}3Zyl-c(A|cxVdbs{P+SruWtE89UVF^FE58L9Tc@&Umq@SY*gw^ zXr8q>1E0RfKex~7(fK>1MY`$sG+EUK!jOEA3hKzxnRt&G#2I2ebIx_S$QUJpO&?1-H-E3@s-o zC#$$P{Z*+g&LA?DDBpvf@q~3zw*?(|QLnwV0i9Blqw5Pp{xbf!nT3VKh{I&l(Fhi4 z<~S~urj_aTm9G!&O%_L9Re5a*`gs!kOtE-;Pd2k*akM5jIT``%h*R^kEIA%K7a>QR6aH^a9uf7ND-f{1@6~TM8I}fC{D1>bAtx{i15{~v>k8i z=}|W`H&2Q8oD8JJbS3i2DJq7N%ZB*lkr5&$+pDu&GY=j-ID)LKw6hSg1q{CSu0dGs zMyt)wTq`AG3vgfSyDqmhRu|Z4#Q*%`{Mr-K_9(8>?d@$sQBhIH)$i)l)$;?zM1itw z{l$j%dX=|(*kSpyD_yw~NG@A$`BA<*?fd{|TiB16cB4E2YrWB@&*rs;=jA6Sp zF*_T&x3htRY_H7+_ZQvd;N(1_sHpg1e(iRDVM?i&h6d&9gMH7F2}*;5gAHwMxG!J6 zynN+K^X$hQmGvU+f}WZ?_S0oKIov@c$AjKJ6g@s*J5+Xba&ofd#f#?R`u#9;hpeou zw0VDq-*0cn^QarEI>5mrWj%Qk-}duMVezpKnU`30Z|%z{DiWwZ61&%vrO@2p-(O{r zsb=&cL#ASw_699!3v0eS>@k(Z8K+mJ4~Y>cXXnZJ`J0yKSy)(*jcT%`Zxa)0d4)+y zwD5$EA`Y&ut6L%bOSr{zU zNI{n{hkQgsh4p~L#-jf2&#tqZU*fJt?BM#DcO}vnlZ+Odd>Q-kxw3#Ufjennac3#* z{2e2HI-V1|)eGT;L~%4Xjs?nM`8OJsy))v^sH&>!-*JLZ0k6kXRPV9IgCrC8;39Pf zhIuvsX1lw)5nW?rW1E}P(JLGE2TV(^clg?(n1~|f{WCIH;nyeLrJctoCic2*Lm2p^ zxB9~ewW^vLQ@}OYjC?>-^yij8UX?a}n<^X< z85vkvd8cSY*naH7;OEciV)a~KXe>2t=Xagc38R}2s-7#4tTy>B=TuPm&F z$G-b_8Ku1FJU13w8}8xEyYO{{>3DGBt6#cVX_ux}(Dwuej|prBc3xhU)$cu7z26(9 zqht%Lz8C{YpdSJQuN07$mWEGANC^{~|CICcgv{jZ?5XGaHC$~G^c;^KJql3Dri7co zPk##Ld23T3QDA+2eMv>dG27vCisK?S{6hl?r?0mRmYT|;X!zpRTa21o%wUCel48n^ zf~xTfZlSty1LnPO-)S!{{H^3{f?=ttFsFW zSEzDqJcx^vtF#+co~!ZM^N3=8YSkG)-t^=~Tu4Z6(4gdH%q>^oA#ujPv?K`$3C}Qb zDN^6m#h7Wgwzgirdezq`#m^5Rwat+*?ggUIIdPqdo&5nZ7w^Bms!nSv;QC|1l67!$ zy06Uj!bJ>&dB7ELQC*$lf}|vi*yUiwf+%1pcfUzd#HIiwk{B2m^u2!fR7*isRTWvR zYZOkC4Gsy(*VfU&x3{;Swy<_hE}zSNa^=I&P>N!BNQW}B+p9nvfsl~Pfvb7ki7YzaEb%K4%Ber)V3q0mGc3Uv)D(r30(<_}7c33-`Q z@NMAJPmDxz@?Xu?6SW;2__x=8gmWlFO)Lz(KpBmQ{aD1EvAcM9WXu6IHRna_MnZBP zdl1gd%p{+`!zZ<~aPGT{#Omxvlwn+gRfHf6k+`R?KX0)}_YNw!UOWZM4R*I5{O-ue zNQupm;3F|dY*?vsdU}k4f`SMlkwyx?*95B?P$mo(oXO0a1en4{5#UI8_Vs%r>x-jA z3JMAV!NJW&{K-2-8S>9D1utCi&A2@LFD|@$k(sI{ni^gK9kK z?e825Q2`LtopKHj$e8f+^RO|4NSVUAySsV5<)sQ+)3_~;pwsVCR*w@#(|+;v}9mi~=6YjDt&@`%=~1+#GP}93L$WP3r6@ z`xS!C&jwe5FOp!8j#DRFJ6F9{f8Hr|5nIKd%l35G-CO|_4~UE;`D4JEj#N1!elaoR zySu;MBYq(v_>7Vs)F=gq4ae`XdVAXX7%*{VN*aeH3z;WbSp~{ExMOrK+mkjfas%MMb5pPAgM#wFmn9LwyevpxoVP%2+?)`fO7}2-7lkcURvq-H)MTMuQC(;1q+Q7D3D>O7z#?0)g<0}&e z?+1^6{&YgY^~K(iw!o_a8hPa|msdknpMB#nnT{so{r1&t9O+T>F8lty@msntGmx^j zJLBHL+C{o3&JR|*7AVpO%Bow|6%N=nm^oAjcN9 zAM-LQbaQh9zTtU0Eq8@Vmi7Gk)gvSAX-=myhjV{0!N^q zo7>y$Fmzz4VT_I0-n@Ck@BCF6WszA*7&9!wSHz{pSn%0$ceKv52OV`Fm!~r7d0Jul zk*iR@hUW3($H`)j?ECv0_0vh{2Mrr}C^GT@akL{iarVq?3ONvt<@A`Mlf zuMMSK#i)eI@=celb48ppAqT+bd#0KzN#`aOj zPV{D9Y5RuZWLjY6gb`tMI4J(^>x7W1E4)WYNOv&$F6wd3Pvu}-G|~$kzCMS500qMD z^yRYZG=`JS=J54dd3i}JEiE6lgvsI8b)jGl-_#F0K*c5 zkWohr8|rJIuL@clBPVAJ>k{^Gp4-8n#zX%Pk|*-npYQK|kTIU+XTJRJ0|G;%wUmWN zMM*g^J?)>IOxH2v1iBCxh?CAMr)J3lIc@wOD+crh_C;RiZ`^kD0~Z;8j6m5_Bm@%s8Y%7gXvn0JlI{}>4F zo}L4Xk*pq=S8~~8XEC2z`gTh4;C4OD$$?2oH!$lWAtoV_8h@>zuk9P?y_38}qtdy$ zML|hPNse1^Yl01m+dY@+f>F`ryYqQ`8O)ezm`At!@{cilE(n<30Q2DM+lSH)2Lb{D zArTQm=&%%Y6vjHWL|VQnd6WC&FN)HY_TWTk=Q4Z0+aU~<9#?hu_xAy1@qjMQ*OI|x znI^_XVp39WF zF-(ItZAM`x(w8Ez%@$%dq-^ykGt1f|@AvW)TX!N=1&buU++}WSy^`PImW_<)p}^9e zEP$?U?P3FxIs-DcBcRK}VB8G2`+_Qx2OUg|i(@xZbuT$NIoR$O+y&FoYS$05E->CP zu#nVrbVA1JJULidk&ii76)Y`Jg@uQ&yg6O$P@Z*6ohKnADoP%NNxV{acJn=1zDqVb z2zV}YKF7LXWYijlWs(ShW!DU<`St79gD-8510Arg ztp_7!8l?L2>MB@R9LxJVOVTb6fhBu^C4ml0coM-B9P+4oRy#>OSaatrxDJ!B$j~`w zKmM9)H11P*rwSCJo4w| zF_=%e7r48#w;KQ_bsd}Zo>;+7SQxFLMflA+V&sJ*q zxY=ioHdrYr6mf6rnz_12Fp)BfAqXA65mJL6${E1RTP6WgKzer>$7gdA55;hS-xKP8 z|5_^(SQrHyZOrSJ%Cs~41JeEW2Ys1{mFDU*Qx4t7niF$`Sr zNzu`VUKNmRZq-K!0_x9SKLA77bfA5BspCF7yhsMnahj;05G(&b59NQ3W)dZPaFvlI*LzFJEdedv$KcZUVd5uqKulFnw5tqKa)&_CNVzM|87lh%r!MDy>FRi z3b0INu_e#Y(NieO`QIS}cDR8WoR?S<&zylF^HC&SP*DeQ$jYFGZ)G*Cq5|1D*iTu0 zczO&V80->L5ai20f69XG3H-w!pug$kN2(vg70tlEBWBJC3bMv^#yoly0j@{6-6#V( zA7Fh)nu9S+NlD3L8wWHKff;fUl(pkT1D4D84_Jm?D@TzDP@UiV3TQ7}xIj)v7jm|K zw@hXX$NH%#e)s1DT=iD#WAjsP&oXn%8Bgfy*GZS-8ZC59CJR|oF7>cKNXFfZjtmdK z1Y-%_XliOICLtjZtV|PdHc`*@x!$Y$`+GahfWKMtk%B{Z8;heTy6vy#NE^e2Yyx?= z_8OU*GO+=>3w6L378VX|isgw$a7A#?tqjHkF{2nc*gSn>mDjYjgHRLC38wq#IR0s8 zLCJazqIngWC2X)4A zoA%{v^(~_IElzE^SXk_B9G^)<@_*f^LT|W&ic|7Y~;e) zr)#k0DSIbI{YgnlfknvOy(MG>OCe4n!m}?jARDsk7M0b)1YrYto8kQ zS$pa-U+vZK5GxEz}_8EQ4`v_|4y6 z0uBGZ=J80}85dawgS0F>=CW+^?;nDZiqlYc{B25k$kYFTM1O@~#-FO%3SjdBs2$?G zGGID2;ZX^&=EZWNS?_$dCbdPt(=6kz63 z@xV<9M)v%pe^nNL{mEF49Qw8s5QFjm=~9@8tzJW2%l}#vxTnKK1j^on9ZR2173+d37xk0W;MbKM4j5%!66L=^=?6!+ig4rq z2A5M@1?Y%DxE?`3n#%Hh%hqSloA9;9QB-={SpGH#Yy@QFFzSEmI^WNWMuC7;Xut)YtD1(!{h=2Y)3Z70^01ANiJGO?{^8+7 zg6GbG!+^$#VB%+hKM6DP64*}f9!pw}6vK<(KT0&Qv_w{+8wr$pY*U3E0pE__bKT~Q zel<17*^bW6#+k09o=ST|K$J|#05-=D_6$w8&;--4-Unqc=u@^Cf6WAn8Mrt9x6j7^ z5!RVlNS0aIEd_6GWWWFhO#zN)C@d3jna~6;862KOKK-ySU(C?_sHdkV`NCbn{^$Bc zhK7cwPf-7hl8OqDM&Qn(9!P8OD~~~d}A#+;jGG=coizh|kuoQi4C^ z2&t)Ftvkie#u6T4cIy^9#Ct?EXBxn*aQyXErFOOVN=N5ihbuXd!GStxn*p1Ypja{Iv$#VlzxA_Z;<+?klpMG`A;nlG!Ww!vfXfo+cl!HA#ALy=7Qv)N_1 zkNrxI6f{|(ZpB>YT6lDHuu`_56uh1F?${R^t@ILLc3->ud%+a}7q&nsez36-3%nZC zzcBDxk+T^r!J3_&O?X)^O#pckd=^NyalrCFdFoUntT@z4iL+f?dPhV^D9CjN(W!M8 z03$vqmP4UwXo$Wm>1_Lp_fp~Dgk^$<%eCX^d(bx?{`uJbej z}_Vxrvx_!`=mX;O|68M0C07%K` zz^6jx5@hxHk>B!i9yb{tY+naMO(t8z7%m#EGcfz^I&yMzPyeVKZv)kd2gm|c2wbLz z^F_HDmoxCd{mOGmPdvZ$(aHhXGZ?^vD6Gd2u;tH{TJh7<(=Y$}bqSJ^QcpEP0csi= z*=&tWxT){ny%UzAv1nms&o6wIp7)3%>)xp^f`{%c9n75;2%*{`;#=zawY+SEQhl8Z zmX<;cI#t1C>Ma*Z6o4JF@QNAq?&`K z9hyXcovnZU2@r?EC_TRRbMG&h9;yxW`XJGTFb7Q@H1T#*75_1A!B2ub4DnOSHu}Xdun;jZv5Q=B zH^kW4^G~5S09EFl4^HTmnGw9{>f&W0rRc-{tDM3Ev$BVy=lBuSVXn-jwo_fl|7lGS zSnGo;hBj~1(@>Xd?77ev>Uf5MySWP#$7%dxE|R@qiAEKZCN~-wG z34ZwSIEr~x+^P-D&Aa2IxhpYUGvMc+TgAPnk%lF)JP;mgb;X_>HNc*P4IDw}{Xnkq zpKKT{)DMhgx1=Y=C1#SKhQSHlmJ6W6+w<<(a6B81kWYS%wr=z2@v_#ZLcKrD92u5+r)FDqlmNT#S1-2W*v4=G@v z$+q=^Y#6Q3G8ylU(L3JgwLOaRWL^K-mOuEP-#--K~r|pb&Ypi`WeMt*)*reFod=cshhDe>2>8 zbS)8bYUYfgmy(Hm<`Dit~_C3 zVF;3QHN6dVxVoB}9}tmAe=?~CG)pfp7lOc}-)skf8pSVJ{4+Ww2;|SOTmlb+6&~H& z|B6*!;TCgKs9(#B=^{T)gG?CQuQqITveEGyS{ksT=H&&h+0ueRW4wF!?tz~K@)cdj z0^Zv$=mUT@6E2>%9OSdc*kj*QgM%q%QK zK>P+7*Cm)SFulHi$n%l^SmpJ#h+80r7Ih;NiBB~U zdfKK?(6^uIS>lu=MA7$1{8mfMr;EgZ)_j3_xB88LkoBH?4tPV+7x46^E(EERi=&+E zPjnx+^s?s@!F7O3_fN=&+hN)kQF;iy5TN|K5(BWlTs`=|CK#?|O<3tE@MeQj~Fl z6aD!z00nNVe=>!ak!xK4-fAJ|ZVdMKaVwnW@^y_nkh#)HOK z&oEK;al9-Kxm*TV&JQ_(6QNS%`~}VR5E7z`motKoa%64yn(69dgtPmsRwjd4rkcs5 z1GEb&T*NdL{^LM6Lrve8Bmen7j|2w?hX!EIE8nCK=z*d^2SU!qrm*uR_&6blPE(Mh zJ_Zx8B8*f)9SHJk$K6dw%6 z)_XE8@$V$h)bzA~%^*JzBvUAPp5)_egIK|;;sA)>>W|N~nVFfepiv7S03!^Tuqns^ zExSMYQMC+IE0)dd6qe9@$ISNX$)a~k@VIoaY&r;S!Emp9T0|A{g?*96U z_(9x`+K^}+6^%uKal*8Ot1<@T1#MDU)gHhm23|Xf-erwE_zwf7V7!uf#pjmxc2fZ3 zXgyJOE3x09!~?iOZK%eW3DQHRq}+dAObm_rU|PqC*H#In0A2}&q;L}qa_w~9hF3P=w8xq8z0oMS51AuLn`-(|6Sv+VQ zHkdZxvxo`P}jQ$>=S>g@Sc zfqFrZ`5_yWpZ0hXO`EaB@UsZ4;uWtzn-~I4KpsF+6h_frCtx%*c^M^K@L`}psDOcC ziSE}6Q2lEAfrE_=?I#wr*$FJV8G=A%Tx&ErP>5obF)(08**T~sy()*sP3xDRR$o}RdWsuXb-_X@S1l1x^e1Mr_+wHAc!7a|YI&NF*yOGW3$qKd zKsg4Ofm68B1xhX7gq(c+UR{z1$0)RdB`4SotB;57In_^1|B{x`mK|B53sF z+;RRe3f2OK2(6NTg{pr8pA+9@%9OwdJq)!S7;+@0gj6w@uh%}l*Zl4L{D!~fRGJ%U zfAkm-{<}ZF1n*l3QwTGoE>!?|$GdkThj{xtj`%Al{rwXKvIkmD4h|)UAL~(DUX)lQ z6$I!G5RkK5IsHzP-BrR1RbdW8RfibCCnNg?ABVCD*tr7!Js=r}Nc-mx_E&U9arp$P zGxq~7v33uyU!H#Ij@_FJ77;gn8S7|SE`aBQsF9NFGE! z)N~xDMbIW7)bCIe$?eB5T106Z0JaGMg##Kq%=eQ(dW=s>iW($X2wH(MGvfsR7WeGg zv$fDDcJ)3#hp{I|YfM@sM{{*(E6cn1K^42b*{Z ztAqpt^!*wj;YLX@AS^2EE#5ztv$Nv^ZsQLh)f8ISRZcU6+Z#)0hXe|-Z>rwIU1tX* zu&Q8i{`OAp_U)4z*RBbeb&#Vb9h&k(%z`to`>)JmGON}V@r#??O3>BWpn|4A;*)D5 zuN9v;g&o$bgub-&Q-42jjQ@}e)sZ_%O2Ph!WJ`5x$ zW1$mUF}ztjm0n+7K1VhM2{^)UiG>BCw+V`nP$NJPC_wSQP6RA|@PHC-Nu$}rFjKJb zU{Z`$@gg9^4}BirNRto2vR0tA&_n=BjmSd@s9$tI5Hy@#uvHqTQ~%sH-RK!**8 z1$2cSzrACEvky}svD(l+_``=p2wML~j}L%n#j^pnSU6P3iO|{v)VB!{5PLGv#gF+t zkEVcy>(qG&gYzCh4mGXQ&#tE1m8Jg=n%_HEGz+~)uOF~r*Vf!L71@&5L>3GL_f3`Z z(cr|WiJg7hcP+6TJ*jeGZ}lT67F2&A6IszxvN@`0Xek(43e&B$hAnU&1ddkd{_vsU z)eX3AaQ7&xA)qStOf@YGZ0kn2b452R+W>}2Aee;02s)(!=PtRply^#@IUHD0&CSi| zUHpd(K)}03J9)6OpeQl7?QuT;80GhS!jt+F&jo+*xLhAHg)|)GfRMW~K%G|HzGP8E z1Tm;Ot?ET{(y#lHyzfF}F#U(N5r1W@T8H`fnI#hlEkYQCf2S%vhXNo-T2cn{DFA9z z|DyN5z#1GHViOVRU#R!8AyCQYQ^{t&`0=0bM>pSi53DmzdYk`n&?%)8 zK!@MuyBeBQK;v?I4T4k z#0+L@^&Jmar zdqHg7mssbsCt=_*djjYRG@vo^^0Ebesqx~_$Ofdufs+K~wx4O>(1xgIcb~u=eP}kr zD6n)Q9lQH2ZTq==(Hu(3P(K_x6u^ZF$|5x1DXPq|2Rb|b7#2otexOuAm6f7!A|({u zxzu>eWoP#9u^{XT?%cV9I%nXUVzjjr@$vD=!O72adpJ0#gC-%RMvd557a1?OmuRGX zd+eziaa>e&7m6KI8{@vT;2a$T)*hM9yi~XG7)rfaRX%&wAcReZ%FJZ}I-vycR_7KJ zWK4i;uhCSJ%kJ)sAJ8x}Gf#n?Ba6?5Mw;Mbv;eH}B=DX-O~oYPLJsyZ%)-#~cNRmS zxgLrh9MSo@yY&mq_8Vw73x2P+w--voHE{ODv#vi&YEDBEB5pI^L zn|xwXI^R|jWMn{GT-*xTOB6C%!j7Ge=#r61bUZ>O)kr_$$NK#i1~<;(qL}MEi#D=~sWcwEC=DKM8CMIJ2Ws zFLOOpWUXo(QsRQ$jHEZ>uMAyXW1Gam_l*ELK!fYwSoOT5L=7RY-~Aa*-X!=fVATH> z${C1Rq(;p2VY;GrJowxLchjNJ118@?$24&IK-r+DrY>mIl1bdMor`_&;6BvSOrSr& zHQ(ISq-@d+QA%|5)w&kqk@==g=-!`h-ESA;VH9&f!0ZUp$P;=#-y^!y3*-fn&7M%+C-`tPQ@ihuQ=bKKi@Ew>q>gicvsTkgO- z8g4Cot|Wt-j!Fa60EMxUD!dprtxem`(sg}p3~B?WTlsG^&kPLg_#V7|t4|A>s&=ja zCYUauEU;m&`=iS#x6yYxKV-)z`sc=J_^2Pfm3}sLF zm#^Zvf)G;f`qcA$=0;ZoS%E?%Eu34rtfJD2_65Nztlgd~SX1*q zXgm6;mRWc-hZ=VK34^th6l4 zd(JP_`bQoYH35DMHk(z^yoMIzv36THZIj@*Tk54n@N564RzjZ6^Lg>2(CyqV08W1M zH`H;qG-nMWEFRy*g`*r7;jGkK{Yc$`tYuc3HLz<6p-PS#)5A|RuddETZZrkz=nPx zP12L*?%li4*zzk?*4pu$%gaFvqc2+Y6Si}S)V3I*T!19hyFR>PJFiX!SR#BP&{@#B z9|BwlEYPP3lr%<}&KmZYE)-t&@p%oFIW3g$C}r_u)6#gMIB*i&59@NteEOeK;QmoC zGxI_Btrg1qd|;EF4I-vDdG|r(Q#LaZEgv;(21+<32RH|(Gg0J`gI9zTfRHp2!8C}C zkLL^^MOQ+d~~O7CgH{BVTBlxzXykcpvyxeGcp;SDgwa1`EvbrS*H z`Rx1Pfe!Y4h zeSF8IS~!^T!UW>8$Y;zO1$HfIn(sRI@(aSL-*v*lO*y#a79c(OqvP|zW3Os-k*a^Zz-{1^r3nWGyaFPZ+7S!teUXmMvN!#^7z}eHoFKrM1 zIh^ll0n!e)3s{H>+?`U}&myKnu-HSOFX}3wC(+94!MzUwFPQ*Z#68bc zj+fevO1x+vA$Q%{+ZbVdneZ?~S#7&$HIPuP86ImzTxGydj~TcYhG?a?q4~N zn>sq$I*9P_SpEJ1ZX5d>JRRga;fk1Dw$fS-7!0Km`j0G8Ji!cu;U&jjx}fS3Hs0l` ztBTv$*cjRq`sK{TiHqjXsoP)W#h-LDj=mMy$Vy$!$l88b<~{Z5i%Jz>mZKQtDqPxGuk!=9xG(nk;ih^oph+lEws49ywY9vZtlTgo zx}js9zrEt*zI|Ogtp-obH)$Ar7_`^Y+l~>$G4ghd9Pl|2{A{#7w$6FPKJqR%Rsj1< zV?uf5xVUzWbxCSz-_p!bQ-T6Rd3kw~<8VE#pmo@G3cAGDSmvfA6{-98@B4P+yNWyu zF8k9Z=@mF7S+-@ktuGDnyG$8k&#b^ZsqddK5O43GB*=%0XlGo%Khl(Z3M=BV_Xn)=jT=w9n}?dnxN<0`6S;$FIM z-@es;hgU$jC?ri~U?5 zC(G|PYnrN?mr*%C#IRwo5{TS!quIlT?;j!^yST z28DK#O=ON`+pC3c_sRTGuZ^{ZY`gx;0@_dI)Q!Mrw$3#m@i$n6XyvSxV;S1h?65j9BtryFR~hok`0j ze($fa7^n>RYNxGDOSYf&y12ZDba!{RdN3K)OE|raH$GFg=n}Q_l*<+Orj@6bMn^^( zL{vC;+W8eNk0hVyh-?_HX(4?4_))zr!+0hIhA5XgHa?y@JG{u!s z4y)GJ7q;%8cr)U~p`P+0!FP4YN?#U&P;EwVa4@^Zde6Sq!5m!b+(xUwdZsMdq4S@= z&&>ytNIHebw)zt0#?{oylw^wI;tl5CNQ5$rSCn_Om$+HaSv!8Mc`5pYl1@l5mgJeF zLrM$bw}>YeuP^i1TpMdmcUvA#$o5#W58~F-<|$fyMep`4`eMofj1RuH%(@}=_3^#_ za!=)|4({X8^E$)EdGDc8=N+AJhurHQ4xka&m+zK5#HndptCU;ZpOg?$KR@2VZ__P0 zI51E-Xg?hDM6CX`Q5kvG+kJnYD`i&1>c^ud91hvqgW63i=MyWRrB=AS4(c|(uLq~VTa3)j|!?gI%bJDPo&h; zTuIf=mML_btAELRLp4oTI9Zm{(ag-uUWiUcPOjF0o5|-=VrSROcf3g=xz3pQ z`uQ2mXFq+quW;t$S#Q#HjCH9=<}hq^!D>t|_hI4H&~6AkwITen3G(51h-v2*I%B?l zGwt$R=u!_>XFe`Wm1w#f=s^9 z=zf}5j4ci1*w@nP>d%{4Fz3axf*}1G?xXngSKI6}7|jxs%p~N z{InNa!5-cRI8(#=JgnViIps^MVoUHjy{2yNZl;D8&LU>%lRD&7p9}D;@Cx_lL{FFJFeHP& zOL44f))mu<5;P}1B*grm-Y!Wyo3J?*XkL6sBobW79Czfu#tQRPvgPH=m)g0u(adHg zK4e!Sca&Jcyp^1&c)~!+{{>U&mvaW5ZBHrVpTDNT&>srXQ6$S^d^{|+1(>g#trD2-AbrI(ifsOfJQ?rPcV&CA@9B6RvgJ0q(LzOG`^T%M|jTO;6GE^mIn< z2~6%i`1>K-JY5-ic>%O#OgXkfiiZjR)7M^eSf6`DB60I+uSEK7F(JK> z&Iz%LQe|~!8$z+3W|g5tcjmp?0@30&WItQrQMyY%RSyfs^i@1QxNs@MEsbJ zKfeCeJzg+w`*9Bi@ikR^W1K7vJZi51Iyam5XwQ}{a2me~vtaG}$E*JFo!{<5MG;&b z2Q!4lL&OI9ET<;R4S@3>8fv)JXB)inrm!%Tdn;x-`p4h{U}K$ka>`Lp(`Cbw@810^ z;gn4UrgJM3n(59?U8{~9xsDtw6>IA>0NH=-?jL*nFJ9k1&h9;AZ?D&mcaeeon+%!B zTsr|TI(FsM-J>w7VBno=&&f*ka=ZQpGMA*8n3$;P=vIRl0LQG#-@RKM>~RkE4CDh! zOl%tMNvtS!Ik(d1-E__9jdtPsc{K3qjv6XesNrP5uroZ;zeHI>`inA!jC-~_-5uM)I zFhpj1)OyLP5l+CeHHt>x+$UuR`vDif8LmF1Y~S(eFRj;Ip6 zx+uksEsl#Dov7s5Z58QLFs17679{hOIoqbE`-?fI*Sj+#RTMzX*VmT~@)2NQ)3?tt zwZF{yGM+jm1q-j{OHS?h?Gq!~hk)%Oj^CbY-5707bpzqRf4y>FTx=}s$&;6XjTvSyW zp18G@1r8VhP-_cdE)@d<@y?xJxHMm%hn3gpG=RJfbG)=`&mPXo$Yp|mc%l7i2xZN- z)d6L|0BCgh#y74GbCW#=GedPPop}zsjaPI?)=kZ+I@wO++OF>IviNxU@Q|U40i

zS$N9V5gyZ6taAVR$4w*~17O&elwb%}zPo7%SIZyZV}T3^=1l|{X=y|uX}KHwnJy>V z^}ol*e)^>Nn3i7#HbqcmWDmau(V)2K#EBEkSjuy=Pvft=e5Il9D(O_92UsejpwJR= z&K->nOQWNKFlNlD0LY9nE+N69@+l*`LD8G4U>+ip02^zQ-qZ&U*te}cW)Rnh8RbJt zgq-WRI)}zce)GfOj!SZ*s_cQDTP9BM@~ZI0vuL6W-T%CAs*Z8k|Lnvkw69D%#BF!94HFZ>h1=U*bLJ|dRFjlh)RL4X;gD$T^@APB zR~=kx=C(Zd_|;naS6NbVqHf-_8VNV-y#8iAt|za($kW3E#EFAmHnnPlNRaA(fT|Q* zc2Obw5Z#x%{Ykng30B)z+q(PI=xfqN#AW|plU6ZBYa%g$mPj*pEwMt z_o#C^tPGvyvb%fnv5->v->ICibYo2bJ z$4wd<1ehc@etaa8&BL}jB^jGJ^Vp}``8f%DFg~HrbnccVCbHIs39FEik&U!xC&R`g zd<;KJ(>{MrRFsN_CIR;7=yM%wCAd5+I6lEx7aW09{X%VClbWZ1k|WKj$#7POU*3rL zkeMpQ;He6Xr~>u@{@JtatL5abE-upee5Y{&h@M2y*2@dU8+xX5J*F3F8$ZR{jnBUI z`5Mx;CgyoMDo^0Cg%li?k}U!)bNVMAiZ&Ash#;Eu7u4PhJ^(`mPIp{<{8!DuZ7*mk#AyyHUQkc=$oakx zA3rt=_INO1A%-8@4ESLKTQG+zYipaFdpr{$6wBx3brTfaVVXwKm?0IW#ppt2)_T zSbGMOySqC8RvF?BV)2kOz=P`*_Pq8$9 z;?0b_b~QZOCXYdK=hDf!QvIAu1)lvM^Oz@^MtXYs<>HMM@l8Sod^|J-A{9>YA7Bu! zJU`jPgC*#YxHlJi6A|Iv=iGV(5Y1;i=`o}qJpP;3`6~|m*L_D?(_^%@W1Khn*~P^r z(X1iS=)?%}LCZ1*xs0tcpTc;Rt8y`AkE+k{7toaloE^D(k`K&dc`@ALcMS!o+Qb7o}(AUYae5tcTg5yers1}3A z)J>Q(TM1YTK+Xt2#EMzh5;^Nye=2ZhDuJekNsW&1>!*-oY~|VtH!o9w*As=v0E{Yd zN-ypYa_rY6S%(9b7{g}o?DVa%G9NTjEa=JLA9rDQ~`7G+}#~ zo<0rC5m|iE`m#k_TwIb;%;m3hy}gFpcI@Cdb4D4j3eUSXYOqm16zQF|xagvmrmLl- zq~tdHS&9VG(PzWH6qrGd|$#lU52U;HW&#GxUuGS*#K047pGo%n`sf%D|^ zgrT{iE|3DIH7|bE26GsZ5O_M0Qc~3|ErNBwdd#=oSpHtYpqB4whO%dLbTmG8cGmGR z{W)#$Mgy6%O+R0R3pE3p&O#isnE6@@L{e~4J}j~PAx&sNGo0&0_l1f0!d3WlvVNgk zONyY7kS3+rVpP%Eybfe8mATOt4NJ?E_x{I{0UJNm)hRqY#8nS|%cVKSnfzh`H$)pqmazGP!4R$tU?MJ^MFt%r=@_Xe=2d}gBQRB7 z%fqK;+_ber0EXfqJyi`mR`uB?0>xH+_z=K+Zmv2=tyS^R<~z zki3=);rk4Z4LQ{w2M33yXo(%+A~>1i)#-;$W3AC$1=M@MB<{dey+xOB2-dKYT zK>#5FZn+W&DJoi80+a=ikb@ajhog#vn{Z6$gu(X zsiLNzjyo_A0ljhGK3$l6GvojDV>k!4s;a8K)OWX9`c+9R@)gyx&DB_#nG<0M+UZw) z(Oe&R4w@l$D zv4eu{bl+>Jn|LP)Bs8#rNR5{Z{p#8ct~+FoMk`X+Ni0Ga*YWyLXSe0@+3sAsYg`6J zy8HL<&*&HjHhKvq3|y_}hHGeWj`KMXFE-B$-@Li&}b=Q6%#a&^gtyP~2( z3cT7DJqDj!Gsxf;bUw7z`f{obkwELOyv)VFmN9g!oq0)^ySq6)muk4+^M_}rW<=$$ zT&Z!s`5u0k(-d}|2$K&JiiSHT0p{Xk;aKS7VynvfiQx$Hv{}r%nWtc>}lsXdgq(g6H-BS&1??-O(mzFAK$Zcs8QhJ0@7^Y;Dr`7e zA!`}XjSu!{_&IlVJQQif+4%VQdcJi8iEgaU02Bq!Pjn?4c(19!eiz^}8UDgLfNXP! zp2j97>*FD0okA!ay7ZErn=0Ab*}pIM!%re(wDpI`P#s$k=By7WBip+Dn=g(2C*XKM z^(@C>Wry`{mM3D%iKrw15{dvq6&-*hdv#wM-bCgHik;wY5|rZ}pm<48OI{yuho~mD zHmf4{;`D{Rw0w%dpn_H%c>D}dNN2{x6xG6!02c)#CLW+zQ(WyLBkRZa%&M! z0L-xam3=3TZnwP#B-&U;DQ<}p(gK)xln;5c=F$B#$eJJXSNMYPHqI}&_GqVZRi+}K_MaR!(WQ+5F3{7rKSjm>O#uO%D^*)S)%uvEaMSvfiZ`*f^`2(C;fzaA7 z4=}waHX$Dzsks6JEx^I*nhQDX?9$;(NJo+*?_`@{b z1ZudKq@*MpJNtv-8B8wqU)ke7zdzvs>(bt4n(nua=>%kXyHJLz!L6v?E2YAO~7RpwS}o zV#i60u7CAl{oC6+YR@PhNQF+24;;>HEc{)f8sN1-E~BcCy6YR%H@R6hA-DWf@o-4( zZgKKEf4VItkH1_r$;nts^FP20T`Jhf$;QF=Z}k4H5VBs#Mjbdt0lf@FG0$aIZf<#0 z(9N~$=dX&!U7P|3Ru4Q(%-KZeR11f2C+^{ zL1@GP!>%5pIZ|%edPs1pP$plSDx*Z^LYig+RCk;HkrkfN#=U-f2_SxMEVFLpQ?vxT zPEHB}@KhZ^Z2kJ$3i51`+CsyHF*Okl#Pf8yAJYjdM|w=(&&bGV1PBHt(jO9>5Gm%V zjnX=)$BTo3fdNVdith7cpA#az2oRya>WKf$^Q*yRiu)cLXeC>^LUd3x{jb&!)~Ew( zYPj{)B`5$O21aroGNr{}RS=RQU?`<}tu22Tb~J|`lm`zVsuX*zF=LT+4n82eYGRax zAB7p{SeYwVV1$0m*!A^w^e5;Zs3{U#osxjjO%dKs;US5GF{amE>|G3hNzsY{SJbSh$Wul}re4pvE3T%d#-drkypgqS+==DnNpmErKn6e>a%?kX#eV+$ z8T8QCQ>RZ)g{)v~tw4xAc=Sm1irc|kjMkbz`a*KU54ay31L4=@Iusrv?p@>xh2e+> z5Ezhpi2%(bGj-yEM8NWIu%InKRRho>^Gb4exR_`Aqbyi9@aWWFx>R7HP?HNH{NlCw zP|!s&poLH^7WFm|wNZCKQ;wC6!?O>NbHLNLfUXJ?zNwo#=oN=PhR>Dm=8?{KY5KxI zR87%Le+4D&xaV9t=Fs-B40p~pe7gnqNl(fQ;8_yPCaUy;iR#v+A+mkjHZwGPAl#YF zK%OGseylB%r(k{XGR4-dTl01aC`xl*H__4CqG+gdKq0B_6+>EH_l~V0y!PKtlG`5~ zJJ6**KQmK3v-q124>NlO6{YGdoV#5Um_ZC-{V0whCt-Tk?q8-n$-GI1)a4W^wlr`M z0UAt!uFTAgJo~jMW{iEpLuw$ z#h~TU5nfdL4B|1+=e_Y!6|AkM*G3Z1kE9F>Nc-#6I}x7qT2NHz&LR+F0gxU%ehenZ zI4Vk`{Qz|+4c(sKaNV;LL;k*{;8OA4{*z71^8`X4YaG<{c-*_AxaGLp{*Z?#@_U$599w z&pEYT!68Tjwq#d{zY@(*=EvZbc>mz3O<9?&o_ZZj+d?^ z{OQlJ!wJqdYq*RADr~XFB2RY+3K|Nc-`}Y%EI_mXN>v4zeF|n|zVoDY`#3cIQT~?> z;JfteW&?~&;sMW(eRvkxETgjRSk&=?HpyP-uz?Y(>FS1|3CGsM;AYX4MMZUQ-n55Gda#~^J7U+gcvPc=x*Sx6IEfZu!TwnIP6{SlZE)$ zBfKWxK%{QM+i+a4{+WuybaW|D4B&ur!%;zN)NgX;%o#^O?h#ZTFgG9JUqHNFxH?_E z3=5roqmEtD~(6b3+yp>PwQ6W~flP zbEhK25q=Q1P*u?am_=C12i3xDzxg^6BoUnM9u`ge~AWhO`U(IFS`a1gJ z#fyzm7jBDo@IdtyJsfnmAp1zteviVrxxn@ut7MS7h^$(mZq^7p0D83~@Ti?`cxfn7 z1JXfb`ZXzNQp>=*o|_Bmvermaj+@p!4S;X0|A=KkkG^P%5cyZUm8{8wFe zK_AjjEh?o}i%>TIA@S1l1Fu%3JB$fF3!Telfg6g><6SzT!wSA|8(i`~G!Ny*fw?yt z;Xa`RVa2*|P8}6r(XureQ$K_*NdgE(*yW$NNS&_$V!lB$n0l}pXPA5fSgZ+9(1Rx1 z))D&$s#mT&qUAG<^6|m&TeYihOm3`+C(E+i=jG)+c=DtL92`^*g%$}-J>_&%jZ}l8 z9NMeSUASOaSVJ7P`~=LI#N9ngpzdInkj9*h6b>40o z?r(2*Ff@X?Y7YS8;zLUzGAdO-ea?`?{yVH%^Cv!T(VaJq^E62zmXL8@f1+vHxJkpzbZT1#;)dWb|bjH@}*Qof<*bXyrG zspVK|VU;1NId*`DMHMrMpM8JSrn0(P7Hr4t{J_!6LU%gSJI0~o_nG7OqZ$`4-uhY> z>0L%T!jc3&>M}s;jOYT8N_9m=!lf>z-5O4?ENjc7MDTfPXFN1DUlc8V+5M1kQ7QDS zvvmJx^TqyQjAE8>`_@9|v{_Mj8AInau_yhiQP&=#qsM?wA;IBAm(T_YBtSB}{C{yB6f zz?++h20k#%ODHtHBOHKEVB&Kg1FtgYo%Ib3sJ9X|+(Ms2GJI$!lOL-(bg*ea+ak3$ zls>GR!v(BDz*d3%$zTRe&=4G7zn(589*uaJL}Z=OhGIO z8X@N5Mb%=V9mowb?QF?bN>gYzMo9)nbRRiJ44$(AUh7LYl4X}<4-4Pvz)DM3(lDdG ziNHXrhwSY7(6Swi5EMwUYv0>_t|<1SnTBd<_|Q^rt`HcxnyS(V$)}92z6|7AQn4XL_OH>7EV$rAW+h=_Psv1xs zXaVKNf<^SJ@4YtXacZjPp4j^0HI!D<)6=Kt=X3Jur~&}t%wTAMTtw#Ko{e=<(dx7; z)UIp3R4J;0;U3Eu_<9{2#w?N1%QKU4&;LB5h5PVxqHk=f_z zx_SZd$3nw>HH7?VKl+UPcge3{w?fzIq$%78^$DS#3_$K=aK+HxNQD^Y2>}I!Ak;Xm zi(0xpW@0B+T=BT?Ay3gK)RJS{SL#9Rs!Y&T zg-Hcbk)NP-8EgQ^R03 z`e85|!nbaLe=(xF83JF#oMm;K)$Ol3yO}teVH8cA9c=8KZ7eSzbTxByvb47o;y=MJ z$a~Pj+1bHKTtL9~&kyk1JDLl0ZQpti9rj@q_bIM+xESpH+QE|9X`Dw`Am|{t^1sT@!NBErc-bS-r~8X zB`;QRL+_1VVwf@Eb*b=rk8F%v)sbJ^WewsC&L5b;Z9DZ zqw{5?>gOJli`|tb{(>7}MfG2IIB$TjSx0XjhA+Ik=;6Cd52CliHwv3&;r}{^IpKqE zcAwq_-vn=kz+kfInMXFNlm-R{j(mN4J4HV~gPG=hbS?bm;3faY$$@GHIy$z*?B#(w zn`I3GZ&T88OG`_CHp5_UC^&q5v!SxGGN@SU^e)DDyPhJv(prq{xpSKfm@pU>mc_+I zzkq;w@5dpG=;zKwVuugkg2kK?ae5W<=$a4}y#2pi<2jYh@Inrj0_rX4d)qQ=gE=+`~V{&}rwyoIcT%xkD#iZOLp8;!Xy%N=))tLv<9l>-XO&Cnl zH5)qmhNJxaN_P4BhDFZXoVggs^SbPs%e#8mBXtb=0SlQ^ZCT{`E2d$ ztq(C6jaOE?=u@);q{$bmo}UUa@v7vIQ_lFppBl++IR7ndoSXlpzy?ebciwitqsoyj zStjr34;)C}!>2bg7-AgEZf0&?+vmV3AyHfrQ0OwI)#F&p=l9@&>R4O)Y?Fe(VqOr- z{6K(=R`ufp4Ey#a*GEW<6_d)QbHyCK-XPBqV+#sSavVLHYFv(!mzP&FF?or{$*Ij1w%Ix(|+l^kBp z!^^9I!<7-V%{p@CKj^YOFx!WP5W&HH5bJ`I^fOD1E^z2O6CWSXb@b@@+7N;EZy%rK zUabq0mx$~d*P5T`nXNTmRfA`f%Gb)S)`utO6L4LbhH`Rud%Z|fgWtY!a&yZ!Cn!$a z?iY7X>ddiZ%kN4Tv2L>%sCuOL`pScfii(-K6NC$RQJao~@S`6;9I#EaGRx5oGHV9L z-m^ijZvRH4Vs{6^a|Ge3N|kZaj2SL!+2 zB+_mW`}woV?DsFzX}c=k-lpUc6VrYB_U&k6?7hQmY$6t)4`S6ajY{h!Voth@Y77nz zE|$?SpH!I;7myoBwF*i#d{#7QO^LzqN2Rj_&@nI!&aa?nLfR)aJsx%~&UGUhl@~uL zHOkB=8s#o`ef8>9*&w`;fqvOdgNK7dRw0@HrAd=+HaWC zIqZAx+_{C|vuDnr3o<=1c4nN4imJgQEi3Doudi=Vah^g@Q(Bp{bc5@?IL>zB`9Vmn z6qD3w_wOBo<)r!VU(}NW@Rna*$BVm+#s$bo8=n&^C#=rpdw#u1nd3Mp-}Q9SZ+4`0#Ok?z5Q zwbi9uxR|92{SUeM`GW=J?8_Dt;5^(^mvr)MLg&7JiG_a|N{dQ2EY5Rua&nm&Y4qb? z^JCc8CsWEim=YgyH%B}3+XzN;Gv-v?mDF98p+e?XZ*Nh^D=TZK>*WfY*E7#ThN(@s z2FJmXnO(hVRTIcX9$;NdijF?$GV=NK^iUnoyfn%SxcmCrhAu&n^r(!SXYn{kBogs) z=UKfq+^vahdJztV+W7$kzl@AAe~5yIhX<}*+9)F?=5SrOm^xnAwo};m?p>{p zG6)rse|EY{i_MSW5I=vtV`=T+lvGAS%(rjfEZ{an@tW+JG4WT8m3yR7>^lCimjJa{ z*x~D`T3eKfJeehqg&bYM@A_0ywbHNGVlW4P>{Ttfm{~?niS(Y+Js{?Ij^^Ikc4MDX zC=&6aww;@ca^zKY*`S3*PZ^93pMVzQi<--nRN0XD1E;tQ+ zdg@HB6YBo75p(M6E_##wECEM9b3nozf9?s;;0DKk?3w);<{h_SVQ0?VvWKT`W;wkp zZ|CmaF@5juQ5NlhPPaw90X5QJO)4SMgbJbTS)~i2DASlXN4#fUWSp~ z7|f}C7o|4+?>7AFw|}nUTDy?VTWA1Bj#TBt8#V?+Z`I$rZCm3=W9%kFSS{!6WOI1s zAMISdA(p}|dlz#4&l$DmI#-W+B7Gt>O;-{0yi2FJ?`iS^>Q{kC&f?2%*%F!CA~ z!8ZNqd&jVQ_wKI<%)kNwv_K*AUeBQa=49pE-Q9mi=*M;$1A3!AO30yiJj?Jjm6tye z(t8oVEQ)~YShLz-EdK6}eHG}ZSsQL0wt2fZ)_ZAgF?a*y6vX5o15C~GU=!v>=|8?H zzt>X%Ka*;_;y1>y;m=nY7Q6m;ulkisMt%1luCFx-=kCi2i{qyM3H;oJsBGR2Opf%p z5rWvE>jnJG7k>z=zhGyXcX6IQp?-an+y3I*{sKwDpp zt93b7KH?QtJ&KuQ#r2lz0*Y1^1%ziv`oev6d`vm+u|+FHI`1sLqo3n9U{p-M@N-5g z1Ip^Q%P(>!?jBLAF@x=eNqRU&*JhQ{<_(U#G}Ep5$n!&g&D7{7i(as-&SuQPQz@D% zX?CLay=m|6(Lz!&QHl2giZoRpQk{yex@KD{0L$(r48}#J<C>m4gF)IefWj0WJb2*e=hqa6edb(Ns{x%p zC@P9HulZDTTq-8KWTTjwv!O#q2338K`dWJR1qk8igwpfeGX)sT*9x0`^o;xlNsvPT z4J{U@22sEZ-)VTzGcu<7tgRv(G)E$2^6BSUka|ly%YDi->tIVRUAFm_-#cE_eEism z=TH#7{C=zV;$TRbD3BM=xi99qxE0UB9=k#Ve(Jr)P663r5_60@q7e_%i$Ayt5L-u|lx%7Z-LNap>C>%F3+F zJd4DUEyW^~W=C5UC@3g83!M@(OWVgUbIP>(vF5pRcP?MP+>)TU z-+N`YeOR)$C0RWvBxHDr`+#6Nr{ZW^%4b*T0sWgPi!eNp#5jVnQ=JHTBsPHCX3cBv zI|3BTcC>CMnTtkKQm+$=d+cnx3sm9CO{ep4bE`Qzz9y8_JkA0vdkWH9&DAwe+{$*h1;yZgK^}dl3m5LQC!4&xJKUp9YzY5SHe+7z_Wc*sOwChheC4r8 zw%Cg3(2K1dr@^Xbtdq|{Se=RoL_gqw#L)aoq?Fh4#;!rg{x*OI0Qyv0GmVX#h}M%e zEcwts{2o1OP0cLx?Dbv&B2o6$rT_i51Jc)Zwr$(Spfwi6|AF|~Kj)m(>+iMMc|p<( z7IJ!r8`PmbU~I%@OPq;n>H7If_#6P9aOE!0N-tdU9WU3dM+yR9Od93uFMnKmlvl&Qiz4xZdDu1$0X&M zLnxalTe5Q*ZNXlNVvy|7Oy2%Fk>(jl5Od&ivo;~j0#^XEF144MZLn~B9n z^nh*NG3=-Bv2%-7D6rtsO55rTL=GdZZKINA15HH4uCwqsgwlKJ<57Iv3;Qx4QOi~v zF*_{`wr*MPWaVos_A9_KwXj(1y123~#C&D`2{3-ce!rfBoN;Cr`?Z8A;W%=UqyVtX(1x^K{4Y-p% zArg+zf#xsz_;1T$3D~5+m4>D*Nj3H-AYV8KT|7dmva0H@y7=frfwCv;aEcFzfK6>~ zD4TYif%r?4N7%4x_h=4mG@!;{o~%Q%H)1>gL7H-xq_H`4@}v%A@+==frZ)q0`|`dz zi?>3lJrx4Wuemge5PtAp)jNDpp4VBT!m>X+r)-+visoIDRNv&=OhIA! z_07#PP}z361BySRqVfb3oQ?ku{V$)}m8W80kOnO60zRX3PA?$}Aw{{L+tzz^*;gw~ z=VgC?|EUl-^Ysk-FT(!#=RVzfTtfcEb>K#WT0-%^k=x6H0-a(vQZRe2%@_R7GyfG1 zX!99^wIS2nWgrodP<5%)W#sbCJzFiHv^H1=Of{2(daQWXD2-+bB2S;bVeH1&_ zp+l#Yj;`I^fI0YiLHI78d#TaNxV=v^ko*%KrM>^xt-mEYkGARC|I9cxxKX!m-)@C# z^DE;|}qXUWvP4=8sL7H%ETEP5%){_lp6$ zNNi4Kk@8$vzv4hnsgMZsCENVx72ip(YD*uo*S6E^Twyg;OPn2_i%svT(@G%IZp3`` zb5T7lC?KHBcK&e-AVG~pr2{L&GHZ?N$ZZoPjmGusC4h9axqP+m`1|hwA%R;+Na$d7 zLw&s#+!`d&fNsWnP^3c>t}BRLyjZK2q(Rz=OimLN^%nR`sCxjewsGG*r5?%>zKuL(&xJaG7}d zBFF1wBIvffJDm5m)+Zm%B#pV>JTIi>!)Dr;;oJjjOf7hyLV>{)Fb~rB!Jb>71}6vc zXoEB}k=FR`rz*TqX5W?;YUDku+2hh~=;!aRartu0>STb=LZ126t0{maP_aOO7<9HI zdqP=RvJF-o@HN7FpgM3#OB*ZRxv|VWNWri*ect{(f z4Qx~xx9lDPs#BWNNLPL)LO2kc()nJmvToFk+HlN==phI*dKxVaL-sy#?Edq2%<^}zL2w0v+yA*m(n6!71n!0*x!8OzPgap8% z)<3?!MW`Fpm6_RgD!ma(;N`DXwNX*PQ$;(5dzn}XyCDg^S2MX#yeh}?aH%l201vj zn#JpTn$vT5H4Teo60}GwfUn1gW=2|t8YE-w%U84rxTSR9vKigo20cD&D@fNg@)%@r zAvVcE>ObomZxirYR3J#NO@)+Ow5Dhxq<-H{PD68;iOo~EGQi5y0Pa2BB$K}a^XP_^RBF} z4k>O+3G^!YTJZ=3Alc*=%C<-QgsSFkN~FEXBabB}K7$h0-!(Dmp5s1w8DYnlFJJ0q zUAl>=VOkn5aFNpKdI`_f#o^W@RW=~hR;$a4WVr9i-@n@sq@iHB5WMFNoo&}v=gWhF zg5oP5GNwY}pux`2r_k6CW1KEaKy|wvkREv~_9;6^@I;VM02DuAw*>K=>DZ+k74P0@ zLKy+d6K!y!=2L`(Ht;m0NW&rIKreM{mx9g+69yh=(Ndl>Dp#(=!OVaiJKCBWLbxBp z4hP01C1r?r2Bbfd7=>#BRfrF293a7D0R9qg6OzM|2}%(uB_)ys?Jv6sHB&yy-7(|J zJsIdfj&~A)W9DHk>6#xkfm2Uwj1F9@XZE)0DVo)NnPl?<-UXmUuBN_z?h!Z5-eYev zL2hhr=tt+wU!2@7j95xLB<5P-&- zAfBMeNPbux9mpU;+iM|dcH3mxZJ#0`C#ezhA|R904&W4rdQ zinF&Fm^{ha*tzG_H{*Pwi)xc{DJt)N7vm(4oFG(fGH6 zaK**1FJwUxK+-+7i99>jAknjrp57Uo3++_x(4j-*iDJ_Ao5ahHn8nl-LijZSLS0w? z!YK5}pNh&+T$qhdm6op-e|C!MVZ5?R_#cAx<{Lw$L9Kgf(| zLDQ;{g~Uv)xV&T#}OA`BIXS28D%%sB!|I z=Pw@O32i2}D4ytvdjZp=G;_{5`NwSvXFGXn2LF`8hs8j?)4&Er7vr{jA{*3`SZ-NP4`6B#H|$^2GM_^`#h>m%-&7DBj}GlB9|# z2@DC!EkQqFey+=YY`%Q0)X2S$0v;fH z{`?qB9JQdN3RwEsaZAQsw0CkNpY=)v4d@f4M>8^m+)VPSgdi4h#h za8byRBI|1OsrXAc(768?DE|eUA^Ler(xeE$C4;*D8_FqyYW7Rgez_l>p@VQOXt>Gh ziR|cT;1;jL`C}jn{&1HJ6Ec4cM+hn--H0Qo_UjPqB;|huSHD1Y1F!^OE05kptreSbkyfUhNlOIrd;M*1ekADuqlg&HMsH#4NX(tzoeHh3!n+zZ= zUOzfz`+pi!96I#& zw=o6ulfM~L)J4e{mb!{VCnE2?z-M_wye)=!}~T!8^fu8;xS9saxS;%s*4- zH%|H7^DZAf1A`?H0el?Pqses+bR&9e*8(vyYU9sG{5H(^cQ3}Tt25zw*S5eQ;}r6$ z)Hv)ly%_!Q)a=u!C;@;^&@qw40_ou@G$G{0y5CaB8n^?fcbTPgVeFQGhCqqm<{%3f z1y+5m3OPJ}=KpVN{tKRh22gC0l9E3ogyjA8{D>y^p-B%WN#*Aa=x2fquO4W8ZC1;U zJ$rWt`sod(#De!0&An_jQby57T&$B#r?+f(6yK<)o=c4scX>rcO*uI^-|=kFGeLg; z46|KsnG-l|9Jq=DW`q;Q3^&tw~4GbB64$}D` z<8BUOb;(BLzyPwcO~tI${oF3?40Tx}kHr%^Fwt8$`31vXk@xG?#qYz?V8MZrp-&gP z@i?_%`tAOY&yI@NbR2^Ltrl>+Hq!v91WMNHD)<~wOcg_q%L0yy03-zHAOorqH-HBG zH`ihjyY7=nVT88Y%oZTo-$jCPQxG8ewZ*74)c_VLb}TeMr1JsPO3t(Gip);<^ywmW zB5%~2W&o<`Lb^Axt}UDgB?SpN;*Q_$H-UKTHen#foVa$|XR?x!Nd{Mf1nbm{B6)z1 zO*b}dV#fm8ZiBm(Yu>Wn{{k*Ub2pYns>CGH-FOoP<^s@ig$6 zcC?~bK$1f3T}|Awm6T2PUpY3IY5DfwJc0;!agidt2VBYY}Ssc+|+m5W$UHSIy{`-V@&&IHWhOEFJ zQajJU%Ifph)W8o~E_jP9u%{`{fW6B6gOrg&pIlIMr?i6vysX{GD}4{Y!HE6|sB91b z1=t`0)moWG<6Xf3#1Ys+1A?D}p%`EWWVx^Yf>zxHuaMdg!ZQ(CeER{n?w71S%c>xx zsY0FzTeWaX{dlu!IGyLGxH%*BxoKdM6S9#6umL#@*CPhcfmKhq2ol;& z#O!P5V46QUIT{E)HU5HnW^e|jK_Nwi95{TF zSl2yYUoKwWwC-W=!iux0vzhD|3}gIXA^M{`Q)UyVfNL(75kRI06R}Q!og)m4>vH|x zaR>{Rw-Bg^zp4LEvxVkQz)j>cEYet-C$&ePz6~->#CDl`Cwkq_Doak@(Ms1t2D*<# zXYS+2oARZgZNo`426Cw*9@yhC9D#BP{2eW^=V@n08qdNWo6_@pQ$R)^MUE)aB-$pB zNKUZufCgGbDqFg)J_Rk+ibCuFs-O3Q%|0Gl^sQ`q8MV*y!3M9$%eiH8*N9E=;0}pk zw}fFGiZaXfAE%|3f4tKxc1=eS$2P%EL_p1;2Hy`P1HjK0yXoj=VE~hom8Ei2Df}~< z0L_w>y?})404!`ZUL$KiVv#CRtM7xl1o*b7?=INzriUBaA#Tp2EnL_pb!DkRiE7Yg z0Ew%CIs}%V_D`WgP>zzo1eXLC7(j9HS1{!<#mg-B(ISG83&l%n@!K;;aX285fLrxo zK2a(hR~loGyWDoZ(25v;Xx!s*e|(sjQvv|kXmG*Jl3-pm^huRa=G|K6?d1(Jl3sxW zl0{nzoy=GI8OuL6#Vc@NA!2C9N|BPuK>kx8ix8E?KYO+^XI$)ROAT9t+*Dbb8|N8h zo+w|#foDn`)L<=etDqfG9}w374E>Bf*S1RwF{73^EZyuxk3QZzLn9pq; zixnT6uC}AGxDc2!S;wn62t~ggS_8N3xmVmUfN&Y_)P$VQ1jfOJ?aVT{Jy9~PWM*c@ zB`7#~YpI~+p$T#-fL+Edmqj)0;@V<^PtNs4NBD##s7Gb9Ad0BN?0T>rW>idX{FKL< z;%mjmB!J1ie*KyrBq-q0zW46cf(Z>W7Iy-?e3%RVoRQ7o;mWaSJPad86;NipqHB|n zL1dcXNL_w>J&jd^t=kSfw+R_Pv5H{ zlhMCP-W8&7afMB*c7SP(qA2jjOIoE^){)z4Gw&>CHhHV0q%7Thp$or&#tHD{4_D70 zyU+4PUQM{xFdajR#_GJ!+KJB`nn|E&fMknBSOWyjMA?UX7HtK1d0W64ngIu>2OX$r zETb6hx?B{so{7?Vr1f3|8y@Nl(En1Vgt`5}aCv(RwJ=~ILQz-~C2G-zZawiG9Xf~} zLUqwpQhIFfrAWL-cT~v&0E<;`Ng-SzP{ENv)|OA>Wv!|hfc+|n$>&64W8)B*GexTQW`lDN&h-<}?2QJxl{#S0d+_j~5L`bY z_#r?Cx_$dBk<-9h2&UlA!osW`ACR~TexXp1YYSmW^Qe6c9;2?KW06rjAua?K%Yj+X zIzUT`0N*|#VE@Fah#7jt5KIPv1Lp{$F;sfyHg5+Q=stV$D|v)9RN?j6W`m!Xtj!p#>GLZP~a z0&b|Y_mT~thDBb4X}HJIc>W{7#I@dYva+EdNojoXh-~mBUwVIk7p|NUdcH6q13`k% zTB+br&B!KG{%%?%mR^C9VyBm9Lu^mrUb-25|3)#mN9&^2md(puEG;ds_P>9yAtmYZ zqXQCc0`yF#pP(`;!czSOtG;*THvl)z2GmQKg8_1LmdV*{&si%|e?hplLSTv!20L4s z=!+BfqTnbU0y!_`R(8@!D64{S*Na01P45bDwgpNfA(q&j7(gg$+Ii_>9T6^2vSw@!%IZTbTz({bc%a9thl0R->6%?i=+R!qQqgr0_g@V&nR{A}A!XO%9 z$XbH+^b+41FOdwKFgkW6J41KU%RPzh%MJcvu@T5kAPuK{QsY(5);NS$G zl`-QDDJhqcBaTVf;t8Q>ZGLSviqxtA=b;X2B}|Vm_Z>jUhZcUNnw@OY!UN;v2d`Da`x-jfiGU@Qx*rMUgn)nr@8Dtius*0P*Be ztASsp1USi>Y?j@uL0rQqC9Y-0yz6^XSP@B44h+DB)N2Uf_LcP7 zvJ=S13gSJK=8@&!2$X}Crf%ghxk!uC&SZ2IJ zhMo+=to&Zg2_9@YohSH zka>Lz0Fzd@qJ+G#&y;{3RG?N8->%@T+e^n}_?7C5&yO8C z#h{r6mnjrL#&fV1);fBD#{=%6pnjgsWcswbt=6O$F3InVrN?l;g-AH_N0N@v^jwXeg4BxkfC42~P?bswOn+rQu1KY3p{6+8rz zdoOkfwvQVFH?x@)jB?n>eV_L4Q_s^m^2(zD!C>FK#v zec%Wi+dzq}TmXwLZn4%l3;;f=>wuvzs;S{g0XM1#1fg9Hfhc~$D6^ee!u8Y4_b<(o z3tw+*UfUiN^WCtas>NTrBiA|vtpomSq-w9}>+Ebr(C-%E=t$P;bmTq=K?3&Kk)fyO zSp?xvH-xLgCmzCLmZUo}W^h^Cu?*Mh0h=G+wQEvsznJ=y@yH;MEdy@ilneM$aSW&u0Z8i wrC}&@(m#2Nwkv?4=$ikZzxVl%vMzZoi#d8AYQ7RgR15|yt8^~o%%xlZ18pjz6951J literal 0 HcmV?d00001 diff --git a/docs/man/image/plot_median_diff1.png b/docs/man/image/plot_median_diff1.png new file mode 100644 index 0000000000000000000000000000000000000000..28915877b0f8f3e3da25d9d80e94393936483668 GIT binary patch literal 13379 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 tT2NGeGuMIc6#45BjW literal 0 HcmV?d00001 diff --git a/docs/man/is_dtype.qmd b/docs/man/is_dtype.qmd index 9aa1bb8..0d981cd 100644 --- a/docs/man/is_dtype.qmd +++ b/docs/man/is_dtype.qmd @@ -57,4 +57,4 @@ print([build.is_float(x) for x in x_list]) #> [False, False, False, True] ``` *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/is_dummy.qmd b/docs/man/is_dummy.qmd index d530d66..7b62891 100644 --- a/docs/man/is_dummy.qmd +++ b/docs/man/is_dummy.qmd @@ -71,4 +71,4 @@ print(py4st.is_dummy(penguins2)) #> Name: 0, dtype: bool ``` *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/miscellaneous.qmd b/docs/man/miscellaneous.qmd index 644877b..83a41a9 100644 --- a/docs/man/miscellaneous.qmd +++ b/docs/man/miscellaneous.qmd @@ -61,4 +61,4 @@ print(build.style_percent(pct, unit = 1000, symbol = '‰').to_list()) ``` *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/oxford_comma.qmd b/docs/man/oxford_comma.qmd index 4ee9e02..cf5ae4e 100644 --- a/docs/man/oxford_comma.qmd +++ b/docs/man/oxford_comma.qmd @@ -48,4 +48,4 @@ print(build.oxford_comma_or('A')) #> 'A' ``` *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/plot_miss_var.qmd b/docs/man/plot_miss_var.qmd index 97eca49..6817943 100644 --- a/docs/man/plot_miss_var.qmd +++ b/docs/man/plot_miss_var.qmd @@ -2,7 +2,7 @@ ## 概要 -R言語の [`naniar::gg_miss_var()`](https://naniar.njtierney.com/reference/gg_miss_var.html) をオマージュした関数で、データフレームの各変数について欠測値の量を横棒グラフとして可視化します。欠損値統計の計算には [`py4stats.diagnose()`](diagnose.md) を使用しています。 +R言語の [`naniar::gg_miss_var()`](https://naniar.njtierney.com/reference/gg_miss_var.html) をオマージュした関数で、データフレームの各変数について欠測値の量を横棒グラフとして可視化します。欠損値統計の計算には [`py4stats.diagnose()`](diagnose.qmd) を使用しています。 ``` python plot_miss_var( @@ -59,4 +59,4 @@ py4st.plot_miss_var(penguins, values = 'missing_count', miss_only = True) ![plot_miss_var2](image/plot_miss_var2.png) *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/point_range.qmd b/docs/man/point_range.qmd index 3fc4812..7325a9a 100644 --- a/docs/man/point_range.qmd +++ b/docs/man/point_range.qmd @@ -77,4 +77,4 @@ print(penguins.groupby('species')[['bill_length_mm']].apply(py4st.median_qi).rou #> Gentoo 0 bill_length_mm 47.30 42.65 53.85 ``` *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/predicate_str.qmd b/docs/man/predicate_str.qmd index 140073b..cdbe2a9 100644 --- a/docs/man/predicate_str.qmd +++ b/docs/man/predicate_str.qmd @@ -117,4 +117,4 @@ print(data.loc[~py4st.is_number(data['摂食者数']), '摂食者数']) ``` *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/relocate.qmd b/docs/man/relocate.qmd index 06b608d..ff7afcc 100644 --- a/docs/man/relocate.qmd +++ b/docs/man/relocate.qmd @@ -107,4 +107,4 @@ print(py4st.relocate(penguins_mini, 'year', place = 'last')) ``` *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/remove_empty_constant.qmd b/docs/man/remove_empty_constant.qmd index a937e84..e0a1643 100644 --- a/docs/man/remove_empty_constant.qmd +++ b/docs/man/remove_empty_constant.qmd @@ -141,4 +141,4 @@ print(py4st.remove_constant(penguins2, dropna = True).head(3)) #> 2 Adelie 3250.0 ``` *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/style_pvalue.qmd b/docs/man/style_pvalue.qmd index 43b0e2b..f1c27db 100644 --- a/docs/man/style_pvalue.qmd +++ b/docs/man/style_pvalue.qmd @@ -69,4 +69,4 @@ print(build.p_stars(p_value, stars = stars_dict).to_list()) #> ['', '', '', '', '.', '.', '.', '*', '**', '***'] ``` *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/tabyl.qmd b/docs/man/tabyl.qmd index 02a160a..6e06d86 100644 --- a/docs/man/tabyl.qmd +++ b/docs/man/tabyl.qmd @@ -80,4 +80,4 @@ print(py4st.tabyl(penguins, 'island', 'species', normalize = 'all')) #> All 152 (44.2%) 68 (19.8%) 124 (36.0%) 344 (100.0%) ``` *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/tidy.qmd b/docs/man/tidy.qmd index 256ff70..6bab95e 100644 --- a/docs/man/tidy.qmd +++ b/docs/man/tidy.qmd @@ -112,8 +112,8 @@ print(py4st.tidy_mfx(fit_logit1).round(4)) list(py4st.tidy.registry.keys()) ``` - `py4stats.tidy()` は `functools.singledispatch` を用いたジェネリック関数として実装しています。 [`Py4Etrics`](https://github.com/Py4Etrics/py4etrics) モジュールの `py4etrics.heckit.Heckit()` で作成された `HeckitResults` クラスのオブジェクト用のメソッドについては [`heckit_helper.tidy_heckit()`](./tidy_heckit.md) を参照してください。 + `py4stats.tidy()` は `functools.singledispatch` を用いたジェネリック関数として実装しています。 [`Py4Etrics`](https://github.com/Py4Etrics/py4etrics) モジュールの `py4etrics.heckit.Heckit()` で作成された `HeckitResults` クラスのオブジェクト用のメソッドについては [`heckit_helper.tidy_heckit()`](./tidy_heckit.qmd) を参照してください。 *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/tidy_heckit.qmd b/docs/man/tidy_heckit.qmd index 4eb026e..67e0793 100644 --- a/docs/man/tidy_heckit.qmd +++ b/docs/man/tidy_heckit.qmd @@ -2,7 +2,7 @@ ## 概要 - R言語の [`broom::tidy()`](https://broom.tidymodels.org/reference/tidy.lm.html) をオマージュした [`regression_tools.tidy()`](./tidy.md) 関数の、`py4etrics.heckit.HeckitResults` クラス専用のメソッドです。[`regression_tools.tidy()`](./tidy.md)はジェネリック関数として実装されているため、`py4st.tidy(x)` としてご利用いただけます。 + R言語の [`broom::tidy()`](https://broom.tidymodels.org/reference/tidy.lm.html) をオマージュした [`regression_tools.tidy()`](./tidy.qmd) 関数の、`py4etrics.heckit.HeckitResults` クラス専用のメソッドです。[`regression_tools.tidy()`](./tidy.qmd)はジェネリック関数として実装されているため、`py4st.tidy(x)` としてご利用いただけます。 ```python tidy_heckit( @@ -111,4 +111,4 @@ print(py4st.tidy(res_heckit, name_selection = exog_select.columns).round(4)) #> S: kidsge6 0.0360 0.0435 0.8281 0.4076 -0.0492 0.1212 ``` *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/tidy_test.qmd b/docs/man/tidy_test.qmd index d54e5d9..017d72c 100644 --- a/docs/man/tidy_test.qmd +++ b/docs/man/tidy_test.qmd @@ -2,7 +2,7 @@ ## 概要 - R言語の [`broom::tidy()`](https://broom.tidymodels.org/reference/tidy.lm.html) をオマージュした [`py4stats.tidy()`](./tidy.md) 関数のうち、`statsmodels` ライブラリのメソッド [`RegressionResults.t_test()`](https://www.statsmodels.org/dev/generated/statsmodels.regression.linear_model.RegressionResults.t_test.html#statsmodels.regression.linear_model.RegressionResults.t_test) もしくは [`RegressionResults.f_test()`](https://www.statsmodels.org/dev/generated/statsmodels.regression.linear_model.RegressionResults.f_test.html#statsmodels.regression.linear_model.RegressionResults.f_test) で作成された `statsmodels.stats.contrast.ContrastResults` クラスのオブジェクト専用のメソッドです。[`py4stats.tidy()`](./tidy.md)はジェネリック関数として実装されているため、`py4st.tidy(x)` としてご利用いただけます。 + R言語の [`broom::tidy()`](https://broom.tidymodels.org/reference/tidy.lm.html) をオマージュした [`py4stats.tidy()`](./tidy.qmd) 関数のうち、`statsmodels` ライブラリのメソッド [`RegressionResults.t_test()`](https://www.statsmodels.org/dev/generated/statsmodels.regression.linear_model.RegressionResults.t_test.html#statsmodels.regression.linear_model.RegressionResults.t_test) もしくは [`RegressionResults.f_test()`](https://www.statsmodels.org/dev/generated/statsmodels.regression.linear_model.RegressionResults.f_test.html#statsmodels.regression.linear_model.RegressionResults.f_test) で作成された `statsmodels.stats.contrast.ContrastResults` クラスのオブジェクト専用のメソッドです。[`py4stats.tidy()`](./tidy.qmd)はジェネリック関数として実装されているため、`py4st.tidy(x)` としてご利用いただけます。 ```python tidy_test(x, conf_level = 0.95, **kwargs) @@ -75,4 +75,4 @@ print(py4st.tidy(fit3.f_test(hypotheses)).round(4)) ``` *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/man/varidate.qmd b/docs/man/varidate.qmd index ea6f220..349f3e0 100644 --- a/docs/man/varidate.qmd +++ b/docs/man/varidate.qmd @@ -159,4 +159,4 @@ print(retailers.loc[df_viorate['to'], 'size':'turnover']) - Loo, Mark van der, and Edwin de Jonge. (2022). 『統計的データクリーニングの理論と実践: Rによるデータ編集/欠測補完システム』. 共立出版. 地道 正行, 髙橋 雅夫, 藤野 友和, 安川 武彦〔訳〕 *** -[Return to **Function reference**.](../reference.md) +[Return to **Function reference**.](../reference.qmd) diff --git a/docs/reference.qmd b/docs/reference.qmd new file mode 100644 index 0000000..c250e17 --- /dev/null +++ b/docs/reference.qmd @@ -0,0 +1,158 @@ +# Function reference + +## Main Module + +### `py4stats.eda_tools` + +`py4stats.eda_tools` モジュールは、探索的データ解析と前処理に関する機能を提供します。複数の DataFrame バックエンドに対して共通の API を提供することを目的として、[`narwhals`](https://narwhals-dev.github.io/narwhals/) ライブラリを用いて実装されています。詳細は [Technical Notes](articles/narwhals_in_py4stats.qmd) を参照してください。 + +#### データフレームの概要 +[`py4stats.diagnose()`](man/diagnose.qmd) + +#### クロス集計 + +[`py4stats.tabyl()`](man/tabyl.qmd) + +[`py4stats.freq_table()`](man/freq_table.qmd) + +[`py4stats.Pareto_plot()`](man/Pareto_plot.qmd) + +[`py4stats.plot_category()`](man/plot_category.qmd) + +### 数値変数の点推定と区間推定 + +[`py4stats.mean_qi()`](man/point_range.qmd) +[`py4stats.median_qi()`](man/point_range.qmd) +[`py4stats.mean_ci()`](man/point_range.qmd) + +#### データフレームの列や行の削除 + +[`py4stats.remove_empty()`](man/remove_empty_constant.qmd) +[`py4stats.remove_constant()`](man/remove_empty_constant.qmd) + +[`py4stats.filtering_out()`](man/filtering_out.qmd) + +#### データフレームの列の並べ替え + +[`py4stats.relocate()`](man/relocate.qmd) + + +#### 複数のデータフレームの比較 + +[`py4stats.compare_df_cols()`](man/compare_df_cols.qmd) +[`py4stats.compare_df_stats()`](man/compare_df_cols.qmd) + +#### 簡易なグループ別統計量の比較 + +[`py4stats.compare_group_means()`](man/compare_group_stats.qmd) +[`py4stats.compare_group_median()`](man/compare_group_stats.qmd) + +[`py4stats.plot_mean_diff()`](man/compare_group_stats.qmd) +[`py4stats.plot_median_diff()`](man/compare_group_stats.qmd) + +#### 簡易な欠測値の可視化 + +[`py4stats.plot_miss_var()`](man/plot_miss_var.qmd) + +#### 数値変数の集計と標準化 + +[`py4stats.weighted_mean()`](man/scale_wmean.qmd) +[`py4stats.scale()`](man/scale_wmean.qmd) +[`py4stats.min_max()`](man/scale_wmean.qmd) + +#### 論理関数 + +[`py4stats.is_number()`](man/predicate_str.qmd) +[`py4stats.is_ymd()`](man/predicate_str.qmd) +[`py4stats.is_ymd_like()`](man/predicate_str.qmd) + +[`py4stats.is_dummy()`](man/is_dummy.qmd) + +#### 簡易なルールベースのデータ検証ツール + +[`py4stats.check_that()`](man/varidate.qmd) [`py4stats.check_viorate()`](man/varidate.qmd) + + +*** +### `py4stats.regression_tools` + +`py4stats.regression_tools` は [`statsmodels`](https://www.statsmodels.org/stable/index.html) ライブラリで作成された回帰分析の結果についての可視化と表作成を補助する機能を提供するモジュールです。 + +#### 線形モデルの比較 + +[`py4stats.compare_ols()`](man/compare_ols.qmd) + +[`py4stats.compare_mfx()`](man/compare_mfx.qmd) + +#### 線形モデルの可視化 + +[`py4stats.coefplot()`](man/coefplot.qmd) [`py4stats.mfxplot()`](man/coefplot.qmd) + +#### 線形モデルを作表するためのバックエンド関数 + +[`py4stats.tidy()`](man/tidy.qmd)[`py4stats.tidy_mfx()`](man/tidy.qmd) + +[`py4stats.tidy_test()`](man/tidy_test.qmd) + +[`py4stats.glance()`](man/glance.qmd) + +#### Blinder-Oaxaca分解 + +[`py4stats.Blinder_Oaxaca()`](man/Blinder_Oaxaca.qmd) +[`py4stats.plot_Blinder_Oaxaca()`](man/Blinder_Oaxaca.qmd) + +## Sub Module + +### `py4stats.heckit_helper` + +`py4stats.regression_tools` の関数を [`py4etrics.heckit`](https://github.com/Py4Etrics/py4etrics) ライブラリで実装された Heckit モデルに対応させるためのメソッドを提供します。 + +[`heckit_helper.Heckit_from_formula()`](man/Heckit_from_formula.qmd) + +[`heckit_helper.tidy_heckit()`](man/tidy_heckit.qmd) + +[`heckit_helper.heckitmfx_compute()`](man/heckitmfx_compute.qmd) + +*** +### `py4stats.building_block` + +`py4stats` ライブラリの実装に使用するアサーション関数やユーティリティ関数を提供します。 +`building_block` モジュール自体は外部から呼び出すことなく内部実装に使用することを想定しています。 + +### 引数のアサーション関数 + +[`building_block.arg_match()`](man/arg_match.qmd) + +[`building_block.assert_character()`](man/assert_dtype.qmd) +[`building_block.assert_logical()`](man/assert_dtype.qmd) +[`building_block.assert_numeric()`](man/assert_dtype.qmd) +[`building_block.assert_integer()`](man/assert_dtype.qmd) +[`building_block.assert_count()`](man/assert_dtype.qmd) +[`building_block.assert_float()`](man/assert_dtype.qmd) + +### データ型を判定する論理関数 + +[`building_block.is_character()`](man/is_dtype.qmd) +[`building_block.is_logical()`](man/is_dtype.qmd) +[`building_block.is_numeric()`](man/is_dtype.qmd) +[`building_block.is_integer()`](man/is_dtype.qmd) +[`building_block.is_float()`](man/is_dtype.qmd) + +### 数字のフォーマット + +[`building_block.style_number()`](man/miscellaneous.qmd) +[`building_block.style_currency()`](man/miscellaneous.qmd) +[`building_block.style_percent()`](man/miscellaneous.qmd) + +[`building_block.style_pvalue()`](man/style_pvalue.qmd) +[`building_block.p_stars()`](man/style_pvalue.qmd) + +### 並列文の作成 + +[`building_block.oxford_comma()`](man/oxford_comma.qmd) +[`building_block.oxford_comma_and()`](man/oxford_comma.qmd) +[`building_block.oxford_comma_or()`](man/oxford_comma.qmd) + +*** +[Jump to **Get started**.](./introduction.qmd) +[Jump to **Readme**.](./index.qmd) diff --git a/docs/theme.scss b/docs/theme.scss new file mode 100644 index 0000000..30df0d3 --- /dev/null +++ b/docs/theme.scss @@ -0,0 +1,31 @@ +/*-- scss:defaults --*/ +$primary: #39729E !default; +$link-color: #39729E !default; + +/*-- scss:rules --*/ + +.sidebar-title { + color: #39729E; +} + +div.sidebar-item-container .active { + font-weight: bold; +} + +.sidebar nav[role=doc-toc] ul>li>a.active, .sidebar nav[role=doc-toc] ul>li>ul>li>a.active{ + font-weight: bold; +} + +/* Code ------------------------------------------------ */ + +code { + color: #373a3c; +} + +code a:any-link { + text-decoration: underline; + text-decoration-color: #ccc; +} + + + diff --git a/reference.md b/reference.md deleted file mode 100644 index 856266b..0000000 --- a/reference.md +++ /dev/null @@ -1,158 +0,0 @@ -# Function reference - -## Main Module - -### `py4stats.eda_tools` - -`py4stats.eda_tools` モジュールは、探索的データ解析と前処理に関する機能を提供します。複数の DataFrame バックエンドに対して共通の API を提供することを目的として、[`narwhals`](https://narwhals-dev.github.io/narwhals/) ライブラリを用いて実装されています。詳細は [Technical Notes](articles/narwhals_in_py4stats.md) を参照してください。 - -#### データフレームの概要 -[`py4stats.diagnose()`](man/diagnose.md) - -#### クロス集計 - -[`py4stats.tabyl()`](man/tabyl.md) - -[`py4stats.freq_table()`](man/freq_table.md) - -[`py4stats.Pareto_plot()`](man/Pareto_plot.md) - -[`py4stats.plot_category()`](man/plot_category.md) - -### 数値変数の点推定と区間推定 - -[`py4stats.mean_qi()`](man/point_range.md) -[`py4stats.median_qi()`](man/point_range.md) -[`py4stats.mean_ci()`](man/point_range.md) - -#### データフレームの列や行の削除 - -[`py4stats.remove_empty()`](man/remove_empty_constant.md) -[`py4stats.remove_constant()`](man/remove_empty_constant.md) - -[`py4stats.filtering_out()`](man/filtering_out.md) - -#### データフレームの列の並べ替え - -[`py4stats.relocate()`](man/relocate.md) - - -#### 複数のデータフレームの比較 - -[`py4stats.compare_df_cols()`](man/compare_df_cols.md) -[`py4stats.compare_df_stats()`](man/compare_df_cols.md) - -#### 簡易なグループ別統計量の比較 - -[`py4stats.compare_group_means()`](man/compare_group_stats.md) -[`py4stats.compare_group_median()`](man/compare_group_stats.md) - -[`py4stats.plot_mean_diff()`](man/compare_group_stats.md) -[`py4stats.plot_median_diff()`](man/compare_group_stats.md) - -#### 簡易な欠測値の可視化 - -[`py4stats.plot_miss_var()`](man/plot_miss_var.md) - -#### 数値変数の集計と標準化 - -[`py4stats.weighted_mean()`](man/scale_wmean.md) -[`py4stats.scale()`](man/scale_wmean.md) -[`py4stats.min_max()`](man/scale_wmean.md) - -#### 論理関数 - -[`py4stats.is_number()`](man/predicate_str.md) -[`py4stats.is_ymd()`](man/predicate_str.md) -[`py4stats.is_ymd_like()`](man/predicate_str.md) - -[`py4stats.is_dummy()`](man/is_dummy.md) - -#### 簡易なルールベースのデータ検証ツール - -[`py4stats.check_that()`](man/varidate.md) [`py4stats.check_viorate()`](man/varidate.md) - - -*** -### `py4stats.regression_tools` - -`py4stats.regression_tools` は [`statsmodels`](https://www.statsmodels.org/stable/index.html) ライブラリで作成された回帰分析の結果についての可視化と表作成を補助する機能を提供するモジュールです。 - -#### 線形モデルの比較 - -[`py4stats.compare_ols()`](man/compare_ols.md) - -[`py4stats.compare_mfx()`](man/compare_mfx.md) - -#### 線形モデルの可視化 - -[`py4stats.coefplot()`](man/coefplot.md) [`py4stats.mfxplot()`](man/coefplot.md) - -#### 線形モデルを作表するためのバックエンド関数 - -[`py4stats.tidy()`](man/tidy.md)[`py4stats.tidy_mfx()`](man/tidy.md) - -[`py4stats.tidy_test()`](man/tidy_test.md) - -[`py4stats.glance()`](man/glance.md) - -#### Blinder-Oaxaca分解 - -[`py4stats.Blinder_Oaxaca()`](man/Blinder_Oaxaca.md) -[`py4stats.plot_Blinder_Oaxaca()`](man/Blinder_Oaxaca.md) - -## Sub Module - -### `py4stats.heckit_helper` - -`py4stats.regression_tools` の関数を [`py4etrics.heckit`](https://github.com/Py4Etrics/py4etrics) ライブラリで実装された Heckit モデルに対応させるためのメソッドを提供します。 - -[`heckit_helper.Heckit_from_formula()`](man/Heckit_from_formula.md) - -[`heckit_helper.tidy_heckit()`](man/tidy_heckit.md) - -[`heckit_helper.heckitmfx_compute()`](man/heckitmfx_compute.md) - -*** -### `py4stats.building_block` - -`py4stats` ライブラリの実装に使用するアサーション関数やユーティリティ関数を提供します。 -`building_block` モジュール自体は外部から呼び出すことなく内部実装に使用することを想定しています。 - -### 引数のアサーション関数 - -[`building_block.arg_match()`](man/arg_match.md) - -[`building_block.assert_character()`](man/assert_dtype.md) -[`building_block.assert_logical()`](man/assert_dtype.md) -[`building_block.assert_numeric()`](man/assert_dtype.md) -[`building_block.assert_integer()`](man/assert_dtype.md) -[`building_block.assert_count()`](man/assert_dtype.md) -[`building_block.assert_float()`](man/assert_dtype.md) - -### データ型を判定する論理関数 - -[`building_block.is_character()`](man/is_dtype.md) -[`building_block.is_logical()`](man/is_dtype.md) -[`building_block.is_numeric()`](man/is_dtype.md) -[`building_block.is_integer()`](man/is_dtype.md) -[`building_block.is_float()`](man/is_dtype.md) - -### 数字のフォーマット - -[`building_block.style_number()`](man/miscellaneous.md) -[`building_block.style_currency()`](man/miscellaneous.md) -[`building_block.style_percent()`](man/miscellaneous.md) - -[`building_block.style_pvalue()`](man/style_pvalue.md) -[`building_block.p_stars()`](man/style_pvalue.md) - -### 並列文の作成 - -[`building_block.oxford_comma()`](man/oxford_comma.md) -[`building_block.oxford_comma_and()`](man/oxford_comma.md) -[`building_block.oxford_comma_or()`](man/oxford_comma.md) - -*** -[Jump to **Function Get started**.](..//INTRODUCTION.md) -[Jump to **Function reference**.](../reference.md) From a8cc6e327fd33e7782f75ce2df4e42d924a4f74d Mon Sep 17 00:00:00 2001 From: Hirototensho Date: Fri, 23 Jan 2026 22:40:08 +0900 Subject: [PATCH 03/19] =?UTF-8?q?README.md=20=E3=81=AE=E3=83=AA=E3=83=B3?= =?UTF-8?q?=E3=82=AF=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c2e22a3..b059c64 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # `Py4Stats` - `Py4Stats` は、主に実証研究で用いられる、探索的データ分析および回帰結果レポート用のユーティリティライブラリで、回帰分析を中心とする分析でよく使われるR言語の機能を、Python で実装しています。本ライブラリの主な機能は [**Get started**](./docs/introduction.html) を、実装されている関数の一覧は [**Function reference**](./docs/reference.html) を参照してください。 + `Py4Stats` は、主に実証研究で用いられる、探索的データ分析および回帰結果レポート用のユーティリティライブラリで、回帰分析を中心とする分析でよく使われるR言語の機能を、Python で実装しています。本ライブラリの主な機能は [**Get started**](./docs/docsintroduction.html) を、実装されている関数の一覧は [**Function reference**](./docs/docsreference.html) を参照してください。 ## Installation @@ -78,6 +78,6 @@ compare_tab1 詳細は、[`py4stats.compare_ols()`](docs/docs/man/compare_ols.html) を参照してください。  *** -[Jump to **Get started**.](./docs/introduction.html) -[Jump to **Function reference**.](./docs/reference.html) +[Jump to **Get started**.](./docs/docsintroduction.html) +[Jump to **Function reference**.](./docs/docsreference.html) From dbe332a790e7b9717cd62a6d826d9b84574d960c Mon Sep 17 00:00:00 2001 From: Hirototensho Date: Fri, 23 Jan 2026 22:41:51 +0900 Subject: [PATCH 04/19] =?UTF-8?q?README.md=20=E3=81=AE=E3=83=AA=E3=83=B3?= =?UTF-8?q?=E3=82=AF=E3=82=92=E5=86=8D=E5=BA=A6=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index b059c64..2dadced 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # `Py4Stats` - `Py4Stats` は、主に実証研究で用いられる、探索的データ分析および回帰結果レポート用のユーティリティライブラリで、回帰分析を中心とする分析でよく使われるR言語の機能を、Python で実装しています。本ライブラリの主な機能は [**Get started**](./docs/docsintroduction.html) を、実装されている関数の一覧は [**Function reference**](./docs/docsreference.html) を参照してください。 + `Py4Stats` は、主に実証研究で用いられる、探索的データ分析および回帰結果レポート用のユーティリティライブラリで、回帰分析を中心とする分析でよく使われるR言語の機能を、Python で実装しています。本ライブラリの主な機能は [**Get started**](./docs/docs/introduction.html) を、実装されている関数の一覧は [**Function reference**](./docs/docs/reference.html) を参照してください。 ## Installation @@ -78,6 +78,6 @@ compare_tab1 詳細は、[`py4stats.compare_ols()`](docs/docs/man/compare_ols.html) を参照してください。  *** -[Jump to **Get started**.](./docs/docsintroduction.html) -[Jump to **Function reference**.](./docs/docsreference.html) +[Jump to **Get started**.](./docs/docs/introduction.html) +[Jump to **Function reference**.](./docs/docs/reference.html) From 410703288be587e1693ab35b38b105bc9dbd99db Mon Sep 17 00:00:00 2001 From: Hirototensho Date: Fri, 23 Jan 2026 23:09:15 +0900 Subject: [PATCH 05/19] =?UTF-8?q?README.md=20=E3=81=AE=E3=83=AA=E3=83=B3?= =?UTF-8?q?=E3=82=AF=E3=82=92=E5=86=8D=E5=BA=A6=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eda_tools_development_status.qmd | 0 ...26\213\347\231\272\347\212\266\346\263\201.xlsx" | Bin ...201\213\347\224\250\346\226\271\351\207\235.png" | Bin .../articles => articles}/narwhals_in_py4stats.qmd | 0 ...201\246\343\201\256\350\200\203\345\257\237.qmd" | 0 .../articles => articles}/scaling_up_regression.qmd | 0 ...226\213\347\231\272\350\250\230\351\214\262.qmd" | 0 7 files changed, 0 insertions(+), 0 deletions(-) rename {docs/articles => articles}/eda_tools_development_status.qmd (100%) rename "docs/articles/eda_tools\351\226\213\347\231\272\347\212\266\346\263\201.xlsx" => "articles/eda_tools\351\226\213\347\231\272\347\212\266\346\263\201.xlsx" (100%) rename "docs/articles/image/Py4Stats\343\203\252\343\203\235\343\202\270\343\203\210\343\203\252\343\201\256\351\201\213\347\224\250\346\226\271\351\207\235.png" => "articles/image/image/Py4Stats\343\203\252\343\203\235\343\202\270\343\203\210\343\203\252\343\201\256\351\201\213\347\224\250\346\226\271\351\207\235.png" (100%) rename {docs/articles => articles}/narwhals_in_py4stats.qmd (100%) rename "docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.qmd" => "articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.qmd" (100%) rename {docs/articles => articles}/scaling_up_regression.qmd (100%) rename "docs/articles/\351\226\213\347\231\272\350\250\230\351\214\262.qmd" => "articles/\351\226\213\347\231\272\350\250\230\351\214\262.qmd" (100%) diff --git a/docs/articles/eda_tools_development_status.qmd b/articles/eda_tools_development_status.qmd similarity index 100% rename from docs/articles/eda_tools_development_status.qmd rename to articles/eda_tools_development_status.qmd diff --git "a/docs/articles/eda_tools\351\226\213\347\231\272\347\212\266\346\263\201.xlsx" "b/articles/eda_tools\351\226\213\347\231\272\347\212\266\346\263\201.xlsx" similarity index 100% rename from "docs/articles/eda_tools\351\226\213\347\231\272\347\212\266\346\263\201.xlsx" rename to "articles/eda_tools\351\226\213\347\231\272\347\212\266\346\263\201.xlsx" diff --git "a/docs/articles/image/Py4Stats\343\203\252\343\203\235\343\202\270\343\203\210\343\203\252\343\201\256\351\201\213\347\224\250\346\226\271\351\207\235.png" "b/articles/image/image/Py4Stats\343\203\252\343\203\235\343\202\270\343\203\210\343\203\252\343\201\256\351\201\213\347\224\250\346\226\271\351\207\235.png" similarity index 100% rename from "docs/articles/image/Py4Stats\343\203\252\343\203\235\343\202\270\343\203\210\343\203\252\343\201\256\351\201\213\347\224\250\346\226\271\351\207\235.png" rename to "articles/image/image/Py4Stats\343\203\252\343\203\235\343\202\270\343\203\210\343\203\252\343\201\256\351\201\213\347\224\250\346\226\271\351\207\235.png" diff --git a/docs/articles/narwhals_in_py4stats.qmd b/articles/narwhals_in_py4stats.qmd similarity index 100% rename from docs/articles/narwhals_in_py4stats.qmd rename to articles/narwhals_in_py4stats.qmd diff --git "a/docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.qmd" "b/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.qmd" similarity index 100% rename from "docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.qmd" rename to "articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.qmd" diff --git a/docs/articles/scaling_up_regression.qmd b/articles/scaling_up_regression.qmd similarity index 100% rename from docs/articles/scaling_up_regression.qmd rename to articles/scaling_up_regression.qmd diff --git "a/docs/articles/\351\226\213\347\231\272\350\250\230\351\214\262.qmd" "b/articles/\351\226\213\347\231\272\350\250\230\351\214\262.qmd" similarity index 100% rename from "docs/articles/\351\226\213\347\231\272\350\250\230\351\214\262.qmd" rename to "articles/\351\226\213\347\231\272\350\250\230\351\214\262.qmd" From f4cc07cc0b8fe383477c7c746c337652c228f3ee Mon Sep 17 00:00:00 2001 From: Hirototensho Date: Fri, 23 Jan 2026 23:10:50 +0900 Subject: [PATCH 06/19] =?UTF-8?q?README.md=20=E3=81=AE=E3=83=AA=E3=83=B3?= =?UTF-8?q?=E3=82=AF=E3=82=92=E5=86=8D=E5=BA=A6=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...201\213\347\224\250\346\226\271\351\207\235.png" | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename "articles/image/image/Py4Stats\343\203\252\343\203\235\343\202\270\343\203\210\343\203\252\343\201\256\351\201\213\347\224\250\346\226\271\351\207\235.png" => "articles/image/Py4Stats\343\203\252\343\203\235\343\202\270\343\203\210\343\203\252\343\201\256\351\201\213\347\224\250\346\226\271\351\207\235.png" (100%) diff --git "a/articles/image/image/Py4Stats\343\203\252\343\203\235\343\202\270\343\203\210\343\203\252\343\201\256\351\201\213\347\224\250\346\226\271\351\207\235.png" "b/articles/image/Py4Stats\343\203\252\343\203\235\343\202\270\343\203\210\343\203\252\343\201\256\351\201\213\347\224\250\346\226\271\351\207\235.png" similarity index 100% rename from "articles/image/image/Py4Stats\343\203\252\343\203\235\343\202\270\343\203\210\343\203\252\343\201\256\351\201\213\347\224\250\346\226\271\351\207\235.png" rename to "articles/image/Py4Stats\343\203\252\343\203\235\343\202\270\343\203\210\343\203\252\343\201\256\351\201\213\347\224\250\346\226\271\351\207\235.png" From 2b9a66b9b9d8583b37b86872c3f7bcbb9b8e9002 Mon Sep 17 00:00:00 2001 From: Hirototensho Date: Fri, 23 Jan 2026 23:11:41 +0900 Subject: [PATCH 07/19] =?UTF-8?q?README.md=20=E3=81=AE=E3=83=AA=E3=83=B3?= =?UTF-8?q?=E3=82=AF=E3=82=92=E5=86=8D=E5=BA=A6=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- {docs/man => man}/Blinder_Oaxaca.qmd | 0 {docs/man => man}/Heckit_from_formula.qmd | 0 {docs/man => man}/Pareto_plot.qmd | 0 {docs/man => man}/arg_match.qmd | 0 {docs/man => man}/assert_dtype.qmd | 0 {docs/man => man}/coefplot.qmd | 0 {docs/man => man}/compare_df_cols.qmd | 0 {docs/man => man}/compare_group_stats.qmd | 0 {docs/man => man}/compare_mfx.qmd | 0 {docs/man => man}/compare_ols.qmd | 0 {docs/man => man}/diagnose.qmd | 0 {docs/man => man}/diagnose_category.qmd | 0 {docs/man => man}/filtering_out.qmd | 0 {docs/man => man}/freq_table.qmd | 0 {docs/man => man}/glance.qmd | 0 {docs/man => man}/heckitmfx_compute.qmd | 0 {docs/man => man}/is_dtype.qmd | 0 {docs/man => man}/is_dummy.qmd | 0 {docs/man => man}/miscellaneous.qmd | 0 {docs/man => man}/oxford_comma.qmd | 0 {docs/man => man}/plot_category.qmd | 0 {docs/man => man}/plot_miss_var.qmd | 0 {docs/man => man}/point_range.qmd | 0 {docs/man => man}/predicate_str.qmd | 0 {docs/man => man}/relocate.qmd | 0 {docs/man => man}/remove_empty_constant.qmd | 0 {docs/man => man}/scale_wmean.qmd | 0 {docs/man => man}/set_miss.qmd | 0 {docs/man => man}/style_pvalue.qmd | 0 {docs/man => man}/tabyl.qmd | 0 {docs/man => man}/tidy.qmd | 0 {docs/man => man}/tidy_heckit.qmd | 0 {docs/man => man}/tidy_test.qmd | 0 {docs/man => man}/varidate.qmd | 0 34 files changed, 0 insertions(+), 0 deletions(-) rename {docs/man => man}/Blinder_Oaxaca.qmd (100%) rename {docs/man => man}/Heckit_from_formula.qmd (100%) rename {docs/man => man}/Pareto_plot.qmd (100%) rename {docs/man => man}/arg_match.qmd (100%) rename {docs/man => man}/assert_dtype.qmd (100%) rename {docs/man => man}/coefplot.qmd (100%) rename {docs/man => man}/compare_df_cols.qmd (100%) rename {docs/man => man}/compare_group_stats.qmd (100%) rename {docs/man => man}/compare_mfx.qmd (100%) rename {docs/man => man}/compare_ols.qmd (100%) rename {docs/man => man}/diagnose.qmd (100%) rename {docs/man => man}/diagnose_category.qmd (100%) rename {docs/man => man}/filtering_out.qmd (100%) rename {docs/man => man}/freq_table.qmd (100%) rename {docs/man => man}/glance.qmd (100%) rename {docs/man => man}/heckitmfx_compute.qmd (100%) rename {docs/man => man}/is_dtype.qmd (100%) rename {docs/man => man}/is_dummy.qmd (100%) rename {docs/man => man}/miscellaneous.qmd (100%) rename {docs/man => man}/oxford_comma.qmd (100%) rename {docs/man => man}/plot_category.qmd (100%) rename {docs/man => man}/plot_miss_var.qmd (100%) rename {docs/man => man}/point_range.qmd (100%) rename {docs/man => man}/predicate_str.qmd (100%) rename {docs/man => man}/relocate.qmd (100%) rename {docs/man => man}/remove_empty_constant.qmd (100%) rename {docs/man => man}/scale_wmean.qmd (100%) rename {docs/man => man}/set_miss.qmd (100%) rename {docs/man => man}/style_pvalue.qmd (100%) rename {docs/man => man}/tabyl.qmd (100%) rename {docs/man => man}/tidy.qmd (100%) rename {docs/man => man}/tidy_heckit.qmd (100%) rename {docs/man => man}/tidy_test.qmd (100%) rename {docs/man => man}/varidate.qmd (100%) diff --git a/docs/man/Blinder_Oaxaca.qmd b/man/Blinder_Oaxaca.qmd similarity index 100% rename from docs/man/Blinder_Oaxaca.qmd rename to man/Blinder_Oaxaca.qmd diff --git a/docs/man/Heckit_from_formula.qmd b/man/Heckit_from_formula.qmd similarity index 100% rename from docs/man/Heckit_from_formula.qmd rename to man/Heckit_from_formula.qmd diff --git a/docs/man/Pareto_plot.qmd b/man/Pareto_plot.qmd similarity index 100% rename from docs/man/Pareto_plot.qmd rename to man/Pareto_plot.qmd diff --git a/docs/man/arg_match.qmd b/man/arg_match.qmd similarity index 100% rename from docs/man/arg_match.qmd rename to man/arg_match.qmd diff --git a/docs/man/assert_dtype.qmd b/man/assert_dtype.qmd similarity index 100% rename from docs/man/assert_dtype.qmd rename to man/assert_dtype.qmd diff --git a/docs/man/coefplot.qmd b/man/coefplot.qmd similarity index 100% rename from docs/man/coefplot.qmd rename to man/coefplot.qmd diff --git a/docs/man/compare_df_cols.qmd b/man/compare_df_cols.qmd similarity index 100% rename from docs/man/compare_df_cols.qmd rename to man/compare_df_cols.qmd diff --git a/docs/man/compare_group_stats.qmd b/man/compare_group_stats.qmd similarity index 100% rename from docs/man/compare_group_stats.qmd rename to man/compare_group_stats.qmd diff --git a/docs/man/compare_mfx.qmd b/man/compare_mfx.qmd similarity index 100% rename from docs/man/compare_mfx.qmd rename to man/compare_mfx.qmd diff --git a/docs/man/compare_ols.qmd b/man/compare_ols.qmd similarity index 100% rename from docs/man/compare_ols.qmd rename to man/compare_ols.qmd diff --git a/docs/man/diagnose.qmd b/man/diagnose.qmd similarity index 100% rename from docs/man/diagnose.qmd rename to man/diagnose.qmd diff --git a/docs/man/diagnose_category.qmd b/man/diagnose_category.qmd similarity index 100% rename from docs/man/diagnose_category.qmd rename to man/diagnose_category.qmd diff --git a/docs/man/filtering_out.qmd b/man/filtering_out.qmd similarity index 100% rename from docs/man/filtering_out.qmd rename to man/filtering_out.qmd diff --git a/docs/man/freq_table.qmd b/man/freq_table.qmd similarity index 100% rename from docs/man/freq_table.qmd rename to man/freq_table.qmd diff --git a/docs/man/glance.qmd b/man/glance.qmd similarity index 100% rename from docs/man/glance.qmd rename to man/glance.qmd diff --git a/docs/man/heckitmfx_compute.qmd b/man/heckitmfx_compute.qmd similarity index 100% rename from docs/man/heckitmfx_compute.qmd rename to man/heckitmfx_compute.qmd diff --git a/docs/man/is_dtype.qmd b/man/is_dtype.qmd similarity index 100% rename from docs/man/is_dtype.qmd rename to man/is_dtype.qmd diff --git a/docs/man/is_dummy.qmd b/man/is_dummy.qmd similarity index 100% rename from docs/man/is_dummy.qmd rename to man/is_dummy.qmd diff --git a/docs/man/miscellaneous.qmd b/man/miscellaneous.qmd similarity index 100% rename from docs/man/miscellaneous.qmd rename to man/miscellaneous.qmd diff --git a/docs/man/oxford_comma.qmd b/man/oxford_comma.qmd similarity index 100% rename from docs/man/oxford_comma.qmd rename to man/oxford_comma.qmd diff --git a/docs/man/plot_category.qmd b/man/plot_category.qmd similarity index 100% rename from docs/man/plot_category.qmd rename to man/plot_category.qmd diff --git a/docs/man/plot_miss_var.qmd b/man/plot_miss_var.qmd similarity index 100% rename from docs/man/plot_miss_var.qmd rename to man/plot_miss_var.qmd diff --git a/docs/man/point_range.qmd b/man/point_range.qmd similarity index 100% rename from docs/man/point_range.qmd rename to man/point_range.qmd diff --git a/docs/man/predicate_str.qmd b/man/predicate_str.qmd similarity index 100% rename from docs/man/predicate_str.qmd rename to man/predicate_str.qmd diff --git a/docs/man/relocate.qmd b/man/relocate.qmd similarity index 100% rename from docs/man/relocate.qmd rename to man/relocate.qmd diff --git a/docs/man/remove_empty_constant.qmd b/man/remove_empty_constant.qmd similarity index 100% rename from docs/man/remove_empty_constant.qmd rename to man/remove_empty_constant.qmd diff --git a/docs/man/scale_wmean.qmd b/man/scale_wmean.qmd similarity index 100% rename from docs/man/scale_wmean.qmd rename to man/scale_wmean.qmd diff --git a/docs/man/set_miss.qmd b/man/set_miss.qmd similarity index 100% rename from docs/man/set_miss.qmd rename to man/set_miss.qmd diff --git a/docs/man/style_pvalue.qmd b/man/style_pvalue.qmd similarity index 100% rename from docs/man/style_pvalue.qmd rename to man/style_pvalue.qmd diff --git a/docs/man/tabyl.qmd b/man/tabyl.qmd similarity index 100% rename from docs/man/tabyl.qmd rename to man/tabyl.qmd diff --git a/docs/man/tidy.qmd b/man/tidy.qmd similarity index 100% rename from docs/man/tidy.qmd rename to man/tidy.qmd diff --git a/docs/man/tidy_heckit.qmd b/man/tidy_heckit.qmd similarity index 100% rename from docs/man/tidy_heckit.qmd rename to man/tidy_heckit.qmd diff --git a/docs/man/tidy_test.qmd b/man/tidy_test.qmd similarity index 100% rename from docs/man/tidy_test.qmd rename to man/tidy_test.qmd diff --git a/docs/man/varidate.qmd b/man/varidate.qmd similarity index 100% rename from docs/man/varidate.qmd rename to man/varidate.qmd From aacc8774e459cb4476fc2fe2c6f64ba8d08f26a6 Mon Sep 17 00:00:00 2001 From: Hirototensho Date: Fri, 23 Jan 2026 23:12:35 +0900 Subject: [PATCH 08/19] =?UTF-8?q?README.md=20=E3=81=AE=E3=83=AA=E3=83=B3?= =?UTF-8?q?=E3=82=AF=E3=82=92=E5=86=8D=E5=BA=A6=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- {docs/man => man}/image/Pareto_plot1.png | Bin {docs/man => man}/image/Pareto_plot2.png | Bin {docs/man => man}/image/Pareto_plot3.png | Bin {docs/man => man}/image/coefplot1.png | Bin {docs/man => man}/image/coefplot2.png | Bin {docs/man => man}/image/coefplot3.png | Bin {docs/man => man}/image/plot_Blinder_Oaxaca1.png | Bin {docs/man => man}/image/plot_Blinder_Oaxaca2.png | Bin {docs/man => man}/image/plot_category1.png | Bin {docs/man => man}/image/plot_category2.png | Bin {docs/man => man}/image/plot_mean_diff1.png | Bin {docs/man => man}/image/plot_mean_diff2.png | Bin {docs/man => man}/image/plot_median_diff1.png | Bin {docs/man => man}/image/plot_miss_var1.png | Bin {docs/man => man}/image/plot_miss_var2.png | Bin {docs/man => man}/image/set_miss.png | Bin 16 files changed, 0 insertions(+), 0 deletions(-) rename {docs/man => man}/image/Pareto_plot1.png (100%) rename {docs/man => man}/image/Pareto_plot2.png (100%) rename {docs/man => man}/image/Pareto_plot3.png (100%) rename {docs/man => man}/image/coefplot1.png (100%) rename {docs/man => man}/image/coefplot2.png (100%) rename {docs/man => man}/image/coefplot3.png (100%) rename {docs/man => man}/image/plot_Blinder_Oaxaca1.png (100%) rename {docs/man => man}/image/plot_Blinder_Oaxaca2.png (100%) rename {docs/man => man}/image/plot_category1.png (100%) rename {docs/man => man}/image/plot_category2.png (100%) rename {docs/man => man}/image/plot_mean_diff1.png (100%) rename {docs/man => man}/image/plot_mean_diff2.png (100%) rename {docs/man => man}/image/plot_median_diff1.png (100%) rename {docs/man => man}/image/plot_miss_var1.png (100%) rename {docs/man => man}/image/plot_miss_var2.png (100%) rename {docs/man => man}/image/set_miss.png (100%) diff --git a/docs/man/image/Pareto_plot1.png b/man/image/Pareto_plot1.png similarity index 100% rename from docs/man/image/Pareto_plot1.png rename to man/image/Pareto_plot1.png diff --git a/docs/man/image/Pareto_plot2.png b/man/image/Pareto_plot2.png similarity index 100% rename from docs/man/image/Pareto_plot2.png rename to man/image/Pareto_plot2.png diff --git a/docs/man/image/Pareto_plot3.png b/man/image/Pareto_plot3.png similarity index 100% rename from docs/man/image/Pareto_plot3.png rename to man/image/Pareto_plot3.png diff --git a/docs/man/image/coefplot1.png b/man/image/coefplot1.png similarity index 100% rename from docs/man/image/coefplot1.png rename to man/image/coefplot1.png diff --git a/docs/man/image/coefplot2.png b/man/image/coefplot2.png similarity index 100% rename from docs/man/image/coefplot2.png rename to man/image/coefplot2.png diff --git a/docs/man/image/coefplot3.png b/man/image/coefplot3.png similarity index 100% rename from docs/man/image/coefplot3.png rename to man/image/coefplot3.png diff --git a/docs/man/image/plot_Blinder_Oaxaca1.png b/man/image/plot_Blinder_Oaxaca1.png similarity index 100% rename from docs/man/image/plot_Blinder_Oaxaca1.png rename to man/image/plot_Blinder_Oaxaca1.png diff --git a/docs/man/image/plot_Blinder_Oaxaca2.png b/man/image/plot_Blinder_Oaxaca2.png similarity index 100% rename from docs/man/image/plot_Blinder_Oaxaca2.png rename to man/image/plot_Blinder_Oaxaca2.png diff --git a/docs/man/image/plot_category1.png b/man/image/plot_category1.png similarity index 100% rename from docs/man/image/plot_category1.png rename to man/image/plot_category1.png diff --git a/docs/man/image/plot_category2.png b/man/image/plot_category2.png similarity index 100% rename from docs/man/image/plot_category2.png rename to man/image/plot_category2.png diff --git a/docs/man/image/plot_mean_diff1.png b/man/image/plot_mean_diff1.png similarity index 100% rename from docs/man/image/plot_mean_diff1.png rename to man/image/plot_mean_diff1.png diff --git a/docs/man/image/plot_mean_diff2.png b/man/image/plot_mean_diff2.png similarity index 100% rename from docs/man/image/plot_mean_diff2.png rename to man/image/plot_mean_diff2.png diff --git a/docs/man/image/plot_median_diff1.png b/man/image/plot_median_diff1.png similarity index 100% rename from docs/man/image/plot_median_diff1.png rename to man/image/plot_median_diff1.png diff --git a/docs/man/image/plot_miss_var1.png b/man/image/plot_miss_var1.png similarity index 100% rename from docs/man/image/plot_miss_var1.png rename to man/image/plot_miss_var1.png diff --git a/docs/man/image/plot_miss_var2.png b/man/image/plot_miss_var2.png similarity index 100% rename from docs/man/image/plot_miss_var2.png rename to man/image/plot_miss_var2.png diff --git a/docs/man/image/set_miss.png b/man/image/set_miss.png similarity index 100% rename from docs/man/image/set_miss.png rename to man/image/set_miss.png From 5dbefd0cec74f6f1780c7ae894a0cbdd090b2357 Mon Sep 17 00:00:00 2001 From: Hirototensho Date: Fri, 23 Jan 2026 23:14:16 +0900 Subject: [PATCH 09/19] =?UTF-8?q?README.md=20=E3=81=AE=E3=83=AA=E3=83=B3?= =?UTF-8?q?=E3=82=AF=E3=82=92=E5=86=8D=E5=BA=A6=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/_quarto.yml => _quarto.yml | 0 docs/index.qmd => index.qmd | 0 docs/introduction.qmd => introduction.qmd | 0 docs/reference.qmd => reference.qmd | 0 docs/theme.scss => theme.scss | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename docs/_quarto.yml => _quarto.yml (100%) rename docs/index.qmd => index.qmd (100%) rename docs/introduction.qmd => introduction.qmd (100%) rename docs/reference.qmd => reference.qmd (100%) rename docs/theme.scss => theme.scss (100%) diff --git a/docs/_quarto.yml b/_quarto.yml similarity index 100% rename from docs/_quarto.yml rename to _quarto.yml diff --git a/docs/index.qmd b/index.qmd similarity index 100% rename from docs/index.qmd rename to index.qmd diff --git a/docs/introduction.qmd b/introduction.qmd similarity index 100% rename from docs/introduction.qmd rename to introduction.qmd diff --git a/docs/reference.qmd b/reference.qmd similarity index 100% rename from docs/reference.qmd rename to reference.qmd diff --git a/docs/theme.scss b/theme.scss similarity index 100% rename from docs/theme.scss rename to theme.scss From 75b5f43ce416c483ef32b21a4b2cbc033a633a94 Mon Sep 17 00:00:00 2001 From: Hirototensho Date: Fri, 23 Jan 2026 23:15:17 +0900 Subject: [PATCH 10/19] =?UTF-8?q?README.md=20=E3=81=AE=E3=83=AA=E3=83=B3?= =?UTF-8?q?=E3=82=AF=E3=82=92=E5=86=8D=E5=BA=A6=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../eda_tools_development_status.html | 1193 ---------- docs/docs/articles/narwhals_in_py4stats.html | 975 -------- ...\343\201\256\350\200\203\345\257\237.html" | 1028 -------- docs/docs/index.html | 1058 --------- docs/docs/introduction.html | 1358 ----------- docs/docs/man/Blinder_Oaxaca.html | 1141 --------- docs/docs/man/Heckit_from_formula.html | 1001 -------- docs/docs/man/Pareto_plot.html | 970 -------- docs/docs/man/arg_match.html | 985 -------- docs/docs/man/assert_dtype.html | 1060 --------- docs/docs/man/coefplot.html | 1011 -------- docs/docs/man/compare_df_cols.html | 977 -------- docs/docs/man/compare_group_stats.html | 1063 --------- docs/docs/man/compare_mfx.html | 1093 --------- docs/docs/man/compare_ols.html | 1413 ----------- docs/docs/man/diagnose.html | 943 -------- docs/docs/man/diagnose_category.html | 988 -------- docs/docs/man/filtering_out.html | 988 -------- docs/docs/man/freq_table.html | 984 -------- docs/docs/man/glance.html | 949 -------- docs/docs/man/heckitmfx_compute.html | 1029 -------- docs/docs/man/image/Pareto_plot1.png | Bin 25849 -> 0 bytes docs/docs/man/image/Pareto_plot2.png | Bin 27946 -> 0 bytes docs/docs/man/image/Pareto_plot3.png | Bin 28448 -> 0 bytes docs/docs/man/image/coefplot1.png | Bin 17557 -> 0 bytes docs/docs/man/image/coefplot2.png | Bin 24639 -> 0 bytes docs/docs/man/image/coefplot3.png | Bin 23963 -> 0 bytes docs/docs/man/image/plot_Blinder_Oaxaca1.png | Bin 21792 -> 0 bytes docs/docs/man/image/plot_Blinder_Oaxaca2.png | Bin 16077 -> 0 bytes docs/docs/man/image/plot_category1.png | Bin 23258 -> 0 bytes docs/docs/man/image/plot_category2.png | Bin 27997 -> 0 bytes docs/docs/man/image/plot_mean_diff1.png | Bin 13213 -> 0 bytes docs/docs/man/image/plot_mean_diff2.png | Bin 13819 -> 0 bytes docs/docs/man/image/plot_median_diff1.png | Bin 13379 -> 0 bytes docs/docs/man/image/plot_miss_var1.png | Bin 16981 -> 0 bytes docs/docs/man/image/plot_miss_var2.png | Bin 13189 -> 0 bytes docs/docs/man/image/set_miss.png | Bin 15691 -> 0 bytes docs/docs/man/is_dtype.html | 962 -------- docs/docs/man/is_dummy.html | 972 -------- docs/docs/man/miscellaneous.html | 957 -------- docs/docs/man/oxford_comma.html | 941 -------- docs/docs/man/plot_category.html | 992 -------- docs/docs/man/plot_miss_var.html | 957 -------- docs/docs/man/point_range.html | 972 -------- docs/docs/man/predicate_str.html | 1003 -------- docs/docs/man/relocate.html | 994 -------- docs/docs/man/remove_empty_constant.html | 1017 -------- docs/docs/man/scale_wmean.html | 1013 -------- docs/docs/man/set_miss.html | 976 -------- docs/docs/man/style_pvalue.html | 964 -------- docs/docs/man/tabyl.html | 971 -------- docs/docs/man/tidy.html | 1026 -------- docs/docs/man/tidy_heckit.html | 1018 -------- docs/docs/man/tidy_test.html | 958 -------- docs/docs/man/varidate.html | 1040 -------- docs/docs/reference.html | 996 -------- docs/docs/search.json | 2050 ---------------- ...p-322e28c2ea576fd4147837fb8c5b7a3d.min.css | 12 - .../site_libs/bootstrap/bootstrap-icons.css | 2106 ----------------- .../site_libs/bootstrap/bootstrap-icons.woff | Bin 180288 -> 0 bytes .../docs/site_libs/bootstrap/bootstrap.min.js | 7 - .../docs/site_libs/clipboard/clipboard.min.js | 7 - docs/docs/site_libs/quarto-html/anchor.min.js | 9 - .../site_libs/quarto-html/axe/axe-check.js | 145 -- docs/docs/site_libs/quarto-html/popper.min.js | 6 - ...hting-ed96de9b727972fe78a7b5d16c58bf87.css | 236 -- docs/docs/site_libs/quarto-html/quarto.js | 847 ------- .../site_libs/quarto-html/tabsets/tabsets.js | 95 - docs/docs/site_libs/quarto-html/tippy.css | 1 - .../site_libs/quarto-html/tippy.umd.min.js | 2 - .../docs/site_libs/quarto-nav/headroom.min.js | 7 - docs/docs/site_libs/quarto-nav/quarto-nav.js | 325 --- .../quarto-search/autocomplete.umd.js | 3 - docs/docs/site_libs/quarto-search/fuse.min.js | 9 - .../site_libs/quarto-search/quarto-search.js | 1290 ---------- docs/docs/theme.scss | 31 - 76 files changed, 48124 deletions(-) delete mode 100644 docs/docs/articles/eda_tools_development_status.html delete mode 100644 docs/docs/articles/narwhals_in_py4stats.html delete mode 100644 "docs/docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.html" delete mode 100644 docs/docs/index.html delete mode 100644 docs/docs/introduction.html delete mode 100644 docs/docs/man/Blinder_Oaxaca.html delete mode 100644 docs/docs/man/Heckit_from_formula.html delete mode 100644 docs/docs/man/Pareto_plot.html delete mode 100644 docs/docs/man/arg_match.html delete mode 100644 docs/docs/man/assert_dtype.html delete mode 100644 docs/docs/man/coefplot.html delete mode 100644 docs/docs/man/compare_df_cols.html delete mode 100644 docs/docs/man/compare_group_stats.html delete mode 100644 docs/docs/man/compare_mfx.html delete mode 100644 docs/docs/man/compare_ols.html delete mode 100644 docs/docs/man/diagnose.html delete mode 100644 docs/docs/man/diagnose_category.html delete mode 100644 docs/docs/man/filtering_out.html delete mode 100644 docs/docs/man/freq_table.html delete mode 100644 docs/docs/man/glance.html delete mode 100644 docs/docs/man/heckitmfx_compute.html delete mode 100644 docs/docs/man/image/Pareto_plot1.png delete mode 100644 docs/docs/man/image/Pareto_plot2.png delete mode 100644 docs/docs/man/image/Pareto_plot3.png delete mode 100644 docs/docs/man/image/coefplot1.png delete mode 100644 docs/docs/man/image/coefplot2.png delete mode 100644 docs/docs/man/image/coefplot3.png delete mode 100644 docs/docs/man/image/plot_Blinder_Oaxaca1.png delete mode 100644 docs/docs/man/image/plot_Blinder_Oaxaca2.png delete mode 100644 docs/docs/man/image/plot_category1.png delete mode 100644 docs/docs/man/image/plot_category2.png delete mode 100644 docs/docs/man/image/plot_mean_diff1.png delete mode 100644 docs/docs/man/image/plot_mean_diff2.png delete mode 100644 docs/docs/man/image/plot_median_diff1.png delete mode 100644 docs/docs/man/image/plot_miss_var1.png delete mode 100644 docs/docs/man/image/plot_miss_var2.png delete mode 100644 docs/docs/man/image/set_miss.png delete mode 100644 docs/docs/man/is_dtype.html delete mode 100644 docs/docs/man/is_dummy.html delete mode 100644 docs/docs/man/miscellaneous.html delete mode 100644 docs/docs/man/oxford_comma.html delete mode 100644 docs/docs/man/plot_category.html delete mode 100644 docs/docs/man/plot_miss_var.html delete mode 100644 docs/docs/man/point_range.html delete mode 100644 docs/docs/man/predicate_str.html delete mode 100644 docs/docs/man/relocate.html delete mode 100644 docs/docs/man/remove_empty_constant.html delete mode 100644 docs/docs/man/scale_wmean.html delete mode 100644 docs/docs/man/set_miss.html delete mode 100644 docs/docs/man/style_pvalue.html delete mode 100644 docs/docs/man/tabyl.html delete mode 100644 docs/docs/man/tidy.html delete mode 100644 docs/docs/man/tidy_heckit.html delete mode 100644 docs/docs/man/tidy_test.html delete mode 100644 docs/docs/man/varidate.html delete mode 100644 docs/docs/reference.html delete mode 100644 docs/docs/search.json delete mode 100644 docs/docs/site_libs/bootstrap/bootstrap-322e28c2ea576fd4147837fb8c5b7a3d.min.css delete mode 100644 docs/docs/site_libs/bootstrap/bootstrap-icons.css delete mode 100644 docs/docs/site_libs/bootstrap/bootstrap-icons.woff delete mode 100644 docs/docs/site_libs/bootstrap/bootstrap.min.js delete mode 100644 docs/docs/site_libs/clipboard/clipboard.min.js delete mode 100644 docs/docs/site_libs/quarto-html/anchor.min.js delete mode 100644 docs/docs/site_libs/quarto-html/axe/axe-check.js delete mode 100644 docs/docs/site_libs/quarto-html/popper.min.js delete mode 100644 docs/docs/site_libs/quarto-html/quarto-syntax-highlighting-ed96de9b727972fe78a7b5d16c58bf87.css delete mode 100644 docs/docs/site_libs/quarto-html/quarto.js delete mode 100644 docs/docs/site_libs/quarto-html/tabsets/tabsets.js delete mode 100644 docs/docs/site_libs/quarto-html/tippy.css delete mode 100644 docs/docs/site_libs/quarto-html/tippy.umd.min.js delete mode 100644 docs/docs/site_libs/quarto-nav/headroom.min.js delete mode 100644 docs/docs/site_libs/quarto-nav/quarto-nav.js delete mode 100644 docs/docs/site_libs/quarto-search/autocomplete.umd.js delete mode 100644 docs/docs/site_libs/quarto-search/fuse.min.js delete mode 100644 docs/docs/site_libs/quarto-search/quarto-search.js delete mode 100644 docs/docs/theme.scss diff --git a/docs/docs/articles/eda_tools_development_status.html b/docs/docs/articles/eda_tools_development_status.html deleted file mode 100644 index 0f996c7..0000000 --- a/docs/docs/articles/eda_tools_development_status.html +++ /dev/null @@ -1,1193 +0,0 @@ - - - - - - - - - -39  eda_toolsの開発状況 – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-
- -
- -
- - -
- - - -
- -
-
-

39  eda_toolsの開発状況

-
- - - -
- - - - -
- - - -
- - -

2026年1月22日

-

eda_toolsの開発状況

- -------- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
functionsInputPandasPolarsPyarrow補足
Meanpd.Seriespd.DataFrame.eval() での使用を想定した関数
Medianpd.Seriespd.DataFrame.eval() での使用を想定した関数
Maxpd.Seriespd.DataFrame.eval() での使用を想定した関数
Minpd.Seriespd.DataFrame.eval() での使用を想定した関数
Pareto_plotDataFrame
Sumpd.Seriespd.DataFrame.eval() での使用を想定した関数
check_thatDataFrame⭕️⭕️実装に pd.DataFrame.eval() を使用
check_viorateDataFrame⭕️⭕️実装に pd.DataFrame.eval() を使用
compare_df_colsDataFrame
compare_df_recordDataFrame
compare_df_statsDataFrame
compare_group_meansDataFrame
compare_group_medianDataFrame
crosstabDataFrame⭕️Pyarrow は Polars 依存の実装
diagnoseDataFrame
diagnose_categoryDataFrame
filtering_outDataFrame
freq_tableDataFrame
implies_experpd.Seriespd.DataFrame.eval() での使用を想定した関数
is_dummyDataFrame/Series
is_numberSeries
is_ymd_likeSeries
is_ymdSeries
mean_ciDataFrame/Series
mean_qiDataFrame/Series
median_qiDataFrame/Series
min_maxSeries
plot_mean_diffDataFrame
plot_median_diffDataFrame
plot_miss_varDataFrame
scaleSeries
set_missSeries
relocateDataFrame
remove_constantDataFrame
remove_emptyDataFrame
tabylDataFrame⭕️⭕️一部の処理が Pandas 依存
weighted_meanSeries
-
-

39.1 凡例

-
    -
  • ✅ 実装済/テスト済
  • -
  • ⭕️ 実装済/テスト済(異なるバックエンドに依存)
  • -
  • 🔼 実装済/テスト未
  • -
  • ❌ 未実装
  • -
- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/articles/narwhals_in_py4stats.html b/docs/docs/articles/narwhals_in_py4stats.html deleted file mode 100644 index d1b855b..0000000 --- a/docs/docs/articles/narwhals_in_py4stats.html +++ /dev/null @@ -1,975 +0,0 @@ - - - - - - - - - -38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装 – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装

-
- - - -
- - - - -
- - - -
- - -
-

38.1 概要

-

py4stats.eda_tools モジュールは、複数の DataFrame バックエンドに対して共通の API を提供することを目的として、narwhals ライブラリを用いて実装されています。

-

本ドキュメントでは、本モジュールの内部実装に関する前提条件や、バックエンドの違いに起因する挙動上の注意点について説明します。

-

通常の利用にあたって本ドキュメントを読む必要はありませんが、実装の詳細や挙動の違いが気になる場合には参考にしてください。

-
-
-

38.2 対応している DataFrame バックエンドについて

-

 py4stats.eda_tools モジュールの関数は、第一引数として narwhals.from_native() によって nw.DataFrame 型へ変換可能な DataFrame オブジェクトを受け取ります。

-

具体的には、以下のようなバックエンドを想定しています。

-
    -
  • pandas.DataFrame(主に動作検証を行っているバックエンド)
  • -
  • polars.DataFrame(簡易的な動作確認のみ)
  • -
  • pyarrow.Table(簡易的な動作確認のみ)
  • -
-

本ライブラリの動作確認は、基本的に pandas.DataFrame を用いて実施しています。そのため、polarspyarrow を使用した場合には、バックエンド固有の仕様差や未検証の挙動により、一部の関数でエラーが発生する可能性があります。そのような挙動が確認された場合は、Issue 等での報告を歓迎します。

-

 また、バックエンド別の実装状況については eda_tools開発状況 も参照して下さい。

-
-
-

38.3 narwhals を用いた関数の返り値の型について

-

py4stats.eda_tools モジュールの関数のうち、py4stats.diagnose() など、第一引数にデータフレームを取る関数の返り値の型は、to_native 引数の値によって変化します。
 初期設定である to_nativ = True の場合には、第一引数に入力されたデータフレームと同じ型のデータフレームが出力され、to_nativ = False の場合には narwhals.DataFrame 型のデータフレームが出力されます。to_nativ = False のオプションは、主にライブラリ内部での利用や、データフレームのバックエンドに依存しない後続処理を行いたい場合を想定したオプションです。

-
import py4stats as py4st
-import pandas as pd
-import polars as pl
-import pyarrow as pa
-import wooldridge
-mroz_pd = wooldridge.data('mroz')       # pd.DataFrame
-mroz_pl = pl.from_pandas(mroz_pd)       # pl.DataFrame
-mroz_pa = pa.Table.from_pandas(mroz_pd) # pyarrow.lib.Table
-
# to_nativ = True の場合(初期設定): 入力されたデータフレームと同じ型
-
-print(type(py4st.diagnose(mroz_pd, to_native = True)))
-#> <class 'pandas.core.frame.DataFrame'>
-
-print(type(py4st.diagnose(mroz_pl, to_native = True)))
-#> <class 'polars.dataframe.frame.DataFrame'>
-
-print(type(py4st.diagnose(mroz_pa, to_native = True)))
-#> <class 'pyarrow.lib.Table'>
-
# to_nativ = False の場合: narwhals.DataFrame 型
-
-print(type(py4st.diagnose(mroz_pd, to_native = False)))
-#> <class 'narwhals.dataframe.DataFrame'>
-
-print(type(py4st.diagnose(mroz_pl, to_native = False)))
-#> <class 'narwhals.dataframe.DataFrame'>
-
-print(type(py4st.diagnose(mroz_pa, to_native = False)))
-#> <class 'narwhals.dataframe.DataFrame'>
-
-
-

38.4 narwhals を用いた実装方針について

-

 内部実装では、関数の冒頭で

-
nw.from_native(data)
-

を用いて入力データを nw.DataFrame に変換し、以降の処理を narwhals の抽象 API 上で行っています。

-

この設計により、DataFrame バックエンドごとの差異を最小限に抑えつつ、将来的な拡張性を確保することを目的としています。

-

一方で、narwhals は各バックエンドの完全な互換性を保証するものではないため、特定の操作や型変換についてはバックエンドごとに挙動が異なる場合があります。

-
-
-

38.5  pandas_flavor を用いた DataFrame メソッド登録について

-

py4stats.eda_tools の関数のうち、単一の DataFrame オブジェクトを引数として受け取る関数については、pandas_flavor.register_dataframe_method を用いて DataFrame メソッドとして登録されています。その結果、以下のような使い方が可能です。

-
df.diagnose()
-

ただし、pandas_flavor は pandas の拡張を前提とした仕組みであるため、このメソッド形式の呼び出しは、pandas.DataFrame を対象としています。  polars.DataFrame や pyarrow ベースのオブジェクトを使用する場合には、関数として直接呼び出す形での利用を推奨します。

-
import py4stats as py4st
-
-py4st.diagnose(df)
-
-
-

38.6 今後について

-

 py4stats.eda_tools モジュールは、今後も narwhals ベースの実装を主軸として改良・拡張を行っていく予定です。一方で、従来の pandas ベースの実装については、互換性のために当面は保持される予定ですが、機能追加は行わない予定です。バックエンドごとの挙動差や制限事項については、必要に応じて本ドキュメントを更新していきます。

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git "a/docs/docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.html" "b/docs/docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.html" deleted file mode 100644 index 5f797bc..0000000 --- "a/docs/docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.html" +++ /dev/null @@ -1,1028 +0,0 @@ - - - - - - - - - -40  narwhals についての考察 – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

40  narwhals についての考察

-
- - - -
- - - - -
- - - -
- - -
-

40.1 narwhals での再現が難しい Pandas の機能

-
-

40.1.1 異なるデータフレーム間の二項演算

-

Pandas の場合、2つのデータフレーム df1df2 が共通の columns と index をもつ限り、df3 = df1 + df2 によって二項演算を行うことができ、このとき、columns と index をもつ要素同士が加算されます。しかし、narwhals には Pandas のような index が存在しないため、この計算は再現が困難です。

-
-
-

40.1.2 データフレームへの値の代入

-

Pandas の場合、df.loc[i, j] = x という形でデータフレーム df の i, j 要素に値 x を代入することができますが、narwhals ではこれに相当する演算 df[i, j] = x は禁止されています。

-

異なるデータフレーム間の二項演算に制約があること、そしてデータフレームへの値の代入が難しいことから、tabyl() 関数では、集計後の作表処理の一部を Pandas に依存しています。

-
-
-

40.1.3 任意の関数でグループ別集計を行う

-

自作関数を使ってグループ別集計を行いたい場合、Pandas であれば df.groupby(group)[x].agg(my_func) で行うことができます。同じく narwhals でも

-
data_nw.group_by(nw.col(group)).agg(nw.col('x').mean())
-

という形でグループ別の集計がサポートされているものの、ここで使用できる集計関数は narwhals で実装されているものに限定されるようで、次のような方法で自作関数を使用することはできません。

-
data_nw.group_by(nw.col(group)).agg(nw.col('x').my_func())
-data_nw.group_by(nw.col(group)).agg(my_func(nw.col('x')))
-

例えば Py4Stats では、Pareto_plot() 関数の内部実装に使用している make_rank_table() 関数において、任意の aggfunc() 関数をグループ別集計に使うために、サブセッティングを使って group_by() メソッドの使用を回避するという変則的(かつ、おそらく非効率な)な実装を行なっています。

-
stat_values = [
-            aggfunc(
-                data_nw.filter(nw.col(group) == g)[values]
-                .drop_nulls().to_native()
-                ) 
-            for g in group_value
-            ]
-

また、上記の回避策のもう1つの問題として、data_nw.filter(nw.col(group) == g) では、複数の変数に基づくグループ化に対応できないことも挙げられます。make_rank_table() 関数については、Pareto_plot() 関数でパレート図を作図するときに横軸になる group が多変数だと対応できないので、group が1変数(= 引数として1つの文字列だけを受け付ける)とすることで妥協しています。

-

ただ、現時点で narwhals.GroupBy クラスに実装されているメソッドは .agg() しかなく、開発が進めばより柔軟な関数適用が可能になるのではないかと期待しています。

-
-
-
-

40.2 narwhals におけるバックエンドとその書き換え

-
-

40.2.1 バックエンドの基本的な理解

-

narwhals におけるバックエンドによる型変換の基本的な理解として(不正確かもしれませんが)、nw.from_native(data) の実行時に data の型に応じて backend が記録され、.to_native() メソッドを呼び出すと、記録された backend に応じて元の型に変換されます。

-

backend の情報は .select() .filter() などのメソッドを使って data_nw を加工しても保持され、これによって入力された input_pd と同じ型のデータフレームを返すことが可能になっています。

-
data_nw = nw.from_native(input_pd) # ここで backend が記録される
-data_nw.implementation       # -> Pandas
-result = data_nw.to_native() # -> pd.DataFrame が出力される
-

一方で、処理の途中で pd.DataFrame や pl.DataFrame などの native オブジェクトを経由した場合、改めて nw.from_native() を使って nw.DataFrame に変換し直したとしても、その時点で backend が上書きされるので、.to_native() メソッドを使用しても引数として入力された input_pd と同じ型に復元される保証はありません。

-
data_nw = nw.from_native(input_pd)              # ここで backend が記録される
-data_nw2 = nw.from_native(data_nw.to_polars())  # ここで backend が上書きされる
-data_nw2.implementation        # -> polars
-result = data_nw2.to_native()  # -> pl.DataFrame が出力される
-

従って、resultinput_pd と同じ型をもつことを保証するには、data_nw を nw.DataFrame クラスのまま維持する(≒ narwhals ベースのメソッドだけで処理を書く)必要があり、これが narwhals ベースの実装としてのあるべき姿だと思われます。

-

一方で、一部の処理が特定のバックエンド(e.g. Pandas)に依存している場合にはどうするべきでしょうか。これには次のような2つの選択肢があると考えています。

-
    -
  1. 処理が依存しているバックエンドのオブジェクト(e.g. pd.DataFrame)として出力する〔推奨〕
  2. -
  3. narwhals の仕様を迂回してバックエンドを書き換える〔非推奨ですが次節で考察〕
  4. -
-

これら2つの可能性の間での選択は、技術的な問題であると同時にユーザーとのコミュニケーションの問題です。入力と同型のデータフレームを返す関数の中に pd.DataFrame を返す関数が混ざっていることをユーザーにどう説明するのか。あるいは、narwhals の仕様を迂回をしたことで非効率性やカラムレベルでデータ型(dtype)の一貫性が失われる問題が生じたとして、それをユーザーにどう説明するのか、という問いです。

-
-
-

40.2.2 バックエンドの書き換え (非推奨)

-

いま、some_computation() として実装された処理の一部が Pandas に依存しており、結果が result_pd という pd.DataFrame 型のオブジェクトとして得られているとします。このとき、result_pd をもとのデータフレーム data_pl と同型にする方法の1つとして、result_pdpd.Series.to_dict() などを使って辞書のリスト(list of dict)に変換したのち、nw.from_dicts() を使って data_pl と同じバックエンドをもつ nw.DataFrame に変換するという方法があります。

-

以上の変換の実例を見てみましょう。まずは、data_pl

-
data_pl = pl.from_pandas(load_penguins())[:10, :2]
-
-data_pl = data_pl.with_columns(
-        pl.all().cast(pl.Categorical)
-    )
-print(type(data_pl))
-#> <class 'polars.dataframe.frame.DataFrame'>
-print(data_pl.schema)
-#> Schema({'species': Categorical, 'island': Categorical})
-
-data_nw_pl = nw.from_native(data_pl) # ここでバックエンドを記録、後ほど復元に使います。
-
-# 何かしらの処理の結果 pd.DataFrame に変換されたとする
-result_pd = data_nw_pl.to_pandas()
-print(type(result_pd))
-#> <class 'pandas.core.frame.DataFrame'>
-

次に、pl.DataFrame 型をもつ result_pd を pl.DataFrame に変換します。

-

ここでポイントとなるのが、nw.from_dicts() 関数の引数の (1)schema 引数と、(2)backend引数に、それぞれ data_nw_pl から取得した値を入力することで、result_pl の列が data_pl と同じく Categorical 型になるようにしています(指定しないと String 型として解釈されてしまいます)。

-
# Pandas -> polars の変換
-dict_list = [result_pd.loc[i, :].to_dict() for i in result_pd.index]
-
-result_nw_pl = nw.from_dicts(
-    dict_list, 
-    schema = data_nw_pl.schema,         # (1)
-    backend = data_nw_pl.implementation # (2)
-    )
-result_pl = result_nw_pl.to_native()
-
-print(type(result_pl))
-#> <class 'polars.dataframe.frame.DataFrame'>
-
-print(result_pl.schema)
-#> Schema({'species': Categorical, 'island': Categorical})
-

また、Series については、nw.Series.from_iterable() 関数を使うことで、次のようにバックエンドを書き換えることができます。

-
x_pl = data_pl['island']
-print(type(x_pl))
-#> <class 'polars.series.series.Series'>
-print(x_pl.dtype)
-#> Categorical
-
-x_nw = nw.from_native(x_pl, allow_series = True)
-x_pd = x_nw.to_pandas()
-print(type(x_pd))
-#> <class 'pandas.core.series.Series'>
-
x_pl2 = nw.Series.from_iterable(
-    name = x_pd.name,
-    values = x_pd.to_list(),
-    backend = x_nw.implementation,
-    dtype = x_nw.dtype
-).to_native()
-
-print(type(x_pl2))
-#> <class 'polars.series.series.Series'>
-print(x_pl2.dtype)
-#> Categorical
-

narwhals の仕様を迂回してバックエンドを書き換えることは可能ですが、この方法には次のような問題があります。 ただし、以上のような方法でバックエンドの書き換えは可能ですが、

-
    -
  1. 小さいデータフレームでない限り時間がかかる -
      -
    • 恐らく、dict_list を作成するための for ループによるもの
    • -
  2. -
  3. 上記の (1) に代入する正しい schema が用意できないと、カラムレベルでデータ型の一貫性保証できない。
  4. -
-

特に2番目の問題点については、集計処理によって列名が変わった場合には正しい schema(≒ {列名:dtype} の辞書オブジェクト)を用意することが難しくなります。そして、schema を指定できないと、pd.Categoricalpl.Categorical あるいは pl.Enum といったカテゴリー変数は文字列型に変換されてしまい、データ型の一貫性が失われます。

-

カラムレベルで型の一貫性が失われると、返り値が入力値とは異なる型になるよりも把握しづらく、また挙動の予測が難しいため、上記のような処理は採用するとしても、他に方法がないときの最終手段として扱うべきでしょう。

- - -
-
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/index.html b/docs/docs/index.html deleted file mode 100644 index de5db56..0000000 --- a/docs/docs/index.html +++ /dev/null @@ -1,1058 +0,0 @@ - - - - - - - - - - -Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

Py4Stats

-
- - - -
- - -
-
Published
-
-

2026-01-23

-
-
- - -
- - - -
- - -
-

1 Readme

-

 Py4Stats は、主に実証研究で用いられる、探索的データ分析および回帰結果レポート用のユーティリティライブラリで、回帰分析を中心とする分析でよく使われるR言語の機能を、Python で実装しています。本ライブラリの主な機能は Get started を、実装されている関数の一覧は Function reference を参照してください。

-
-

1.1 Installation

-

uv をお使いの場合、次のコードで py4stats をインストールできます。

-
! uv add git+https://github.com/Hirototensho/py4stats.git
-

一方で、pip をお使いの場合には、次のコードで py4stats をインストールできます。

-
! pip install git+https://github.com/Hirototensho/py4stats.git
-
-
-

1.2 使用例

-
import py4stats as py4st
-

py4stats.diagnose() 関数はデータの全般的な状態についての要約を提供します。

-
import pandas as pd
-from palmerpenguins import load_penguins
-penguins = load_penguins() # サンプルデータの読み込み
-
-print(py4st.diagnose(penguins).round(4))
-#>              columns    dtype  missing_count  missing_percent  unique_count  unique_rate
-#> 0            species   object              0           0.0000             3       0.8721
-#> 1             island   object              0           0.0000             3       0.8721
-#> 2     bill_length_mm  float64              2           0.5814           165      47.9651
-#> 3      bill_depth_mm  float64              2           0.5814            81      23.5465
-#> 4  flipper_length_mm  float64              2           0.5814            56      16.2791
-#> 5        body_mass_g  float64              2           0.5814            95      27.6163
-#> 6                sex   object             11           3.1977             3       0.8721
-#> 7               year    int64              0           0.0000             3       0.8721
-

py4stats.compare_ols() 関数は、計量経済学の実証論文でよく用いられる、回帰分析の結果を列方向に並べて比較する表を作成します。

-
import statsmodels.formula.api as smf
-
-# 回帰分析の実行
-fit1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()
-fit2 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species', data = penguins).fit()
-fit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()
-
-compare_tab1 = py4st.compare_ols(list_models = [fit1, fit2, fit3]) # 表の作成
-compare_tab1
- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
termmodel 1model 2model 3
Intercept153.7397-1,742.7202 ***843.9812 **
(268.9012)(313.7697)(403.5956)
species[T.Chinstrap]-885.8121 ***-539.6864 ***-245.1516 ***
(88.2502)(86.9425)(84.5952)
species[T.Gentoo]578.6292 ***1,492.8283 ***1,443.3525 ***
(75.3623)(118.4442)(107.7844)
bill_length_mm91.4358 ***55.6461 ***26.5366 ***
(6.8871)(7.2326)(7.2436)
bill_depth_mm179.0434 ***87.9328 ***
(19.0997)(20.2192)
sex[T.male]437.2007 ***
(49.1098)
rsquared_adj0.78100.82580.8613
nobs342342333
df345
-

詳細は、py4stats.compare_ols() を参照してください。 

-
-

Jump to Function Get started.
-Jump to Function reference.

- - -
-
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/introduction.html b/docs/docs/introduction.html deleted file mode 100644 index 42374a9..0000000 --- a/docs/docs/introduction.html +++ /dev/null @@ -1,1358 +0,0 @@ - - - - - - - - - -2  Introduction to Py4Stats – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

2  Introduction to Py4Stats

-
- - - -
- - - - -
- - - -
- - -
import py4stats as py4st
-

ここでは Py4Stats の主な機能を紹介します。実装されている関数の一覧は Function reference を参照してください。

-
-

2.1 py4stats.eda_tools

-

 探索的データ解析と前処理に関する機能を提供するモジュールです。このモジュールは、複数の DataFrame バックエンドに対して共通の API を提供することを目的として、narwhals ライブラリを用いて実装されています。詳細は Technical Notes: py4stats.eda_tools における narwhals ベースの実装 を参照してください。

-

 py4stats.diagnose():R言語のdlookr::diagnose()を再現した関数で、データの全般的な状態についての要約を提供します。

-
import pandas as pd
-import numpy as np
-from palmerpenguins import load_penguins
-penguins = load_penguins() # サンプルデータの読み込み
-
-print(py4st.diagnose(penguins).round(4))
-#>                      dtype  missing_count  missing_percent  unique_count  unique_rate
-#> species             object              0           0.0000             3       0.8721
-#> island              object              0           0.0000             3       0.8721
-#> bill_length_mm     float64              2           0.5814           164      47.6744
-#> bill_depth_mm      float64              2           0.5814            80      23.2558
-#> flipper_length_mm  float64              2           0.5814            55      15.9884
-#> body_mass_g        float64              2           0.5814            94      27.3256
-#> sex                 object             11           3.1977             2       0.5814
-#> year                 int64              0           0.0000             3       0.8721
-

py4stats.tabyl():R言語の janitor::tabyl()を参考にした、クロス集計表を作成する関数です。

-
print(py4st.tabyl(penguins, 'island', 'species'))
-#> species         Adelie   Chinstrap       Gentoo  All
-#> island                                              
-#> Biscoe      44 (26.2%)    0 (0.0%)  124 (73.8%)  168
-#> Dream       56 (45.2%)  68 (54.8%)     0 (0.0%)  124
-#> Torgersen  52 (100.0%)    0 (0.0%)     0 (0.0%)   52
-#> All        152 (44.2%)  68 (19.8%)  124 (36.0%)  344
-

 py4stats.freq_table():R言語のDescTools::Freq()をオマージュした、1変数の度数分布表を計算する関数。度数 freq と相対度数 perc に加えて、それぞれの累積値を計算します。

-
print(py4st.freq_table(penguins, 'species'))
-#>            freq      perc  cumfreq   cumperc
-#> species                                     
-#> Adelie      152  0.441860      152  0.441860
-#> Gentoo      124  0.360465      276  0.802326
-#> Chinstrap    68  0.197674      344  1.000000
-

引数 group を指定すると、グループ別の度数分布表を計算できます。

-
penguins2 = penguins.assign(bill_length_mm2 = pd.cut(penguins['bill_length_mm'], 6))
-
-print(
-    py4st.freq_table(penguins2, ['species', 'bill_length_mm2'], sort = False)
-    )
-#>                             freq      perc  cumfreq   cumperc
-#> species   bill_length_mm2
-#> Adelie    (32.072, 38.975]    79  0.523179       79  0.523179
-#>           (38.975, 45.85]     71  0.470199      150  0.993377
-#>           (45.85, 52.725]      1  0.006623      151  1.000000
-#>           (52.725, 59.6]       0  0.000000      151  1.000000
-#> Chinstrap (32.072, 38.975]     0  0.000000        0  0.000000
-#>           (38.975, 45.85]     13  0.191176       13  0.191176
-#>           (45.85, 52.725]     50  0.735294       63  0.926471
-#>           (52.725, 59.6]       5  0.073529       68  1.000000
-#> Gentoo    (32.072, 38.975]     0  0.000000        0  0.000000
-#>           (38.975, 45.85]     40  0.325203       40  0.325203
-#>           (45.85, 52.725]     78  0.634146      118  0.959350
-#>           (52.725, 59.6]       5  0.040650      123  1.000000
-

 py4stats.remove_empty():完全に空白な列や行の削除する関数。R言語の janitor::remove_empty() をオマージュした関数で、全ての要素が NaN である列や行をデータフレームから除外します。

-
penguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy()
-penguins2.loc[:, 'empty'] = np.nan
-penguins2.loc[344, :] = np.nan
-
-print(penguins2.tail(3))
-#>        species  body_mass_g  empty
-#> 342  Chinstrap       4100.0    NaN
-#> 343  Chinstrap       3775.0    NaN
-#> 344        NaN          NaN    NaN
-
-# 完全に空白な行と列を削除。
-print(py4st.remove_empty(penguins2, quiet = False).tail(3))
-#> Removing 1 empty column(s) out of 3 columns(Removed: empty).
-#> Removing 1 empty row(s) out of 345 rows(Removed: 344). 
-#>        species  body_mass_g
-#> 341  Chinstrap       3775.0
-#> 342  Chinstrap       4100.0
-#> 343  Chinstrap       3775.0
-
-# 完全に空白な列のみ削除。
-print(py4st.remove_empty(penguins2, rows = False, quiet = False).tail(3))
-#> Removing 1 empty column(s) out of 3 columns(Removed: empty).
-#>        species  body_mass_g
-#> 342  Chinstrap       4100.0
-#> 343  Chinstrap       3775.0
-#> 344        NaN          NaN
-
-# 完全に空白な行のみ削除。
-print(py4st.remove_empty(penguins2, cols = False, quiet = False).tail(3))
-#> Removing 1 empty row(s) out of 345 rows(Removed: 344). 
-#>        species  body_mass_g  empty
-#> 341  Chinstrap       3775.0    NaN
-#> 342  Chinstrap       4100.0    NaN
-#> 343  Chinstrap       3775.0    NaN
-

 py4stats.remove_constant():定数列の削除。R言語の janitor::remove_constant() をオマージュした関数で、1種類だけの要素からなる列をデータフレームから除外します。

-
penguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy()
-penguins2.loc[:, 'constant'] = 'c'
-
-print(penguins2.head(3))
-#>   species  body_mass_g constant
-#> 0  Adelie       3750.0        c
-#> 1  Adelie       3800.0        c
-#> 2  Adelie       3250.0        c
-
-print(py4st.remove_constant(penguins2, quiet = False).head(3))
-#> Removing 1 constant column(s) out of 3 column(s)(Removed: constant). 
-#>   species  body_mass_g
-#> 0  Adelie       3750.0
-#> 1  Adelie       3800.0
-#> 2  Adelie       3250.0
-

 py4stats.filtering_out()pandasDataFrame.filter() メソッドでは引数 like に文字列を指定することで、列名に特定の文字列を含む列を選択できますが、反対に py4stats.filtering_out() では列名に特定の文字列を含む列を除外します。実装の一部はR言語の dplyr::select() を参考にしました。

-
# 列名に 'length' を含む列を除外
-print(py4st.filtering_out(penguins, contains = 'length').head(3))
-#>   species     island  bill_depth_mm  body_mass_g     sex  year  female
-#> 0  Adelie  Torgersen           18.7       3750.0    male  2007       0
-#> 1  Adelie  Torgersen           17.4       3800.0  female  2007       1
-#> 2  Adelie  Torgersen           18.0       3250.0  female  2007       1
-
-# 列名が 'bill' から始まる列を除外
-print(py4st.filtering_out(penguins, starts_with = 'bill').head(3))
-#>   species     island  flipper_length_mm  body_mass_g     sex  year  female
-#> 0  Adelie  Torgersen              181.0       3750.0    male  2007       0
-#> 1  Adelie  Torgersen              186.0       3800.0  female  2007       1
-#> 2  Adelie  Torgersen              195.0       3250.0  female  2007       1
-
-# 列名が '_mm' で終わる列を除外
-print(py4st.filtering_out(penguins, ends_with = '_mm').head(3))
-#>   species     island  body_mass_g     sex  year  female
-#> 0  Adelie  Torgersen       3750.0    male  2007       0
-#> 1  Adelie  Torgersen       3800.0  female  2007       1
-#> 2  Adelie  Torgersen       3250.0  female  2007       1
-
-
-

2.2 py4stats.regression_tools

-

 py4stats.regression_toolsstatsmodelsライブラリで作成された回帰分析の結果についての表作成と可視化を補助する機能を提供するモジュールです。

-

 py4stats.compare_ols() :計量経済学の実証論文でよく用いられる、回帰分析の結果を列方向に並べて比較する表を作成します。表のフォーマットについてはR言語のtexreg::screenreg()modelsummary::modelsummary()を参考にしています。同種の機能を提供する Python ライブラリーとしては、R言語の stargazer パッケージをもとにした stargazer ライブラリがあります。

-
import statsmodels.formula.api as smf
-
-# 回帰分析の実行
-fit1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()
-fit2 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species', data = penguins).fit()
-fit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()
-
-compare_tab1 = py4st.compare_ols(list_models = [fit1, fit2, fit3]) # 表の作成
-compare_tab1
- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
termmodel 1model 2model 3
Intercept153.7397-1,742.7202 ***843.9812 **
(268.9012)(313.7697)(403.5956)
species[T.Chinstrap]-885.8121 ***-539.6864 ***-245.1516 ***
(88.2502)(86.9425)(84.5952)
species[T.Gentoo]578.6292 ***1,492.8283 ***1,443.3525 ***
(75.3623)(118.4442)(107.7844)
bill_length_mm91.4358 ***55.6461 ***26.5366 ***
(6.8871)(7.2326)(7.2436)
bill_depth_mm179.0434 ***87.9328 ***
(19.0997)(20.2192)
sex[T.male]437.2007 ***
(49.1098)
rsquared_adj0.78100.82580.8613
nobs342342333
df345
-

py4stats.compare_ols() の実行結果は PandasDataFrame として出力されるため、.xlsx. ファイルなどに変換することができます。また、用途に応じて表の体裁を調整できるようにしています。詳細については 「回帰分析の比較」 を参照してください。

-
compare_tab2 = py4st.compare_ols(
-    list_models = [fit1, fit2, fit3],
-    model_name = ['基本モデル', '嘴の高さ追加', '性別追加'], # モデル名を変更
-    stats = 'p_value',        # () 内の値をP-値に変更する
-    add_stars = False,        # 有意性のアスタリスクなし
-    table_style = 'one_line', # 表スタイルを1行表示に設定 'one' でも可能
-    digits = 3                # 小数点以下の桁数を3に設定
-    )
-compare_tab2
- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
term基本モデル嘴の高さ追加性別追加
Intercept153.740(0.568)-1,742.720(0.000)843.981(0.037)
species[T.Chinstrap]-885.812(0.000)-539.686(0.000)-245.152(0.004)
species[T.Gentoo]578.629(0.000)1,492.828(0.000)1,443.353(0.000)
bill_length_mm91.436(0.000)55.646(0.000)26.537(0.000)
bill_depth_mm179.043(0.000)87.933(0.000)
sex[T.male]437.201(0.000)
rsquared_adj0.7810.8260.861
nobs342342333
df345
-

py4stats.coefplot():回帰係数の可視化。R言語の coefplot::coefplot() を参考にしました。

-
import matplotlib.pyplot as plt
-py4st.coefplot(fit3)
-
-
-

-
coefplot1
-
-
-
plt.rcParams["figure.autolayout"] = True
-
-fig, ax = plt.subplots(1, 2, figsize = (2.2 * 5, 5), dpi = 100)
-
-py4st.coefplot(fit2, ax = ax[0])
-ax[0].set_xlim(-900, 1800)
-
-py4st.coefplot(fit3, ax = ax[1], palette = ['#FF6F91', '#F2E5EB'])
-ax[1].set_xlim(-900, 1800);
-
-
-

-
coefplot2
-
-
-

 py4stats.compare_mfx()py4stats.mfxplot() は、それぞれ py4stats.compare_ols()py4stats.coefplot() の一般化線型モデルバージョンです。statsmodels ライブラリの.get_margeff() メソッドから得られた限界効果の推定値を表示します。

-
penguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)
-
-# ロジスティック回帰の実行
-fit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()
-fit_logit2 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm + species', data = penguins).fit()
-
-py4st.compare_mfx([fit_logit1, fit_logit2])
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
termmodel 1model 2
body_mass_g-0.0004 ***-0.0003 ***
(0.0000)(0.0000)
bill_length_mm-0.0053-0.0357 ***
(0.0036)(0.0070)
bill_depth_mm-0.1490 ***-0.1098 ***
(0.0051)(0.0175)
species[T.Chinstrap]0.4172 ***
(0.0848)
species[T.Gentoo]0.3527 ***
(0.1308)
prsquared0.56470.6187
nobs342342
df35
-
plt.rcParams["figure.autolayout"] = True
-
-fig, ax = plt.subplots(1, 2, figsize = (2.2 * 5, 5), dpi = 100)
-
-py4st.mfxplot(fit_logit1, ax = ax[0])
-ax[0].set_xlim(-0.2, 0.85)
-
-py4st.mfxplot(fit_logit2, ax = ax[1], palette = ['#FF6F91', '#F2E5EB'])
-ax[1].set_xlim(-0.2, 0.85);
-
-
-

-
coefplot3
-
-
-
-

Jump to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/Blinder_Oaxaca.html b/docs/docs/man/Blinder_Oaxaca.html deleted file mode 100644 index f1a96e0..0000000 --- a/docs/docs/man/Blinder_Oaxaca.html +++ /dev/null @@ -1,1141 +0,0 @@ - - - - - - - - - -28  py4stats.Blinder_Oaxaca(), py4stats.plot_Blinder_Oaxaca() – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

28  py4stats.Blinder_Oaxaca(), py4stats.plot_Blinder_Oaxaca()

-
- - - -
- - - - -
- - - -
- - -
-

28.1 概要

-

 2つのサブサンプルを用いた回帰分析の推定結果に対して、Blinder-Oaxaca分解を行います。

-
Blinder_Oaxaca(model1, model2)
-
-plot_Blinder_Oaxaca(
-    model1, model2,
-    diff_type = ['observed_diff', 'unobserved_diff'],
-    ax = None, 
-)
-

 いま、ある変数 \(s\) を用いて \(s = m\)\(s = f\) の2つのサブグループからなるデータセットがあるとし、次のような回帰式を仮定します。

-

\[ -\begin{aligned} -Y_{i}^s = \boldsymbol{X}_i^s\boldsymbol{\beta}^s + \epsilon_i^s, && -s = m, f -\end{aligned} -\tag{1} -\]

-

 ここで、\(\boldsymbol{X}_i^s\) サブグループ \(s\) に属する個人 \(i\) についての説明変数からなる行列で、\(\boldsymbol{\beta}^s\) はサブグループ \(s\) のについての回帰係数、\(\epsilon_i^s\) は誤差項です。  さらに、サブグループ \(s\) の被説明変数の平均値を \(\bar{Y}^s\) とし、説明変数の平均値を \(\bar{\boldsymbol{X}}^s\) とするとき、Blinder-Oaxaca分解は2つのグループにおける被説明変数の平均値の差 \(\bar{Y}^m - \bar{Y}^f\) を次のように分解します。

-

\[ -\begin{aligned} -\bar{Y}^m - \bar{Y}^f = (\bar{\boldsymbol{X}}^m - \bar{\boldsymbol{X}}^f)\boldsymbol{\beta}^m + \bar{\boldsymbol{X}}^f(\boldsymbol{\beta}^m - \boldsymbol{\beta}^f) -\end{aligned} -\tag{2} -\]

-

このとき、式(2)右辺の各項は、それぞれ次のような意味を持ちます。

-
    -
  • \((\bar{\boldsymbol{X}}^m - \bar{\boldsymbol{X}}^f)\boldsymbol{\beta}^m\):2つのグループの観測可能な属性の差に起因する被説明変数の差 observed_diff
  • -
  • \(\bar{\boldsymbol{X}}^f(\boldsymbol{\beta}^m - \boldsymbol{\beta}^f)\):2つのグループの観測できない要因の違いに起因する被説明変数の差 unobserved_diff
  • -
-

 式(1)および式(2)については朝井(2014, p.9)を参照しました。

-
-
-

28.2 引数 Argument

-
    -
  • model1statsmodels で作成した回帰分析の結果(必須)。
  • -
  • model2statsmodels で作成した回帰分析の結果(必須)。
  • -
  • diff_typeplot_Blinder_Oaxaca()のみ)list of str or str
     グラフの描画に使用する要約統計量の種類。初期設定では observed_diffunobserved_diff の両方を表示します。
  • -
  • ax:matplotlib の ax オブジェクト。複数のグラフを並べる場合などに使用します。   ## 使用例 Examples
  • -
-
import pandas as pd
-import statsmodels.formula.api as smf
-import py4stats as py4st
-
-wage1 = wooldridge.data('wage1')
-
-fit_female = smf.ols(
-    'lwage ~ educ + exper + expersq + tenure + tenursq + married', 
-    data = wage1.query('female == 1')
-    ).fit()
-
-fit_male = smf.ols(
-    'lwage ~ educ + exper + expersq + tenure + tenursq + married', 
-    data = wage1.query('female == 0')
-    ).fit()
-
py4st.compare_ols(
-    list_models = [fit_female, fit_male],
-    model_name = ['female', 'male']
-    )
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
termfemalemale
Intercept0.3159 **
(0.1401)
0.2255 *
(0.1302)
educ0.0737 ***
(0.0104)
0.0830 ***
(0.0089)
exper0.0200 ***
(0.0072)
0.0329 ***
(0.0076)
expersq-0.0004 ***
(0.0002)
-0.0006 ***
(0.0002)
tenure0.0391 ***
(0.0117)
0.0301 ***
(0.0089)
tenursq-0.0014 ***
(0.0005)
-0.0005 *
(0.0003)
married-0.0548
(0.0539)
0.1718 ***
(0.0595)
rsquared_adj0.24460.4509
nobs252274
df66
-
wage_decomp = py4st.Blinder_Oaxaca(
-    model1 = fit_female,
-    model2 = fit_male
-)
-wage_decomp
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
termsobserved_diffunobserved_diff
Intercept0-0.0903337
educ0.03906610.114713
exper0.03715770.211177
expersq-0.0216026-0.0962631
tenure0.0859831-0.0327949
tenursq-0.03427270.0378497
married0.02788060.118657
-
py4st.plot_Blinder_Oaxaca(
-    model1 = fit_female,
-    model2 = fit_male
-)
-
-
-

-
plot_Blinder_Oaxaca1.png
-
-
-

diff_type を指定することで、一方の統計量だけを表示することもできます。

-
py4st.plot_Blinder_Oaxaca(
-    model1 = fit_female,
-    model2 = fit_male,
-    diff_type = 'unobserved_diff'
-)
-
-
-

-
plot_Blinder_Oaxaca2.png
-
-
-

グラフのサイズや解像度を指定するには、次のように行います。

-
fig, ax = plt.subplots(1, 2, figsize = (1.1 * 2 * 4, 4), sharey = True, dpi = 200)
-
-py4st.plot_Blinder_Oaxaca(
-    model1 = fit_female,
-    model2 = fit_male,
-    ax = ax
-)
-fig.tight_layout()
-
-
-

28.3 参考文献

-
    -
  • 朝井 友紀子 (2014) 「労働市場における男女差の30年― 就業のサンプルセレクションと男女間賃金格差」『日本労働研究雑誌』, No.648, pp.6–16
  • -
-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/Heckit_from_formula.html b/docs/docs/man/Heckit_from_formula.html deleted file mode 100644 index dd3b70e..0000000 --- a/docs/docs/man/Heckit_from_formula.html +++ /dev/null @@ -1,1001 +0,0 @@ - - - - - - - - - -30  heckit_helper.Heckit_from_formula() – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

30  heckit_helper.Heckit_from_formula()

-
- - - -
- - - - -
- - - -
- - -
-

30.1 概要

-
Heckit_from_formula(
-  selection, 
-  outcome, 
-  data, 
-  **kwargs
-  )
-
-
-

30.2 引数 Argument

-
    -
  • selectionstr(必須)
     Type2トービットモデルのうち第1段階の selection equation(選択関数, 就業決定関数)の回帰式
  • -
  • outcomestr(必須)
     Type2トービットモデルのうち第2段階の regression equation(賃金関数)の回帰式
  • -
  • datapandas.DataFrame(必須)
  • -
  • **kwargs
    py4etrics.heckit.Heckit() に渡すその他の引数
  • -
-
-
-

30.3 返り値 Value

-

 3つの要素を持つ tuple。左から順に次の3つのオブジェクトが出力されます。

-
    -
  1. py4etrics.heckit.Heckit() から出力されたモデルの推定結果
  2. -
  3. 第2段階の regression equation(賃金関数)の説明変数からなる pd.DataFrame
  4. -
  5. 第1段階のselection equation(選択関数, 就業決定関数)の説明変数からなる pd.DataFrame
  6. -
-
-
-

30.4 使用例 Examples

-

 heckit_helper モジュールはヘックマンの2段階推定(Heckit)を実行を Py4Etrics モジュールの py4etrics.heckit.Heckit() に依存しているため、事前のインストールをお願いします。

-
pip install git+https://github.com/Py4Etrics/py4etrics.git
-

ここでは春山(2023, Chap.24)のモデルを再現するため、wooldridge モジュールから mroz データを読み込みます。

-
import pandas as pd
-import wooldridge
-from py4stats import heckit_helper
-
-mroz = wooldridge.data('mroz') # サンプルデータの読み込み
-

Heckit_from_formula() 関数を使い、モデルを推定します。なお、Type2トービットモデルを推定する場合、第2段階の回帰式 outcome で使用される説明変数は全て第1段階の回帰式 selection に含まれ、なおかつ selection に含まれるものの、outcome には含まれない説明変数が少なくとも1つは必要であることに注意してください(末石, 2015, p.117)。

-
mod_heckit, exog_outcome, exog_select = \
- heckit_helper.Heckit_from_formula(
-    selection = 'lwage ~ educ + exper + expersq + nwifeinc + age + kidslt6 + kidsge6',
-    outcome = 'lwage ~ educ + exper + expersq',
-    data = mroz
-)
-
-res_heckit = mod_heckit.fit(cov_type_2 = 'HC1')
-
-print(res_heckit.summary())
-#>                            Heckit Regression Results                            
-#> ================================================================================
-#> Dep. Variable:                    lwage   R-squared:                       0.156
-#> Model:                           Heckit   Adj. R-squared:                  0.150
-#> Method:                Heckman Two-Step   F-statistics:                   26.148
-#> Date:                  Mon, 11 Mar 2024   Prob (F-statistic):              0.000
-#> Time:                          08:40:39   Cov in 1st Stage:            nonrobust
-#> No. Total Obs.:                     753   Cov in 2nd Stage:                  HC1
-#> No. Censored Obs.:                  325                                         
-#> No. Uncensored Obs.:                428                                         
-#> ==============================================================================
-#>                  coef    std err          z      P>|z|      [0.025      0.975]
-#> ------------------------------------------------------------------------------
-#> Intercept     -0.5781      0.305     -1.895      0.058      -1.176       0.020
-#> educ           0.1091      0.016      7.026      0.000       0.079       0.139
-#> exper          0.0439      0.016      2.699      0.007       0.012       0.076
-#> expersq       -0.0009      0.000     -1.957      0.050      -0.002    1.15e-06
-#> ==============================================================================
-#>                  coef    std err          z      P>|z|      [0.025      0.975]
-#> ------------------------------------------------------------------------------
-#> Intercept      0.2701      0.509      0.531      0.595      -0.727       1.267
-#> educ           0.1309      0.025      5.183      0.000       0.081       0.180
-#> exper          0.1233      0.019      6.590      0.000       0.087       0.160
-#> expersq       -0.0019      0.001     -3.145      0.002      -0.003      -0.001
-#> nwifeinc      -0.0120      0.005     -2.484      0.013      -0.022      -0.003
-#> age           -0.0529      0.008     -6.235      0.000      -0.069      -0.036
-#> kidslt6       -0.8683      0.119     -7.326      0.000      -1.101      -0.636
-#> kidsge6        0.0360      0.043      0.828      0.408      -0.049       0.121
-#> ================================================================================
-#>                    coef    std err          z      P>|z|      [0.025      0.975]
-#> --------------------------------------------------------------------------------
-#> IMR (Lambda)     0.0323      0.134      0.241      0.809      -0.230       0.294
-#> =====================================
-#> rho:                            0.049
-#> sigma:                          0.664
-#> =====================================
-#> 
-#> First table are the estimates for the regression (response) equation.
-#> Second table are the estimates for the selection equation.
-#> Third table is the estimate for the coef of the inverse Mills ratio (Heckman's Lambda).
-
-
-

30.5 参考文献

-
    -
  • 末石直也(2015)『計量経済学:ミクロデータ分析へのいざない』 日本評論社.
  • -
  • 春山鉄源(2023) 『Pythonで学ぶ入門計量経済学』 https://py4etrics.github.io/index.html
  • -
-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/Pareto_plot.html b/docs/docs/man/Pareto_plot.html deleted file mode 100644 index b5f99e5..0000000 --- a/docs/docs/man/Pareto_plot.html +++ /dev/null @@ -1,970 +0,0 @@ - - - - - - - - - -7  py4stats.Pareto_plot(): パレート図の作成 – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

7  py4stats.Pareto_plot(): パレート図の作成

-
- - - -
- - - - -
- - - -
- - -
-

7.1 概要

-

データフレームからパレート図を作図する関数です。

-
Pareto_plot(
-    data: IntoFrameT,
-    group: str,
-    values: Optional[str] = None,
-    top_n: Optional[int] = None,
-    aggfunc: Callable[..., Any] = np.mean,
-    ax: Optional[Axes] = None,
-    fontsize: int = 12,
-    xlab_rotation: Union[int, float] = 0,
-    palette: Sequence[str] = ("#478FCE", "#252525"),
-    )
-
    -
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • -
  • groupstr
     集計に使用するデータフレームの列名(必須)。
  • -
  • valuesstr
     集計に使用するデータフレームの列名。values = None(初期設定)の場合、group 別の度数が表示され、values が指定された場合、group 別に valuesaggfuncで集計した値がグラフに表示されます。
  • -
  • top_nint
     棒グラフを表示するカテゴリーの件数。top_n = None(初期設定)の場合、すべてのカテゴリーを表示し、整数値が指定された場合、上位 top_n 件が表示されます。
  • -
  • aggfunccallable
    values が指定された際に、集計に使用する集計関数。np.mean など values 列を1次元配列として受け取って単一の数値を返す任意の関数が使用できるほか、nw.mean など narwhals.functions モジュールで実装された関数を使用できます。
  • -
  • ax
    描画先となる matplotlib の Axes。複数のグラフを並べる場合などに使用します。デフォルトの None の場合は、新しい Figure と Axes が作成されます。
  • -
  • fontsizeint
     軸ラベルなどのフォントサイズ。
  • -
  • xlab_rotationint or float
    横軸ラベルの角度。matplotlib の ax.xaxis.set_tick_params() に引数 rotation として渡されます。
  • -
  • palettelist of str
    グラフの描画に使用する色コード。1つ目の要素が棒グラフの色に、2つ目の累積値を表す折線グラフの色に対応します。
  • -
-
-
-

7.2 使用例

-
import py4stats as py4st
-import pandas as pd
-import numpy as np
-from palmerpenguins import load_penguins
-penguins = load_penguins() # サンプルデータの読み込
-
-penguins['group'] = penguins['species'] + '\n' + penguins['island']
-
-py4st.Pareto_plot(penguins, group = 'group')
-
-
-

-
Pareto_plot1
-
-
-
py4st.Pareto_plot(
-    penguins, group = 'group', 
-    values = 'bill_length_mm',
-    aggfunc = np.mean,
-    palette = ['#FF6F91', '#252525']
-    )
-
-
-

-
Pareto_plot2
-
-
-
py4st.Pareto_plot(
-    penguins, 
-    values = 'bill_length_mm',
-    group = 'group',
-    aggfunc = lambda x: x.std()
-    )
-
-
-

-
Pareto_plot3
-
-
-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/arg_match.html b/docs/docs/man/arg_match.html deleted file mode 100644 index d805320..0000000 --- a/docs/docs/man/arg_match.html +++ /dev/null @@ -1,985 +0,0 @@ - - - - - - - - - -32  引数のアサーション building_block.arg_match() – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

32  引数のアサーション building_block.arg_match()

-
- - - -
- - - - -
- - - -
- - -
-

32.1 概要

-

 R言語の rlang::arg_match() をオマージュした関数で、文字列で与えられた引数のアサーションを行います。

-
arg_match(
-    arg: Union[str, Sequence[str], pd.Series, np.ndarray],
-    values: Sequence[str],
-    arg_name: Optional[str] = None,
-    multiple: bool = False,
-    any_missing: bool = False,
-    all_missing: bool = False,
-    nullable: bool = False
-    )
-
-
-

32.2 引数 Argument

-
    -
  • arg(必須)str or list of str
     適正かどうかを判断したい引数の値
  • -
  • values(必須):list of str
     引数 arg の適正な値のリスト
  • -
  • arg_namestr
     エラーメッセージに表示する引数の名前。指定されなかった場合(初期設定)、引数 arg に代入されたオブジェクトの名称を表示します。なお、この機能は varname.argname()関数を使って実装されています。
  • -
  • multiplebool
     引数の値として複数の値を許容するかどうかを示すブール値。arg にリストが代入された場合、multiple = False(初期設定)であれば最初の値のみを出力し、multiple = True であればリストの値を全て出力します。
  • -
  • any_missing:bool
    True の場合、欠測値(例:NoneNaNpd.NA など)が引数 arg一部に含まれていても許容されます。
  • -
  • all_missing: bool
    True の場合、すべての要素が欠測値であることを許容します。
  • -
  • nullable: bool
    True の場合、引数そのものが None であることを許容します。
  • -
-
-
-

32.3 返り値 Value

-

 引数 arg に代入された値が、values に代入されたリストに含まれていればその値を返し、そうでなければエラーメッセージを出力します。エラーメッセージでは values に代入されたリストの値を arg の適正な値の候補として提示します。

-
-
-

32.4 使用例 Examples

-
from py4stats import building_block as build
-
-def my_faivarit(fruits):
-  fruits = build.arg_match(
-      fruits, arg_name = 'fruits',
-      values = ['apple', 'orange', 'grape'], 
-      multiple = False
-      )
-  return fruits
-
-my_faivarit('apple')
-#> 'apple'
-
-my_faivarit('orang')
-#> ValueError: `fruits` must be one of 'apple', 'orange' or 'grape', not 'orang'.
-#>              Did you mean 'orange'?
-
-my_faivarit('ap')
-#> ValueError: `fruits` must be one of 'apple', 'orange' or 'grape', not 'ap'.
-#>              Did you mean 'apple' or 'grape'?
-
# arg に list を指定した場合
-# 初期設定では1つ目の要素だけ使用されます。
-my_faivarit(['apple', 'orange'])
-#> 'apple'
-
-# multiple = True として再度関数を定義
-def my_faivarit2(fruits):
-  fruits = build.arg_match(
-      fruits, arg_name = 'fruits',
-      values = ['apple', 'orange', 'grape'], 
-      multiple = True
-      )
-  return fruits
-
-my_faivarit2(['apple', 'orange'])
-#> ['apple', 'orange']
-
-my_faivarit2(['apple', 'orang'])
-#> ValueError: `fruits` must be one of 'apple', 'orange' or 'grape', not 'orang'.
-#>              Did you mean 'orange'?
-

 Py4Stats では eda_tools.tabyl()regression_tools.compare_ols() など、文字列で指定する引数をもつ関数で、引数のアサーションに build.arg_match() を使用しています。

-
import py4stats as py4st
-import pandas as pd
-from palmerpenguins import load_penguins
-penguins = load_penguins() # サンプルデータの読み込
-
-py4st.tabyl(penguins, 'island', 'species', normalize = 'ind')
-#> ValueError: `normalize` must be one of 'index', 'columns' or 'all', not 'ind'.
-#>              Did you mean 'index'?
-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/assert_dtype.html b/docs/docs/man/assert_dtype.html deleted file mode 100644 index d0e161e..0000000 --- a/docs/docs/man/assert_dtype.html +++ /dev/null @@ -1,1060 +0,0 @@ - - - - - - - - - -33  データ型による引数のアサーション – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

33  データ型による引数のアサーション

-
- - - -
- - - - -
- - - -
- - -
-

33.1 概要

-

 R言語の checkmate パッケージの関数群をオマージュした、引数に代入された値が想定されたデータ型ではないときにエラーを出力する関数です。

-
assert_character(
-    arg: Any, 
-    arg_name: Optional[str] = None,
-    len_arg: Optional[int] = None,
-    len_min: int = 1,
-    len_max: Optional[int] = None,
-    any_missing: bool = False,
-    all_missing: bool = False,
-    nullable: bool = False,
-    scalar_only: bool = False
-    )
-
-assert_logical(
-    arg: Any, 
-    arg_name: Optional[str] = None,
-    len_arg: Optional[int] = None,
-    len_min: int = 1,
-    len_max: Optional[int] = None,
-    any_missing: bool = False,
-    all_missing: bool = False,
-    nullable: bool = False,
-    scalar_only: bool = False
-    )
-
-assert_numeric(
-    arg: Any,
-    arg_name: Optional[str] = None,
-    lower = -float('inf'), 
-    upper = float('inf'), 
-    inclusive: Literal["both", "neither", "left", "right"] = "both",
-    len_arg: Optional[int] = None,
-    len_min: int = 1,
-    len_max: Optional[int] = None,
-    any_missing: bool = False,
-    all_missing: bool = False,
-    nullable: bool = False,
-    scalar_only: bool = False
-    )
-
-assert_integer(
-    arg: Any,
-    arg_name: Optional[str] = None,
-    lower = -float('inf'), 
-    upper = float('inf'), 
-    inclusive: Literal["both", "neither", "left", "right"] = "both",
-    len_arg: Optional[int] = None,
-    len_min: int = 1,
-    len_max: Optional[int] = None,
-    any_missing: bool = False,
-    all_missing: bool = False,
-    nullable: bool = False,
-    scalar_only: bool = False
-    )
-
-assert_count(
-    arg: Any,
-    arg_name: Optional[str] = None,
-    lower = 0, 
-    upper = float('inf'), 
-    inclusive: Literal["both", "neither", "left", "right"] = "both",
-    len_arg: Optional[int] = None,
-    len_min: int = 1,
-    len_max: Optional[int] = None,
-    any_missing: bool = False,
-    all_missing: bool = False,
-    nullable: bool = False,
-    scalar_only: bool = False
-    )
-
-assert_float(
-    arg: Any,
-    arg_name: Optional[str] = None,
-    lower = -float('inf'), 
-    upper = float('inf'), 
-    inclusive: Literal["both", "neither", "left", "right"] = "both",
-    len_arg: Optional[int] = None,
-    len_min: int = 1,
-    len_max: Optional[int] = None,
-    any_missing: bool = False,
-    all_missing: bool = False,
-    nullable: bool = False,
-    scalar_only: bool = False
-    )
-

 それぞれの関数は第一引数 arg に代入された array-like オブジェクトの要素が、次の型ではない場合にエラーを出力します。

-
    -
  • assert_character()str
  • -
  • assert_numeric()int or float
  • -
  • assert_integer()int
  • -
  • assert_count()int
  • -
  • assert_float()float
  • -
-
-
-

33.2 引数 Argument

-
    -
  • arg(必須)array-like
     適正かどうかを判断したい引数。検証対象となる引数。スカラー値、または array-like オブジェクト(例:list、NumPy 配列、pandas Series)を指定できます。
  • -
  • arg_namestr
     エラーメッセージに表示する引数の名前。None の場合、可能であれば arg に渡された変数名が自動的に推定されます。なお、この機能は varname.argname()関数を使って実装されています。
  • -
  • lower, upperint or float
     arg に代入されたオブジェクトの要素が取るべき値の最大値と最小値。
  • -
  • inclusive:str
     値の範囲チェックにおいて、境界値を含めるかどうかを表す文字列。
    'both', 'neither', 'left', 'right' から選択できます。
    -
      -
    • 'both'lower <= x <= upper
    • -
    • 'neither'lower < x < upper
    • -
    • 'left'lower <= x < upper
    • -
    • 'right'lower < x <= upper
    • -
  • -
  • len_arg: int 引数の要素数を表す自然数:要素数をこの値と正確に一致させたい場合に指定します。len_arg を指定した場合、引数はちょうどこの個数の要素をもつ必要があります。
     引数の長さは、Nonenp.nan などの欠測値を含む要素数をもとに判定されます。例えば引数の要素が arg = [1, None, 3] のとき、len_arg = 3なら正常として判定され、len_arg = 2 ならエラーが出されます。
  • -
  • len_min, len_max:: int
    許容される最小の要素数と最大の要素数。len_max = None の場合、上限は設けられません。
  • -
  • any_missing:bool
    True の場合、欠測値(例:NoneNaNpd.NA など)が引数 arg一部に含まれていても許容されます。
  • -
  • all_missing: bool
    True の場合、すべての要素が欠測値であることを許容します。
  • -
  • nullable: bool
    True の場合、引数そのものが None であることを許容します。
  • -
  • scalar_only: bool
    True の場合、スカラー値のみを許容します。この場合、1要素であっても、list や配列などの array-like オブジェクトは受け付けません。
  • -
-
-
-

33.3 返り値 Value

-

引数 arg に代入されたオブジェクトの全ての要素が、アサーションの条件を満たしていれば何も返さず、そうでなければエラーメッセージを出力します。

-
-
-

33.4 使用例 Examples

-
from py4stats import building_block as build
-x = [1, 2, 3]
-y = ['A', 'B', 'C']
-
-build.assert_character(x, arg_name = 'x')
-#> TypeError: Argument `x` must be of type 'str'.
-
-build.assert_character(y, arg_name = 'y')
-
build.assert_numeric(x, arg_name = 'x')
-
-build.assert_numeric(y, arg_name = 'y')
-#> TypeError: Argument `y` must be of type 'int' or 'float' with value(s) -inf <= x <= inf.
-
-z = [0.1, 0.3, 0.6]
-build.assert_numeric(z, arg_name = 'z', lower = 0, upper = 1)
-
-z.extend([2, 3])
-build.assert_numeric(z, arg_name = 'z', lower = 0, upper = 1)
-#> ValueError: Argument `z` must have value 0 <= x <= 1
-#> element '3' and '4' of 'z' not sutisfy the condtion.
-
-z = 1
-build.assert_numeric(
-    z, arg_name = 'z', 
-    lower = 0, upper = 1, 
-    inclusive = 'left'
-    )
-#> ValueError: Argument `z` must have value 0 <= x < 1.
-
-
-

33.5 参照

-

 データ型の判定にはこちらの関数を使用しています。

-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/coefplot.html b/docs/docs/man/coefplot.html deleted file mode 100644 index 3fa8bee..0000000 --- a/docs/docs/man/coefplot.html +++ /dev/null @@ -1,1011 +0,0 @@ - - - - - - - - - -24  回帰分析による推定値の視覚化:py4stats.coefplot(), py4stats.mfxplot() – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

24  回帰分析による推定値の視覚化:py4stats.coefplot(), py4stats.mfxplot()

-
- - - -
- - - - -
- - - -
- - -
-

24.1 概要

-

 グラフ上の縦軸が説明変数、横軸回帰係数の値です。点が回帰係数の推定値を、エラーバー(横棒)が信頼区間を表します。

-
coefplot(
-    mod, 
-    subset = None, 
-    conf_level = [0.95, 0.99], 
-    palette = ['#1b69af', '#629CE7'], 
-    show_Intercept = False,
-    show_vline = True,
-    ax = None,
-    **kwargs
-)
-
-mfxplot(
-    mod, 
-    subset = None, 
-    conf_level = [0.95, 0.99], 
-    at = 'overall',
-    method = 'dydx',
-    dummy = False,
-    palette = ['#1b69af', '#629CE7'], 
-    show_Intercept = False,
-    show_vline = True,
-    ax = None,
-    **kwargs
-)
-
-
-

24.2 引数 Argument

-
    -
  • modstatsmodels で作成した回帰分析の結果(必須)。

  • -
  • subset:グラフに回帰係数を表示する説明変数のリスト。指定しなければモデルに含まれる全ての説明変数を使用します。また subset に指定された順番に合わせてグラフ内での回帰係数の並び順が変更されます。

  • -
  • conf.level:信頼区間の計算に用いる信頼係数。1つ目の要素が太い方のエラーバーの幅に、2つ目の要素が細い方のエラーバーの幅に対応します。初期設定は [0.95, 0.99] です。

  • -
  • palette:グラフの描画に使用する色コード。1つ目の要素が太い方のエラーバーの色に、2つ目の要素が細い方のエラーバーの色に対応します。

  • -
  • show_Intercept:切片の係数を表示するかどうか。True だと切片の係数を表示し、False(初期設定)だと表示しません。

  • -
  • show_vline:回帰係数 = 0 の垂直線を表示するかどうか。True (初期設定)を指定すると垂直線を表示し、False を指定すると表示されません。

  • -
  • ax:matplotlib の ax オブジェクト。複数のグラフを並べる場合などに使用します。

  • -
  • at:限界効果の集計方法(mfxplot() のみ)。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 at として渡されます。method = 'coef' を指定した場合、この引数は無視されます。

    -
      -
    • 'overall':各観測値の限界効果の平均値を表示(初期設定)
    • -
    • 'mean':各説明変数の平均値における限界効果を表示
    • -
    • 'median':各説明変数の中央値における限界効果を表示
    • -
    • 'zero':各説明変数の値がゼロであるときの限界効果を表示
    • -
  • -
  • method:推定する限界効果の種類(mfxplot() のみ)。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 method として渡されます。ただし、method = 'coef' を指定した場合には限界効果を推定せずに回帰係数をそのまま表示します。

    -
      -
    • 'coef':回帰係数の推定値を表示
    • -
    • 'dydx':限界効果の値を変換なしでそのまま表。(初期設定)
    • -
    • 'eyex':弾力性 d(lny)/d(lnx) の推定値を表示
    • -
    • 'dyex':準弾力性 dy /d(lnx) の推定値を表示
    • -
    • 'eydx':準弾力性 d(lny)/dx の推定値を表示
    • -
  • -
  • dummy:ダミー変数の限界効果の推定方法(mfxplot() のみ)。もし False (初期設定)であれば、ダミー変数を連続な数値変数として扱います。もし、True であればダミー変数が0から1へと変化したときの予測値の変化を推定します。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 dummy として渡されます。

  • -
-
-
-

24.3 使用例

-
import py4stats as py4st
-import statsmodels.formula.api as smf
-import pandas as pd
-import numpy as np
-import matplotlib.pyplot as plt
-
-from palmerpenguins import load_penguins
-penguins = load_penguins() # サンプルデータの読み込み
-
-
-# 回帰分析の実行
-fit2 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species', data = penguins).fit()
-fit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()
-
-py4st.coefplot(fit3)
-
-
-

-
coefplot1
-
-
-
plt.rcParams["figure.autolayout"] = True
-
-fig, ax = plt.subplots(1, 2, figsize = (2.2 * 5, 5), dpi = 100)
-
-py4st.coefplot(fit2, ax = ax[0])
-ax[0].set_xlim(-900, 1800)
-
-py4st.coefplot(fit3, ax = ax[1], palette = ['#FF6F91', '#F2E5EB'])
-ax[1].set_xlim(-900, 1800);
-
-
-

-
coefplot2
-
-
-
penguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)
-
-# ロジスティック回帰の実行
-fit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()
-fit_logit2 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm + species', data = penguins).fit()
-
plt.rcParams["figure.autolayout"] = True
-
-fig, ax = plt.subplots(1, 2, figsize = (2.2 * 5, 5), dpi = 100)
-
-py4st.mfxplot(fit_logit1, ax = ax[0])
-ax[0].set_xlim(-0.2, 0.85)
-
-py4st.mfxplot(fit_logit2, ax = ax[1], palette = ['#FF6F91', '#F2E5EB'])
-ax[1].set_xlim(-0.2, 0.85);
-

coefplot3 *** Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/compare_df_cols.html b/docs/docs/man/compare_df_cols.html deleted file mode 100644 index a72965b..0000000 --- a/docs/docs/man/compare_df_cols.html +++ /dev/null @@ -1,977 +0,0 @@ - - - - - - - - - -14  py4stats.compare_df_cols(), py4stats.compare_df_stats() – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

14  py4stats.compare_df_cols(), py4stats.compare_df_stats()

-
- - - -
- - - - -
- - - -
- - -
-

14.1 概要

-

 R言語の janitor::compare_df_cols() をオマージュした関数で、compare_df_cols() は複数の pandas.DataFrame に含まれる同じ名前を持つ列同士のデータ型 dtype を比較し、compare_df_stats() は同じ名前を持つ列同士の記述統計量を比較します。

-
compare_df_cols(
-    df_list: Union[List[IntoFrameT], Mapping[str, IntoFrameT]],
-    df_name: Optional[List[str]] = None,
-    return_match: Literal["all", "match", "mismatch"] = 'all',
-    dropna:bool = False,
-    to_native: bool = True
-)
-
-compare_df_stats(
-    df_list: List[IntoFrameT],
-    df_name: Optional[List[str]] = None,
-    return_match: Literal["all", "match", "mismatch"] = "all",
-    stats: Callable[..., Any] = np.mean,
-    rtol: float = 1e-05,
-    atol: float = 1e-08,
-    to_native: bool = True,
-    **kwargs: Any,
-)
-
-
-

14.2 引数 Argument

-
    -
  • df_list(必須) A list or dict of IntoFrameT
     列を比較するデータフレームのリストもしくは辞書オブジェクト。辞書が df_name が未指定の場合、辞書の keys を df_name として使用します。
  • -
  • df_name list of str
     表頭に表示するデータフレームの名前。['df1', 'df2'] のように文字列のリストを指定してください。初期設定では、自動的に df1, df2, df3 … と連番が割り当てられます。
  • -
  • return_match str
     出力に反映する変数の範囲を表す文字列。次の値から選択できます。 -
      -
    • 'all'(初期設定): 全ての列を表示。
    • -
    • 'match':全てのデータフレームで dtype が一致している列のみを表示。
    • -
    • 'mismatch':少なくとも1つのデータフレームで dtype が一致していない列のみを表示。
    • -
  • -
  • dropna bool (compare_df_cols() のみ)
     データ型 dtype の一致判定に当たり、NaN を無視するかどうか。初期設定 False の場合、すべてのデータフレームが同名かつ同じデータ型の列を持たない限り、ミスマッチが発生したと判定されます。
  • -
  • stats str or function
     比較に用いる記述統計量を定義する関数。np.mean など values 列を1次元配列として受け取って単一の数値を返す任意の関数が使用できるほか、nw.mean など narwhals.functions モジュールで実装された関数を使用できます。初期設定は np.mean です。
  • -
-
-
-

14.3 使用例 Examples

-
import pandas as pd
-import py4stats as py4st
-
-df1 = pd.DataFrame({'x':[1, 2, 3], 'y':[5,   4, 2], 'z':[True, False, True]})
-df2 = pd.DataFrame({'x':[1, 2, 3], 'y':[5.0, 4, 2], 'z':['True', 'False', 'True']})
-
-print(py4st.compare_df_cols([df1, df2]))
-#>   term    df1      df2  match_dtype
-#> 0    x  int64    int64         True
-#> 1    y  int64  float64        False
-#> 2    z   bool   object        False
-

return_match = 'mismatch' を指定すると、データフレームの中で、dtype が一致していないものがある列を返します。

-
print(py4st.compare_df_cols(
-    [df1, df2], return_match = 'mismatch'
-    ))
-#>   term    df1      df2  match_dtype
-#> 1    y  int64  float64        False
-#> 2    z   bool   object        False
-

 py4st.compare_df_stats() は数値変数の記述統計量を比較するため、異なる経路で行われたデータ処理の結果が一致しているかを検証する場合に便利です。

-
from palmerpenguins import load_penguins
-penguins = load_penguins()
-penguins2 = penguins.copy()
-vars = ['flipper_length_mm', 'body_mass_g']
-penguins2.loc[:, vars] = py4st.scale(penguins2.loc[:, vars])
-
-print(
-    py4st.compare_df_stats([penguins, penguins2]).round(2)
-)
-#>                 term      df1      df2  match_stats
-#> 0      bill_depth_mm    17.15    17.15         True
-#> 1     bill_length_mm    43.92    43.92         True
-#> 2        body_mass_g  4201.75     0.00        False
-#> 3  flipper_length_mm   200.92    -0.00        False
-#> 4               year  2008.03  2008.03         True
-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/compare_group_stats.html b/docs/docs/man/compare_group_stats.html deleted file mode 100644 index 06690ba..0000000 --- a/docs/docs/man/compare_group_stats.html +++ /dev/null @@ -1,1063 +0,0 @@ - - - - - - - - - -15  統計量に基づくグループ間比較 – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

15  統計量に基づくグループ間比較

-
- - - -
- - - - -
- - - -
- - -
-

15.1 概要

-

これら関数は、入力された2つのデータフレームについて、各数値変数の統計量に基づいた比較を提供します。

-
compare_group_means(
-    group1: IntoFrameT,
-    group2: IntoFrameT,
-    group_names: Sequence[str] = ('group1', 'group2'),
-    columns: Literal['common', 'all'] = 'all',
-    to_native: bool = True
-    )
-
-compare_group_median(
-    group1: IntoFrameT,
-    group2: IntoFrameT,
-    group_names: Sequence[str] = ('group1', 'group2'),
-    columns: Literal['common', 'all'] = 'all',
-    to_native: bool = True
-    )
-
-plot_mean_diff(
-    group1: IntoFrameT,
-    group2: IntoFrameT,
-    stats_diff: Literal["norm_diff", "abs_diff", "rel_diff"] = "norm_diff",
-    ax: Optional[Axes] = None,
-    )
-
-plot_median_diff(
-    group1: IntoFrameT,
-    group2: IntoFrameT,
-    stats_diff: Literal["abs_diff", "rel_diff"] = "rel_diff",
-    ax: Optional[Axes] = None,
-    )
-
-
-

15.2 引数 Argument

-
    -
  • group1(必須)a pandas.DataFrame
     数値変数を含む pandas.DataFrame で group2 との比較対象となるもの
  • -
  • group2(必須)a pandas.DataFrame
     数値変数を含む pandas.DataFrame で group1 との比較対象となるもの
  • -
  • group_names list of str
     表頭に表示するグループの名前。['group1', 'group2'] のように、2つの要素をもつ文字列のリストとして指定してください。
  • -
  • columns str
    2つのグループの結果を結合する際に含める変数を指定します。 -
      -
    • "common": 両方のグループに存在する変数のみが含まれます。
    • -
    • "all": いずれかのグループに存在する全ての変数が含まれます。この場合、一方のグループにのみ存在する変数についての差分統計量は、欠損値(例:NaN または None)となります。
    • -
  • -
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • -
  • stats_diff: strplot_mean_diff() および plot_median_diff() のみ)
     グラフの描画に使用する差分統計量。'norm_diff'plot_mean_diff() のみ)、'abs_diff', 'rel_diff' のいずれかから選ぶことができます。
  • -
-
-
-

15.3 返り値 Value

-

 compare_group_means()関数および, compare_group_median() 関数では、次の値をもつ pandas.DataFrame が出力されます。

-
    -
  • group1, group2(初期設定の場合)
     各グループにおける記述統計統計量の値
  • -
  • norm_diffcompare_group_means() のみ)
     標準化された平均値の差で、2つのグループの平均値を \(\bar{X}_1\), \(\bar{X}_2\)、分散を \(s^2_1, s^2_2\) とし、サンプルサイズを \(n_1, n_2\) とするとき、次式のように定義されます。
  • -
-

\[ -\delta = \frac{\bar{X}_1 - \bar{X}_2}{s},~~~~~ s^2 = \frac{(n_1-1)s_1^2 + (n_2-1)s_2^2}{n_1 + n_2 - 2} -\]

-
    -
  • abs_diff
    2つのグループの記述統計量の絶対差
  • -
  • rel_diff
    2つのグループの記述統計量の相対差。2つのグループの記述統計量を \(\bar{X}_1\), \(\bar{X}_2\) とするとき、次式のように定義されます。
  • -
-

\[ -\delta = \cfrac{\bar{X}_1 - \bar{X}_2}{\cfrac{\bar{X}_1 + \bar{X}_2}{2}} -= 2 \cdot \frac{\bar{X}_1 - \bar{X}_2}{\bar{X}_1 + \bar{X}_2} -\]

-

plot_mean_diff() 関数および, plot_median_diff() 関数では、グループ別の記述統計両の差をグラフとして可視化します。詳細は使用例を参照して下さい。

-
-
-

15.4 使用例 Examples

-
import pandas as pd
-import py4stats as py4st
-from palmerpenguins import load_penguins
-
-penguins = load_penguins().drop('year', axis = 1) # サンプルデータの読み込み
-
res1 = py4st.compare_group_means(
-    penguins.query('species == "Gentoo"'),
-    penguins.query('species == "Adelie"')
-)
-print(res1.round(3))
-#>             variable    group1    group2  norm_diff  abs_diff  rel_diff
-#> 0      bill_depth_mm    14.982    18.346     -3.012     3.364    -0.202
-#> 1     bill_length_mm    47.505    38.791      3.048     8.713     0.202
-#> 2        body_mass_g  5076.016  3700.662      2.868  1375.354     0.313
-#> 3  flipper_length_mm   217.187   189.954      4.180    27.233     0.134
-
res2 = py4st.compare_group_median(
-    penguins.query('species == "Gentoo"'),
-    penguins.query('species == "Adelie"'),
-    group_names = ['Gentoo', 'Adelie']
-)
-print(res2.round(3))
-#>             variable    Gentoo    Adelie  abs_diff  rel_diff
-#> 0      bill_depth_mm    14.982    18.346     3.364    -0.202
-#> 1     bill_length_mm    47.505    38.791     8.713     0.202
-#> 2        body_mass_g  5076.016  3700.662  1375.354     0.313
-#> 3  flipper_length_mm   217.187   189.954    27.233     0.134
-
py4st.plot_mean_diff(
-    penguins.query('species == "Gentoo"'),
-    penguins.query('species == "Adelie"'),
-    stats_diff = 'norm_diff'
-)
-
-
-

-
plot_mean_diff1
-
-
-
py4st.plot_mean_diff(
-    penguins.query('species == "Gentoo"'),
-    penguins.query('species == "Adelie"'),
-    stats_diff = 'abs_diff'
-)
-
-
-

-
plot_mean_diff2
-
-
-
py4st.plot_median_diff(
-    penguins.query('species == "Gentoo"'),
-    penguins.query('species == "Adelie"'),
-    stats_diff = 'rel_diff'
-)
-
-
-

-
plot_median_diff1
-
-
-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/compare_mfx.html b/docs/docs/man/compare_mfx.html deleted file mode 100644 index 90fa9a3..0000000 --- a/docs/docs/man/compare_mfx.html +++ /dev/null @@ -1,1093 +0,0 @@ - - - - - - - - - -23  限界効果の比較:py4stats.compare_mfx() – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

23  限界効果の比較:py4stats.compare_mfx()

-
- - - -
- - - - -
- - - -
- - -
-

23.1 概要

-

 sm.glm()の推定結果を計量経済学の実証論文でよく用いられる、回帰分析の結果を縦方向に並べて比較する表を作成します。表のフォーマットについてはR言語の texreg::screenreg()modelsummary::modelsummary()を参考にしています。

-
compare_mfx(
-    list_models, 
-    model_name = None,
-    subset = None,
-    stats = 'std_err',
-    add_stars = True,
-    stats_glance = ['prsquared', 'nobs', 'df'],
-    at = 'overall',
-    method = 'dydx',
-    dummy = False,
-    digits = 4, 
-    table_style = 'two_line',
-    line_break = '\n',
-    **kwargs
-)
-
-
-

23.2 引数 Argument

-
    -
  • list_models
    推定結果を表示する分析結果のリスト(必須)。sm.glm()で作成された一般化線形モデルの結果を list_models = [fit1, fit2] のようにリストとして指定してください。

  • -
  • model_namelist of str
    表頭に表示するモデルの名前。['モデル1', 'モデル2'] のように文字列のリストを指定してください。初期設定では、自動的に model 1, model 2, model 3 … と連番が割り当てられます。

  • -
  • subsetlist of str
    表示する回帰係数のリスト。指定しない場合(初期設定)、モデルに含まれる全ての回帰係数が表示されます。内部ではpandas.DataFrame.locメソッドを用いて処理を行っているため、['変数1', '変数2', ...] のような文字列のリスト、[True, False, True, ...] のようなブール値のリストに対応しています。文字列のリストが指定された場合、リストの並び順に合わせて回帰係数が表示されます。

  • -
  • statsstr
    表中の丸括弧 ( ) 内に表示する統計値の設定。次の値が指定できます。

    -
      -
    • 'std_err' 標準誤差(初期設定)
    • -
    • 'p_value' p-値
    • -
    • 'statistics' t統計量
    • -
  • -
  • add_starsbool
    回帰係数の統計的有意性を表すアスタリスク * を表示するかどうかを表すブール値。add_stars = True(初期-設定)なら表示、add_stars = Falseなら非表示となります。table_style'two_line' を指定した場合はアスタリスクは回帰係数の直後に表示され、'one_line' を指定した場合は stats で指定した統計値の後に表示されます。アスタリスクはp-値の値に応じて次のように表示されます。

  • -
  • starsdictp_stars() のみ)
     有意性を示す記号を key に、表示を切り替える閾値を値(value)にもつ辞書オブジェクト。初期設定の stars = None の場合、下記の方式で表示されます。

    -
  • -
  • stats_glance:list of str

  • -
  • 表の下部に追加する当てはまりの尺度の種類を表す文字列のリスト。リストの値には次の値を指定できます。なお、None もしくは空のリスト [ ] が指定された場合には非表示となります。

    -
      -
    • 'rsquared':決定係数
    • -
    • 'rsquared_adj':自由度調整済み決定係数
    • -
    • 'nobs':サインプルサイズ
    • -
    • 'df':モデルの自由度(説明変数の数)
    • -
    • 'sigma':回帰式の標準誤差
    • -
    • 'F_values':全ての回帰係数がゼロであることを帰無仮説とするF検定の統計量
    • -
    • 'p_values':F検定のP-値
    • -
    • 'AIC':赤池情報量基準
    • -
    • 'BIC':ベイズ情報量基準
    • -
  • -
  • digits: int
    回帰係数と統計値について表示する小数点以下の桁数。初期設定は4です。

  • -
  • table_style: str
    表の書式を表す文字列。次の値から選択できます(部分一致可)。

    -
      -
    • 'two_line'回帰係数と統計値を2行に分ける(初期設定)
    • -
    • 'one_line'回帰係数と統計値を1行で表示する
    • -
  • -
  • line_break: str
    table_style = 'two_line' とした場合に使用される改行記号。table_style = 'one_line' とした場合、この引数は無視されます。

  • -
  • at: str
    限界効果の集計方法。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 at として渡されます。method = 'coef' を指定した場合、この引数は無視されます。

    -
      -
    • 'overall':各観測値の限界効果の平均値を表示(初期設定)
    • -
    • 'mean':各説明変数の平均値における限界効果を表示
    • -
    • 'median':各説明変数の中央値における限界効果を表示
    • -
    • 'zero':各説明変数の値がゼロであるときの限界効果を表示
    • -
  • -
  • method: str
    推定する限界効果の種類。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 method として渡されます。ただし、method = 'coef' を指定した場合には限界効果を推定せずに回帰係数をそのまま表示します。

    -
      -
    • 'coef':回帰係数の推定値を表示
    • -
    • 'dydx':限界効果の値を変換なしでそのまま表。(初期設定)
    • -
    • 'eyex':弾力性 d(lny)/d(lnx) の推定値を表示
    • -
    • 'dyex':準弾力性 dy /d(lnx) の推定値を表示
    • -
    • 'eydx':準弾力性 d(lny)/dx の推定値を表示
    • -
  • -
  • dummy: bool
    ダミー変数の限界効果の推定方法を制御するブール値。もし False (初期設定)であれば、ダミー変数を連続な数値変数として扱います。もし、True であればダミー変数が0から1へと変化したときの予測値の変化を推定します。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 dummy として渡されます。

  • -
-
-
-

23.3 使用例

-
import py4stats as py4st
-import statsmodels.formula.api as smf
-
-import pandas as pd
-import numpy as np
-from palmerpenguins import load_penguins
-penguins = load_penguins() # サンプルデータの読み込み
-

 py4st.compare_mfx()py4st.compare_ols() の一般化線型モデルバージョンで、初期設定では statsmodels ライブラリの.get_margeff() メソッドから得られた限界効果の推定値を表示します。

-
penguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)
-
-# ロジスティック回帰の実行
-fit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()
-fit_logit2 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm + species', data = penguins).fit()
-
-py4st.compare_mfx([fit_logit1, fit_logit2])
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
termmodel 1model 2
body_mass_g-0.0004 ***-0.0003 ***
(0.0000)(0.0000)
bill_length_mm-0.0053-0.0357 ***
(0.0036)(0.0070)
bill_depth_mm-0.1490 ***-0.1098 ***
(0.0051)(0.0175)
species[T.Chinstrap]0.4172 ***
(0.0848)
species[T.Gentoo]0.3527 ***
(0.1308)
prsquared0.56470.6187
nobs342342
df35
-
from great_tables import GT, md, html
-compare_tab = py4st.compare_mfx(
-    [fit_logit1, fit_logit2],
-    model_name = ['ベースモデル', 'species 追加'], # モデル名を変更
-    line_break = '<br>'                         # 改行文字の変更
-)
-
-GT(compare_tab.reset_index())\
-  .tab_header(title = 'ロジットモデルの限界効果')\
-  .tab_source_note(
-      source_note= "Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’"
-      )\
-  .tab_source_note(source_note = '丸括弧 ( ) の値は標準誤差')
-

compare_tab_gt2

-
-
-

23.4 補足

-

  table_style = 'two_line' としたとき、初期設定ではの回帰係数とp-値の間に改行記号 '\n'が挿入されます。そのため、print() 関数や display() 関数を使った出力では、改行記号 '\n' がそのまま表示されます。この場合でも、pd.DataFrame.to_excel()pd.DataFrame.to_markdown() を使って Excel ファイルや markdown の表に変換していただくと、改行として反映されます。

-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/compare_ols.html b/docs/docs/man/compare_ols.html deleted file mode 100644 index 08ae41b..0000000 --- a/docs/docs/man/compare_ols.html +++ /dev/null @@ -1,1413 +0,0 @@ - - - - - - - - - -22  回帰分析の比較:py4stats.compare_ols() – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

22  回帰分析の比較:py4stats.compare_ols()

-
- - - -
- - - - -
- - - -
- - -
-

22.1 概要

-

 sm.ols()smf.glm() で作成された回帰分析の結果から、推定結果を縦方向に並べて比較する表を作成します。表のフォーマットについてはR言語の texreg::screenreg()modelsummary::modelsummary()を参考にしています。

-
compare_ols(
-    list_models: Sequence[RegressionResultsWrapper],
-    model_name: Optional[Sequence[str]] = None,
-    subset: Optional[Sequence[str]] = None,
-    stats: Literal["std_err", "statistics", "p_value", "conf_int"] = "std_err",
-    add_stars: bool = True,
-    stars: Optional[Mapping[str, float]] = None,
-    stats_glance: Optional[Sequence[str]] = ("rsquared_adj", "nobs", "df"),
-    digits: int = 4,
-    table_style: Literal["two_line", "one_line"] = "two_line",
-    line_break: str = "\n",
-    **kwargs: Any
-)
-
-
-

22.2 引数 Argument

-
    -
  • list_modelsSequence[RegressionResultsWrapper]
    推定結果を表示する分析結果のリスト(必須)。sm.ols()smf.ols() で作成された回帰分析の結果を list_models = [fit1, fit2] のようにリストとして指定してください。

  • -
  • model_namelist of str
    表頭に表示するモデルの名前。['モデル1', 'モデル2'] のように文字列のリストを指定してください。初期設定では、自動的に model 1, model 2, model 3 … と連番が割り当てられます。

  • -
  • subsetlist of str
    表示する回帰係数のリスト。指定しない場合(初期設定)、モデルに含まれる全ての回帰係数が表示されます。内部ではpandas.DataFrame.locメソッドを用いて処理を行っているため、['変数1', '変数2', ...] のような文字列のリスト、[True, False, True, ...] のようなブール値のリストに対応しています。文字列のリストが指定された場合、リストの並び順に合わせて回帰係数が表示されます。

  • -
  • statsstr
    表中の丸括弧 ( ) 内に表示する統計値の設定。次の値が指定できます。

    -
      -
    • 'std_err' 標準誤差(初期設定)
    • -
    • 'p_value' p-値
    • -
    • 'statistics' t統計量
    • -
  • -
  • add_starsbool
    回帰係数の統計的有意性を表すアスタリスク * を表示するかどうかを表すブール値。add_stars = True(初期-設定)なら表示、add_stars = Falseなら非表示となります。table_style'two_line' を指定した場合はアスタリスクは回帰係数の直後に表示され、'one_line' を指定した場合は stats で指定した統計値の後に表示されます。アスタリスクはp-値の値に応じて次のように表示されます。

  • -
  • starsdictp_stars() のみ)
     有意性を示す記号を key に、表示を切り替える閾値を値(value)にもつ辞書オブジェクト。初期設定の stars = None の場合、下記の方式で表示されます。

    -
  • -
  • stats_glance:list of str

  • -
  • 表の下部に追加する当てはまりの尺度の種類を表す文字列のリスト。リストの値には次の値を指定できます。なお、None もしくは空のリスト [ ] が指定された場合には非表示となります。

    -
      -
    • 'rsquared':決定係数
    • -
    • 'rsquared_adj':自由度調整済み決定係数
    • -
    • 'nobs':サインプルサイズ
    • -
    • 'df':モデルの自由度(説明変数の数)
    • -
    • 'sigma':回帰式の標準誤差
    • -
    • 'F_values':全ての回帰係数がゼロであることを帰無仮説とするF検定の統計量
    • -
    • 'p_values':F検定のP-値
    • -
    • 'AIC':赤池情報量基準
    • -
    • 'BIC':ベイズ情報量基準
    • -
  • -
  • digits: int
    回帰係数と統計値について表示する小数点以下の桁数。初期設定は4です。

  • -
  • table_style: str
    表の書式を表す文字列。次の値から選択できます(部分一致可)。

    -
      -
    • 'two_line'回帰係数と統計値を2行に分ける(初期設定)
    • -
    • 'one_line'回帰係数と統計値を1行で表示する
    • -
  • -
  • line_break: str
    table_style = 'two_line' とした場合に使用される改行記号。table_style = 'one_line' とした場合、この引数は無視されます。

  • -
-
-
-

22.3 使用例 Examples

-
import py4stats as py4st
-import statsmodels.formula.api as smf
-
-import pandas as pd
-import numpy as np
-from palmerpenguins import load_penguins
-penguins = load_penguins() # サンプルデータの読み込み
-
-# 回帰分析の実行
-fit1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()
-fit2 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species', data = penguins).fit()
-fit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()
-
-compare_tab1 = py4st.compare_ols(list_models = [fit1, fit2, fit3]) # 表の作成
-compare_tab1
- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
termmodel 1model 2model 3
Intercept153.7397-1,742.7202 ***843.9812 **
(268.9012)(313.7697)(403.5956)
species[T.Chinstrap]-885.8121 ***-539.6864 ***-245.1516 ***
(88.2502)(86.9425)(84.5952)
species[T.Gentoo]578.6292 ***1,492.8283 ***1,443.3525 ***
(75.3623)(118.4442)(107.7844)
bill_length_mm91.4358 ***55.6461 ***26.5366 ***
(6.8871)(7.2326)(7.2436)
bill_depth_mm179.0434 ***87.9328 ***
(19.0997)(20.2192)
sex[T.male]437.2007 ***
(49.1098)
rsquared_adj0.78100.82580.8613
nobs342342333
df345
-

py4st.compare_ols() の実行結果は PandasDataFrame として出力されるため、.xlsx. ファイルなどに変換することができます。また、用途に応じて表の体裁を調整できるようにしています。

-
compare_tab2 = py4st.compare_ols(
-    list_models = [fit1, fit2, fit3],
-    model_name = ['基本モデル', '嘴の高さ追加', '性別追加'], # モデル名を変更
-    stats = 'p_value',        # () 内の値をP-値に変更する
-    add_stars = False,        # 有意性のアスタリスクなし
-    table_style = 'one_line', # 表スタイルを1行表示に設定 'one' でも可能
-    digits = 3                # 小数点以下の桁数を3に設定
-    )
-compare_tab2
- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
term基本モデル嘴の高さ追加性別追加
Intercept153.740(0.568)-1,742.720(0.000)843.981(0.037)
species[T.Chinstrap]-885.812(0.000)-539.686(0.000)-245.152(0.004)
species[T.Gentoo]578.629(0.000)1,492.828(0.000)1,443.353(0.000)
bill_length_mm91.436(0.000)55.646(0.000)26.537(0.000)
bill_depth_mm179.043(0.000)87.933(0.000)
sex[T.male]437.201(0.000)
rsquared_adj0.7810.8260.861
nobs342342333
df345
-

table_style = 'two_line' のときに使用される改行記号は line_break で指定できます。great_tables モジュールの GT() 関数と併用する場合など、html 形式で出力する場合には line_break = '<br>' を指定します。

-
from great_tables import GT, md, html
-
-compare_tab3 = py4st.compare_ols(
-    list_models = [fit1, fit2, fit3],
-    model_name = ['基本モデル', '嘴の高さ追加', '性別追加'], # モデル名を変更
-    line_break = '<br>'                              # 改行文字の変更
-    )
-
-GT(compare_tab3.reset_index())\
-  .tab_header(title = 'Palmer penguin データを使った回帰分析の結果')\
-  .tab_source_note(
-      source_note= "Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’"
-      )\
-  .tab_source_note(source_note = '( ) の値は標準誤差')
-

compare_tab_gt

-
-

22.3.0.1 有意性の表示規則の変更

-

py4statsv0.2.0 以降は、stars 引数で有意性の表示規則を変更できるようになりました。

-
stars_dict = {'★★★':0.001, '★★':0.01, '★': 0.05, '.':0.1}
-
-reg.compare_ols(
-    list_models = [fit3],
-    model_name = ['model 3'],
-    stars = stars_dict
-    )
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
termmodel 3
Intercept843.9812 ★
(403.5956)
species[T.Chinstrap]-245.1516 ★★
(84.5952)
species[T.Gentoo]1,443.3525 ★★★
(107.7844)
sex[T.male]437.2007 ★★★
(49.1098)
bill_length_mm26.5366 ★★★
(7.2436)
bill_depth_mm87.9328 ★★★
(20.2192)
rsquared_adj0.8613
nobs333
df5
-
-
-

22.3.0.2 回帰係数の sbusetting

-

引数 subset を使って表示したい回帰係数を指定することで、一部の回帰係数を省略して表記することもできます。

-
# 説明変数に island を追加したモデルを推定
-fit4 = smf.ols(
-    'body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex + island',
-    data = penguins).fit()
-
-var_list = [
-    'species[T.Chinstrap]', 'species[T.Gentoo]',
-    'bill_length_mm', 'bill_depth_mm', 'sex[T.male]'
-    ]
-
-# 全ての回帰係数を表示すると表が長すぎるので、一部を省略します
-compare_tab4 = py4st.compare_ols(
-    list_models = [fit2, fit3, fit4],
-    subset = var_list
-    )
-
-compare_tab4.loc['島ダミー', :] = ['No', 'No', 'Yes']
-
-compare_tab4
- ------ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
termmodel 1model 2model 3
species[T.Chinstrap]-539.6864 ***-245.1516 ***-255.2732 ***
(86.9425)(84.5952)(92.4796)
species[T.Gentoo]1,492.8283 ***1,443.3525 ***1,446.1574 ***
(118.4442)(107.7844)(114.1676)
bill_length_mm55.6461 ***26.5366 ***26.6643 ***
(7.2326)(7.2436)(7.2792)
bill_depth_mm179.0434 ***87.9328 ***88.3284 ***
(19.0997)(20.2192)(20.3267)
sex[T.male]437.2007 ***436.0334 ***
(49.1098)(49.4227)
rsquared_adj0.82580.86130.8605
nobs342333333
df457
島ダミーNoNoYes
-

pandas の pandas.DataFrame.query メソッドを使って、次のように説明変数を除外することもできます。

-
compare_tab4 = py4st.compare_ols(
-    list_models = [fit2, fit3, fit4]
-    )
-
-compare_tab4 = compare_tab4\
-  .query('~term.str.contains("Intercept|island")').copy()
-
-compare_tab4.loc['島ダミー', :] = ['No', 'No', 'Yes']
-
-compare_tab4 # 上記のコードと同じ結果
-
-
-
-

22.4 補足

-

  table_style = 'two_line' としたとき、初期設定ではの回帰係数とp-値の間に改行記号 '\n'が挿入されます。そのため、print() 関数や display() 関数を使った出力では、改行記号 '\n' がそのまま表示されます。この場合でも、pd.DataFrame.to_excel()pd.DataFrame.to_markdown() を使って Excel ファイルや markdown の表に変換していただくと、改行として反映されます。

-
-
-

22.5 参照 see also

-

 一般化線形モデルの限界効果を比較する場合は py4stats.compare_mfx()をご利用ください。

-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/diagnose.html b/docs/docs/man/diagnose.html deleted file mode 100644 index ed544cd..0000000 --- a/docs/docs/man/diagnose.html +++ /dev/null @@ -1,943 +0,0 @@ - - - - - - - - - -4  py4stats.diagnose(): データフレームの概要 – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

4  py4stats.diagnose(): データフレームの概要

-
- - - -
- - - - -
- - - -
- - -
-

4.1 概要

-

 R言語の dlookr::diagnose() を再現した関数で、データの全般的な状態についての要約を提供します。

-
diagnose(data: IntoFrameT, to_native: bool = True)
-
-
-

4.2 引数 Argument

-
    -
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • -
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • -
-
-
-

4.3 返り値

-
    -
  • dtype:該当する列のpandasにおけるデータの型。「〇〇の個数」や「〇〇の金額」といったデータの dtypeobjectString になっていたら、文字列として読み込まれているので要注意です。
  • -
  • missing_count:1列のなかで NaN などの欠測値になっている数
  • -
  • missing_percent:1列のなかで欠測値が占めている割合でmissing_percent = (missing_count / 行数) * 100 として計算されます。もし missing_percent = 100 なら、その列は完全に空白です。
  • -
  • unique_count:その列で重複を除外したユニークな値の数。例えばある列の中身が「a, a, b」であればユニークな値は ab の2つなので unique_count = 2 です。もし unique_count = 1 であれば、その行にはたった1種類の値しか含まれていないことが分かりますし、例えば都道府県を表す列の unique_count が47より多ければ、都道府県以外のものが混ざっていると考えられます。
  • -
  • unique_rate: サンプルに占めるユニークな値の割合。 unique_rate = unique_count / 行数 で計算されます。unique_rate = 1 であれば、全ての行に異なる値が入っています。一般的に、実数値の列は unique_rate が高くなりますが、年齢の「20代」や価格の「200円代」のように階級に分けられている場合には unique_rate が低くなります。
  • -
-
-
-

4.4 使用例 Examples

-
import py4stats as py4st
-from palmerpenguins import load_penguins
-penguins = load_penguins() # サンプルデータの読み込み
-
-print(py4st.diagnose(penguins).round(4))
-#>              columns    dtype  missing_count  missing_percent  unique_count  unique_rate
-#> 0            species   object              0           0.0000             3       0.8721
-#> 1             island   object              0           0.0000             3       0.8721
-#> 2     bill_length_mm  float64              2           0.5814           165      47.9651
-#> 3      bill_depth_mm  float64              2           0.5814            81      23.5465
-#> 4  flipper_length_mm  float64              2           0.5814            56      16.2791
-#> 5        body_mass_g  float64              2           0.5814            95      27.6163
-#> 6                sex   object             11           3.1977             3       0.8721
-#> 7               year    int64              0           0.0000             3       0.8721
-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/diagnose_category.html b/docs/docs/man/diagnose_category.html deleted file mode 100644 index dcb2b92..0000000 --- a/docs/docs/man/diagnose_category.html +++ /dev/null @@ -1,988 +0,0 @@ - - - - - - - - - -9  カテゴリー変数の要約 py4stats.diagnose_category() – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

9  カテゴリー変数の要約 py4stats.diagnose_category()

-
- - - -
- - - - -
- - - -
- - -
-

9.1 概要

-

データフレームのカテゴリー変数を要約します。本関数は、カテゴリー情報を表す列(カテゴリ型・文字列型・ブール型)およびダミー変数(値が {0, 1} に制限された整数列)を対象として、欠損率、ユニーク値の数、最頻値、最頻値の頻度と割合、evenness などの指標を提供します。

-
diagnose_category(
-        data: IntoFrameT, 
-        dropna: bool = True, 
-        to_native: bool = True
-        )
-
-
-

9.2 引数 Argument

-
    -
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • -
  • dropnabool
     欠測値(NaN, None など)を統計値の計算から除外するかどうかを表すブール値。初期設定は True です。
  • -
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • -
-
-
-

9.3 返り値 Value

-

freq_table()関数は、次の値をもつ DataFrame を出力します。

-
    -
  • variables: 変数(列)名
  • -
  • count: 非欠損値の個数
  • -
  • miss_pct: 欠損率(null_count / N * 100) (* ここで Ndata の行数)
  • -
  • unique: ユニーク値の個数
  • -
  • unique_pct: ユニーク値の割合(unique / N * 100)
  • -
  • mode: 最頻値
  • -
  • mode_freq: 最頻値の度数
  • -
  • mode_pct: 最頻値の割合(mode_freq / N * 100)
  • -
  • evenness: カテゴリー分布の均等度([0, 1] の範囲)
  • -
-
-
-

9.4 使用例 Examples

-
import pandas as pd
-import py4stats as py4st
-from palmerpenguins import load_penguins
-
-penguins = load_penguins().drop('year', axis = 1) # サンプルデータの読み込み
-
penguins2 = penguins.copy()
-s = penguins2['body_mass_g']
-penguins2['heavy'] = np.where(s >= s.quantile(0.75), True, False)
-
-print(py4st.diagnose_category(penguins2).round(4))
-#>   variables  count  miss_pct  unique  unique_pct    mode  mode_freq  mode_pct  evenness
-#> 0   species    344    0.0000       3      0.8721  Adelie        152   44.1860    0.9550
-#> 1    island    344    0.0000       3      0.8721  Biscoe        168   48.8372    0.9133
-#> 2       sex    333    3.1977       2      0.5814    male        168   50.4505    0.9999
-#> 3     heavy    344    0.0000       2      0.5814   False        254   73.8372    0.8292
-
-
-

9.5 Note

-

evenness は、各列ごとに情報エントロピーを \([0, 1]\) の範囲に正規化した指標です。本実装では、対数の底をカテゴリの個数(unique)に設定することで正規化を行っており、これは底を2とした情報エントロピーを log2(unique) で割ることと同値です。この指標は正規化エントロピー(normalized entropy)としても知られています。

-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/filtering_out.html b/docs/docs/man/filtering_out.html deleted file mode 100644 index 09bb909..0000000 --- a/docs/docs/man/filtering_out.html +++ /dev/null @@ -1,988 +0,0 @@ - - - - - - - - - -12  py4stats.filtering_out() – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

12  py4stats.filtering_out()

-
- - - -
- - - - -
- - - -
- - -
-

12.1 概要

-

 pandasDataFrame.filter() メソッドでは引数 like に文字列を指定することで、列名に特定の文字列を含む列を選択できますが、反対に py4st.filtering_out() では列名に特定の文字列を含む列を除外します。実装の一部はR言語の dplyr::select() を参考にしました。

-
filtering_out(
-    data: IntoFrameT,
-    contains: Optional[str] = None,
-    starts_with: Optional[str] = None,
-    ends_with: Optional[str] = None,
-    axis: Union[int, str] = 'columns',
-    to_native: bool = True,
-)
-
-
-

12.2 引数 Argument

-
    -
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • -
  • *argsstr / list[str] / narwhals.Expr / narwhals.Selector
    移動したい列を指定します。指定方法は次のとおりです。 -
      -
    • 列名(例:"x"
    • -
    • 列名のリスト(例:["x", "y"]
    • -
    • narwhals の式(Expr)(例:nw.col("x")) *axis = 'columns' の場合のみ
    • -
    • narwhals の Selector (例:ncs.numeric())*axis = 'columns' の場合のみ
    • -
  • -
  • containsstr
     列名(行名)の検索に使用する文字列。内部で使用している pandas.Series.str.contains に渡され、指定された文字列を列名(行名)に含む列(行)を除外します。
  • -
  • starts_withstr
     列名(行名)の検索に使用する文字列。内部で使用している pandas.Series.str.startswith に渡され、指定された文字列で列名(行名)が始まる列(行)を除外します。
  • -
  • ends_withstr
     列名(行名)の検索に使用する文字列。内部で使用している pandas.Series.str.endswith に渡され、指定された文字列で列名(行名)が終わる列(行)を除外します。
  • -
  • axis{0 or 'index', 1 or 'columns'}
    axis = 1 または axis = 'columns' なら列の削除を行い、axis = 0 または axis = 'index' なら行の削除を行います。 このオプションは、data がインデックス属性 (例: pandas.DataFrame) をもつ場合のみ有効です。
  • -
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • -
-
-
-

12.3 使用例

-
import py4stats as py4st
-import pandas as pd
-import narwhals.selectors as ncs
-from palmerpenguins import load_penguins
-
-penguins = load_penguins().head(3) # サンプルデータの読み込み
-
-print(penguins)
-#>   species     island  bill_length_mm  bill_depth_mm  flipper_length_mm  body_mass_g     sex  year  female
-#> 0  Adelie  Torgersen            39.1           18.7              181.0       3750.0    male  2007       0
-#> 1  Adelie  Torgersen            39.5           17.4              186.0       3800.0  female  2007       1
-#> 2  Adelie  Torgersen            40.3           18.0              195.0       3250.0  female  2007       1
-
# *args で列名を直接指定
-print(py4st.filtering_out(penguins, 'year', 'island', 'sex'))
-#>   species  bill_length_mm  bill_depth_mm  flipper_length_mm  body_mass_g
-#> 0  Adelie            39.1           18.7              181.0       3750.0
-#> 1  Adelie            39.5           17.4              186.0       3800.0
-#> 2  Adelie            40.3           18.0              195.0       3250.0
-
-
-# narwhals.selector の使用例 文字列型の変数を除外
-print(py4st.filtering_out(penguins, ncs.string()))
-#>    bill_length_mm  bill_depth_mm  flipper_length_mm  body_mass_g  year
-#> 0            39.1           18.7              181.0       3750.0  2007
-#> 1            39.5           17.4              186.0       3800.0  2007
-#> 2            40.3           18.0              195.0       3250.0  2007
-
-# 列名に 'length' を含む列を除外
-print(py4st.filtering_out(penguins, contains = 'length'))
-#>   species     island  bill_depth_mm  body_mass_g     sex  year  female
-#> 0  Adelie  Torgersen           18.7       3750.0    male  2007       0
-#> 1  Adelie  Torgersen           17.4       3800.0  female  2007       1
-#> 2  Adelie  Torgersen           18.0       3250.0  female  2007       1
-
-# 列名が 'bill' から始まる列を除外
-print(py4st.filtering_out(penguins, starts_with = 'bill'))
-#>   species     island  flipper_length_mm  body_mass_g     sex  year  female
-#> 0  Adelie  Torgersen              181.0       3750.0    male  2007       0
-#> 1  Adelie  Torgersen              186.0       3800.0  female  2007       1
-#> 2  Adelie  Torgersen              195.0       3250.0  female  2007       1
-
-# 列名が '_mm' で終わる列を除外
-print(py4st.filtering_out(penguins, ends_with = '_mm'))
-#>   species     island  body_mass_g     sex  year  female
-#> 0  Adelie  Torgersen       3750.0    male  2007       0
-#> 1  Adelie  Torgersen       3800.0  female  2007       1
-#> 2  Adelie  Torgersen       3250.0  female  2007       1
-
-
-

12.4 Notes

-

axis='index' による行を対象とするフィルタリングは、インデックスの存在に依存します。したがって、pd.DataFrame 以外の行ラベルをもたない DataFrame バックエンドでは、このオプションは利用できません。

-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/freq_table.html b/docs/docs/man/freq_table.html deleted file mode 100644 index a4f2974..0000000 --- a/docs/docs/man/freq_table.html +++ /dev/null @@ -1,984 +0,0 @@ - - - - - - - - - -6  py4stats.freq_table() – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

6  py4stats.freq_table()

-
- - - -
- - - - -
- - - -
- - -
-

6.1 概要

-

 R言語のDescTools::Freq()をオマージュした、1変数の度数分布表を計算する関数。度数 freq と相対度数 perc に加えて、それぞれの累積値を計算します。

-
freq_table(
-    data: IntoFrameT,
-    subset: Union[str, Sequence[str]],
-    sort_by: Literal['frequency', 'values'] = 'frequency',
-    descending: bool = False,
-    dropna: bool = False,
-    to_native: bool = True,
-    *,
-    sort: Optional[bool] = None
-)
-
-
-

6.2 引数 Argument

-
    -
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • -
  • subsetstr or list of str
     集計に使用するデータフレームの列名(必須)。
  • -
  • sort_bystr
     sort_by = 'frequency' なら度数分布表を頻度に応じてソートし、sort_by = 'values' なら subset で指定した列の値に応じてソートします。
  • -
  • descendingbool
     ソートの方式。True なら降順でソートし、False(初期設定)なら昇順でソートします。
  • -
  • dropnabool
     欠測値(NaN, None など)を集計から除外するかどうかを表すブール値。初期設定は False です。
  • -
  • sortDeprecated..
     sort_by の使用を推奨しています。この引数は後方互換性のために保持されおり、指定された場合は FutureWarningが発生します。デフォルトは None です。
  • -
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • -
-
-
-

6.3 返り値 Value

-

 freq_table()関数は、次の値をもつ DataFrame を出力します。

-
    -
  • freq: 度数
  • -
  • perc: 相対度数
  • -
  • cumfreq: 累積度数
  • -
  • cumperc: 累積相対度数
  • -
-
-
-

6.4 使用例

-
import py4stats as py4st
-import pandas as pd
-from palmerpenguins import load_penguins
-penguins = load_penguins() # サンプルデータの読み込
-
-print(py4st.freq_table(penguins, 'species'))
-#>      species  freq      perc  cumfreq   cumperc
-#> 0  Chinstrap    68  0.197674       68  0.197674
-#> 1     Gentoo   124  0.360465      192  0.558140
-#> 2     Adelie   152  0.441860      344  1.000000
-
-print(py4st.freq_table(penguins, ['island', 'species']))
-#>       island    species  freq      perc  cumfreq   cumperc
-#> 0     Biscoe     Adelie    44  0.127907       44  0.127907
-#> 1  Torgersen     Adelie    52  0.151163       96  0.279070
-#> 2      Dream     Adelie    56  0.162791      152  0.441860
-#> 3      Dream  Chinstrap    68  0.197674      220  0.639535
-#> 4     Biscoe     Gentoo   124  0.360465      344  1.000000
-
penguins2 = penguins.assign(bill_length_mm2 = pd.cut(penguins['bill_length_mm'], 6))
-
-print(
-    py4st.freq_table(
-        penguins2, ['species', 'bill_length_mm2'], 
-        sort_by = 'values',  dropna = True
-        )
-    )
-#>       species   bill_length_mm2  freq      perc  cumfreq   cumperc
-#> 0      Adelie  (32.072, 36.683]    36  0.105263       36  0.105263
-#> 1      Adelie  (36.683, 41.267]    89  0.260234      125  0.365497
-#> 2      Adelie   (41.267, 45.85]    25  0.073099      150  0.438596
-#> 3      Adelie   (45.85, 50.433]     1  0.002924      151  0.441520
-#> 4   Chinstrap  (36.683, 41.267]     1  0.002924      152  0.444444
-#> 5   Chinstrap   (41.267, 45.85]    12  0.035088      164  0.479532
-#> 6   Chinstrap   (45.85, 50.433]    29  0.084795      193  0.564327
-#> 7   Chinstrap  (50.433, 55.017]    24  0.070175      217  0.634503
-#> 8   Chinstrap    (55.017, 59.6]     2  0.005848      219  0.640351
-#> 9      Gentoo  (36.683, 41.267]     1  0.002924      220  0.643275
-#> 10     Gentoo   (41.267, 45.85]    39  0.114035      259  0.757310
-#> 11     Gentoo   (45.85, 50.433]    65  0.190058      324  0.947368
-#> 12     Gentoo  (50.433, 55.017]    15  0.043860      339  0.991228
-#> 13     Gentoo    (55.017, 59.6]     3  0.008772      342  1.000000
-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/glance.html b/docs/docs/man/glance.html deleted file mode 100644 index 3cf37a5..0000000 --- a/docs/docs/man/glance.html +++ /dev/null @@ -1,949 +0,0 @@ - - - - - - - - - -27  py4stats.glance() – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

27  py4stats.glance()

-
- - - -
- - - - -
- - - -
- - -
-

27.1 概要

-

 R言語の bloom::glance() をオマージュした関数で、sm.ols()smf.logit() などで推定されたモデルを pands.DataFrame に変換します。

-
glance(x)
-
-
-

27.2 引数 Argument

-
    -
  • x(必須)
     sm.ols() もしくは smf.logit() などで作成された分析結果のオブジェクト。
  • -
-
-
-

27.3 返り値 Value

-

 モデルの当てはまり(goodness of fit)の尺度を各列に持つ pands.DataFrame が出力されます。表示される指標はモデルの種類によって異なります。

-
-
-

27.4 使用例 Examples

-
import pandas as pd
-import numpy as np
-from palmerpenguins import load_penguins
-import statsmodels.formula.api as smf
-
-import py4stats as py4st
-penguins = load_penguins() # サンプルデータの読み込み
-
# 線形回帰の場合
-fit_lm1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()
-
-pd.set_option('display.expand_frame_repr', False)
-print(py4st.glance(fit_lm1).round(4))
-#>    rsquared  rsquared_adj  nobs  df     sigma  F_values  p_values        AIC        BIC
-#> 0    0.7829         0.781   342   3  375.3251  406.2735       0.0  5029.1406  5044.4798
-
# ロジスティック回帰の場合
-penguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)
-fit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()
-
-print(py4st.glance(fit_logit1).round(4))
-#>    prsquared   LL-Null  df_null    logLik       AIC      BIC  deviance  df_resid  df_model  nobs
-#> 0     0.5647 -236.8458      341 -103.1079  214.2157  229.555  206.2157       338         3   342
-
-
-

27.5 注意点

-

 参考にしたR言語の bloom::glance() は様々な種類のモデルに対応したジェネリック関数として定義されていますが、py4st.glance() は現段階では限られたモデルにしか対応していません。py4st.glance() のメソッドが定義されているオブジェクトのクラスを確認するには次のコードを実行して下さい。

-
list(py4st.glance.registry.keys())
-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/heckitmfx_compute.html b/docs/docs/man/heckitmfx_compute.html deleted file mode 100644 index fed1c21..0000000 --- a/docs/docs/man/heckitmfx_compute.html +++ /dev/null @@ -1,1029 +0,0 @@ - - - - - - - - - -31  heckit_helper.heckitmfx_compute() – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

31  heckit_helper.heckitmfx_compute()

-
- - - -
- - - - -
- - - -
- - -
-

31.1 概要

-

 Type2トービットモデルの限界効果を推定します。推定方法についてはダハナ, 勝又(2023, p.136)および Hoffmann, Kassouf(2005)を参照し、関数の実装についてはR言語の heckitmfx::heckitmfx_log() 関数を参考にしています。

-
heckitmfx_compute(
-    model, 
-    exog_select, 
-    exog_outcome, 
-    exponentiate = False
-)
-
-
-

31.2 引数 Argument

-
    -
  • model(必須)
      Py4Etrics モジュールの py4etrics.heckit.Heckit() で作成された HeckitResults クラスのオブジェクト
  • -
  • exog_selectpd.DataFrame(必須)
     Type2トービットモデルのうち第1段階の selection equation(選択関数, 就業決定関数)の説明変数からなる pd.DataFrame
  • -
  • exog_outcomepd.DataFrame(必須)
     Type2トービットモデルのうち第2段階の regression equation(賃金関数)の説明変数からなる pd.DataFrame
  • -
-

これらの引数は heckit_helper.Heckit_from_formula() の出力を使用することを想定しています(使用例を参照)。

-
    -
  • exponentiatebool
     推定結果に指数関数を用いた変換を行うかどうかを表す論理値。もし False (初期設定)であれば限界効果と回帰係数の推定値をそのまま出力し、もし True であれば出力されるデータフレームのうち unconditionalconditionalselectionbeta の列について指数関数 \(100[\exp(x - 1)]\) を用いた変換を行います。例えば被説明変数は対数賃金であれば、変換後の限界効果はパーセンテージで表された賃金の変化率として解釈できます。
  • -
-
-
-

31.3 返り値 Value

-

 次の列を含む pands.DataFrame が出力されます。

-
    -
  • term(index)
     説明変数の名称
  • -
  • unconditional
     Hoffmann, Kassouf(2005, p.6)の(14)式および(15)式に基づく条件付なしの平均限界効果(unconditional marginal effect)
  • -
  • conditional
     Hoffmann, Kassouf(2005, pp.4-5)の(8)式および(9)式に基づく条件付平均限界効果(conditional marginal effect)
  • -
  • selection
     Hoffmann, Kassouf(2005, p.6)の(14)式および(15)式の第3項に当たる間接効果
  • -
  • beta
     第2段階の regression equation の回帰係数
  • -
  • gamma
     第1段階の selection equation の回帰係数
  • -
-
-
-

31.4 使用例 Examples

-

 heckit_helper モジュールはヘックマンの2段階推定(Heckit)を実行を Py4Etrics モジュールの py4etrics.heckit.Heckit() に依存しているため、事前のインストールをお願いします。

-
pip install git+https://github.com/Py4Etrics/py4etrics.git
-

ここでは wooldridge モジュールの mroz データを使い、春山(2023, Chap.24)のモデルを再現します。

-
import pandas as pd
-import wooldridge
-from py4stats import heckit_helper
-
-mroz = wooldridge.data('mroz') # サンプルデータの読み込み
-
-mod_heckit, exog_outcome, exog_select = \
- heckit_helper.Heckit_from_formula(
-    selection = 'lwage ~ educ + exper + expersq + nwifeinc + age + kidslt6 + kidsge6',
-    outcome = 'lwage ~ educ + exper + expersq',
-    data = mroz
-)
-
-res_heckit = mod_heckit.fit(cov_type_2 = 'HC1')
-
print(heckit_helper.heckitmfx_compute(
-    res_heckit,
-    exog_select = exog_select,
-    exog_outcome = exog_outcome
-    ).round(4))
-#>           unconditional  conditional  selection    beta   gamma
-#> term                                                           
-#> age             -0.0385       0.0010    -0.0395  0.0000 -0.0529
-#> educ             0.2045       0.1067     0.0978  0.1091  0.1309
-#> exper            0.1338       0.0417     0.0922  0.0439  0.1233
-#> expersq         -0.0022      -0.0008    -0.0014 -0.0009 -0.0019
-#> kidsge6          0.0263      -0.0006     0.0269  0.0000  0.0360
-#> kidslt6         -0.6332       0.0157    -0.6489  0.0000 -0.8683
-#> nwifeinc        -0.0088       0.0002    -0.0090  0.0000 -0.0120
-

被説明変数の lwage は対数賃金であるため、exponentiate = True として指数関数 \(100[\exp(x - 1)]\) を使った変換を行うことで、限界効果を賃金の変化率として解釈できるようになります。

-
print(heckit_helper.heckitmfx_compute(
-    res_heckit,
-    exog_select = exog_select,
-    exog_outcome = exog_outcome,
-    exponentiate = True
-    ).round(4))
-#>           unconditional  conditional  selection     beta   gamma
-#> term                                                            
-#> age             -3.7809       0.0954    -3.8725   0.0000 -0.0529
-#> educ            22.6943      11.2606    10.2765  11.5235  0.1309
-#> exper           14.3206       4.2543     9.6555   4.4865  0.1233
-#> expersq         -0.2233      -0.0825    -0.1409  -0.0859 -0.0019
-#> kidsge6          2.6604      -0.0649     2.7271   0.0000  0.0360
-#> kidslt6        -46.9117       1.5782   -47.7365   0.0000 -0.8683
-#> nwifeinc        -0.8730       0.0217    -0.8945   0.0000 -0.0120
-
-
-

31.5 注意

-

 heckitmfx_compute() の実装は実験的なものであり、 Stata における margins コマンドなどの既存の手法とは計算結果が一致しない可能性があります。

-
-
-

31.6 参考文献

-
    -
  • ダハナ・ウィラワン ドニ, 勝又壮太郎(2023) 『Rによるマーケティング・データ分析: 基礎から応用まで (ライブラリ データ分析への招待 4)』新世社.
  • -
  • 春山鉄源 (2023) 『Pythonで学ぶ入門計量経済学』. https://py4etrics.github.io/index.html
  • -
  • Hoffmann, Rodolfo, and Ana Lucia Kassouf. (2005). Deriving conditional and unconditional marginal effects in log earnings equations estimated by heckman’s procedure. Applied Economics, 37(11), 1303–1311. *** Return to Function reference.
  • -
- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/image/Pareto_plot1.png b/docs/docs/man/image/Pareto_plot1.png deleted file mode 100644 index a3d9d1bbea537af5de3e9058f14ac7b829ab8967..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25849 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 diff --git a/docs/docs/man/image/Pareto_plot2.png b/docs/docs/man/image/Pareto_plot2.png deleted file mode 100644 index 82f83fbe52905029e3f82c752d9d901b8251c117..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27946 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 IIcDtnALWD3d;kCd diff --git a/docs/docs/man/image/coefplot1.png b/docs/docs/man/image/coefplot1.png deleted file mode 100644 index 82a4975e75acc123b8af90833183992413f89d35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17557 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 VWm3qy17Azgjwl?CKX~%;{{vYFtq=eJ diff --git a/docs/docs/man/image/coefplot2.png b/docs/docs/man/image/coefplot2.png deleted file mode 100644 index 7430971e9500c8be6d30ba5feda64f5692d83d89..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24639 zcmeHvc|4Wt+W(S96-^oxQW_AARK`k!mC8J3NF`Y!nP>Jc*(IqJ2^q>fCuAO?R1}#j zbCM~UGxPi2t9{y?efGQG^A3Of{&;=P{v6w0mS;WBeP7piy6$W8Cyp#+;b5UqC=01F z2NfxlnfoaerjEI@@e||a>w58jdo2#BTPR&TXJM^prcXJpXJLBbqQwQn(`&8t&CCri zn(P$XEwp{h+Vd6`rskqsw;KO=fzU-WgRQkJbKUSJ^Gszl%qbK$J@OAzq*R0~1&eS|6v{qMgCT1s#mDB7RYi^3P4qwCQ6!CKRp%*#NIe(Zka9VQ)jV0U7 zw#=H6)@0^5XQ>6_!~gVYPKhp{1kIg0SH7nqTcQ;I)xkA~*(DVpd*n(LO~uUYac(g_ z_{M#WOnE1dxqZKP;dwHPD3Z-qncn{X0@R~NkJ77-e#WA5xJ-U`#DdbaRLDoxs5-XH zPuS>_S^9)FD}@qS&@M)?asPL2dYae*7fqwKr|TRu!uCBkC|<^KTB-5G@v4nNuN(E5 zC@vqGgi5U>)4qp2lz4reVNP6@xes;RnSc7dv5b)QXfEB$In80T>`so*Dwm+j z&PAd8R+-wYZqiXvQBy+C1!7d=%0sDlCbVbE8_$?AqcX$ND8-~+lZlC`>Ph{P70wAC zlk@}MwzT1I;!f_;>-bEo-9*u1b)3_rt24wIQ6eKNB@i@ac1`ktNr=N}rtV0*I>kxF zK>F5)a~0vo`L}Etv|g1b9FzPyE^c&Fis1C84dZv`*ImW+Q;pw9X{=9S+Gi}?$h32N z-PHxDJQ8;{aPC>B9qxIHXVuO1J6QXs7Y7SP5AnS0sE80Y`y?Z5{6YDR|L&Tugj^wN zQE~B|=cg5PbQ)B83YtyZ1MR;m96NSHGu0$cO~m@62Av z5t^2^NBClc7H(I6^k+P}dgtj$4hg$tyeb+OqvJe1-Y9JT`Pc?t-bjt4b9Te^)&i9) zmo5$Q(RI?GQmNN(-o&1~D>*r+lww?~x_$e0yN}m4on7fORlQkIQ03C4ORjTX7k66; zNJ;6Aj*gmT)~jV_C(3%BpYmzT(#bVwGf_*Hq}W`}2{D^$7vr^Kn>eZB_#&#{g+*s? zqQHlSsCjI^T}#)byxacYUVX`}gndCi-3sMMzCjSMN5d{QSm0<$T#X$EndapSs2yt9CA1zWlT8 zvllOPUqv0}Y%xn8e6=a4{f?aE?c&yc>%A0t!FDmBxbSh-YYoiPhe-iSk({||$JyWT zsU)e2!(Z!#?FP>aYNb8;@FW*E!1zNlb)cgHx&ZQGqvQ<-Uf zap7u_WAw@}*%clf!qNGgN3UvMqX+uWMN?`&$1mzCU4T9HDo!z&|`IkkamU) zeQdZVAwU1X3LGGYR21zvnJ47@l7mr;Zlc6BzfVpgJY6lNq>F@8aOfjmF{VF9SR5BpGd9w`N;_H2D>51v2bN+8O zQfVkK-nALMfk6q*%@QizVte+eKYjXCr)suV)G2?JNt5%@K9cpVRb%=me8%b*b+trO z?k)W3>X&y-H$-(L+K2f_McTE_@8PpN%1L)rXQwzvp)kCtbUL%kigGv=7Nq zEc54+wIpm(r>;0UQ88V25nbrx$B%=b{V%Gf$KiI`=G4grh=$?02&2h-pv~&c5V@o` zrZQk^{7UT7tIPr!MVG3FCD%NvL`4SaU6j17`x}`mPYZrgJbi4m`%+9sQAX7|VfWj9 zI`7*TQ&Obkf>@I*IuzryGgaxy#|Qxa^&1=cJQj6R^=(CkyM|njlqY9X0V$!Cx}WdJ(UuvkiG8>r<3$T zwb^+K+QnQnO=K=c>B!r@Rag}h<}fOqO?x6l5e~0*TU!w!SA!LMHnrBWCwrLo?aO

f+ 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 jJ{ diff --git a/docs/docs/man/image/plot_Blinder_Oaxaca2.png b/docs/docs/man/image/plot_Blinder_Oaxaca2.png deleted file mode 100644 index d268b4b8ead261eab57fa8ae27b9716bc9b8e3dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16077 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 diff --git a/docs/docs/man/image/plot_median_diff1.png b/docs/docs/man/image/plot_median_diff1.png deleted file mode 100644 index 28915877b0f8f3e3da25d9d80e94393936483668..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13379 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 tT2NGeGuMIc6#45BjW diff --git a/docs/docs/man/image/plot_miss_var1.png b/docs/docs/man/image/plot_miss_var1.png deleted file mode 100644 index 7d99d39cb3f7bcfb3f2452888457d30e43d9a004..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16981 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 E0Hvm - - - - - - - - -34  データ型を判定する論理関数 – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

-
- -
- -
- - -
- - - -
- -
-
-

34  データ型を判定する論理関数

-
- - - -
- - - - -
- - - -
- - -
-

34.1 building_block.is_character() building_block.is_logical() building_block.is_numeric() building_block.is_integer() building_block.is_float()

-
-
-

34.2 概要

-

 代入された値、あるいはリストの要素が特定のデータ型であるかどうかを判定する関数です。基本的には pandas.api.types.is_*() 関数のラッパー関数で、命名規則はR言語の同種の関数に基づいています。

-
is_character(x)
-
-is_logical(x)
-
-is_numeric(x)
-
-is_integer(x)
-
-is_float(x)
-
-
-

34.3 引数 Argument

-
    -
  • x(必須)array, list, or pd.Series
  • -
-
-
-

34.4 返り値 Value

-

引数 x が次の型であるときに、True を返します。

-
    -
  • is_character()str
  • -
  • is_logical()bool
  • -
  • is_numeric()int, float or bool
  • -
  • is_integer()int or bool
  • -
  • is_float()float
  • -
-
-
-

34.5 使用例 Examples

-
from py4stats import building_block as build
-x_str = ['A', 'B']
-x_bool = [True, False, True]
-x_int = [1, 2, 3]
-x_float = [0, 1, 2.1, 0.5]
-x_list = [x_str, x_bool, x_int, x_float]
-
-print([build.is_character(x) for x in x_list])
-#> [True, False, False, False]
-
-print([build.is_logical(x) for x in x_list])
-#> [False, True, False, False]
-
-print([build.is_numeric(x) for x in x_list])
-#> [False, True, True, True]
-
-print([build.is_integer(x) for x in x_list])
-#> [False, False, True, False]
-
-print([build.is_float(x) for x in x_list])
-#> [False, False, False, True]
-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/is_dummy.html b/docs/docs/man/is_dummy.html deleted file mode 100644 index dc84a29..0000000 --- a/docs/docs/man/is_dummy.html +++ /dev/null @@ -1,972 +0,0 @@ - - - - - - - - - -20  ダミー変数の判定: py4stats.is_dummy() – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

20  ダミー変数の判定: py4stats.is_dummy()

-
- - - -
- - - - -
- - - -
- - -
-

20.1 概要

-

リストや Series の要素が、指定されたダミーコードのみで構成されたダミー変数かどうかを判定します。

-
is_dummy(
-    data: Union[IntoFrameT, IntoSeriesT],
-    cording: Sequence[Any] = (0, 1),
-    dropna: bool = True,
-    to_pd_series: bool = False,
-    **kwargs
-    )
-
-
-

20.2 引数 Argument

-
    -
  • data: list, IntoFrameT or IntoSeriesT
    入力データ。list あるいは、narwhals が受け入れ可能な DataFrame もしくは Series 互換オブジェクト
  • -
  • cording: list
    ダミーコードとして許容される値の集合。入力データに含まれる値の集合が、この集合と完全に一致する場合にダミー変数であると判定されます。デフォルトは (0, 1) です。
  • -
  • dropnabool
     欠測値(NaN)をコーディングの判定から除外するかどうかを表すブール値。初期設定は True です。
  • -
  • to_pd_series: bool
    data が DataFrame 場合の戻り値の形式を制御します。 -
      -
    • True の場合:列名をインデックスにもつ pandas.Series を返します
    • -
    • False の場合:各列の判定結果を要素とする list を返します
    • -
  • -
  • **kwargs: 将来の拡張のために予約されたキーワード引数です。
  • -
-
-
-

20.3 返り値 Value

-
    -
  • data が Series-like の場合
    -
      -
    • -指定されたダミーコードのみで構成されていれば True、それ以外の場合は False
    • -
  • -
  • data が DataFrame-like の場合
    -
      -
    • to_pd_Series = False のとき:各列ごとの判定結果を要素とする list[bool]
    • -
    • to_pd_Series = True のとき:列名をインデックスにもつ pd.Series
    • -
  • -
-
-
-

20.4 使用例 Examples

-
import py4stats as py4st
-import pandas as pd
-from palmerpenguins import load_penguins
-
-penguins = load_penguins() # サンプルデータの読み込み
-
-# ダミー変数の作成
-penguins2 = pd.get_dummies(
-    penguins.loc[:, 'species':'bill_length_mm'], 
-    columns = ['species']
-    )
-penguins2['Intercept'] = 1 # 定数列の作成
-penguins2['female'] = penguins['sex'] == 'female' # bool 型の変数を作成
-
-print(py4st.is_dummy(penguins2['species_Adelie']))
-#> True
-

なお、初期設定では bool 型の変数についても True が出力されます。

-
print(py4st.is_dummy(penguins2))
-#> island               False
-#> bill_length_mm       False
-#> species_Adelie        True
-#> species_Chinstrap     True
-#> species_Gentoo        True
-#> Intercept            False
-#> female                True
-#> Name: 0, dtype: bool
-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/miscellaneous.html b/docs/docs/man/miscellaneous.html deleted file mode 100644 index 7364330..0000000 --- a/docs/docs/man/miscellaneous.html +++ /dev/null @@ -1,957 +0,0 @@ - - - - - - - - - -35  数字のフォーマットを変更する関数 – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

35  数字のフォーマットを変更する関数

-
- - - -
- - - - -
- - - -
- - -
-

35.1 概要

-
style_number(x, digits = 2, big_mark = ',')
-
-style_currency(x, symbol = '$', digits = 0, big_mark = ',')
-
-style_percent(x, digits = 2, unit = 100, symbol = '%')
-
-
-

35.2 引数 Argument

-
    -
  • xscalar or array-like of int or float
  • -
  • p_valuescalar or array-like of int or float
  • -
  • digitsint
    小数点以下の桁数
  • -
  • big_markint
    3桁毎の桁区切りに使用する記号。カンマ ',', アンダーバー '_', もしくは 非表示 '' から選ぶことができます。
  • -
  • symbolstr
     貨幣記号を表す文字列
  • -
-
-
-

35.3 返り値 Value

-

 以下の値をもつ pd.Series を返します。

-
    -
  • building_block.style_number(): 任意の数値に対して、小数点以下を桁数 digits に丸め、3桁区切り記号を通過した値を文字列として返します。f-string によるフォーマット f'{x:{big_mark}.{digits}f}' を用いて実装されています。
  • -
  • building_block.style_currency()build.style_number() と同じく任意の数値に対して、小数点以下を桁数 digits に丸め、3桁区切り記号を通過した値を文字列として返しますが、さらに貨幣記号を追加します。f-string によるフォーマット f'{symbol}{x:{big_mark}.{digits}f}' を用いて実装されています。
  • -
  • building_block.style_percent(): 任意の数値をパーセンテージ表示に変換した値を文字列として返します。f-string によるフォーマット f'{x:,.{digits}%}' を用いて実装されています。
  • -
-
-
-

35.4 使用例 Examples

-
import numpy as np
-from py4stats import building_block as build
-
-x = [2000, 1000, 0.5, 0.11, 0.123]
-
-print(build.style_number(x).to_list())
-#> ['2,000.00', '1,000.00', '0.50', '0.11', '0.12']
-
-print(build.style_number(x, big_mark = '').to_list())
-#> ['2000.00', '1000.00', '0.50', '0.11', '0.12']
-
-print(build.style_currency(x).to_list())
-#> ['$2,000', '$1,000', '$0', '$0', '$0']
-
pct = [0.11, 0.06, 0.05, 0.01, 0.00234]
-
-print(build.style_percent(pct).to_list())
-#> ['11.00%', '6.00%', '5.00%', '1.00%', '0.23%']
-
-print(build.style_percent(pct, unit = 1).to_list())
-#> ['0.11%', '0.06%', '0.05%', '0.01%', '0.00%']
-
-print(build.style_percent(pct, unit = 1000, symbol = '‰').to_list())
-#> ['110.00‰', '60.00‰', '50.00‰', '10.00‰', '2.34‰']
-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/oxford_comma.html b/docs/docs/man/oxford_comma.html deleted file mode 100644 index e53940a..0000000 --- a/docs/docs/man/oxford_comma.html +++ /dev/null @@ -1,941 +0,0 @@ - - - - - - - - - -37  並列文の作成 oxford_comma() – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

37  並列文の作成 oxford_comma()

-
- - - -
- - - - -
- - - -
- - -
-

37.1 概要

-

 文字列のリストを与えると、リストの要素を英文における並列文の形に変換する関数です。表記法については Wikipedia Serial comma を参照し、コードについては stack overflow:Grammatical List Join in Python [duplicate] を参照しました。

-
oxford_comma(x, sep_last = 'and', quotation = True)
-
-oxford_comma_and(x, quotation = True)
-
-oxford_comma_or(x, quotation = True)
-
-
-

37.2 引数

-
    -
  • xstr or list of str
  • -
  • quotation: bool
     リストの各要素にクオーテーションマーク ’’ を追加するかどうかを表す論理値。True(初期設定)であればクオーテーションマークを追加し、False であれば追加しません。
  • -
  • sep_last: str oxford_comma() のみ
     リストの最後の要素の直前に付加する単語を表す文字列。
  • -
-

なお、oxford_comma_and(x)oxford_comma(x, 'and') と、oxford_comma_or(x)oxford_comma(x, 'or') と同等です。

-
-
-

37.3 使用例

-
from py4stats import building_block as build
-x = ['A', 'B', 'C']
-
-print(build.oxford_comma_and(x))
-#> 'A', 'B' and 'C'
-
-print(build.oxford_comma_and(x, quotation = False))
-#> A, B and C
-
-print(build.oxford_comma_or(x))
-#> 'A', 'B' or 'C'
-

リストの要素が1つの場合、あるいは x に文字列が指定された場合はカンマなどを追加せずにそのまま出力します。

-
print(build.oxford_comma_or(['A']))
-#> 'A'
-
-print(build.oxford_comma_or('A'))
-#> 'A'
-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/plot_category.html b/docs/docs/man/plot_category.html deleted file mode 100644 index 962a17b..0000000 --- a/docs/docs/man/plot_category.html +++ /dev/null @@ -1,992 +0,0 @@ - - - - - - - - - -8  py4stats.plot_category() – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

8  py4stats.plot_category()

-
- - - -
- - - - -
- - - -
- - -

カテゴリ変数の回答分布を 100% 積み上げ横棒グラフとして描画します。

-
-

8.1 概要

-

本関数は、複数のカテゴリ変数について回答分布を集計し、各変数を1本の100%積み上げ横棒グラフとして可視化します。リッカート尺度による設問や、共通のカテゴリをもつ、アンケートの回答データの可視化を主な用途としています。

-
plot_category(
-    data: IntoFrameT,
-    palette: Optional[sns.palettes._ColorPalette] = None,
-    legend_type: Literal['horizontal', 'vertical', 'none'] = 'horizontal',
-    show_vline: bool = True,
-    ax: Optional[Axes] = None,
-):
-
-
-

8.2 引数 Argument

-
    -
  • dataIntoFrameT(必須)
    カテゴリ変数を含む入力データフレーム(1列につき1変数)。 narwhals がサポートする任意のデータフレーム型(例:pandas.DataFramepolars.DataFrame)を指定できます。 すべての列は、同一のカテゴリ体系(共通のカテゴリラベル)を共有している必要があります。 注意pyarrow.Table については、その仕様による機能制限があります。詳細は「注意 Notes」セクションを参照してください。
  • -
  • sort_by: str
    回答カテゴリの並び順を決定する基準。'values':カテゴリの値(ラベル)でソートします。'frequency':出現頻度の高い順にソートします。デフォルトは 'values' です。
  • -
  • palette sns.palettes._ColorPalette:
    回答カテゴリに使用するカラーパレット。 None の場合は、内部でデフォルトの発散型パレットを生成します。 指定する場合は、カテゴリ数と同じ長さの配列である必要があります。 デフォルトは None です。
  • -
  • legend_typestr:
    凡例の配置方法。デフォルトは 'horizontal' です。 -
      -
    • 'horizontal':凡例をグラフ下部に横並びで表示します。
    • -
    • 'vertical':凡例をグラフ右側に縦並びで表示します。
    • -
    • 'none':凡例を表示しません。
    • -
  • -
  • show_vline:bool
    True の場合、x = 0.5(50%)の位置に基準となる垂直線を描画します。 割合の中点を視覚的に示す目的で使用できます。デフォルトは True です。
  • -
  • ax:
    描画先となる matplotlib の Axes。複数のグラフを並べる場合などに使用します。デフォルトの None の場合は、新しい Figure と Axes が作成されます。
  • -
-
-
-

8.3 使用例 Example

-
import py4stats as py4st
-import pandas as pd
-import itertools
-
-Q1 = [70 * ['Strongly agree'], 200 * ['Agree'], 235 * ['Disagree'], 149 * ['Strongly disagree']]
-Q2 = [74 * ['Strongly agree'], 209 * ['Agree'], 238 * ['Disagree'], 133 * ['Strongly disagree']]
-Q3 = [59 * ['Strongly agree'], 235 * ['Agree'], 220 * ['Disagree'], 140 * ['Strongly disagree']]
-Q4 = [40 * ['Strongly agree'], 72 * ['Agree'], 266 * ['Disagree'], 276 * ['Strongly disagree']]
-
-data = pd.DataFrame({
-    'I read only if I have to.':list(itertools.chain.from_iterable(Q1)),
-    'Reading is one of my favorite hobbies.':list(itertools.chain.from_iterable(Q2)),
-    'I like talking about books with other people.':list(itertools.chain.from_iterable(Q3)),
-    'For me, reading is a waste of time.':list(itertools.chain.from_iterable(Q4))
-})
-
categ_list = ['Strongly disagree', 'Disagree', 'Agree', 'Strongly agree']
-
-data_pd = data.apply(pd.Categorical, categories = categ_list)
-
-py4st.plot_category(data_pd)
-
-
-

-
plot_category1
-
-
-
import polars as pl
-import textwrap
-
-data_pl = pl.from_pandas(data)
-data_pl = data_pl.with_columns(
-        pl.all().cast(pl.Enum(categ_list))
-    )\
-    .rename(lambda x: textwrap.fill(x, width = 25))
-
-fig, ax = plt.subplots()
-
-py4st.plot_category(
-    data_pl, 
-    palette = sns.color_palette('RdBu', n_colors = 4),
-    ax = ax
-    )
-
-ax.set_title('Survey on attitudes toward reading');
-
-
-

-
plot_category2
-
-
-
-
-

8.4 注意 Notes

-
    -
  • sort_by="values" は、カテゴリの順序情報(例:pandasordered categoricalPolarsEnum で定義した順序)を前提に、カテゴリ順で描画します。
  • -
  • 推奨: sort_by=“values” を利用する場合は、入力として pandas.DataFrame(各列を pd.Categorical に設定)または polars.DataFrame(各列を Enum に設定)を推奨します。
  • -
  • polars.Categorical の列では、カテゴリ順が期待通りに保持されず、辞書順(例:Agree, Disagree, …)で描画される場合があります。
  • -
  • pyarrow.Table を入力した場合、sort_by = 'values’dictionary 型の制約によりエラーとなる場合があります。その場合は sort_by="frequency" を使用してください。
  • -
- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/plot_miss_var.html b/docs/docs/man/plot_miss_var.html deleted file mode 100644 index 22948f8..0000000 --- a/docs/docs/man/plot_miss_var.html +++ /dev/null @@ -1,957 +0,0 @@ - - - - - - - - - -16  py4stats.plot_miss_var() – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

16  py4stats.plot_miss_var()

-
- - - -
- - - - -
- - - -
- - -
-

16.1 概要

-

R言語の naniar::gg_miss_var() をオマージュした関数で、データフレームの各変数について欠測値の量を横棒グラフとして可視化します。欠損値統計の計算には py4stats.diagnose() を使用しています。

-
plot_miss_var(
-    data: IntoFrameT,
-    values: Literal['missing_percent', 'missing_count'] = 'missing_percent', 
-    sort: bool = True, 
-    miss_only: bool = False, 
-    top_n: Optional[int] = None,
-    fontsize: int = 12,
-    ax: Optional[Axes] = None,
-    color: str = '#478FCE',
-    **kwargs: Any
-)
-
-
-

16.2 引数 Argument

-
    -
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • -
  • normalizestr
     グラフに表示する値の種類。 -
      -
    • missing_percent 列毎の欠測率をパーセンテージで表示します。
    • -
    • columns 列毎の欠測数を表示します。
    • -
  • -
  • sortbool
    プロット前に選択した指標で列をソートするかどうか。初期設定は True です。。
  • -
  • miss_onlybool
    欠測値を含まない列を除外するかどうか。True だと欠測値を含まない列を除外し、False(初期設定)だと省略せずに全ての列を表示します。
  • -
  • top_nint
    棒グラフを表示するグラフの個数。top_n = None(初期設定)の場合、すべての棒グラフを表示し、整数値が指定された場合、欠測率(数)の上位 top_n 件が表示されます。
  • -
  • ax
     matplotlib の ax オブジェクト。複数のグラフを並べる場合などに使用します。
  • -
  • fontsizeint
     軸ラベルなどのフォントサイズ。
  • -
  • palettelist of str
     グラフの描画に使用する色コード。棒グラフの色に対応します。
  • -
-
-
-

16.3 使用例 Example

-
import py4stats as py4st
-import pandas as pd
-from palmerpenguins import load_penguins
-penguins = load_penguins() # サンプルデータの読み込
-
-py4st.plot_miss_var(penguins)
-
-
-

-
plot_miss_var1
-
-
-
py4st.plot_miss_var(penguins, values = 'missing_count', miss_only = True)
-
-
-

-
plot_miss_var2
-
-
-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/point_range.html b/docs/docs/man/point_range.html deleted file mode 100644 index e6c062a..0000000 --- a/docs/docs/man/point_range.html +++ /dev/null @@ -1,972 +0,0 @@ - - - - - - - - - -10  数値変数の点推定と区間推定:py4stats.mean_qi() py4stats.median_qi() py4stats.mean_ci() – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

10  数値変数の点推定と区間推定:py4stats.mean_qi() py4stats.median_qi() py4stats.mean_ci()

-
- - - -
- - - - -
- - - -
- - -
-

10.1 概要

-

 R言語の ggdist::mean_qi() をオマージュした数値変数の点推定と区間推定を行う関数です。

-
mean_qi(
-    data: Union[IntoFrameT, SeriesT],
-    width: float = 0.975,
-    interpolation: str = 'midpoint',
-    to_native: bool = True
-)
-mean_qi(
-    data: Union[IntoFrameT, SeriesT],
-    width: float = 0.975,
-    interpolation: str = 'midpoint',
-    to_native: bool = True
-)
-
-median_qi(
-    data: Union[IntoFrameT, IntoSeriesT],
-    width: float = 0.975,
-    interpolation: str = 'midpoint',
-    to_native: bool = True
-)
-
-mean_ci(
-    data: Union[IntoFrameT, IntoSeriesT],
-    width: float = 0.975,
-    to_native: bool = True
-)
-
-
-

10.2 引数 Argument

-
    -
  • dataIntoFrameT or IntoSeriesT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame もしくは Series 互換オブジェクト (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • -
  • widthfloat
     分位点区間の幅、もしくは信頼区間の計算に用いる信頼係数。
  • -
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • -
-
-
-

10.3 使用例 Examples

-
import py4stats as py4st
-import pandas as pd
-from palmerpenguins import load_penguins
-penguins = load_penguins() # サンプルデータの読み込み
-
-print(py4st.mean_qi(penguins['bill_length_mm']).round(2))
-#>          variable   mean  lower  upper
-#> 0  bill_length_mm  43.92   34.8   53.1
-
-
-print(py4st.median_qi(penguins['bill_length_mm']).round(2))
-#>          variable  median  lower  upper
-#> 0  bill_length_mm   44.45   34.8   53.1
-
-print(py4st.mean_ci(penguins['bill_length_mm']).round(2))
-#>          variable   mean  lower  upper
-#> 0  bill_length_mm  43.92  43.26  44.58
-
-print(py4st.mean_ci(penguins[['bill_length_mm', 'bill_depth_mm']]).round(2))
-#>          variable   mean  lower  upper
-#> 0  bill_length_mm  43.92  43.26  44.58
-#> 1   bill_depth_mm  17.15  16.91  17.39
-
-print(penguins.groupby('species')[['bill_length_mm']].apply(py4st.median_qi).round(2))
-#>                    variable  median  lower  upper
-#> species                                          
-#> Adelie    0  bill_length_mm   38.80  34.05  44.10
-#> Chinstrap 0  bill_length_mm   49.55  42.45  55.00
-#> Gentoo    0  bill_length_mm   47.30  42.65  53.85
-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/predicate_str.html b/docs/docs/man/predicate_str.html deleted file mode 100644 index 5fb457f..0000000 --- a/docs/docs/man/predicate_str.html +++ /dev/null @@ -1,1003 +0,0 @@ - - - - - - - - - -19  文字列のフォーマットについての論理関数 py4stats.is_number(), py4stats.is_ymd(), py4stats.is_ymd_like() – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

19  文字列のフォーマットについての論理関数
py4stats.is_number(), py4stats.is_ymd(), py4stats.is_ymd_like()

-
- - - -
- - - - -
- - - -
- - -
-

19.1 概要

-

Series の要素が、特定のフォーマットにそった文字列かどうかを判定する関数です。

-
is_number(
-  data:IntoSeriesT, 
-  na_default:bool = True, 
-  to_native: bool = True
-  )
-
-is_ymd(
-  data:IntoSeriesT, 
-  na_default:bool = True, 
-  to_native: bool = True
-  )
-
-is_ymd_like(
-  data:IntoSeriesT, 
-  na_default:bool = True, 
-  to_native: bool = True
-  )
-
    -
  • py4stats.is_number():与えられた文字列が数字かどうかを判定します。
  • -
  • py4stats.is_ymd():与えられた文字列が yyyy-mm-dd フォーマットにそった値かどうかを判定します。
  • -
  • py4stats.is_ymd_like():与えられた文字列が’2024年3月3日’ のような yyyy-mm-dd に近いフォーマットの値かどうかを判定します。
  • -
-
-
-

19.2 引数 Argument

-
    -
  • dataIntoSeriesT(必須)
  • -
  • 入力データ。narwhals が受け入れ可能な Series 互換オブジェクト (例:pandas.Seriespolars.DataFramepyarrow.Table)を指定できます。
  • -
  • na_defaultbool
     NA値に対して関数が返す値。na_default = True (初期設定)であれば NoneNaN には True を返し、na_default = False であれば False が返します。
  • -
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • -
-
-
-

19.3 使用例

-
import py4stats as py4st
-import pandas as pd
-import numpy as np
-
-s = pd.Series([
-    '123', "0.12", "1e+07", '-31', '2個', '1A',
-    "2024-03-03", "2024年3月3日", "24年3月3日", '令和6年3月3日',
-    '0120-123-456', "apple", "不明", None, np.nan
-    ])
-
-print(s[py4st.is_number(s)])
-#> 0       123
-#> 1      0.12
-#> 2     1e+07
-#> 3       -31
-#> 13     None
-#> 14      NaN
-#> dtype: object
-
-print(s[py4st.is_ymd(s)])
-#> 6     2024-03-03
-#> 13          None
-#> 14           NaN
-#> dtype: object
-
-print(s[py4st.is_ymd_like(s)])
-#> 6     2024-03-03
-#> 7      2024年3月3日
-#> 8        24年3月3日
-#> 9       令和6年3月3日
-#> 13          None
-#> 14           NaN
-#> dtype: object
-

 実践的な使用例として「厚生労働省 4.食中毒統計資料」のうち、2020年の食中毒事件一覧を考えます。東京都のデータを取り出て'摂食者数'の列を見ると、数字が並んでいるものの dtypeobject となっており、数字ではない値が含まれていることが疑われます。

-
# 厚生労働省:食中毒統計資料より
-data = pd.read_excel('https://www.mhlw.go.jp/content/R2itiran.xlsx', header = 1)\
-  .query('都道府県名等.str.contains("東京")')
-
-print(data['摂食者数'])
-#> 280    41
-#> 281    86
-#> 282     3
-#> 283    10
-#> 284     3
-#>        ..
-#> 381     2
-#> 382     2
-#> 383     4
-#> 384     6
-#> 385     4
-#> Name: 摂食者数, Length: 106, dtype: object
-

eda.is_number() を使うと数字以外にどのような値が含まれているかを確認できるため、これをもとに「不明」となっている部分は NaN に置き換えるなどの対処法が考えられます。

-
print(data.loc[~py4st.is_number(data['摂食者数']), '摂食者数'])
-#> 285    不明
-#> 315    不明
-#> 374    不明
-#> 375    不明
-#> 377    不明
-#> 378    不明
-#> 379    不明
-#> 380    不明
-#> Name: 摂食者数, dtype: object
-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/relocate.html b/docs/docs/man/relocate.html deleted file mode 100644 index 28a0d6f..0000000 --- a/docs/docs/man/relocate.html +++ /dev/null @@ -1,994 +0,0 @@ - - - - - - - - - -13  py4stats.relocate(): 列を削除せずに並び替える – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

13  py4stats.relocate(): 列を削除せずに並び替える

-
- - - -
- - - - -
- - - -
- - -
-

13.1 概要

-

relocate() 関数は、データフレームに含まれる列を削除することなく並び替えるための関数です。指定した列(1 列または複数列)を、先頭・特定の列の前・特定の列の後に移動させることができます。本関数は、R の dplyr:relocate() に近い操作感を Python で提供することを目的としています。列の指定には、列名(文字列)だけでなく、narwhals の式(Expr)や Selector を利用でき、柔軟な列選択

-
relocate(
-        data: IntoFrameT, 
-        *args: Union[str, List[str], narwhals.Expr, narwhals.selectors.Selector], 
-        before: Optional[str] = None,
-        after: Optional[str] = None,
-        place: Optional[Literal["first", "last"]] = None,
-        to_native: bool = True
-    ):
-
-
-

13.2 引数 Argument

-
    -
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。

  • -
  • *argsstr / list[str] / narwhals.Expr / narwhals.Selector
    移動したい列を指定します。指定方法は次のとおりです。

    -
      -
    • 列名(例:"x"
    • -
    • 列名のリスト(例:["x", "y"]
    • -
    • narwhals の式(Expr)(例:nw.col("x")
    • -
    • narwhals の Selector (例:ncs.numeric()
    • -
    -

    指定した順序は、移動後の列順にもそのまま反映されます。

  • -
  • beforestr, optional)
    args で指定された列を、この列の直前に移動します。
    after と同時に指定することはできません。デフォルトは None です。

  • -
  • afterstr, optional)
    args で指定された列を、この列の直後に移動します。
    before と同時に指定することはできません。デフォルトは None です。

  • -
  • placestr, optional)
    *args で指定された列の、配置場所を指定します。

    -
      -
    • "first": 選択した列をデータフレームの先頭(最も左)に配置します。
    • -
    • "last": 選択した列をデータフレームの末尾(最も右)に配置します。 place 引数は before または after と同時に指定することはできません。 未指定(None)の場合は "first" と同じ挙動になります。
    • -
  • -
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。

  • -
-
-

13.2.1 返り値

-
    -
  • IntoFrameT
    入力データフレームと同じ列を保持したまま、指定されたルールに従って並び替えられたデータフレームを返します。
  • -
-
-
-
-

13.3 使用例 Example

-
import py4stats as py4st
-import pandas as pd
-import narwhals.selectors as ncs
-from palmerpenguins import load_penguins
-
-penguins_mini = py4st.filtering_out(penguins, starts_with = 'bill').head(3)
-print(penguins_mini)
-#>   species     island  flipper_length_mm  body_mass_g     sex  year
-#> 0  Adelie  Torgersen              181.0       3750.0    male  2007
-#> 1  Adelie  Torgersen              186.0       3800.0  female  2007
-#> 2  Adelie  Torgersen              195.0       3250.0  female  2007
-
# *args に指定した列は最前列に移動します
-print(py4st.relocate(penguins_mini, 'year', 'sex'))
-#>    year     sex species     island  flipper_length_mm  body_mass_g
-#> 0  2007    male  Adelie  Torgersen              181.0       3750.0
-#> 1  2007  female  Adelie  Torgersen              186.0       3800.0
-#> 2  2007  female  Adelie  Torgersen              195.0       3250.0
-
-# ncs.numeric() を使うことで、数値変数を指定できます
-print(py4st.relocate(penguins_mini, ncs.numeric()))
-#>    flipper_length_mm  body_mass_g  year species     island     sex
-#> 0              181.0       3750.0  2007  Adelie  Torgersen    male
-#> 1              186.0       3800.0  2007  Adelie  Torgersen  female
-#> 2              195.0       3250.0  2007  Adelie  Torgersen  female
-
-# year 列を island 列の直前に移動
-print(py4st.relocate(penguins_mini, 'year', before = 'island'))
-#>   species  year     island  flipper_length_mm  body_mass_g     sex
-#> 0  Adelie  2007  Torgersen              181.0       3750.0    male
-#> 1  Adelie  2007  Torgersen              186.0       3800.0  female
-#> 2  Adelie  2007  Torgersen              195.0       3250.0  female
-
-# year 列を island 列の直後に移動
-print(py4st.relocate(penguins_mini, 'year', after = 'island'))
-#>   species     island  year  flipper_length_mm  body_mass_g     sex
-#> 0  Adelie  Torgersen  2007              181.0       3750.0    male
-#> 1  Adelie  Torgersen  2007              186.0       3800.0  female
-#> 2  Adelie  Torgersen  2007              195.0       3250.0  female
-
-#.  place = 'last' で最後列に移動
-print(py4st.relocate(penguins_mini, 'year', place = 'last'))
-#>   species     island  flipper_length_mm  body_mass_g     sex  year
-#> 0  Adelie  Torgersen              181.0       3750.0    male  2007
-#> 1  Adelie  Torgersen              186.0       3800.0  female  2007
-#> 2  Adelie  Torgersen              195.0       3250.0  female  2007
-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/remove_empty_constant.html b/docs/docs/man/remove_empty_constant.html deleted file mode 100644 index 4f92720..0000000 --- a/docs/docs/man/remove_empty_constant.html +++ /dev/null @@ -1,1017 +0,0 @@ - - - - - - - - - -11  空白列, 定数列の削除:py4stats.remove_empty(), py4stats.remove_constant() – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

11  空白列, 定数列の削除:py4stats.remove_empty(), py4stats.remove_constant()

-
- - - -
- - - - -
- - - -
- - -
-

11.1 概要

-

 py4stats.remove_empty()はR言語の janitor:remove_empty() をオマージュした関数で、全ての要素が NaN である列や行をデータフレームから除外します py4stats.remove_constant() はR言語の janitor:remove_constant() をオマージュした関数で、1種類だけの要素からなる列をデータフレームから除外します。

-
remove_empty(
-    data: IntoFrameT,
-    cols: bool = True,
-    rows: bool = True,
-    cutoff: float = 1.0,
-    quiet: bool = True,
-    to_native: bool = True,
-    **kwargs: Any
-) 
-
-remove_constant(
-    data: IntoFrameT,
-    quiet: bool = True,
-    to_native: bool = True,
-    dropna = False,
-    **kwargs: Any
-)
-
-
-

11.2 引数 Argument

-
    -
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • -
  • colsbool
     空白列を削除するかどうかを表すブール値(remove_empty() のみ)。True(初期設定) なら空白列を削除し、Falseなら全ての要素が NaN の列があっても削除しません。
  • -
  • rowsbool
     空白行を削除するかどうかを表すブール値(remove_empty() のみ)。True(初期設定) なら空白行を削除し、Falseなら全ての要素が NaN の行があっても削除しません。
  • -
  • cutofffloat
     列(行)の削除を行うかどうかを判定する欠測率の閾値(remove_empty() のみ)。ある列(行)における NaN の割合が >= cutoff のとき、その列(行)を削除します。初期設定は1で全ての要素が NaN の列(行)のみ削除しますが、例えば cutoff = 0.9 とすることで NaN の割合9が割以上の列(行)を削除できます。
  • -
  • quietbool
     削除した列(行)を報告するかどうかを表すブール値。quiet = True(初期設定) であれば何も報告せずに削除だけ行い、quiet = False なら、削除した列(行)の数と列名(行名)を報告します。
  • -
  • dropnabool
     ユニーク値の数を計算する際に、NaN を除外するかどうかを表すブール値(remove_constant() のみ)。dropna = True だと NaN を除外し、dropna = False(初期設定)だと NaN を除外しません。データフレームに NaN と、 NaN ではない1種類の値からなる列がある場合、dropna = False だと削除されず、dropna = True だと削除されます。
  • -
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • -
-
-
-

11.3 使用例 Example

-

py4stats.remove_empty() の使用例。

-
import py4stats as py4st
-import pandas as pd
-from palmerpenguins import load_penguins
-penguins = load_penguins() # サンプルデータの読み込み
-
-penguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy()
-# 空白列を作成
-penguins2.loc[:, 'empty'] = np.nan
-# 空白行を作成
-penguins2.loc[344, :] = np.nan
-
-print(penguins2.tail(3))
-#>        species  body_mass_g  empty
-#> 342  Chinstrap       4100.0    NaN
-#> 343  Chinstrap       3775.0    NaN
-#> 344        NaN          NaN    NaN
-
# 完全に空白な行と列を削除。
-print(py4st.remove_empty(penguins2, quiet = False).tail(3))
-#> Removing 1 empty column(s) out of 3 columns(Removed: empty).
-#> Removing 1 empty row(s) out of 345 rows(Removed: 344).
-#>        species  body_mass_g
-#> 341  Chinstrap       3775.0
-#> 342  Chinstrap       4100.0
-#> 343  Chinstrap       3775.0
-
-# 完全に空白な列のみ削除。
-print(py4st.remove_empty(penguins2, rows = False, quiet = False).tail(3))
-#> Removing 1 empty column(s) out of 3 columns(Removed: empty).
-#>        species  body_mass_g
-#> 342  Chinstrap       4100.0
-#> 343  Chinstrap       3775.0
-#> 344        NaN          NaN
-
-# 完全に空白な行のみ削除。
-print(py4st.remove_empty(penguins2, cols = False, quiet = False).tail(3))
-#> Removing 1 empty row(s) out of 345 rows(Removed: 344).
-#>        species  body_mass_g  empty
-#> 341  Chinstrap       3775.0    NaN
-#> 342  Chinstrap       4100.0    NaN
-#> 343  Chinstrap       3775.0    NaN
-
# quiet = True の場合
-print(py4st.remove_empty(penguins2).tail(3))
-#>        species  body_mass_g
-#> 341  Chinstrap       3775.0
-#> 342  Chinstrap       4100.0
-#> 343  Chinstrap       3775.0
-

py4stats.remove_constant() の使用例。

-
penguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy()
-penguins2.loc[:, 'constant'] = 'c'
-
-print(penguins2.head(3))
-#>   species  body_mass_g constant
-#> 0  Adelie       3750.0        c
-#> 1  Adelie       3800.0        c
-#> 2  Adelie       3250.0        c
-
-print(py4st.remove_constant(penguins2, quiet = False).head(3))
-#> Removing 1 constant column(s) out of 3 column(s)(Removed: constant).
-#>   species  body_mass_g
-#> 0  Adelie       3750.0
-#> 1  Adelie       3800.0
-#> 2  Adelie       3250.0
-
penguins2.loc[:, 'almost_empty'] = pd.NA
-penguins2.loc[1, 'almost_empty'] = 'c'
-
-# dropna = False なら、almost_empty は削除されません。
-print(py4st.remove_constant(penguins2).head(3))
-#>   species  body_mass_g almost_empty
-#> 0  Adelie       3750.0         <NA>
-#> 1  Adelie       3800.0            c
-#> 2  Adelie       3250.0         <NA>
-
-print(py4st.remove_constant(penguins2, dropna = True).head(3))
-#>   species  body_mass_g
-#> 0  Adelie       3750.0
-#> 1  Adelie       3800.0
-#> 2  Adelie       3250.0
-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/scale_wmean.html b/docs/docs/man/scale_wmean.html deleted file mode 100644 index c526eac..0000000 --- a/docs/docs/man/scale_wmean.html +++ /dev/null @@ -1,1013 +0,0 @@ - - - - - - - - - -18  数値変換・正規化ユーティリティ: py4stats.weighted_mean(), py4stats.scale(), py4stats.min_max() – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

18  数値変換・正規化ユーティリティ: py4stats.weighted_mean(), py4stats.scale(), py4stats.min_max()

-
- - - -
- - - - -
- - - -
- - -

本モジュールは、探索的データ解析(EDA)で頻繁に用いられる加重平均の計算および 数値データの正規化・標準化を行う関数群を提供します。
-内部では narwhals を利用することで、pandas・polars など複数のデータフレーム/シリーズ実装に対して共通の API を提供しています。

-
-

18.1 概要

-
weighted_mean(
-    x: IntoSeriesT, 
-    w: IntoSeriesT, 
-    dropna:bool = False
-    ) -> float:
-
-scale(
-    x: Union[IntoSeriesT, pd.DataFrame], 
-    ddof: int = 1, to_native: bool = True
-    ) -> IntoSeriesT:
-
-min_max(
-    x: Union[IntoSeriesT, pd.DataFrame], 
-    to_native: bool = True
-    ) -> IntoSeriesT:
-

weighted_mean(): 数値系列 x と対応する重み w を用いて、加重平均を計算します。欠損値の扱いを制御するためのオプションを備えています。

-

scale(): 数値データを Z スコア標準化します。系列データを主な対象としますが、pandas.DataFrame に対しても専用実装により列単位での標準化をサポートしています。

-

min_max(): 数値データを Min-Max Normarization により \([0, 1]\) の範囲に変換します。scale() と同様に、Series を主対象としつつ pandas.DataFrame にも対応しています。

-
-
-

18.2 引数 Argument

-
    -
  • xIntoSeriesT or pd.DataFrame(必須)
    -
      -
    • narwhals が受け入れ可能な Series 互換オブジェクト(例:pandas.Seriespolars.Series)を指定できます。scale()関数と min_max()関数のみ pandas.DataFrame を指定することができ、この場合、各列ごとに変換が適用されます。
    • -
  • -
  • wIntoSeriesT(必須)
    x に対応する重みを表す数値系列。x と同じ長さである必要があります。narwhals が受け入れ可能な Series 互換オブジェクト(例:pandas.Seriespolars.Series)を指定できます。
  • -
  • ddofint, optional)scale(), min_max() のみ
    標準偏差の計算に用いる自由度調整量(delta degrees of freedom)。デフォルトは 1 です。
  • -
  • dropnabool, optional)scale(), min_max() のみ
    True の場合、x または w のいずれかが欠損値(NaN)である観測を計算前に除外します。デフォルトは False です。
  • -
  • to_nativebool, optional)scale(), min_max() のみ
    True の場合、入力と同じ型の Series(e.g. pandas / polars / pyarrow)を返します。
    False の場合、Series を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • -
-
-
-
-

18.3 返り値 Value

-
    -
  • weighted_mean -
      -
    • float
    • -
    • 加重平均
    • -
  • -
  • scale -
      -
    • IntoSeriesT
    • -
    • 平均 0、標準偏差 1 に標準化された値を返します。
    • -
  • -
  • min_max -
      -
    • IntoSeriesT
    • -
    • 最小値が 0、最大値が 1 となるよう正規化された値を返します。
    • -
  • -
-
-
-

18.4 使用例 Example

-
import py4stats as py4st
-import pandas as pd
-from palmerpenguins import load_penguins
-penguins = load_penguins() # サンプルデータの読み込
-
-x1 = penguins.groupby('species')['bill_length_mm'].mean()
-w = penguins.groupby('species')['bill_length_mm'].count()
-
-print(
-    f"{py4st.weighted_mean(x1, w) :.2f}, "
-    f"{penguins['bill_length_mm'].mean() :.2f}"
-)
-#> 43.92, 43.92
-
-x2 = penguins['bill_length_mm']
-z1 = py4st.scale(x2)
-print(f"{z1.mean():.2f}, {z1.std():.2f}")
-#> 0.00, 1.00
-
-z2 = py4st.min_max(x2)
-print(f"{z2.min():.2f}, {z2.max():.2f}")
-#> 0.00, 1.00
- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/set_miss.html b/docs/docs/man/set_miss.html deleted file mode 100644 index d676c74..0000000 --- a/docs/docs/man/set_miss.html +++ /dev/null @@ -1,976 +0,0 @@ - - - - - - - - - -17  py4stats.set_miss() – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

17  py4stats.set_miss()

-
- - - -
- - - - -
- - - -
- - -
-

17.1 概要

-

この関数は、Series の非欠測要素のうち、指定された個数または割合を欠測値に置き換えます。narwhals を利用することで、複数の Series バックエンドに対応しています。主にテストデータの作成や、欠測データのシミュレーションを目的とした関数です。

-
set_miss(
-    x: IntoSeriesT, 
-    n: Optional[int] = None,
-    prop: Optional[float] = None, 
-    method: Literal['random', 'first', 'last'] = 'random', 
-    random_state: Optional[int] = None, 
-    na_value: Any = None,
-    to_native: bool = True
-    )
-
-
-

17.2 引数 Argument

-
    -
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • -
  • nint
    処理後の Series に含まれる欠測値の目標個数。すでに n 個以上の欠測値が含まれている場合は、新たな欠測値は追加されず、警告が発せられます。
  • -
  • propfloat
    処理後の Series に含まれる欠測値の目標割合。0 から 1 の間で指定してください。すでに欠測値の割合が prop 以上である場合は、新たな欠測値は追加されず、警告が発せられます。
  • -
  • method: str: 欠測値に置き換える要素の選択方法。 -
      -
    • 'random': 非欠測要素の中からランダムに選択します。
    • -
    • 'first': Series の先頭から選択します。
    • -
    • 'last': Series の末尾から選択します。 デフォルトは 'random' です。
    • -
  • -
  • random_state (int, optional): method = 'random' の場合に使用する乱数シード。再現性のある結果を得るために指定できます。 method'random' 以外の場合、random_state は無視されます。
  • -
  • na_value: (Any)
    欠測値として使用する値。デフォルトは None です。
  • -
  • to_nativebool, optional)
    True の場合、入力と同じ型の Series(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.Series を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • -
-
-
-

17.3 使用例 Example

-
import pandas as pd
-from py4stats import set_miss
-s = pd.Series([1, 2, 3, 4, 5])
-py4st.set_miss(s, n = 2, method='first')
-#> 0    NaN
-#> 1    NaN
-#> 2    3.0
-#> 3    4.0
-#> 4    5.0
-#> dtype: float64
-
-s_miss = py4st.set_miss(s, prop=0.4, method='random', random_state=0)
-#> 0    1.0
-#> 1    NaN
-#> 2    3.0
-#> 3    NaN
-#> 4    5.0
-#> dtype: float64
-

x に代入された Series オブジェクトに、既に指定された以上の欠測値が含まれていた場合、次のように欠測値を追加せず UserWarning を出します。

-
py4st.set_miss(s_miss, n = 2)
-#> UserWarning: Already contained 2(>= n) missing value(s) in `x`, 
-#> no additional missing values were added.
-#> 0    1.0
-#> 1    NaN
-#> 2    3.0
-#> 3    NaN
-#> 4    5.0
-#> dtype: float64
-
from palmerpenguins import load_penguins
-penguins = load_penguins() # サンプルデータの読み込
-
-penguins['island'] = py4st.set_miss(
-    penguins['island'], 
-    n = 100, method='first'
-    )
-py4st.plot_miss_var(penguins, values = 'missing_count')
-
-
-

-
set_miss.png
-
-
- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/style_pvalue.html b/docs/docs/man/style_pvalue.html deleted file mode 100644 index ddb8e5e..0000000 --- a/docs/docs/man/style_pvalue.html +++ /dev/null @@ -1,964 +0,0 @@ - - - - - - - - - -36  p-値のフォーマットを変更する関数 – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

36  p-値のフォーマットを変更する関数

-
- - - -
- - - - -
- - - -
- - -
-

36.1 概要

-

 R言語の style_pvalue()gtools::stars.pval() をオマージュした関数でp-値を見やすい形のフォーマットに変換します。

-
style_pvalue(
-    p_value: ArrayLike,
-    digits: int = 3,
-    prepend_p: bool = False,
-    p_min: float = 0.001,
-    p_max: float = 0.9
-    )
-
-p_stars(
-    p_value, 
-    stars = {'***':0.01, '**':0.05, '*':0.1}
-    )
-
-
-

36.2 引数 Argument

-
    -
  • p_valuescalar or array-like of int or float
  • -
  • digitsintstyle_pvalue() のみ)
     小数点以下の桁数
  • -
  • prepend_pboolstyle_pvalue() のみ)
     出区力に接頭辞 ’p’ を追加するかどうかを表す論理値。False であれば追加されず、True であれば追加されます。
  • -
  • p_minintstyle_pvalue() のみ)
     p-値を実数値で表示する最小値。p_value がこの値を下回る場合、’<p_min’ もしくは ’p<p_min’ の形で表示されます。
  • -
  • p_maxintstyle_pvalue() のみ)
     p-値を実数値で表示する最大値。p_value がこの値を下回る場合、’>p_max’ もしくは ’p>p_max’ の形で表示されます。
  • -
  • starsdictp_stars() のみ)
     有意性を示す記号を key に、表示を切り替える閾値を値(value)にもつ辞書オブジェクト。初期設定の stars = None の場合、{'***': 0.01, '**': 0.05, '*': 0.1} が使用されます。詳細は下記を参照して下さい。
  • -
-
-
-

36.3 返り値 Value

-

 フォーマットされたp-値を表す pd.Series を出力します。building_block.style_pvalue() では引数 p_value に与えられた数値を指定された桁数に丸めた値を表示し、指定された範囲を外れる値については ’<p_min’ や ’>p_max’の書式にへんかんします。  building_block.p_stars()では仮説検定の有意性を示すアスタリスク*` に変換します。初期設定ではアスタリスクはp-値の値に応じて次のように表示されます。

-
    -
  • p ≤ 0.1 *
  • -
  • p ≤ 0.05 **
  • -
  • p ≤ 0.01 ***
  • -
  • p > 0.1 表示なし
  • -
-
-
-

36.4 使用例 Examples

-

-from py4stats import building_block as build
-p_value = [
-    0.999, 0.5028, 0.2514, 0.197, 0.10, 
-    0.0999, 0.06, 0.03, 0.002, 0.0002
-    ]
-
-print(build.style_pvalue(p_value).to_list())
-#> ['>0.9', '0.503', '0.251', '0.197', '0.1', '0.1', '0.06', '0.03', '0.002', '<0.001']
-
-print(build.style_pvalue(p_value, prepend_p = True).to_list())
-#> ['p>0.9', 'p=0.503', 'p=0.251', 'p=0.197', 'p=0.1', 'p=0.1', 'p=0.06', 'p=0.03', 'p=0.002', 'p<0.001']
-
-print(build.p_stars(p_value).to_list())
-#> ['', '', '', '', '*', '*', '*', '**', '***', '***']
-
-# R言語の stats::summary.lm() や gtools::stars.pval() を再現する場合。
-stars_dict = {'***':0.001, '**':0.01, '*': 0.05, '.':0.1}
-print(build.p_stars(p_value, stars = stars_dict).to_list())
-#> ['', '', '', '', '.', '.', '.', '*', '**', '***']
-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/tabyl.html b/docs/docs/man/tabyl.html deleted file mode 100644 index ab722e5..0000000 --- a/docs/docs/man/tabyl.html +++ /dev/null @@ -1,971 +0,0 @@ - - - - - - - - - -5  py4stats.tabyl() – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

5  py4stats.tabyl()

-
- - - -
- - - - -
- - - -
- - -
-

5.1 概要

-

 データフレームのクロス集計表を作成します。R言語の janitor::tabyl()にいくつかの adorn_ 関数を追加した状態を再現した関数です。初期設定ではクロス集計表の各セルに度数と相対度数を 「度数(相対度数%)`」 の形式で表示します。

-
tabyl(
-    data: IntoFrameT,
-    index: str,
-    columns: str,
-    margins: bool = True,
-    margins_name: str = 'All',
-    normalize: Union[bool, Literal["index", "columns", "all"]] = "index",
-    dropna: bool = False,
-    digits: int = 1,
-    **kwargs: Any
-)
-
-
-

5.2 引数 Argument

-
    -
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • -
  • indexstr
     集計に使用するデータフレームの変数名(必須)。
  • -
  • columnsstr
     集計に使用するデータフレームの変数名(必須)。
  • -
  • marginsbool
     行または列の合計を追加するかどうかを表すブール値。初期設定は True です。
  • -
  • margins_namebool
     行や列の合計の名前。初期設定は 'All' です。
  • -
  • dropnabool
      欠測値(NaN)を集計から除外するかどうかを表すブール値。初期設定は False です。
  • -
  • normalizestr
     丸括弧( )に表示する相対度数の計算方式。 -
      -
    • index 各セルの度数を行の和で割り、横方向の相対度数の和が100%になるように計算します。
    • -
    • columns 各セルの度数を行の列で割り、縦方向の相対度数の和が100%になるように計算します。
    • -
    • all 各セルの度数を総度数で割り、全てのセルの相対度数の和が100%になるように計算します。
    • -
  • -
  • digitsint
     丸括弧( )に表示する相対度数の小数点以下の桁数。初期設定は1です。
  • -
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • -
-
-
-

5.3 使用例

-
import py4stats as py4st
-import pandas as pd
-from palmerpenguins import load_penguins
-penguins = load_penguins() # サンプルデータの読み込
-
-# 横方向の和を100%として計算(初期設定)
-print(py4st.tabyl(penguins, 'island', 'species', normalize = 'index'))
-#> species         Adelie   Chinstrap       Gentoo  All
-#> island                                              
-#> Biscoe      44 (26.2%)    0 (0.0%)  124 (73.8%)  168
-#> Dream       56 (45.2%)  68 (54.8%)     0 (0.0%)  124
-#> Torgersen  52 (100.0%)    0 (0.0%)     0 (0.0%)   52
-#> All        152 (44.2%)  68 (19.8%)  124 (36.0%)  344
-
-# 縦方向の和を100%として計算
-print(py4st.tabyl(penguins, 'island', 'species', normalize = 'columns'))
-#> species        Adelie    Chinstrap        Gentoo          All
-#> island                                                       
-#> Biscoe     44 (28.9%)     0 (0.0%)  124 (100.0%)  168 (48.8%)
-#> Dream      56 (36.8%)  68 (100.0%)      0 (0.0%)  124 (36.0%)
-#> Torgersen  52 (34.2%)     0 (0.0%)      0 (0.0%)   52 (15.1%)
-#> All               152           68           124          344
-
-# 全体の和を100%として計算
-print(py4st.tabyl(penguins, 'island', 'species', normalize = 'all'))
-#> species         Adelie   Chinstrap       Gentoo           All
-#> island                                                       
-#> Biscoe      44 (12.8%)    0 (0.0%)  124 (36.0%)   168 (48.8%)
-#> Dream       56 (16.3%)  68 (19.8%)     0 (0.0%)   124 (36.0%)
-#> Torgersen   52 (15.1%)    0 (0.0%)     0 (0.0%)    52 (15.1%)
-#> All        152 (44.2%)  68 (19.8%)  124 (36.0%)  344 (100.0%)
-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/tidy.html b/docs/docs/man/tidy.html deleted file mode 100644 index 3e27975..0000000 --- a/docs/docs/man/tidy.html +++ /dev/null @@ -1,1026 +0,0 @@ - - - - - - - - - -25  py4stats.tidy(), py4stats.tidy_mfx() – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

25  py4stats.tidy(), py4stats.tidy_mfx()

-
- - - -
- - - - -
- - - -
- - -
-

25.1 概要

-

 R言語の broom::tidy() をオマージュした関数で、sm.ols()smf.logit() などの推定結果を pands.DataFrame に変換します。py4stats.tidy() は回帰係数と関連する検定結果を表示し、 py4stats.tidy_mfx() は限界効果と関連する検定結果を表示します。

-
tidy(
-  x, 
-  name_of_term = None,
-  conf_level = 0.95,
-  **kwargs
-  )
-
-tidy_mfx(
-  x, 
-  at = 'overall', 
-  method = 'dydx', 
-  dummy = False, 
-  conf_level = 0.95, 
-  **kwargs
-  )
-
-
-

25.2 引数 Argument

-
    -
  • x(必須)
     sm.ols()もしくは smf.logit() などで作成された分析結果のオブジェクト。

  • -
  • name_of_termlist of str
     term 列(index) として表示する説明変数の名前のリスト。指定しない場合(初期設定)、モデルの推定に使用された説明変数の名前がそのまま表示されます。

  • -
  • conf_levelfloat
     信頼区間の計算に用いる信頼係数。

  • -
  • at:限界効果の集計方法(tidy_mfx() のみ)。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 at として渡されます。method = 'coef' を指定した場合、この引数は無視されます。

    -
      -
    • 'overall':各観測値の限界効果の平均値を表示(初期設定)
    • -
    • 'mean':各説明変数の平均値における限界効果を表示
    • -
    • 'median':各説明変数の中央値における限界効果を表示
    • -
    • 'zero':各説明変数の値がゼロであるときの限界効果を表示
    • -
  • -
  • method:推定する限界効果の種類(tidy_mfx() のみ)。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 method として渡されます。ただし、method = 'coef' を指定した場合には限界効果を推定せずに回帰係数をそのまま表示します。

    -
      -
    • 'coef':回帰係数の推定値を表示
    • -
    • 'dydx':限界効果の値を変換なしでそのまま表。(初期設定)
    • -
    • 'eyex':弾力性 d(lny)/d(lnx) の推定値を表示
    • -
    • 'dyex':準弾力性 dy /d(lnx) の推定値を表示
    • -
    • 'eydx':準弾力性 d(lny)/dx の推定値を表示
    • -
  • -
  • dummy:ダミー変数の限界効果の推定方法(tidy_mfx() のみ)。もし False (初期設定)であれば、ダミー変数を連続な数値変数として扱います。もし、True であればダミー変数が0から1へと変化したときの予測値の変化を推定します。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 dummy として渡されます。

  • -
-
-
-

25.3 返り値 Value

-

 次の列を含む pands.DataFrame が出力されます。

-
    -
  • term(index)
     説明変数の名称
  • -
  • estimate
     回帰係数(tidy()の場合)、もしくは限界効果(tidy_mfx()の場合)の推定値
  • -
  • std_err
    推定値 estimate の標準誤差
  • -
  • statistics
    estimate = 0 を帰無仮説とする仮説検定の標本検定統計量。x に代入されたモデルが sm.ols() によって作成されたものであれば \(t\) 統計量が表示され、sm.glm() によって作成されたものであれば \(z\) 統計量が表示されます。
  • -
  • p_value
    estimate = 0 を帰無仮説とする両側検定の標本p-値
  • -
  • conf_lower
     信頼区間の下側信頼限界
  • -
  • conf_higher
     信頼区間の上側信頼限界
  • -
-
-
-

25.4 使用例 Examples

-
import pandas as pd
-import numpy as np
-from palmerpenguins import load_penguins
-import statsmodels.formula.api as smf
-
-from py4stats import regression_tools as reg # 回帰分析の要約
-penguins = load_penguins() # サンプルデータの読み込み
-
# 回帰分析の実行
-fit1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()
-
-print(py4st.tidy(fit1).round(4))
-#>                       estimate   std_err  statistics  p_value  conf_lower  conf_higher
-#> term                                                                                  
-#> Intercept             153.7397  268.9012      0.5717   0.5679   -375.1910     682.6704
-#> species[T.Chinstrap] -885.8121   88.2502    -10.0375   0.0000  -1059.4008    -712.2234
-#> species[T.Gentoo]     578.6292   75.3623      7.6780   0.0000    430.3909     726.8674
-#> bill_length_mm         91.4358    6.8871     13.2764   0.0000     77.8888     104.9828
-
penguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)
-
-# ロジスティック回帰の実行
-fit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()
-
-print(py4st.tidy_mfx(fit_logit1).round(4))
-#>                 estimate  std_err  statistics  p_value  conf_lower  conf_higher
-#> body_mass_g      -0.0004   0.0000    -17.6561   0.0000     -0.0004      -0.0003
-#> bill_length_mm   -0.0053   0.0036     -1.4628   0.1435     -0.0123       0.0018
-#> bill_depth_mm    -0.1490   0.0051    -29.1681   0.0000     -0.1591      -0.1390
-
-
-

25.5 注意点

-

 参考にしたR言語の broom::tidy() は様々な種類のモデルに対応したジェネリック関数として定義されていますが、py4stats.tidy()py4stats.tidy_mfx() では対応しているモデルは限定的であることにご注意ださい。py4st.tidy() のメソッドが定義されているオブジェクトのクラスを確認するには次のコードを実行して下さい。

-
list(py4st.tidy.registry.keys())
-

py4stats.tidy()functools.singledispatch を用いたジェネリック関数として実装しています。 Py4Etrics モジュールの py4etrics.heckit.Heckit() で作成された HeckitResults クラスのオブジェクト用のメソッドについては heckit_helper.tidy_heckit() を参照してください。

-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/tidy_heckit.html b/docs/docs/man/tidy_heckit.html deleted file mode 100644 index 315730e..0000000 --- a/docs/docs/man/tidy_heckit.html +++ /dev/null @@ -1,1018 +0,0 @@ - - - - - - - - - -29  heckit_helper.tidy_heckit() – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

29  heckit_helper.tidy_heckit()

-
- - - -
- - - - -
- - - -
- - -
-

29.1 概要

-

 R言語の broom::tidy() をオマージュした regression_tools.tidy() 関数の、py4etrics.heckit.HeckitResults クラス専用のメソッドです。regression_tools.tidy()はジェネリック関数として実装されているため、py4st.tidy(x) としてご利用いただけます。

-
tidy_heckit(
-    model, 
-    name_selection = None, 
-    name_outcome = None, 
-    conf_level = 0.95
-  )
-
-
-

29.2 引数 Argument

-
    -
  • x(必須)
      Py4Etrics モジュールの py4etrics.heckit.Heckit() で作成された HeckitResults クラスのオブジェクト
  • -
  • name_selectionlist of str
     term 列(index) のうち、第1段階の説明変数の名称として表示する文字列のリスト。指定しない場合(初期設定)、モデルの推定に使用された説明変数の名前がそのまま表示されます。
  • -
  • name_outcomelist of str
     term 列(index) のうち、第2段階の説明変数の名称として表示する文字列のリスト。指定しない場合(初期設定)、モデルの推定に使用された説明変数の名前がそのまま表示されます。
  • -
  • conf_levelfloat
     信頼区間の計算に用いる信頼係数。
  • -
-
-
-

29.3 返り値 Value

-

 次の列を含む pands.DataFrame が出力されます。

-
    -
  • term(index)
     説明変数の名称
  • -
  • estimate
     回帰係数の推定値
  • -
  • std_err
    推定値 estimate の標準誤差
  • -
  • statistics
    estimate = 0 を帰無仮説とする仮説検定の標本検定統計量。x に代入されたモデルが sm.ols() によって作成されたものであれば \(t\) 統計量が表示され、sm.glm() によって作成されたものであれば \(z\) 統計量が表示されます。
  • -
  • p_value
    estimate = 0 を帰無仮説とする両側検定の標本p-値
  • -
  • conf_lower
     信頼区間の下側信頼限界
  • -
  • conf_higher
     信頼区間の上側信頼限界
  • -
-
-
-

29.4 使用例 Examples

-

 heckit_helper モジュールはヘックマンの2段階推定(Heckit)を実行を Py4Etrics モジュールの py4etrics.heckit.Heckit() に依存しているため、事前のインストールをお願いします。

-
pip install git+https://github.com/Py4Etrics/py4etrics.git
-

ここでは wooldridge モジュールの mroz データを使い、春山(2023, Chap.24)のモデルを再現します。

-
import pandas as pd
-import wooldridge
-import py4stats as py4st
-from py4stats import heckit_helper
-
-mroz = wooldridge.data('mroz') # サンプルデータの読み込み
-
-mod_heckit, exog_outcome, exog_select = heckit_helper.Heckit_from_formula(
-    selection = 'lwage ~ educ + exper + expersq + nwifeinc + age + kidslt6 + kidsge6',
-    outcome = 'lwage ~ educ + exper + expersq',
-    data = mroz
-)
-
-res_heckit = mod_heckit.fit(cov_type_2 = 'HC1')
-

内部で functools.singledispatch を使用して定義しているため、heckit_helper モジュールの読み込み後は、py4st.tidy() 関数を呼び出すことで tidy_heckit() を実行することができます。

-
# 初期設定で使用した場合
-print(py4st.tidy(res_heckit).round(4))
-#>               estimate  std_err  statistics  p_value  conf_lower  conf_higher
-#> term                                                                         
-#> O: Intercept   -0.5781   0.3050     -1.8954   0.0580     -1.1759       0.0197
-#> O: educ         0.1091   0.0155      7.0261   0.0000      0.0786       0.1395
-#> O: exper        0.0439   0.0163      2.6989   0.0070      0.0120       0.0758
-#> O: expersq     -0.0009   0.0004     -1.9574   0.0503     -0.0017       0.0000
-#> S: const        0.2701   0.5086      0.5310   0.5954     -0.7267       1.2669
-#> S: x1           0.1309   0.0253      5.1835   0.0000      0.0814       0.1804
-#> S: x2           0.1233   0.0187      6.5903   0.0000      0.0867       0.1600
-#> S: x3          -0.0019   0.0006     -3.1452   0.0017     -0.0031      -0.0007
-#> S: x4          -0.0120   0.0048     -2.4843   0.0130     -0.0215      -0.0025
-#> S: x5          -0.0529   0.0085     -6.2347   0.0000     -0.0695      -0.0362
-#> S: x6          -0.8683   0.1185     -7.3263   0.0000     -1.1006      -0.6360
-#> S: x7           0.0360   0.0435      0.8281   0.4076     -0.0492       0.1212
-

 注意:内部で使用している statsmodels.iolib.summary.summary_params_frame() の仕様上、初期設定では第1段階の説明変数の名前が反映されません。説明変数の名前を反映するには name_selection 引数で指定してください。

-
print(py4st.tidy(res_heckit, name_selection = exog_select.columns).round(4))
-#>               estimate  std_err  statistics  p_value  conf_lower  conf_higher
-#> term                                                                         
-#> O: Intercept   -0.5781   0.3050     -1.8954   0.0580     -1.1759       0.0197
-#> O: educ         0.1091   0.0155      7.0261   0.0000      0.0786       0.1395
-#> O: exper        0.0439   0.0163      2.6989   0.0070      0.0120       0.0758
-#> O: expersq     -0.0009   0.0004     -1.9574   0.0503     -0.0017       0.0000
-#> S: Intercept    0.2701   0.5086      0.5310   0.5954     -0.7267       1.2669
-#> S: educ         0.1309   0.0253      5.1835   0.0000      0.0814       0.1804
-#> S: exper        0.1233   0.0187      6.5903   0.0000      0.0867       0.1600
-#> S: expersq     -0.0019   0.0006     -3.1452   0.0017     -0.0031      -0.0007
-#> S: nwifeinc    -0.0120   0.0048     -2.4843   0.0130     -0.0215      -0.0025
-#> S: age         -0.0529   0.0085     -6.2347   0.0000     -0.0695      -0.0362
-#> S: kidslt6     -0.8683   0.1185     -7.3263   0.0000     -1.1006      -0.6360
-#> S: kidsge6      0.0360   0.0435      0.8281   0.4076     -0.0492       0.1212
-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/tidy_test.html b/docs/docs/man/tidy_test.html deleted file mode 100644 index 4b93641..0000000 --- a/docs/docs/man/tidy_test.html +++ /dev/null @@ -1,958 +0,0 @@ - - - - - - - - - -26  py4stats.tidy_test() – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

26  py4stats.tidy_test()

-
- - - -
- - - - -
- - - -
- - -
-

26.1 概要

-

 R言語の broom::tidy() をオマージュした py4stats.tidy() 関数のうち、statsmodels ライブラリのメソッド RegressionResults.t_test() もしくは RegressionResults.f_test() で作成された statsmodels.stats.contrast.ContrastResults クラスのオブジェクト専用のメソッドです。py4stats.tidy()はジェネリック関数として実装されているため、py4st.tidy(x) としてご利用いただけます。

-
tidy_test(x, conf_level = 0.95, **kwargs)
-
-
-

26.2 引数 Argument

-
    -
  • x(必須)
     statsmodels ライブラリのメソッド RegressionResults.t_test() もしくはRegressionResults.f_test() で作成された statsmodels.stats.contrast.ContrastResults クラスのオブジェクト。
  • -
  • conf_levelfloat
     信頼区間の計算に用いる信頼係数。ただし、x に代入されたオブジェクトが f_test() の結果である場合は、この引数は無視されます。
  • -
-
-
-

26.3 返り値 Value

-

 引数 x に代入されたオブジェクトが t_test() の結果である場合、次の列を含む pands.DataFrame が出力されます。

-
    -
  • estimate
     帰無仮説のもとでの回帰係数(の線型結合)の推定値
  • -
  • std_err
    推定値 estimate の標準誤差
  • -
  • statistics
     仮説検定の標本検定統計量。
  • -
  • p_value
    両側検定の標本p-値
  • -
  • conf_lower
     信頼区間の下側信頼限界
  • -
  • conf_higher
     信頼区間の上側信頼限界
  • -
-

 一方で引数 x に代入されたオブジェクトが f_test() の結果である場合、次の列を含む pands.DataFrame が出力されます。

-
    -
  • statistics
     仮説検定の標本検定統計量。
  • -
  • p_value
     F検定の標本p-値
  • -
  • df_denom
     モデルの残差自由度
  • -
  • df_denom
     帰無仮説のもとでの制約数
  • -
-
-
-

26.4 使用例 Examples

-
import py4stats as py4st
-
-import pandas as pd
-import numpy as np
-from palmerpenguins import load_penguins
-import statsmodels.formula.api as smf
-
-penguins = load_penguins() # サンプルデータの読み込み
-
-fit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()
-
hypotheses = 'bill_length_mm = 20'
-print(py4st.tidy(fit3.t_test(hypotheses)).round(4))
-#>       estimate  std_err  statistics  p_value  conf_lower  conf_higher
-#> term                                                                 
-#> c0     26.5366   7.2436      0.9024   0.3675     12.2867      40.7866
-
hypotheses = 'species[T.Chinstrap] = 0, species[T.Gentoo] = 0'
-print(py4st.tidy(fit3.f_test(hypotheses)).round(4))
-#>           statistics  p_value  df_denom  df_num
-#> term                                           
-#> contrast    210.9432      0.0       327       2
-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/man/varidate.html b/docs/docs/man/varidate.html deleted file mode 100644 index e037016..0000000 --- a/docs/docs/man/varidate.html +++ /dev/null @@ -1,1040 +0,0 @@ - - - - - - - - - -21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate() – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate()

-
- - - -
- - - - -
- - - -
- - -
-

21.1 概要

-

 R言語の varidateパッケージの check_that() 関数などをオマージュした、ごく簡易なデータ検証関数です。

-
check_that(
-    data: IntoFrameT,
-    rule_dict: Union[Mapping[str, str], pd.Series],
-    **kwargs: Any,
-)
-
-check_viorate(data, rule_dict, **kwargs)
-
-
-

21.2 引数 Argument

-
    -
  • dataIntoFrameT(必須)
     ルールに基づくデータ検証を行うデータセット。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • -
  • rule_dictdict or pd.Series of str(必須)
     pandas.eval() メソッドで実行した結果が論理値となるような expression の文字列を値とする辞書オブジェクト。詳細は使用例も参照してください。
  • -
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • -
  • **kwargs
     pandas.eval() に渡す追加の引数。
  • -
-
-
-

21.3 返り値 Value

-
-

21.3.1 check_that(): データセット単位の検証結果の集計

-

次の列を含む、引数 data に代入されたデータフレームと同じ型の DataFrame が出力されます。

-
    -
  • rule: 検証ルールの名前
  • -
  • item: ルールが検証対象とした項目の数。レコード(行)を検証単位とするルールの場合、itemdata の行数(rows)になります。一方、データセット全体を検証単位とするルール(例:集計量に基づく条件)の場合、item は 1 になります。
  • -
  • passes: 検証の結果、ルールを満たすと判定されたレコードの数。
  • -
  • fails: 検証の結果、ルールを満たさないと判定されたレコードの数。
  • -
  • countna: 欠測値によって、ルールの検証が行えなかったレコードの数。行(レコード)を検証単位とするルールでは、ルールの評価に使用された変数のいずれかに欠測値が含まれる場合、そのレコードは検証不能として NA 扱いされます。countna は、このように検証を正しく実施できなかったレコードの件数を表します。
  • -
  • expression: 検証ルールを表す文字列(expression)。
  • -
-
-
-

21.3.2 check_viorate(): レコード単位の検証結果

-

ルール名を列名として、レコード毎の違反を示す論理変数をもつ DataFrame が出力されます。

-

各列の要素の True は検証のルールへの違反、もしくは欠測値によって評価に失敗したことを表します。rule_dict で設定された各ルールに対応する列の他に、次の列が追加で出力されます。

-
    -
  • any: 行内のいずれかのルールが違反または評価に失敗した場合に True となるブール値。
  • -
  • all: 行内の全ルールが違反または評価に失敗した場合に True となるブール値。
  • -
-
-
-
-

21.4 使用例 Examples

-

 ここでは py4st.check_that() 関数を使って Loo, Jonge(2022, p. 136)の結果を再現します。まずはR言語の validate パッケージに付属する retailers データを利用します。retailers は60件の小売業者の経営状況についてのデータで、従業員数、売上高とその他の収入、人件費、総費用、および利益がユーロ導入前の通貨単位である1000ギルダー単位で収録されています。

-
import py4stats as py4st
-import pandas as pd
-
-URL = 'https://raw.githubusercontent.com/data-cleaning/validate/master/pkg/data/retailers.csv'
-retailers = pd.read_csv(URL, sep = ';')
-retailers.columns = retailers.columns.to_series().str.replace('.', '_', regex = False)
-

 py4st.check_that() 関数は、第1引数にデータセットを、第2引数に検証ルールの辞書オブジェクトを代入して使用します。
- まずは、検証ルールの辞書オブジェクトを定義します。辞書オブジェクトの値には pandas.eval() メソッドで実行可能な expression の文字列を指定し、key に検証ルールの名前を指定します。検証ルールの名前は任意の値で構いませんが、 expression は結果が論理値となるものでなければなりません。

-
rule_dict =  {
-    'to':'turnover > 0',                                     # 売上高は厳密に正である
-    'sc':'staff_costs / staff < 50',                         # 従業員1人当たりの人件費は50,000ギルダー未満である
-    'cd1':'staff_costs > 0 | ~(staff > 0)',                    # 従業員がいる場合、人件費は厳密に正である
-    'cd2':py4st.implies_exper('staff > 0', 'staff_costs > 0'), # cd1 の別表現
-    'bs':'turnover + other_rev == total_rev',                # 売上高とその他の収入の合計は総収入に等しい
-    'mn':'profit.mean() > 0'                                 # セクター全体の平均的な利益はゼロよりも大きい
-    }
-pd.Series(rule_dict)
-#> to                          turnover > 0
-#> sc              staff_costs / staff < 50
-#> cd1       staff_costs > 0 | ~(staff > 0)
-#> cd2       staff_costs > 0 | ~(staff > 0)
-#> bs     turnover + other_rev == total_rev
-#> mn                     profit.mean() > 0
-#> dtype: object
-

retailersrule_dictpy4st.check_that() に代入すると、rule_dict に指定したルールに基づいた検証が実行されます。item 列はその検証ルールで生成された論理値の個数(通常はデータセットの列数と一致します)を表し、passes 列は検証結果が True となったレコードの数を、fails は False となったレコードの数を表します。また、coutna はルールの検証に使用した変数(データセットの列)のいずれかが欠測値であったレコードの数です。

-
print(py4st.check_that(retailers, rule_dict))
-#>   rule  item  passes  fails  coutna                         expression
-#> 0   to    60      56      0       4                       turnover > 0
-#> 1   sc    60      39      5      16           staff_costs / staff < 50
-#> 2  cd1    60      44      0      16     staff_costs > 0 | ~(staff > 0)
-#> 3  cd2    60      44      0      16     staff_costs > 0 | ~(staff > 0)
-#> 4   bs    60      19      4      37  turnover + other_rev == total_rev
-#> 5   mn     1       1      0       0                  profit.mean() > 0
-

前述の通り、py4st.check_that() 関数ではルール検証を pandas.eval() メソッドで実行しているため、検証ルールに自作関数や外部のモジュールからインポート関数を使うには、関数名の前に @ をつけて @func(…) と記述し、また **kwargs 引数に local_dict = locals() と指定してください。
- 次のコードで定義している is_complete() 関数は、代入された pd.Series が全て欠測値ではなく、指定された変数に関して完全ケースであることを判定する関数です。turnover.notna() & total_rev.notna() & other_rev.notna() と記述しても同じ結果が得られますが、自作関数を使うことで若干簡潔に記述できます。

-
from pandas.api.types import is_numeric_dtype
-def is_complete(*arg): return pd.concat(arg, axis = 'columns').notna().all(axis = 'columns')
-
-pd.set_option('display.expand_frame_repr', False)
-
-rule_dict2 =  {
-    'to_num':'@is_numeric_dtype(turnover)',                      # 売上高は数値変数である
-    'rev_complete':'@is_complete(turnover, total_rev, other_rev)', # 売上高と収入が全て観測されている
-    }
-
-print(py4st.check_that(
-    retailers, rule_dict2, local_dict = locals()
-    ))
-#>            rule  item  passes  fails  coutna                                    expression
-#> 0        to_num     1       1      0       0                   @is_numeric_dtype(turnover)
-#> 1  rev_complete    60      23      0      37  @is_complete(turnover, total_rev, other_rev)
-

py4st.check_viorate() の使い方も py4st.check_that() と同様ですが、py4st.check_that() がデータセット全体での検証結果を出力するのに対し、py4st.check_viorate() ではレコード別の検証結果を表示します。py4st.check_viorate() から出力されるデータフレームでは、各列が検証ルールに、各行が元データの観測値に対応し、当該ルールが満たされていない場合、True と表示されます。また、any 列は複数あるルールのいずれか1つでも満たされていないことを、all 列は全てのルールが満たされていないことを示します。

-
rule_dict3 =  {
-    'to':'turnover > 0',                                     # 売上高は厳密に正である
-    'sc':'staff_costs / staff < 50',                         # 従業員1人当たりの人件費は50,000ギルダー未満である
-    'rev_complete':'@is_complete(turnover, total_rev, other_rev)',# 売上高と収入が全て観測されている
-    }
-  
-df_viorate = py4st.check_viorate(retailers, rule_dict3)
-print(df_viorate.head())
-#>       to     sc rev_complete   any    all
-#> 0   True   True         True  True   True
-#> 1  False  False         True  True  False
-#> 2  False   True        False  True  False
-#> 3  False   True        False  True  False
-#> 4   True   True         True  True   True
-

df_viorate データフレームの各列は論理値であるため、次のように検証ルールを満たさない観測値を抽出することができます。

-
print(retailers.loc[df_viorate['to'], 'size':'turnover'])
-#>   size  incl_prob  staff  turnover
-#> 0  sc0       0.02   75.0       NaN
-#> 4  sc3       0.14    NaN       NaN
-#> 6  sc3       0.14    5.0       NaN
-
-
-

21.5 Notes

-

本関数の内部実装は、 pd.DataFrame.eval() メソッドに依存しているため、実行時間の面で必ずしも最適化されていません。

-
-
-

21.6 参考文献

-
    -
  • Loo, Mark van der, and Edwin de Jonge. (2022). 『統計的データクリーニングの理論と実践: Rによるデータ編集/欠測補完システム』. 共立出版. 地道 正行, 髙橋 雅夫, 藤野 友和, 安川 武彦〔訳〕
  • -
-
-

Return to Function reference.

- - -
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/reference.html b/docs/docs/reference.html deleted file mode 100644 index 71b8d47..0000000 --- a/docs/docs/reference.html +++ /dev/null @@ -1,996 +0,0 @@ - - - - - - - - - -3  Function reference – Py4Stats - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
- -
- - -
- - - -
- -
-
-

3  Function reference

-
- - - -
- - - - -
- - - -
- - -
-

3.1 Main Module

-
-

3.1.1 py4stats.eda_tools

-

py4stats.eda_tools モジュールは、探索的データ解析と前処理に関する機能を提供します。複数の DataFrame バックエンドに対して共通の API を提供することを目的として、narwhals ライブラリを用いて実装されています。詳細は Technical Notes を参照してください。

-
-

3.1.1.1 データフレームの概要

-

py4stats.diagnose()

-
-
-

3.1.1.2 クロス集計

-

py4stats.tabyl()

-

py4stats.freq_table()

-

py4stats.Pareto_plot()

-

py4stats.plot_category()

-
-
-
-

3.1.2 数値変数の点推定と区間推定

-

py4stats.mean_qi() py4stats.median_qi() py4stats.mean_ci()

-
-

3.1.2.1 データフレームの列や行の削除

-

py4stats.remove_empty()
-py4stats.remove_constant()

-

py4stats.filtering_out()

-
-
-

3.1.2.2 データフレームの列の並べ替え

-

py4stats.relocate()

-
-
-

3.1.2.3 複数のデータフレームの比較

-

py4stats.compare_df_cols() py4stats.compare_df_stats()

-
-
-

3.1.2.4 簡易なグループ別統計量の比較

-

py4stats.compare_group_means() py4stats.compare_group_median()

-

py4stats.plot_mean_diff() py4stats.plot_median_diff()

-
-
-

3.1.2.5 簡易な欠測値の可視化

-

py4stats.plot_miss_var()

-
-
-

3.1.2.6 数値変数の集計と標準化

-

py4stats.weighted_mean() py4stats.scale() py4stats.min_max()

-
-
-

3.1.2.7 論理関数

-

py4stats.is_number() py4stats.is_ymd() py4stats.is_ymd_like()

-

py4stats.is_dummy()

-
-
-

3.1.2.8 簡易なルールベースのデータ検証ツール

-

py4stats.check_that() py4stats.check_viorate()

-
-
-
-
-

3.1.3 py4stats.regression_tools

-

py4stats.regression_toolsstatsmodels ライブラリで作成された回帰分析の結果についての可視化と表作成を補助する機能を提供するモジュールです。

-
-

3.1.3.1 線形モデルの比較

-

py4stats.compare_ols()

-

py4stats.compare_mfx()

-
-
-

3.1.3.2 線形モデルの可視化

-

py4stats.coefplot() py4stats.mfxplot()

-
-
-

3.1.3.3 線形モデルを作表するためのバックエンド関数

-

py4stats.tidy()py4stats.tidy_mfx()

-

py4stats.tidy_test()

-

py4stats.glance()

-
-
-

3.1.3.4 Blinder-Oaxaca分解

-

py4stats.Blinder_Oaxaca() py4stats.plot_Blinder_Oaxaca()

-
-
-
-
-

3.2 Sub Module

-
-

3.2.1 py4stats.heckit_helper

-

py4stats.regression_tools の関数を py4etrics.heckit ライブラリで実装された Heckit モデルに対応させるためのメソッドを提供します。

-

heckit_helper.Heckit_from_formula()

-

heckit_helper.tidy_heckit()

-

heckit_helper.heckitmfx_compute()

-
-
-
-

3.2.2 py4stats.building_block

-

py4stats ライブラリの実装に使用するアサーション関数やユーティリティ関数を提供します。 building_block モジュール自体は外部から呼び出すことなく内部実装に使用することを想定しています。

-
-
-

3.2.3 引数のアサーション関数

-

building_block.arg_match()

-

building_block.assert_character() building_block.assert_logical() building_block.assert_numeric() building_block.assert_integer() building_block.assert_count() building_block.assert_float()

-
-
-

3.2.4 データ型を判定する論理関数

-

building_block.is_character() building_block.is_logical() building_block.is_numeric() building_block.is_integer() building_block.is_float()

-
-
-

3.2.5 数字のフォーマット

-

building_block.style_number() building_block.style_currency() building_block.style_percent()

-

building_block.style_pvalue() building_block.p_stars()

-
-
-

3.2.6 並列文の作成

-

building_block.oxford_comma() building_block.oxford_comma_and() building_block.oxford_comma_or()

-
-

Jump to Get started.
-Jump to Readme.

- - -
-
- -
- - -
- - - - - \ No newline at end of file diff --git a/docs/docs/search.json b/docs/docs/search.json deleted file mode 100644 index 1389443..0000000 --- a/docs/docs/search.json +++ /dev/null @@ -1,2050 +0,0 @@ -[ - { - "objectID": "index.html", - "href": "index.html", - "title": "Py4Stats", - "section": "", - "text": "1 Readme\nPy4Stats は、主に実証研究で用いられる、探索的データ分析および回帰結果レポート用のユーティリティライブラリで、回帰分析を中心とする分析でよく使われるR言語の機能を、Python で実装しています。本ライブラリの主な機能は Get started を、実装されている関数の一覧は Function reference を参照してください。", - "crumbs": [ - "1  Readme" - ] - }, - { - "objectID": "index.html#installation", - "href": "index.html#installation", - "title": "Py4Stats", - "section": "1.1 Installation", - "text": "1.1 Installation\nuv をお使いの場合、次のコードで py4stats をインストールできます。\n! uv add git+https://github.com/Hirototensho/py4stats.git\n一方で、pip をお使いの場合には、次のコードで py4stats をインストールできます。\n! pip install git+https://github.com/Hirototensho/py4stats.git", - "crumbs": [ - "1  Readme" - ] - }, - { - "objectID": "index.html#使用例", - "href": "index.html#使用例", - "title": "Py4Stats", - "section": "1.2 使用例", - "text": "1.2 使用例\nimport py4stats as py4st\npy4stats.diagnose() 関数はデータの全般的な状態についての要約を提供します。\nimport pandas as pd\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込み\n\nprint(py4st.diagnose(penguins).round(4))\n#> columns dtype missing_count missing_percent unique_count unique_rate\n#> 0 species object 0 0.0000 3 0.8721\n#> 1 island object 0 0.0000 3 0.8721\n#> 2 bill_length_mm float64 2 0.5814 165 47.9651\n#> 3 bill_depth_mm float64 2 0.5814 81 23.5465\n#> 4 flipper_length_mm float64 2 0.5814 56 16.2791\n#> 5 body_mass_g float64 2 0.5814 95 27.6163\n#> 6 sex object 11 3.1977 3 0.8721\n#> 7 year int64 0 0.0000 3 0.8721\npy4stats.compare_ols() 関数は、計量経済学の実証論文でよく用いられる、回帰分析の結果を列方向に並べて比較する表を作成します。\nimport statsmodels.formula.api as smf\n\n# 回帰分析の実行\nfit1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()\nfit2 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species', data = penguins).fit()\nfit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()\n\ncompare_tab1 = py4st.compare_ols(list_models = [fit1, fit2, fit3]) # 表の作成\ncompare_tab1\n\n\n\n\n\n\n\n\n\nterm\nmodel 1\nmodel 2\nmodel 3\n\n\n\n\nIntercept\n153.7397\n-1,742.7202 ***\n843.9812 **\n\n\n\n(268.9012)\n(313.7697)\n(403.5956)\n\n\nspecies[T.Chinstrap]\n-885.8121 ***\n-539.6864 ***\n-245.1516 ***\n\n\n\n(88.2502)\n(86.9425)\n(84.5952)\n\n\nspecies[T.Gentoo]\n578.6292 ***\n1,492.8283 ***\n1,443.3525 ***\n\n\n\n(75.3623)\n(118.4442)\n(107.7844)\n\n\nbill_length_mm\n91.4358 ***\n55.6461 ***\n26.5366 ***\n\n\n\n(6.8871)\n(7.2326)\n(7.2436)\n\n\nbill_depth_mm\n\n179.0434 ***\n87.9328 ***\n\n\n\n\n(19.0997)\n(20.2192)\n\n\nsex[T.male]\n\n\n437.2007 ***\n\n\n\n\n\n(49.1098)\n\n\nrsquared_adj\n0.7810\n0.8258\n0.8613\n\n\nnobs\n342\n342\n333\n\n\ndf\n3\n4\n5\n\n\n\n詳細は、py4stats.compare_ols() を参照してください。 \n\nJump to Function Get started.\nJump to Function reference.", - "crumbs": [ - "1  Readme" - ] - }, - { - "objectID": "introduction.html", - "href": "introduction.html", - "title": "2  Introduction to Py4Stats", - "section": "", - "text": "2.1 py4stats.eda_tools\nここでは Py4Stats の主な機能を紹介します。実装されている関数の一覧は Function reference を参照してください。\n探索的データ解析と前処理に関する機能を提供するモジュールです。このモジュールは、複数の DataFrame バックエンドに対して共通の API を提供することを目的として、narwhals ライブラリを用いて実装されています。詳細は Technical Notes: py4stats.eda_tools における narwhals ベースの実装 を参照してください。\npy4stats.diagnose():R言語のdlookr::diagnose()を再現した関数で、データの全般的な状態についての要約を提供します。\npy4stats.tabyl():R言語の janitor::tabyl()を参考にした、クロス集計表を作成する関数です。\npy4stats.freq_table():R言語のDescTools::Freq()をオマージュした、1変数の度数分布表を計算する関数。度数 freq と相対度数 perc に加えて、それぞれの累積値を計算します。\n引数 group を指定すると、グループ別の度数分布表を計算できます。\npy4stats.remove_empty():完全に空白な列や行の削除する関数。R言語の janitor::remove_empty() をオマージュした関数で、全ての要素が NaN である列や行をデータフレームから除外します。\npy4stats.remove_constant():定数列の削除。R言語の janitor::remove_constant() をオマージュした関数で、1種類だけの要素からなる列をデータフレームから除外します。\npy4stats.filtering_out():pandas の DataFrame.filter() メソッドでは引数 like に文字列を指定することで、列名に特定の文字列を含む列を選択できますが、反対に py4stats.filtering_out() では列名に特定の文字列を含む列を除外します。実装の一部はR言語の dplyr::select() を参考にしました。", - "crumbs": [ - "2  `Introduction to Py4Stats`" - ] - }, - { - "objectID": "introduction.html#py4stats.eda_tools", - "href": "introduction.html#py4stats.eda_tools", - "title": "2  Introduction to Py4Stats", - "section": "", - "text": "import pandas as pd\nimport numpy as np\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込み\n\nprint(py4st.diagnose(penguins).round(4))\n#> dtype missing_count missing_percent unique_count unique_rate\n#> species object 0 0.0000 3 0.8721\n#> island object 0 0.0000 3 0.8721\n#> bill_length_mm float64 2 0.5814 164 47.6744\n#> bill_depth_mm float64 2 0.5814 80 23.2558\n#> flipper_length_mm float64 2 0.5814 55 15.9884\n#> body_mass_g float64 2 0.5814 94 27.3256\n#> sex object 11 3.1977 2 0.5814\n#> year int64 0 0.0000 3 0.8721\n\nprint(py4st.tabyl(penguins, 'island', 'species'))\n#> species Adelie Chinstrap Gentoo All\n#> island \n#> Biscoe 44 (26.2%) 0 (0.0%) 124 (73.8%) 168\n#> Dream 56 (45.2%) 68 (54.8%) 0 (0.0%) 124\n#> Torgersen 52 (100.0%) 0 (0.0%) 0 (0.0%) 52\n#> All 152 (44.2%) 68 (19.8%) 124 (36.0%) 344\n\nprint(py4st.freq_table(penguins, 'species'))\n#> freq perc cumfreq cumperc\n#> species \n#> Adelie 152 0.441860 152 0.441860\n#> Gentoo 124 0.360465 276 0.802326\n#> Chinstrap 68 0.197674 344 1.000000\n\npenguins2 = penguins.assign(bill_length_mm2 = pd.cut(penguins['bill_length_mm'], 6))\n\nprint(\n py4st.freq_table(penguins2, ['species', 'bill_length_mm2'], sort = False)\n )\n#> freq perc cumfreq cumperc\n#> species bill_length_mm2\n#> Adelie (32.072, 38.975] 79 0.523179 79 0.523179\n#> (38.975, 45.85] 71 0.470199 150 0.993377\n#> (45.85, 52.725] 1 0.006623 151 1.000000\n#> (52.725, 59.6] 0 0.000000 151 1.000000\n#> Chinstrap (32.072, 38.975] 0 0.000000 0 0.000000\n#> (38.975, 45.85] 13 0.191176 13 0.191176\n#> (45.85, 52.725] 50 0.735294 63 0.926471\n#> (52.725, 59.6] 5 0.073529 68 1.000000\n#> Gentoo (32.072, 38.975] 0 0.000000 0 0.000000\n#> (38.975, 45.85] 40 0.325203 40 0.325203\n#> (45.85, 52.725] 78 0.634146 118 0.959350\n#> (52.725, 59.6] 5 0.040650 123 1.000000\n\npenguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy()\npenguins2.loc[:, 'empty'] = np.nan\npenguins2.loc[344, :] = np.nan\n\nprint(penguins2.tail(3))\n#> species body_mass_g empty\n#> 342 Chinstrap 4100.0 NaN\n#> 343 Chinstrap 3775.0 NaN\n#> 344 NaN NaN NaN\n\n# 完全に空白な行と列を削除。\nprint(py4st.remove_empty(penguins2, quiet = False).tail(3))\n#> Removing 1 empty column(s) out of 3 columns(Removed: empty).\n#> Removing 1 empty row(s) out of 345 rows(Removed: 344). \n#> species body_mass_g\n#> 341 Chinstrap 3775.0\n#> 342 Chinstrap 4100.0\n#> 343 Chinstrap 3775.0\n\n# 完全に空白な列のみ削除。\nprint(py4st.remove_empty(penguins2, rows = False, quiet = False).tail(3))\n#> Removing 1 empty column(s) out of 3 columns(Removed: empty).\n#> species body_mass_g\n#> 342 Chinstrap 4100.0\n#> 343 Chinstrap 3775.0\n#> 344 NaN NaN\n\n# 完全に空白な行のみ削除。\nprint(py4st.remove_empty(penguins2, cols = False, quiet = False).tail(3))\n#> Removing 1 empty row(s) out of 345 rows(Removed: 344). \n#> species body_mass_g empty\n#> 341 Chinstrap 3775.0 NaN\n#> 342 Chinstrap 4100.0 NaN\n#> 343 Chinstrap 3775.0 NaN\n\npenguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy()\npenguins2.loc[:, 'constant'] = 'c'\n\nprint(penguins2.head(3))\n#> species body_mass_g constant\n#> 0 Adelie 3750.0 c\n#> 1 Adelie 3800.0 c\n#> 2 Adelie 3250.0 c\n\nprint(py4st.remove_constant(penguins2, quiet = False).head(3))\n#> Removing 1 constant column(s) out of 3 column(s)(Removed: constant). \n#> species body_mass_g\n#> 0 Adelie 3750.0\n#> 1 Adelie 3800.0\n#> 2 Adelie 3250.0\n\n# 列名に 'length' を含む列を除外\nprint(py4st.filtering_out(penguins, contains = 'length').head(3))\n#> species island bill_depth_mm body_mass_g sex year female\n#> 0 Adelie Torgersen 18.7 3750.0 male 2007 0\n#> 1 Adelie Torgersen 17.4 3800.0 female 2007 1\n#> 2 Adelie Torgersen 18.0 3250.0 female 2007 1\n\n# 列名が 'bill' から始まる列を除外\nprint(py4st.filtering_out(penguins, starts_with = 'bill').head(3))\n#> species island flipper_length_mm body_mass_g sex year female\n#> 0 Adelie Torgersen 181.0 3750.0 male 2007 0\n#> 1 Adelie Torgersen 186.0 3800.0 female 2007 1\n#> 2 Adelie Torgersen 195.0 3250.0 female 2007 1\n\n# 列名が '_mm' で終わる列を除外\nprint(py4st.filtering_out(penguins, ends_with = '_mm').head(3))\n#> species island body_mass_g sex year female\n#> 0 Adelie Torgersen 3750.0 male 2007 0\n#> 1 Adelie Torgersen 3800.0 female 2007 1\n#> 2 Adelie Torgersen 3250.0 female 2007 1", - "crumbs": [ - "2  `Introduction to Py4Stats`" - ] - }, - { - "objectID": "introduction.html#py4stats.regression_tools", - "href": "introduction.html#py4stats.regression_tools", - "title": "2  Introduction to Py4Stats", - "section": "2.2 py4stats.regression_tools", - "text": "2.2 py4stats.regression_tools\n py4stats.regression_tools は statsmodelsライブラリで作成された回帰分析の結果についての表作成と可視化を補助する機能を提供するモジュールです。\n py4stats.compare_ols() :計量経済学の実証論文でよく用いられる、回帰分析の結果を列方向に並べて比較する表を作成します。表のフォーマットについてはR言語のtexreg::screenreg()やmodelsummary::modelsummary()を参考にしています。同種の機能を提供する Python ライブラリーとしては、R言語の stargazer パッケージをもとにした stargazer ライブラリがあります。\nimport statsmodels.formula.api as smf\n\n# 回帰分析の実行\nfit1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()\nfit2 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species', data = penguins).fit()\nfit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()\n\ncompare_tab1 = py4st.compare_ols(list_models = [fit1, fit2, fit3]) # 表の作成\ncompare_tab1\n\n\n\n\n\n\n\n\n\nterm\nmodel 1\nmodel 2\nmodel 3\n\n\n\n\nIntercept\n153.7397\n-1,742.7202 ***\n843.9812 **\n\n\n\n(268.9012)\n(313.7697)\n(403.5956)\n\n\nspecies[T.Chinstrap]\n-885.8121 ***\n-539.6864 ***\n-245.1516 ***\n\n\n\n(88.2502)\n(86.9425)\n(84.5952)\n\n\nspecies[T.Gentoo]\n578.6292 ***\n1,492.8283 ***\n1,443.3525 ***\n\n\n\n(75.3623)\n(118.4442)\n(107.7844)\n\n\nbill_length_mm\n91.4358 ***\n55.6461 ***\n26.5366 ***\n\n\n\n(6.8871)\n(7.2326)\n(7.2436)\n\n\nbill_depth_mm\n\n179.0434 ***\n87.9328 ***\n\n\n\n\n(19.0997)\n(20.2192)\n\n\nsex[T.male]\n\n\n437.2007 ***\n\n\n\n\n\n(49.1098)\n\n\nrsquared_adj\n0.7810\n0.8258\n0.8613\n\n\nnobs\n342\n342\n333\n\n\ndf\n3\n4\n5\n\n\n\npy4stats.compare_ols() の実行結果は Pandas の DataFrame として出力されるため、.xlsx. ファイルなどに変換することができます。また、用途に応じて表の体裁を調整できるようにしています。詳細については 「回帰分析の比較」 を参照してください。\ncompare_tab2 = py4st.compare_ols(\n list_models = [fit1, fit2, fit3],\n model_name = ['基本モデル', '嘴の高さ追加', '性別追加'], # モデル名を変更\n stats = 'p_value', # () 内の値をP-値に変更する\n add_stars = False, # 有意性のアスタリスクなし\n table_style = 'one_line', # 表スタイルを1行表示に設定 'one' でも可能\n digits = 3 # 小数点以下の桁数を3に設定\n )\ncompare_tab2\n\n\n\n\n\n\n\n\n\nterm\n基本モデル\n嘴の高さ追加\n性別追加\n\n\n\n\nIntercept\n153.740(0.568)\n-1,742.720(0.000)\n843.981(0.037)\n\n\nspecies[T.Chinstrap]\n-885.812(0.000)\n-539.686(0.000)\n-245.152(0.004)\n\n\nspecies[T.Gentoo]\n578.629(0.000)\n1,492.828(0.000)\n1,443.353(0.000)\n\n\nbill_length_mm\n91.436(0.000)\n55.646(0.000)\n26.537(0.000)\n\n\nbill_depth_mm\n\n179.043(0.000)\n87.933(0.000)\n\n\nsex[T.male]\n\n\n437.201(0.000)\n\n\nrsquared_adj\n0.781\n0.826\n0.861\n\n\nnobs\n342\n342\n333\n\n\ndf\n3\n4\n5\n\n\n\npy4stats.coefplot():回帰係数の可視化。R言語の coefplot::coefplot() を参考にしました。\nimport matplotlib.pyplot as plt\npy4st.coefplot(fit3)\n\n\n\ncoefplot1\n\n\nplt.rcParams[\"figure.autolayout\"] = True\n\nfig, ax = plt.subplots(1, 2, figsize = (2.2 * 5, 5), dpi = 100)\n\npy4st.coefplot(fit2, ax = ax[0])\nax[0].set_xlim(-900, 1800)\n\npy4st.coefplot(fit3, ax = ax[1], palette = ['#FF6F91', '#F2E5EB'])\nax[1].set_xlim(-900, 1800);\n\n\n\ncoefplot2\n\n\n py4stats.compare_mfx() と py4stats.mfxplot() は、それぞれ py4stats.compare_ols() と py4stats.coefplot() の一般化線型モデルバージョンです。statsmodels ライブラリの.get_margeff() メソッドから得られた限界効果の推定値を表示します。\npenguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)\n\n# ロジスティック回帰の実行\nfit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()\nfit_logit2 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm + species', data = penguins).fit()\n\npy4st.compare_mfx([fit_logit1, fit_logit2])\n\n\n\nterm\nmodel 1\nmodel 2\n\n\n\n\nbody_mass_g\n-0.0004 ***\n-0.0003 ***\n\n\n\n(0.0000)\n(0.0000)\n\n\nbill_length_mm\n-0.0053\n-0.0357 ***\n\n\n\n(0.0036)\n(0.0070)\n\n\nbill_depth_mm\n-0.1490 ***\n-0.1098 ***\n\n\n\n(0.0051)\n(0.0175)\n\n\nspecies[T.Chinstrap]\n\n0.4172 ***\n\n\n\n\n(0.0848)\n\n\nspecies[T.Gentoo]\n\n0.3527 ***\n\n\n\n\n(0.1308)\n\n\nprsquared\n0.5647\n0.6187\n\n\nnobs\n342\n342\n\n\ndf\n3\n5\n\n\n\nplt.rcParams[\"figure.autolayout\"] = True\n\nfig, ax = plt.subplots(1, 2, figsize = (2.2 * 5, 5), dpi = 100)\n\npy4st.mfxplot(fit_logit1, ax = ax[0])\nax[0].set_xlim(-0.2, 0.85)\n\npy4st.mfxplot(fit_logit2, ax = ax[1], palette = ['#FF6F91', '#F2E5EB'])\nax[1].set_xlim(-0.2, 0.85);\n\n\n\ncoefplot3\n\n\n\nJump to Function reference.", - "crumbs": [ - "2  `Introduction to Py4Stats`" - ] - }, - { - "objectID": "reference.html", - "href": "reference.html", - "title": "3  Function reference", - "section": "", - "text": "3.1 Main Module", - "crumbs": [ - "3  Function reference" - ] - }, - { - "objectID": "reference.html#main-module", - "href": "reference.html#main-module", - "title": "3  Function reference", - "section": "", - "text": "3.1.1 py4stats.eda_tools\npy4stats.eda_tools モジュールは、探索的データ解析と前処理に関する機能を提供します。複数の DataFrame バックエンドに対して共通の API を提供することを目的として、narwhals ライブラリを用いて実装されています。詳細は Technical Notes を参照してください。\n\n3.1.1.1 データフレームの概要\npy4stats.diagnose()\n\n\n3.1.1.2 クロス集計\npy4stats.tabyl()\npy4stats.freq_table()\npy4stats.Pareto_plot()\npy4stats.plot_category()\n\n\n\n3.1.2 数値変数の点推定と区間推定\npy4stats.mean_qi() py4stats.median_qi() py4stats.mean_ci()\n\n3.1.2.1 データフレームの列や行の削除\npy4stats.remove_empty()\npy4stats.remove_constant()\npy4stats.filtering_out()\n\n\n3.1.2.2 データフレームの列の並べ替え\npy4stats.relocate()\n\n\n3.1.2.3 複数のデータフレームの比較\npy4stats.compare_df_cols() py4stats.compare_df_stats()\n\n\n3.1.2.4 簡易なグループ別統計量の比較\npy4stats.compare_group_means() py4stats.compare_group_median()\npy4stats.plot_mean_diff() py4stats.plot_median_diff()\n\n\n3.1.2.5 簡易な欠測値の可視化\npy4stats.plot_miss_var()\n\n\n3.1.2.6 数値変数の集計と標準化\npy4stats.weighted_mean() py4stats.scale() py4stats.min_max()\n\n\n3.1.2.7 論理関数\npy4stats.is_number() py4stats.is_ymd() py4stats.is_ymd_like()\npy4stats.is_dummy()\n\n\n3.1.2.8 簡易なルールベースのデータ検証ツール\npy4stats.check_that() py4stats.check_viorate()\n\n\n\n\n3.1.3 py4stats.regression_tools\npy4stats.regression_tools は statsmodels ライブラリで作成された回帰分析の結果についての可視化と表作成を補助する機能を提供するモジュールです。\n\n3.1.3.1 線形モデルの比較\npy4stats.compare_ols()\npy4stats.compare_mfx()\n\n\n3.1.3.2 線形モデルの可視化\npy4stats.coefplot() py4stats.mfxplot()\n\n\n3.1.3.3 線形モデルを作表するためのバックエンド関数\npy4stats.tidy()py4stats.tidy_mfx()\npy4stats.tidy_test()\npy4stats.glance()\n\n\n3.1.3.4 Blinder-Oaxaca分解\npy4stats.Blinder_Oaxaca() py4stats.plot_Blinder_Oaxaca()", - "crumbs": [ - "3  Function reference" - ] - }, - { - "objectID": "reference.html#sub-module", - "href": "reference.html#sub-module", - "title": "3  Function reference", - "section": "3.2 Sub Module", - "text": "3.2 Sub Module\n\n3.2.1 py4stats.heckit_helper\npy4stats.regression_tools の関数を py4etrics.heckit ライブラリで実装された Heckit モデルに対応させるためのメソッドを提供します。\nheckit_helper.Heckit_from_formula()\nheckit_helper.tidy_heckit()\nheckit_helper.heckitmfx_compute()\n\n\n\n3.2.2 py4stats.building_block\npy4stats ライブラリの実装に使用するアサーション関数やユーティリティ関数を提供します。 building_block モジュール自体は外部から呼び出すことなく内部実装に使用することを想定しています。\n\n\n3.2.3 引数のアサーション関数\nbuilding_block.arg_match()\nbuilding_block.assert_character() building_block.assert_logical() building_block.assert_numeric() building_block.assert_integer() building_block.assert_count() building_block.assert_float()\n\n\n3.2.4 データ型を判定する論理関数\nbuilding_block.is_character() building_block.is_logical() building_block.is_numeric() building_block.is_integer() building_block.is_float()\n\n\n3.2.5 数字のフォーマット\nbuilding_block.style_number() building_block.style_currency() building_block.style_percent()\nbuilding_block.style_pvalue() building_block.p_stars()\n\n\n3.2.6 並列文の作成\nbuilding_block.oxford_comma() building_block.oxford_comma_and() building_block.oxford_comma_or()\n\nJump to Get started.\nJump to Readme.", - "crumbs": [ - "3  Function reference" - ] - }, - { - "objectID": "man/diagnose.html", - "href": "man/diagnose.html", - "title": "4  py4stats.diagnose(): データフレームの概要", - "section": "", - "text": "4.1 概要\nR言語の dlookr::diagnose() を再現した関数で、データの全般的な状態についての要約を提供します。", - "crumbs": [ - "eda_tools", - "4  `py4stats.diagnose()`: データフレームの概要" - ] - }, - { - "objectID": "man/diagnose.html#概要", - "href": "man/diagnose.html#概要", - "title": "4  py4stats.diagnose(): データフレームの概要", - "section": "", - "text": "diagnose(data: IntoFrameT, to_native: bool = True)", - "crumbs": [ - "eda_tools", - "4  `py4stats.diagnose()`: データフレームの概要" - ] - }, - { - "objectID": "man/diagnose.html#引数-argument", - "href": "man/diagnose.html#引数-argument", - "title": "4  py4stats.diagnose(): データフレームの概要", - "section": "4.2 引数 Argument", - "text": "4.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", - "crumbs": [ - "eda_tools", - "4  `py4stats.diagnose()`: データフレームの概要" - ] - }, - { - "objectID": "man/diagnose.html#返り値", - "href": "man/diagnose.html#返り値", - "title": "4  py4stats.diagnose(): データフレームの概要", - "section": "4.3 返り値", - "text": "4.3 返り値\n\ndtype:該当する列のpandasにおけるデータの型。「〇〇の個数」や「〇〇の金額」といったデータの dtype が object や String になっていたら、文字列として読み込まれているので要注意です。\nmissing_count:1列のなかで NaN などの欠測値になっている数\nmissing_percent:1列のなかで欠測値が占めている割合でmissing_percent = (missing_count / 行数) * 100 として計算されます。もし missing_percent = 100 なら、その列は完全に空白です。\nunique_count:その列で重複を除外したユニークな値の数。例えばある列の中身が「a, a, b」であればユニークな値は a と b の2つなので unique_count = 2 です。もし unique_count = 1 であれば、その行にはたった1種類の値しか含まれていないことが分かりますし、例えば都道府県を表す列の unique_count が47より多ければ、都道府県以外のものが混ざっていると考えられます。\nunique_rate: サンプルに占めるユニークな値の割合。 unique_rate = unique_count / 行数 で計算されます。unique_rate = 1 であれば、全ての行に異なる値が入っています。一般的に、実数値の列は unique_rate が高くなりますが、年齢の「20代」や価格の「200円代」のように階級に分けられている場合には unique_rate が低くなります。", - "crumbs": [ - "eda_tools", - "4  `py4stats.diagnose()`: データフレームの概要" - ] - }, - { - "objectID": "man/diagnose.html#使用例-examples", - "href": "man/diagnose.html#使用例-examples", - "title": "4  py4stats.diagnose(): データフレームの概要", - "section": "4.4 使用例 Examples", - "text": "4.4 使用例 Examples\nimport py4stats as py4st\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込み\n\nprint(py4st.diagnose(penguins).round(4))\n#> columns dtype missing_count missing_percent unique_count unique_rate\n#> 0 species object 0 0.0000 3 0.8721\n#> 1 island object 0 0.0000 3 0.8721\n#> 2 bill_length_mm float64 2 0.5814 165 47.9651\n#> 3 bill_depth_mm float64 2 0.5814 81 23.5465\n#> 4 flipper_length_mm float64 2 0.5814 56 16.2791\n#> 5 body_mass_g float64 2 0.5814 95 27.6163\n#> 6 sex object 11 3.1977 3 0.8721\n#> 7 year int64 0 0.0000 3 0.8721\n\nReturn to Function reference.", - "crumbs": [ - "eda_tools", - "4  `py4stats.diagnose()`: データフレームの概要" - ] - }, - { - "objectID": "man/tabyl.html", - "href": "man/tabyl.html", - "title": "5  py4stats.tabyl()", - "section": "", - "text": "5.1 概要\nデータフレームのクロス集計表を作成します。R言語の janitor::tabyl()にいくつかの adorn_ 関数を追加した状態を再現した関数です。初期設定ではクロス集計表の各セルに度数と相対度数を 「度数(相対度数%)`」 の形式で表示します。", - "crumbs": [ - "eda_tools", - "5  `py4stats.tabyl()`" - ] - }, - { - "objectID": "man/tabyl.html#概要", - "href": "man/tabyl.html#概要", - "title": "5  py4stats.tabyl()", - "section": "", - "text": "tabyl(\n data: IntoFrameT,\n index: str,\n columns: str,\n margins: bool = True,\n margins_name: str = 'All',\n normalize: Union[bool, Literal[\"index\", \"columns\", \"all\"]] = \"index\",\n dropna: bool = False,\n digits: int = 1,\n **kwargs: Any\n)", - "crumbs": [ - "eda_tools", - "5  `py4stats.tabyl()`" - ] - }, - { - "objectID": "man/tabyl.html#引数-argument", - "href": "man/tabyl.html#引数-argument", - "title": "5  py4stats.tabyl()", - "section": "5.2 引数 Argument", - "text": "5.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\nindex:str  集計に使用するデータフレームの変数名(必須)。\ncolumns:str  集計に使用するデータフレームの変数名(必須)。\nmargins:bool  行または列の合計を追加するかどうかを表すブール値。初期設定は True です。\nmargins_name:bool  行や列の合計の名前。初期設定は 'All' です。\ndropna:bool   欠測値(NaN)を集計から除外するかどうかを表すブール値。初期設定は False です。\nnormalize:str  丸括弧( )に表示する相対度数の計算方式。\n\nindex 各セルの度数を行の和で割り、横方向の相対度数の和が100%になるように計算します。\ncolumns 各セルの度数を行の列で割り、縦方向の相対度数の和が100%になるように計算します。\nall 各セルの度数を総度数で割り、全てのセルの相対度数の和が100%になるように計算します。\n\ndigits:int  丸括弧( )に表示する相対度数の小数点以下の桁数。初期設定は1です。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", - "crumbs": [ - "eda_tools", - "5  `py4stats.tabyl()`" - ] - }, - { - "objectID": "man/tabyl.html#使用例", - "href": "man/tabyl.html#使用例", - "title": "5  py4stats.tabyl()", - "section": "5.3 使用例", - "text": "5.3 使用例\nimport py4stats as py4st\nimport pandas as pd\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込\n\n# 横方向の和を100%として計算(初期設定)\nprint(py4st.tabyl(penguins, 'island', 'species', normalize = 'index'))\n#> species Adelie Chinstrap Gentoo All\n#> island \n#> Biscoe 44 (26.2%) 0 (0.0%) 124 (73.8%) 168\n#> Dream 56 (45.2%) 68 (54.8%) 0 (0.0%) 124\n#> Torgersen 52 (100.0%) 0 (0.0%) 0 (0.0%) 52\n#> All 152 (44.2%) 68 (19.8%) 124 (36.0%) 344\n\n# 縦方向の和を100%として計算\nprint(py4st.tabyl(penguins, 'island', 'species', normalize = 'columns'))\n#> species Adelie Chinstrap Gentoo All\n#> island \n#> Biscoe 44 (28.9%) 0 (0.0%) 124 (100.0%) 168 (48.8%)\n#> Dream 56 (36.8%) 68 (100.0%) 0 (0.0%) 124 (36.0%)\n#> Torgersen 52 (34.2%) 0 (0.0%) 0 (0.0%) 52 (15.1%)\n#> All 152 68 124 344\n\n# 全体の和を100%として計算\nprint(py4st.tabyl(penguins, 'island', 'species', normalize = 'all'))\n#> species Adelie Chinstrap Gentoo All\n#> island \n#> Biscoe 44 (12.8%) 0 (0.0%) 124 (36.0%) 168 (48.8%)\n#> Dream 56 (16.3%) 68 (19.8%) 0 (0.0%) 124 (36.0%)\n#> Torgersen 52 (15.1%) 0 (0.0%) 0 (0.0%) 52 (15.1%)\n#> All 152 (44.2%) 68 (19.8%) 124 (36.0%) 344 (100.0%)\n\nReturn to Function reference.", - "crumbs": [ - "eda_tools", - "5  `py4stats.tabyl()`" - ] - }, - { - "objectID": "man/freq_table.html", - "href": "man/freq_table.html", - "title": "6  py4stats.freq_table()", - "section": "", - "text": "6.1 概要\nR言語のDescTools::Freq()をオマージュした、1変数の度数分布表を計算する関数。度数 freq と相対度数 perc に加えて、それぞれの累積値を計算します。", - "crumbs": [ - "eda_tools", - "6  `py4stats.freq_table()`" - ] - }, - { - "objectID": "man/freq_table.html#概要", - "href": "man/freq_table.html#概要", - "title": "6  py4stats.freq_table()", - "section": "", - "text": "freq_table(\n data: IntoFrameT,\n subset: Union[str, Sequence[str]],\n sort_by: Literal['frequency', 'values'] = 'frequency',\n descending: bool = False,\n dropna: bool = False,\n to_native: bool = True,\n *,\n sort: Optional[bool] = None\n)", - "crumbs": [ - "eda_tools", - "6  `py4stats.freq_table()`" - ] - }, - { - "objectID": "man/freq_table.html#引数-argument", - "href": "man/freq_table.html#引数-argument", - "title": "6  py4stats.freq_table()", - "section": "6.2 引数 Argument", - "text": "6.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\nsubset:str or list of str  集計に使用するデータフレームの列名(必須)。\nsort_by:str  sort_by = 'frequency' なら度数分布表を頻度に応じてソートし、sort_by = 'values' なら subset で指定した列の値に応じてソートします。\ndescending:bool  ソートの方式。True なら降順でソートし、False(初期設定)なら昇順でソートします。\ndropna:bool  欠測値(NaN, None など)を集計から除外するかどうかを表すブール値。初期設定は False です。\nsort:Deprecated..  sort_by の使用を推奨しています。この引数は後方互換性のために保持されおり、指定された場合は FutureWarningが発生します。デフォルトは None です。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", - "crumbs": [ - "eda_tools", - "6  `py4stats.freq_table()`" - ] - }, - { - "objectID": "man/freq_table.html#返り値-value", - "href": "man/freq_table.html#返り値-value", - "title": "6  py4stats.freq_table()", - "section": "6.3 返り値 Value", - "text": "6.3 返り値 Value\n freq_table()関数は、次の値をもつ DataFrame を出力します。\n\nfreq: 度数\nperc: 相対度数\ncumfreq: 累積度数\ncumperc: 累積相対度数", - "crumbs": [ - "eda_tools", - "6  `py4stats.freq_table()`" - ] - }, - { - "objectID": "man/freq_table.html#使用例", - "href": "man/freq_table.html#使用例", - "title": "6  py4stats.freq_table()", - "section": "6.4 使用例", - "text": "6.4 使用例\nimport py4stats as py4st\nimport pandas as pd\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込\n\nprint(py4st.freq_table(penguins, 'species'))\n#> species freq perc cumfreq cumperc\n#> 0 Chinstrap 68 0.197674 68 0.197674\n#> 1 Gentoo 124 0.360465 192 0.558140\n#> 2 Adelie 152 0.441860 344 1.000000\n\nprint(py4st.freq_table(penguins, ['island', 'species']))\n#> island species freq perc cumfreq cumperc\n#> 0 Biscoe Adelie 44 0.127907 44 0.127907\n#> 1 Torgersen Adelie 52 0.151163 96 0.279070\n#> 2 Dream Adelie 56 0.162791 152 0.441860\n#> 3 Dream Chinstrap 68 0.197674 220 0.639535\n#> 4 Biscoe Gentoo 124 0.360465 344 1.000000\npenguins2 = penguins.assign(bill_length_mm2 = pd.cut(penguins['bill_length_mm'], 6))\n\nprint(\n py4st.freq_table(\n penguins2, ['species', 'bill_length_mm2'], \n sort_by = 'values', dropna = True\n )\n )\n#> species bill_length_mm2 freq perc cumfreq cumperc\n#> 0 Adelie (32.072, 36.683] 36 0.105263 36 0.105263\n#> 1 Adelie (36.683, 41.267] 89 0.260234 125 0.365497\n#> 2 Adelie (41.267, 45.85] 25 0.073099 150 0.438596\n#> 3 Adelie (45.85, 50.433] 1 0.002924 151 0.441520\n#> 4 Chinstrap (36.683, 41.267] 1 0.002924 152 0.444444\n#> 5 Chinstrap (41.267, 45.85] 12 0.035088 164 0.479532\n#> 6 Chinstrap (45.85, 50.433] 29 0.084795 193 0.564327\n#> 7 Chinstrap (50.433, 55.017] 24 0.070175 217 0.634503\n#> 8 Chinstrap (55.017, 59.6] 2 0.005848 219 0.640351\n#> 9 Gentoo (36.683, 41.267] 1 0.002924 220 0.643275\n#> 10 Gentoo (41.267, 45.85] 39 0.114035 259 0.757310\n#> 11 Gentoo (45.85, 50.433] 65 0.190058 324 0.947368\n#> 12 Gentoo (50.433, 55.017] 15 0.043860 339 0.991228\n#> 13 Gentoo (55.017, 59.6] 3 0.008772 342 1.000000\n\nReturn to Function reference.", - "crumbs": [ - "eda_tools", - "6  `py4stats.freq_table()`" - ] - }, - { - "objectID": "man/Pareto_plot.html", - "href": "man/Pareto_plot.html", - "title": "7  py4stats.Pareto_plot(): パレート図の作成", - "section": "", - "text": "7.1 概要\nデータフレームからパレート図を作図する関数です。", - "crumbs": [ - "eda_tools", - "7  `py4stats.Pareto_plot()`: パレート図の作成" - ] - }, - { - "objectID": "man/Pareto_plot.html#概要", - "href": "man/Pareto_plot.html#概要", - "title": "7  py4stats.Pareto_plot(): パレート図の作成", - "section": "", - "text": "Pareto_plot(\n data: IntoFrameT,\n group: str,\n values: Optional[str] = None,\n top_n: Optional[int] = None,\n aggfunc: Callable[..., Any] = np.mean,\n ax: Optional[Axes] = None,\n fontsize: int = 12,\n xlab_rotation: Union[int, float] = 0,\n palette: Sequence[str] = (\"#478FCE\", \"#252525\"),\n )\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\ngroup:str  集計に使用するデータフレームの列名(必須)。\nvalues:str  集計に使用するデータフレームの列名。values = None(初期設定)の場合、group 別の度数が表示され、values が指定された場合、group 別に values を aggfuncで集計した値がグラフに表示されます。\ntop_n:int  棒グラフを表示するカテゴリーの件数。top_n = None(初期設定)の場合、すべてのカテゴリーを表示し、整数値が指定された場合、上位 top_n 件が表示されます。\naggfunc:callable values が指定された際に、集計に使用する集計関数。np.mean など values 列を1次元配列として受け取って単一の数値を返す任意の関数が使用できるほか、nw.mean など narwhals.functions モジュールで実装された関数を使用できます。\nax 描画先となる matplotlib の Axes。複数のグラフを並べる場合などに使用します。デフォルトの None の場合は、新しい Figure と Axes が作成されます。\nfontsize:int  軸ラベルなどのフォントサイズ。\nxlab_rotation:int or float 横軸ラベルの角度。matplotlib の ax.xaxis.set_tick_params() に引数 rotation として渡されます。\npalette:list of str グラフの描画に使用する色コード。1つ目の要素が棒グラフの色に、2つ目の累積値を表す折線グラフの色に対応します。", - "crumbs": [ - "eda_tools", - "7  `py4stats.Pareto_plot()`: パレート図の作成" - ] - }, - { - "objectID": "man/Pareto_plot.html#使用例", - "href": "man/Pareto_plot.html#使用例", - "title": "7  py4stats.Pareto_plot(): パレート図の作成", - "section": "7.2 使用例", - "text": "7.2 使用例\nimport py4stats as py4st\nimport pandas as pd\nimport numpy as np\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込\n\npenguins['group'] = penguins['species'] + '\\n' + penguins['island']\n\npy4st.Pareto_plot(penguins, group = 'group')\n\n\n\nPareto_plot1\n\n\npy4st.Pareto_plot(\n penguins, group = 'group', \n values = 'bill_length_mm',\n aggfunc = np.mean,\n palette = ['#FF6F91', '#252525']\n )\n\n\n\nPareto_plot2\n\n\npy4st.Pareto_plot(\n penguins, \n values = 'bill_length_mm',\n group = 'group',\n aggfunc = lambda x: x.std()\n )\n\n\n\nPareto_plot3\n\n\n\nReturn to Function reference.", - "crumbs": [ - "eda_tools", - "7  `py4stats.Pareto_plot()`: パレート図の作成" - ] - }, - { - "objectID": "man/plot_category.html", - "href": "man/plot_category.html", - "title": "8  py4stats.plot_category()", - "section": "", - "text": "8.1 概要\nカテゴリ変数の回答分布を 100% 積み上げ横棒グラフとして描画します。\n本関数は、複数のカテゴリ変数について回答分布を集計し、各変数を1本の100%積み上げ横棒グラフとして可視化します。リッカート尺度による設問や、共通のカテゴリをもつ、アンケートの回答データの可視化を主な用途としています。", - "crumbs": [ - "eda_tools", - "8  `py4stats.plot_category()`" - ] - }, - { - "objectID": "man/plot_category.html#概要", - "href": "man/plot_category.html#概要", - "title": "8  py4stats.plot_category()", - "section": "", - "text": "plot_category(\n data: IntoFrameT,\n palette: Optional[sns.palettes._ColorPalette] = None,\n legend_type: Literal['horizontal', 'vertical', 'none'] = 'horizontal',\n show_vline: bool = True,\n ax: Optional[Axes] = None,\n):", - "crumbs": [ - "eda_tools", - "8  `py4stats.plot_category()`" - ] - }, - { - "objectID": "man/plot_category.html#引数-argument", - "href": "man/plot_category.html#引数-argument", - "title": "8  py4stats.plot_category()", - "section": "8.2 引数 Argument", - "text": "8.2 引数 Argument\n\ndata:IntoFrameT(必須) カテゴリ変数を含む入力データフレーム(1列につき1変数)。 narwhals がサポートする任意のデータフレーム型(例:pandas.DataFrame、polars.DataFrame)を指定できます。 すべての列は、同一のカテゴリ体系(共通のカテゴリラベル)を共有している必要があります。 注意:pyarrow.Table については、その仕様による機能制限があります。詳細は「注意 Notes」セクションを参照してください。\nsort_by: str 回答カテゴリの並び順を決定する基準。'values':カテゴリの値(ラベル)でソートします。'frequency':出現頻度の高い順にソートします。デフォルトは 'values' です。\npalette sns.palettes._ColorPalette: 回答カテゴリに使用するカラーパレット。 None の場合は、内部でデフォルトの発散型パレットを生成します。 指定する場合は、カテゴリ数と同じ長さの配列である必要があります。 デフォルトは None です。\nlegend_typestr: 凡例の配置方法。デフォルトは 'horizontal' です。\n\n'horizontal':凡例をグラフ下部に横並びで表示します。\n'vertical':凡例をグラフ右側に縦並びで表示します。\n'none':凡例を表示しません。\n\nshow_vline:bool True の場合、x = 0.5(50%)の位置に基準となる垂直線を描画します。 割合の中点を視覚的に示す目的で使用できます。デフォルトは True です。\nax: 描画先となる matplotlib の Axes。複数のグラフを並べる場合などに使用します。デフォルトの None の場合は、新しい Figure と Axes が作成されます。", - "crumbs": [ - "eda_tools", - "8  `py4stats.plot_category()`" - ] - }, - { - "objectID": "man/plot_category.html#使用例-example", - "href": "man/plot_category.html#使用例-example", - "title": "8  py4stats.plot_category()", - "section": "8.3 使用例 Example", - "text": "8.3 使用例 Example\nimport py4stats as py4st\nimport pandas as pd\nimport itertools\n\nQ1 = [70 * ['Strongly agree'], 200 * ['Agree'], 235 * ['Disagree'], 149 * ['Strongly disagree']]\nQ2 = [74 * ['Strongly agree'], 209 * ['Agree'], 238 * ['Disagree'], 133 * ['Strongly disagree']]\nQ3 = [59 * ['Strongly agree'], 235 * ['Agree'], 220 * ['Disagree'], 140 * ['Strongly disagree']]\nQ4 = [40 * ['Strongly agree'], 72 * ['Agree'], 266 * ['Disagree'], 276 * ['Strongly disagree']]\n\ndata = pd.DataFrame({\n 'I read only if I have to.':list(itertools.chain.from_iterable(Q1)),\n 'Reading is one of my favorite hobbies.':list(itertools.chain.from_iterable(Q2)),\n 'I like talking about books with other people.':list(itertools.chain.from_iterable(Q3)),\n 'For me, reading is a waste of time.':list(itertools.chain.from_iterable(Q4))\n})\ncateg_list = ['Strongly disagree', 'Disagree', 'Agree', 'Strongly agree']\n\ndata_pd = data.apply(pd.Categorical, categories = categ_list)\n\npy4st.plot_category(data_pd)\n\n\n\nplot_category1\n\n\nimport polars as pl\nimport textwrap\n\ndata_pl = pl.from_pandas(data)\ndata_pl = data_pl.with_columns(\n pl.all().cast(pl.Enum(categ_list))\n )\\\n .rename(lambda x: textwrap.fill(x, width = 25))\n\nfig, ax = plt.subplots()\n\npy4st.plot_category(\n data_pl, \n palette = sns.color_palette('RdBu', n_colors = 4),\n ax = ax\n )\n\nax.set_title('Survey on attitudes toward reading');\n\n\n\nplot_category2", - "crumbs": [ - "eda_tools", - "8  `py4stats.plot_category()`" - ] - }, - { - "objectID": "man/plot_category.html#注意-notes", - "href": "man/plot_category.html#注意-notes", - "title": "8  py4stats.plot_category()", - "section": "8.4 注意 Notes", - "text": "8.4 注意 Notes\n\nsort_by=\"values\" は、カテゴリの順序情報(例:pandas の ordered categorical、Polars の Enum で定義した順序)を前提に、カテゴリ順で描画します。\n推奨: sort_by=“values” を利用する場合は、入力として pandas.DataFrame(各列を pd.Categorical に設定)または polars.DataFrame(各列を Enum に設定)を推奨します。\npolars.Categorical の列では、カテゴリ順が期待通りに保持されず、辞書順(例:Agree, Disagree, …)で描画される場合があります。\npyarrow.Table を入力した場合、sort_by = 'values’ は dictionary 型の制約によりエラーとなる場合があります。その場合は sort_by=\"frequency\" を使用してください。", - "crumbs": [ - "eda_tools", - "8  `py4stats.plot_category()`" - ] - }, - { - "objectID": "man/diagnose_category.html", - "href": "man/diagnose_category.html", - "title": "9  カテゴリー変数の要約 py4stats.diagnose_category()", - "section": "", - "text": "9.1 概要\nデータフレームのカテゴリー変数を要約します。本関数は、カテゴリー情報を表す列(カテゴリ型・文字列型・ブール型)およびダミー変数(値が {0, 1} に制限された整数列)を対象として、欠損率、ユニーク値の数、最頻値、最頻値の頻度と割合、evenness などの指標を提供します。", - "crumbs": [ - "eda_tools", - "9  カテゴリー変数の要約 `py4stats.diagnose_category()`" - ] - }, - { - "objectID": "man/diagnose_category.html#概要", - "href": "man/diagnose_category.html#概要", - "title": "9  カテゴリー変数の要約 py4stats.diagnose_category()", - "section": "", - "text": "diagnose_category(\n data: IntoFrameT, \n dropna: bool = True, \n to_native: bool = True\n )", - "crumbs": [ - "eda_tools", - "9  カテゴリー変数の要約 `py4stats.diagnose_category()`" - ] - }, - { - "objectID": "man/diagnose_category.html#引数-argument", - "href": "man/diagnose_category.html#引数-argument", - "title": "9  カテゴリー変数の要約 py4stats.diagnose_category()", - "section": "9.2 引数 Argument", - "text": "9.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\ndropna:bool  欠測値(NaN, None など)を統計値の計算から除外するかどうかを表すブール値。初期設定は True です。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", - "crumbs": [ - "eda_tools", - "9  カテゴリー変数の要約 `py4stats.diagnose_category()`" - ] - }, - { - "objectID": "man/diagnose_category.html#返り値-value", - "href": "man/diagnose_category.html#返り値-value", - "title": "9  カテゴリー変数の要約 py4stats.diagnose_category()", - "section": "9.3 返り値 Value", - "text": "9.3 返り値 Value\nfreq_table()関数は、次の値をもつ DataFrame を出力します。\n\nvariables: 変数(列)名\ncount: 非欠損値の個数\nmiss_pct: 欠損率(null_count / N * 100) (* ここで N は data の行数)\nunique: ユニーク値の個数\nunique_pct: ユニーク値の割合(unique / N * 100)\nmode: 最頻値\nmode_freq: 最頻値の度数\nmode_pct: 最頻値の割合(mode_freq / N * 100)\nevenness: カテゴリー分布の均等度([0, 1] の範囲)", - "crumbs": [ - "eda_tools", - "9  カテゴリー変数の要約 `py4stats.diagnose_category()`" - ] - }, - { - "objectID": "man/diagnose_category.html#使用例-examples", - "href": "man/diagnose_category.html#使用例-examples", - "title": "9  カテゴリー変数の要約 py4stats.diagnose_category()", - "section": "9.4 使用例 Examples", - "text": "9.4 使用例 Examples\nimport pandas as pd\nimport py4stats as py4st\nfrom palmerpenguins import load_penguins\n\npenguins = load_penguins().drop('year', axis = 1) # サンプルデータの読み込み\npenguins2 = penguins.copy()\ns = penguins2['body_mass_g']\npenguins2['heavy'] = np.where(s >= s.quantile(0.75), True, False)\n\nprint(py4st.diagnose_category(penguins2).round(4))\n#> variables count miss_pct unique unique_pct mode mode_freq mode_pct evenness\n#> 0 species 344 0.0000 3 0.8721 Adelie 152 44.1860 0.9550\n#> 1 island 344 0.0000 3 0.8721 Biscoe 168 48.8372 0.9133\n#> 2 sex 333 3.1977 2 0.5814 male 168 50.4505 0.9999\n#> 3 heavy 344 0.0000 2 0.5814 False 254 73.8372 0.8292", - "crumbs": [ - "eda_tools", - "9  カテゴリー変数の要約 `py4stats.diagnose_category()`" - ] - }, - { - "objectID": "man/diagnose_category.html#note", - "href": "man/diagnose_category.html#note", - "title": "9  カテゴリー変数の要約 py4stats.diagnose_category()", - "section": "9.5 Note", - "text": "9.5 Note\nevenness は、各列ごとに情報エントロピーを \\([0, 1]\\) の範囲に正規化した指標です。本実装では、対数の底をカテゴリの個数(unique)に設定することで正規化を行っており、これは底を2とした情報エントロピーを log2(unique) で割ることと同値です。この指標は正規化エントロピー(normalized entropy)としても知られています。\n\nReturn to Function reference.", - "crumbs": [ - "eda_tools", - "9  カテゴリー変数の要約 `py4stats.diagnose_category()`" - ] - }, - { - "objectID": "man/point_range.html", - "href": "man/point_range.html", - "title": "10  数値変数の点推定と区間推定:py4stats.mean_qi() py4stats.median_qi() py4stats.mean_ci()", - "section": "", - "text": "10.1 概要\nR言語の ggdist::mean_qi() をオマージュした数値変数の点推定と区間推定を行う関数です。", - "crumbs": [ - "eda_tools", - "10  数値変数の点推定と区間推定:`py4stats.mean_qi()` `py4stats.median_qi()` `py4stats.mean_ci()`" - ] - }, - { - "objectID": "man/point_range.html#概要", - "href": "man/point_range.html#概要", - "title": "10  数値変数の点推定と区間推定:py4stats.mean_qi() py4stats.median_qi() py4stats.mean_ci()", - "section": "", - "text": "mean_qi(\n data: Union[IntoFrameT, SeriesT],\n width: float = 0.975,\n interpolation: str = 'midpoint',\n to_native: bool = True\n)\nmean_qi(\n data: Union[IntoFrameT, SeriesT],\n width: float = 0.975,\n interpolation: str = 'midpoint',\n to_native: bool = True\n)\n\nmedian_qi(\n data: Union[IntoFrameT, IntoSeriesT],\n width: float = 0.975,\n interpolation: str = 'midpoint',\n to_native: bool = True\n)\n\nmean_ci(\n data: Union[IntoFrameT, IntoSeriesT],\n width: float = 0.975,\n to_native: bool = True\n)", - "crumbs": [ - "eda_tools", - "10  数値変数の点推定と区間推定:`py4stats.mean_qi()` `py4stats.median_qi()` `py4stats.mean_ci()`" - ] - }, - { - "objectID": "man/point_range.html#引数-argument", - "href": "man/point_range.html#引数-argument", - "title": "10  数値変数の点推定と区間推定:py4stats.mean_qi() py4stats.median_qi() py4stats.mean_ci()", - "section": "10.2 引数 Argument", - "text": "10.2 引数 Argument\n\ndata:IntoFrameT or IntoSeriesT(必須) 入力データ。narwhals が受け入れ可能な DataFrame もしくは Series 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\nwidth:float  分位点区間の幅、もしくは信頼区間の計算に用いる信頼係数。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", - "crumbs": [ - "eda_tools", - "10  数値変数の点推定と区間推定:`py4stats.mean_qi()` `py4stats.median_qi()` `py4stats.mean_ci()`" - ] - }, - { - "objectID": "man/point_range.html#使用例-examples", - "href": "man/point_range.html#使用例-examples", - "title": "10  数値変数の点推定と区間推定:py4stats.mean_qi() py4stats.median_qi() py4stats.mean_ci()", - "section": "10.3 使用例 Examples", - "text": "10.3 使用例 Examples\nimport py4stats as py4st\nimport pandas as pd\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込み\n\nprint(py4st.mean_qi(penguins['bill_length_mm']).round(2))\n#> variable mean lower upper\n#> 0 bill_length_mm 43.92 34.8 53.1\n\n\nprint(py4st.median_qi(penguins['bill_length_mm']).round(2))\n#> variable median lower upper\n#> 0 bill_length_mm 44.45 34.8 53.1\n\nprint(py4st.mean_ci(penguins['bill_length_mm']).round(2))\n#> variable mean lower upper\n#> 0 bill_length_mm 43.92 43.26 44.58\n\nprint(py4st.mean_ci(penguins[['bill_length_mm', 'bill_depth_mm']]).round(2))\n#> variable mean lower upper\n#> 0 bill_length_mm 43.92 43.26 44.58\n#> 1 bill_depth_mm 17.15 16.91 17.39\n\nprint(penguins.groupby('species')[['bill_length_mm']].apply(py4st.median_qi).round(2))\n#> variable median lower upper\n#> species \n#> Adelie 0 bill_length_mm 38.80 34.05 44.10\n#> Chinstrap 0 bill_length_mm 49.55 42.45 55.00\n#> Gentoo 0 bill_length_mm 47.30 42.65 53.85\n\nReturn to Function reference.", - "crumbs": [ - "eda_tools", - "10  数値変数の点推定と区間推定:`py4stats.mean_qi()` `py4stats.median_qi()` `py4stats.mean_ci()`" - ] - }, - { - "objectID": "man/remove_empty_constant.html", - "href": "man/remove_empty_constant.html", - "title": "11  空白列, 定数列の削除:py4stats.remove_empty(), py4stats.remove_constant()", - "section": "", - "text": "11.1 概要\npy4stats.remove_empty()はR言語の janitor:remove_empty() をオマージュした関数で、全ての要素が NaN である列や行をデータフレームから除外します py4stats.remove_constant() はR言語の janitor:remove_constant() をオマージュした関数で、1種類だけの要素からなる列をデータフレームから除外します。", - "crumbs": [ - "eda_tools", - "11  空白列, 定数列の削除:`py4stats.remove_empty()`, `py4stats.remove_constant()`" - ] - }, - { - "objectID": "man/remove_empty_constant.html#概要", - "href": "man/remove_empty_constant.html#概要", - "title": "11  空白列, 定数列の削除:py4stats.remove_empty(), py4stats.remove_constant()", - "section": "", - "text": "remove_empty(\n data: IntoFrameT,\n cols: bool = True,\n rows: bool = True,\n cutoff: float = 1.0,\n quiet: bool = True,\n to_native: bool = True,\n **kwargs: Any\n) \n\nremove_constant(\n data: IntoFrameT,\n quiet: bool = True,\n to_native: bool = True,\n dropna = False,\n **kwargs: Any\n)", - "crumbs": [ - "eda_tools", - "11  空白列, 定数列の削除:`py4stats.remove_empty()`, `py4stats.remove_constant()`" - ] - }, - { - "objectID": "man/remove_empty_constant.html#引数-argument", - "href": "man/remove_empty_constant.html#引数-argument", - "title": "11  空白列, 定数列の削除:py4stats.remove_empty(), py4stats.remove_constant()", - "section": "11.2 引数 Argument", - "text": "11.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\ncols:bool  空白列を削除するかどうかを表すブール値(remove_empty() のみ)。True(初期設定) なら空白列を削除し、Falseなら全ての要素が NaN の列があっても削除しません。\nrows:bool  空白行を削除するかどうかを表すブール値(remove_empty() のみ)。True(初期設定) なら空白行を削除し、Falseなら全ての要素が NaN の行があっても削除しません。\ncutoff:float  列(行)の削除を行うかどうかを判定する欠測率の閾値(remove_empty() のみ)。ある列(行)における NaN の割合が >= cutoff のとき、その列(行)を削除します。初期設定は1で全ての要素が NaN の列(行)のみ削除しますが、例えば cutoff = 0.9 とすることで NaN の割合9が割以上の列(行)を削除できます。\nquiet:bool  削除した列(行)を報告するかどうかを表すブール値。quiet = True(初期設定) であれば何も報告せずに削除だけ行い、quiet = False なら、削除した列(行)の数と列名(行名)を報告します。\ndropna:bool  ユニーク値の数を計算する際に、NaN を除外するかどうかを表すブール値(remove_constant() のみ)。dropna = True だと NaN を除外し、dropna = False(初期設定)だと NaN を除外しません。データフレームに NaN と、 NaN ではない1種類の値からなる列がある場合、dropna = False だと削除されず、dropna = True だと削除されます。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", - "crumbs": [ - "eda_tools", - "11  空白列, 定数列の削除:`py4stats.remove_empty()`, `py4stats.remove_constant()`" - ] - }, - { - "objectID": "man/remove_empty_constant.html#使用例-example", - "href": "man/remove_empty_constant.html#使用例-example", - "title": "11  空白列, 定数列の削除:py4stats.remove_empty(), py4stats.remove_constant()", - "section": "11.3 使用例 Example", - "text": "11.3 使用例 Example\npy4stats.remove_empty() の使用例。\nimport py4stats as py4st\nimport pandas as pd\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込み\n\npenguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy()\n# 空白列を作成\npenguins2.loc[:, 'empty'] = np.nan\n# 空白行を作成\npenguins2.loc[344, :] = np.nan\n\nprint(penguins2.tail(3))\n#> species body_mass_g empty\n#> 342 Chinstrap 4100.0 NaN\n#> 343 Chinstrap 3775.0 NaN\n#> 344 NaN NaN NaN\n# 完全に空白な行と列を削除。\nprint(py4st.remove_empty(penguins2, quiet = False).tail(3))\n#> Removing 1 empty column(s) out of 3 columns(Removed: empty).\n#> Removing 1 empty row(s) out of 345 rows(Removed: 344).\n#> species body_mass_g\n#> 341 Chinstrap 3775.0\n#> 342 Chinstrap 4100.0\n#> 343 Chinstrap 3775.0\n\n# 完全に空白な列のみ削除。\nprint(py4st.remove_empty(penguins2, rows = False, quiet = False).tail(3))\n#> Removing 1 empty column(s) out of 3 columns(Removed: empty).\n#> species body_mass_g\n#> 342 Chinstrap 4100.0\n#> 343 Chinstrap 3775.0\n#> 344 NaN NaN\n\n# 完全に空白な行のみ削除。\nprint(py4st.remove_empty(penguins2, cols = False, quiet = False).tail(3))\n#> Removing 1 empty row(s) out of 345 rows(Removed: 344).\n#> species body_mass_g empty\n#> 341 Chinstrap 3775.0 NaN\n#> 342 Chinstrap 4100.0 NaN\n#> 343 Chinstrap 3775.0 NaN\n# quiet = True の場合\nprint(py4st.remove_empty(penguins2).tail(3))\n#> species body_mass_g\n#> 341 Chinstrap 3775.0\n#> 342 Chinstrap 4100.0\n#> 343 Chinstrap 3775.0\npy4stats.remove_constant() の使用例。\npenguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy()\npenguins2.loc[:, 'constant'] = 'c'\n\nprint(penguins2.head(3))\n#> species body_mass_g constant\n#> 0 Adelie 3750.0 c\n#> 1 Adelie 3800.0 c\n#> 2 Adelie 3250.0 c\n\nprint(py4st.remove_constant(penguins2, quiet = False).head(3))\n#> Removing 1 constant column(s) out of 3 column(s)(Removed: constant).\n#> species body_mass_g\n#> 0 Adelie 3750.0\n#> 1 Adelie 3800.0\n#> 2 Adelie 3250.0\npenguins2.loc[:, 'almost_empty'] = pd.NA\npenguins2.loc[1, 'almost_empty'] = 'c'\n\n# dropna = False なら、almost_empty は削除されません。\nprint(py4st.remove_constant(penguins2).head(3))\n#> species body_mass_g almost_empty\n#> 0 Adelie 3750.0 <NA>\n#> 1 Adelie 3800.0 c\n#> 2 Adelie 3250.0 <NA>\n\nprint(py4st.remove_constant(penguins2, dropna = True).head(3))\n#> species body_mass_g\n#> 0 Adelie 3750.0\n#> 1 Adelie 3800.0\n#> 2 Adelie 3250.0\n\nReturn to Function reference.", - "crumbs": [ - "eda_tools", - "11  空白列, 定数列の削除:`py4stats.remove_empty()`, `py4stats.remove_constant()`" - ] - }, - { - "objectID": "man/filtering_out.html", - "href": "man/filtering_out.html", - "title": "12  py4stats.filtering_out()", - "section": "", - "text": "12.1 概要\npandas の DataFrame.filter() メソッドでは引数 like に文字列を指定することで、列名に特定の文字列を含む列を選択できますが、反対に py4st.filtering_out() では列名に特定の文字列を含む列を除外します。実装の一部はR言語の dplyr::select() を参考にしました。", - "crumbs": [ - "eda_tools", - "12  `py4stats.filtering_out()`" - ] - }, - { - "objectID": "man/filtering_out.html#概要", - "href": "man/filtering_out.html#概要", - "title": "12  py4stats.filtering_out()", - "section": "", - "text": "filtering_out(\n data: IntoFrameT,\n contains: Optional[str] = None,\n starts_with: Optional[str] = None,\n ends_with: Optional[str] = None,\n axis: Union[int, str] = 'columns',\n to_native: bool = True,\n)", - "crumbs": [ - "eda_tools", - "12  `py4stats.filtering_out()`" - ] - }, - { - "objectID": "man/filtering_out.html#引数-argument", - "href": "man/filtering_out.html#引数-argument", - "title": "12  py4stats.filtering_out()", - "section": "12.2 引数 Argument", - "text": "12.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\n*args(str / list[str] / narwhals.Expr / narwhals.Selector) 移動したい列を指定します。指定方法は次のとおりです。\n\n列名(例:\"x\")\n列名のリスト(例:[\"x\", \"y\"])\nnarwhals の式(Expr)(例:nw.col(\"x\")) *axis = 'columns' の場合のみ\nnarwhals の Selector (例:ncs.numeric())*axis = 'columns' の場合のみ\n\ncontains:str  列名(行名)の検索に使用する文字列。内部で使用している pandas.Series.str.contains に渡され、指定された文字列を列名(行名)に含む列(行)を除外します。\nstarts_with:str  列名(行名)の検索に使用する文字列。内部で使用している pandas.Series.str.startswith に渡され、指定された文字列で列名(行名)が始まる列(行)を除外します。\nends_with:str  列名(行名)の検索に使用する文字列。内部で使用している pandas.Series.str.endswith に渡され、指定された文字列で列名(行名)が終わる列(行)を除外します。\naxis:{0 or 'index', 1 or 'columns'} axis = 1 または axis = 'columns' なら列の削除を行い、axis = 0 または axis = 'index' なら行の削除を行います。 このオプションは、data がインデックス属性 (例: pandas.DataFrame) をもつ場合のみ有効です。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", - "crumbs": [ - "eda_tools", - "12  `py4stats.filtering_out()`" - ] - }, - { - "objectID": "man/filtering_out.html#使用例", - "href": "man/filtering_out.html#使用例", - "title": "12  py4stats.filtering_out()", - "section": "12.3 使用例", - "text": "12.3 使用例\nimport py4stats as py4st\nimport pandas as pd\nimport narwhals.selectors as ncs\nfrom palmerpenguins import load_penguins\n\npenguins = load_penguins().head(3) # サンプルデータの読み込み\n\nprint(penguins)\n#> species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g sex year female\n#> 0 Adelie Torgersen 39.1 18.7 181.0 3750.0 male 2007 0\n#> 1 Adelie Torgersen 39.5 17.4 186.0 3800.0 female 2007 1\n#> 2 Adelie Torgersen 40.3 18.0 195.0 3250.0 female 2007 1\n# *args で列名を直接指定\nprint(py4st.filtering_out(penguins, 'year', 'island', 'sex'))\n#> species bill_length_mm bill_depth_mm flipper_length_mm body_mass_g\n#> 0 Adelie 39.1 18.7 181.0 3750.0\n#> 1 Adelie 39.5 17.4 186.0 3800.0\n#> 2 Adelie 40.3 18.0 195.0 3250.0\n\n\n# narwhals.selector の使用例 文字列型の変数を除外\nprint(py4st.filtering_out(penguins, ncs.string()))\n#> bill_length_mm bill_depth_mm flipper_length_mm body_mass_g year\n#> 0 39.1 18.7 181.0 3750.0 2007\n#> 1 39.5 17.4 186.0 3800.0 2007\n#> 2 40.3 18.0 195.0 3250.0 2007\n\n# 列名に 'length' を含む列を除外\nprint(py4st.filtering_out(penguins, contains = 'length'))\n#> species island bill_depth_mm body_mass_g sex year female\n#> 0 Adelie Torgersen 18.7 3750.0 male 2007 0\n#> 1 Adelie Torgersen 17.4 3800.0 female 2007 1\n#> 2 Adelie Torgersen 18.0 3250.0 female 2007 1\n\n# 列名が 'bill' から始まる列を除外\nprint(py4st.filtering_out(penguins, starts_with = 'bill'))\n#> species island flipper_length_mm body_mass_g sex year female\n#> 0 Adelie Torgersen 181.0 3750.0 male 2007 0\n#> 1 Adelie Torgersen 186.0 3800.0 female 2007 1\n#> 2 Adelie Torgersen 195.0 3250.0 female 2007 1\n\n# 列名が '_mm' で終わる列を除外\nprint(py4st.filtering_out(penguins, ends_with = '_mm'))\n#> species island body_mass_g sex year female\n#> 0 Adelie Torgersen 3750.0 male 2007 0\n#> 1 Adelie Torgersen 3800.0 female 2007 1\n#> 2 Adelie Torgersen 3250.0 female 2007 1", - "crumbs": [ - "eda_tools", - "12  `py4stats.filtering_out()`" - ] - }, - { - "objectID": "man/filtering_out.html#notes", - "href": "man/filtering_out.html#notes", - "title": "12  py4stats.filtering_out()", - "section": "12.4 Notes", - "text": "12.4 Notes\naxis='index' による行を対象とするフィルタリングは、インデックスの存在に依存します。したがって、pd.DataFrame 以外の行ラベルをもたない DataFrame バックエンドでは、このオプションは利用できません。\n\nReturn to Function reference.", - "crumbs": [ - "eda_tools", - "12  `py4stats.filtering_out()`" - ] - }, - { - "objectID": "man/relocate.html", - "href": "man/relocate.html", - "title": "13  py4stats.relocate(): 列を削除せずに並び替える", - "section": "", - "text": "13.1 概要\nrelocate() 関数は、データフレームに含まれる列を削除することなく並び替えるための関数です。指定した列(1 列または複数列)を、先頭・特定の列の前・特定の列の後に移動させることができます。本関数は、R の dplyr:relocate() に近い操作感を Python で提供することを目的としています。列の指定には、列名(文字列)だけでなく、narwhals の式(Expr)や Selector を利用でき、柔軟な列選択", - "crumbs": [ - "eda_tools", - "13  `py4stats.relocate()`: 列を削除せずに並び替える" - ] - }, - { - "objectID": "man/relocate.html#概要", - "href": "man/relocate.html#概要", - "title": "13  py4stats.relocate(): 列を削除せずに並び替える", - "section": "", - "text": "relocate(\n data: IntoFrameT, \n *args: Union[str, List[str], narwhals.Expr, narwhals.selectors.Selector], \n before: Optional[str] = None,\n after: Optional[str] = None,\n place: Optional[Literal[\"first\", \"last\"]] = None,\n to_native: bool = True\n ):", - "crumbs": [ - "eda_tools", - "13  `py4stats.relocate()`: 列を削除せずに並び替える" - ] - }, - { - "objectID": "man/relocate.html#引数-argument", - "href": "man/relocate.html#引数-argument", - "title": "13  py4stats.relocate(): 列を削除せずに並び替える", - "section": "13.2 引数 Argument", - "text": "13.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\n*args(str / list[str] / narwhals.Expr / narwhals.Selector) 移動したい列を指定します。指定方法は次のとおりです。\n\n列名(例:\"x\")\n列名のリスト(例:[\"x\", \"y\"])\nnarwhals の式(Expr)(例:nw.col(\"x\"))\nnarwhals の Selector (例:ncs.numeric())\n\n指定した順序は、移動後の列順にもそのまま反映されます。\nbefore(str, optional) args で指定された列を、この列の直前に移動します。 after と同時に指定することはできません。デフォルトは None です。\nafter(str, optional) args で指定された列を、この列の直後に移動します。 before と同時に指定することはできません。デフォルトは None です。\nplace(str, optional) *args で指定された列の、配置場所を指定します。\n\n\"first\": 選択した列をデータフレームの先頭(最も左)に配置します。\n\"last\": 選択した列をデータフレームの末尾(最も右)に配置します。 place 引数は before または after と同時に指定することはできません。 未指定(None)の場合は \"first\" と同じ挙動になります。\n\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。\n\n\n13.2.1 返り値\n\nIntoFrameT 入力データフレームと同じ列を保持したまま、指定されたルールに従って並び替えられたデータフレームを返します。", - "crumbs": [ - "eda_tools", - "13  `py4stats.relocate()`: 列を削除せずに並び替える" - ] - }, - { - "objectID": "man/relocate.html#使用例-example", - "href": "man/relocate.html#使用例-example", - "title": "13  py4stats.relocate(): 列を削除せずに並び替える", - "section": "13.3 使用例 Example", - "text": "13.3 使用例 Example\nimport py4stats as py4st\nimport pandas as pd\nimport narwhals.selectors as ncs\nfrom palmerpenguins import load_penguins\n\npenguins_mini = py4st.filtering_out(penguins, starts_with = 'bill').head(3)\nprint(penguins_mini)\n#> species island flipper_length_mm body_mass_g sex year\n#> 0 Adelie Torgersen 181.0 3750.0 male 2007\n#> 1 Adelie Torgersen 186.0 3800.0 female 2007\n#> 2 Adelie Torgersen 195.0 3250.0 female 2007\n# *args に指定した列は最前列に移動します\nprint(py4st.relocate(penguins_mini, 'year', 'sex'))\n#> year sex species island flipper_length_mm body_mass_g\n#> 0 2007 male Adelie Torgersen 181.0 3750.0\n#> 1 2007 female Adelie Torgersen 186.0 3800.0\n#> 2 2007 female Adelie Torgersen 195.0 3250.0\n\n# ncs.numeric() を使うことで、数値変数を指定できます\nprint(py4st.relocate(penguins_mini, ncs.numeric()))\n#> flipper_length_mm body_mass_g year species island sex\n#> 0 181.0 3750.0 2007 Adelie Torgersen male\n#> 1 186.0 3800.0 2007 Adelie Torgersen female\n#> 2 195.0 3250.0 2007 Adelie Torgersen female\n\n# year 列を island 列の直前に移動\nprint(py4st.relocate(penguins_mini, 'year', before = 'island'))\n#> species year island flipper_length_mm body_mass_g sex\n#> 0 Adelie 2007 Torgersen 181.0 3750.0 male\n#> 1 Adelie 2007 Torgersen 186.0 3800.0 female\n#> 2 Adelie 2007 Torgersen 195.0 3250.0 female\n\n# year 列を island 列の直後に移動\nprint(py4st.relocate(penguins_mini, 'year', after = 'island'))\n#> species island year flipper_length_mm body_mass_g sex\n#> 0 Adelie Torgersen 2007 181.0 3750.0 male\n#> 1 Adelie Torgersen 2007 186.0 3800.0 female\n#> 2 Adelie Torgersen 2007 195.0 3250.0 female\n\n#. place = 'last' で最後列に移動\nprint(py4st.relocate(penguins_mini, 'year', place = 'last'))\n#> species island flipper_length_mm body_mass_g sex year\n#> 0 Adelie Torgersen 181.0 3750.0 male 2007\n#> 1 Adelie Torgersen 186.0 3800.0 female 2007\n#> 2 Adelie Torgersen 195.0 3250.0 female 2007\n\nReturn to Function reference.", - "crumbs": [ - "eda_tools", - "13  `py4stats.relocate()`: 列を削除せずに並び替える" - ] - }, - { - "objectID": "man/compare_df_cols.html", - "href": "man/compare_df_cols.html", - "title": "14  py4stats.compare_df_cols(), py4stats.compare_df_stats()", - "section": "", - "text": "14.1 概要\nR言語の janitor::compare_df_cols() をオマージュした関数で、compare_df_cols() は複数の pandas.DataFrame に含まれる同じ名前を持つ列同士のデータ型 dtype を比較し、compare_df_stats() は同じ名前を持つ列同士の記述統計量を比較します。", - "crumbs": [ - "eda_tools", - "14  `py4stats.compare_df_cols()`, `py4stats.compare_df_stats()`" - ] - }, - { - "objectID": "man/compare_df_cols.html#概要", - "href": "man/compare_df_cols.html#概要", - "title": "14  py4stats.compare_df_cols(), py4stats.compare_df_stats()", - "section": "", - "text": "compare_df_cols(\n df_list: Union[List[IntoFrameT], Mapping[str, IntoFrameT]],\n df_name: Optional[List[str]] = None,\n return_match: Literal[\"all\", \"match\", \"mismatch\"] = 'all',\n dropna:bool = False,\n to_native: bool = True\n)\n\ncompare_df_stats(\n df_list: List[IntoFrameT],\n df_name: Optional[List[str]] = None,\n return_match: Literal[\"all\", \"match\", \"mismatch\"] = \"all\",\n stats: Callable[..., Any] = np.mean,\n rtol: float = 1e-05,\n atol: float = 1e-08,\n to_native: bool = True,\n **kwargs: Any,\n)", - "crumbs": [ - "eda_tools", - "14  `py4stats.compare_df_cols()`, `py4stats.compare_df_stats()`" - ] - }, - { - "objectID": "man/compare_df_cols.html#引数-argument", - "href": "man/compare_df_cols.html#引数-argument", - "title": "14  py4stats.compare_df_cols(), py4stats.compare_df_stats()", - "section": "14.2 引数 Argument", - "text": "14.2 引数 Argument\n\ndf_list(必須) A list or dict of IntoFrameT  列を比較するデータフレームのリストもしくは辞書オブジェクト。辞書が df_name が未指定の場合、辞書の keys を df_name として使用します。\ndf_name list of str  表頭に表示するデータフレームの名前。['df1', 'df2'] のように文字列のリストを指定してください。初期設定では、自動的に df1, df2, df3 … と連番が割り当てられます。\nreturn_match str  出力に反映する変数の範囲を表す文字列。次の値から選択できます。\n\n'all'(初期設定): 全ての列を表示。\n'match':全てのデータフレームで dtype が一致している列のみを表示。\n'mismatch':少なくとも1つのデータフレームで dtype が一致していない列のみを表示。\n\ndropna bool (compare_df_cols() のみ)  データ型 dtype の一致判定に当たり、NaN を無視するかどうか。初期設定 False の場合、すべてのデータフレームが同名かつ同じデータ型の列を持たない限り、ミスマッチが発生したと判定されます。\nstats str or function  比較に用いる記述統計量を定義する関数。np.mean など values 列を1次元配列として受け取って単一の数値を返す任意の関数が使用できるほか、nw.mean など narwhals.functions モジュールで実装された関数を使用できます。初期設定は np.mean です。", - "crumbs": [ - "eda_tools", - "14  `py4stats.compare_df_cols()`, `py4stats.compare_df_stats()`" - ] - }, - { - "objectID": "man/compare_df_cols.html#使用例-examples", - "href": "man/compare_df_cols.html#使用例-examples", - "title": "14  py4stats.compare_df_cols(), py4stats.compare_df_stats()", - "section": "14.3 使用例 Examples", - "text": "14.3 使用例 Examples\nimport pandas as pd\nimport py4stats as py4st\n\ndf1 = pd.DataFrame({'x':[1, 2, 3], 'y':[5, 4, 2], 'z':[True, False, True]})\ndf2 = pd.DataFrame({'x':[1, 2, 3], 'y':[5.0, 4, 2], 'z':['True', 'False', 'True']})\n\nprint(py4st.compare_df_cols([df1, df2]))\n#> term df1 df2 match_dtype\n#> 0 x int64 int64 True\n#> 1 y int64 float64 False\n#> 2 z bool object False\nreturn_match = 'mismatch' を指定すると、データフレームの中で、dtype が一致していないものがある列を返します。\nprint(py4st.compare_df_cols(\n [df1, df2], return_match = 'mismatch'\n ))\n#> term df1 df2 match_dtype\n#> 1 y int64 float64 False\n#> 2 z bool object False\n py4st.compare_df_stats() は数値変数の記述統計量を比較するため、異なる経路で行われたデータ処理の結果が一致しているかを検証する場合に便利です。\nfrom palmerpenguins import load_penguins\npenguins = load_penguins()\npenguins2 = penguins.copy()\nvars = ['flipper_length_mm', 'body_mass_g']\npenguins2.loc[:, vars] = py4st.scale(penguins2.loc[:, vars])\n\nprint(\n py4st.compare_df_stats([penguins, penguins2]).round(2)\n)\n#> term df1 df2 match_stats\n#> 0 bill_depth_mm 17.15 17.15 True\n#> 1 bill_length_mm 43.92 43.92 True\n#> 2 body_mass_g 4201.75 0.00 False\n#> 3 flipper_length_mm 200.92 -0.00 False\n#> 4 year 2008.03 2008.03 True\n\nReturn to Function reference.", - "crumbs": [ - "eda_tools", - "14  `py4stats.compare_df_cols()`, `py4stats.compare_df_stats()`" - ] - }, - { - "objectID": "man/compare_group_stats.html", - "href": "man/compare_group_stats.html", - "title": "15  統計量に基づくグループ間比較", - "section": "", - "text": "15.1 概要\nこれら関数は、入力された2つのデータフレームについて、各数値変数の統計量に基づいた比較を提供します。", - "crumbs": [ - "eda_tools", - "15  統計量に基づくグループ間比較" - ] - }, - { - "objectID": "man/compare_group_stats.html#概要", - "href": "man/compare_group_stats.html#概要", - "title": "15  統計量に基づくグループ間比較", - "section": "", - "text": "compare_group_means(\n group1: IntoFrameT,\n group2: IntoFrameT,\n group_names: Sequence[str] = ('group1', 'group2'),\n columns: Literal['common', 'all'] = 'all',\n to_native: bool = True\n )\n\ncompare_group_median(\n group1: IntoFrameT,\n group2: IntoFrameT,\n group_names: Sequence[str] = ('group1', 'group2'),\n columns: Literal['common', 'all'] = 'all',\n to_native: bool = True\n )\n\nplot_mean_diff(\n group1: IntoFrameT,\n group2: IntoFrameT,\n stats_diff: Literal[\"norm_diff\", \"abs_diff\", \"rel_diff\"] = \"norm_diff\",\n ax: Optional[Axes] = None,\n )\n\nplot_median_diff(\n group1: IntoFrameT,\n group2: IntoFrameT,\n stats_diff: Literal[\"abs_diff\", \"rel_diff\"] = \"rel_diff\",\n ax: Optional[Axes] = None,\n )", - "crumbs": [ - "eda_tools", - "15  統計量に基づくグループ間比較" - ] - }, - { - "objectID": "man/compare_group_stats.html#引数-argument", - "href": "man/compare_group_stats.html#引数-argument", - "title": "15  統計量に基づくグループ間比較", - "section": "15.2 引数 Argument", - "text": "15.2 引数 Argument\n\ngroup1(必須)a pandas.DataFrame  数値変数を含む pandas.DataFrame で group2 との比較対象となるもの\ngroup2(必須)a pandas.DataFrame  数値変数を含む pandas.DataFrame で group1 との比較対象となるもの\ngroup_names list of str  表頭に表示するグループの名前。['group1', 'group2'] のように、2つの要素をもつ文字列のリストとして指定してください。\ncolumns str 2つのグループの結果を結合する際に含める変数を指定します。\n\n\"common\": 両方のグループに存在する変数のみが含まれます。\n\"all\": いずれかのグループに存在する全ての変数が含まれます。この場合、一方のグループにのみ存在する変数についての差分統計量は、欠損値(例:NaN または None)となります。\n\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。\nstats_diff: str (plot_mean_diff() および plot_median_diff() のみ)  グラフの描画に使用する差分統計量。'norm_diff'(plot_mean_diff() のみ)、'abs_diff', 'rel_diff' のいずれかから選ぶことができます。", - "crumbs": [ - "eda_tools", - "15  統計量に基づくグループ間比較" - ] - }, - { - "objectID": "man/compare_group_stats.html#返り値-value", - "href": "man/compare_group_stats.html#返り値-value", - "title": "15  統計量に基づくグループ間比較", - "section": "15.3 返り値 Value", - "text": "15.3 返り値 Value\n compare_group_means()関数および, compare_group_median() 関数では、次の値をもつ pandas.DataFrame が出力されます。\n\ngroup1, group2(初期設定の場合)  各グループにおける記述統計統計量の値\nnorm_diff(compare_group_means() のみ)  標準化された平均値の差で、2つのグループの平均値を \\(\\bar{X}_1\\), \\(\\bar{X}_2\\)、分散を \\(s^2_1, s^2_2\\) とし、サンプルサイズを \\(n_1, n_2\\) とするとき、次式のように定義されます。\n\n\\[\n\\delta = \\frac{\\bar{X}_1 - \\bar{X}_2}{s},~~~~~ s^2 = \\frac{(n_1-1)s_1^2 + (n_2-1)s_2^2}{n_1 + n_2 - 2}\n\\]\n\nabs_diff 2つのグループの記述統計量の絶対差\nrel_diff 2つのグループの記述統計量の相対差。2つのグループの記述統計量を \\(\\bar{X}_1\\), \\(\\bar{X}_2\\) とするとき、次式のように定義されます。\n\n\\[\n\\delta = \\cfrac{\\bar{X}_1 - \\bar{X}_2}{\\cfrac{\\bar{X}_1 + \\bar{X}_2}{2}}\n= 2 \\cdot \\frac{\\bar{X}_1 - \\bar{X}_2}{\\bar{X}_1 + \\bar{X}_2}\n\\]\nplot_mean_diff() 関数および, plot_median_diff() 関数では、グループ別の記述統計両の差をグラフとして可視化します。詳細は使用例を参照して下さい。", - "crumbs": [ - "eda_tools", - "15  統計量に基づくグループ間比較" - ] - }, - { - "objectID": "man/compare_group_stats.html#使用例-examples", - "href": "man/compare_group_stats.html#使用例-examples", - "title": "15  統計量に基づくグループ間比較", - "section": "15.4 使用例 Examples", - "text": "15.4 使用例 Examples\nimport pandas as pd\nimport py4stats as py4st\nfrom palmerpenguins import load_penguins\n\npenguins = load_penguins().drop('year', axis = 1) # サンプルデータの読み込み\nres1 = py4st.compare_group_means(\n penguins.query('species == \"Gentoo\"'),\n penguins.query('species == \"Adelie\"')\n)\nprint(res1.round(3))\n#> variable group1 group2 norm_diff abs_diff rel_diff\n#> 0 bill_depth_mm 14.982 18.346 -3.012 3.364 -0.202\n#> 1 bill_length_mm 47.505 38.791 3.048 8.713 0.202\n#> 2 body_mass_g 5076.016 3700.662 2.868 1375.354 0.313\n#> 3 flipper_length_mm 217.187 189.954 4.180 27.233 0.134\nres2 = py4st.compare_group_median(\n penguins.query('species == \"Gentoo\"'),\n penguins.query('species == \"Adelie\"'),\n group_names = ['Gentoo', 'Adelie']\n)\nprint(res2.round(3))\n#> variable Gentoo Adelie abs_diff rel_diff\n#> 0 bill_depth_mm 14.982 18.346 3.364 -0.202\n#> 1 bill_length_mm 47.505 38.791 8.713 0.202\n#> 2 body_mass_g 5076.016 3700.662 1375.354 0.313\n#> 3 flipper_length_mm 217.187 189.954 27.233 0.134\npy4st.plot_mean_diff(\n penguins.query('species == \"Gentoo\"'),\n penguins.query('species == \"Adelie\"'),\n stats_diff = 'norm_diff'\n)\n\n\n\nplot_mean_diff1\n\n\npy4st.plot_mean_diff(\n penguins.query('species == \"Gentoo\"'),\n penguins.query('species == \"Adelie\"'),\n stats_diff = 'abs_diff'\n)\n\n\n\nplot_mean_diff2\n\n\npy4st.plot_median_diff(\n penguins.query('species == \"Gentoo\"'),\n penguins.query('species == \"Adelie\"'),\n stats_diff = 'rel_diff'\n)\n\n\n\nplot_median_diff1\n\n\n\nReturn to Function reference.", - "crumbs": [ - "eda_tools", - "15  統計量に基づくグループ間比較" - ] - }, - { - "objectID": "man/plot_miss_var.html", - "href": "man/plot_miss_var.html", - "title": "16  py4stats.plot_miss_var()", - "section": "", - "text": "16.1 概要\nR言語の naniar::gg_miss_var() をオマージュした関数で、データフレームの各変数について欠測値の量を横棒グラフとして可視化します。欠損値統計の計算には py4stats.diagnose() を使用しています。", - "crumbs": [ - "eda_tools", - "16  `py4stats.plot_miss_var()`" - ] - }, - { - "objectID": "man/plot_miss_var.html#概要", - "href": "man/plot_miss_var.html#概要", - "title": "16  py4stats.plot_miss_var()", - "section": "", - "text": "plot_miss_var(\n data: IntoFrameT,\n values: Literal['missing_percent', 'missing_count'] = 'missing_percent', \n sort: bool = True, \n miss_only: bool = False, \n top_n: Optional[int] = None,\n fontsize: int = 12,\n ax: Optional[Axes] = None,\n color: str = '#478FCE',\n **kwargs: Any\n)", - "crumbs": [ - "eda_tools", - "16  `py4stats.plot_miss_var()`" - ] - }, - { - "objectID": "man/plot_miss_var.html#引数-argument", - "href": "man/plot_miss_var.html#引数-argument", - "title": "16  py4stats.plot_miss_var()", - "section": "16.2 引数 Argument", - "text": "16.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\nnormalize:str  グラフに表示する値の種類。\n\nmissing_percent 列毎の欠測率をパーセンテージで表示します。\ncolumns 列毎の欠測数を表示します。\n\nsort:bool プロット前に選択した指標で列をソートするかどうか。初期設定は True です。。\nmiss_only:bool 欠測値を含まない列を除外するかどうか。True だと欠測値を含まない列を除外し、False(初期設定)だと省略せずに全ての列を表示します。\ntop_n:int 棒グラフを表示するグラフの個数。top_n = None(初期設定)の場合、すべての棒グラフを表示し、整数値が指定された場合、欠測率(数)の上位 top_n 件が表示されます。\nax  matplotlib の ax オブジェクト。複数のグラフを並べる場合などに使用します。\nfontsize:int  軸ラベルなどのフォントサイズ。\npalette:list of str  グラフの描画に使用する色コード。棒グラフの色に対応します。", - "crumbs": [ - "eda_tools", - "16  `py4stats.plot_miss_var()`" - ] - }, - { - "objectID": "man/plot_miss_var.html#使用例-example", - "href": "man/plot_miss_var.html#使用例-example", - "title": "16  py4stats.plot_miss_var()", - "section": "16.3 使用例 Example", - "text": "16.3 使用例 Example\nimport py4stats as py4st\nimport pandas as pd\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込\n\npy4st.plot_miss_var(penguins)\n\n\n\nplot_miss_var1\n\n\npy4st.plot_miss_var(penguins, values = 'missing_count', miss_only = True)\n\n\n\nplot_miss_var2\n\n\n\nReturn to Function reference.", - "crumbs": [ - "eda_tools", - "16  `py4stats.plot_miss_var()`" - ] - }, - { - "objectID": "man/set_miss.html", - "href": "man/set_miss.html", - "title": "17  py4stats.set_miss()", - "section": "", - "text": "17.1 概要\nこの関数は、Series の非欠測要素のうち、指定された個数または割合を欠測値に置き換えます。narwhals を利用することで、複数の Series バックエンドに対応しています。主にテストデータの作成や、欠測データのシミュレーションを目的とした関数です。", - "crumbs": [ - "eda_tools", - "17  `py4stats.set_miss()`" - ] - }, - { - "objectID": "man/set_miss.html#概要", - "href": "man/set_miss.html#概要", - "title": "17  py4stats.set_miss()", - "section": "", - "text": "set_miss(\n x: IntoSeriesT, \n n: Optional[int] = None,\n prop: Optional[float] = None, \n method: Literal['random', 'first', 'last'] = 'random', \n random_state: Optional[int] = None, \n na_value: Any = None,\n to_native: bool = True\n )", - "crumbs": [ - "eda_tools", - "17  `py4stats.set_miss()`" - ] - }, - { - "objectID": "man/set_miss.html#引数-argument", - "href": "man/set_miss.html#引数-argument", - "title": "17  py4stats.set_miss()", - "section": "17.2 引数 Argument", - "text": "17.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\nn:int 処理後の Series に含まれる欠測値の目標個数。すでに n 個以上の欠測値が含まれている場合は、新たな欠測値は追加されず、警告が発せられます。\nprop:float 処理後の Series に含まれる欠測値の目標割合。0 から 1 の間で指定してください。すでに欠測値の割合が prop 以上である場合は、新たな欠測値は追加されず、警告が発せられます。\nmethod: str: 欠測値に置き換える要素の選択方法。\n\n'random': 非欠測要素の中からランダムに選択します。\n'first': Series の先頭から選択します。\n'last': Series の末尾から選択します。 デフォルトは 'random' です。\n\nrandom_state (int, optional): method = 'random' の場合に使用する乱数シード。再現性のある結果を得るために指定できます。 method が 'random' 以外の場合、random_state は無視されます。\nna_value: (Any) 欠測値として使用する値。デフォルトは None です。\nto_native(bool, optional) True の場合、入力と同じ型の Series(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.Series を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", - "crumbs": [ - "eda_tools", - "17  `py4stats.set_miss()`" - ] - }, - { - "objectID": "man/set_miss.html#使用例-example", - "href": "man/set_miss.html#使用例-example", - "title": "17  py4stats.set_miss()", - "section": "17.3 使用例 Example", - "text": "17.3 使用例 Example\nimport pandas as pd\nfrom py4stats import set_miss\ns = pd.Series([1, 2, 3, 4, 5])\npy4st.set_miss(s, n = 2, method='first')\n#> 0 NaN\n#> 1 NaN\n#> 2 3.0\n#> 3 4.0\n#> 4 5.0\n#> dtype: float64\n\ns_miss = py4st.set_miss(s, prop=0.4, method='random', random_state=0)\n#> 0 1.0\n#> 1 NaN\n#> 2 3.0\n#> 3 NaN\n#> 4 5.0\n#> dtype: float64\nx に代入された Series オブジェクトに、既に指定された以上の欠測値が含まれていた場合、次のように欠測値を追加せず UserWarning を出します。\npy4st.set_miss(s_miss, n = 2)\n#> UserWarning: Already contained 2(>= n) missing value(s) in `x`, \n#> no additional missing values were added.\n#> 0 1.0\n#> 1 NaN\n#> 2 3.0\n#> 3 NaN\n#> 4 5.0\n#> dtype: float64\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込\n\npenguins['island'] = py4st.set_miss(\n penguins['island'], \n n = 100, method='first'\n )\npy4st.plot_miss_var(penguins, values = 'missing_count')\n\n\n\nset_miss.png", - "crumbs": [ - "eda_tools", - "17  `py4stats.set_miss()`" - ] - }, - { - "objectID": "man/scale_wmean.html", - "href": "man/scale_wmean.html", - "title": "18  数値変換・正規化ユーティリティ: py4stats.weighted_mean(), py4stats.scale(), py4stats.min_max()", - "section": "", - "text": "18.1 概要\n本モジュールは、探索的データ解析(EDA)で頻繁に用いられる加重平均の計算および 数値データの正規化・標準化を行う関数群を提供します。\n内部では narwhals を利用することで、pandas・polars など複数のデータフレーム/シリーズ実装に対して共通の API を提供しています。\nweighted_mean(): 数値系列 x と対応する重み w を用いて、加重平均を計算します。欠損値の扱いを制御するためのオプションを備えています。\nscale(): 数値データを Z スコア標準化します。系列データを主な対象としますが、pandas.DataFrame に対しても専用実装により列単位での標準化をサポートしています。\nmin_max(): 数値データを Min-Max Normarization により \\([0, 1]\\) の範囲に変換します。scale() と同様に、Series を主対象としつつ pandas.DataFrame にも対応しています。", - "crumbs": [ - "eda_tools", - "18  数値変換・正規化ユーティリティ: `py4stats.weighted_mean()`, `py4stats.scale()`, `py4stats.min_max()`" - ] - }, - { - "objectID": "man/scale_wmean.html#概要", - "href": "man/scale_wmean.html#概要", - "title": "18  数値変換・正規化ユーティリティ: py4stats.weighted_mean(), py4stats.scale(), py4stats.min_max()", - "section": "", - "text": "weighted_mean(\n x: IntoSeriesT, \n w: IntoSeriesT, \n dropna:bool = False\n ) -> float:\n\nscale(\n x: Union[IntoSeriesT, pd.DataFrame], \n ddof: int = 1, to_native: bool = True\n ) -> IntoSeriesT:\n\nmin_max(\n x: Union[IntoSeriesT, pd.DataFrame], \n to_native: bool = True\n ) -> IntoSeriesT:", - "crumbs": [ - "eda_tools", - "18  数値変換・正規化ユーティリティ: `py4stats.weighted_mean()`, `py4stats.scale()`, `py4stats.min_max()`" - ] - }, - { - "objectID": "man/scale_wmean.html#引数-argument", - "href": "man/scale_wmean.html#引数-argument", - "title": "18  数値変換・正規化ユーティリティ: py4stats.weighted_mean(), py4stats.scale(), py4stats.min_max()", - "section": "18.2 引数 Argument", - "text": "18.2 引数 Argument\n\nx:IntoSeriesT or pd.DataFrame(必須)\n\nnarwhals が受け入れ可能な Series 互換オブジェクト(例:pandas.Series、polars.Series)を指定できます。scale()関数と min_max()関数のみ pandas.DataFrame を指定することができ、この場合、各列ごとに変換が適用されます。\n\nw:IntoSeriesT(必須) x に対応する重みを表す数値系列。x と同じ長さである必要があります。narwhals が受け入れ可能な Series 互換オブジェクト(例:pandas.Series、polars.Series)を指定できます。\nddof(int, optional)scale(), min_max() のみ 標準偏差の計算に用いる自由度調整量(delta degrees of freedom)。デフォルトは 1 です。\ndropna(bool, optional)scale(), min_max() のみ True の場合、x または w のいずれかが欠損値(NaN)である観測を計算前に除外します。デフォルトは False です。\nto_native(bool, optional)scale(), min_max() のみ True の場合、入力と同じ型の Series(e.g. pandas / polars / pyarrow)を返します。 False の場合、Series を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", - "crumbs": [ - "eda_tools", - "18  数値変換・正規化ユーティリティ: `py4stats.weighted_mean()`, `py4stats.scale()`, `py4stats.min_max()`" - ] - }, - { - "objectID": "man/scale_wmean.html#返り値-value", - "href": "man/scale_wmean.html#返り値-value", - "title": "18  数値変換・正規化ユーティリティ: py4stats.weighted_mean(), py4stats.scale(), py4stats.min_max()", - "section": "18.3 返り値 Value", - "text": "18.3 返り値 Value\n\nweighted_mean\n\nfloat\n加重平均\n\nscale\n\nIntoSeriesT\n平均 0、標準偏差 1 に標準化された値を返します。\n\nmin_max\n\nIntoSeriesT\n最小値が 0、最大値が 1 となるよう正規化された値を返します。", - "crumbs": [ - "eda_tools", - "18  数値変換・正規化ユーティリティ: `py4stats.weighted_mean()`, `py4stats.scale()`, `py4stats.min_max()`" - ] - }, - { - "objectID": "man/scale_wmean.html#使用例-example", - "href": "man/scale_wmean.html#使用例-example", - "title": "18  数値変換・正規化ユーティリティ: py4stats.weighted_mean(), py4stats.scale(), py4stats.min_max()", - "section": "18.4 使用例 Example", - "text": "18.4 使用例 Example\nimport py4stats as py4st\nimport pandas as pd\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込\n\nx1 = penguins.groupby('species')['bill_length_mm'].mean()\nw = penguins.groupby('species')['bill_length_mm'].count()\n\nprint(\n f\"{py4st.weighted_mean(x1, w) :.2f}, \"\n f\"{penguins['bill_length_mm'].mean() :.2f}\"\n)\n#> 43.92, 43.92\n\nx2 = penguins['bill_length_mm']\nz1 = py4st.scale(x2)\nprint(f\"{z1.mean():.2f}, {z1.std():.2f}\")\n#> 0.00, 1.00\n\nz2 = py4st.min_max(x2)\nprint(f\"{z2.min():.2f}, {z2.max():.2f}\")\n#> 0.00, 1.00", - "crumbs": [ - "eda_tools", - "18  数値変換・正規化ユーティリティ: `py4stats.weighted_mean()`, `py4stats.scale()`, `py4stats.min_max()`" - ] - }, - { - "objectID": "man/predicate_str.html", - "href": "man/predicate_str.html", - "title": "19  文字列のフォーマットについての論理関数 py4stats.is_number(), py4stats.is_ymd(), py4stats.is_ymd_like()", - "section": "", - "text": "19.1 概要\nSeries の要素が、特定のフォーマットにそった文字列かどうかを判定する関数です。", - "crumbs": [ - "eda_tools", - "19  文字列のフォーマットについての論理関数
`py4stats.is_number()`, `py4stats.is_ymd()`, `py4stats.is_ymd_like()`
" - ] - }, - { - "objectID": "man/predicate_str.html#概要", - "href": "man/predicate_str.html#概要", - "title": "19  文字列のフォーマットについての論理関数 py4stats.is_number(), py4stats.is_ymd(), py4stats.is_ymd_like()", - "section": "", - "text": "is_number(\n data:IntoSeriesT, \n na_default:bool = True, \n to_native: bool = True\n )\n\nis_ymd(\n data:IntoSeriesT, \n na_default:bool = True, \n to_native: bool = True\n )\n\nis_ymd_like(\n data:IntoSeriesT, \n na_default:bool = True, \n to_native: bool = True\n )\n\npy4stats.is_number():与えられた文字列が数字かどうかを判定します。\npy4stats.is_ymd():与えられた文字列が yyyy-mm-dd フォーマットにそった値かどうかを判定します。\npy4stats.is_ymd_like():与えられた文字列が’2024年3月3日’ のような yyyy-mm-dd に近いフォーマットの値かどうかを判定します。", - "crumbs": [ - "eda_tools", - "19  文字列のフォーマットについての論理関数
`py4stats.is_number()`, `py4stats.is_ymd()`, `py4stats.is_ymd_like()`
" - ] - }, - { - "objectID": "man/predicate_str.html#引数-argument", - "href": "man/predicate_str.html#引数-argument", - "title": "19  文字列のフォーマットについての論理関数 py4stats.is_number(), py4stats.is_ymd(), py4stats.is_ymd_like()", - "section": "19.2 引数 Argument", - "text": "19.2 引数 Argument\n\ndata:IntoSeriesT(必須)\n入力データ。narwhals が受け入れ可能な Series 互換オブジェクト (例:pandas.Series、polars.DataFrame、pyarrow.Table)を指定できます。\nna_default:bool  NA値に対して関数が返す値。na_default = True (初期設定)であれば None や NaN には True を返し、na_default = False であれば False が返します。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", - "crumbs": [ - "eda_tools", - "19  文字列のフォーマットについての論理関数
`py4stats.is_number()`, `py4stats.is_ymd()`, `py4stats.is_ymd_like()`
" - ] - }, - { - "objectID": "man/predicate_str.html#使用例", - "href": "man/predicate_str.html#使用例", - "title": "19  文字列のフォーマットについての論理関数 py4stats.is_number(), py4stats.is_ymd(), py4stats.is_ymd_like()", - "section": "19.3 使用例", - "text": "19.3 使用例\nimport py4stats as py4st\nimport pandas as pd\nimport numpy as np\n\ns = pd.Series([\n '123', \"0.12\", \"1e+07\", '-31', '2個', '1A',\n \"2024-03-03\", \"2024年3月3日\", \"24年3月3日\", '令和6年3月3日',\n '0120-123-456', \"apple\", \"不明\", None, np.nan\n ])\n\nprint(s[py4st.is_number(s)])\n#> 0 123\n#> 1 0.12\n#> 2 1e+07\n#> 3 -31\n#> 13 None\n#> 14 NaN\n#> dtype: object\n\nprint(s[py4st.is_ymd(s)])\n#> 6 2024-03-03\n#> 13 None\n#> 14 NaN\n#> dtype: object\n\nprint(s[py4st.is_ymd_like(s)])\n#> 6 2024-03-03\n#> 7 2024年3月3日\n#> 8 24年3月3日\n#> 9 令和6年3月3日\n#> 13 None\n#> 14 NaN\n#> dtype: object\n 実践的な使用例として「厚生労働省 4.食中毒統計資料」のうち、2020年の食中毒事件一覧を考えます。東京都のデータを取り出て'摂食者数'の列を見ると、数字が並んでいるものの dtype は object となっており、数字ではない値が含まれていることが疑われます。\n# 厚生労働省:食中毒統計資料より\ndata = pd.read_excel('https://www.mhlw.go.jp/content/R2itiran.xlsx', header = 1)\\\n .query('都道府県名等.str.contains(\"東京\")')\n\nprint(data['摂食者数'])\n#> 280 41\n#> 281 86\n#> 282 3\n#> 283 10\n#> 284 3\n#> ..\n#> 381 2\n#> 382 2\n#> 383 4\n#> 384 6\n#> 385 4\n#> Name: 摂食者数, Length: 106, dtype: object\neda.is_number() を使うと数字以外にどのような値が含まれているかを確認できるため、これをもとに「不明」となっている部分は NaN に置き換えるなどの対処法が考えられます。\nprint(data.loc[~py4st.is_number(data['摂食者数']), '摂食者数'])\n#> 285 不明\n#> 315 不明\n#> 374 不明\n#> 375 不明\n#> 377 不明\n#> 378 不明\n#> 379 不明\n#> 380 不明\n#> Name: 摂食者数, dtype: object\n\nReturn to Function reference.", - "crumbs": [ - "eda_tools", - "19  文字列のフォーマットについての論理関数
`py4stats.is_number()`, `py4stats.is_ymd()`, `py4stats.is_ymd_like()`
" - ] - }, - { - "objectID": "man/is_dummy.html", - "href": "man/is_dummy.html", - "title": "20  ダミー変数の判定: py4stats.is_dummy()", - "section": "", - "text": "20.1 概要\nリストや Series の要素が、指定されたダミーコードのみで構成されたダミー変数かどうかを判定します。", - "crumbs": [ - "eda_tools", - "20  ダミー変数の判定: `py4stats.is_dummy()`" - ] - }, - { - "objectID": "man/is_dummy.html#概要", - "href": "man/is_dummy.html#概要", - "title": "20  ダミー変数の判定: py4stats.is_dummy()", - "section": "", - "text": "is_dummy(\n data: Union[IntoFrameT, IntoSeriesT],\n cording: Sequence[Any] = (0, 1),\n dropna: bool = True,\n to_pd_series: bool = False,\n **kwargs\n )", - "crumbs": [ - "eda_tools", - "20  ダミー変数の判定: `py4stats.is_dummy()`" - ] - }, - { - "objectID": "man/is_dummy.html#引数-argument", - "href": "man/is_dummy.html#引数-argument", - "title": "20  ダミー変数の判定: py4stats.is_dummy()", - "section": "20.2 引数 Argument", - "text": "20.2 引数 Argument\n\ndata: list, IntoFrameT or IntoSeriesT 入力データ。list あるいは、narwhals が受け入れ可能な DataFrame もしくは Series 互換オブジェクト\ncording: list ダミーコードとして許容される値の集合。入力データに含まれる値の集合が、この集合と完全に一致する場合にダミー変数であると判定されます。デフォルトは (0, 1) です。\ndropna:bool  欠測値(NaN)をコーディングの判定から除外するかどうかを表すブール値。初期設定は True です。\nto_pd_series: bool data が DataFrame 場合の戻り値の形式を制御します。\n\nTrue の場合:列名をインデックスにもつ pandas.Series を返します\nFalse の場合:各列の判定結果を要素とする list を返します\n\n**kwargs: 将来の拡張のために予約されたキーワード引数です。", - "crumbs": [ - "eda_tools", - "20  ダミー変数の判定: `py4stats.is_dummy()`" - ] - }, - { - "objectID": "man/is_dummy.html#返り値-value", - "href": "man/is_dummy.html#返り値-value", - "title": "20  ダミー変数の判定: py4stats.is_dummy()", - "section": "20.3 返り値 Value", - "text": "20.3 返り値 Value\n\ndata が Series-like の場合\n\n-指定されたダミーコードのみで構成されていれば True、それ以外の場合は False\n\ndata が DataFrame-like の場合 \n\nto_pd_Series = False のとき:各列ごとの判定結果を要素とする list[bool]\nto_pd_Series = True のとき:列名をインデックスにもつ pd.Series", - "crumbs": [ - "eda_tools", - "20  ダミー変数の判定: `py4stats.is_dummy()`" - ] - }, - { - "objectID": "man/is_dummy.html#使用例-examples", - "href": "man/is_dummy.html#使用例-examples", - "title": "20  ダミー変数の判定: py4stats.is_dummy()", - "section": "20.4 使用例 Examples", - "text": "20.4 使用例 Examples\nimport py4stats as py4st\nimport pandas as pd\nfrom palmerpenguins import load_penguins\n\npenguins = load_penguins() # サンプルデータの読み込み\n\n# ダミー変数の作成\npenguins2 = pd.get_dummies(\n penguins.loc[:, 'species':'bill_length_mm'], \n columns = ['species']\n )\npenguins2['Intercept'] = 1 # 定数列の作成\npenguins2['female'] = penguins['sex'] == 'female' # bool 型の変数を作成\n\nprint(py4st.is_dummy(penguins2['species_Adelie']))\n#> True\nなお、初期設定では bool 型の変数についても True が出力されます。\nprint(py4st.is_dummy(penguins2))\n#> island False\n#> bill_length_mm False\n#> species_Adelie True\n#> species_Chinstrap True\n#> species_Gentoo True\n#> Intercept False\n#> female True\n#> Name: 0, dtype: bool\n\nReturn to Function reference.", - "crumbs": [ - "eda_tools", - "20  ダミー変数の判定: `py4stats.is_dummy()`" - ] - }, - { - "objectID": "man/varidate.html", - "href": "man/varidate.html", - "title": "21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate()", - "section": "", - "text": "21.1 概要\nR言語の varidateパッケージの check_that() 関数などをオマージュした、ごく簡易なデータ検証関数です。", - "crumbs": [ - "eda_tools", - "21  簡易なルールベースのデータ検証ツール `py4stats.check_that()` `py4stats.check_viorate()`" - ] - }, - { - "objectID": "man/varidate.html#概要", - "href": "man/varidate.html#概要", - "title": "21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate()", - "section": "", - "text": "check_that(\n data: IntoFrameT,\n rule_dict: Union[Mapping[str, str], pd.Series],\n **kwargs: Any,\n)\n\ncheck_viorate(data, rule_dict, **kwargs)", - "crumbs": [ - "eda_tools", - "21  簡易なルールベースのデータ検証ツール `py4stats.check_that()` `py4stats.check_viorate()`" - ] - }, - { - "objectID": "man/varidate.html#引数-argument", - "href": "man/varidate.html#引数-argument", - "title": "21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate()", - "section": "21.2 引数 Argument", - "text": "21.2 引数 Argument\n\ndata:IntoFrameT(必須)  ルールに基づくデータ検証を行うデータセット。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\nrule_dictdict or pd.Series of str(必須)  pandas.eval() メソッドで実行した結果が論理値となるような expression の文字列を値とする辞書オブジェクト。詳細は使用例も参照してください。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。\n**kwargs  pandas.eval() に渡す追加の引数。", - "crumbs": [ - "eda_tools", - "21  簡易なルールベースのデータ検証ツール `py4stats.check_that()` `py4stats.check_viorate()`" - ] - }, - { - "objectID": "man/varidate.html#返り値-value", - "href": "man/varidate.html#返り値-value", - "title": "21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate()", - "section": "21.3 返り値 Value", - "text": "21.3 返り値 Value\n\n21.3.1 check_that(): データセット単位の検証結果の集計\n次の列を含む、引数 data に代入されたデータフレームと同じ型の DataFrame が出力されます。\n\nrule: 検証ルールの名前\nitem: ルールが検証対象とした項目の数。レコード(行)を検証単位とするルールの場合、item は data の行数(rows)になります。一方、データセット全体を検証単位とするルール(例:集計量に基づく条件)の場合、item は 1 になります。\npasses: 検証の結果、ルールを満たすと判定されたレコードの数。\nfails: 検証の結果、ルールを満たさないと判定されたレコードの数。\ncountna: 欠測値によって、ルールの検証が行えなかったレコードの数。行(レコード)を検証単位とするルールでは、ルールの評価に使用された変数のいずれかに欠測値が含まれる場合、そのレコードは検証不能として NA 扱いされます。countna は、このように検証を正しく実施できなかったレコードの件数を表します。\nexpression: 検証ルールを表す文字列(expression)。\n\n\n\n21.3.2 check_viorate(): レコード単位の検証結果\nルール名を列名として、レコード毎の違反を示す論理変数をもつ DataFrame が出力されます。\n各列の要素の True は検証のルールへの違反、もしくは欠測値によって評価に失敗したことを表します。rule_dict で設定された各ルールに対応する列の他に、次の列が追加で出力されます。\n\nany: 行内のいずれかのルールが違反または評価に失敗した場合に True となるブール値。\nall: 行内の全ルールが違反または評価に失敗した場合に True となるブール値。", - "crumbs": [ - "eda_tools", - "21  簡易なルールベースのデータ検証ツール `py4stats.check_that()` `py4stats.check_viorate()`" - ] - }, - { - "objectID": "man/varidate.html#使用例-examples", - "href": "man/varidate.html#使用例-examples", - "title": "21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate()", - "section": "21.4 使用例 Examples", - "text": "21.4 使用例 Examples\n ここでは py4st.check_that() 関数を使って Loo, Jonge(2022, p. 136)の結果を再現します。まずはR言語の validate パッケージに付属する retailers データを利用します。retailers は60件の小売業者の経営状況についてのデータで、従業員数、売上高とその他の収入、人件費、総費用、および利益がユーロ導入前の通貨単位である1000ギルダー単位で収録されています。\nimport py4stats as py4st\nimport pandas as pd\n\nURL = 'https://raw.githubusercontent.com/data-cleaning/validate/master/pkg/data/retailers.csv'\nretailers = pd.read_csv(URL, sep = ';')\nretailers.columns = retailers.columns.to_series().str.replace('.', '_', regex = False)\n py4st.check_that() 関数は、第1引数にデータセットを、第2引数に検証ルールの辞書オブジェクトを代入して使用します。\n まずは、検証ルールの辞書オブジェクトを定義します。辞書オブジェクトの値には pandas.eval() メソッドで実行可能な expression の文字列を指定し、key に検証ルールの名前を指定します。検証ルールの名前は任意の値で構いませんが、 expression は結果が論理値となるものでなければなりません。\nrule_dict = {\n 'to':'turnover > 0', # 売上高は厳密に正である\n 'sc':'staff_costs / staff < 50', # 従業員1人当たりの人件費は50,000ギルダー未満である\n 'cd1':'staff_costs > 0 | ~(staff > 0)', # 従業員がいる場合、人件費は厳密に正である\n 'cd2':py4st.implies_exper('staff > 0', 'staff_costs > 0'), # cd1 の別表現\n 'bs':'turnover + other_rev == total_rev', # 売上高とその他の収入の合計は総収入に等しい\n 'mn':'profit.mean() > 0' # セクター全体の平均的な利益はゼロよりも大きい\n }\npd.Series(rule_dict)\n#> to turnover > 0\n#> sc staff_costs / staff < 50\n#> cd1 staff_costs > 0 | ~(staff > 0)\n#> cd2 staff_costs > 0 | ~(staff > 0)\n#> bs turnover + other_rev == total_rev\n#> mn profit.mean() > 0\n#> dtype: object\nretailers と rule_dict を py4st.check_that() に代入すると、rule_dict に指定したルールに基づいた検証が実行されます。item 列はその検証ルールで生成された論理値の個数(通常はデータセットの列数と一致します)を表し、passes 列は検証結果が True となったレコードの数を、fails は False となったレコードの数を表します。また、coutna はルールの検証に使用した変数(データセットの列)のいずれかが欠測値であったレコードの数です。\nprint(py4st.check_that(retailers, rule_dict))\n#> rule item passes fails coutna expression\n#> 0 to 60 56 0 4 turnover > 0\n#> 1 sc 60 39 5 16 staff_costs / staff < 50\n#> 2 cd1 60 44 0 16 staff_costs > 0 | ~(staff > 0)\n#> 3 cd2 60 44 0 16 staff_costs > 0 | ~(staff > 0)\n#> 4 bs 60 19 4 37 turnover + other_rev == total_rev\n#> 5 mn 1 1 0 0 profit.mean() > 0\n前述の通り、py4st.check_that() 関数ではルール検証を pandas.eval() メソッドで実行しているため、検証ルールに自作関数や外部のモジュールからインポート関数を使うには、関数名の前に @ をつけて @func(…) と記述し、また **kwargs 引数に local_dict = locals() と指定してください。\n 次のコードで定義している is_complete() 関数は、代入された pd.Series が全て欠測値ではなく、指定された変数に関して完全ケースであることを判定する関数です。turnover.notna() & total_rev.notna() & other_rev.notna() と記述しても同じ結果が得られますが、自作関数を使うことで若干簡潔に記述できます。\nfrom pandas.api.types import is_numeric_dtype\ndef is_complete(*arg): return pd.concat(arg, axis = 'columns').notna().all(axis = 'columns')\n\npd.set_option('display.expand_frame_repr', False)\n\nrule_dict2 = {\n 'to_num':'@is_numeric_dtype(turnover)', # 売上高は数値変数である\n 'rev_complete':'@is_complete(turnover, total_rev, other_rev)', # 売上高と収入が全て観測されている\n }\n\nprint(py4st.check_that(\n retailers, rule_dict2, local_dict = locals()\n ))\n#> rule item passes fails coutna expression\n#> 0 to_num 1 1 0 0 @is_numeric_dtype(turnover)\n#> 1 rev_complete 60 23 0 37 @is_complete(turnover, total_rev, other_rev)\npy4st.check_viorate() の使い方も py4st.check_that() と同様ですが、py4st.check_that() がデータセット全体での検証結果を出力するのに対し、py4st.check_viorate() ではレコード別の検証結果を表示します。py4st.check_viorate() から出力されるデータフレームでは、各列が検証ルールに、各行が元データの観測値に対応し、当該ルールが満たされていない場合、True と表示されます。また、any 列は複数あるルールのいずれか1つでも満たされていないことを、all 列は全てのルールが満たされていないことを示します。\nrule_dict3 = {\n 'to':'turnover > 0', # 売上高は厳密に正である\n 'sc':'staff_costs / staff < 50', # 従業員1人当たりの人件費は50,000ギルダー未満である\n 'rev_complete':'@is_complete(turnover, total_rev, other_rev)',# 売上高と収入が全て観測されている\n }\n \ndf_viorate = py4st.check_viorate(retailers, rule_dict3)\nprint(df_viorate.head())\n#> to sc rev_complete any all\n#> 0 True True True True True\n#> 1 False False True True False\n#> 2 False True False True False\n#> 3 False True False True False\n#> 4 True True True True True\ndf_viorate データフレームの各列は論理値であるため、次のように検証ルールを満たさない観測値を抽出することができます。\nprint(retailers.loc[df_viorate['to'], 'size':'turnover'])\n#> size incl_prob staff turnover\n#> 0 sc0 0.02 75.0 NaN\n#> 4 sc3 0.14 NaN NaN\n#> 6 sc3 0.14 5.0 NaN", - "crumbs": [ - "eda_tools", - "21  簡易なルールベースのデータ検証ツール `py4stats.check_that()` `py4stats.check_viorate()`" - ] - }, - { - "objectID": "man/varidate.html#notes", - "href": "man/varidate.html#notes", - "title": "21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate()", - "section": "21.5 Notes", - "text": "21.5 Notes\n本関数の内部実装は、 pd.DataFrame.eval() メソッドに依存しているため、実行時間の面で必ずしも最適化されていません。", - "crumbs": [ - "eda_tools", - "21  簡易なルールベースのデータ検証ツール `py4stats.check_that()` `py4stats.check_viorate()`" - ] - }, - { - "objectID": "man/varidate.html#参考文献", - "href": "man/varidate.html#参考文献", - "title": "21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate()", - "section": "21.6 参考文献", - "text": "21.6 参考文献\n\nLoo, Mark van der, and Edwin de Jonge. (2022). 『統計的データクリーニングの理論と実践: Rによるデータ編集/欠測補完システム』. 共立出版. 地道 正行, 髙橋 雅夫, 藤野 友和, 安川 武彦〔訳〕\n\n\nReturn to Function reference.", - "crumbs": [ - "eda_tools", - "21  簡易なルールベースのデータ検証ツール `py4stats.check_that()` `py4stats.check_viorate()`" - ] - }, - { - "objectID": "man/compare_ols.html", - "href": "man/compare_ols.html", - "title": "22  回帰分析の比較:py4stats.compare_ols()", - "section": "", - "text": "22.1 概要\nsm.ols() や smf.glm() で作成された回帰分析の結果から、推定結果を縦方向に並べて比較する表を作成します。表のフォーマットについてはR言語の texreg::screenreg()やmodelsummary::modelsummary()を参考にしています。", - "crumbs": [ - "regression_tools", - "22  回帰分析の比較:`py4stats.compare_ols()`" - ] - }, - { - "objectID": "man/compare_ols.html#概要", - "href": "man/compare_ols.html#概要", - "title": "22  回帰分析の比較:py4stats.compare_ols()", - "section": "", - "text": "compare_ols(\n list_models: Sequence[RegressionResultsWrapper],\n model_name: Optional[Sequence[str]] = None,\n subset: Optional[Sequence[str]] = None,\n stats: Literal[\"std_err\", \"statistics\", \"p_value\", \"conf_int\"] = \"std_err\",\n add_stars: bool = True,\n stars: Optional[Mapping[str, float]] = None,\n stats_glance: Optional[Sequence[str]] = (\"rsquared_adj\", \"nobs\", \"df\"),\n digits: int = 4,\n table_style: Literal[\"two_line\", \"one_line\"] = \"two_line\",\n line_break: str = \"\\n\",\n **kwargs: Any\n)", - "crumbs": [ - "regression_tools", - "22  回帰分析の比較:`py4stats.compare_ols()`" - ] - }, - { - "objectID": "man/compare_ols.html#引数-argument", - "href": "man/compare_ols.html#引数-argument", - "title": "22  回帰分析の比較:py4stats.compare_ols()", - "section": "22.2 引数 Argument", - "text": "22.2 引数 Argument\n\nlist_models:Sequence[RegressionResultsWrapper] 推定結果を表示する分析結果のリスト(必須)。sm.ols() や smf.ols() で作成された回帰分析の結果を list_models = [fit1, fit2] のようにリストとして指定してください。\nmodel_name:list of str 表頭に表示するモデルの名前。['モデル1', 'モデル2'] のように文字列のリストを指定してください。初期設定では、自動的に model 1, model 2, model 3 … と連番が割り当てられます。\nsubset:list of str 表示する回帰係数のリスト。指定しない場合(初期設定)、モデルに含まれる全ての回帰係数が表示されます。内部ではpandas.DataFrame.locメソッドを用いて処理を行っているため、['変数1', '変数2', ...] のような文字列のリスト、[True, False, True, ...] のようなブール値のリストに対応しています。文字列のリストが指定された場合、リストの並び順に合わせて回帰係数が表示されます。\nstats:str 表中の丸括弧 ( ) 内に表示する統計値の設定。次の値が指定できます。\n\n'std_err' 標準誤差(初期設定)\n'p_value' p-値\n'statistics' t統計量\n\nadd_stars:bool 回帰係数の統計的有意性を表すアスタリスク * を表示するかどうかを表すブール値。add_stars = True(初期-設定)なら表示、add_stars = Falseなら非表示となります。table_style に 'two_line' を指定した場合はアスタリスクは回帰係数の直後に表示され、'one_line' を指定した場合は stats で指定した統計値の後に表示されます。アスタリスクはp-値の値に応じて次のように表示されます。\nstars:dict(p_stars() のみ)  有意性を示す記号を key に、表示を切り替える閾値を値(value)にもつ辞書オブジェクト。初期設定の stars = None の場合、下記の方式で表示されます。\n\np ≤ 0.1 *\np ≤ 0.05 **\np ≤ 0.01 ***\np > 0.1 表示なし 詳細はbuilding_block.style_pvalue() を参照してください。\n\nstats_glance:list of str\n表の下部に追加する当てはまりの尺度の種類を表す文字列のリスト。リストの値には次の値を指定できます。なお、None もしくは空のリスト [ ] が指定された場合には非表示となります。\n\n'rsquared':決定係数\n'rsquared_adj':自由度調整済み決定係数\n'nobs':サインプルサイズ\n'df':モデルの自由度(説明変数の数)\n'sigma':回帰式の標準誤差\n'F_values':全ての回帰係数がゼロであることを帰無仮説とするF検定の統計量\n'p_values':F検定のP-値\n'AIC':赤池情報量基準\n'BIC':ベイズ情報量基準\n\ndigits: int 回帰係数と統計値について表示する小数点以下の桁数。初期設定は4です。\ntable_style: str 表の書式を表す文字列。次の値から選択できます(部分一致可)。\n\n'two_line'回帰係数と統計値を2行に分ける(初期設定)\n'one_line'回帰係数と統計値を1行で表示する\n\nline_break: str table_style = 'two_line' とした場合に使用される改行記号。table_style = 'one_line' とした場合、この引数は無視されます。", - "crumbs": [ - "regression_tools", - "22  回帰分析の比較:`py4stats.compare_ols()`" - ] - }, - { - "objectID": "man/compare_ols.html#使用例-examples", - "href": "man/compare_ols.html#使用例-examples", - "title": "22  回帰分析の比較:py4stats.compare_ols()", - "section": "22.3 使用例 Examples", - "text": "22.3 使用例 Examples\nimport py4stats as py4st\nimport statsmodels.formula.api as smf\n\nimport pandas as pd\nimport numpy as np\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込み\n\n# 回帰分析の実行\nfit1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()\nfit2 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species', data = penguins).fit()\nfit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()\n\ncompare_tab1 = py4st.compare_ols(list_models = [fit1, fit2, fit3]) # 表の作成\ncompare_tab1\n\n\n\n\n\n\n\n\n\nterm\nmodel 1\nmodel 2\nmodel 3\n\n\n\n\nIntercept\n153.7397\n-1,742.7202 ***\n843.9812 **\n\n\n\n(268.9012)\n(313.7697)\n(403.5956)\n\n\nspecies[T.Chinstrap]\n-885.8121 ***\n-539.6864 ***\n-245.1516 ***\n\n\n\n(88.2502)\n(86.9425)\n(84.5952)\n\n\nspecies[T.Gentoo]\n578.6292 ***\n1,492.8283 ***\n1,443.3525 ***\n\n\n\n(75.3623)\n(118.4442)\n(107.7844)\n\n\nbill_length_mm\n91.4358 ***\n55.6461 ***\n26.5366 ***\n\n\n\n(6.8871)\n(7.2326)\n(7.2436)\n\n\nbill_depth_mm\n\n179.0434 ***\n87.9328 ***\n\n\n\n\n(19.0997)\n(20.2192)\n\n\nsex[T.male]\n\n\n437.2007 ***\n\n\n\n\n\n(49.1098)\n\n\nrsquared_adj\n0.7810\n0.8258\n0.8613\n\n\nnobs\n342\n342\n333\n\n\ndf\n3\n4\n5\n\n\n\npy4st.compare_ols() の実行結果は Pandas の DataFrame として出力されるため、.xlsx. ファイルなどに変換することができます。また、用途に応じて表の体裁を調整できるようにしています。\ncompare_tab2 = py4st.compare_ols(\n list_models = [fit1, fit2, fit3],\n model_name = ['基本モデル', '嘴の高さ追加', '性別追加'], # モデル名を変更\n stats = 'p_value', # () 内の値をP-値に変更する\n add_stars = False, # 有意性のアスタリスクなし\n table_style = 'one_line', # 表スタイルを1行表示に設定 'one' でも可能\n digits = 3 # 小数点以下の桁数を3に設定\n )\ncompare_tab2\n\n\n\n\n\n\n\n\n\nterm\n基本モデル\n嘴の高さ追加\n性別追加\n\n\n\n\nIntercept\n153.740(0.568)\n-1,742.720(0.000)\n843.981(0.037)\n\n\nspecies[T.Chinstrap]\n-885.812(0.000)\n-539.686(0.000)\n-245.152(0.004)\n\n\nspecies[T.Gentoo]\n578.629(0.000)\n1,492.828(0.000)\n1,443.353(0.000)\n\n\nbill_length_mm\n91.436(0.000)\n55.646(0.000)\n26.537(0.000)\n\n\nbill_depth_mm\n\n179.043(0.000)\n87.933(0.000)\n\n\nsex[T.male]\n\n\n437.201(0.000)\n\n\nrsquared_adj\n0.781\n0.826\n0.861\n\n\nnobs\n342\n342\n333\n\n\ndf\n3\n4\n5\n\n\n\ntable_style = 'two_line' のときに使用される改行記号は line_break で指定できます。great_tables モジュールの GT() 関数と併用する場合など、html 形式で出力する場合には line_break = '<br>' を指定します。\nfrom great_tables import GT, md, html\n\ncompare_tab3 = py4st.compare_ols(\n list_models = [fit1, fit2, fit3],\n model_name = ['基本モデル', '嘴の高さ追加', '性別追加'], # モデル名を変更\n line_break = '<br>' # 改行文字の変更\n )\n\nGT(compare_tab3.reset_index())\\\n .tab_header(title = 'Palmer penguin データを使った回帰分析の結果')\\\n .tab_source_note(\n source_note= \"Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’\"\n )\\\n .tab_source_note(source_note = '( ) の値は標準誤差')\n\n\n22.3.0.1 有意性の表示規則の変更\npy4stats の v0.2.0 以降は、stars 引数で有意性の表示規則を変更できるようになりました。\nstars_dict = {'★★★':0.001, '★★':0.01, '★': 0.05, '.':0.1}\n\nreg.compare_ols(\n list_models = [fit3],\n model_name = ['model 3'],\n stars = stars_dict\n )\n\n\n\nterm\nmodel 3\n\n\n\n\nIntercept\n843.9812 ★\n\n\n\n(403.5956)\n\n\nspecies[T.Chinstrap]\n-245.1516 ★★\n\n\n\n(84.5952)\n\n\nspecies[T.Gentoo]\n1,443.3525 ★★★\n\n\n\n(107.7844)\n\n\nsex[T.male]\n437.2007 ★★★\n\n\n\n(49.1098)\n\n\nbill_length_mm\n26.5366 ★★★\n\n\n\n(7.2436)\n\n\nbill_depth_mm\n87.9328 ★★★\n\n\n\n(20.2192)\n\n\nrsquared_adj\n0.8613\n\n\nnobs\n333\n\n\ndf\n5\n\n\n\n\n\n22.3.0.2 回帰係数の sbusetting\n引数 subset を使って表示したい回帰係数を指定することで、一部の回帰係数を省略して表記することもできます。\n# 説明変数に island を追加したモデルを推定\nfit4 = smf.ols(\n 'body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex + island',\n data = penguins).fit()\n\nvar_list = [\n 'species[T.Chinstrap]', 'species[T.Gentoo]',\n 'bill_length_mm', 'bill_depth_mm', 'sex[T.male]'\n ]\n\n# 全ての回帰係数を表示すると表が長すぎるので、一部を省略します\ncompare_tab4 = py4st.compare_ols(\n list_models = [fit2, fit3, fit4],\n subset = var_list\n )\n\ncompare_tab4.loc['島ダミー', :] = ['No', 'No', 'Yes']\n\ncompare_tab4\n\n\n\n\n\n\n\n\n\nterm\nmodel 1\nmodel 2\nmodel 3\n\n\n\n\nspecies[T.Chinstrap]\n-539.6864 ***\n-245.1516 ***\n-255.2732 ***\n\n\n\n(86.9425)\n(84.5952)\n(92.4796)\n\n\nspecies[T.Gentoo]\n1,492.8283 ***\n1,443.3525 ***\n1,446.1574 ***\n\n\n\n(118.4442)\n(107.7844)\n(114.1676)\n\n\nbill_length_mm\n55.6461 ***\n26.5366 ***\n26.6643 ***\n\n\n\n(7.2326)\n(7.2436)\n(7.2792)\n\n\nbill_depth_mm\n179.0434 ***\n87.9328 ***\n88.3284 ***\n\n\n\n(19.0997)\n(20.2192)\n(20.3267)\n\n\nsex[T.male]\n\n437.2007 ***\n436.0334 ***\n\n\n\n\n(49.1098)\n(49.4227)\n\n\nrsquared_adj\n0.8258\n0.8613\n0.8605\n\n\nnobs\n342\n333\n333\n\n\ndf\n4\n5\n7\n\n\n島ダミー\nNo\nNo\nYes\n\n\n\npandas の pandas.DataFrame.query メソッドを使って、次のように説明変数を除外することもできます。\ncompare_tab4 = py4st.compare_ols(\n list_models = [fit2, fit3, fit4]\n )\n\ncompare_tab4 = compare_tab4\\\n .query('~term.str.contains(\"Intercept|island\")').copy()\n\ncompare_tab4.loc['島ダミー', :] = ['No', 'No', 'Yes']\n\ncompare_tab4 # 上記のコードと同じ結果", - "crumbs": [ - "regression_tools", - "22  回帰分析の比較:`py4stats.compare_ols()`" - ] - }, - { - "objectID": "man/compare_ols.html#補足", - "href": "man/compare_ols.html#補足", - "title": "22  回帰分析の比較:py4stats.compare_ols()", - "section": "22.4 補足", - "text": "22.4 補足\n  table_style = 'two_line' としたとき、初期設定ではの回帰係数とp-値の間に改行記号 '\\n'が挿入されます。そのため、print() 関数や display() 関数を使った出力では、改行記号 '\\n' がそのまま表示されます。この場合でも、pd.DataFrame.to_excel() や pd.DataFrame.to_markdown() を使って Excel ファイルや markdown の表に変換していただくと、改行として反映されます。", - "crumbs": [ - "regression_tools", - "22  回帰分析の比較:`py4stats.compare_ols()`" - ] - }, - { - "objectID": "man/compare_ols.html#参照-see-also", - "href": "man/compare_ols.html#参照-see-also", - "title": "22  回帰分析の比較:py4stats.compare_ols()", - "section": "22.5 参照 see also", - "text": "22.5 参照 see also\n 一般化線形モデルの限界効果を比較する場合は py4stats.compare_mfx()をご利用ください。\n\nReturn to Function reference.", - "crumbs": [ - "regression_tools", - "22  回帰分析の比較:`py4stats.compare_ols()`" - ] - }, - { - "objectID": "man/compare_mfx.html", - "href": "man/compare_mfx.html", - "title": "23  限界効果の比較:py4stats.compare_mfx()", - "section": "", - "text": "23.1 概要\nsm.glm()の推定結果を計量経済学の実証論文でよく用いられる、回帰分析の結果を縦方向に並べて比較する表を作成します。表のフォーマットについてはR言語の texreg::screenreg()やmodelsummary::modelsummary()を参考にしています。", - "crumbs": [ - "regression_tools", - "23  限界効果の比較:`py4stats.compare_mfx()`" - ] - }, - { - "objectID": "man/compare_mfx.html#概要", - "href": "man/compare_mfx.html#概要", - "title": "23  限界効果の比較:py4stats.compare_mfx()", - "section": "", - "text": "compare_mfx(\n list_models, \n model_name = None,\n subset = None,\n stats = 'std_err',\n add_stars = True,\n stats_glance = ['prsquared', 'nobs', 'df'],\n at = 'overall',\n method = 'dydx',\n dummy = False,\n digits = 4, \n table_style = 'two_line',\n line_break = '\\n',\n **kwargs\n)", - "crumbs": [ - "regression_tools", - "23  限界効果の比較:`py4stats.compare_mfx()`" - ] - }, - { - "objectID": "man/compare_mfx.html#引数-argument", - "href": "man/compare_mfx.html#引数-argument", - "title": "23  限界効果の比較:py4stats.compare_mfx()", - "section": "23.2 引数 Argument", - "text": "23.2 引数 Argument\n\nlist_models: 推定結果を表示する分析結果のリスト(必須)。sm.glm()で作成された一般化線形モデルの結果を list_models = [fit1, fit2] のようにリストとして指定してください。\nmodel_name:list of str 表頭に表示するモデルの名前。['モデル1', 'モデル2'] のように文字列のリストを指定してください。初期設定では、自動的に model 1, model 2, model 3 … と連番が割り当てられます。\nsubset:list of str 表示する回帰係数のリスト。指定しない場合(初期設定)、モデルに含まれる全ての回帰係数が表示されます。内部ではpandas.DataFrame.locメソッドを用いて処理を行っているため、['変数1', '変数2', ...] のような文字列のリスト、[True, False, True, ...] のようなブール値のリストに対応しています。文字列のリストが指定された場合、リストの並び順に合わせて回帰係数が表示されます。\nstats:str 表中の丸括弧 ( ) 内に表示する統計値の設定。次の値が指定できます。\n\n'std_err' 標準誤差(初期設定)\n'p_value' p-値\n'statistics' t統計量\n\nadd_stars:bool 回帰係数の統計的有意性を表すアスタリスク * を表示するかどうかを表すブール値。add_stars = True(初期-設定)なら表示、add_stars = Falseなら非表示となります。table_style に 'two_line' を指定した場合はアスタリスクは回帰係数の直後に表示され、'one_line' を指定した場合は stats で指定した統計値の後に表示されます。アスタリスクはp-値の値に応じて次のように表示されます。\nstars:dict(p_stars() のみ)  有意性を示す記号を key に、表示を切り替える閾値を値(value)にもつ辞書オブジェクト。初期設定の stars = None の場合、下記の方式で表示されます。\n\np ≤ 0.1 *\np ≤ 0.05 **\np ≤ 0.01 ***\np > 0.1 表示なし 詳細はbuilding_block.style_pvalue() を参照してください。\n\nstats_glance:list of str\n表の下部に追加する当てはまりの尺度の種類を表す文字列のリスト。リストの値には次の値を指定できます。なお、None もしくは空のリスト [ ] が指定された場合には非表示となります。\n\n'rsquared':決定係数\n'rsquared_adj':自由度調整済み決定係数\n'nobs':サインプルサイズ\n'df':モデルの自由度(説明変数の数)\n'sigma':回帰式の標準誤差\n'F_values':全ての回帰係数がゼロであることを帰無仮説とするF検定の統計量\n'p_values':F検定のP-値\n'AIC':赤池情報量基準\n'BIC':ベイズ情報量基準\n\ndigits: int 回帰係数と統計値について表示する小数点以下の桁数。初期設定は4です。\ntable_style: str 表の書式を表す文字列。次の値から選択できます(部分一致可)。\n\n'two_line'回帰係数と統計値を2行に分ける(初期設定)\n'one_line'回帰係数と統計値を1行で表示する\n\nline_break: str table_style = 'two_line' とした場合に使用される改行記号。table_style = 'one_line' とした場合、この引数は無視されます。\nat: str 限界効果の集計方法。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 at として渡されます。method = 'coef' を指定した場合、この引数は無視されます。\n\n'overall':各観測値の限界効果の平均値を表示(初期設定)\n'mean':各説明変数の平均値における限界効果を表示\n'median':各説明変数の中央値における限界効果を表示\n'zero':各説明変数の値がゼロであるときの限界効果を表示\n\nmethod: str 推定する限界効果の種類。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 method として渡されます。ただし、method = 'coef' を指定した場合には限界効果を推定せずに回帰係数をそのまま表示します。\n\n'coef':回帰係数の推定値を表示\n'dydx':限界効果の値を変換なしでそのまま表。(初期設定)\n'eyex':弾力性 d(lny)/d(lnx) の推定値を表示\n'dyex':準弾力性 dy /d(lnx) の推定値を表示\n'eydx':準弾力性 d(lny)/dx の推定値を表示\n\ndummy: bool ダミー変数の限界効果の推定方法を制御するブール値。もし False (初期設定)であれば、ダミー変数を連続な数値変数として扱います。もし、True であればダミー変数が0から1へと変化したときの予測値の変化を推定します。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 dummy として渡されます。", - "crumbs": [ - "regression_tools", - "23  限界効果の比較:`py4stats.compare_mfx()`" - ] - }, - { - "objectID": "man/compare_mfx.html#使用例", - "href": "man/compare_mfx.html#使用例", - "title": "23  限界効果の比較:py4stats.compare_mfx()", - "section": "23.3 使用例", - "text": "23.3 使用例\nimport py4stats as py4st\nimport statsmodels.formula.api as smf\n\nimport pandas as pd\nimport numpy as np\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込み\n py4st.compare_mfx() は py4st.compare_ols() の一般化線型モデルバージョンで、初期設定では statsmodels ライブラリの.get_margeff() メソッドから得られた限界効果の推定値を表示します。\npenguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)\n\n# ロジスティック回帰の実行\nfit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()\nfit_logit2 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm + species', data = penguins).fit()\n\npy4st.compare_mfx([fit_logit1, fit_logit2])\n\n\n\nterm\nmodel 1\nmodel 2\n\n\n\n\nbody_mass_g\n-0.0004 ***\n-0.0003 ***\n\n\n\n(0.0000)\n(0.0000)\n\n\nbill_length_mm\n-0.0053\n-0.0357 ***\n\n\n\n(0.0036)\n(0.0070)\n\n\nbill_depth_mm\n-0.1490 ***\n-0.1098 ***\n\n\n\n(0.0051)\n(0.0175)\n\n\nspecies[T.Chinstrap]\n\n0.4172 ***\n\n\n\n\n(0.0848)\n\n\nspecies[T.Gentoo]\n\n0.3527 ***\n\n\n\n\n(0.1308)\n\n\nprsquared\n0.5647\n0.6187\n\n\nnobs\n342\n342\n\n\ndf\n3\n5\n\n\n\nfrom great_tables import GT, md, html\ncompare_tab = py4st.compare_mfx(\n [fit_logit1, fit_logit2],\n model_name = ['ベースモデル', 'species 追加'], # モデル名を変更\n line_break = '<br>' # 改行文字の変更\n)\n\nGT(compare_tab.reset_index())\\\n .tab_header(title = 'ロジットモデルの限界効果')\\\n .tab_source_note(\n source_note= \"Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’\"\n )\\\n .tab_source_note(source_note = '丸括弧 ( ) の値は標準誤差')", - "crumbs": [ - "regression_tools", - "23  限界効果の比較:`py4stats.compare_mfx()`" - ] - }, - { - "objectID": "man/compare_mfx.html#補足", - "href": "man/compare_mfx.html#補足", - "title": "23  限界効果の比較:py4stats.compare_mfx()", - "section": "23.4 補足", - "text": "23.4 補足\n  table_style = 'two_line' としたとき、初期設定ではの回帰係数とp-値の間に改行記号 '\\n'が挿入されます。そのため、print() 関数や display() 関数を使った出力では、改行記号 '\\n' がそのまま表示されます。この場合でも、pd.DataFrame.to_excel() や pd.DataFrame.to_markdown() を使って Excel ファイルや markdown の表に変換していただくと、改行として反映されます。\n\nReturn to Function reference.", - "crumbs": [ - "regression_tools", - "23  限界効果の比較:`py4stats.compare_mfx()`" - ] - }, - { - "objectID": "man/coefplot.html", - "href": "man/coefplot.html", - "title": "24  回帰分析による推定値の視覚化:py4stats.coefplot(), py4stats.mfxplot()", - "section": "", - "text": "24.1 概要\nグラフ上の縦軸が説明変数、横軸回帰係数の値です。点が回帰係数の推定値を、エラーバー(横棒)が信頼区間を表します。", - "crumbs": [ - "regression_tools", - "24  回帰分析による推定値の視覚化:`py4stats.coefplot()`, `py4stats.mfxplot()`" - ] - }, - { - "objectID": "man/coefplot.html#概要", - "href": "man/coefplot.html#概要", - "title": "24  回帰分析による推定値の視覚化:py4stats.coefplot(), py4stats.mfxplot()", - "section": "", - "text": "coefplot(\n mod, \n subset = None, \n conf_level = [0.95, 0.99], \n palette = ['#1b69af', '#629CE7'], \n show_Intercept = False,\n show_vline = True,\n ax = None,\n **kwargs\n)\n\nmfxplot(\n mod, \n subset = None, \n conf_level = [0.95, 0.99], \n at = 'overall',\n method = 'dydx',\n dummy = False,\n palette = ['#1b69af', '#629CE7'], \n show_Intercept = False,\n show_vline = True,\n ax = None,\n **kwargs\n)", - "crumbs": [ - "regression_tools", - "24  回帰分析による推定値の視覚化:`py4stats.coefplot()`, `py4stats.mfxplot()`" - ] - }, - { - "objectID": "man/coefplot.html#引数-argument", - "href": "man/coefplot.html#引数-argument", - "title": "24  回帰分析による推定値の視覚化:py4stats.coefplot(), py4stats.mfxplot()", - "section": "24.2 引数 Argument", - "text": "24.2 引数 Argument\n\nmod:statsmodels で作成した回帰分析の結果(必須)。\nsubset:グラフに回帰係数を表示する説明変数のリスト。指定しなければモデルに含まれる全ての説明変数を使用します。また subset に指定された順番に合わせてグラフ内での回帰係数の並び順が変更されます。\nconf.level:信頼区間の計算に用いる信頼係数。1つ目の要素が太い方のエラーバーの幅に、2つ目の要素が細い方のエラーバーの幅に対応します。初期設定は [0.95, 0.99] です。\npalette:グラフの描画に使用する色コード。1つ目の要素が太い方のエラーバーの色に、2つ目の要素が細い方のエラーバーの色に対応します。\nshow_Intercept:切片の係数を表示するかどうか。True だと切片の係数を表示し、False(初期設定)だと表示しません。\nshow_vline:回帰係数 = 0 の垂直線を表示するかどうか。True (初期設定)を指定すると垂直線を表示し、False を指定すると表示されません。\nax:matplotlib の ax オブジェクト。複数のグラフを並べる場合などに使用します。\nat:限界効果の集計方法(mfxplot() のみ)。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 at として渡されます。method = 'coef' を指定した場合、この引数は無視されます。\n\n'overall':各観測値の限界効果の平均値を表示(初期設定)\n'mean':各説明変数の平均値における限界効果を表示\n'median':各説明変数の中央値における限界効果を表示\n'zero':各説明変数の値がゼロであるときの限界効果を表示\n\nmethod:推定する限界効果の種類(mfxplot() のみ)。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 method として渡されます。ただし、method = 'coef' を指定した場合には限界効果を推定せずに回帰係数をそのまま表示します。\n\n'coef':回帰係数の推定値を表示\n'dydx':限界効果の値を変換なしでそのまま表。(初期設定)\n'eyex':弾力性 d(lny)/d(lnx) の推定値を表示\n'dyex':準弾力性 dy /d(lnx) の推定値を表示\n'eydx':準弾力性 d(lny)/dx の推定値を表示\n\ndummy:ダミー変数の限界効果の推定方法(mfxplot() のみ)。もし False (初期設定)であれば、ダミー変数を連続な数値変数として扱います。もし、True であればダミー変数が0から1へと変化したときの予測値の変化を推定します。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 dummy として渡されます。", - "crumbs": [ - "regression_tools", - "24  回帰分析による推定値の視覚化:`py4stats.coefplot()`, `py4stats.mfxplot()`" - ] - }, - { - "objectID": "man/coefplot.html#使用例", - "href": "man/coefplot.html#使用例", - "title": "24  回帰分析による推定値の視覚化:py4stats.coefplot(), py4stats.mfxplot()", - "section": "24.3 使用例", - "text": "24.3 使用例\nimport py4stats as py4st\nimport statsmodels.formula.api as smf\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\n\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込み\n\n\n# 回帰分析の実行\nfit2 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species', data = penguins).fit()\nfit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()\n\npy4st.coefplot(fit3)\n\n\n\ncoefplot1\n\n\nplt.rcParams[\"figure.autolayout\"] = True\n\nfig, ax = plt.subplots(1, 2, figsize = (2.2 * 5, 5), dpi = 100)\n\npy4st.coefplot(fit2, ax = ax[0])\nax[0].set_xlim(-900, 1800)\n\npy4st.coefplot(fit3, ax = ax[1], palette = ['#FF6F91', '#F2E5EB'])\nax[1].set_xlim(-900, 1800);\n\n\n\ncoefplot2\n\n\npenguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)\n\n# ロジスティック回帰の実行\nfit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()\nfit_logit2 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm + species', data = penguins).fit()\nplt.rcParams[\"figure.autolayout\"] = True\n\nfig, ax = plt.subplots(1, 2, figsize = (2.2 * 5, 5), dpi = 100)\n\npy4st.mfxplot(fit_logit1, ax = ax[0])\nax[0].set_xlim(-0.2, 0.85)\n\npy4st.mfxplot(fit_logit2, ax = ax[1], palette = ['#FF6F91', '#F2E5EB'])\nax[1].set_xlim(-0.2, 0.85);\n *** Return to Function reference.", - "crumbs": [ - "regression_tools", - "24  回帰分析による推定値の視覚化:`py4stats.coefplot()`, `py4stats.mfxplot()`" - ] - }, - { - "objectID": "man/tidy.html", - "href": "man/tidy.html", - "title": "25  py4stats.tidy(), py4stats.tidy_mfx()", - "section": "", - "text": "25.1 概要\nR言語の broom::tidy() をオマージュした関数で、sm.ols() や smf.logit() などの推定結果を pands.DataFrame に変換します。py4stats.tidy() は回帰係数と関連する検定結果を表示し、 py4stats.tidy_mfx() は限界効果と関連する検定結果を表示します。", - "crumbs": [ - "regression_tools", - "25  `py4stats.tidy()`, `py4stats.tidy_mfx()`" - ] - }, - { - "objectID": "man/tidy.html#概要", - "href": "man/tidy.html#概要", - "title": "25  py4stats.tidy(), py4stats.tidy_mfx()", - "section": "", - "text": "tidy(\n x, \n name_of_term = None,\n conf_level = 0.95,\n **kwargs\n )\n\ntidy_mfx(\n x, \n at = 'overall', \n method = 'dydx', \n dummy = False, \n conf_level = 0.95, \n **kwargs\n )", - "crumbs": [ - "regression_tools", - "25  `py4stats.tidy()`, `py4stats.tidy_mfx()`" - ] - }, - { - "objectID": "man/tidy.html#引数-argument", - "href": "man/tidy.html#引数-argument", - "title": "25  py4stats.tidy(), py4stats.tidy_mfx()", - "section": "25.2 引数 Argument", - "text": "25.2 引数 Argument\n\nx(必須)  sm.ols()もしくは smf.logit() などで作成された分析結果のオブジェクト。\nname_of_term:list of str  term 列(index) として表示する説明変数の名前のリスト。指定しない場合(初期設定)、モデルの推定に使用された説明変数の名前がそのまま表示されます。\nconf_level:float  信頼区間の計算に用いる信頼係数。\nat:限界効果の集計方法(tidy_mfx() のみ)。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 at として渡されます。method = 'coef' を指定した場合、この引数は無視されます。\n\n'overall':各観測値の限界効果の平均値を表示(初期設定)\n'mean':各説明変数の平均値における限界効果を表示\n'median':各説明変数の中央値における限界効果を表示\n'zero':各説明変数の値がゼロであるときの限界効果を表示\n\nmethod:推定する限界効果の種類(tidy_mfx() のみ)。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 method として渡されます。ただし、method = 'coef' を指定した場合には限界効果を推定せずに回帰係数をそのまま表示します。\n\n'coef':回帰係数の推定値を表示\n'dydx':限界効果の値を変換なしでそのまま表。(初期設定)\n'eyex':弾力性 d(lny)/d(lnx) の推定値を表示\n'dyex':準弾力性 dy /d(lnx) の推定値を表示\n'eydx':準弾力性 d(lny)/dx の推定値を表示\n\ndummy:ダミー変数の限界効果の推定方法(tidy_mfx() のみ)。もし False (初期設定)であれば、ダミー変数を連続な数値変数として扱います。もし、True であればダミー変数が0から1へと変化したときの予測値の変化を推定します。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 dummy として渡されます。", - "crumbs": [ - "regression_tools", - "25  `py4stats.tidy()`, `py4stats.tidy_mfx()`" - ] - }, - { - "objectID": "man/tidy.html#返り値-value", - "href": "man/tidy.html#返り値-value", - "title": "25  py4stats.tidy(), py4stats.tidy_mfx()", - "section": "25.3 返り値 Value", - "text": "25.3 返り値 Value\n 次の列を含む pands.DataFrame が出力されます。\n\nterm(index)  説明変数の名称\nestimate  回帰係数(tidy()の場合)、もしくは限界効果(tidy_mfx()の場合)の推定値\nstd_err 推定値 estimate の標準誤差\nstatistics estimate = 0 を帰無仮説とする仮説検定の標本検定統計量。x に代入されたモデルが sm.ols() によって作成されたものであれば \\(t\\) 統計量が表示され、sm.glm() によって作成されたものであれば \\(z\\) 統計量が表示されます。\np_value estimate = 0 を帰無仮説とする両側検定の標本p-値\nconf_lower  信頼区間の下側信頼限界\nconf_higher  信頼区間の上側信頼限界", - "crumbs": [ - "regression_tools", - "25  `py4stats.tidy()`, `py4stats.tidy_mfx()`" - ] - }, - { - "objectID": "man/tidy.html#使用例-examples", - "href": "man/tidy.html#使用例-examples", - "title": "25  py4stats.tidy(), py4stats.tidy_mfx()", - "section": "25.4 使用例 Examples", - "text": "25.4 使用例 Examples\nimport pandas as pd\nimport numpy as np\nfrom palmerpenguins import load_penguins\nimport statsmodels.formula.api as smf\n\nfrom py4stats import regression_tools as reg # 回帰分析の要約\npenguins = load_penguins() # サンプルデータの読み込み\n# 回帰分析の実行\nfit1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()\n\nprint(py4st.tidy(fit1).round(4))\n#> estimate std_err statistics p_value conf_lower conf_higher\n#> term \n#> Intercept 153.7397 268.9012 0.5717 0.5679 -375.1910 682.6704\n#> species[T.Chinstrap] -885.8121 88.2502 -10.0375 0.0000 -1059.4008 -712.2234\n#> species[T.Gentoo] 578.6292 75.3623 7.6780 0.0000 430.3909 726.8674\n#> bill_length_mm 91.4358 6.8871 13.2764 0.0000 77.8888 104.9828\npenguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)\n\n# ロジスティック回帰の実行\nfit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()\n\nprint(py4st.tidy_mfx(fit_logit1).round(4))\n#> estimate std_err statistics p_value conf_lower conf_higher\n#> body_mass_g -0.0004 0.0000 -17.6561 0.0000 -0.0004 -0.0003\n#> bill_length_mm -0.0053 0.0036 -1.4628 0.1435 -0.0123 0.0018\n#> bill_depth_mm -0.1490 0.0051 -29.1681 0.0000 -0.1591 -0.1390", - "crumbs": [ - "regression_tools", - "25  `py4stats.tidy()`, `py4stats.tidy_mfx()`" - ] - }, - { - "objectID": "man/tidy.html#注意点", - "href": "man/tidy.html#注意点", - "title": "25  py4stats.tidy(), py4stats.tidy_mfx()", - "section": "25.5 注意点", - "text": "25.5 注意点\n 参考にしたR言語の broom::tidy() は様々な種類のモデルに対応したジェネリック関数として定義されていますが、py4stats.tidy() と py4stats.tidy_mfx() では対応しているモデルは限定的であることにご注意ださい。py4st.tidy() のメソッドが定義されているオブジェクトのクラスを確認するには次のコードを実行して下さい。\nlist(py4st.tidy.registry.keys())\npy4stats.tidy() は functools.singledispatch を用いたジェネリック関数として実装しています。 Py4Etrics モジュールの py4etrics.heckit.Heckit() で作成された HeckitResults クラスのオブジェクト用のメソッドについては heckit_helper.tidy_heckit() を参照してください。\n\nReturn to Function reference.", - "crumbs": [ - "regression_tools", - "25  `py4stats.tidy()`, `py4stats.tidy_mfx()`" - ] - }, - { - "objectID": "man/tidy_test.html", - "href": "man/tidy_test.html", - "title": "26  py4stats.tidy_test()", - "section": "", - "text": "26.1 概要\nR言語の broom::tidy() をオマージュした py4stats.tidy() 関数のうち、statsmodels ライブラリのメソッド RegressionResults.t_test() もしくは RegressionResults.f_test() で作成された statsmodels.stats.contrast.ContrastResults クラスのオブジェクト専用のメソッドです。py4stats.tidy()はジェネリック関数として実装されているため、py4st.tidy(x) としてご利用いただけます。", - "crumbs": [ - "regression_tools", - "26  `py4stats.tidy_test()`" - ] - }, - { - "objectID": "man/tidy_test.html#概要", - "href": "man/tidy_test.html#概要", - "title": "26  py4stats.tidy_test()", - "section": "", - "text": "tidy_test(x, conf_level = 0.95, **kwargs)", - "crumbs": [ - "regression_tools", - "26  `py4stats.tidy_test()`" - ] - }, - { - "objectID": "man/tidy_test.html#引数-argument", - "href": "man/tidy_test.html#引数-argument", - "title": "26  py4stats.tidy_test()", - "section": "26.2 引数 Argument", - "text": "26.2 引数 Argument\n\nx(必須)  statsmodels ライブラリのメソッド RegressionResults.t_test() もしくはRegressionResults.f_test() で作成された statsmodels.stats.contrast.ContrastResults クラスのオブジェクト。\nconf_level:float  信頼区間の計算に用いる信頼係数。ただし、x に代入されたオブジェクトが f_test() の結果である場合は、この引数は無視されます。", - "crumbs": [ - "regression_tools", - "26  `py4stats.tidy_test()`" - ] - }, - { - "objectID": "man/tidy_test.html#返り値-value", - "href": "man/tidy_test.html#返り値-value", - "title": "26  py4stats.tidy_test()", - "section": "26.3 返り値 Value", - "text": "26.3 返り値 Value\n 引数 x に代入されたオブジェクトが t_test() の結果である場合、次の列を含む pands.DataFrame が出力されます。\n\nestimate  帰無仮説のもとでの回帰係数(の線型結合)の推定値\nstd_err 推定値 estimate の標準誤差\nstatistics  仮説検定の標本検定統計量。\np_value 両側検定の標本p-値\nconf_lower  信頼区間の下側信頼限界\nconf_higher  信頼区間の上側信頼限界\n\n 一方で引数 x に代入されたオブジェクトが f_test() の結果である場合、次の列を含む pands.DataFrame が出力されます。\n\nstatistics  仮説検定の標本検定統計量。\np_value  F検定の標本p-値\ndf_denom  モデルの残差自由度\ndf_denom  帰無仮説のもとでの制約数", - "crumbs": [ - "regression_tools", - "26  `py4stats.tidy_test()`" - ] - }, - { - "objectID": "man/tidy_test.html#使用例-examples", - "href": "man/tidy_test.html#使用例-examples", - "title": "26  py4stats.tidy_test()", - "section": "26.4 使用例 Examples", - "text": "26.4 使用例 Examples\nimport py4stats as py4st\n\nimport pandas as pd\nimport numpy as np\nfrom palmerpenguins import load_penguins\nimport statsmodels.formula.api as smf\n\npenguins = load_penguins() # サンプルデータの読み込み\n\nfit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()\nhypotheses = 'bill_length_mm = 20'\nprint(py4st.tidy(fit3.t_test(hypotheses)).round(4))\n#> estimate std_err statistics p_value conf_lower conf_higher\n#> term \n#> c0 26.5366 7.2436 0.9024 0.3675 12.2867 40.7866\nhypotheses = 'species[T.Chinstrap] = 0, species[T.Gentoo] = 0'\nprint(py4st.tidy(fit3.f_test(hypotheses)).round(4))\n#> statistics p_value df_denom df_num\n#> term \n#> contrast 210.9432 0.0 327 2\n\nReturn to Function reference.", - "crumbs": [ - "regression_tools", - "26  `py4stats.tidy_test()`" - ] - }, - { - "objectID": "man/glance.html", - "href": "man/glance.html", - "title": "27  py4stats.glance()", - "section": "", - "text": "27.1 概要\nR言語の bloom::glance() をオマージュした関数で、sm.ols() や smf.logit() などで推定されたモデルを pands.DataFrame に変換します。", - "crumbs": [ - "regression_tools", - "27  `py4stats.glance()`" - ] - }, - { - "objectID": "man/glance.html#概要", - "href": "man/glance.html#概要", - "title": "27  py4stats.glance()", - "section": "", - "text": "glance(x)", - "crumbs": [ - "regression_tools", - "27  `py4stats.glance()`" - ] - }, - { - "objectID": "man/glance.html#引数-argument", - "href": "man/glance.html#引数-argument", - "title": "27  py4stats.glance()", - "section": "27.2 引数 Argument", - "text": "27.2 引数 Argument\n\nx(必須)  sm.ols() もしくは smf.logit() などで作成された分析結果のオブジェクト。", - "crumbs": [ - "regression_tools", - "27  `py4stats.glance()`" - ] - }, - { - "objectID": "man/glance.html#返り値-value", - "href": "man/glance.html#返り値-value", - "title": "27  py4stats.glance()", - "section": "27.3 返り値 Value", - "text": "27.3 返り値 Value\n モデルの当てはまり(goodness of fit)の尺度を各列に持つ pands.DataFrame が出力されます。表示される指標はモデルの種類によって異なります。", - "crumbs": [ - "regression_tools", - "27  `py4stats.glance()`" - ] - }, - { - "objectID": "man/glance.html#使用例-examples", - "href": "man/glance.html#使用例-examples", - "title": "27  py4stats.glance()", - "section": "27.4 使用例 Examples", - "text": "27.4 使用例 Examples\nimport pandas as pd\nimport numpy as np\nfrom palmerpenguins import load_penguins\nimport statsmodels.formula.api as smf\n\nimport py4stats as py4st\npenguins = load_penguins() # サンプルデータの読み込み\n# 線形回帰の場合\nfit_lm1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()\n\npd.set_option('display.expand_frame_repr', False)\nprint(py4st.glance(fit_lm1).round(4))\n#> rsquared rsquared_adj nobs df sigma F_values p_values AIC BIC\n#> 0 0.7829 0.781 342 3 375.3251 406.2735 0.0 5029.1406 5044.4798\n# ロジスティック回帰の場合\npenguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)\nfit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()\n\nprint(py4st.glance(fit_logit1).round(4))\n#> prsquared LL-Null df_null logLik AIC BIC deviance df_resid df_model nobs\n#> 0 0.5647 -236.8458 341 -103.1079 214.2157 229.555 206.2157 338 3 342", - "crumbs": [ - "regression_tools", - "27  `py4stats.glance()`" - ] - }, - { - "objectID": "man/glance.html#注意点", - "href": "man/glance.html#注意点", - "title": "27  py4stats.glance()", - "section": "27.5 注意点", - "text": "27.5 注意点\n 参考にしたR言語の bloom::glance() は様々な種類のモデルに対応したジェネリック関数として定義されていますが、py4st.glance() は現段階では限られたモデルにしか対応していません。py4st.glance() のメソッドが定義されているオブジェクトのクラスを確認するには次のコードを実行して下さい。\nlist(py4st.glance.registry.keys())\n\nReturn to Function reference.", - "crumbs": [ - "regression_tools", - "27  `py4stats.glance()`" - ] - }, - { - "objectID": "man/Blinder_Oaxaca.html", - "href": "man/Blinder_Oaxaca.html", - "title": "28  py4stats.Blinder_Oaxaca(), py4stats.plot_Blinder_Oaxaca()", - "section": "", - "text": "28.1 概要\n2つのサブサンプルを用いた回帰分析の推定結果に対して、Blinder-Oaxaca分解を行います。\nいま、ある変数 \\(s\\) を用いて \\(s = m\\) と \\(s = f\\) の2つのサブグループからなるデータセットがあるとし、次のような回帰式を仮定します。\n\\[\n\\begin{aligned}\nY_{i}^s = \\boldsymbol{X}_i^s\\boldsymbol{\\beta}^s + \\epsilon_i^s, &&\ns = m, f\n\\end{aligned}\n\\tag{1}\n\\]\nここで、\\(\\boldsymbol{X}_i^s\\) サブグループ \\(s\\) に属する個人 \\(i\\) についての説明変数からなる行列で、\\(\\boldsymbol{\\beta}^s\\) はサブグループ \\(s\\) のについての回帰係数、\\(\\epsilon_i^s\\) は誤差項です。  さらに、サブグループ \\(s\\) の被説明変数の平均値を \\(\\bar{Y}^s\\) とし、説明変数の平均値を \\(\\bar{\\boldsymbol{X}}^s\\) とするとき、Blinder-Oaxaca分解は2つのグループにおける被説明変数の平均値の差 \\(\\bar{Y}^m - \\bar{Y}^f\\) を次のように分解します。\n\\[\n\\begin{aligned}\n\\bar{Y}^m - \\bar{Y}^f = (\\bar{\\boldsymbol{X}}^m - \\bar{\\boldsymbol{X}}^f)\\boldsymbol{\\beta}^m + \\bar{\\boldsymbol{X}}^f(\\boldsymbol{\\beta}^m - \\boldsymbol{\\beta}^f)\n\\end{aligned}\n\\tag{2}\n\\]\nこのとき、式(2)右辺の各項は、それぞれ次のような意味を持ちます。\n式(1)および式(2)については朝井(2014, p.9)を参照しました。", - "crumbs": [ - "regression_tools", - "28  `py4stats.Blinder_Oaxaca()`, `py4stats.plot_Blinder_Oaxaca()`" - ] - }, - { - "objectID": "man/Blinder_Oaxaca.html#概要", - "href": "man/Blinder_Oaxaca.html#概要", - "title": "28  py4stats.Blinder_Oaxaca(), py4stats.plot_Blinder_Oaxaca()", - "section": "", - "text": "Blinder_Oaxaca(model1, model2)\n\nplot_Blinder_Oaxaca(\n model1, model2,\n diff_type = ['observed_diff', 'unobserved_diff'],\n ax = None, \n)\n\n\n\n\n\n\n\\((\\bar{\\boldsymbol{X}}^m - \\bar{\\boldsymbol{X}}^f)\\boldsymbol{\\beta}^m\\):2つのグループの観測可能な属性の差に起因する被説明変数の差 observed_diff\n\\(\\bar{\\boldsymbol{X}}^f(\\boldsymbol{\\beta}^m - \\boldsymbol{\\beta}^f)\\):2つのグループの観測できない要因の違いに起因する被説明変数の差 unobserved_diff", - "crumbs": [ - "regression_tools", - "28  `py4stats.Blinder_Oaxaca()`, `py4stats.plot_Blinder_Oaxaca()`" - ] - }, - { - "objectID": "man/Blinder_Oaxaca.html#引数-argument", - "href": "man/Blinder_Oaxaca.html#引数-argument", - "title": "28  py4stats.Blinder_Oaxaca(), py4stats.plot_Blinder_Oaxaca()", - "section": "28.2 引数 Argument", - "text": "28.2 引数 Argument\n\nmodel1:statsmodels で作成した回帰分析の結果(必須)。\nmodel2:statsmodels で作成した回帰分析の結果(必須)。\ndiff_type (plot_Blinder_Oaxaca()のみ)list of str or str  グラフの描画に使用する要約統計量の種類。初期設定では observed_diff と unobserved_diff の両方を表示します。\nax:matplotlib の ax オブジェクト。複数のグラフを並べる場合などに使用します。   ## 使用例 Examples\n\nimport pandas as pd\nimport statsmodels.formula.api as smf\nimport py4stats as py4st\n\nwage1 = wooldridge.data('wage1')\n\nfit_female = smf.ols(\n 'lwage ~ educ + exper + expersq + tenure + tenursq + married', \n data = wage1.query('female == 1')\n ).fit()\n\nfit_male = smf.ols(\n 'lwage ~ educ + exper + expersq + tenure + tenursq + married', \n data = wage1.query('female == 0')\n ).fit()\npy4st.compare_ols(\n list_models = [fit_female, fit_male],\n model_name = ['female', 'male']\n )\n\n\n\nterm\nfemale\nmale\n\n\n\n\nIntercept\n0.3159 **(0.1401)\n0.2255 *(0.1302)\n\n\neduc\n0.0737 ***(0.0104)\n0.0830 ***(0.0089)\n\n\nexper\n0.0200 ***(0.0072)\n0.0329 ***(0.0076)\n\n\nexpersq\n-0.0004 ***(0.0002)\n-0.0006 ***(0.0002)\n\n\ntenure\n0.0391 ***(0.0117)\n0.0301 ***(0.0089)\n\n\ntenursq\n-0.0014 ***(0.0005)\n-0.0005 *(0.0003)\n\n\nmarried\n-0.0548 (0.0539)\n0.1718 ***(0.0595)\n\n\nrsquared_adj\n0.2446\n0.4509\n\n\nnobs\n252\n274\n\n\ndf\n6\n6\n\n\n\nwage_decomp = py4st.Blinder_Oaxaca(\n model1 = fit_female,\n model2 = fit_male\n)\nwage_decomp\n\n\n\nterms\nobserved_diff\nunobserved_diff\n\n\n\n\nIntercept\n0\n-0.0903337\n\n\neduc\n0.0390661\n0.114713\n\n\nexper\n0.0371577\n0.211177\n\n\nexpersq\n-0.0216026\n-0.0962631\n\n\ntenure\n0.0859831\n-0.0327949\n\n\ntenursq\n-0.0342727\n0.0378497\n\n\nmarried\n0.0278806\n0.118657\n\n\n\npy4st.plot_Blinder_Oaxaca(\n model1 = fit_female,\n model2 = fit_male\n)\n\n\n\nplot_Blinder_Oaxaca1.png\n\n\ndiff_type を指定することで、一方の統計量だけを表示することもできます。\npy4st.plot_Blinder_Oaxaca(\n model1 = fit_female,\n model2 = fit_male,\n diff_type = 'unobserved_diff'\n)\n\n\n\nplot_Blinder_Oaxaca2.png\n\n\nグラフのサイズや解像度を指定するには、次のように行います。\nfig, ax = plt.subplots(1, 2, figsize = (1.1 * 2 * 4, 4), sharey = True, dpi = 200)\n\npy4st.plot_Blinder_Oaxaca(\n model1 = fit_female,\n model2 = fit_male,\n ax = ax\n)\nfig.tight_layout()", - "crumbs": [ - "regression_tools", - "28  `py4stats.Blinder_Oaxaca()`, `py4stats.plot_Blinder_Oaxaca()`" - ] - }, - { - "objectID": "man/Blinder_Oaxaca.html#参考文献", - "href": "man/Blinder_Oaxaca.html#参考文献", - "title": "28  py4stats.Blinder_Oaxaca(), py4stats.plot_Blinder_Oaxaca()", - "section": "28.3 参考文献", - "text": "28.3 参考文献\n\n朝井 友紀子 (2014) 「労働市場における男女差の30年― 就業のサンプルセレクションと男女間賃金格差」『日本労働研究雑誌』, No.648, pp.6–16\n\n\nReturn to Function reference.", - "crumbs": [ - "regression_tools", - "28  `py4stats.Blinder_Oaxaca()`, `py4stats.plot_Blinder_Oaxaca()`" - ] - }, - { - "objectID": "man/tidy_heckit.html", - "href": "man/tidy_heckit.html", - "title": "29  heckit_helper.tidy_heckit()", - "section": "", - "text": "29.1 概要\nR言語の broom::tidy() をオマージュした regression_tools.tidy() 関数の、py4etrics.heckit.HeckitResults クラス専用のメソッドです。regression_tools.tidy()はジェネリック関数として実装されているため、py4st.tidy(x) としてご利用いただけます。", - "crumbs": [ - "heckit_helper", - "29  `heckit_helper.tidy_heckit()`" - ] - }, - { - "objectID": "man/tidy_heckit.html#概要", - "href": "man/tidy_heckit.html#概要", - "title": "29  heckit_helper.tidy_heckit()", - "section": "", - "text": "tidy_heckit(\n model, \n name_selection = None, \n name_outcome = None, \n conf_level = 0.95\n )", - "crumbs": [ - "heckit_helper", - "29  `heckit_helper.tidy_heckit()`" - ] - }, - { - "objectID": "man/tidy_heckit.html#引数-argument", - "href": "man/tidy_heckit.html#引数-argument", - "title": "29  heckit_helper.tidy_heckit()", - "section": "29.2 引数 Argument", - "text": "29.2 引数 Argument\n\nx(必須)   Py4Etrics モジュールの py4etrics.heckit.Heckit() で作成された HeckitResults クラスのオブジェクト\nname_selection:list of str  term 列(index) のうち、第1段階の説明変数の名称として表示する文字列のリスト。指定しない場合(初期設定)、モデルの推定に使用された説明変数の名前がそのまま表示されます。\nname_outcome:list of str  term 列(index) のうち、第2段階の説明変数の名称として表示する文字列のリスト。指定しない場合(初期設定)、モデルの推定に使用された説明変数の名前がそのまま表示されます。\nconf_level:float  信頼区間の計算に用いる信頼係数。", - "crumbs": [ - "heckit_helper", - "29  `heckit_helper.tidy_heckit()`" - ] - }, - { - "objectID": "man/tidy_heckit.html#返り値-value", - "href": "man/tidy_heckit.html#返り値-value", - "title": "29  heckit_helper.tidy_heckit()", - "section": "29.3 返り値 Value", - "text": "29.3 返り値 Value\n 次の列を含む pands.DataFrame が出力されます。\n\nterm(index)  説明変数の名称\nestimate)  回帰係数の推定値\nstd_err 推定値 estimate の標準誤差\nstatistics estimate = 0 を帰無仮説とする仮説検定の標本検定統計量。x に代入されたモデルが sm.ols() によって作成されたものであれば \\(t\\) 統計量が表示され、sm.glm() によって作成されたものであれば \\(z\\) 統計量が表示されます。\np_value estimate = 0 を帰無仮説とする両側検定の標本p-値\nconf_lower  信頼区間の下側信頼限界\nconf_higher  信頼区間の上側信頼限界", - "crumbs": [ - "heckit_helper", - "29  `heckit_helper.tidy_heckit()`" - ] - }, - { - "objectID": "man/tidy_heckit.html#使用例-examples", - "href": "man/tidy_heckit.html#使用例-examples", - "title": "29  heckit_helper.tidy_heckit()", - "section": "29.4 使用例 Examples", - "text": "29.4 使用例 Examples\n heckit_helper モジュールはヘックマンの2段階推定(Heckit)を実行を Py4Etrics モジュールの py4etrics.heckit.Heckit() に依存しているため、事前のインストールをお願いします。\npip install git+https://github.com/Py4Etrics/py4etrics.git\nここでは wooldridge モジュールの mroz データを使い、春山(2023, Chap.24)のモデルを再現します。\nimport pandas as pd\nimport wooldridge\nimport py4stats as py4st\nfrom py4stats import heckit_helper\n\nmroz = wooldridge.data('mroz') # サンプルデータの読み込み\n\nmod_heckit, exog_outcome, exog_select = heckit_helper.Heckit_from_formula(\n selection = 'lwage ~ educ + exper + expersq + nwifeinc + age + kidslt6 + kidsge6',\n outcome = 'lwage ~ educ + exper + expersq',\n data = mroz\n)\n\nres_heckit = mod_heckit.fit(cov_type_2 = 'HC1')\n内部で functools.singledispatch を使用して定義しているため、heckit_helper モジュールの読み込み後は、py4st.tidy() 関数を呼び出すことで tidy_heckit() を実行することができます。\n# 初期設定で使用した場合\nprint(py4st.tidy(res_heckit).round(4))\n#> estimate std_err statistics p_value conf_lower conf_higher\n#> term \n#> O: Intercept -0.5781 0.3050 -1.8954 0.0580 -1.1759 0.0197\n#> O: educ 0.1091 0.0155 7.0261 0.0000 0.0786 0.1395\n#> O: exper 0.0439 0.0163 2.6989 0.0070 0.0120 0.0758\n#> O: expersq -0.0009 0.0004 -1.9574 0.0503 -0.0017 0.0000\n#> S: const 0.2701 0.5086 0.5310 0.5954 -0.7267 1.2669\n#> S: x1 0.1309 0.0253 5.1835 0.0000 0.0814 0.1804\n#> S: x2 0.1233 0.0187 6.5903 0.0000 0.0867 0.1600\n#> S: x3 -0.0019 0.0006 -3.1452 0.0017 -0.0031 -0.0007\n#> S: x4 -0.0120 0.0048 -2.4843 0.0130 -0.0215 -0.0025\n#> S: x5 -0.0529 0.0085 -6.2347 0.0000 -0.0695 -0.0362\n#> S: x6 -0.8683 0.1185 -7.3263 0.0000 -1.1006 -0.6360\n#> S: x7 0.0360 0.0435 0.8281 0.4076 -0.0492 0.1212\n 注意:内部で使用している statsmodels.iolib.summary.summary_params_frame() の仕様上、初期設定では第1段階の説明変数の名前が反映されません。説明変数の名前を反映するには name_selection 引数で指定してください。\nprint(py4st.tidy(res_heckit, name_selection = exog_select.columns).round(4))\n#> estimate std_err statistics p_value conf_lower conf_higher\n#> term \n#> O: Intercept -0.5781 0.3050 -1.8954 0.0580 -1.1759 0.0197\n#> O: educ 0.1091 0.0155 7.0261 0.0000 0.0786 0.1395\n#> O: exper 0.0439 0.0163 2.6989 0.0070 0.0120 0.0758\n#> O: expersq -0.0009 0.0004 -1.9574 0.0503 -0.0017 0.0000\n#> S: Intercept 0.2701 0.5086 0.5310 0.5954 -0.7267 1.2669\n#> S: educ 0.1309 0.0253 5.1835 0.0000 0.0814 0.1804\n#> S: exper 0.1233 0.0187 6.5903 0.0000 0.0867 0.1600\n#> S: expersq -0.0019 0.0006 -3.1452 0.0017 -0.0031 -0.0007\n#> S: nwifeinc -0.0120 0.0048 -2.4843 0.0130 -0.0215 -0.0025\n#> S: age -0.0529 0.0085 -6.2347 0.0000 -0.0695 -0.0362\n#> S: kidslt6 -0.8683 0.1185 -7.3263 0.0000 -1.1006 -0.6360\n#> S: kidsge6 0.0360 0.0435 0.8281 0.4076 -0.0492 0.1212\n\nReturn to Function reference.", - "crumbs": [ - "heckit_helper", - "29  `heckit_helper.tidy_heckit()`" - ] - }, - { - "objectID": "man/Heckit_from_formula.html", - "href": "man/Heckit_from_formula.html", - "title": "30  heckit_helper.Heckit_from_formula()", - "section": "", - "text": "30.1 概要", - "crumbs": [ - "heckit_helper", - "30  `heckit_helper.Heckit_from_formula()`" - ] - }, - { - "objectID": "man/Heckit_from_formula.html#概要", - "href": "man/Heckit_from_formula.html#概要", - "title": "30  heckit_helper.Heckit_from_formula()", - "section": "", - "text": "Heckit_from_formula(\n selection, \n outcome, \n data, \n **kwargs\n )", - "crumbs": [ - "heckit_helper", - "30  `heckit_helper.Heckit_from_formula()`" - ] - }, - { - "objectID": "man/Heckit_from_formula.html#引数-argument", - "href": "man/Heckit_from_formula.html#引数-argument", - "title": "30  heckit_helper.Heckit_from_formula()", - "section": "30.2 引数 Argument", - "text": "30.2 引数 Argument\n\nselectionstr(必須)  Type2トービットモデルのうち第1段階の selection equation(選択関数, 就業決定関数)の回帰式\noutcomestr(必須)  Type2トービットモデルのうち第2段階の regression equation(賃金関数)の回帰式\ndata:pandas.DataFrame(必須)\n**kwargs py4etrics.heckit.Heckit() に渡すその他の引数", - "crumbs": [ - "heckit_helper", - "30  `heckit_helper.Heckit_from_formula()`" - ] - }, - { - "objectID": "man/Heckit_from_formula.html#返り値-value", - "href": "man/Heckit_from_formula.html#返り値-value", - "title": "30  heckit_helper.Heckit_from_formula()", - "section": "30.3 返り値 Value", - "text": "30.3 返り値 Value\n 3つの要素を持つ tuple。左から順に次の3つのオブジェクトが出力されます。\n\npy4etrics.heckit.Heckit() から出力されたモデルの推定結果\n第2段階の regression equation(賃金関数)の説明変数からなる pd.DataFrame\n第1段階のselection equation(選択関数, 就業決定関数)の説明変数からなる pd.DataFrame", - "crumbs": [ - "heckit_helper", - "30  `heckit_helper.Heckit_from_formula()`" - ] - }, - { - "objectID": "man/Heckit_from_formula.html#使用例-examples", - "href": "man/Heckit_from_formula.html#使用例-examples", - "title": "30  heckit_helper.Heckit_from_formula()", - "section": "30.4 使用例 Examples", - "text": "30.4 使用例 Examples\n heckit_helper モジュールはヘックマンの2段階推定(Heckit)を実行を Py4Etrics モジュールの py4etrics.heckit.Heckit() に依存しているため、事前のインストールをお願いします。\npip install git+https://github.com/Py4Etrics/py4etrics.git\nここでは春山(2023, Chap.24)のモデルを再現するため、wooldridge モジュールから mroz データを読み込みます。\nimport pandas as pd\nimport wooldridge\nfrom py4stats import heckit_helper\n\nmroz = wooldridge.data('mroz') # サンプルデータの読み込み\nHeckit_from_formula() 関数を使い、モデルを推定します。なお、Type2トービットモデルを推定する場合、第2段階の回帰式 outcome で使用される説明変数は全て第1段階の回帰式 selection に含まれ、なおかつ selection に含まれるものの、outcome には含まれない説明変数が少なくとも1つは必要であることに注意してください(末石, 2015, p.117)。\nmod_heckit, exog_outcome, exog_select = \\\n heckit_helper.Heckit_from_formula(\n selection = 'lwage ~ educ + exper + expersq + nwifeinc + age + kidslt6 + kidsge6',\n outcome = 'lwage ~ educ + exper + expersq',\n data = mroz\n)\n\nres_heckit = mod_heckit.fit(cov_type_2 = 'HC1')\n\nprint(res_heckit.summary())\n#> Heckit Regression Results \n#> ================================================================================\n#> Dep. Variable: lwage R-squared: 0.156\n#> Model: Heckit Adj. R-squared: 0.150\n#> Method: Heckman Two-Step F-statistics: 26.148\n#> Date: Mon, 11 Mar 2024 Prob (F-statistic): 0.000\n#> Time: 08:40:39 Cov in 1st Stage: nonrobust\n#> No. Total Obs.: 753 Cov in 2nd Stage: HC1\n#> No. Censored Obs.: 325 \n#> No. Uncensored Obs.: 428 \n#> ==============================================================================\n#> coef std err z P>|z| [0.025 0.975]\n#> ------------------------------------------------------------------------------\n#> Intercept -0.5781 0.305 -1.895 0.058 -1.176 0.020\n#> educ 0.1091 0.016 7.026 0.000 0.079 0.139\n#> exper 0.0439 0.016 2.699 0.007 0.012 0.076\n#> expersq -0.0009 0.000 -1.957 0.050 -0.002 1.15e-06\n#> ==============================================================================\n#> coef std err z P>|z| [0.025 0.975]\n#> ------------------------------------------------------------------------------\n#> Intercept 0.2701 0.509 0.531 0.595 -0.727 1.267\n#> educ 0.1309 0.025 5.183 0.000 0.081 0.180\n#> exper 0.1233 0.019 6.590 0.000 0.087 0.160\n#> expersq -0.0019 0.001 -3.145 0.002 -0.003 -0.001\n#> nwifeinc -0.0120 0.005 -2.484 0.013 -0.022 -0.003\n#> age -0.0529 0.008 -6.235 0.000 -0.069 -0.036\n#> kidslt6 -0.8683 0.119 -7.326 0.000 -1.101 -0.636\n#> kidsge6 0.0360 0.043 0.828 0.408 -0.049 0.121\n#> ================================================================================\n#> coef std err z P>|z| [0.025 0.975]\n#> --------------------------------------------------------------------------------\n#> IMR (Lambda) 0.0323 0.134 0.241 0.809 -0.230 0.294\n#> =====================================\n#> rho: 0.049\n#> sigma: 0.664\n#> =====================================\n#> \n#> First table are the estimates for the regression (response) equation.\n#> Second table are the estimates for the selection equation.\n#> Third table is the estimate for the coef of the inverse Mills ratio (Heckman's Lambda).", - "crumbs": [ - "heckit_helper", - "30  `heckit_helper.Heckit_from_formula()`" - ] - }, - { - "objectID": "man/Heckit_from_formula.html#参考文献", - "href": "man/Heckit_from_formula.html#参考文献", - "title": "30  heckit_helper.Heckit_from_formula()", - "section": "30.5 参考文献", - "text": "30.5 参考文献\n\n末石直也(2015)『計量経済学:ミクロデータ分析へのいざない』 日本評論社.\n春山鉄源(2023) 『Pythonで学ぶ入門計量経済学』 https://py4etrics.github.io/index.html\n\n\nReturn to Function reference.", - "crumbs": [ - "heckit_helper", - "30  `heckit_helper.Heckit_from_formula()`" - ] - }, - { - "objectID": "man/heckitmfx_compute.html", - "href": "man/heckitmfx_compute.html", - "title": "31  heckit_helper.heckitmfx_compute()", - "section": "", - "text": "31.1 概要\nType2トービットモデルの限界効果を推定します。推定方法についてはダハナ, 勝又(2023, p.136)および Hoffmann, Kassouf(2005)を参照し、関数の実装についてはR言語の heckitmfx::heckitmfx_log() 関数を参考にしています。", - "crumbs": [ - "heckit_helper", - "31  `heckit_helper.heckitmfx_compute()`" - ] - }, - { - "objectID": "man/heckitmfx_compute.html#概要", - "href": "man/heckitmfx_compute.html#概要", - "title": "31  heckit_helper.heckitmfx_compute()", - "section": "", - "text": "heckitmfx_compute(\n model, \n exog_select, \n exog_outcome, \n exponentiate = False\n)", - "crumbs": [ - "heckit_helper", - "31  `heckit_helper.heckitmfx_compute()`" - ] - }, - { - "objectID": "man/heckitmfx_compute.html#引数-argument", - "href": "man/heckitmfx_compute.html#引数-argument", - "title": "31  heckit_helper.heckitmfx_compute()", - "section": "31.2 引数 Argument", - "text": "31.2 引数 Argument\n\nmodel(必須)   Py4Etrics モジュールの py4etrics.heckit.Heckit() で作成された HeckitResults クラスのオブジェクト\nexog_selectpd.DataFrame(必須)  Type2トービットモデルのうち第1段階の selection equation(選択関数, 就業決定関数)の説明変数からなる pd.DataFrame\nexog_outcomepd.DataFrame(必須)  Type2トービットモデルのうち第2段階の regression equation(賃金関数)の説明変数からなる pd.DataFrame\n\nこれらの引数は heckit_helper.Heckit_from_formula() の出力を使用することを想定しています(使用例を参照)。\n\nexponentiatebool  推定結果に指数関数を用いた変換を行うかどうかを表す論理値。もし False (初期設定)であれば限界効果と回帰係数の推定値をそのまま出力し、もし True であれば出力されるデータフレームのうち unconditional、conditional、selection、beta の列について指数関数 \\(100[\\exp(x - 1)]\\) を用いた変換を行います。例えば被説明変数は対数賃金であれば、変換後の限界効果はパーセンテージで表された賃金の変化率として解釈できます。", - "crumbs": [ - "heckit_helper", - "31  `heckit_helper.heckitmfx_compute()`" - ] - }, - { - "objectID": "man/heckitmfx_compute.html#返り値-value", - "href": "man/heckitmfx_compute.html#返り値-value", - "title": "31  heckit_helper.heckitmfx_compute()", - "section": "31.3 返り値 Value", - "text": "31.3 返り値 Value\n 次の列を含む pands.DataFrame が出力されます。\n\nterm(index)  説明変数の名称\nunconditional  Hoffmann, Kassouf(2005, p.6)の(14)式および(15)式に基づく条件付なしの平均限界効果(unconditional marginal effect)\nconditional  Hoffmann, Kassouf(2005, pp.4-5)の(8)式および(9)式に基づく条件付平均限界効果(conditional marginal effect)\nselection  Hoffmann, Kassouf(2005, p.6)の(14)式および(15)式の第3項に当たる間接効果\nbeta  第2段階の regression equation の回帰係数\ngamma  第1段階の selection equation の回帰係数", - "crumbs": [ - "heckit_helper", - "31  `heckit_helper.heckitmfx_compute()`" - ] - }, - { - "objectID": "man/heckitmfx_compute.html#使用例-examples", - "href": "man/heckitmfx_compute.html#使用例-examples", - "title": "31  heckit_helper.heckitmfx_compute()", - "section": "31.4 使用例 Examples", - "text": "31.4 使用例 Examples\n heckit_helper モジュールはヘックマンの2段階推定(Heckit)を実行を Py4Etrics モジュールの py4etrics.heckit.Heckit() に依存しているため、事前のインストールをお願いします。\npip install git+https://github.com/Py4Etrics/py4etrics.git\nここでは wooldridge モジュールの mroz データを使い、春山(2023, Chap.24)のモデルを再現します。\nimport pandas as pd\nimport wooldridge\nfrom py4stats import heckit_helper\n\nmroz = wooldridge.data('mroz') # サンプルデータの読み込み\n\nmod_heckit, exog_outcome, exog_select = \\\n heckit_helper.Heckit_from_formula(\n selection = 'lwage ~ educ + exper + expersq + nwifeinc + age + kidslt6 + kidsge6',\n outcome = 'lwage ~ educ + exper + expersq',\n data = mroz\n)\n\nres_heckit = mod_heckit.fit(cov_type_2 = 'HC1')\nprint(heckit_helper.heckitmfx_compute(\n res_heckit,\n exog_select = exog_select,\n exog_outcome = exog_outcome\n ).round(4))\n#> unconditional conditional selection beta gamma\n#> term \n#> age -0.0385 0.0010 -0.0395 0.0000 -0.0529\n#> educ 0.2045 0.1067 0.0978 0.1091 0.1309\n#> exper 0.1338 0.0417 0.0922 0.0439 0.1233\n#> expersq -0.0022 -0.0008 -0.0014 -0.0009 -0.0019\n#> kidsge6 0.0263 -0.0006 0.0269 0.0000 0.0360\n#> kidslt6 -0.6332 0.0157 -0.6489 0.0000 -0.8683\n#> nwifeinc -0.0088 0.0002 -0.0090 0.0000 -0.0120\n被説明変数の lwage は対数賃金であるため、exponentiate = True として指数関数 \\(100[\\exp(x - 1)]\\) を使った変換を行うことで、限界効果を賃金の変化率として解釈できるようになります。\nprint(heckit_helper.heckitmfx_compute(\n res_heckit,\n exog_select = exog_select,\n exog_outcome = exog_outcome,\n exponentiate = True\n ).round(4))\n#> unconditional conditional selection beta gamma\n#> term \n#> age -3.7809 0.0954 -3.8725 0.0000 -0.0529\n#> educ 22.6943 11.2606 10.2765 11.5235 0.1309\n#> exper 14.3206 4.2543 9.6555 4.4865 0.1233\n#> expersq -0.2233 -0.0825 -0.1409 -0.0859 -0.0019\n#> kidsge6 2.6604 -0.0649 2.7271 0.0000 0.0360\n#> kidslt6 -46.9117 1.5782 -47.7365 0.0000 -0.8683\n#> nwifeinc -0.8730 0.0217 -0.8945 0.0000 -0.0120", - "crumbs": [ - "heckit_helper", - "31  `heckit_helper.heckitmfx_compute()`" - ] - }, - { - "objectID": "man/heckitmfx_compute.html#注意", - "href": "man/heckitmfx_compute.html#注意", - "title": "31  heckit_helper.heckitmfx_compute()", - "section": "31.5 注意", - "text": "31.5 注意\n heckitmfx_compute() の実装は実験的なものであり、 Stata における margins コマンドなどの既存の手法とは計算結果が一致しない可能性があります。", - "crumbs": [ - "heckit_helper", - "31  `heckit_helper.heckitmfx_compute()`" - ] - }, - { - "objectID": "man/heckitmfx_compute.html#参考文献", - "href": "man/heckitmfx_compute.html#参考文献", - "title": "31  heckit_helper.heckitmfx_compute()", - "section": "31.6 参考文献", - "text": "31.6 参考文献\n\nダハナ・ウィラワン ドニ, 勝又壮太郎(2023) 『Rによるマーケティング・データ分析: 基礎から応用まで (ライブラリ データ分析への招待 4)』新世社.\n春山鉄源 (2023) 『Pythonで学ぶ入門計量経済学』. https://py4etrics.github.io/index.html\nHoffmann, Rodolfo, and Ana Lucia Kassouf. (2005). Deriving conditional and unconditional marginal effects in log earnings equations estimated by heckman’s procedure. Applied Economics, 37(11), 1303–1311. *** Return to Function reference.", - "crumbs": [ - "heckit_helper", - "31  `heckit_helper.heckitmfx_compute()`" - ] - }, - { - "objectID": "man/arg_match.html", - "href": "man/arg_match.html", - "title": "32  引数のアサーション building_block.arg_match()", - "section": "", - "text": "32.1 概要\nR言語の rlang::arg_match() をオマージュした関数で、文字列で与えられた引数のアサーションを行います。", - "crumbs": [ - "building_block", - "32  引数のアサーション `building_block.arg_match()`" - ] - }, - { - "objectID": "man/arg_match.html#概要", - "href": "man/arg_match.html#概要", - "title": "32  引数のアサーション building_block.arg_match()", - "section": "", - "text": "arg_match(\n arg: Union[str, Sequence[str], pd.Series, np.ndarray],\n values: Sequence[str],\n arg_name: Optional[str] = None,\n multiple: bool = False,\n any_missing: bool = False,\n all_missing: bool = False,\n nullable: bool = False\n )", - "crumbs": [ - "building_block", - "32  引数のアサーション `building_block.arg_match()`" - ] - }, - { - "objectID": "man/arg_match.html#引数-argument", - "href": "man/arg_match.html#引数-argument", - "title": "32  引数のアサーション building_block.arg_match()", - "section": "32.2 引数 Argument", - "text": "32.2 引数 Argument\n\narg(必須)str or list of str  適正かどうかを判断したい引数の値\nvalues(必須):list of str  引数 arg の適正な値のリスト\narg_name:str  エラーメッセージに表示する引数の名前。指定されなかった場合(初期設定)、引数 arg に代入されたオブジェクトの名称を表示します。なお、この機能は varname.argname()関数を使って実装されています。\nmultiple:bool  引数の値として複数の値を許容するかどうかを示すブール値。arg にリストが代入された場合、multiple = False(初期設定)であれば最初の値のみを出力し、multiple = True であればリストの値を全て出力します。\nany_missing:bool True の場合、欠測値(例:None、NaN、pd.NA など)が引数 arg の一部に含まれていても許容されます。\nall_missing: bool True の場合、すべての要素が欠測値であることを許容します。\nnullable: bool True の場合、引数そのものが None であることを許容します。", - "crumbs": [ - "building_block", - "32  引数のアサーション `building_block.arg_match()`" - ] - }, - { - "objectID": "man/arg_match.html#返り値-value", - "href": "man/arg_match.html#返り値-value", - "title": "32  引数のアサーション building_block.arg_match()", - "section": "32.3 返り値 Value", - "text": "32.3 返り値 Value\n 引数 arg に代入された値が、values に代入されたリストに含まれていればその値を返し、そうでなければエラーメッセージを出力します。エラーメッセージでは values に代入されたリストの値を arg の適正な値の候補として提示します。", - "crumbs": [ - "building_block", - "32  引数のアサーション `building_block.arg_match()`" - ] - }, - { - "objectID": "man/arg_match.html#使用例-examples", - "href": "man/arg_match.html#使用例-examples", - "title": "32  引数のアサーション building_block.arg_match()", - "section": "32.4 使用例 Examples", - "text": "32.4 使用例 Examples\nfrom py4stats import building_block as build\n\ndef my_faivarit(fruits):\n fruits = build.arg_match(\n fruits, arg_name = 'fruits',\n values = ['apple', 'orange', 'grape'], \n multiple = False\n )\n return fruits\n\nmy_faivarit('apple')\n#> 'apple'\n\nmy_faivarit('orang')\n#> ValueError: `fruits` must be one of 'apple', 'orange' or 'grape', not 'orang'.\n#> Did you mean 'orange'?\n\nmy_faivarit('ap')\n#> ValueError: `fruits` must be one of 'apple', 'orange' or 'grape', not 'ap'.\n#> Did you mean 'apple' or 'grape'?\n# arg に list を指定した場合\n# 初期設定では1つ目の要素だけ使用されます。\nmy_faivarit(['apple', 'orange'])\n#> 'apple'\n\n# multiple = True として再度関数を定義\ndef my_faivarit2(fruits):\n fruits = build.arg_match(\n fruits, arg_name = 'fruits',\n values = ['apple', 'orange', 'grape'], \n multiple = True\n )\n return fruits\n\nmy_faivarit2(['apple', 'orange'])\n#> ['apple', 'orange']\n\nmy_faivarit2(['apple', 'orang'])\n#> ValueError: `fruits` must be one of 'apple', 'orange' or 'grape', not 'orang'.\n#> Did you mean 'orange'?\n Py4Stats では eda_tools.tabyl()や regression_tools.compare_ols() など、文字列で指定する引数をもつ関数で、引数のアサーションに build.arg_match() を使用しています。\nimport py4stats as py4st\nimport pandas as pd\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込\n\npy4st.tabyl(penguins, 'island', 'species', normalize = 'ind')\n#> ValueError: `normalize` must be one of 'index', 'columns' or 'all', not 'ind'.\n#> Did you mean 'index'?\n\nReturn to Function reference.", - "crumbs": [ - "building_block", - "32  引数のアサーション `building_block.arg_match()`" - ] - }, - { - "objectID": "man/assert_dtype.html", - "href": "man/assert_dtype.html", - "title": "33  データ型による引数のアサーション", - "section": "", - "text": "33.1 概要\nR言語の checkmate パッケージの関数群をオマージュした、引数に代入された値が想定されたデータ型ではないときにエラーを出力する関数です。\nそれぞれの関数は第一引数 arg に代入された array-like オブジェクトの要素が、次の型ではない場合にエラーを出力します。", - "crumbs": [ - "building_block", - "33  データ型による引数のアサーション" - ] - }, - { - "objectID": "man/assert_dtype.html#概要", - "href": "man/assert_dtype.html#概要", - "title": "33  データ型による引数のアサーション", - "section": "", - "text": "assert_character(\n arg: Any, \n arg_name: Optional[str] = None,\n len_arg: Optional[int] = None,\n len_min: int = 1,\n len_max: Optional[int] = None,\n any_missing: bool = False,\n all_missing: bool = False,\n nullable: bool = False,\n scalar_only: bool = False\n )\n\nassert_logical(\n arg: Any, \n arg_name: Optional[str] = None,\n len_arg: Optional[int] = None,\n len_min: int = 1,\n len_max: Optional[int] = None,\n any_missing: bool = False,\n all_missing: bool = False,\n nullable: bool = False,\n scalar_only: bool = False\n )\n\nassert_numeric(\n arg: Any,\n arg_name: Optional[str] = None,\n lower = -float('inf'), \n upper = float('inf'), \n inclusive: Literal[\"both\", \"neither\", \"left\", \"right\"] = \"both\",\n len_arg: Optional[int] = None,\n len_min: int = 1,\n len_max: Optional[int] = None,\n any_missing: bool = False,\n all_missing: bool = False,\n nullable: bool = False,\n scalar_only: bool = False\n )\n\nassert_integer(\n arg: Any,\n arg_name: Optional[str] = None,\n lower = -float('inf'), \n upper = float('inf'), \n inclusive: Literal[\"both\", \"neither\", \"left\", \"right\"] = \"both\",\n len_arg: Optional[int] = None,\n len_min: int = 1,\n len_max: Optional[int] = None,\n any_missing: bool = False,\n all_missing: bool = False,\n nullable: bool = False,\n scalar_only: bool = False\n )\n\nassert_count(\n arg: Any,\n arg_name: Optional[str] = None,\n lower = 0, \n upper = float('inf'), \n inclusive: Literal[\"both\", \"neither\", \"left\", \"right\"] = \"both\",\n len_arg: Optional[int] = None,\n len_min: int = 1,\n len_max: Optional[int] = None,\n any_missing: bool = False,\n all_missing: bool = False,\n nullable: bool = False,\n scalar_only: bool = False\n )\n\nassert_float(\n arg: Any,\n arg_name: Optional[str] = None,\n lower = -float('inf'), \n upper = float('inf'), \n inclusive: Literal[\"both\", \"neither\", \"left\", \"right\"] = \"both\",\n len_arg: Optional[int] = None,\n len_min: int = 1,\n len_max: Optional[int] = None,\n any_missing: bool = False,\n all_missing: bool = False,\n nullable: bool = False,\n scalar_only: bool = False\n )\n\n\nassert_character():str\nassert_numeric():int or float\nassert_integer():int\nassert_count():int\nassert_float():float", - "crumbs": [ - "building_block", - "33  データ型による引数のアサーション" - ] - }, - { - "objectID": "man/assert_dtype.html#引数-argument", - "href": "man/assert_dtype.html#引数-argument", - "title": "33  データ型による引数のアサーション", - "section": "33.2 引数 Argument", - "text": "33.2 引数 Argument\n\narg(必須)array-like  適正かどうかを判断したい引数。検証対象となる引数。スカラー値、または array-like オブジェクト(例:list、NumPy 配列、pandas Series)を指定できます。\narg_name:str  エラーメッセージに表示する引数の名前。None の場合、可能であれば arg に渡された変数名が自動的に推定されます。なお、この機能は varname.argname()関数を使って実装されています。\nlower, upper:int or float  arg に代入されたオブジェクトの要素が取るべき値の最大値と最小値。\ninclusive:str  値の範囲チェックにおいて、境界値を含めるかどうかを表す文字列。 'both', 'neither', 'left', 'right' から選択できます。\n\n'both':lower <= x <= upper\n'neither':lower < x < upper\n'left':lower <= x < upper\n'right':lower < x <= upper\n\nlen_arg: int 引数の要素数を表す自然数:要素数をこの値と正確に一致させたい場合に指定します。len_arg を指定した場合、引数はちょうどこの個数の要素をもつ必要があります。  引数の長さは、None や np.nan などの欠測値を含む要素数をもとに判定されます。例えば引数の要素が arg = [1, None, 3] のとき、len_arg = 3なら正常として判定され、len_arg = 2 ならエラーが出されます。\nlen_min, len_max:: int 許容される最小の要素数と最大の要素数。len_max = None の場合、上限は設けられません。\nany_missing:bool True の場合、欠測値(例:None、NaN、pd.NA など)が引数 arg の一部に含まれていても許容されます。\nall_missing: bool True の場合、すべての要素が欠測値であることを許容します。\nnullable: bool True の場合、引数そのものが None であることを許容します。\nscalar_only: bool True の場合、スカラー値のみを許容します。この場合、1要素であっても、list や配列などの array-like オブジェクトは受け付けません。", - "crumbs": [ - "building_block", - "33  データ型による引数のアサーション" - ] - }, - { - "objectID": "man/assert_dtype.html#返り値-value", - "href": "man/assert_dtype.html#返り値-value", - "title": "33  データ型による引数のアサーション", - "section": "33.3 返り値 Value", - "text": "33.3 返り値 Value\n引数 arg に代入されたオブジェクトの全ての要素が、アサーションの条件を満たしていれば何も返さず、そうでなければエラーメッセージを出力します。", - "crumbs": [ - "building_block", - "33  データ型による引数のアサーション" - ] - }, - { - "objectID": "man/assert_dtype.html#使用例-examples", - "href": "man/assert_dtype.html#使用例-examples", - "title": "33  データ型による引数のアサーション", - "section": "33.4 使用例 Examples", - "text": "33.4 使用例 Examples\nfrom py4stats import building_block as build\nx = [1, 2, 3]\ny = ['A', 'B', 'C']\n\nbuild.assert_character(x, arg_name = 'x')\n#> TypeError: Argument `x` must be of type 'str'.\n\nbuild.assert_character(y, arg_name = 'y')\nbuild.assert_numeric(x, arg_name = 'x')\n\nbuild.assert_numeric(y, arg_name = 'y')\n#> TypeError: Argument `y` must be of type 'int' or 'float' with value(s) -inf <= x <= inf.\n\nz = [0.1, 0.3, 0.6]\nbuild.assert_numeric(z, arg_name = 'z', lower = 0, upper = 1)\n\nz.extend([2, 3])\nbuild.assert_numeric(z, arg_name = 'z', lower = 0, upper = 1)\n#> ValueError: Argument `z` must have value 0 <= x <= 1\n#> element '3' and '4' of 'z' not sutisfy the condtion.\n\nz = 1\nbuild.assert_numeric(\n z, arg_name = 'z', \n lower = 0, upper = 1, \n inclusive = 'left'\n )\n#> ValueError: Argument `z` must have value 0 <= x < 1.", - "crumbs": [ - "building_block", - "33  データ型による引数のアサーション" - ] - }, - { - "objectID": "man/assert_dtype.html#参照", - "href": "man/assert_dtype.html#参照", - "title": "33  データ型による引数のアサーション", - "section": "33.5 参照", - "text": "33.5 参照\n データ型の判定にはこちらの関数を使用しています。\n\nReturn to Function reference.", - "crumbs": [ - "building_block", - "33  データ型による引数のアサーション" - ] - }, - { - "objectID": "man/is_dtype.html", - "href": "man/is_dtype.html", - "title": "34  データ型を判定する論理関数", - "section": "", - "text": "34.1 building_block.is_character() building_block.is_logical() building_block.is_numeric() building_block.is_integer() building_block.is_float()", - "crumbs": [ - "building_block", - "34  データ型を判定する論理関数" - ] - }, - { - "objectID": "man/is_dtype.html#概要", - "href": "man/is_dtype.html#概要", - "title": "34  データ型を判定する論理関数", - "section": "34.2 概要", - "text": "34.2 概要\n 代入された値、あるいはリストの要素が特定のデータ型であるかどうかを判定する関数です。基本的には pandas.api.types.is_*() 関数のラッパー関数で、命名規則はR言語の同種の関数に基づいています。\nis_character(x)\n\nis_logical(x)\n\nis_numeric(x)\n\nis_integer(x)\n\nis_float(x)", - "crumbs": [ - "building_block", - "34  データ型を判定する論理関数" - ] - }, - { - "objectID": "man/is_dtype.html#引数-argument", - "href": "man/is_dtype.html#引数-argument", - "title": "34  データ型を判定する論理関数", - "section": "34.3 引数 Argument", - "text": "34.3 引数 Argument\n\nx(必須)array, list, or pd.Series", - "crumbs": [ - "building_block", - "34  データ型を判定する論理関数" - ] - }, - { - "objectID": "man/is_dtype.html#返り値-value", - "href": "man/is_dtype.html#返り値-value", - "title": "34  データ型を判定する論理関数", - "section": "34.4 返り値 Value", - "text": "34.4 返り値 Value\n引数 x が次の型であるときに、True を返します。\n\nis_character():str\nis_logical():bool\nis_numeric():int, float or bool\nis_integer():int or bool\nis_float():float", - "crumbs": [ - "building_block", - "34  データ型を判定する論理関数" - ] - }, - { - "objectID": "man/is_dtype.html#使用例-examples", - "href": "man/is_dtype.html#使用例-examples", - "title": "34  データ型を判定する論理関数", - "section": "34.5 使用例 Examples", - "text": "34.5 使用例 Examples\nfrom py4stats import building_block as build\nx_str = ['A', 'B']\nx_bool = [True, False, True]\nx_int = [1, 2, 3]\nx_float = [0, 1, 2.1, 0.5]\nx_list = [x_str, x_bool, x_int, x_float]\n\nprint([build.is_character(x) for x in x_list])\n#> [True, False, False, False]\n\nprint([build.is_logical(x) for x in x_list])\n#> [False, True, False, False]\n\nprint([build.is_numeric(x) for x in x_list])\n#> [False, True, True, True]\n\nprint([build.is_integer(x) for x in x_list])\n#> [False, False, True, False]\n\nprint([build.is_float(x) for x in x_list])\n#> [False, False, False, True]\n\nReturn to Function reference.", - "crumbs": [ - "building_block", - "34  データ型を判定する論理関数" - ] - }, - { - "objectID": "man/miscellaneous.html", - "href": "man/miscellaneous.html", - "title": "35  数字のフォーマットを変更する関数", - "section": "", - "text": "35.1 概要", - "crumbs": [ - "building_block", - "35  数字のフォーマットを変更する関数" - ] - }, - { - "objectID": "man/miscellaneous.html#概要", - "href": "man/miscellaneous.html#概要", - "title": "35  数字のフォーマットを変更する関数", - "section": "", - "text": "style_number(x, digits = 2, big_mark = ',')\n\nstyle_currency(x, symbol = '$', digits = 0, big_mark = ',')\n\nstyle_percent(x, digits = 2, unit = 100, symbol = '%')", - "crumbs": [ - "building_block", - "35  数字のフォーマットを変更する関数" - ] - }, - { - "objectID": "man/miscellaneous.html#引数-argument", - "href": "man/miscellaneous.html#引数-argument", - "title": "35  数字のフォーマットを変更する関数", - "section": "35.2 引数 Argument", - "text": "35.2 引数 Argument\n\nx:scalar or array-like of int or float\np_value:scalar or array-like of int or float\ndigits:int 小数点以下の桁数\nbig_mark:int 3桁毎の桁区切りに使用する記号。カンマ ',', アンダーバー '_', もしくは 非表示 '' から選ぶことができます。\nsymbol:str  貨幣記号を表す文字列", - "crumbs": [ - "building_block", - "35  数字のフォーマットを変更する関数" - ] - }, - { - "objectID": "man/miscellaneous.html#返り値-value", - "href": "man/miscellaneous.html#返り値-value", - "title": "35  数字のフォーマットを変更する関数", - "section": "35.3 返り値 Value", - "text": "35.3 返り値 Value\n 以下の値をもつ pd.Series を返します。\n\nbuilding_block.style_number(): 任意の数値に対して、小数点以下を桁数 digits に丸め、3桁区切り記号を通過した値を文字列として返します。f-string によるフォーマット f'{x:{big_mark}.{digits}f}' を用いて実装されています。\nbuilding_block.style_currency(): build.style_number() と同じく任意の数値に対して、小数点以下を桁数 digits に丸め、3桁区切り記号を通過した値を文字列として返しますが、さらに貨幣記号を追加します。f-string によるフォーマット f'{symbol}{x:{big_mark}.{digits}f}' を用いて実装されています。\nbuilding_block.style_percent(): 任意の数値をパーセンテージ表示に変換した値を文字列として返します。f-string によるフォーマット f'{x:,.{digits}%}' を用いて実装されています。", - "crumbs": [ - "building_block", - "35  数字のフォーマットを変更する関数" - ] - }, - { - "objectID": "man/miscellaneous.html#使用例-examples", - "href": "man/miscellaneous.html#使用例-examples", - "title": "35  数字のフォーマットを変更する関数", - "section": "35.4 使用例 Examples", - "text": "35.4 使用例 Examples\nimport numpy as np\nfrom py4stats import building_block as build\n\nx = [2000, 1000, 0.5, 0.11, 0.123]\n\nprint(build.style_number(x).to_list())\n#> ['2,000.00', '1,000.00', '0.50', '0.11', '0.12']\n\nprint(build.style_number(x, big_mark = '').to_list())\n#> ['2000.00', '1000.00', '0.50', '0.11', '0.12']\n\nprint(build.style_currency(x).to_list())\n#> ['$2,000', '$1,000', '$0', '$0', '$0']\npct = [0.11, 0.06, 0.05, 0.01, 0.00234]\n\nprint(build.style_percent(pct).to_list())\n#> ['11.00%', '6.00%', '5.00%', '1.00%', '0.23%']\n\nprint(build.style_percent(pct, unit = 1).to_list())\n#> ['0.11%', '0.06%', '0.05%', '0.01%', '0.00%']\n\nprint(build.style_percent(pct, unit = 1000, symbol = '‰').to_list())\n#> ['110.00‰', '60.00‰', '50.00‰', '10.00‰', '2.34‰']\n\nReturn to Function reference.", - "crumbs": [ - "building_block", - "35  数字のフォーマットを変更する関数" - ] - }, - { - "objectID": "man/style_pvalue.html", - "href": "man/style_pvalue.html", - "title": "36  p-値のフォーマットを変更する関数", - "section": "", - "text": "36.1 概要\nR言語の style_pvalue() と gtools::stars.pval() をオマージュした関数でp-値を見やすい形のフォーマットに変換します。", - "crumbs": [ - "building_block", - "36  p-値のフォーマットを変更する関数" - ] - }, - { - "objectID": "man/style_pvalue.html#概要", - "href": "man/style_pvalue.html#概要", - "title": "36  p-値のフォーマットを変更する関数", - "section": "", - "text": "style_pvalue(\n p_value: ArrayLike,\n digits: int = 3,\n prepend_p: bool = False,\n p_min: float = 0.001,\n p_max: float = 0.9\n )\n\np_stars(\n p_value, \n stars = {'***':0.01, '**':0.05, '*':0.1}\n )", - "crumbs": [ - "building_block", - "36  p-値のフォーマットを変更する関数" - ] - }, - { - "objectID": "man/style_pvalue.html#引数-argument", - "href": "man/style_pvalue.html#引数-argument", - "title": "36  p-値のフォーマットを変更する関数", - "section": "36.2 引数 Argument", - "text": "36.2 引数 Argument\n\np_value:scalar or array-like of int or float\ndigits:int(style_pvalue() のみ)  小数点以下の桁数\nprepend_p:bool(style_pvalue() のみ)  出区力に接頭辞 ’p’ を追加するかどうかを表す論理値。False であれば追加されず、True であれば追加されます。\np_min:int(style_pvalue() のみ)  p-値を実数値で表示する最小値。p_value がこの値を下回る場合、’<p_min’ もしくは ’p<p_min’ の形で表示されます。\np_max:int(style_pvalue() のみ)  p-値を実数値で表示する最大値。p_value がこの値を下回る場合、’>p_max’ もしくは ’p>p_max’ の形で表示されます。\nstars:dict(p_stars() のみ)  有意性を示す記号を key に、表示を切り替える閾値を値(value)にもつ辞書オブジェクト。初期設定の stars = None の場合、{'***': 0.01, '**': 0.05, '*': 0.1} が使用されます。詳細は下記を参照して下さい。", - "crumbs": [ - "building_block", - "36  p-値のフォーマットを変更する関数" - ] - }, - { - "objectID": "man/style_pvalue.html#返り値-value", - "href": "man/style_pvalue.html#返り値-value", - "title": "36  p-値のフォーマットを変更する関数", - "section": "36.3 返り値 Value", - "text": "36.3 返り値 Value\n フォーマットされたp-値を表す pd.Series を出力します。building_block.style_pvalue() では引数 p_value に与えられた数値を指定された桁数に丸めた値を表示し、指定された範囲を外れる値については ’<p_min’ や ’>p_max’の書式にへんかんします。  building_block.p_stars()では仮説検定の有意性を示すアスタリスク*` に変換します。初期設定ではアスタリスクはp-値の値に応じて次のように表示されます。\n\np ≤ 0.1 *\np ≤ 0.05 **\np ≤ 0.01 ***\np > 0.1 表示なし", - "crumbs": [ - "building_block", - "36  p-値のフォーマットを変更する関数" - ] - }, - { - "objectID": "man/style_pvalue.html#使用例-examples", - "href": "man/style_pvalue.html#使用例-examples", - "title": "36  p-値のフォーマットを変更する関数", - "section": "36.4 使用例 Examples", - "text": "36.4 使用例 Examples\n\nfrom py4stats import building_block as build\np_value = [\n 0.999, 0.5028, 0.2514, 0.197, 0.10, \n 0.0999, 0.06, 0.03, 0.002, 0.0002\n ]\n\nprint(build.style_pvalue(p_value).to_list())\n#> ['>0.9', '0.503', '0.251', '0.197', '0.1', '0.1', '0.06', '0.03', '0.002', '<0.001']\n\nprint(build.style_pvalue(p_value, prepend_p = True).to_list())\n#> ['p>0.9', 'p=0.503', 'p=0.251', 'p=0.197', 'p=0.1', 'p=0.1', 'p=0.06', 'p=0.03', 'p=0.002', 'p<0.001']\n\nprint(build.p_stars(p_value).to_list())\n#> ['', '', '', '', '*', '*', '*', '**', '***', '***']\n\n# R言語の stats::summary.lm() や gtools::stars.pval() を再現する場合。\nstars_dict = {'***':0.001, '**':0.01, '*': 0.05, '.':0.1}\nprint(build.p_stars(p_value, stars = stars_dict).to_list())\n#> ['', '', '', '', '.', '.', '.', '*', '**', '***']\n\nReturn to Function reference.", - "crumbs": [ - "building_block", - "36  p-値のフォーマットを変更する関数" - ] - }, - { - "objectID": "man/oxford_comma.html", - "href": "man/oxford_comma.html", - "title": "37  並列文の作成 oxford_comma()", - "section": "", - "text": "37.1 概要\n文字列のリストを与えると、リストの要素を英文における並列文の形に変換する関数です。表記法については Wikipedia Serial comma を参照し、コードについては stack overflow:Grammatical List Join in Python [duplicate] を参照しました。", - "crumbs": [ - "building_block", - "37  並列文の作成 `oxford_comma()`" - ] - }, - { - "objectID": "man/oxford_comma.html#概要", - "href": "man/oxford_comma.html#概要", - "title": "37  並列文の作成 oxford_comma()", - "section": "", - "text": "oxford_comma(x, sep_last = 'and', quotation = True)\n\noxford_comma_and(x, quotation = True)\n\noxford_comma_or(x, quotation = True)", - "crumbs": [ - "building_block", - "37  並列文の作成 `oxford_comma()`" - ] - }, - { - "objectID": "man/oxford_comma.html#引数", - "href": "man/oxford_comma.html#引数", - "title": "37  並列文の作成 oxford_comma()", - "section": "37.2 引数", - "text": "37.2 引数\n\nx:str or list of str\nquotation: bool  リストの各要素にクオーテーションマーク ’’ を追加するかどうかを表す論理値。True(初期設定)であればクオーテーションマークを追加し、False であれば追加しません。\nsep_last: str oxford_comma() のみ  リストの最後の要素の直前に付加する単語を表す文字列。\n\nなお、oxford_comma_and(x) は oxford_comma(x, 'and') と、oxford_comma_or(x) は oxford_comma(x, 'or') と同等です。", - "crumbs": [ - "building_block", - "37  並列文の作成 `oxford_comma()`" - ] - }, - { - "objectID": "man/oxford_comma.html#使用例", - "href": "man/oxford_comma.html#使用例", - "title": "37  並列文の作成 oxford_comma()", - "section": "37.3 使用例", - "text": "37.3 使用例\nfrom py4stats import building_block as build\nx = ['A', 'B', 'C']\n\nprint(build.oxford_comma_and(x))\n#> 'A', 'B' and 'C'\n\nprint(build.oxford_comma_and(x, quotation = False))\n#> A, B and C\n\nprint(build.oxford_comma_or(x))\n#> 'A', 'B' or 'C'\nリストの要素が1つの場合、あるいは x に文字列が指定された場合はカンマなどを追加せずにそのまま出力します。\nprint(build.oxford_comma_or(['A']))\n#> 'A'\n\nprint(build.oxford_comma_or('A'))\n#> 'A'\n\nReturn to Function reference.", - "crumbs": [ - "building_block", - "37  並列文の作成 `oxford_comma()`" - ] - }, - { - "objectID": "articles/narwhals_in_py4stats.html", - "href": "articles/narwhals_in_py4stats.html", - "title": "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装", - "section": "", - "text": "38.1 概要\npy4stats.eda_tools モジュールは、複数の DataFrame バックエンドに対して共通の API を提供することを目的として、narwhals ライブラリを用いて実装されています。\n本ドキュメントでは、本モジュールの内部実装に関する前提条件や、バックエンドの違いに起因する挙動上の注意点について説明します。\n通常の利用にあたって本ドキュメントを読む必要はありませんが、実装の詳細や挙動の違いが気になる場合には参考にしてください。", - "crumbs": [ - "articles", - "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装" - ] - }, - { - "objectID": "articles/narwhals_in_py4stats.html#対応している-dataframe-バックエンドについて", - "href": "articles/narwhals_in_py4stats.html#対応している-dataframe-バックエンドについて", - "title": "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装", - "section": "38.2 対応している DataFrame バックエンドについて", - "text": "38.2 対応している DataFrame バックエンドについて\n py4stats.eda_tools モジュールの関数は、第一引数として narwhals.from_native() によって nw.DataFrame 型へ変換可能な DataFrame オブジェクトを受け取ります。\n具体的には、以下のようなバックエンドを想定しています。\n\npandas.DataFrame(主に動作検証を行っているバックエンド)\npolars.DataFrame(簡易的な動作確認のみ)\npyarrow.Table(簡易的な動作確認のみ)\n\n本ライブラリの動作確認は、基本的に pandas.DataFrame を用いて実施しています。そのため、polars や pyarrow を使用した場合には、バックエンド固有の仕様差や未検証の挙動により、一部の関数でエラーが発生する可能性があります。そのような挙動が確認された場合は、Issue 等での報告を歓迎します。\n また、バックエンド別の実装状況については eda_tools開発状況 も参照して下さい。", - "crumbs": [ - "articles", - "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装" - ] - }, - { - "objectID": "articles/narwhals_in_py4stats.html#narwhals-を用いた関数の返り値の型について", - "href": "articles/narwhals_in_py4stats.html#narwhals-を用いた関数の返り値の型について", - "title": "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装", - "section": "38.3 narwhals を用いた関数の返り値の型について", - "text": "38.3 narwhals を用いた関数の返り値の型について\npy4stats.eda_tools モジュールの関数のうち、py4stats.diagnose() など、第一引数にデータフレームを取る関数の返り値の型は、to_native 引数の値によって変化します。  初期設定である to_nativ = True の場合には、第一引数に入力されたデータフレームと同じ型のデータフレームが出力され、to_nativ = False の場合には narwhals.DataFrame 型のデータフレームが出力されます。to_nativ = False のオプションは、主にライブラリ内部での利用や、データフレームのバックエンドに依存しない後続処理を行いたい場合を想定したオプションです。\nimport py4stats as py4st\nimport pandas as pd\nimport polars as pl\nimport pyarrow as pa\nimport wooldridge\nmroz_pd = wooldridge.data('mroz') # pd.DataFrame\nmroz_pl = pl.from_pandas(mroz_pd) # pl.DataFrame\nmroz_pa = pa.Table.from_pandas(mroz_pd) # pyarrow.lib.Table\n# to_nativ = True の場合(初期設定): 入力されたデータフレームと同じ型\n\nprint(type(py4st.diagnose(mroz_pd, to_native = True)))\n#> <class 'pandas.core.frame.DataFrame'>\n\nprint(type(py4st.diagnose(mroz_pl, to_native = True)))\n#> <class 'polars.dataframe.frame.DataFrame'>\n\nprint(type(py4st.diagnose(mroz_pa, to_native = True)))\n#> <class 'pyarrow.lib.Table'>\n# to_nativ = False の場合: narwhals.DataFrame 型\n\nprint(type(py4st.diagnose(mroz_pd, to_native = False)))\n#> <class 'narwhals.dataframe.DataFrame'>\n\nprint(type(py4st.diagnose(mroz_pl, to_native = False)))\n#> <class 'narwhals.dataframe.DataFrame'>\n\nprint(type(py4st.diagnose(mroz_pa, to_native = False)))\n#> <class 'narwhals.dataframe.DataFrame'>", - "crumbs": [ - "articles", - "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装" - ] - }, - { - "objectID": "articles/narwhals_in_py4stats.html#narwhals-を用いた実装方針について", - "href": "articles/narwhals_in_py4stats.html#narwhals-を用いた実装方針について", - "title": "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装", - "section": "38.4 narwhals を用いた実装方針について", - "text": "38.4 narwhals を用いた実装方針について\n 内部実装では、関数の冒頭で\nnw.from_native(data)\nを用いて入力データを nw.DataFrame に変換し、以降の処理を narwhals の抽象 API 上で行っています。\nこの設計により、DataFrame バックエンドごとの差異を最小限に抑えつつ、将来的な拡張性を確保することを目的としています。\n一方で、narwhals は各バックエンドの完全な互換性を保証するものではないため、特定の操作や型変換についてはバックエンドごとに挙動が異なる場合があります。", - "crumbs": [ - "articles", - "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装" - ] - }, - { - "objectID": "articles/narwhals_in_py4stats.html#pandas_flavor-を用いた-dataframe-メソッド登録について", - "href": "articles/narwhals_in_py4stats.html#pandas_flavor-を用いた-dataframe-メソッド登録について", - "title": "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装", - "section": "38.5  pandas_flavor を用いた DataFrame メソッド登録について", - "text": "38.5  pandas_flavor を用いた DataFrame メソッド登録について\npy4stats.eda_tools の関数のうち、単一の DataFrame オブジェクトを引数として受け取る関数については、pandas_flavor.register_dataframe_method を用いて DataFrame メソッドとして登録されています。その結果、以下のような使い方が可能です。\ndf.diagnose()\nただし、pandas_flavor は pandas の拡張を前提とした仕組みであるため、このメソッド形式の呼び出しは、pandas.DataFrame を対象としています。  polars.DataFrame や pyarrow ベースのオブジェクトを使用する場合には、関数として直接呼び出す形での利用を推奨します。\nimport py4stats as py4st\n\npy4st.diagnose(df)", - "crumbs": [ - "articles", - "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装" - ] - }, - { - "objectID": "articles/narwhals_in_py4stats.html#今後について", - "href": "articles/narwhals_in_py4stats.html#今後について", - "title": "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装", - "section": "38.6 今後について", - "text": "38.6 今後について\n py4stats.eda_tools モジュールは、今後も narwhals ベースの実装を主軸として改良・拡張を行っていく予定です。一方で、従来の pandas ベースの実装については、互換性のために当面は保持される予定ですが、機能追加は行わない予定です。バックエンドごとの挙動差や制限事項については、必要に応じて本ドキュメントを更新していきます。", - "crumbs": [ - "articles", - "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装" - ] - }, - { - "objectID": "articles/eda_tools_development_status.html", - "href": "articles/eda_tools_development_status.html", - "title": "39  eda_toolsの開発状況", - "section": "", - "text": "39.1 凡例\n2026年1月22日\neda_toolsの開発状況", - "crumbs": [ - "articles", - "39  eda_toolsの開発状況" - ] - }, - { - "objectID": "articles/eda_tools_development_status.html#凡例", - "href": "articles/eda_tools_development_status.html#凡例", - "title": "39  eda_toolsの開発状況", - "section": "", - "text": "✅ 実装済/テスト済\n⭕️ 実装済/テスト済(異なるバックエンドに依存)\n🔼 実装済/テスト未\n❌ 未実装", - "crumbs": [ - "articles", - "39  eda_toolsの開発状況" - ] - }, - { - "objectID": "articles/narwhalsについての考察.html", - "href": "articles/narwhalsについての考察.html", - "title": "40  narwhals についての考察", - "section": "", - "text": "40.1 narwhals での再現が難しい Pandas の機能", - "crumbs": [ - "articles", - "40  narwhals についての考察" - ] - }, - { - "objectID": "articles/narwhalsについての考察.html#narwhals-での再現が難しい-pandas-の機能", - "href": "articles/narwhalsについての考察.html#narwhals-での再現が難しい-pandas-の機能", - "title": "40  narwhals についての考察", - "section": "", - "text": "40.1.1 異なるデータフレーム間の二項演算\nPandas の場合、2つのデータフレーム df1 と df2 が共通の columns と index をもつ限り、df3 = df1 + df2 によって二項演算を行うことができ、このとき、columns と index をもつ要素同士が加算されます。しかし、narwhals には Pandas のような index が存在しないため、この計算は再現が困難です。\n\n\n40.1.2 データフレームへの値の代入\nPandas の場合、df.loc[i, j] = x という形でデータフレーム df の i, j 要素に値 x を代入することができますが、narwhals ではこれに相当する演算 df[i, j] = x は禁止されています。\n異なるデータフレーム間の二項演算に制約があること、そしてデータフレームへの値の代入が難しいことから、tabyl() 関数では、集計後の作表処理の一部を Pandas に依存しています。\n\n\n40.1.3 任意の関数でグループ別集計を行う\n自作関数を使ってグループ別集計を行いたい場合、Pandas であれば df.groupby(group)[x].agg(my_func) で行うことができます。同じく narwhals でも\ndata_nw.group_by(nw.col(group)).agg(nw.col('x').mean())\nという形でグループ別の集計がサポートされているものの、ここで使用できる集計関数は narwhals で実装されているものに限定されるようで、次のような方法で自作関数を使用することはできません。\ndata_nw.group_by(nw.col(group)).agg(nw.col('x').my_func())\ndata_nw.group_by(nw.col(group)).agg(my_func(nw.col('x')))\n例えば Py4Stats では、Pareto_plot() 関数の内部実装に使用している make_rank_table() 関数において、任意の aggfunc() 関数をグループ別集計に使うために、サブセッティングを使って group_by() メソッドの使用を回避するという変則的(かつ、おそらく非効率な)な実装を行なっています。\nstat_values = [\n aggfunc(\n data_nw.filter(nw.col(group) == g)[values]\n .drop_nulls().to_native()\n ) \n for g in group_value\n ]\nまた、上記の回避策のもう1つの問題として、data_nw.filter(nw.col(group) == g) では、複数の変数に基づくグループ化に対応できないことも挙げられます。make_rank_table() 関数については、Pareto_plot() 関数でパレート図を作図するときに横軸になる group が多変数だと対応できないので、group が1変数(= 引数として1つの文字列だけを受け付ける)とすることで妥協しています。\nただ、現時点で narwhals.GroupBy クラスに実装されているメソッドは .agg() しかなく、開発が進めばより柔軟な関数適用が可能になるのではないかと期待しています。", - "crumbs": [ - "articles", - "40  narwhals についての考察" - ] - }, - { - "objectID": "articles/narwhalsについての考察.html#narwhals-におけるバックエンドとその書き換え", - "href": "articles/narwhalsについての考察.html#narwhals-におけるバックエンドとその書き換え", - "title": "40  narwhals についての考察", - "section": "40.2 narwhals におけるバックエンドとその書き換え", - "text": "40.2 narwhals におけるバックエンドとその書き換え\n\n40.2.1 バックエンドの基本的な理解\nnarwhals におけるバックエンドによる型変換の基本的な理解として(不正確かもしれませんが)、nw.from_native(data) の実行時に data の型に応じて backend が記録され、.to_native() メソッドを呼び出すと、記録された backend に応じて元の型に変換されます。\nbackend の情報は .select() .filter() などのメソッドを使って data_nw を加工しても保持され、これによって入力された input_pd と同じ型のデータフレームを返すことが可能になっています。\ndata_nw = nw.from_native(input_pd) # ここで backend が記録される\ndata_nw.implementation # -> Pandas\nresult = data_nw.to_native() # -> pd.DataFrame が出力される\n一方で、処理の途中で pd.DataFrame や pl.DataFrame などの native オブジェクトを経由した場合、改めて nw.from_native() を使って nw.DataFrame に変換し直したとしても、その時点で backend が上書きされるので、.to_native() メソッドを使用しても引数として入力された input_pd と同じ型に復元される保証はありません。\ndata_nw = nw.from_native(input_pd) # ここで backend が記録される\ndata_nw2 = nw.from_native(data_nw.to_polars()) # ここで backend が上書きされる\ndata_nw2.implementation # -> polars\nresult = data_nw2.to_native() # -> pl.DataFrame が出力される\n従って、result が input_pd と同じ型をもつことを保証するには、data_nw を nw.DataFrame クラスのまま維持する(≒ narwhals ベースのメソッドだけで処理を書く)必要があり、これが narwhals ベースの実装としてのあるべき姿だと思われます。\n一方で、一部の処理が特定のバックエンド(e.g. Pandas)に依存している場合にはどうするべきでしょうか。これには次のような2つの選択肢があると考えています。\n\n処理が依存しているバックエンドのオブジェクト(e.g. pd.DataFrame)として出力する〔推奨〕\nnarwhals の仕様を迂回してバックエンドを書き換える〔非推奨ですが次節で考察〕\n\nこれら2つの可能性の間での選択は、技術的な問題であると同時にユーザーとのコミュニケーションの問題です。入力と同型のデータフレームを返す関数の中に pd.DataFrame を返す関数が混ざっていることをユーザーにどう説明するのか。あるいは、narwhals の仕様を迂回をしたことで非効率性やカラムレベルでデータ型(dtype)の一貫性が失われる問題が生じたとして、それをユーザーにどう説明するのか、という問いです。\n\n\n40.2.2 バックエンドの書き換え (非推奨)\nいま、some_computation() として実装された処理の一部が Pandas に依存しており、結果が result_pd という pd.DataFrame 型のオブジェクトとして得られているとします。このとき、result_pd をもとのデータフレーム data_pl と同型にする方法の1つとして、result_pd を pd.Series.to_dict() などを使って辞書のリスト(list of dict)に変換したのち、nw.from_dicts() を使って data_pl と同じバックエンドをもつ nw.DataFrame に変換するという方法があります。\n以上の変換の実例を見てみましょう。まずは、data_pl\ndata_pl = pl.from_pandas(load_penguins())[:10, :2]\n\ndata_pl = data_pl.with_columns(\n pl.all().cast(pl.Categorical)\n )\nprint(type(data_pl))\n#> <class 'polars.dataframe.frame.DataFrame'>\nprint(data_pl.schema)\n#> Schema({'species': Categorical, 'island': Categorical})\n\ndata_nw_pl = nw.from_native(data_pl) # ここでバックエンドを記録、後ほど復元に使います。\n\n# 何かしらの処理の結果 pd.DataFrame に変換されたとする\nresult_pd = data_nw_pl.to_pandas()\nprint(type(result_pd))\n#> <class 'pandas.core.frame.DataFrame'>\n次に、pl.DataFrame 型をもつ result_pd を pl.DataFrame に変換します。\nここでポイントとなるのが、nw.from_dicts() 関数の引数の (1)schema 引数と、(2)backend引数に、それぞれ data_nw_pl から取得した値を入力することで、result_pl の列が data_pl と同じく Categorical 型になるようにしています(指定しないと String 型として解釈されてしまいます)。\n# Pandas -> polars の変換\ndict_list = [result_pd.loc[i, :].to_dict() for i in result_pd.index]\n\nresult_nw_pl = nw.from_dicts(\n dict_list, \n schema = data_nw_pl.schema, # (1)\n backend = data_nw_pl.implementation # (2)\n )\nresult_pl = result_nw_pl.to_native()\n\nprint(type(result_pl))\n#> <class 'polars.dataframe.frame.DataFrame'>\n\nprint(result_pl.schema)\n#> Schema({'species': Categorical, 'island': Categorical})\nまた、Series については、nw.Series.from_iterable() 関数を使うことで、次のようにバックエンドを書き換えることができます。\nx_pl = data_pl['island']\nprint(type(x_pl))\n#> <class 'polars.series.series.Series'>\nprint(x_pl.dtype)\n#> Categorical\n\nx_nw = nw.from_native(x_pl, allow_series = True)\nx_pd = x_nw.to_pandas()\nprint(type(x_pd))\n#> <class 'pandas.core.series.Series'>\nx_pl2 = nw.Series.from_iterable(\n name = x_pd.name,\n values = x_pd.to_list(),\n backend = x_nw.implementation,\n dtype = x_nw.dtype\n).to_native()\n\nprint(type(x_pl2))\n#> <class 'polars.series.series.Series'>\nprint(x_pl2.dtype)\n#> Categorical\nnarwhals の仕様を迂回してバックエンドを書き換えることは可能ですが、この方法には次のような問題があります。 ただし、以上のような方法でバックエンドの書き換えは可能ですが、\n\n小さいデータフレームでない限り時間がかかる\n\n恐らく、dict_list を作成するための for ループによるもの\n\n上記の (1) に代入する正しい schema が用意できないと、カラムレベルでデータ型の一貫性保証できない。\n\n特に2番目の問題点については、集計処理によって列名が変わった場合には正しい schema(≒ {列名:dtype} の辞書オブジェクト)を用意することが難しくなります。そして、schema を指定できないと、pd.Categorical、pl.Categorical あるいは pl.Enum といったカテゴリー変数は文字列型に変換されてしまい、データ型の一貫性が失われます。\nカラムレベルで型の一貫性が失われると、返り値が入力値とは異なる型になるよりも把握しづらく、また挙動の予測が難しいため、上記のような処理は採用するとしても、他に方法がないときの最終手段として扱うべきでしょう。", - "crumbs": [ - "articles", - "40  narwhals についての考察" - ] - } -] \ No newline at end of file diff --git a/docs/docs/site_libs/bootstrap/bootstrap-322e28c2ea576fd4147837fb8c5b7a3d.min.css b/docs/docs/site_libs/bootstrap/bootstrap-322e28c2ea576fd4147837fb8c5b7a3d.min.css deleted file mode 100644 index cd9146c..0000000 --- a/docs/docs/site_libs/bootstrap/bootstrap-322e28c2ea576fd4147837fb8c5b7a3d.min.css +++ /dev/null @@ -1,12 +0,0 @@ -/*! - * Bootstrap v5.3.1 (https://getbootstrap.com/) - * Copyright 2011-2023 The Bootstrap Authors - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */@import"https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@300;400;700&display=swap";:root,[data-bs-theme=light]{--bs-blue: #2780e3;--bs-indigo: #6610f2;--bs-purple: #613d7c;--bs-pink: #e83e8c;--bs-red: #ff0039;--bs-orange: #f0ad4e;--bs-yellow: #ff7518;--bs-green: #3fb618;--bs-teal: #20c997;--bs-cyan: #9954bb;--bs-black: #000;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-default: #343a40;--bs-primary: #2780e3;--bs-secondary: #343a40;--bs-success: #3fb618;--bs-info: #9954bb;--bs-warning: #ff7518;--bs-danger: #ff0039;--bs-light: #f8f9fa;--bs-dark: #343a40;--bs-default-rgb: 52, 58, 64;--bs-primary-rgb: 39, 128, 227;--bs-secondary-rgb: 52, 58, 64;--bs-success-rgb: 63, 182, 24;--bs-info-rgb: 153, 84, 187;--bs-warning-rgb: 255, 117, 24;--bs-danger-rgb: 255, 0, 57;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 52, 58, 64;--bs-primary-text-emphasis: rgb(15.6, 51.2, 90.8);--bs-secondary-text-emphasis: rgb(20.8, 23.2, 25.6);--bs-success-text-emphasis: rgb(25.2, 72.8, 9.6);--bs-info-text-emphasis: rgb(61.2, 33.6, 74.8);--bs-warning-text-emphasis: rgb(102, 46.8, 9.6);--bs-danger-text-emphasis: rgb(102, 0, 22.8);--bs-light-text-emphasis: #495057;--bs-dark-text-emphasis: #495057;--bs-primary-bg-subtle: rgb(211.8, 229.6, 249.4);--bs-secondary-bg-subtle: rgb(214.4, 215.6, 216.8);--bs-success-bg-subtle: rgb(216.6, 240.4, 208.8);--bs-info-bg-subtle: rgb(234.6, 220.8, 241.4);--bs-warning-bg-subtle: rgb(255, 227.4, 208.8);--bs-danger-bg-subtle: rgb(255, 204, 215.4);--bs-light-bg-subtle: rgb(251.5, 252, 252.5);--bs-dark-bg-subtle: #ced4da;--bs-primary-border-subtle: rgb(168.6, 204.2, 243.8);--bs-secondary-border-subtle: rgb(173.8, 176.2, 178.6);--bs-success-border-subtle: rgb(178.2, 225.8, 162.6);--bs-info-border-subtle: rgb(214.2, 186.6, 227.8);--bs-warning-border-subtle: rgb(255, 199.8, 162.6);--bs-danger-border-subtle: rgb(255, 153, 175.8);--bs-light-border-subtle: #e9ecef;--bs-dark-border-subtle: #adb5bd;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-font-sans-serif: "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-root-font-size: 17px;--bs-body-font-family: "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--bs-body-font-size:1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #343a40;--bs-body-color-rgb: 52, 58, 64;--bs-body-bg: #fff;--bs-body-bg-rgb: 255, 255, 255;--bs-emphasis-color: #000;--bs-emphasis-color-rgb: 0, 0, 0;--bs-secondary-color: rgba(52, 58, 64, 0.75);--bs-secondary-color-rgb: 52, 58, 64;--bs-secondary-bg: #e9ecef;--bs-secondary-bg-rgb: 233, 236, 239;--bs-tertiary-color: rgba(52, 58, 64, 0.5);--bs-tertiary-color-rgb: 52, 58, 64;--bs-tertiary-bg: #f8f9fa;--bs-tertiary-bg-rgb: 248, 249, 250;--bs-heading-color: inherit;--bs-link-color: #2761e3;--bs-link-color-rgb: 39, 97, 227;--bs-link-decoration: underline;--bs-link-hover-color: rgb(31.2, 77.6, 181.6);--bs-link-hover-color-rgb: 31, 78, 182;--bs-code-color: #7d12ba;--bs-highlight-bg: rgb(255, 227.4, 208.8);--bs-border-width: 1px;--bs-border-style: solid;--bs-border-color: #dee2e6;--bs-border-color-translucent: rgba(0, 0, 0, 0.175);--bs-border-radius: 0.25rem;--bs-border-radius-sm: 0.2em;--bs-border-radius-lg: 0.5rem;--bs-border-radius-xl: 1rem;--bs-border-radius-xxl: 2rem;--bs-border-radius-2xl: var(--bs-border-radius-xxl);--bs-border-radius-pill: 50rem;--bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width: 0.25rem;--bs-focus-ring-opacity: 0.25;--bs-focus-ring-color: rgba(39, 128, 227, 0.25);--bs-form-valid-color: #3fb618;--bs-form-valid-border-color: #3fb618;--bs-form-invalid-color: #ff0039;--bs-form-invalid-border-color: #ff0039}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color: #dee2e6;--bs-body-color-rgb: 222, 226, 230;--bs-body-bg: #212529;--bs-body-bg-rgb: 33, 37, 41;--bs-emphasis-color: #fff;--bs-emphasis-color-rgb: 255, 255, 255;--bs-secondary-color: rgba(222, 226, 230, 0.75);--bs-secondary-color-rgb: 222, 226, 230;--bs-secondary-bg: #343a40;--bs-secondary-bg-rgb: 52, 58, 64;--bs-tertiary-color: rgba(222, 226, 230, 0.5);--bs-tertiary-color-rgb: 222, 226, 230;--bs-tertiary-bg: rgb(42.5, 47.5, 52.5);--bs-tertiary-bg-rgb: 43, 48, 53;--bs-primary-text-emphasis: rgb(125.4, 178.8, 238.2);--bs-secondary-text-emphasis: rgb(133.2, 136.8, 140.4);--bs-success-text-emphasis: rgb(139.8, 211.2, 116.4);--bs-info-text-emphasis: rgb(193.8, 152.4, 214.2);--bs-warning-text-emphasis: rgb(255, 172.2, 116.4);--bs-danger-text-emphasis: rgb(255, 102, 136.2);--bs-light-text-emphasis: #f8f9fa;--bs-dark-text-emphasis: #dee2e6;--bs-primary-bg-subtle: rgb(7.8, 25.6, 45.4);--bs-secondary-bg-subtle: rgb(10.4, 11.6, 12.8);--bs-success-bg-subtle: rgb(12.6, 36.4, 4.8);--bs-info-bg-subtle: rgb(30.6, 16.8, 37.4);--bs-warning-bg-subtle: rgb(51, 23.4, 4.8);--bs-danger-bg-subtle: rgb(51, 0, 11.4);--bs-light-bg-subtle: #343a40;--bs-dark-bg-subtle: #1a1d20;--bs-primary-border-subtle: rgb(23.4, 76.8, 136.2);--bs-secondary-border-subtle: rgb(31.2, 34.8, 38.4);--bs-success-border-subtle: rgb(37.8, 109.2, 14.4);--bs-info-border-subtle: rgb(91.8, 50.4, 112.2);--bs-warning-border-subtle: rgb(153, 70.2, 14.4);--bs-danger-border-subtle: rgb(153, 0, 34.2);--bs-light-border-subtle: #495057;--bs-dark-border-subtle: #343a40;--bs-heading-color: inherit;--bs-link-color: rgb(125.4, 178.8, 238.2);--bs-link-hover-color: rgb(151.32, 194.04, 241.56);--bs-link-color-rgb: 125, 179, 238;--bs-link-hover-color-rgb: 151, 194, 242;--bs-code-color: white;--bs-border-color: #495057;--bs-border-color-translucent: rgba(255, 255, 255, 0.15);--bs-form-valid-color: rgb(139.8, 211.2, 116.4);--bs-form-valid-border-color: rgb(139.8, 211.2, 116.4);--bs-form-invalid-color: rgb(255, 102, 136.2);--bs-form-invalid-border-color: rgb(255, 102, 136.2)}*,*::before,*::after{box-sizing:border-box}:root{font-size:var(--bs-root-font-size)}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:1px solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.325rem + 0.9vw)}@media(min-width: 1200px){h1,.h1{font-size:2rem}}h2,.h2{font-size:calc(1.29rem + 0.48vw)}@media(min-width: 1200px){h2,.h2{font-size:1.65rem}}h3,.h3{font-size:calc(1.27rem + 0.24vw)}@media(min-width: 1200px){h3,.h3{font-size:1.45rem}}h4,.h4{font-size:1.25rem}h5,.h5{font-size:1.1rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;-ms-text-decoration:underline dotted;-o-text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem;padding:.625rem 1.25rem;border-left:.25rem solid #e9ecef}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}a:hover{--bs-link-color-rgb: var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em;color:#000;background-color:#f8f9fa;line-height:1.5;padding:.5rem;border:1px solid var(--bs-border-color, #dee2e6)}pre code{background-color:rgba(0,0,0,0);font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:var(--bs-code-color);background-color:#f8f9fa;padding:.125rem .25rem;word-wrap:break-word}a>code{color:inherit}kbd{padding:.4rem .4rem;font-size:0.875em;color:#fff;background-color:#343a40}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:rgba(52,58,64,.75);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none !important}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + 0.3vw);line-height:inherit}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:0.875em;color:rgba(52,58,64,.75)}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-right:auto;margin-left:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}body.quarto-light .dark-content{display:none !important}body.quarto-dark .light-content{display:none !important}:root{--bs-breakpoint-xs: 0;--bs-breakpoint-sm: 576px;--bs-breakpoint-md: 768px;--bs-breakpoint-lg: 992px;--bs-breakpoint-xl: 1200px;--bs-breakpoint-xxl: 1400px}.grid{display:grid;grid-template-rows:repeat(var(--bs-rows, 1), 1fr);grid-template-columns:repeat(var(--bs-columns, 12), 1fr);gap:var(--bs-gap, 1.5rem)}.grid .g-col-1{grid-column:auto/span 1}.grid .g-col-2{grid-column:auto/span 2}.grid .g-col-3{grid-column:auto/span 3}.grid .g-col-4{grid-column:auto/span 4}.grid .g-col-5{grid-column:auto/span 5}.grid .g-col-6{grid-column:auto/span 6}.grid .g-col-7{grid-column:auto/span 7}.grid .g-col-8{grid-column:auto/span 8}.grid .g-col-9{grid-column:auto/span 9}.grid .g-col-10{grid-column:auto/span 10}.grid .g-col-11{grid-column:auto/span 11}.grid .g-col-12{grid-column:auto/span 12}.grid .g-start-1{grid-column-start:1}.grid .g-start-2{grid-column-start:2}.grid .g-start-3{grid-column-start:3}.grid .g-start-4{grid-column-start:4}.grid .g-start-5{grid-column-start:5}.grid .g-start-6{grid-column-start:6}.grid .g-start-7{grid-column-start:7}.grid .g-start-8{grid-column-start:8}.grid .g-start-9{grid-column-start:9}.grid .g-start-10{grid-column-start:10}.grid .g-start-11{grid-column-start:11}@media(min-width: 576px){.grid .g-col-sm-1{grid-column:auto/span 1}.grid .g-col-sm-2{grid-column:auto/span 2}.grid .g-col-sm-3{grid-column:auto/span 3}.grid .g-col-sm-4{grid-column:auto/span 4}.grid .g-col-sm-5{grid-column:auto/span 5}.grid .g-col-sm-6{grid-column:auto/span 6}.grid .g-col-sm-7{grid-column:auto/span 7}.grid .g-col-sm-8{grid-column:auto/span 8}.grid .g-col-sm-9{grid-column:auto/span 9}.grid .g-col-sm-10{grid-column:auto/span 10}.grid .g-col-sm-11{grid-column:auto/span 11}.grid .g-col-sm-12{grid-column:auto/span 12}.grid .g-start-sm-1{grid-column-start:1}.grid .g-start-sm-2{grid-column-start:2}.grid .g-start-sm-3{grid-column-start:3}.grid .g-start-sm-4{grid-column-start:4}.grid .g-start-sm-5{grid-column-start:5}.grid .g-start-sm-6{grid-column-start:6}.grid .g-start-sm-7{grid-column-start:7}.grid .g-start-sm-8{grid-column-start:8}.grid .g-start-sm-9{grid-column-start:9}.grid .g-start-sm-10{grid-column-start:10}.grid .g-start-sm-11{grid-column-start:11}}@media(min-width: 768px){.grid .g-col-md-1{grid-column:auto/span 1}.grid .g-col-md-2{grid-column:auto/span 2}.grid .g-col-md-3{grid-column:auto/span 3}.grid .g-col-md-4{grid-column:auto/span 4}.grid .g-col-md-5{grid-column:auto/span 5}.grid .g-col-md-6{grid-column:auto/span 6}.grid .g-col-md-7{grid-column:auto/span 7}.grid .g-col-md-8{grid-column:auto/span 8}.grid .g-col-md-9{grid-column:auto/span 9}.grid .g-col-md-10{grid-column:auto/span 10}.grid .g-col-md-11{grid-column:auto/span 11}.grid .g-col-md-12{grid-column:auto/span 12}.grid .g-start-md-1{grid-column-start:1}.grid .g-start-md-2{grid-column-start:2}.grid .g-start-md-3{grid-column-start:3}.grid .g-start-md-4{grid-column-start:4}.grid .g-start-md-5{grid-column-start:5}.grid .g-start-md-6{grid-column-start:6}.grid .g-start-md-7{grid-column-start:7}.grid .g-start-md-8{grid-column-start:8}.grid .g-start-md-9{grid-column-start:9}.grid .g-start-md-10{grid-column-start:10}.grid .g-start-md-11{grid-column-start:11}}@media(min-width: 992px){.grid .g-col-lg-1{grid-column:auto/span 1}.grid .g-col-lg-2{grid-column:auto/span 2}.grid .g-col-lg-3{grid-column:auto/span 3}.grid .g-col-lg-4{grid-column:auto/span 4}.grid .g-col-lg-5{grid-column:auto/span 5}.grid .g-col-lg-6{grid-column:auto/span 6}.grid .g-col-lg-7{grid-column:auto/span 7}.grid .g-col-lg-8{grid-column:auto/span 8}.grid .g-col-lg-9{grid-column:auto/span 9}.grid .g-col-lg-10{grid-column:auto/span 10}.grid .g-col-lg-11{grid-column:auto/span 11}.grid .g-col-lg-12{grid-column:auto/span 12}.grid .g-start-lg-1{grid-column-start:1}.grid .g-start-lg-2{grid-column-start:2}.grid .g-start-lg-3{grid-column-start:3}.grid .g-start-lg-4{grid-column-start:4}.grid .g-start-lg-5{grid-column-start:5}.grid .g-start-lg-6{grid-column-start:6}.grid .g-start-lg-7{grid-column-start:7}.grid .g-start-lg-8{grid-column-start:8}.grid .g-start-lg-9{grid-column-start:9}.grid .g-start-lg-10{grid-column-start:10}.grid .g-start-lg-11{grid-column-start:11}}@media(min-width: 1200px){.grid .g-col-xl-1{grid-column:auto/span 1}.grid .g-col-xl-2{grid-column:auto/span 2}.grid .g-col-xl-3{grid-column:auto/span 3}.grid .g-col-xl-4{grid-column:auto/span 4}.grid .g-col-xl-5{grid-column:auto/span 5}.grid .g-col-xl-6{grid-column:auto/span 6}.grid .g-col-xl-7{grid-column:auto/span 7}.grid .g-col-xl-8{grid-column:auto/span 8}.grid .g-col-xl-9{grid-column:auto/span 9}.grid .g-col-xl-10{grid-column:auto/span 10}.grid .g-col-xl-11{grid-column:auto/span 11}.grid .g-col-xl-12{grid-column:auto/span 12}.grid .g-start-xl-1{grid-column-start:1}.grid .g-start-xl-2{grid-column-start:2}.grid .g-start-xl-3{grid-column-start:3}.grid .g-start-xl-4{grid-column-start:4}.grid .g-start-xl-5{grid-column-start:5}.grid .g-start-xl-6{grid-column-start:6}.grid .g-start-xl-7{grid-column-start:7}.grid .g-start-xl-8{grid-column-start:8}.grid .g-start-xl-9{grid-column-start:9}.grid .g-start-xl-10{grid-column-start:10}.grid .g-start-xl-11{grid-column-start:11}}@media(min-width: 1400px){.grid .g-col-xxl-1{grid-column:auto/span 1}.grid .g-col-xxl-2{grid-column:auto/span 2}.grid .g-col-xxl-3{grid-column:auto/span 3}.grid .g-col-xxl-4{grid-column:auto/span 4}.grid .g-col-xxl-5{grid-column:auto/span 5}.grid .g-col-xxl-6{grid-column:auto/span 6}.grid .g-col-xxl-7{grid-column:auto/span 7}.grid .g-col-xxl-8{grid-column:auto/span 8}.grid .g-col-xxl-9{grid-column:auto/span 9}.grid .g-col-xxl-10{grid-column:auto/span 10}.grid .g-col-xxl-11{grid-column:auto/span 11}.grid .g-col-xxl-12{grid-column:auto/span 12}.grid .g-start-xxl-1{grid-column-start:1}.grid .g-start-xxl-2{grid-column-start:2}.grid .g-start-xxl-3{grid-column-start:3}.grid .g-start-xxl-4{grid-column-start:4}.grid .g-start-xxl-5{grid-column-start:5}.grid .g-start-xxl-6{grid-column-start:6}.grid .g-start-xxl-7{grid-column-start:7}.grid .g-start-xxl-8{grid-column-start:8}.grid .g-start-xxl-9{grid-column-start:9}.grid .g-start-xxl-10{grid-column-start:10}.grid .g-start-xxl-11{grid-column-start:11}}.table{--bs-table-color-type: initial;--bs-table-bg-type: initial;--bs-table-color-state: initial;--bs-table-bg-state: initial;--bs-table-color: #343a40;--bs-table-bg: #fff;--bs-table-border-color: #dee2e6;--bs-table-accent-bg: transparent;--bs-table-striped-color: #343a40;--bs-table-striped-bg: rgba(0, 0, 0, 0.05);--bs-table-active-color: #343a40;--bs-table-active-bg: rgba(0, 0, 0, 0.1);--bs-table-hover-color: #343a40;--bs-table-hover-bg: rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(1px*2) solid rgb(153.5,156.5,159.5)}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-active{--bs-table-color-state: var(--bs-table-active-color);--bs-table-bg-state: var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state: var(--bs-table-hover-color);--bs-table-bg-state: var(--bs-table-hover-bg)}.table-primary{--bs-table-color: #000;--bs-table-bg: rgb(211.8, 229.6, 249.4);--bs-table-border-color: rgb(190.62, 206.64, 224.46);--bs-table-striped-bg: rgb(201.21, 218.12, 236.93);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(190.62, 206.64, 224.46);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(195.915, 212.38, 230.695);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color: #000;--bs-table-bg: rgb(214.4, 215.6, 216.8);--bs-table-border-color: rgb(192.96, 194.04, 195.12);--bs-table-striped-bg: rgb(203.68, 204.82, 205.96);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(192.96, 194.04, 195.12);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(198.32, 199.43, 200.54);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color: #000;--bs-table-bg: rgb(216.6, 240.4, 208.8);--bs-table-border-color: rgb(194.94, 216.36, 187.92);--bs-table-striped-bg: rgb(205.77, 228.38, 198.36);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(194.94, 216.36, 187.92);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(200.355, 222.37, 193.14);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color: #000;--bs-table-bg: rgb(234.6, 220.8, 241.4);--bs-table-border-color: rgb(211.14, 198.72, 217.26);--bs-table-striped-bg: rgb(222.87, 209.76, 229.33);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(211.14, 198.72, 217.26);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(217.005, 204.24, 223.295);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color: #000;--bs-table-bg: rgb(255, 227.4, 208.8);--bs-table-border-color: rgb(229.5, 204.66, 187.92);--bs-table-striped-bg: rgb(242.25, 216.03, 198.36);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(229.5, 204.66, 187.92);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(235.875, 210.345, 193.14);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color: #000;--bs-table-bg: rgb(255, 204, 215.4);--bs-table-border-color: rgb(229.5, 183.6, 193.86);--bs-table-striped-bg: rgb(242.25, 193.8, 204.63);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(229.5, 183.6, 193.86);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(235.875, 188.7, 199.245);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color: #000;--bs-table-bg: #f8f9fa;--bs-table-border-color: rgb(223.2, 224.1, 225);--bs-table-striped-bg: rgb(235.6, 236.55, 237.5);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(223.2, 224.1, 225);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(229.4, 230.325, 231.25);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #fff;--bs-table-bg: #343a40;--bs-table-border-color: rgb(72.3, 77.7, 83.1);--bs-table-striped-bg: rgb(62.15, 67.85, 73.55);--bs-table-striped-color: #fff;--bs-table-active-bg: rgb(72.3, 77.7, 83.1);--bs-table-active-color: #fff;--bs-table-hover-bg: rgb(67.225, 72.775, 78.325);--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label,.shiny-input-container .control-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.875rem}.form-text{margin-top:.25rem;font-size:0.875em;color:rgba(52,58,64,.75)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#343a40;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#fff;background-clip:padding-box;border:1px solid #dee2e6;border-radius:0;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#343a40;background-color:#fff;border-color:rgb(147,191.5,241);outline:0;box-shadow:0 0 0 .25rem rgba(39,128,227,.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:rgba(52,58,64,.75);opacity:1}.form-control:disabled{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;margin-inline-end:.75rem;color:#343a40;background-color:#f8f9fa;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#e9ecef}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#343a40;background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:1px 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(1px * 2));padding:.25rem .5rem;font-size:0.875rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(1px * 2));padding:.5rem 1rem;font-size:1.25rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + 0.75rem + calc(1px * 2))}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(1px * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(1px * 2))}.form-control-color{width:3rem;height:calc(1.5em + 0.75rem + calc(1px * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important}.form-control-color::-webkit-color-swatch{border:0 !important}.form-control-color.form-control-sm{height:calc(1.5em + 0.5rem + calc(1px * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(1px * 2))}.form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#343a40;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#fff;background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #dee2e6;border-radius:0;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:rgb(147,191.5,241);outline:0;box-shadow:0 0 0 .25rem rgba(39,128,227,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 #343a40}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.875rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check,.shiny-input-container .checkbox,.shiny-input-container .radio{display:block;min-height:1.5rem;padding-left:0;margin-bottom:.125rem}.form-check .form-check-input,.form-check .shiny-input-container .checkbox input,.form-check .shiny-input-container .radio input,.shiny-input-container .checkbox .form-check-input,.shiny-input-container .checkbox .shiny-input-container .checkbox input,.shiny-input-container .checkbox .shiny-input-container .radio input,.shiny-input-container .radio .form-check-input,.shiny-input-container .radio .shiny-input-container .checkbox input,.shiny-input-container .radio .shiny-input-container .radio input{float:left;margin-left:0}.form-check-reverse{padding-right:0;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:0;margin-left:0}.form-check-input,.shiny-input-container .checkbox input,.shiny-input-container .checkbox-inline input,.shiny-input-container .radio input,.shiny-input-container .radio-inline input{--bs-form-check-bg: #fff;width:1em;height:1em;margin-top:.25em;vertical-align:top;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid #dee2e6;print-color-adjust:exact}.form-check-input[type=radio],.shiny-input-container .checkbox input[type=radio],.shiny-input-container .checkbox-inline input[type=radio],.shiny-input-container .radio input[type=radio],.shiny-input-container .radio-inline input[type=radio]{border-radius:50%}.form-check-input:active,.shiny-input-container .checkbox input:active,.shiny-input-container .checkbox-inline input:active,.shiny-input-container .radio input:active,.shiny-input-container .radio-inline input:active{filter:brightness(90%)}.form-check-input:focus,.shiny-input-container .checkbox input:focus,.shiny-input-container .checkbox-inline input:focus,.shiny-input-container .radio input:focus,.shiny-input-container .radio-inline input:focus{border-color:rgb(147,191.5,241);outline:0;box-shadow:0 0 0 .25rem rgba(39,128,227,.25)}.form-check-input:checked,.shiny-input-container .checkbox input:checked,.shiny-input-container .checkbox-inline input:checked,.shiny-input-container .radio input:checked,.shiny-input-container .radio-inline input:checked{background-color:#2780e3;border-color:#2780e3}.form-check-input:checked[type=checkbox],.shiny-input-container .checkbox input:checked[type=checkbox],.shiny-input-container .checkbox-inline input:checked[type=checkbox],.shiny-input-container .radio input:checked[type=checkbox],.shiny-input-container .radio-inline input:checked[type=checkbox]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio],.shiny-input-container .checkbox input:checked[type=radio],.shiny-input-container .checkbox-inline input:checked[type=radio],.shiny-input-container .radio input:checked[type=radio],.shiny-input-container .radio-inline input:checked[type=radio]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate,.shiny-input-container .checkbox input[type=checkbox]:indeterminate,.shiny-input-container .checkbox-inline input[type=checkbox]:indeterminate,.shiny-input-container .radio input[type=checkbox]:indeterminate,.shiny-input-container .radio-inline input[type=checkbox]:indeterminate{background-color:#2780e3;border-color:#2780e3;--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled,.shiny-input-container .checkbox input:disabled,.shiny-input-container .checkbox-inline input:disabled,.shiny-input-container .radio input:disabled,.shiny-input-container .radio-inline input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input[disabled]~span,.form-check-input:disabled~.form-check-label,.form-check-input:disabled~span,.shiny-input-container .checkbox input[disabled]~.form-check-label,.shiny-input-container .checkbox input[disabled]~span,.shiny-input-container .checkbox input:disabled~.form-check-label,.shiny-input-container .checkbox input:disabled~span,.shiny-input-container .checkbox-inline input[disabled]~.form-check-label,.shiny-input-container .checkbox-inline input[disabled]~span,.shiny-input-container .checkbox-inline input:disabled~.form-check-label,.shiny-input-container .checkbox-inline input:disabled~span,.shiny-input-container .radio input[disabled]~.form-check-label,.shiny-input-container .radio input[disabled]~span,.shiny-input-container .radio input:disabled~.form-check-label,.shiny-input-container .radio input:disabled~span,.shiny-input-container .radio-inline input[disabled]~.form-check-label,.shiny-input-container .radio-inline input[disabled]~span,.shiny-input-container .radio-inline input:disabled~.form-check-label,.shiny-input-container .radio-inline input:disabled~span{cursor:default;opacity:.5}.form-check-label,.shiny-input-container .checkbox label,.shiny-input-container .checkbox-inline label,.shiny-input-container .radio label,.shiny-input-container .radio-inline label{cursor:pointer}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;transition:background-position .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgb%28147, 191.5, 241%29'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:rgba(0,0,0,0)}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(39,128,227,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(39,128,227,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#2780e3;border:0;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:rgb(190.2,216.9,246.6)}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#f8f9fa;border-color:rgba(0,0,0,0)}.form-range::-moz-range-thumb{width:1rem;height:1rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#2780e3;border:0;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:rgb(190.2,216.9,246.6)}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#f8f9fa;border-color:rgba(0,0,0,0)}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:rgba(52,58,64,.75)}.form-range:disabled::-moz-range-thumb{background-color:rgba(52,58,64,.75)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(1px * 2));min-height:calc(3.5rem + calc(1px * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:1px solid rgba(0,0,0,0);transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media(prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:focus~label::after,.form-floating>.form-control:not(:placeholder-shown)~label::after,.form-floating>.form-control-plaintext~label::after,.form-floating>.form-select~label::after{position:absolute;inset:1rem .375rem;z-index:-1;height:1.5em;content:"";background-color:#fff}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control-plaintext~label{border-width:1px 0}.form-floating>:disabled~label,.form-floating>.form-control:disabled~label{color:#6c757d}.form-floating>:disabled~label::after,.form-floating>.form-control:disabled~label::after{background-color:#e9ecef}.input-group{position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:stretch;-webkit-align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#343a40;text-align:center;white-space:nowrap;background-color:#f8f9fa;border:1px solid #dee2e6}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.875rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(1px*-1)}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#3fb618}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:#3fb618}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#3fb618;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%233fb618' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#3fb618;box-shadow:0 0 0 .25rem rgba(63,182,24,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:#3fb618}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%233fb618' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:#3fb618;box-shadow:0 0 0 .25rem rgba(63,182,24,.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:#3fb618}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#3fb618}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(63,182,24,.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#3fb618}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#ff0039}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:#ff0039}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#ff0039;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ff0039'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ff0039' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#ff0039;box-shadow:0 0 0 .25rem rgba(255,0,57,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:#ff0039}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ff0039'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ff0039' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:#ff0039;box-shadow:0 0 0 .25rem rgba(255,0,57,.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:#ff0039}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#ff0039}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(255,0,57,.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#ff0039}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--bs-btn-padding-x: 0.75rem;--bs-btn-padding-y: 0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: #343a40;--bs-btn-bg: transparent;--bs-btn-border-width: 1px;--bs-btn-border-color: transparent;--bs-btn-border-radius: 0.25rem;--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);--bs-btn-disabled-opacity: 0.65;--bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-default{--bs-btn-color: #fff;--bs-btn-bg: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(44.2, 49.3, 54.4);--bs-btn-hover-border-color: rgb(41.6, 46.4, 51.2);--bs-btn-focus-shadow-rgb: 82, 88, 93;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(41.6, 46.4, 51.2);--bs-btn-active-border-color: rgb(39, 43.5, 48);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #343a40;--bs-btn-disabled-border-color: #343a40}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #2780e3;--bs-btn-border-color: #2780e3;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(33.15, 108.8, 192.95);--bs-btn-hover-border-color: rgb(31.2, 102.4, 181.6);--bs-btn-focus-shadow-rgb: 71, 147, 231;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(31.2, 102.4, 181.6);--bs-btn-active-border-color: rgb(29.25, 96, 170.25);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #2780e3;--bs-btn-disabled-border-color: #2780e3}.btn-secondary{--bs-btn-color: #fff;--bs-btn-bg: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(44.2, 49.3, 54.4);--bs-btn-hover-border-color: rgb(41.6, 46.4, 51.2);--bs-btn-focus-shadow-rgb: 82, 88, 93;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(41.6, 46.4, 51.2);--bs-btn-active-border-color: rgb(39, 43.5, 48);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #343a40;--bs-btn-disabled-border-color: #343a40}.btn-success{--bs-btn-color: #fff;--bs-btn-bg: #3fb618;--bs-btn-border-color: #3fb618;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(53.55, 154.7, 20.4);--bs-btn-hover-border-color: rgb(50.4, 145.6, 19.2);--bs-btn-focus-shadow-rgb: 92, 193, 59;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(50.4, 145.6, 19.2);--bs-btn-active-border-color: rgb(47.25, 136.5, 18);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #3fb618;--bs-btn-disabled-border-color: #3fb618}.btn-info{--bs-btn-color: #fff;--bs-btn-bg: #9954bb;--bs-btn-border-color: #9954bb;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(130.05, 71.4, 158.95);--bs-btn-hover-border-color: rgb(122.4, 67.2, 149.6);--bs-btn-focus-shadow-rgb: 168, 110, 197;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(122.4, 67.2, 149.6);--bs-btn-active-border-color: rgb(114.75, 63, 140.25);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #9954bb;--bs-btn-disabled-border-color: #9954bb}.btn-warning{--bs-btn-color: #fff;--bs-btn-bg: #ff7518;--bs-btn-border-color: #ff7518;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(216.75, 99.45, 20.4);--bs-btn-hover-border-color: rgb(204, 93.6, 19.2);--bs-btn-focus-shadow-rgb: 255, 138, 59;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(204, 93.6, 19.2);--bs-btn-active-border-color: rgb(191.25, 87.75, 18);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #ff7518;--bs-btn-disabled-border-color: #ff7518}.btn-danger{--bs-btn-color: #fff;--bs-btn-bg: #ff0039;--bs-btn-border-color: #ff0039;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(216.75, 0, 48.45);--bs-btn-hover-border-color: rgb(204, 0, 45.6);--bs-btn-focus-shadow-rgb: 255, 38, 87;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(204, 0, 45.6);--bs-btn-active-border-color: rgb(191.25, 0, 42.75);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #ff0039;--bs-btn-disabled-border-color: #ff0039}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: rgb(210.8, 211.65, 212.5);--bs-btn-hover-border-color: rgb(198.4, 199.2, 200);--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: rgb(198.4, 199.2, 200);--bs-btn-active-border-color: rgb(186, 186.75, 187.5);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-dark{--bs-btn-color: #fff;--bs-btn-bg: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(82.45, 87.55, 92.65);--bs-btn-hover-border-color: rgb(72.3, 77.7, 83.1);--bs-btn-focus-shadow-rgb: 82, 88, 93;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(92.6, 97.4, 102.2);--bs-btn-active-border-color: rgb(72.3, 77.7, 83.1);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #343a40;--bs-btn-disabled-border-color: #343a40}.btn-outline-default{--bs-btn-color: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #343a40;--bs-btn-hover-border-color: #343a40;--bs-btn-focus-shadow-rgb: 52, 58, 64;--bs-btn-active-color: #fff;--bs-btn-active-bg: #343a40;--bs-btn-active-border-color: #343a40;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #343a40;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #343a40;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-primary{--bs-btn-color: #2780e3;--bs-btn-border-color: #2780e3;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #2780e3;--bs-btn-hover-border-color: #2780e3;--bs-btn-focus-shadow-rgb: 39, 128, 227;--bs-btn-active-color: #fff;--bs-btn-active-bg: #2780e3;--bs-btn-active-border-color: #2780e3;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #2780e3;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #2780e3;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-secondary{--bs-btn-color: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #343a40;--bs-btn-hover-border-color: #343a40;--bs-btn-focus-shadow-rgb: 52, 58, 64;--bs-btn-active-color: #fff;--bs-btn-active-bg: #343a40;--bs-btn-active-border-color: #343a40;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #343a40;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #343a40;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-success{--bs-btn-color: #3fb618;--bs-btn-border-color: #3fb618;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #3fb618;--bs-btn-hover-border-color: #3fb618;--bs-btn-focus-shadow-rgb: 63, 182, 24;--bs-btn-active-color: #fff;--bs-btn-active-bg: #3fb618;--bs-btn-active-border-color: #3fb618;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #3fb618;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #3fb618;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-info{--bs-btn-color: #9954bb;--bs-btn-border-color: #9954bb;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #9954bb;--bs-btn-hover-border-color: #9954bb;--bs-btn-focus-shadow-rgb: 153, 84, 187;--bs-btn-active-color: #fff;--bs-btn-active-bg: #9954bb;--bs-btn-active-border-color: #9954bb;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #9954bb;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #9954bb;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-warning{--bs-btn-color: #ff7518;--bs-btn-border-color: #ff7518;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #ff7518;--bs-btn-hover-border-color: #ff7518;--bs-btn-focus-shadow-rgb: 255, 117, 24;--bs-btn-active-color: #fff;--bs-btn-active-bg: #ff7518;--bs-btn-active-border-color: #ff7518;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ff7518;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ff7518;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-danger{--bs-btn-color: #ff0039;--bs-btn-border-color: #ff0039;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #ff0039;--bs-btn-hover-border-color: #ff0039;--bs-btn-focus-shadow-rgb: 255, 0, 57;--bs-btn-active-color: #fff;--bs-btn-active-bg: #ff0039;--bs-btn-active-border-color: #ff0039;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ff0039;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ff0039;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-light{--bs-btn-color: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #f8f9fa;--bs-btn-hover-border-color: #f8f9fa;--bs-btn-focus-shadow-rgb: 248, 249, 250;--bs-btn-active-color: #000;--bs-btn-active-bg: #f8f9fa;--bs-btn-active-border-color: #f8f9fa;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #f8f9fa;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #f8f9fa;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-dark{--bs-btn-color: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #343a40;--bs-btn-hover-border-color: #343a40;--bs-btn-focus-shadow-rgb: 52, 58, 64;--bs-btn-active-color: #fff;--bs-btn-active-bg: #343a40;--bs-btn-active-border-color: #343a40;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #343a40;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #343a40;--bs-btn-bg: transparent;--bs-gradient: none}.btn-link{--bs-btn-font-weight: 400;--bs-btn-color: #2761e3;--bs-btn-bg: transparent;--bs-btn-border-color: transparent;--bs-btn-hover-color: rgb(31.2, 77.6, 181.6);--bs-btn-hover-border-color: transparent;--bs-btn-active-color: rgb(31.2, 77.6, 181.6);--bs-btn-active-border-color: transparent;--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-border-color: transparent;--bs-btn-box-shadow: 0 0 0 #000;--bs-btn-focus-shadow-rgb: 71, 121, 231;text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y: 0.5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius: 0.5rem}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: 0.25rem;--bs-btn-padding-x: 0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius: 0.2em}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .2s ease}@media(prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media(prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart,.dropup-center,.dropdown-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid rgba(0,0,0,0);border-bottom:0;border-left:.3em solid rgba(0,0,0,0)}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex: 1000;--bs-dropdown-min-width: 10rem;--bs-dropdown-padding-x: 0;--bs-dropdown-padding-y: 0.5rem;--bs-dropdown-spacer: 0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color: #343a40;--bs-dropdown-bg: #fff;--bs-dropdown-border-color: rgba(0, 0, 0, 0.175);--bs-dropdown-border-radius: 0.25rem;--bs-dropdown-border-width: 1px;--bs-dropdown-inner-border-radius: calc(0.25rem - 1px);--bs-dropdown-divider-bg: rgba(0, 0, 0, 0.175);--bs-dropdown-divider-margin-y: 0.5rem;--bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-dropdown-link-color: #343a40;--bs-dropdown-link-hover-color: #343a40;--bs-dropdown-link-hover-bg: #f8f9fa;--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #2780e3;--bs-dropdown-link-disabled-color: rgba(52, 58, 64, 0.5);--bs-dropdown-item-padding-x: 1rem;--bs-dropdown-item-padding-y: 0.25rem;--bs-dropdown-header-color: #6c757d;--bs-dropdown-header-padding-x: 1rem;--bs-dropdown-header-padding-y: 0.5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media(min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid rgba(0,0,0,0);border-bottom:.3em solid;border-left:.3em solid rgba(0,0,0,0)}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:0;border-bottom:.3em solid rgba(0,0,0,0);border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:.3em solid;border-bottom:.3em solid rgba(0,0,0,0)}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap;background-color:rgba(0,0,0,0);border:0}.dropdown-item:hover,.dropdown-item:focus{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:rgba(0,0,0,0)}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:0.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color: #dee2e6;--bs-dropdown-bg: #343a40;--bs-dropdown-border-color: rgba(0, 0, 0, 0.175);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color: #dee2e6;--bs-dropdown-link-hover-color: #fff;--bs-dropdown-divider-bg: rgba(0, 0, 0, 0.175);--bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #2780e3;--bs-dropdown-link-disabled-color: #adb5bd;--bs-dropdown-header-color: #adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;justify-content:flex-start;-webkit-justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(1px*-1)}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;-webkit-flex-direction:column;align-items:flex-start;-webkit-align-items:flex-start;justify-content:center;-webkit-justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(1px*-1)}.nav{--bs-nav-link-padding-x: 1rem;--bs-nav-link-padding-y: 0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: #2761e3;--bs-nav-link-hover-color: rgb(31.2, 77.6, 181.6);--bs-nav-link-disabled-color: rgba(52, 58, 64, 0.75);display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background:none;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media(prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(39,128,227,.25)}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width: 1px;--bs-nav-tabs-border-color: #dee2e6;--bs-nav-tabs-border-radius: 0.25rem;--bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;--bs-nav-tabs-link-active-color: #000;--bs-nav-tabs-link-active-bg: #fff;--bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff;border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1*var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid rgba(0,0,0,0)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1*var(--bs-nav-tabs-border-width))}.nav-pills{--bs-nav-pills-border-radius: 0.25rem;--bs-nav-pills-link-active-color: #fff;--bs-nav-pills-link-active-bg: #2780e3}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap: 1rem;--bs-nav-underline-border-width: 0.125rem;--bs-nav-underline-link-active-color: #000;gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid rgba(0,0,0,0)}.nav-underline .nav-link:hover,.nav-underline .nav-link:focus{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;-webkit-flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;-webkit-flex-basis:0;flex-grow:1;-webkit-flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x: 0;--bs-navbar-padding-y: 0.5rem;--bs-navbar-color: rgb(84.32, 84.66, 85);--bs-navbar-hover-color: rgba(31.2, 77.6, 181.6, 0.8);--bs-navbar-disabled-color: rgba(84.32, 84.66, 85, 0.75);--bs-navbar-active-color: rgb(31.2, 77.6, 181.6);--bs-navbar-brand-padding-y: 0.3125rem;--bs-navbar-brand-margin-end: 1rem;--bs-navbar-brand-font-size: 1.25rem;--bs-navbar-brand-color: rgb(84.32, 84.66, 85);--bs-navbar-brand-hover-color: rgb(31.2, 77.6, 181.6);--bs-navbar-nav-link-padding-x: 0.5rem;--bs-navbar-toggler-padding-y: 0.25;--bs-navbar-toggler-padding-x: 0;--bs-navbar-toggler-font-size: 1.25rem;--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgb%2884.32, 84.66, 85%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color: rgba(84.32, 84.66, 85, 0);--bs-navbar-toggler-border-radius: 0.25rem;--bs-navbar-toggler-focus-width: 0.25rem;--bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;display:-webkit-flex;flex-wrap:inherit;-webkit-flex-wrap:inherit;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x: 0;--bs-nav-link-padding-y: 0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-navbar-color);--bs-nav-link-hover-color: var(--bs-navbar-hover-color);--bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;-webkit-flex-basis:100%;flex-grow:1;-webkit-flex-grow:1;align-items:center;-webkit-align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:rgba(0,0,0,0);border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);transition:var(--bs-navbar-toggler-transition)}@media(prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media(min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color: rgb(84.32, 84.66, 85);--bs-navbar-hover-color: rgba(31.2, 77.6, 181.6, 0.8);--bs-navbar-disabled-color: rgba(84.32, 84.66, 85, 0.75);--bs-navbar-active-color: rgb(31.2, 77.6, 181.6);--bs-navbar-brand-color: rgb(84.32, 84.66, 85);--bs-navbar-brand-hover-color: rgb(31.2, 77.6, 181.6);--bs-navbar-toggler-border-color: rgba(84.32, 84.66, 85, 0);--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgb%2884.32, 84.66, 85%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgb%2884.32, 84.66, 85%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: 0.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: 1px;--bs-card-border-color: rgba(0, 0, 0, 0.175);--bs-card-border-radius: 0.25rem;--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(0.25rem - 1px);--bs-card-cap-padding-y: 0.5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(52, 58, 64, 0.25);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: #fff;--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: 0.75rem;position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0}.card>.list-group:last-child{border-bottom-width:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;-webkit-flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-0.5*var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header-tabs{margin-right:calc(-0.5*var(--bs-card-cap-padding-x));margin-bottom:calc(-1*var(--bs-card-cap-padding-y));margin-left:calc(-0.5*var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-0.5*var(--bs-card-cap-padding-x));margin-left:calc(-0.5*var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media(min-width: 576px){.card-group{display:flex;display:-webkit-flex;flex-flow:row wrap;-webkit-flex-flow:row wrap}.card-group>.card{flex:1 0 0%;-webkit-flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}}.accordion{--bs-accordion-color: #343a40;--bs-accordion-bg: #fff;--bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;--bs-accordion-border-color: #dee2e6;--bs-accordion-border-width: 1px;--bs-accordion-border-radius: 0.25rem;--bs-accordion-inner-border-radius: calc(0.25rem - 1px);--bs-accordion-btn-padding-x: 1.25rem;--bs-accordion-btn-padding-y: 1rem;--bs-accordion-btn-color: #343a40;--bs-accordion-btn-bg: #fff;--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23343a40'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width: 1.25rem;--bs-accordion-btn-icon-transform: rotate(-180deg);--bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='rgb%2815.6, 51.2, 90.8%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-focus-border-color: rgb(147, 191.5, 241);--bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.25);--bs-accordion-body-padding-x: 1.25rem;--bs-accordion-body-padding-y: 1rem;--bs-accordion-active-color: rgb(15.6, 51.2, 90.8);--bs-accordion-active-bg: rgb(211.8, 229.6, 249.4)}.accordion-button{position:relative;display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media(prefers-reduced-motion: reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1*var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;-webkit-flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media(prefers-reduced-motion: reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:var(--bs-accordion-btn-focus-border-color);outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:not(:first-of-type){border-top:0}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}[data-bs-theme=dark] .accordion-button::after{--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='rgb%28125.4, 178.8, 238.2%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='rgb%28125.4, 178.8, 238.2%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x: 0;--bs-breadcrumb-padding-y: 0;--bs-breadcrumb-margin-bottom: 1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color: rgba(52, 58, 64, 0.75);--bs-breadcrumb-item-padding-x: 0.5rem;--bs-breadcrumb-item-active-color: rgba(52, 58, 64, 0.75);display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, ">") /* rtl: var(--bs-breadcrumb-divider, ">") */}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x: 0.75rem;--bs-pagination-padding-y: 0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color: #2761e3;--bs-pagination-bg: #fff;--bs-pagination-border-width: 1px;--bs-pagination-border-color: #dee2e6;--bs-pagination-border-radius: 0.25rem;--bs-pagination-hover-color: rgb(31.2, 77.6, 181.6);--bs-pagination-hover-bg: #f8f9fa;--bs-pagination-hover-border-color: #dee2e6;--bs-pagination-focus-color: rgb(31.2, 77.6, 181.6);--bs-pagination-focus-bg: #e9ecef;--bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.25);--bs-pagination-active-color: #fff;--bs-pagination-active-bg: #2780e3;--bs-pagination-active-border-color: #2780e3;--bs-pagination-disabled-color: rgba(52, 58, 64, 0.75);--bs-pagination-disabled-bg: #e9ecef;--bs-pagination-disabled-border-color: #dee2e6;display:flex;display:-webkit-flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.page-link.active,.active>.page-link{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.page-link.disabled,.disabled>.page-link{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(1px*-1)}.pagination-lg{--bs-pagination-padding-x: 1.5rem;--bs-pagination-padding-y: 0.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius: 0.5rem}.pagination-sm{--bs-pagination-padding-x: 0.5rem;--bs-pagination-padding-y: 0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius: 0.2em}.badge{--bs-badge-padding-x: 0.65em;--bs-badge-padding-y: 0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight: 700;--bs-badge-color: #fff;--bs-badge-border-radius: 0.25rem;display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg: transparent;--bs-alert-padding-x: 1rem;--bs-alert-padding-y: 1rem;--bs-alert-margin-bottom: 1rem;--bs-alert-color: inherit;--bs-alert-border-color: transparent;--bs-alert-border: 0 solid var(--bs-alert-border-color);--bs-alert-border-radius: 0.25rem;--bs-alert-link-color: inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-default{--bs-alert-color: var(--bs-default-text-emphasis);--bs-alert-bg: var(--bs-default-bg-subtle);--bs-alert-border-color: var(--bs-default-border-subtle);--bs-alert-link-color: var(--bs-default-text-emphasis)}.alert-primary{--bs-alert-color: var(--bs-primary-text-emphasis);--bs-alert-bg: var(--bs-primary-bg-subtle);--bs-alert-border-color: var(--bs-primary-border-subtle);--bs-alert-link-color: var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color: var(--bs-secondary-text-emphasis);--bs-alert-bg: var(--bs-secondary-bg-subtle);--bs-alert-border-color: var(--bs-secondary-border-subtle);--bs-alert-link-color: var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color: var(--bs-success-text-emphasis);--bs-alert-bg: var(--bs-success-bg-subtle);--bs-alert-border-color: var(--bs-success-border-subtle);--bs-alert-link-color: var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color: var(--bs-info-text-emphasis);--bs-alert-bg: var(--bs-info-bg-subtle);--bs-alert-border-color: var(--bs-info-border-subtle);--bs-alert-link-color: var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color: var(--bs-warning-text-emphasis);--bs-alert-bg: var(--bs-warning-bg-subtle);--bs-alert-border-color: var(--bs-warning-border-subtle);--bs-alert-link-color: var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color: var(--bs-danger-text-emphasis);--bs-alert-bg: var(--bs-danger-bg-subtle);--bs-alert-border-color: var(--bs-danger-border-subtle);--bs-alert-link-color: var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color: var(--bs-light-text-emphasis);--bs-alert-bg: var(--bs-light-bg-subtle);--bs-alert-border-color: var(--bs-light-border-subtle);--bs-alert-link-color: var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color: var(--bs-dark-text-emphasis);--bs-alert-bg: var(--bs-dark-bg-subtle);--bs-alert-border-color: var(--bs-dark-border-subtle);--bs-alert-link-color: var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:.5rem}}.progress,.progress-stacked{--bs-progress-height: 0.5rem;--bs-progress-font-size:0.75rem;--bs-progress-bg: #e9ecef;--bs-progress-border-radius: 0.25rem;--bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-progress-bar-color: #fff;--bs-progress-bar-bg: #2780e3;--bs-progress-bar-transition: width 0.6s ease;display:flex;display:-webkit-flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg)}.progress-bar{display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;justify-content:center;-webkit-justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media(prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media(prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color: #343a40;--bs-list-group-bg: #fff;--bs-list-group-border-color: #dee2e6;--bs-list-group-border-width: 1px;--bs-list-group-border-radius: 0.25rem;--bs-list-group-item-padding-x: 1rem;--bs-list-group-item-padding-y: 0.5rem;--bs-list-group-action-color: rgba(52, 58, 64, 0.75);--bs-list-group-action-hover-color: #000;--bs-list-group-action-hover-bg: #f8f9fa;--bs-list-group-action-active-color: #343a40;--bs-list-group-action-active-bg: #e9ecef;--bs-list-group-disabled-color: rgba(52, 58, 64, 0.75);--bs-list-group-disabled-bg: #fff;--bs-list-group-active-color: #fff;--bs-list-group-active-bg: #2780e3;--bs-list-group-active-border-color: #2780e3;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1*var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media(min-width: 576px){.list-group-horizontal-sm{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 768px){.list-group-horizontal-md{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 992px){.list-group-horizontal-lg{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 1200px){.list-group-horizontal-xl{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-default{--bs-list-group-color: var(--bs-default-text-emphasis);--bs-list-group-bg: var(--bs-default-bg-subtle);--bs-list-group-border-color: var(--bs-default-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-default-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-default-border-subtle);--bs-list-group-active-color: var(--bs-default-bg-subtle);--bs-list-group-active-bg: var(--bs-default-text-emphasis);--bs-list-group-active-border-color: var(--bs-default-text-emphasis)}.list-group-item-primary{--bs-list-group-color: var(--bs-primary-text-emphasis);--bs-list-group-bg: var(--bs-primary-bg-subtle);--bs-list-group-border-color: var(--bs-primary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-primary-border-subtle);--bs-list-group-active-color: var(--bs-primary-bg-subtle);--bs-list-group-active-bg: var(--bs-primary-text-emphasis);--bs-list-group-active-border-color: var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color: var(--bs-secondary-text-emphasis);--bs-list-group-bg: var(--bs-secondary-bg-subtle);--bs-list-group-border-color: var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-secondary-border-subtle);--bs-list-group-active-color: var(--bs-secondary-bg-subtle);--bs-list-group-active-bg: var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color: var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color: var(--bs-success-text-emphasis);--bs-list-group-bg: var(--bs-success-bg-subtle);--bs-list-group-border-color: var(--bs-success-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-success-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-success-border-subtle);--bs-list-group-active-color: var(--bs-success-bg-subtle);--bs-list-group-active-bg: var(--bs-success-text-emphasis);--bs-list-group-active-border-color: var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color: var(--bs-info-text-emphasis);--bs-list-group-bg: var(--bs-info-bg-subtle);--bs-list-group-border-color: var(--bs-info-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-info-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-info-border-subtle);--bs-list-group-active-color: var(--bs-info-bg-subtle);--bs-list-group-active-bg: var(--bs-info-text-emphasis);--bs-list-group-active-border-color: var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color: var(--bs-warning-text-emphasis);--bs-list-group-bg: var(--bs-warning-bg-subtle);--bs-list-group-border-color: var(--bs-warning-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-warning-border-subtle);--bs-list-group-active-color: var(--bs-warning-bg-subtle);--bs-list-group-active-bg: var(--bs-warning-text-emphasis);--bs-list-group-active-border-color: var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color: var(--bs-danger-text-emphasis);--bs-list-group-bg: var(--bs-danger-bg-subtle);--bs-list-group-border-color: var(--bs-danger-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-danger-border-subtle);--bs-list-group-active-color: var(--bs-danger-bg-subtle);--bs-list-group-active-bg: var(--bs-danger-text-emphasis);--bs-list-group-active-border-color: var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color: var(--bs-light-text-emphasis);--bs-list-group-bg: var(--bs-light-bg-subtle);--bs-list-group-border-color: var(--bs-light-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-light-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-light-border-subtle);--bs-list-group-active-color: var(--bs-light-bg-subtle);--bs-list-group-active-bg: var(--bs-light-text-emphasis);--bs-list-group-active-border-color: var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color: var(--bs-dark-text-emphasis);--bs-list-group-bg: var(--bs-dark-bg-subtle);--bs-list-group-border-color: var(--bs-dark-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-dark-border-subtle);--bs-list-group-active-color: var(--bs-dark-bg-subtle);--bs-list-group-active-bg: var(--bs-dark-text-emphasis);--bs-list-group-active-border-color: var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color: #000;--bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--bs-btn-close-opacity: 0.5;--bs-btn-close-hover-opacity: 0.75;--bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.25);--bs-btn-close-focus-opacity: 1;--bs-btn-close-disabled-opacity: 0.25;--bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:rgba(0,0,0,0) var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{filter:var(--bs-btn-close-white-filter)}[data-bs-theme=dark] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex: 1090;--bs-toast-padding-x: 0.75rem;--bs-toast-padding-y: 0.5rem;--bs-toast-spacing: 1.5rem;--bs-toast-max-width: 350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg: rgba(255, 255, 255, 0.85);--bs-toast-border-width: 1px;--bs-toast-border-color: rgba(0, 0, 0, 0.175);--bs-toast-border-radius: 0.25rem;--bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-toast-header-color: rgba(52, 58, 64, 0.75);--bs-toast-header-bg: rgba(255, 255, 255, 0.85);--bs-toast-header-border-color: rgba(0, 0, 0, 0.175);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex: 1090;position:absolute;z-index:var(--bs-toast-zindex);width:max-content;width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:-o-max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color)}.toast-header .btn-close{margin-right:calc(-0.5*var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex: 1055;--bs-modal-width: 500px;--bs-modal-padding: 1rem;--bs-modal-margin: 0.5rem;--bs-modal-color: ;--bs-modal-bg: #fff;--bs-modal-border-color: rgba(0, 0, 0, 0.175);--bs-modal-border-width: 1px;--bs-modal-border-radius: 0.5rem;--bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-modal-inner-border-radius: calc(0.5rem - 1px);--bs-modal-header-padding-x: 1rem;--bs-modal-header-padding-y: 1rem;--bs-modal-header-padding: 1rem 1rem;--bs-modal-header-border-color: #dee2e6;--bs-modal-header-border-width: 1px;--bs-modal-title-line-height: 1.5;--bs-modal-footer-gap: 0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color: #dee2e6;--bs-modal-footer-border-width: 1px;position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0, -50px)}@media(prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin)*2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;min-height:calc(100% - var(--bs-modal-margin)*2)}.modal-content{position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);outline:0}.modal-backdrop{--bs-backdrop-zindex: 1050;--bs-backdrop-bg: #000;--bs-backdrop-opacity: 0.5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y)*.5) calc(var(--bs-modal-header-padding-x)*.5);margin:calc(-0.5*var(--bs-modal-header-padding-y)) calc(-0.5*var(--bs-modal-header-padding-x)) calc(-0.5*var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:flex-end;-webkit-justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap)*.5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap)*.5)}@media(min-width: 576px){.modal{--bs-modal-margin: 1.75rem;--bs-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width: 300px}}@media(min-width: 992px){.modal-lg,.modal-xl{--bs-modal-width: 800px}}@media(min-width: 1200px){.modal-xl{--bs-modal-width: 1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0}.modal-fullscreen .modal-body{overflow-y:auto}@media(max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media(max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media(max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media(max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media(max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex: 1080;--bs-tooltip-max-width: 200px;--bs-tooltip-padding-x: 0.5rem;--bs-tooltip-padding-y: 0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color: #fff;--bs-tooltip-bg: #000;--bs-tooltip-border-radius: 0.25rem;--bs-tooltip-opacity: 0.9;--bs-tooltip-arrow-width: 0.8rem;--bs-tooltip-arrow-height: 0.4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:"Source Sans Pro",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:rgba(0,0,0,0);border-style:solid}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow{bottom:calc(-1*var(--bs-tooltip-arrow-height))}.bs-tooltip-top .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow{left:calc(-1*var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-end .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow{top:calc(-1*var(--bs-tooltip-arrow-height))}.bs-tooltip-bottom .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow{right:calc(-1*var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-start .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width)*.5) 0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg)}.popover{--bs-popover-zindex: 1070;--bs-popover-max-width: 276px;--bs-popover-font-size:0.875rem;--bs-popover-bg: #fff;--bs-popover-border-width: 1px;--bs-popover-border-color: rgba(0, 0, 0, 0.175);--bs-popover-border-radius: 0.5rem;--bs-popover-inner-border-radius: calc(0.5rem - 1px);--bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-popover-header-padding-x: 1rem;--bs-popover-header-padding-y: 0.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color: inherit;--bs-popover-header-bg: #e9ecef;--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: 1rem;--bs-popover-body-color: #343a40;--bs-popover-arrow-width: 1rem;--bs-popover-arrow-height: 0.5rem;--bs-popover-arrow-border: var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:"Source Sans Pro",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::before,.popover .popover-arrow::after{position:absolute;display:block;content:"";border-color:rgba(0,0,0,0);border-style:solid;border-width:0}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow{bottom:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow{left:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow{top:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after{border-width:0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-bottom .popover-header::before,.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-0.5*var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow{right:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width)*.5) 0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y;-webkit-touch-action:pan-y;-moz-touch-action:pan-y;-ms-touch-action:pan-y;-o-touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;transition:transform .6s ease-in-out}@media(prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-start),.active.carousel-item-end{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media(prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:center;-webkit-justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease}@media(prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;display:-webkit-flex;justify-content:center;-webkit-justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;-webkit-flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid rgba(0,0,0,0);border-bottom:10px solid rgba(0,0,0,0);opacity:.5;transition:opacity .6s ease}@media(prefers-reduced-motion: reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-prev-icon,.carousel-dark .carousel-control-next-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme=dark] .carousel .carousel-control-prev-icon,[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark].carousel .carousel-control-prev-icon,[data-bs-theme=dark].carousel .carousel-control-next-icon{filter:invert(1) grayscale(100)}[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target],[data-bs-theme=dark].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme=dark] .carousel .carousel-caption,[data-bs-theme=dark].carousel .carousel-caption{color:#000}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -0.125em;--bs-spinner-border-width: 0.25em;--bs-spinner-animation-speed: 0.75s;--bs-spinner-animation-name: spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:rgba(0,0,0,0)}.spinner-border-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem;--bs-spinner-border-width: 0.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -0.125em;--bs-spinner-animation-speed: 0.75s;--bs-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem}@media(prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed: 1.5s}}.offcanvas,.offcanvas-xxl,.offcanvas-xl,.offcanvas-lg,.offcanvas-md,.offcanvas-sm{--bs-offcanvas-zindex: 1045;--bs-offcanvas-width: 400px;--bs-offcanvas-height: 30vh;--bs-offcanvas-padding-x: 1rem;--bs-offcanvas-padding-y: 1rem;--bs-offcanvas-color: #343a40;--bs-offcanvas-bg: #fff;--bs-offcanvas-border-width: 1px;--bs-offcanvas-border-color: rgba(0, 0, 0, 0.175);--bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-offcanvas-transition: transform 0.3s ease-in-out;--bs-offcanvas-title-line-height: 1.5}@media(max-width: 575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 575.98px)and (prefers-reduced-motion: reduce){.offcanvas-sm{transition:none}}@media(max-width: 575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.showing,.offcanvas-sm.show:not(.hiding){transform:none}.offcanvas-sm.showing,.offcanvas-sm.hiding,.offcanvas-sm.show{visibility:visible}}@media(min-width: 576px){.offcanvas-sm{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 767.98px)and (prefers-reduced-motion: reduce){.offcanvas-md{transition:none}}@media(max-width: 767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.showing,.offcanvas-md.show:not(.hiding){transform:none}.offcanvas-md.showing,.offcanvas-md.hiding,.offcanvas-md.show{visibility:visible}}@media(min-width: 768px){.offcanvas-md{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 991.98px)and (prefers-reduced-motion: reduce){.offcanvas-lg{transition:none}}@media(max-width: 991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.showing,.offcanvas-lg.show:not(.hiding){transform:none}.offcanvas-lg.showing,.offcanvas-lg.hiding,.offcanvas-lg.show{visibility:visible}}@media(min-width: 992px){.offcanvas-lg{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 1199.98px)and (prefers-reduced-motion: reduce){.offcanvas-xl{transition:none}}@media(max-width: 1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.showing,.offcanvas-xl.show:not(.hiding){transform:none}.offcanvas-xl.showing,.offcanvas-xl.hiding,.offcanvas-xl.show{visibility:visible}}@media(min-width: 1200px){.offcanvas-xl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 1399.98px)and (prefers-reduced-motion: reduce){.offcanvas-xxl{transition:none}}@media(max-width: 1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.showing,.offcanvas-xxl.show:not(.hiding){transform:none}.offcanvas-xxl.showing,.offcanvas-xxl.hiding,.offcanvas-xxl.show{visibility:visible}}@media(min-width: 1400px){.offcanvas-xxl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}@media(prefers-reduced-motion: reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.showing,.offcanvas.show:not(.hiding){transform:none}.offcanvas.showing,.offcanvas.hiding,.offcanvas.show{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y)*.5) calc(var(--bs-offcanvas-padding-x)*.5);margin-top:calc(-0.5*var(--bs-offcanvas-padding-y));margin-right:calc(-0.5*var(--bs-offcanvas-padding-x));margin-bottom:calc(-0.5*var(--bs-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;-webkit-flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{mask-image:linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);-webkit-mask-image:linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);mask-size:200% 100%;-webkit-mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{mask-position:-200% 0%;-webkit-mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-default{color:#fff !important;background-color:RGBA(var(--bs-default-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-primary{color:#fff !important;background-color:RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-secondary{color:#fff !important;background-color:RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-success{color:#fff !important;background-color:RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-info{color:#fff !important;background-color:RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-warning{color:#fff !important;background-color:RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-danger{color:#fff !important;background-color:RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-light{color:#000 !important;background-color:RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-dark{color:#fff !important;background-color:RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important}.link-default{color:RGBA(var(--bs-default-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-default-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-default:hover,.link-default:focus{color:RGBA(42, 46, 51, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(42, 46, 51, var(--bs-link-underline-opacity, 1)) !important}.link-primary{color:RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-primary:hover,.link-primary:focus{color:RGBA(31, 102, 182, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(31, 102, 182, var(--bs-link-underline-opacity, 1)) !important}.link-secondary{color:RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-secondary:hover,.link-secondary:focus{color:RGBA(42, 46, 51, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(42, 46, 51, var(--bs-link-underline-opacity, 1)) !important}.link-success{color:RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-success:hover,.link-success:focus{color:RGBA(50, 146, 19, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(50, 146, 19, var(--bs-link-underline-opacity, 1)) !important}.link-info{color:RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-info:hover,.link-info:focus{color:RGBA(122, 67, 150, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(122, 67, 150, var(--bs-link-underline-opacity, 1)) !important}.link-warning{color:RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-warning:hover,.link-warning:focus{color:RGBA(204, 94, 19, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(204, 94, 19, var(--bs-link-underline-opacity, 1)) !important}.link-danger{color:RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-danger:hover,.link-danger:focus{color:RGBA(204, 0, 46, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(204, 0, 46, var(--bs-link-underline-opacity, 1)) !important}.link-light{color:RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-light:hover,.link-light:focus{color:RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important}.link-dark{color:RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-dark:hover,.link-dark:focus{color:RGBA(42, 46, 51, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(42, 46, 51, var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;-webkit-align-items:center;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;-webkit-flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media(prefers-reduced-motion: reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--bs-icon-link-transform, translate3d(0.25em, 0, 0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;display:-webkit-flex;flex-direction:row;-webkit-flex-direction:row;align-items:center;-webkit-align-items:center;align-self:stretch;-webkit-align-self:stretch}.vstack{display:flex;display:-webkit-flex;flex:1 1 auto;-webkit-flex:1 1 auto;flex-direction:column;-webkit-flex-direction:column;align-self:stretch;-webkit-align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;-webkit-align-self:stretch;width:1px;min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.object-fit-contain{object-fit:contain !important}.object-fit-cover{object-fit:cover !important}.object-fit-fill{object-fit:fill !important}.object-fit-scale{object-fit:scale-down !important}.object-fit-none{object-fit:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.overflow-x-auto{overflow-x:auto !important}.overflow-x-hidden{overflow-x:hidden !important}.overflow-x-visible{overflow-x:visible !important}.overflow-x-scroll{overflow-x:scroll !important}.overflow-y-auto{overflow-y:auto !important}.overflow-y-hidden{overflow-y:hidden !important}.overflow-y-visible{overflow-y:visible !important}.overflow-y-scroll{overflow-y:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-inline-grid{display:inline-grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15) !important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175) !important}.shadow-none{box-shadow:none !important}.focus-ring-default{--bs-focus-ring-color: rgba(var(--bs-default-rgb), var(--bs-focus-ring-opacity))}.focus-ring-primary{--bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-0{border:0 !important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-top-0{border-top:0 !important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-start-0{border-left:0 !important}.border-default{--bs-border-opacity: 1;border-color:rgba(var(--bs-default-rgb), var(--bs-border-opacity)) !important}.border-primary{--bs-border-opacity: 1;border-color:rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important}.border-secondary{--bs-border-opacity: 1;border-color:rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important}.border-success{--bs-border-opacity: 1;border-color:rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important}.border-info{--bs-border-opacity: 1;border-color:rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important}.border-warning{--bs-border-opacity: 1;border-color:rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important}.border-danger{--bs-border-opacity: 1;border-color:rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important}.border-light{--bs-border-opacity: 1;border-color:rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important}.border-dark{--bs-border-opacity: 1;border-color:rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important}.border-black{--bs-border-opacity: 1;border-color:rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important}.border-white{--bs-border-opacity: 1;border-color:rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle) !important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle) !important}.border-success-subtle{border-color:var(--bs-success-border-subtle) !important}.border-info-subtle{border-color:var(--bs-info-border-subtle) !important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle) !important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle) !important}.border-light-subtle{border-color:var(--bs-light-border-subtle) !important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle) !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.border-opacity-10{--bs-border-opacity: 0.1}.border-opacity-25{--bs-border-opacity: 0.25}.border-opacity-50{--bs-border-opacity: 0.5}.border-opacity-75{--bs-border-opacity: 0.75}.border-opacity-100{--bs-border-opacity: 1}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.row-gap-0{row-gap:0 !important}.row-gap-1{row-gap:.25rem !important}.row-gap-2{row-gap:.5rem !important}.row-gap-3{row-gap:1rem !important}.row-gap-4{row-gap:1.5rem !important}.row-gap-5{row-gap:3rem !important}.column-gap-0{column-gap:0 !important}.column-gap-1{column-gap:.25rem !important}.column-gap-2{column-gap:.5rem !important}.column-gap-3{column-gap:1rem !important}.column-gap-4{column-gap:1.5rem !important}.column-gap-5{column-gap:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.325rem + 0.9vw) !important}.fs-2{font-size:calc(1.29rem + 0.48vw) !important}.fs-3{font-size:calc(1.27rem + 0.24vw) !important}.fs-4{font-size:1.25rem !important}.fs-5{font-size:1.1rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-lighter{font-weight:lighter !important}.fw-light{font-weight:300 !important}.fw-normal{font-weight:400 !important}.fw-medium{font-weight:500 !important}.fw-semibold{font-weight:600 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-default{--bs-text-opacity: 1;color:rgba(var(--bs-default-rgb), var(--bs-text-opacity)) !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--bs-text-opacity: 1;color:hsla(0,0%,100%,.5) !important}.text-body-secondary{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-body-tertiary{--bs-text-opacity: 1;color:var(--bs-tertiary-color) !important}.text-body-emphasis{--bs-text-opacity: 1;color:var(--bs-emphasis-color) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: 0.25}.text-opacity-50{--bs-text-opacity: 0.5}.text-opacity-75{--bs-text-opacity: 0.75}.text-opacity-100{--bs-text-opacity: 1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis) !important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis) !important}.text-success-emphasis{color:var(--bs-success-text-emphasis) !important}.text-info-emphasis{color:var(--bs-info-text-emphasis) !important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis) !important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis) !important}.text-light-emphasis{color:var(--bs-light-text-emphasis) !important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis) !important}.link-opacity-10{--bs-link-opacity: 0.1}.link-opacity-10-hover:hover{--bs-link-opacity: 0.1}.link-opacity-25{--bs-link-opacity: 0.25}.link-opacity-25-hover:hover{--bs-link-opacity: 0.25}.link-opacity-50{--bs-link-opacity: 0.5}.link-opacity-50-hover:hover{--bs-link-opacity: 0.5}.link-opacity-75{--bs-link-opacity: 0.75}.link-opacity-75-hover:hover{--bs-link-opacity: 0.75}.link-opacity-100{--bs-link-opacity: 1}.link-opacity-100-hover:hover{--bs-link-opacity: 1}.link-offset-1{text-underline-offset:.125em !important}.link-offset-1-hover:hover{text-underline-offset:.125em !important}.link-offset-2{text-underline-offset:.25em !important}.link-offset-2-hover:hover{text-underline-offset:.25em !important}.link-offset-3{text-underline-offset:.375em !important}.link-offset-3-hover:hover{text-underline-offset:.375em !important}.link-underline-default{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-default-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-primary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-secondary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-success{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-info{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-warning{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-danger{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-light{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-dark{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important}.link-underline{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-underline-opacity-0{--bs-link-underline-opacity: 0}.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity: 0}.link-underline-opacity-10{--bs-link-underline-opacity: 0.1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity: 0.1}.link-underline-opacity-25{--bs-link-underline-opacity: 0.25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity: 0.25}.link-underline-opacity-50{--bs-link-underline-opacity: 0.5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity: 0.5}.link-underline-opacity-75{--bs-link-underline-opacity: 0.75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity: 0.75}.link-underline-opacity-100{--bs-link-underline-opacity: 1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity: 1}.bg-default{--bs-bg-opacity: 1;background-color:rgba(var(--bs-default-rgb), var(--bs-bg-opacity)) !important}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-body-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-body-tertiary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-opacity-10{--bs-bg-opacity: 0.1}.bg-opacity-25{--bs-bg-opacity: 0.25}.bg-opacity-50{--bs-bg-opacity: 0.5}.bg-opacity-75{--bs-bg-opacity: 0.75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle) !important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle) !important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle) !important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle) !important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle) !important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle) !important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle) !important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle) !important}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:var(--bs-border-radius) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--bs-border-radius-sm) !important}.rounded-2{border-radius:var(--bs-border-radius) !important}.rounded-3{border-radius:var(--bs-border-radius-lg) !important}.rounded-4{border-radius:var(--bs-border-radius-xl) !important}.rounded-5{border-radius:var(--bs-border-radius-xxl) !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:var(--bs-border-radius-pill) !important}.rounded-top{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm) !important;border-top-right-radius:var(--bs-border-radius-sm) !important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg) !important;border-top-right-radius:var(--bs-border-radius-lg) !important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl) !important;border-top-right-radius:var(--bs-border-radius-xl) !important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl) !important;border-top-right-radius:var(--bs-border-radius-xxl) !important}.rounded-top-circle{border-top-left-radius:50% !important;border-top-right-radius:50% !important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill) !important;border-top-right-radius:var(--bs-border-radius-pill) !important}.rounded-end{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm) !important;border-bottom-right-radius:var(--bs-border-radius-sm) !important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg) !important;border-bottom-right-radius:var(--bs-border-radius-lg) !important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl) !important;border-bottom-right-radius:var(--bs-border-radius-xl) !important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-right-radius:var(--bs-border-radius-xxl) !important}.rounded-end-circle{border-top-right-radius:50% !important;border-bottom-right-radius:50% !important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill) !important;border-bottom-right-radius:var(--bs-border-radius-pill) !important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm) !important;border-bottom-left-radius:var(--bs-border-radius-sm) !important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg) !important;border-bottom-left-radius:var(--bs-border-radius-lg) !important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl) !important;border-bottom-left-radius:var(--bs-border-radius-xl) !important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-left-radius:var(--bs-border-radius-xxl) !important}.rounded-bottom-circle{border-bottom-right-radius:50% !important;border-bottom-left-radius:50% !important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill) !important;border-bottom-left-radius:var(--bs-border-radius-pill) !important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm) !important;border-top-left-radius:var(--bs-border-radius-sm) !important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg) !important;border-top-left-radius:var(--bs-border-radius-lg) !important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl) !important;border-top-left-radius:var(--bs-border-radius-xl) !important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl) !important;border-top-left-radius:var(--bs-border-radius-xxl) !important}.rounded-start-circle{border-bottom-left-radius:50% !important;border-top-left-radius:50% !important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill) !important;border-top-left-radius:var(--bs-border-radius-pill) !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}.z-n1{z-index:-1 !important}.z-0{z-index:0 !important}.z-1{z-index:1 !important}.z-2{z-index:2 !important}.z-3{z-index:3 !important}@media(min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.object-fit-sm-contain{object-fit:contain !important}.object-fit-sm-cover{object-fit:cover !important}.object-fit-sm-fill{object-fit:fill !important}.object-fit-sm-scale{object-fit:scale-down !important}.object-fit-sm-none{object-fit:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-inline-grid{display:inline-grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.row-gap-sm-0{row-gap:0 !important}.row-gap-sm-1{row-gap:.25rem !important}.row-gap-sm-2{row-gap:.5rem !important}.row-gap-sm-3{row-gap:1rem !important}.row-gap-sm-4{row-gap:1.5rem !important}.row-gap-sm-5{row-gap:3rem !important}.column-gap-sm-0{column-gap:0 !important}.column-gap-sm-1{column-gap:.25rem !important}.column-gap-sm-2{column-gap:.5rem !important}.column-gap-sm-3{column-gap:1rem !important}.column-gap-sm-4{column-gap:1.5rem !important}.column-gap-sm-5{column-gap:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.object-fit-md-contain{object-fit:contain !important}.object-fit-md-cover{object-fit:cover !important}.object-fit-md-fill{object-fit:fill !important}.object-fit-md-scale{object-fit:scale-down !important}.object-fit-md-none{object-fit:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-inline-grid{display:inline-grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.row-gap-md-0{row-gap:0 !important}.row-gap-md-1{row-gap:.25rem !important}.row-gap-md-2{row-gap:.5rem !important}.row-gap-md-3{row-gap:1rem !important}.row-gap-md-4{row-gap:1.5rem !important}.row-gap-md-5{row-gap:3rem !important}.column-gap-md-0{column-gap:0 !important}.column-gap-md-1{column-gap:.25rem !important}.column-gap-md-2{column-gap:.5rem !important}.column-gap-md-3{column-gap:1rem !important}.column-gap-md-4{column-gap:1.5rem !important}.column-gap-md-5{column-gap:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.object-fit-lg-contain{object-fit:contain !important}.object-fit-lg-cover{object-fit:cover !important}.object-fit-lg-fill{object-fit:fill !important}.object-fit-lg-scale{object-fit:scale-down !important}.object-fit-lg-none{object-fit:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-inline-grid{display:inline-grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.row-gap-lg-0{row-gap:0 !important}.row-gap-lg-1{row-gap:.25rem !important}.row-gap-lg-2{row-gap:.5rem !important}.row-gap-lg-3{row-gap:1rem !important}.row-gap-lg-4{row-gap:1.5rem !important}.row-gap-lg-5{row-gap:3rem !important}.column-gap-lg-0{column-gap:0 !important}.column-gap-lg-1{column-gap:.25rem !important}.column-gap-lg-2{column-gap:.5rem !important}.column-gap-lg-3{column-gap:1rem !important}.column-gap-lg-4{column-gap:1.5rem !important}.column-gap-lg-5{column-gap:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.object-fit-xl-contain{object-fit:contain !important}.object-fit-xl-cover{object-fit:cover !important}.object-fit-xl-fill{object-fit:fill !important}.object-fit-xl-scale{object-fit:scale-down !important}.object-fit-xl-none{object-fit:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-inline-grid{display:inline-grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.row-gap-xl-0{row-gap:0 !important}.row-gap-xl-1{row-gap:.25rem !important}.row-gap-xl-2{row-gap:.5rem !important}.row-gap-xl-3{row-gap:1rem !important}.row-gap-xl-4{row-gap:1.5rem !important}.row-gap-xl-5{row-gap:3rem !important}.column-gap-xl-0{column-gap:0 !important}.column-gap-xl-1{column-gap:.25rem !important}.column-gap-xl-2{column-gap:.5rem !important}.column-gap-xl-3{column-gap:1rem !important}.column-gap-xl-4{column-gap:1.5rem !important}.column-gap-xl-5{column-gap:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.object-fit-xxl-contain{object-fit:contain !important}.object-fit-xxl-cover{object-fit:cover !important}.object-fit-xxl-fill{object-fit:fill !important}.object-fit-xxl-scale{object-fit:scale-down !important}.object-fit-xxl-none{object-fit:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-inline-grid{display:inline-grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.row-gap-xxl-0{row-gap:0 !important}.row-gap-xxl-1{row-gap:.25rem !important}.row-gap-xxl-2{row-gap:.5rem !important}.row-gap-xxl-3{row-gap:1rem !important}.row-gap-xxl-4{row-gap:1.5rem !important}.row-gap-xxl-5{row-gap:3rem !important}.column-gap-xxl-0{column-gap:0 !important}.column-gap-xxl-1{column-gap:.25rem !important}.column-gap-xxl-2{column-gap:.5rem !important}.column-gap-xxl-3{column-gap:1rem !important}.column-gap-xxl-4{column-gap:1.5rem !important}.column-gap-xxl-5{column-gap:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}.bg-default{color:#fff}.bg-primary{color:#fff}.bg-secondary{color:#fff}.bg-success{color:#fff}.bg-info{color:#fff}.bg-warning{color:#fff}.bg-danger{color:#fff}.bg-light{color:#000}.bg-dark{color:#fff}@media(min-width: 1200px){.fs-1{font-size:2rem !important}.fs-2{font-size:1.65rem !important}.fs-3{font-size:1.45rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-inline-grid{display:inline-grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}:root{--bslib-spacer: 1rem;--bslib-mb-spacer: var(--bslib-spacer, 1rem)}.bslib-mb-spacing{margin-bottom:var(--bslib-mb-spacer)}.bslib-gap-spacing{gap:var(--bslib-mb-spacer)}.bslib-gap-spacing>.bslib-mb-spacing,.bslib-gap-spacing>.form-group,.bslib-gap-spacing>p,.bslib-gap-spacing>pre{margin-bottom:0}.html-fill-container>.html-fill-item.bslib-mb-spacing{margin-bottom:0}.tab-content>.tab-pane.html-fill-container{display:none}.tab-content>.active.html-fill-container{display:flex}.tab-content.html-fill-container{padding:0}.bg-blue{--bslib-color-bg: #2780e3;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-blue{--bslib-color-fg: #2780e3;color:var(--bslib-color-fg)}.bg-indigo{--bslib-color-bg: #6610f2;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-indigo{--bslib-color-fg: #6610f2;color:var(--bslib-color-fg)}.bg-purple{--bslib-color-bg: #613d7c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-purple{--bslib-color-fg: #613d7c;color:var(--bslib-color-fg)}.bg-pink{--bslib-color-bg: #e83e8c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-pink{--bslib-color-fg: #e83e8c;color:var(--bslib-color-fg)}.bg-red{--bslib-color-bg: #ff0039;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-red{--bslib-color-fg: #ff0039;color:var(--bslib-color-fg)}.bg-orange{--bslib-color-bg: #f0ad4e;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-orange{--bslib-color-fg: #f0ad4e;color:var(--bslib-color-fg)}.bg-yellow{--bslib-color-bg: #ff7518;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-yellow{--bslib-color-fg: #ff7518;color:var(--bslib-color-fg)}.bg-green{--bslib-color-bg: #3fb618;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-green{--bslib-color-fg: #3fb618;color:var(--bslib-color-fg)}.bg-teal{--bslib-color-bg: #20c997;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-teal{--bslib-color-fg: #20c997;color:var(--bslib-color-fg)}.bg-cyan{--bslib-color-bg: #9954bb;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-cyan{--bslib-color-fg: #9954bb;color:var(--bslib-color-fg)}.text-default{--bslib-color-fg: #343a40}.bg-default{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.text-primary{--bslib-color-fg: #2780e3}.bg-primary{--bslib-color-bg: #2780e3;--bslib-color-fg: #fff}.text-secondary{--bslib-color-fg: #343a40}.bg-secondary{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.text-success{--bslib-color-fg: #3fb618}.bg-success{--bslib-color-bg: #3fb618;--bslib-color-fg: #fff}.text-info{--bslib-color-fg: #9954bb}.bg-info{--bslib-color-bg: #9954bb;--bslib-color-fg: #fff}.text-warning{--bslib-color-fg: #ff7518}.bg-warning{--bslib-color-bg: #ff7518;--bslib-color-fg: #fff}.text-danger{--bslib-color-fg: #ff0039}.bg-danger{--bslib-color-bg: #ff0039;--bslib-color-fg: #fff}.text-light{--bslib-color-fg: #f8f9fa}.bg-light{--bslib-color-bg: #f8f9fa;--bslib-color-fg: #000}.text-dark{--bslib-color-fg: #343a40}.bg-dark{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.bg-gradient-blue-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(64.2, 83.2, 233);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(64.2,83.2,233);color:#fff}.bg-gradient-blue-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(62.2, 101.2, 185.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(62.2,101.2,185.8);color:#fff}.bg-gradient-blue-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(116.2, 101.6, 192.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(116.2,101.6,192.2);color:#fff}.bg-gradient-blue-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(125.4, 76.8, 159);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(125.4,76.8,159);color:#fff}.bg-gradient-blue-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(119.4, 146, 167.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(119.4,146,167.4);color:#fff}.bg-gradient-blue-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(125.4, 123.6, 145.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(125.4,123.6,145.8);color:#fff}.bg-gradient-blue-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(48.6, 149.6, 145.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(48.6,149.6,145.8);color:#fff}.bg-gradient-blue-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(36.2, 157.2, 196.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(36.2,157.2,196.6);color:#fff}.bg-gradient-blue-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(84.6, 110.4, 211);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(84.6,110.4,211);color:#fff}.bg-gradient-indigo-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(76.8, 60.8, 236);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(76.8,60.8,236);color:#fff}.bg-gradient-indigo-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(100, 34, 194.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(100,34,194.8);color:#fff}.bg-gradient-indigo-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(154, 34.4, 201.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(154,34.4,201.2);color:#fff}.bg-gradient-indigo-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(163.2, 9.6, 168);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(163.2,9.6,168);color:#fff}.bg-gradient-indigo-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(157.2, 78.8, 176.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(157.2,78.8,176.4);color:#fff}.bg-gradient-indigo-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(163.2, 56.4, 154.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(163.2,56.4,154.8);color:#fff}.bg-gradient-indigo-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(86.4, 82.4, 154.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(86.4,82.4,154.8);color:#fff}.bg-gradient-indigo-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(74, 90, 205.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(74,90,205.6);color:#fff}.bg-gradient-indigo-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(122.4, 43.2, 220);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(122.4,43.2,220);color:#fff}.bg-gradient-purple-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(73.8, 87.8, 165.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(73.8,87.8,165.2);color:#fff}.bg-gradient-purple-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(99, 43, 171.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(99,43,171.2);color:#fff}.bg-gradient-purple-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(151, 61.4, 130.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(151,61.4,130.4);color:#fff}.bg-gradient-purple-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(160.2, 36.6, 97.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(160.2,36.6,97.2);color:#fff}.bg-gradient-purple-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(154.2, 105.8, 105.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(154.2,105.8,105.6);color:#fff}.bg-gradient-purple-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(160.2, 83.4, 84);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(160.2,83.4,84);color:#fff}.bg-gradient-purple-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(83.4, 109.4, 84);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(83.4,109.4,84);color:#fff}.bg-gradient-purple-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(71, 117, 134.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(71,117,134.8);color:#fff}.bg-gradient-purple-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(119.4, 70.2, 149.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(119.4,70.2,149.2);color:#fff}.bg-gradient-pink-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(154.8, 88.4, 174.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(154.8,88.4,174.8);color:#fff}.bg-gradient-pink-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(180, 43.6, 180.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(180,43.6,180.8);color:#fff}.bg-gradient-pink-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(178, 61.6, 133.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(178,61.6,133.6);color:#fff}.bg-gradient-pink-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(241.2, 37.2, 106.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(241.2,37.2,106.8);color:#fff}.bg-gradient-pink-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(235.2, 106.4, 115.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(235.2,106.4,115.2);color:#fff}.bg-gradient-pink-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(241.2, 84, 93.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(241.2,84,93.6);color:#fff}.bg-gradient-pink-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(164.4, 110, 93.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(164.4,110,93.6);color:#fff}.bg-gradient-pink-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(152, 117.6, 144.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(152,117.6,144.4);color:#fff}.bg-gradient-pink-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(200.4, 70.8, 158.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(200.4,70.8,158.8);color:#fff}.bg-gradient-red-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(168.6, 51.2, 125);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(168.6,51.2,125);color:#fff}.bg-gradient-red-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 6.4, 131);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(193.8,6.4,131);color:#fff}.bg-gradient-red-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(191.8, 24.4, 83.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(191.8,24.4,83.8);color:#fff}.bg-gradient-red-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(245.8, 24.8, 90.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(245.8,24.8,90.2);color:#fff}.bg-gradient-red-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(249, 69.2, 65.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(249,69.2,65.4);color:#fff}.bg-gradient-red-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(255, 46.8, 43.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(255,46.8,43.8);color:#fff}.bg-gradient-red-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(178.2, 72.8, 43.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(178.2,72.8,43.8);color:#fff}.bg-gradient-red-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(165.8, 80.4, 94.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(165.8,80.4,94.6);color:#fff}.bg-gradient-red-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(214.2, 33.6, 109);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(214.2,33.6,109);color:#fff}.bg-gradient-orange-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(159.6, 155, 137.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(159.6,155,137.6);color:#fff}.bg-gradient-orange-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(184.8, 110.2, 143.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(184.8,110.2,143.6);color:#fff}.bg-gradient-orange-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(182.8, 128.2, 96.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(182.8,128.2,96.4);color:#fff}.bg-gradient-orange-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(236.8, 128.6, 102.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(236.8,128.6,102.8);color:#fff}.bg-gradient-orange-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(246, 103.8, 69.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(246,103.8,69.6);color:#fff}.bg-gradient-orange-yellow{--bslib-color-fg: #000;--bslib-color-bg: rgb(246, 150.6, 56.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(246,150.6,56.4);color:#000}.bg-gradient-orange-green{--bslib-color-fg: #000;--bslib-color-bg: rgb(169.2, 176.6, 56.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(169.2,176.6,56.4);color:#000}.bg-gradient-orange-teal{--bslib-color-fg: #000;--bslib-color-bg: rgb(156.8, 184.2, 107.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(156.8,184.2,107.2);color:#000}.bg-gradient-orange-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(205.2, 137.4, 121.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(205.2,137.4,121.6);color:#fff}.bg-gradient-yellow-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(168.6, 121.4, 105.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(168.6,121.4,105.2);color:#fff}.bg-gradient-yellow-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 76.6, 111.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(193.8,76.6,111.2);color:#fff}.bg-gradient-yellow-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(191.8, 94.6, 64);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(191.8,94.6,64);color:#fff}.bg-gradient-yellow-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(245.8, 95, 70.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(245.8,95,70.4);color:#fff}.bg-gradient-yellow-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(255, 70.2, 37.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(255,70.2,37.2);color:#fff}.bg-gradient-yellow-orange{--bslib-color-fg: #000;--bslib-color-bg: rgb(249, 139.4, 45.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(249,139.4,45.6);color:#000}.bg-gradient-yellow-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(178.2, 143, 24);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(178.2,143,24);color:#fff}.bg-gradient-yellow-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(165.8, 150.6, 74.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(165.8,150.6,74.8);color:#fff}.bg-gradient-yellow-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(214.2, 103.8, 89.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(214.2,103.8,89.2);color:#fff}.bg-gradient-green-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(53.4, 160.4, 105.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(53.4,160.4,105.2);color:#fff}.bg-gradient-green-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(78.6, 115.6, 111.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(78.6,115.6,111.2);color:#fff}.bg-gradient-green-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(76.6, 133.6, 64);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(76.6,133.6,64);color:#fff}.bg-gradient-green-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(130.6, 134, 70.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(130.6,134,70.4);color:#fff}.bg-gradient-green-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(139.8, 109.2, 37.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(139.8,109.2,37.2);color:#fff}.bg-gradient-green-orange{--bslib-color-fg: #000;--bslib-color-bg: rgb(133.8, 178.4, 45.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(133.8,178.4,45.6);color:#000}.bg-gradient-green-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(139.8, 156, 24);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(139.8,156,24);color:#fff}.bg-gradient-green-teal{--bslib-color-fg: #000;--bslib-color-bg: rgb(50.6, 189.6, 74.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(50.6,189.6,74.8);color:#000}.bg-gradient-green-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(99, 142.8, 89.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(99,142.8,89.2);color:#fff}.bg-gradient-teal-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(34.8, 171.8, 181.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(34.8,171.8,181.4);color:#fff}.bg-gradient-teal-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(60, 127, 187.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(60,127,187.4);color:#fff}.bg-gradient-teal-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(58, 145, 140.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(58,145,140.2);color:#fff}.bg-gradient-teal-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(112, 145.4, 146.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(112,145.4,146.6);color:#fff}.bg-gradient-teal-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(121.2, 120.6, 113.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(121.2,120.6,113.4);color:#fff}.bg-gradient-teal-orange{--bslib-color-fg: #000;--bslib-color-bg: rgb(115.2, 189.8, 121.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(115.2,189.8,121.8);color:#000}.bg-gradient-teal-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(121.2, 167.4, 100.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(121.2,167.4,100.2);color:#fff}.bg-gradient-teal-green{--bslib-color-fg: #000;--bslib-color-bg: rgb(44.4, 193.4, 100.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(44.4,193.4,100.2);color:#000}.bg-gradient-teal-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(80.4, 154.2, 165.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(80.4,154.2,165.4);color:#fff}.bg-gradient-cyan-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(107.4, 101.6, 203);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(107.4,101.6,203);color:#fff}.bg-gradient-cyan-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(132.6, 56.8, 209);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(132.6,56.8,209);color:#fff}.bg-gradient-cyan-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(130.6, 74.8, 161.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(130.6,74.8,161.8);color:#fff}.bg-gradient-cyan-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(184.6, 75.2, 168.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(184.6,75.2,168.2);color:#fff}.bg-gradient-cyan-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 50.4, 135);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(193.8,50.4,135);color:#fff}.bg-gradient-cyan-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(187.8, 119.6, 143.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(187.8,119.6,143.4);color:#fff}.bg-gradient-cyan-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 97.2, 121.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(193.8,97.2,121.8);color:#fff}.bg-gradient-cyan-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(117, 123.2, 121.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(117,123.2,121.8);color:#fff}.bg-gradient-cyan-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(104.6, 130.8, 172.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(104.6,130.8,172.6);color:#fff}.tab-content>.tab-pane.html-fill-container{display:none}.tab-content>.active.html-fill-container{display:flex}.tab-content.html-fill-container{padding:0}:root{--bslib-spacer: 1rem;--bslib-mb-spacer: var(--bslib-spacer, 1rem)}.bslib-mb-spacing{margin-bottom:var(--bslib-mb-spacer)}.bslib-gap-spacing{gap:var(--bslib-mb-spacer)}.bslib-gap-spacing>.bslib-mb-spacing,.bslib-gap-spacing>.form-group,.bslib-gap-spacing>p,.bslib-gap-spacing>pre{margin-bottom:0}.html-fill-container>.html-fill-item.bslib-mb-spacing{margin-bottom:0}.bg-blue{--bslib-color-bg: #2780e3;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-blue{--bslib-color-fg: #2780e3;color:var(--bslib-color-fg)}.bg-indigo{--bslib-color-bg: #6610f2;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-indigo{--bslib-color-fg: #6610f2;color:var(--bslib-color-fg)}.bg-purple{--bslib-color-bg: #613d7c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-purple{--bslib-color-fg: #613d7c;color:var(--bslib-color-fg)}.bg-pink{--bslib-color-bg: #e83e8c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-pink{--bslib-color-fg: #e83e8c;color:var(--bslib-color-fg)}.bg-red{--bslib-color-bg: #ff0039;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-red{--bslib-color-fg: #ff0039;color:var(--bslib-color-fg)}.bg-orange{--bslib-color-bg: #f0ad4e;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-orange{--bslib-color-fg: #f0ad4e;color:var(--bslib-color-fg)}.bg-yellow{--bslib-color-bg: #ff7518;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-yellow{--bslib-color-fg: #ff7518;color:var(--bslib-color-fg)}.bg-green{--bslib-color-bg: #3fb618;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-green{--bslib-color-fg: #3fb618;color:var(--bslib-color-fg)}.bg-teal{--bslib-color-bg: #20c997;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-teal{--bslib-color-fg: #20c997;color:var(--bslib-color-fg)}.bg-cyan{--bslib-color-bg: #9954bb;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-cyan{--bslib-color-fg: #9954bb;color:var(--bslib-color-fg)}.text-default{--bslib-color-fg: #343a40}.bg-default{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.text-primary{--bslib-color-fg: #2780e3}.bg-primary{--bslib-color-bg: #2780e3;--bslib-color-fg: #fff}.text-secondary{--bslib-color-fg: #343a40}.bg-secondary{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.text-success{--bslib-color-fg: #3fb618}.bg-success{--bslib-color-bg: #3fb618;--bslib-color-fg: #fff}.text-info{--bslib-color-fg: #9954bb}.bg-info{--bslib-color-bg: #9954bb;--bslib-color-fg: #fff}.text-warning{--bslib-color-fg: #ff7518}.bg-warning{--bslib-color-bg: #ff7518;--bslib-color-fg: #fff}.text-danger{--bslib-color-fg: #ff0039}.bg-danger{--bslib-color-bg: #ff0039;--bslib-color-fg: #fff}.text-light{--bslib-color-fg: #f8f9fa}.bg-light{--bslib-color-bg: #f8f9fa;--bslib-color-fg: #000}.text-dark{--bslib-color-fg: #343a40}.bg-dark{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.bg-gradient-blue-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(64.2, 83.2, 233);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(64.2,83.2,233);color:#fff}.bg-gradient-blue-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(62.2, 101.2, 185.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(62.2,101.2,185.8);color:#fff}.bg-gradient-blue-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(116.2, 101.6, 192.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(116.2,101.6,192.2);color:#fff}.bg-gradient-blue-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(125.4, 76.8, 159);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(125.4,76.8,159);color:#fff}.bg-gradient-blue-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(119.4, 146, 167.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(119.4,146,167.4);color:#fff}.bg-gradient-blue-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(125.4, 123.6, 145.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(125.4,123.6,145.8);color:#fff}.bg-gradient-blue-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(48.6, 149.6, 145.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(48.6,149.6,145.8);color:#fff}.bg-gradient-blue-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(36.2, 157.2, 196.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(36.2,157.2,196.6);color:#fff}.bg-gradient-blue-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(84.6, 110.4, 211);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(84.6,110.4,211);color:#fff}.bg-gradient-indigo-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(76.8, 60.8, 236);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(76.8,60.8,236);color:#fff}.bg-gradient-indigo-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(100, 34, 194.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(100,34,194.8);color:#fff}.bg-gradient-indigo-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(154, 34.4, 201.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(154,34.4,201.2);color:#fff}.bg-gradient-indigo-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(163.2, 9.6, 168);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(163.2,9.6,168);color:#fff}.bg-gradient-indigo-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(157.2, 78.8, 176.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(157.2,78.8,176.4);color:#fff}.bg-gradient-indigo-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(163.2, 56.4, 154.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(163.2,56.4,154.8);color:#fff}.bg-gradient-indigo-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(86.4, 82.4, 154.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(86.4,82.4,154.8);color:#fff}.bg-gradient-indigo-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(74, 90, 205.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(74,90,205.6);color:#fff}.bg-gradient-indigo-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(122.4, 43.2, 220);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(122.4,43.2,220);color:#fff}.bg-gradient-purple-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(73.8, 87.8, 165.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(73.8,87.8,165.2);color:#fff}.bg-gradient-purple-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(99, 43, 171.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(99,43,171.2);color:#fff}.bg-gradient-purple-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(151, 61.4, 130.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(151,61.4,130.4);color:#fff}.bg-gradient-purple-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(160.2, 36.6, 97.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(160.2,36.6,97.2);color:#fff}.bg-gradient-purple-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(154.2, 105.8, 105.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(154.2,105.8,105.6);color:#fff}.bg-gradient-purple-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(160.2, 83.4, 84);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(160.2,83.4,84);color:#fff}.bg-gradient-purple-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(83.4, 109.4, 84);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(83.4,109.4,84);color:#fff}.bg-gradient-purple-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(71, 117, 134.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(71,117,134.8);color:#fff}.bg-gradient-purple-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(119.4, 70.2, 149.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(119.4,70.2,149.2);color:#fff}.bg-gradient-pink-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(154.8, 88.4, 174.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(154.8,88.4,174.8);color:#fff}.bg-gradient-pink-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(180, 43.6, 180.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(180,43.6,180.8);color:#fff}.bg-gradient-pink-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(178, 61.6, 133.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(178,61.6,133.6);color:#fff}.bg-gradient-pink-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(241.2, 37.2, 106.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(241.2,37.2,106.8);color:#fff}.bg-gradient-pink-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(235.2, 106.4, 115.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(235.2,106.4,115.2);color:#fff}.bg-gradient-pink-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(241.2, 84, 93.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(241.2,84,93.6);color:#fff}.bg-gradient-pink-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(164.4, 110, 93.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(164.4,110,93.6);color:#fff}.bg-gradient-pink-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(152, 117.6, 144.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(152,117.6,144.4);color:#fff}.bg-gradient-pink-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(200.4, 70.8, 158.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(200.4,70.8,158.8);color:#fff}.bg-gradient-red-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(168.6, 51.2, 125);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(168.6,51.2,125);color:#fff}.bg-gradient-red-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 6.4, 131);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(193.8,6.4,131);color:#fff}.bg-gradient-red-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(191.8, 24.4, 83.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(191.8,24.4,83.8);color:#fff}.bg-gradient-red-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(245.8, 24.8, 90.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(245.8,24.8,90.2);color:#fff}.bg-gradient-red-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(249, 69.2, 65.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(249,69.2,65.4);color:#fff}.bg-gradient-red-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(255, 46.8, 43.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(255,46.8,43.8);color:#fff}.bg-gradient-red-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(178.2, 72.8, 43.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(178.2,72.8,43.8);color:#fff}.bg-gradient-red-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(165.8, 80.4, 94.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(165.8,80.4,94.6);color:#fff}.bg-gradient-red-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(214.2, 33.6, 109);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(214.2,33.6,109);color:#fff}.bg-gradient-orange-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(159.6, 155, 137.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(159.6,155,137.6);color:#fff}.bg-gradient-orange-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(184.8, 110.2, 143.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(184.8,110.2,143.6);color:#fff}.bg-gradient-orange-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(182.8, 128.2, 96.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(182.8,128.2,96.4);color:#fff}.bg-gradient-orange-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(236.8, 128.6, 102.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(236.8,128.6,102.8);color:#fff}.bg-gradient-orange-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(246, 103.8, 69.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(246,103.8,69.6);color:#fff}.bg-gradient-orange-yellow{--bslib-color-fg: #000;--bslib-color-bg: rgb(246, 150.6, 56.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(246,150.6,56.4);color:#000}.bg-gradient-orange-green{--bslib-color-fg: #000;--bslib-color-bg: rgb(169.2, 176.6, 56.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(169.2,176.6,56.4);color:#000}.bg-gradient-orange-teal{--bslib-color-fg: #000;--bslib-color-bg: rgb(156.8, 184.2, 107.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(156.8,184.2,107.2);color:#000}.bg-gradient-orange-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(205.2, 137.4, 121.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(205.2,137.4,121.6);color:#fff}.bg-gradient-yellow-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(168.6, 121.4, 105.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(168.6,121.4,105.2);color:#fff}.bg-gradient-yellow-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 76.6, 111.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(193.8,76.6,111.2);color:#fff}.bg-gradient-yellow-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(191.8, 94.6, 64);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(191.8,94.6,64);color:#fff}.bg-gradient-yellow-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(245.8, 95, 70.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(245.8,95,70.4);color:#fff}.bg-gradient-yellow-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(255, 70.2, 37.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(255,70.2,37.2);color:#fff}.bg-gradient-yellow-orange{--bslib-color-fg: #000;--bslib-color-bg: rgb(249, 139.4, 45.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(249,139.4,45.6);color:#000}.bg-gradient-yellow-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(178.2, 143, 24);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(178.2,143,24);color:#fff}.bg-gradient-yellow-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(165.8, 150.6, 74.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(165.8,150.6,74.8);color:#fff}.bg-gradient-yellow-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(214.2, 103.8, 89.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(214.2,103.8,89.2);color:#fff}.bg-gradient-green-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(53.4, 160.4, 105.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(53.4,160.4,105.2);color:#fff}.bg-gradient-green-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(78.6, 115.6, 111.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(78.6,115.6,111.2);color:#fff}.bg-gradient-green-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(76.6, 133.6, 64);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(76.6,133.6,64);color:#fff}.bg-gradient-green-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(130.6, 134, 70.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(130.6,134,70.4);color:#fff}.bg-gradient-green-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(139.8, 109.2, 37.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(139.8,109.2,37.2);color:#fff}.bg-gradient-green-orange{--bslib-color-fg: #000;--bslib-color-bg: rgb(133.8, 178.4, 45.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(133.8,178.4,45.6);color:#000}.bg-gradient-green-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(139.8, 156, 24);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(139.8,156,24);color:#fff}.bg-gradient-green-teal{--bslib-color-fg: #000;--bslib-color-bg: rgb(50.6, 189.6, 74.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(50.6,189.6,74.8);color:#000}.bg-gradient-green-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(99, 142.8, 89.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(99,142.8,89.2);color:#fff}.bg-gradient-teal-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(34.8, 171.8, 181.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(34.8,171.8,181.4);color:#fff}.bg-gradient-teal-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(60, 127, 187.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(60,127,187.4);color:#fff}.bg-gradient-teal-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(58, 145, 140.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(58,145,140.2);color:#fff}.bg-gradient-teal-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(112, 145.4, 146.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(112,145.4,146.6);color:#fff}.bg-gradient-teal-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(121.2, 120.6, 113.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(121.2,120.6,113.4);color:#fff}.bg-gradient-teal-orange{--bslib-color-fg: #000;--bslib-color-bg: rgb(115.2, 189.8, 121.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(115.2,189.8,121.8);color:#000}.bg-gradient-teal-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(121.2, 167.4, 100.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(121.2,167.4,100.2);color:#fff}.bg-gradient-teal-green{--bslib-color-fg: #000;--bslib-color-bg: rgb(44.4, 193.4, 100.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(44.4,193.4,100.2);color:#000}.bg-gradient-teal-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(80.4, 154.2, 165.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(80.4,154.2,165.4);color:#fff}.bg-gradient-cyan-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(107.4, 101.6, 203);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(107.4,101.6,203);color:#fff}.bg-gradient-cyan-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(132.6, 56.8, 209);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(132.6,56.8,209);color:#fff}.bg-gradient-cyan-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(130.6, 74.8, 161.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(130.6,74.8,161.8);color:#fff}.bg-gradient-cyan-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(184.6, 75.2, 168.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(184.6,75.2,168.2);color:#fff}.bg-gradient-cyan-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 50.4, 135);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(193.8,50.4,135);color:#fff}.bg-gradient-cyan-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(187.8, 119.6, 143.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(187.8,119.6,143.4);color:#fff}.bg-gradient-cyan-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 97.2, 121.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(193.8,97.2,121.8);color:#fff}.bg-gradient-cyan-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(117, 123.2, 121.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(117,123.2,121.8);color:#fff}.bg-gradient-cyan-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(104.6, 130.8, 172.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(104.6,130.8,172.6);color:#fff}:root{--bslib-value-box-shadow: none;--bslib-value-box-border-width-auto-yes: var(--bslib-value-box-border-width-baseline);--bslib-value-box-border-width-auto-no: 0;--bslib-value-box-border-width-baseline: 1px}.bslib-value-box{border-width:var(--bslib-value-box-border-width-auto-no, var(--bslib-value-box-border-width-baseline));container-name:bslib-value-box;container-type:inline-size}.bslib-value-box.card{box-shadow:var(--bslib-value-box-shadow)}.bslib-value-box.border-auto{border-width:var(--bslib-value-box-border-width-auto-yes, var(--bslib-value-box-border-width-baseline))}.bslib-value-box.default{--bslib-value-box-bg-default: var(--bs-card-bg, #fff);--bslib-value-box-border-color-default: var(--bs-card-border-color, rgba(0, 0, 0, 0.175));color:var(--bslib-value-box-color);background-color:var(--bslib-value-box-bg, var(--bslib-value-box-bg-default));border-color:var(--bslib-value-box-border-color, var(--bslib-value-box-border-color-default))}.bslib-value-box .value-box-grid{display:grid;grid-template-areas:"left right";align-items:center;overflow:hidden}.bslib-value-box .value-box-showcase{height:100%;max-height:var(---bslib-value-box-showcase-max-h, 100%)}.bslib-value-box .value-box-showcase,.bslib-value-box .value-box-showcase>.html-fill-item{width:100%}.bslib-value-box[data-full-screen=true] .value-box-showcase{max-height:var(---bslib-value-box-showcase-max-h-fs, 100%)}@media screen and (min-width: 575.98px){@container bslib-value-box (max-width: 300px){.bslib-value-box:not(.showcase-bottom) .value-box-grid{grid-template-columns:1fr !important;grid-template-rows:auto auto;grid-template-areas:"top" "bottom"}.bslib-value-box:not(.showcase-bottom) .value-box-grid .value-box-showcase{grid-area:top !important}.bslib-value-box:not(.showcase-bottom) .value-box-grid .value-box-area{grid-area:bottom !important;justify-content:end}}}.bslib-value-box .value-box-area{justify-content:center;padding:1.5rem 1rem;font-size:.9rem;font-weight:500}.bslib-value-box .value-box-area *{margin-bottom:0;margin-top:0}.bslib-value-box .value-box-title{font-size:1rem;margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2}.bslib-value-box .value-box-title:empty::after{content:" "}.bslib-value-box .value-box-value{font-size:calc(1.29rem + 0.48vw);margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2}@media(min-width: 1200px){.bslib-value-box .value-box-value{font-size:1.65rem}}.bslib-value-box .value-box-value:empty::after{content:" "}.bslib-value-box .value-box-showcase{align-items:center;justify-content:center;margin-top:auto;margin-bottom:auto;padding:1rem}.bslib-value-box .value-box-showcase .bi,.bslib-value-box .value-box-showcase .fa,.bslib-value-box .value-box-showcase .fab,.bslib-value-box .value-box-showcase .fas,.bslib-value-box .value-box-showcase .far{opacity:.85;min-width:50px;max-width:125%}.bslib-value-box .value-box-showcase .bi,.bslib-value-box .value-box-showcase .fa,.bslib-value-box .value-box-showcase .fab,.bslib-value-box .value-box-showcase .fas,.bslib-value-box .value-box-showcase .far{font-size:4rem}.bslib-value-box.showcase-top-right .value-box-grid{grid-template-columns:1fr var(---bslib-value-box-showcase-w, 50%)}.bslib-value-box.showcase-top-right .value-box-grid .value-box-showcase{grid-area:right;margin-left:auto;align-self:start;align-items:end;padding-left:0;padding-bottom:0}.bslib-value-box.showcase-top-right .value-box-grid .value-box-area{grid-area:left;align-self:end}.bslib-value-box.showcase-top-right[data-full-screen=true] .value-box-grid{grid-template-columns:auto var(---bslib-value-box-showcase-w-fs, 1fr)}.bslib-value-box.showcase-top-right[data-full-screen=true] .value-box-grid>div{align-self:center}.bslib-value-box.showcase-top-right:not([data-full-screen=true]) .value-box-showcase{margin-top:0}@container bslib-value-box (max-width: 300px){.bslib-value-box.showcase-top-right:not([data-full-screen=true]) .value-box-grid .value-box-showcase{padding-left:1rem}}.bslib-value-box.showcase-left-center .value-box-grid{grid-template-columns:var(---bslib-value-box-showcase-w, 30%) auto}.bslib-value-box.showcase-left-center[data-full-screen=true] .value-box-grid{grid-template-columns:var(---bslib-value-box-showcase-w-fs, 1fr) auto}.bslib-value-box.showcase-left-center:not([data-fill-screen=true]) .value-box-grid .value-box-showcase{grid-area:left}.bslib-value-box.showcase-left-center:not([data-fill-screen=true]) .value-box-grid .value-box-area{grid-area:right}.bslib-value-box.showcase-bottom .value-box-grid{grid-template-columns:1fr;grid-template-rows:1fr var(---bslib-value-box-showcase-h, auto);grid-template-areas:"top" "bottom";overflow:hidden}.bslib-value-box.showcase-bottom .value-box-grid .value-box-showcase{grid-area:bottom;padding:0;margin:0}.bslib-value-box.showcase-bottom .value-box-grid .value-box-area{grid-area:top}.bslib-value-box.showcase-bottom[data-full-screen=true] .value-box-grid{grid-template-rows:1fr var(---bslib-value-box-showcase-h-fs, 2fr)}.bslib-value-box.showcase-bottom[data-full-screen=true] .value-box-grid .value-box-showcase{padding:1rem}[data-bs-theme=dark] .bslib-value-box{--bslib-value-box-shadow: 0 0.5rem 1rem rgb(0 0 0 / 50%)}@media(min-width: 576px){.nav:not(.nav-hidden){display:flex !important;display:-webkit-flex !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column){float:none !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column)>.bslib-nav-spacer{margin-left:auto !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column)>.form-inline{margin-top:auto;margin-bottom:auto}.nav:not(.nav-hidden).nav-stacked{flex-direction:column;-webkit-flex-direction:column;height:100%}.nav:not(.nav-hidden).nav-stacked>.bslib-nav-spacer{margin-top:auto !important}}.bslib-card{overflow:auto}.bslib-card .card-body+.card-body{padding-top:0}.bslib-card .card-body{overflow:auto}.bslib-card .card-body p{margin-top:0}.bslib-card .card-body p:last-child{margin-bottom:0}.bslib-card .card-body{max-height:var(--bslib-card-body-max-height, none)}.bslib-card[data-full-screen=true]>.card-body{max-height:var(--bslib-card-body-max-height-full-screen, none)}.bslib-card .card-header .form-group{margin-bottom:0}.bslib-card .card-header .selectize-control{margin-bottom:0}.bslib-card .card-header .selectize-control .item{margin-right:1.15rem}.bslib-card .card-footer{margin-top:auto}.bslib-card .bslib-navs-card-title{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}.bslib-card .bslib-navs-card-title .nav{margin-left:auto}.bslib-card .bslib-sidebar-layout:not([data-bslib-sidebar-border=true]){border:none}.bslib-card .bslib-sidebar-layout:not([data-bslib-sidebar-border-radius=true]){border-top-left-radius:0;border-top-right-radius:0}[data-full-screen=true]{position:fixed;inset:3.5rem 1rem 1rem;height:auto !important;max-height:none !important;width:auto !important;z-index:1070}.bslib-full-screen-enter{display:none;position:absolute;bottom:var(--bslib-full-screen-enter-bottom, 0.2rem);right:var(--bslib-full-screen-enter-right, 0);top:var(--bslib-full-screen-enter-top);left:var(--bslib-full-screen-enter-left);color:var(--bslib-color-fg, var(--bs-card-color));background-color:var(--bslib-color-bg, var(--bs-card-bg, var(--bs-body-bg)));border:var(--bs-card-border-width) solid var(--bslib-color-fg, var(--bs-card-border-color));box-shadow:0 2px 4px rgba(0,0,0,.15);margin:.2rem .4rem;padding:.55rem !important;font-size:.8rem;cursor:pointer;opacity:.7;z-index:1070}.bslib-full-screen-enter:hover{opacity:1}.card[data-full-screen=false]:hover>*>.bslib-full-screen-enter{display:block}.bslib-has-full-screen .card:hover>*>.bslib-full-screen-enter{display:none}@media(max-width: 575.98px){.bslib-full-screen-enter{display:none !important}}.bslib-full-screen-exit{position:relative;top:1.35rem;font-size:.9rem;cursor:pointer;text-decoration:none;display:flex;float:right;margin-right:2.15rem;align-items:center;color:rgba(var(--bs-body-bg-rgb), 0.8)}.bslib-full-screen-exit:hover{color:rgba(var(--bs-body-bg-rgb), 1)}.bslib-full-screen-exit svg{margin-left:.5rem;font-size:1.5rem}#bslib-full-screen-overlay{position:fixed;inset:0;background-color:rgba(var(--bs-body-color-rgb), 0.6);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);z-index:1069;animation:bslib-full-screen-overlay-enter 400ms cubic-bezier(0.6, 0.02, 0.65, 1) forwards}@keyframes bslib-full-screen-overlay-enter{0%{opacity:0}100%{opacity:1}}.bslib-grid{display:grid !important;gap:var(--bslib-spacer, 1rem);height:var(--bslib-grid-height)}.bslib-grid.grid{grid-template-columns:repeat(var(--bs-columns, 12), minmax(0, 1fr));grid-template-rows:unset;grid-auto-rows:var(--bslib-grid--row-heights);--bslib-grid--row-heights--xs: unset;--bslib-grid--row-heights--sm: unset;--bslib-grid--row-heights--md: unset;--bslib-grid--row-heights--lg: unset;--bslib-grid--row-heights--xl: unset;--bslib-grid--row-heights--xxl: unset}.bslib-grid.grid.bslib-grid--row-heights--xs{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xs)}@media(min-width: 576px){.bslib-grid.grid.bslib-grid--row-heights--sm{--bslib-grid--row-heights: var(--bslib-grid--row-heights--sm)}}@media(min-width: 768px){.bslib-grid.grid.bslib-grid--row-heights--md{--bslib-grid--row-heights: var(--bslib-grid--row-heights--md)}}@media(min-width: 992px){.bslib-grid.grid.bslib-grid--row-heights--lg{--bslib-grid--row-heights: var(--bslib-grid--row-heights--lg)}}@media(min-width: 1200px){.bslib-grid.grid.bslib-grid--row-heights--xl{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xl)}}@media(min-width: 1400px){.bslib-grid.grid.bslib-grid--row-heights--xxl{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xxl)}}.bslib-grid>*>.shiny-input-container{width:100%}.bslib-grid-item{grid-column:auto/span 1}@media(max-width: 767.98px){.bslib-grid-item{grid-column:1/-1}}@media(max-width: 575.98px){.bslib-grid{grid-template-columns:1fr !important;height:var(--bslib-grid-height-mobile)}.bslib-grid.grid{height:unset !important;grid-auto-rows:var(--bslib-grid--row-heights--xs, auto)}}.accordion .accordion-header{font-size:calc(1.29rem + 0.48vw);margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2;color:var(--bs-heading-color);margin-bottom:0}@media(min-width: 1200px){.accordion .accordion-header{font-size:1.65rem}}.accordion .accordion-icon:not(:empty){margin-right:.75rem;display:flex}.accordion .accordion-button:not(.collapsed){box-shadow:none}.accordion .accordion-button:not(.collapsed):focus{box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.navbar+.container-fluid:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-sm:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-md:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-lg:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-xl:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-xxl:has(>.tab-content>.tab-pane.active.html-fill-container){padding-left:0;padding-right:0}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container{padding:var(--bslib-spacer, 1rem);gap:var(--bslib-spacer, 1rem)}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child){padding:0}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]){border-left:none;border-right:none;border-bottom:none}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]){border-radius:0}.navbar+div>.bslib-sidebar-layout{border-top:var(--bslib-sidebar-border)}html{height:100%}.bslib-page-fill{width:100%;height:100%;margin:0;padding:var(--bslib-spacer, 1rem);gap:var(--bslib-spacer, 1rem)}@media(max-width: 575.98px){.bslib-page-fill{height:var(--bslib-page-fill-mobile-height, auto)}}:root{--bslib-page-sidebar-title-bg: #f8f9fa;--bslib-page-sidebar-title-color: #000}.bslib-page-title{background-color:var(--bslib-page-sidebar-title-bg);color:var(--bslib-page-sidebar-title-color);font-size:1.25rem;font-weight:300;padding:var(--bslib-spacer, 1rem);padding-left:1.5rem;margin-bottom:0;border-bottom:1px solid #dee2e6}.bslib-sidebar-layout{--bslib-sidebar-transition-duration: 500ms;--bslib-sidebar-transition-easing-x: cubic-bezier(0.8, 0.78, 0.22, 1.07);--bslib-sidebar-border: var(--bs-card-border-width, 1px) solid var(--bs-card-border-color, rgba(0, 0, 0, 0.175));--bslib-sidebar-border-radius: var(--bs-border-radius);--bslib-sidebar-vert-border: var(--bs-card-border-width, 1px) solid var(--bs-card-border-color, rgba(0, 0, 0, 0.175));--bslib-sidebar-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.05);--bslib-sidebar-fg: var(--bs-emphasis-color, black);--bslib-sidebar-main-fg: var(--bs-card-color, var(--bs-body-color));--bslib-sidebar-main-bg: var(--bs-card-bg, var(--bs-body-bg));--bslib-sidebar-toggle-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.1);--bslib-sidebar-padding: calc(var(--bslib-spacer) * 1.5);--bslib-sidebar-icon-size: var(--bslib-spacer, 1rem);--bslib-sidebar-icon-button-size: calc(var(--bslib-sidebar-icon-size, 1rem) * 2);--bslib-sidebar-padding-icon: calc(var(--bslib-sidebar-icon-button-size, 2rem) * 1.5);--bslib-collapse-toggle-border-radius: var(--bs-border-radius, 0.25rem);--bslib-collapse-toggle-transform: 0deg;--bslib-sidebar-toggle-transition-easing: cubic-bezier(1, 0, 0, 1);--bslib-collapse-toggle-right-transform: 180deg;--bslib-sidebar-column-main: minmax(0, 1fr);display:grid !important;grid-template-columns:min(100% - var(--bslib-sidebar-icon-size),var(--bslib-sidebar-width, 250px)) var(--bslib-sidebar-column-main);position:relative;transition:grid-template-columns ease-in-out var(--bslib-sidebar-transition-duration);border:var(--bslib-sidebar-border);border-radius:var(--bslib-sidebar-border-radius)}@media(prefers-reduced-motion: reduce){.bslib-sidebar-layout{transition:none}}.bslib-sidebar-layout[data-bslib-sidebar-border=false]{border:none}.bslib-sidebar-layout[data-bslib-sidebar-border-radius=false]{border-radius:initial}.bslib-sidebar-layout>.main,.bslib-sidebar-layout>.sidebar{grid-row:1/2;border-radius:inherit;overflow:auto}.bslib-sidebar-layout>.main{grid-column:2/3;border-top-left-radius:0;border-bottom-left-radius:0;padding:var(--bslib-sidebar-padding);transition:padding var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration);color:var(--bslib-sidebar-main-fg);background-color:var(--bslib-sidebar-main-bg)}.bslib-sidebar-layout>.sidebar{grid-column:1/2;width:100%;height:100%;border-right:var(--bslib-sidebar-vert-border);border-top-right-radius:0;border-bottom-right-radius:0;color:var(--bslib-sidebar-fg);background-color:var(--bslib-sidebar-bg);backdrop-filter:blur(5px)}.bslib-sidebar-layout>.sidebar>.sidebar-content{display:flex;flex-direction:column;gap:var(--bslib-spacer, 1rem);padding:var(--bslib-sidebar-padding);padding-top:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout>.sidebar>.sidebar-content>:last-child:not(.sidebar-title){margin-bottom:0}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion{margin-left:calc(-1*var(--bslib-sidebar-padding));margin-right:calc(-1*var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:last-child{margin-bottom:calc(-1*var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:last-child){margin-bottom:1rem}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion .accordion-body{display:flex;flex-direction:column}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:first-child) .accordion-item:first-child{border-top:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:last-child) .accordion-item:last-child{border-bottom:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.bslib-sidebar-layout>.sidebar>.sidebar-content.has-accordion>.sidebar-title{border-bottom:none;padding-bottom:0}.bslib-sidebar-layout>.sidebar .shiny-input-container{width:100%}.bslib-sidebar-layout[data-bslib-sidebar-open=always]>.sidebar>.sidebar-content{padding-top:var(--bslib-sidebar-padding)}.bslib-sidebar-layout>.collapse-toggle{grid-row:1/2;grid-column:1/2;display:inline-flex;align-items:center;position:absolute;right:calc(var(--bslib-sidebar-icon-size));top:calc(var(--bslib-sidebar-icon-size, 1rem)/2);border:none;border-radius:var(--bslib-collapse-toggle-border-radius);height:var(--bslib-sidebar-icon-button-size, 2rem);width:var(--bslib-sidebar-icon-button-size, 2rem);display:flex;align-items:center;justify-content:center;padding:0;color:var(--bslib-sidebar-fg);background-color:unset;transition:color var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),top var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),right var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),left var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover{background-color:var(--bslib-sidebar-toggle-bg)}.bslib-sidebar-layout>.collapse-toggle>.collapse-icon{opacity:.8;width:var(--bslib-sidebar-icon-size);height:var(--bslib-sidebar-icon-size);transform:rotateY(var(--bslib-collapse-toggle-transform));transition:transform var(--bslib-sidebar-toggle-transition-easing) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover>.collapse-icon{opacity:1}.bslib-sidebar-layout .sidebar-title{font-size:1.25rem;line-height:1.25;margin-top:0;margin-bottom:1rem;padding-bottom:1rem;border-bottom:var(--bslib-sidebar-border)}.bslib-sidebar-layout.sidebar-right{grid-template-columns:var(--bslib-sidebar-column-main) min(100% - var(--bslib-sidebar-icon-size),var(--bslib-sidebar-width, 250px))}.bslib-sidebar-layout.sidebar-right>.main{grid-column:1/2;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:inherit;border-bottom-left-radius:inherit}.bslib-sidebar-layout.sidebar-right>.sidebar{grid-column:2/3;border-right:none;border-left:var(--bslib-sidebar-vert-border);border-top-left-radius:0;border-bottom-left-radius:0}.bslib-sidebar-layout.sidebar-right>.collapse-toggle{grid-column:2/3;left:var(--bslib-sidebar-icon-size);right:unset;border:var(--bslib-collapse-toggle-border)}.bslib-sidebar-layout.sidebar-right>.collapse-toggle>.collapse-icon{transform:rotateY(var(--bslib-collapse-toggle-right-transform))}.bslib-sidebar-layout.sidebar-collapsed{--bslib-collapse-toggle-transform: 180deg;--bslib-collapse-toggle-right-transform: 0deg;--bslib-sidebar-vert-border: none;grid-template-columns:0 minmax(0, 1fr)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right{grid-template-columns:minmax(0, 1fr) 0}.bslib-sidebar-layout.sidebar-collapsed:not(.transitioning)>.sidebar>*{display:none}.bslib-sidebar-layout.sidebar-collapsed>.main{border-radius:inherit}.bslib-sidebar-layout.sidebar-collapsed:not(.sidebar-right)>.main{padding-left:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.main{padding-right:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout.sidebar-collapsed>.collapse-toggle{color:var(--bslib-sidebar-main-fg);top:calc(var(--bslib-sidebar-overlap-counter, 0)*(var(--bslib-sidebar-icon-size) + var(--bslib-sidebar-padding)) + var(--bslib-sidebar-icon-size, 1rem)/2);right:calc(-2.5*var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px))}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.collapse-toggle{left:calc(-2.5*var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px));right:unset}@media(min-width: 576px){.bslib-sidebar-layout.transitioning>.sidebar>.sidebar-content{display:none}}@media(max-width: 575.98px){.bslib-sidebar-layout[data-bslib-sidebar-open=desktop]{--bslib-sidebar-js-init-collapsed: true}.bslib-sidebar-layout>.sidebar,.bslib-sidebar-layout.sidebar-right>.sidebar{border:none}.bslib-sidebar-layout>.main,.bslib-sidebar-layout.sidebar-right>.main{grid-column:1/3}.bslib-sidebar-layout[data-bslib-sidebar-open=always]{display:block !important}.bslib-sidebar-layout[data-bslib-sidebar-open=always]>.sidebar{max-height:var(--bslib-sidebar-max-height-mobile);overflow-y:auto;border-top:var(--bslib-sidebar-vert-border)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]){grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-collapsed)>.sidebar{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-collapsed)>.collapse-toggle{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-right{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed.sidebar-right{grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-right)>.main{padding-left:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-right>.main{padding-right:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always])>.main{opacity:0;transition:opacity var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed>.main{opacity:1}}.html-fill-container{display:flex;flex-direction:column;min-height:0;min-width:0}.html-fill-container>.html-fill-item{flex:1 1 auto;min-height:0;min-width:0}.html-fill-container>:not(.html-fill-item){flex:0 0 auto}.sidebar-item .chapter-number{color:#343a40}.quarto-container{min-height:calc(100vh - 132px)}body.hypothesis-enabled #quarto-header{margin-right:16px}footer.footer .nav-footer,#quarto-header>nav{padding-left:1em;padding-right:1em}footer.footer div.nav-footer p:first-child{margin-top:0}footer.footer div.nav-footer p:last-child{margin-bottom:0}#quarto-content>*{padding-top:14px}#quarto-content>#quarto-sidebar-glass{padding-top:0px}@media(max-width: 991.98px){#quarto-content>*{padding-top:0}#quarto-content .subtitle{padding-top:14px}#quarto-content section:first-of-type h2:first-of-type,#quarto-content section:first-of-type .h2:first-of-type{margin-top:1rem}}.headroom-target,header.headroom{will-change:transform;transition:position 200ms linear;transition:all 200ms linear}header.headroom--pinned{transform:translateY(0%)}header.headroom--unpinned{transform:translateY(-100%)}.navbar-container{width:100%}.navbar-brand{overflow:hidden;text-overflow:ellipsis}.navbar-brand-container{max-width:calc(100% - 115px);min-width:0;display:flex;align-items:center}@media(min-width: 992px){.navbar-brand-container{margin-right:1em}}.navbar-brand.navbar-brand-logo{margin-right:4px;display:inline-flex}.navbar-toggler{flex-basis:content;flex-shrink:0}.navbar .navbar-brand-container{order:2}.navbar .navbar-toggler{order:1}.navbar .navbar-container>.navbar-nav{order:20}.navbar .navbar-container>.navbar-brand-container{margin-left:0 !important;margin-right:0 !important}.navbar .navbar-collapse{order:20}.navbar #quarto-search{order:4;margin-left:auto}.navbar .navbar-toggler{margin-right:.5em}.navbar-collapse .quarto-navbar-tools{margin-left:.5em}.navbar-logo{max-height:24px;width:auto;padding-right:4px}nav .nav-item:not(.compact){padding-top:1px}nav .nav-link i,nav .dropdown-item i{padding-right:1px}.navbar-expand-lg .navbar-nav .nav-link{padding-left:.6rem;padding-right:.6rem}nav .nav-item.compact .nav-link{padding-left:.5rem;padding-right:.5rem;font-size:1.1rem}.navbar .quarto-navbar-tools{order:3}.navbar .quarto-navbar-tools div.dropdown{display:inline-block}.navbar .quarto-navbar-tools .quarto-navigation-tool{color:rgb(84.32,84.66,85)}.navbar .quarto-navbar-tools .quarto-navigation-tool:hover{color:rgb(31.2,77.6,181.6)}.navbar-nav .dropdown-menu{min-width:220px;font-size:.9rem}.navbar .navbar-nav .nav-link.dropdown-toggle::after{opacity:.75;vertical-align:.175em}.navbar ul.dropdown-menu{padding-top:0;padding-bottom:0}.navbar .dropdown-header{text-transform:uppercase;font-size:.8rem;padding:0 .5rem}.navbar .dropdown-item{padding:.4rem .5rem}.navbar .dropdown-item>i.bi{margin-left:.1rem;margin-right:.25em}.sidebar #quarto-search{margin-top:-1px}.sidebar #quarto-search svg.aa-SubmitIcon{width:16px;height:16px}.sidebar-navigation a{color:inherit}.sidebar-title{margin-top:.25rem;padding-bottom:.5rem;font-size:1.3rem;line-height:1.6rem;visibility:visible}.sidebar-title>a{font-size:inherit;text-decoration:none}.sidebar-title .sidebar-tools-main{margin-top:-6px}@media(max-width: 991.98px){#quarto-sidebar div.sidebar-header{padding-top:.2em}}.sidebar-header-stacked .sidebar-title{margin-top:.6rem}.sidebar-logo{max-width:90%;padding-bottom:.5rem}.sidebar-logo-link{text-decoration:none}.sidebar-navigation li a{text-decoration:none}.sidebar-navigation .quarto-navigation-tool{opacity:.7;font-size:.875rem}#quarto-sidebar>nav>.sidebar-tools-main{margin-left:14px}.sidebar-tools-main{display:inline-flex;margin-left:0px;order:2}.sidebar-tools-main:not(.tools-wide){vertical-align:middle}.sidebar-navigation .quarto-navigation-tool.dropdown-toggle::after{display:none}.sidebar.sidebar-navigation>*{padding-top:1em}.sidebar-item{margin-bottom:.2em;line-height:1rem;margin-top:.4rem}.sidebar-section{padding-left:.5em;padding-bottom:.2em}.sidebar-item .sidebar-item-container{display:flex;justify-content:space-between;cursor:pointer}.sidebar-item-toggle:hover{cursor:pointer}.sidebar-item .sidebar-item-toggle .bi{font-size:.7rem;text-align:center}.sidebar-item .sidebar-item-toggle .bi-chevron-right::before{transition:transform 200ms ease}.sidebar-item .sidebar-item-toggle[aria-expanded=false] .bi-chevron-right::before{transform:none}.sidebar-item .sidebar-item-toggle[aria-expanded=true] .bi-chevron-right::before{transform:rotate(90deg)}.sidebar-item-text{width:100%}.sidebar-navigation .sidebar-divider{margin-left:0;margin-right:0;margin-top:.5rem;margin-bottom:.5rem}@media(max-width: 991.98px){.quarto-secondary-nav{display:block}.quarto-secondary-nav button.quarto-search-button{padding-right:0em;padding-left:2em}.quarto-secondary-nav button.quarto-btn-toggle{margin-left:-0.75rem;margin-right:.15rem}.quarto-secondary-nav nav.quarto-title-breadcrumbs{display:none}.quarto-secondary-nav nav.quarto-page-breadcrumbs{display:flex;align-items:center;padding-right:1em;margin-left:-0.25em}.quarto-secondary-nav nav.quarto-page-breadcrumbs a{text-decoration:none}.quarto-secondary-nav nav.quarto-page-breadcrumbs ol.breadcrumb{margin-bottom:0}}@media(min-width: 992px){.quarto-secondary-nav{display:none}}.quarto-title-breadcrumbs .breadcrumb{margin-bottom:.5em;font-size:.9rem}.quarto-title-breadcrumbs .breadcrumb li:last-of-type a{color:#6c757d}.quarto-secondary-nav .quarto-btn-toggle{color:hsl(0,0%,35%)}.quarto-secondary-nav[aria-expanded=false] .quarto-btn-toggle .bi-chevron-right::before{transform:none}.quarto-secondary-nav[aria-expanded=true] .quarto-btn-toggle .bi-chevron-right::before{transform:rotate(90deg)}.quarto-secondary-nav .quarto-btn-toggle .bi-chevron-right::before{transition:transform 200ms ease}.quarto-secondary-nav{cursor:pointer}.no-decor{text-decoration:none}.quarto-secondary-nav-title{margin-top:.3em;color:hsl(0,0%,35%);padding-top:4px}.quarto-secondary-nav nav.quarto-page-breadcrumbs{color:hsl(0,0%,35%)}.quarto-secondary-nav nav.quarto-page-breadcrumbs a{color:hsl(0,0%,35%)}.quarto-secondary-nav nav.quarto-page-breadcrumbs a:hover{color:rgba(32.76,81.48,190.68,.8)}.quarto-secondary-nav nav.quarto-page-breadcrumbs .breadcrumb-item::before{color:hsl(0,0%,55%)}.breadcrumb-item{line-height:1.2rem}div.sidebar-item-container{color:hsl(0,0%,35%)}div.sidebar-item-container:hover,div.sidebar-item-container:focus{color:rgba(32.76,81.48,190.68,.8)}div.sidebar-item-container.disabled{color:hsla(0,0%,35%,.75)}div.sidebar-item-container .active,div.sidebar-item-container .show>.nav-link,div.sidebar-item-container .sidebar-link>code{color:rgb(32.76,81.48,190.68)}div.sidebar.sidebar-navigation.rollup.quarto-sidebar-toggle-contents,nav.sidebar.sidebar-navigation:not(.rollup){background-color:#fff}@media(max-width: 991.98px){.sidebar-navigation .sidebar-item a,.nav-page .nav-page-text,.sidebar-navigation{font-size:1rem}.sidebar-navigation ul.sidebar-section.depth1 .sidebar-section-item{font-size:1.1rem}.sidebar-logo{display:none}.sidebar.sidebar-navigation{position:static;border-bottom:1px solid #dee2e6}.sidebar.sidebar-navigation.collapsing{position:fixed;z-index:1000}.sidebar.sidebar-navigation.show{position:fixed;z-index:1000}.sidebar.sidebar-navigation{min-height:100%}nav.quarto-secondary-nav{background-color:#fff;border-bottom:1px solid #dee2e6}.quarto-banner nav.quarto-secondary-nav{background-color:#f8f9fa;color:rgb(84.32,84.66,85);border-top:1px solid #dee2e6}.sidebar .sidebar-footer{visibility:visible;padding-top:1rem;position:inherit}.sidebar-tools-collapse{display:block}}#quarto-sidebar{transition:width .15s ease-in}#quarto-sidebar>*{padding-right:1em}@media(max-width: 991.98px){#quarto-sidebar .sidebar-menu-container{white-space:nowrap;min-width:225px}#quarto-sidebar.show{transition:width .15s ease-out}}@media(min-width: 992px){#quarto-sidebar{display:flex;flex-direction:column}.nav-page .nav-page-text,.sidebar-navigation .sidebar-section .sidebar-item{font-size:.875rem}.sidebar-navigation .sidebar-item{font-size:.925rem}.sidebar.sidebar-navigation{display:block;position:sticky}.sidebar-search{width:100%}.sidebar .sidebar-footer{visibility:visible}}@media(min-width: 992px){#quarto-sidebar-glass{display:none}}@media(max-width: 991.98px){#quarto-sidebar-glass{position:fixed;top:0;bottom:0;left:0;right:0;background-color:hsla(0,0%,100%,0);transition:background-color .15s ease-in;z-index:-1}#quarto-sidebar-glass.collapsing{z-index:1000}#quarto-sidebar-glass.show{transition:background-color .15s ease-out;background-color:hsla(0,0%,40%,.4);z-index:1000}}.sidebar .sidebar-footer{padding:.5rem 1rem;align-self:flex-end;color:#6c757d;width:100%}.quarto-page-breadcrumbs .breadcrumb-item+.breadcrumb-item,.quarto-page-breadcrumbs .breadcrumb-item{padding-right:.33em;padding-left:0}.quarto-page-breadcrumbs .breadcrumb-item::before{padding-right:.33em}.quarto-sidebar-footer{font-size:.875em}.sidebar-section .bi-chevron-right{vertical-align:middle}.sidebar-section .bi-chevron-right::before{font-size:.9em}.notransition{-webkit-transition:none !important;-moz-transition:none !important;-o-transition:none !important;transition:none !important}.btn:focus:not(:focus-visible){box-shadow:none}.page-navigation{display:flex;justify-content:space-between}.nav-page{padding-bottom:.75em}.nav-page .bi{font-size:1.8rem;vertical-align:middle}.nav-page .nav-page-text{padding-left:.25em;padding-right:.25em}.nav-page a{color:#6c757d;text-decoration:none;display:flex;align-items:center}.nav-page a:hover{color:rgb(31.2,77.6,181.6)}.nav-footer .toc-actions{padding-bottom:.5em;padding-top:.5em}.nav-footer .toc-actions a,.nav-footer .toc-actions a:hover{text-decoration:none}.nav-footer .toc-actions ul{display:flex;list-style:none}.nav-footer .toc-actions ul :first-child{margin-left:auto}.nav-footer .toc-actions ul :last-child{margin-right:auto}.nav-footer .toc-actions ul li{padding-right:1.5em}.nav-footer .toc-actions ul li i.bi{padding-right:.4em}.nav-footer .toc-actions ul li:last-of-type{padding-right:0}.nav-footer{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:baseline;text-align:center;padding-top:.5rem;padding-bottom:.5rem;background-color:#fff}body.nav-fixed{padding-top:64px}.nav-footer-contents{color:#6c757d;margin-top:.25rem}.nav-footer{min-height:3.5em;color:hsl(0,0%,46%)}.nav-footer a{color:hsl(0,0%,46%)}.nav-footer .nav-footer-left{font-size:.825em}.nav-footer .nav-footer-center{font-size:.825em}.nav-footer .nav-footer-right{font-size:.825em}.nav-footer-left .footer-items,.nav-footer-center .footer-items,.nav-footer-right .footer-items{display:inline-flex;padding-top:.3em;padding-bottom:.3em;margin-bottom:0em}.nav-footer-left .footer-items .nav-link,.nav-footer-center .footer-items .nav-link,.nav-footer-right .footer-items .nav-link{padding-left:.6em;padding-right:.6em}@media(min-width: 768px){.nav-footer-left{flex:1 1 0px;text-align:left}}@media(max-width: 575.98px){.nav-footer-left{margin-bottom:1em;flex:100%}}@media(min-width: 768px){.nav-footer-right{flex:1 1 0px;text-align:right}}@media(max-width: 575.98px){.nav-footer-right{margin-bottom:1em;flex:100%}}.nav-footer-center{text-align:center;min-height:3em}@media(min-width: 768px){.nav-footer-center{flex:1 1 0px}}.nav-footer-center .footer-items{justify-content:center}@media(max-width: 767.98px){.nav-footer-center{margin-bottom:1em;flex:100%}}@media(max-width: 767.98px){.nav-footer-center{margin-top:3em;order:10}}.navbar .quarto-reader-toggle.reader .quarto-reader-toggle-btn{background-color:rgb(84.32,84.66,85);border-radius:3px}@media(max-width: 991.98px){.quarto-reader-toggle{display:none}}.quarto-reader-toggle.reader.quarto-navigation-tool .quarto-reader-toggle-btn{background-color:hsl(0,0%,35%);border-radius:3px}.quarto-reader-toggle .quarto-reader-toggle-btn{display:inline-flex;padding-left:.2em;padding-right:.2em;margin-left:-0.2em;margin-right:-0.2em;text-align:center}.navbar .quarto-reader-toggle:not(.reader) .bi::before{background-image:url('data:image/svg+xml,')}.navbar .quarto-reader-toggle.reader .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-reader-toggle:not(.reader) .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-reader-toggle.reader .bi::before{background-image:url('data:image/svg+xml,')}#quarto-back-to-top{display:none;position:fixed;bottom:50px;background-color:#fff;border-radius:.25rem;box-shadow:0 .2rem .5rem #6c757d,0 0 .05rem #6c757d;color:#6c757d;text-decoration:none;font-size:.9em;text-align:center;left:50%;padding:.4rem .8rem;transform:translate(-50%, 0)}#quarto-announcement{padding:.5em;display:flex;justify-content:space-between;margin-bottom:0;font-size:.9em}#quarto-announcement .quarto-announcement-content{margin-right:auto}#quarto-announcement .quarto-announcement-content p{margin-bottom:0}#quarto-announcement .quarto-announcement-icon{margin-right:.5em;font-size:1.2em;margin-top:-0.15em}#quarto-announcement .quarto-announcement-action{cursor:pointer}.aa-DetachedSearchButtonQuery{display:none}.aa-DetachedOverlay ul.aa-List,#quarto-search-results ul.aa-List{list-style:none;padding-left:0}.aa-DetachedOverlay .aa-Panel,#quarto-search-results .aa-Panel{background-color:#fff;position:absolute;z-index:2000}#quarto-search-results .aa-Panel{max-width:400px}#quarto-search input{font-size:.925rem}@media(min-width: 992px){.navbar #quarto-search{margin-left:.25rem;order:999}}.navbar.navbar-expand-sm #quarto-search,.navbar.navbar-expand-md #quarto-search{order:999}@media(min-width: 992px){.navbar .quarto-navbar-tools{order:900}}@media(min-width: 992px){.navbar .quarto-navbar-tools.tools-end{margin-left:auto !important}}@media(max-width: 991.98px){#quarto-sidebar .sidebar-search{display:none}}#quarto-sidebar .sidebar-search .aa-Autocomplete{width:100%}.navbar .aa-Autocomplete .aa-Form{width:180px}.navbar #quarto-search.type-overlay .aa-Autocomplete{width:40px}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form{background-color:inherit;border:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form:focus-within{box-shadow:none;outline:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-InputWrapper{display:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-InputWrapper:focus-within{display:inherit}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-Label svg,.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-LoadingIndicator svg{width:26px;height:26px;color:rgb(84.32,84.66,85);opacity:1}.navbar #quarto-search.type-overlay .aa-Autocomplete svg.aa-SubmitIcon{width:26px;height:26px;color:rgb(84.32,84.66,85);opacity:1}.aa-Autocomplete .aa-Form,.aa-DetachedFormContainer .aa-Form{align-items:center;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;color:#343a40;display:flex;line-height:1em;margin:0;position:relative;width:100%}.aa-Autocomplete .aa-Form:focus-within,.aa-DetachedFormContainer .aa-Form:focus-within{box-shadow:rgba(39,128,227,.6) 0 0 0 1px;outline:currentColor none medium}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix{align-items:center;display:flex;flex-shrink:0;order:1}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-Label,.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-Label,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator{cursor:initial;flex-shrink:0;padding:0;text-align:left}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-Label svg,.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-Label svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator svg{color:#343a40;opacity:.5}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-SubmitButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-SubmitButton{appearance:none;background:none;border:0;margin:0}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator{align-items:center;display:flex;justify-content:center}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator[hidden]{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapper,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper{order:3;position:relative;width:100%}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input{appearance:none;background:none;border:0;color:#343a40;font:inherit;height:calc(1.5em + .1rem + 2px);padding:0;width:100%}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::placeholder,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::placeholder{color:#343a40;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input:focus{border-color:none;box-shadow:none;outline:none}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-decoration,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-cancel-button,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-button,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-decoration,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-decoration,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-cancel-button,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-button,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-decoration{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix{align-items:center;display:flex;order:4}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton{align-items:center;background:none;border:0;color:#343a40;opacity:.8;cursor:pointer;display:flex;margin:0;width:calc(1.5em + .1rem + 2px)}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:hover,.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:hover,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:focus{color:#343a40;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton[hidden]{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton svg{width:calc(1.5em + 0.75rem + calc(1px * 2))}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton{border:none;align-items:center;background:none;color:#343a40;opacity:.4;font-size:.7rem;cursor:pointer;display:none;margin:0;width:calc(1em + .1rem + 2px)}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:hover,.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:hover,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:focus{color:#343a40;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton[hidden]{display:none}.aa-PanelLayout:empty{display:none}.quarto-search-no-results.no-query{display:none}.aa-Source:has(.no-query){display:none}#quarto-search-results .aa-Panel{border:solid #dee2e6 1px}#quarto-search-results .aa-SourceNoResults{width:398px}.aa-DetachedOverlay .aa-Panel,#quarto-search-results .aa-Panel{max-height:65vh;overflow-y:auto;font-size:.925rem}.aa-DetachedOverlay .aa-SourceNoResults,#quarto-search-results .aa-SourceNoResults{height:60px;display:flex;justify-content:center;align-items:center}.aa-DetachedOverlay .search-error,#quarto-search-results .search-error{padding-top:10px;padding-left:20px;padding-right:20px;cursor:default}.aa-DetachedOverlay .search-error .search-error-title,#quarto-search-results .search-error .search-error-title{font-size:1.1rem;margin-bottom:.5rem}.aa-DetachedOverlay .search-error .search-error-title .search-error-icon,#quarto-search-results .search-error .search-error-title .search-error-icon{margin-right:8px}.aa-DetachedOverlay .search-error .search-error-text,#quarto-search-results .search-error .search-error-text{font-weight:300}.aa-DetachedOverlay .search-result-text,#quarto-search-results .search-result-text{font-weight:300;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.2rem;max-height:2.4rem}.aa-DetachedOverlay .aa-SourceHeader .search-result-header,#quarto-search-results .aa-SourceHeader .search-result-header{font-size:.875rem;background-color:hsl(0,0%,95%);padding-left:14px;padding-bottom:4px;padding-top:4px}.aa-DetachedOverlay .aa-SourceHeader .search-result-header-no-results,#quarto-search-results .aa-SourceHeader .search-result-header-no-results{display:none}.aa-DetachedOverlay .aa-SourceFooter .algolia-search-logo,#quarto-search-results .aa-SourceFooter .algolia-search-logo{width:110px;opacity:.85;margin:8px;float:right}.aa-DetachedOverlay .search-result-section,#quarto-search-results .search-result-section{font-size:.925em}.aa-DetachedOverlay a.search-result-link,#quarto-search-results a.search-result-link{color:inherit;text-decoration:none}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item,#quarto-search-results li.aa-Item[aria-selected=true] .search-item{background-color:#2780e3}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item.search-result-more,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-section,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-text,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-title-container,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-text-container,#quarto-search-results li.aa-Item[aria-selected=true] .search-item.search-result-more,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-section,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-text,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-title-container,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-text-container{color:#fff;background-color:#2780e3}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item mark.search-match,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-match.mark,#quarto-search-results li.aa-Item[aria-selected=true] .search-item mark.search-match,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-match.mark{color:#fff;background-color:rgb(75.1180327869,149.2360655738,231.6819672131)}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item,#quarto-search-results li.aa-Item[aria-selected=false] .search-item{background-color:#fff}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item.search-result-more,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-section,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-text,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-title-container,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-text-container,#quarto-search-results li.aa-Item[aria-selected=false] .search-item.search-result-more,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-section,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-text,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-title-container,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-text-container{color:#343a40}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item mark.search-match,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-match.mark,#quarto-search-results li.aa-Item[aria-selected=false] .search-item mark.search-match,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-match.mark{color:inherit;background-color:rgb(228.6196721311,239.4893442623,251.5803278689)}.aa-DetachedOverlay .aa-Item .search-result-doc:not(.document-selectable) .search-result-title-container,#quarto-search-results .aa-Item .search-result-doc:not(.document-selectable) .search-result-title-container{background-color:#fff;color:#343a40}.aa-DetachedOverlay .aa-Item .search-result-doc:not(.document-selectable) .search-result-text-container,#quarto-search-results .aa-Item .search-result-doc:not(.document-selectable) .search-result-text-container{padding-top:0px}.aa-DetachedOverlay li.aa-Item .search-result-doc.document-selectable .search-result-text-container,#quarto-search-results li.aa-Item .search-result-doc.document-selectable .search-result-text-container{margin-top:-4px}.aa-DetachedOverlay .aa-Item,#quarto-search-results .aa-Item{cursor:pointer}.aa-DetachedOverlay .aa-Item .search-item,#quarto-search-results .aa-Item .search-item{border-left:none;border-right:none;border-top:none;background-color:#fff;border-color:#dee2e6;color:#343a40}.aa-DetachedOverlay .aa-Item .search-item p,#quarto-search-results .aa-Item .search-item p{margin-top:0;margin-bottom:0}.aa-DetachedOverlay .aa-Item .search-item i.bi,#quarto-search-results .aa-Item .search-item i.bi{padding-left:8px;padding-right:8px;font-size:1.3em}.aa-DetachedOverlay .aa-Item .search-item .search-result-title,#quarto-search-results .aa-Item .search-item .search-result-title{margin-top:.3em;margin-bottom:0em}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs,#quarto-search-results .aa-Item .search-item .search-result-crumbs{white-space:nowrap;text-overflow:ellipsis;font-size:.8em;font-weight:300;margin-right:1em}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs:not(.search-result-crumbs-wrap),#quarto-search-results .aa-Item .search-item .search-result-crumbs:not(.search-result-crumbs-wrap){max-width:30%;margin-left:auto;margin-top:.5em;margin-bottom:.1rem}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs.search-result-crumbs-wrap,#quarto-search-results .aa-Item .search-item .search-result-crumbs.search-result-crumbs-wrap{flex-basis:100%;margin-top:0em;margin-bottom:.2em;margin-left:37px}.aa-DetachedOverlay .aa-Item .search-result-title-container,#quarto-search-results .aa-Item .search-result-title-container{font-size:1em;display:flex;flex-wrap:wrap;padding:6px 4px 6px 4px}.aa-DetachedOverlay .aa-Item .search-result-text-container,#quarto-search-results .aa-Item .search-result-text-container{padding-bottom:8px;padding-right:8px;margin-left:42px}.aa-DetachedOverlay .aa-Item .search-result-doc-section,.aa-DetachedOverlay .aa-Item .search-result-more,#quarto-search-results .aa-Item .search-result-doc-section,#quarto-search-results .aa-Item .search-result-more{padding-top:8px;padding-bottom:8px;padding-left:44px}.aa-DetachedOverlay .aa-Item .search-result-more,#quarto-search-results .aa-Item .search-result-more{font-size:.8em;font-weight:400}.aa-DetachedOverlay .aa-Item .search-result-doc,#quarto-search-results .aa-Item .search-result-doc{border-top:1px solid #dee2e6}.aa-DetachedSearchButton{background:none;border:none}.aa-DetachedSearchButton .aa-DetachedSearchButtonPlaceholder{display:none}.navbar .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon{color:rgb(84.32,84.66,85)}.sidebar-tools-collapse #quarto-search,.sidebar-tools-main #quarto-search{display:inline}.sidebar-tools-collapse #quarto-search .aa-Autocomplete,.sidebar-tools-main #quarto-search .aa-Autocomplete{display:inline}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton{padding-left:4px;padding-right:4px}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon{color:hsl(0,0%,35%)}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon .aa-SubmitIcon,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon .aa-SubmitIcon{margin-top:-3px}.aa-DetachedContainer{background:hsla(0,0%,100%,.65);width:90%;bottom:0;box-shadow:rgba(222,226,230,.6) 0 0 0 1px;outline:currentColor none medium;display:flex;flex-direction:column;left:0;margin:0;overflow:hidden;padding:0;position:fixed;right:0;top:0;z-index:1101}.aa-DetachedContainer::after{height:32px}.aa-DetachedContainer .aa-SourceHeader{margin:var(--aa-spacing-half) 0 var(--aa-spacing-half) 2px}.aa-DetachedContainer .aa-Panel{background-color:#fff;border-radius:0;box-shadow:none;flex-grow:1;margin:0;padding:0;position:relative}.aa-DetachedContainer .aa-PanelLayout{bottom:0;box-shadow:none;left:0;margin:0;max-height:none;overflow-y:auto;position:absolute;right:0;top:0;width:100%}.aa-DetachedFormContainer{background-color:#fff;border-bottom:1px solid #dee2e6;display:flex;flex-direction:row;justify-content:space-between;margin:0;padding:.5em}.aa-DetachedCancelButton{background:none;font-size:.8em;border:0;border-radius:3px;color:#343a40;cursor:pointer;margin:0 0 0 .5em;padding:0 .5em}.aa-DetachedCancelButton:hover,.aa-DetachedCancelButton:focus{box-shadow:rgba(39,128,227,.6) 0 0 0 1px;outline:currentColor none medium}.aa-DetachedContainer--modal{bottom:inherit;height:auto;margin:0 auto;position:absolute;top:100px;border-radius:6px;max-width:850px}@media(max-width: 575.98px){.aa-DetachedContainer--modal{width:100%;top:0px;border-radius:0px;border:none}}.aa-DetachedContainer--modal .aa-PanelLayout{max-height:var(--aa-detached-modal-max-height);padding-bottom:var(--aa-spacing-half);position:static}.aa-Detached{height:100vh;overflow:hidden}.aa-DetachedOverlay{background-color:rgba(52,58,64,.4);position:fixed;left:0;right:0;top:0;margin:0;padding:0;height:100vh;z-index:1100}.quarto-dashboard.nav-fixed.dashboard-sidebar #quarto-content.quarto-dashboard-content{padding:0em}.quarto-dashboard #quarto-content.quarto-dashboard-content{padding:1em}.quarto-dashboard #quarto-content.quarto-dashboard-content>*{padding-top:0}@media(min-width: 576px){.quarto-dashboard{height:100%}}.quarto-dashboard .card.valuebox.bslib-card.bg-primary{background-color:#5397e9 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-secondary{background-color:#343a40 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-success{background-color:#3aa716 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-info{background-color:rgba(153,84,187,.7019607843) !important}.quarto-dashboard .card.valuebox.bslib-card.bg-warning{background-color:#fa6400 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-danger{background-color:rgba(255,0,57,.7019607843) !important}.quarto-dashboard .card.valuebox.bslib-card.bg-light{background-color:#f8f9fa !important}.quarto-dashboard .card.valuebox.bslib-card.bg-dark{background-color:#343a40 !important}.quarto-dashboard.dashboard-fill{display:flex;flex-direction:column}.quarto-dashboard #quarto-appendix{display:none}.quarto-dashboard #quarto-header #quarto-dashboard-header{border-top:solid 1px rgb(218.25,223.5,228.75);border-bottom:solid 1px rgb(218.25,223.5,228.75)}.quarto-dashboard #quarto-header #quarto-dashboard-header>nav{padding-left:1em;padding-right:1em}.quarto-dashboard #quarto-header #quarto-dashboard-header>nav .navbar-brand-container{padding-left:0}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-toggler{margin-right:0}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-toggler-icon{height:1em;width:1em;background-image:url('data:image/svg+xml,')}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-brand-container{padding-right:1em}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-title{font-size:1.1em}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-nav{font-size:.9em}.quarto-dashboard #quarto-dashboard-header .navbar{padding:0}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-container{padding-left:1em}.quarto-dashboard #quarto-dashboard-header .navbar.slim .navbar-brand-container .nav-link,.quarto-dashboard #quarto-dashboard-header .navbar.slim .navbar-nav .nav-link{padding:.7em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-color-scheme-toggle{order:9}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-toggler{margin-left:.5em;order:10}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-nav .nav-link{padding:.5em;height:100%;display:flex;align-items:center}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-nav .active{background-color:rgb(224.2,228.6,233)}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-brand-container{padding:.5em .5em .5em 0;display:flex;flex-direction:row;margin-right:2em;align-items:center}@media(max-width: 767.98px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-brand-container{margin-right:auto}}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{align-self:stretch}@media(min-width: 768px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{order:8}}@media(max-width: 767.98px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{order:1000;padding-bottom:.5em}}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse .navbar-nav{align-self:stretch}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title{font-size:1.25em;line-height:1.1em;display:flex;flex-direction:row;flex-wrap:wrap;align-items:baseline}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title .navbar-title-text{margin-right:.4em}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title a{text-decoration:none;color:inherit}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-subtitle,.quarto-dashboard #quarto-dashboard-header .navbar .navbar-author{font-size:.9rem;margin-right:.5em}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-author{margin-left:auto}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-logo{max-height:48px;min-height:30px;object-fit:cover;margin-right:1em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-links{order:9;padding-right:1em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-link-text{margin-left:.25em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-link{padding-right:0em;padding-left:.7em;text-decoration:none;color:rgb(84.32,84.66,85)}.quarto-dashboard .page-layout-custom .tab-content{padding:0;border:none}.quarto-dashboard-img-contain{height:100%;width:100%;object-fit:contain}@media(max-width: 575.98px){.quarto-dashboard .bslib-grid{grid-template-rows:minmax(1em, max-content) !important}.quarto-dashboard .sidebar-content{height:inherit}.quarto-dashboard .page-layout-custom{min-height:100vh}}.quarto-dashboard.dashboard-toolbar>.page-layout-custom,.quarto-dashboard.dashboard-sidebar>.page-layout-custom{padding:0}.quarto-dashboard .quarto-dashboard-content.quarto-dashboard-pages{padding:0}.quarto-dashboard .callout{margin-bottom:0;margin-top:0}.quarto-dashboard .html-fill-container figure{overflow:hidden}.quarto-dashboard bslib-tooltip .rounded-pill{border:solid #6c757d 1px}.quarto-dashboard bslib-tooltip .rounded-pill .svg{fill:#343a40}.quarto-dashboard .tabset .dashboard-card-no-title .nav-tabs{margin-left:0;margin-right:auto}.quarto-dashboard .tabset .tab-content{border:none}.quarto-dashboard .tabset .card-header .nav-link[role=tab]{margin-top:-6px;padding-top:6px;padding-bottom:6px}.quarto-dashboard .card.valuebox,.quarto-dashboard .card.bslib-value-box{min-height:3rem}.quarto-dashboard .card.valuebox .card-body,.quarto-dashboard .card.bslib-value-box .card-body{padding:0}.quarto-dashboard .bslib-value-box .value-box-value{font-size:clamp(.1em,15cqw,5em)}.quarto-dashboard .bslib-value-box .value-box-showcase .bi{font-size:clamp(.1em,max(18cqw,5.2cqh),5em);text-align:center;height:1em}.quarto-dashboard .bslib-value-box .value-box-showcase .bi::before{vertical-align:1em}.quarto-dashboard .bslib-value-box .value-box-area{margin-top:auto;margin-bottom:auto}.quarto-dashboard .card figure.quarto-float{display:flex;flex-direction:column;align-items:center}.quarto-dashboard .dashboard-scrolling{padding:1em}.quarto-dashboard .full-height{height:100%}.quarto-dashboard .showcase-bottom .value-box-grid{display:grid;grid-template-columns:1fr;grid-template-rows:1fr auto;grid-template-areas:"top" "bottom"}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-showcase{grid-area:bottom;padding:0;margin:0}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-showcase i.bi{font-size:4rem}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-area{grid-area:top}.quarto-dashboard .tab-content{margin-bottom:0}.quarto-dashboard .bslib-card .bslib-navs-card-title{justify-content:stretch;align-items:end}.quarto-dashboard .card-header{display:flex;flex-wrap:wrap;justify-content:space-between}.quarto-dashboard .card-header .card-title{display:flex;flex-direction:column;justify-content:center;margin-bottom:0}.quarto-dashboard .tabset .card-toolbar{margin-bottom:1em}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout{border:none;gap:var(--bslib-spacer, 1rem)}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.main{padding:0}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.sidebar{border-radius:.25rem;border:1px solid rgba(0,0,0,.175)}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.collapse-toggle{display:none}@media(max-width: 767.98px){.quarto-dashboard .bslib-grid>.bslib-sidebar-layout{grid-template-columns:1fr;grid-template-rows:max-content 1fr}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.main{grid-column:1;grid-row:2}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout .sidebar{grid-column:1;grid-row:1}}.quarto-dashboard .sidebar-right .sidebar{padding-left:2.5em}.quarto-dashboard .sidebar-right .collapse-toggle{left:2px}.quarto-dashboard .quarto-dashboard .sidebar-right button.collapse-toggle:not(.transitioning){left:unset}.quarto-dashboard aside.sidebar{padding-left:1em;padding-right:1em;background-color:rgba(52,58,64,.25);color:#343a40}.quarto-dashboard .bslib-sidebar-layout>div.main{padding:.7em}.quarto-dashboard .bslib-sidebar-layout button.collapse-toggle{margin-top:.3em}.quarto-dashboard .bslib-sidebar-layout .collapse-toggle{top:0}.quarto-dashboard .bslib-sidebar-layout.sidebar-collapsed:not(.transitioning):not(.sidebar-right) .collapse-toggle{left:2px}.quarto-dashboard .sidebar>section>.h3:first-of-type{margin-top:0em}.quarto-dashboard .sidebar .h3,.quarto-dashboard .sidebar .h4,.quarto-dashboard .sidebar .h5,.quarto-dashboard .sidebar .h6{margin-top:.5em}.quarto-dashboard .sidebar form{flex-direction:column;align-items:start;margin-bottom:1em}.quarto-dashboard .sidebar form div[class*=oi-][class$=-input]{flex-direction:column}.quarto-dashboard .sidebar form[class*=oi-][class$=-toggle]{flex-direction:row-reverse;align-items:center;justify-content:start}.quarto-dashboard .sidebar form input[type=range]{margin-top:.5em;margin-right:.8em;margin-left:1em}.quarto-dashboard .sidebar label{width:fit-content}.quarto-dashboard .sidebar .card-body{margin-bottom:2em}.quarto-dashboard .sidebar .shiny-input-container{margin-bottom:1em}.quarto-dashboard .sidebar .shiny-options-group{margin-top:0}.quarto-dashboard .sidebar .control-label{margin-bottom:.3em}.quarto-dashboard .card .card-body .quarto-layout-row{align-items:stretch}.quarto-dashboard .toolbar{font-size:.9em;display:flex;flex-direction:row;border-top:solid 1px hsl(210,3.0456852792%,74.5490196078%);padding:1em;flex-wrap:wrap;background-color:rgba(52,58,64,.25)}.quarto-dashboard .toolbar .cell-output-display{display:flex}.quarto-dashboard .toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .toolbar>*:last-child{margin-right:0}.quarto-dashboard .toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .toolbar .shiny-input-container{padding-bottom:0;margin-bottom:0}.quarto-dashboard .toolbar .shiny-input-container>*{flex-shrink:0;flex-grow:0}.quarto-dashboard .toolbar .form-group.shiny-input-container:not([role=group])>label{margin-bottom:0}.quarto-dashboard .toolbar .shiny-input-container.no-baseline{align-items:start;padding-top:6px}.quarto-dashboard .toolbar .shiny-input-container{display:flex;align-items:baseline}.quarto-dashboard .toolbar .shiny-input-container label{padding-right:.4em}.quarto-dashboard .toolbar .shiny-input-container .bslib-input-switch{margin-top:6px}.quarto-dashboard .toolbar input[type=text]{line-height:1;width:inherit}.quarto-dashboard .toolbar .input-daterange{width:inherit}.quarto-dashboard .toolbar .input-daterange input[type=text]{height:2.4em;width:10em}.quarto-dashboard .toolbar .input-daterange .input-group-addon{height:auto;padding:0;margin-left:-5px !important;margin-right:-5px}.quarto-dashboard .toolbar .input-daterange .input-group-addon .input-group-text{padding-top:0;padding-bottom:0;height:100%}.quarto-dashboard .toolbar span.irs.irs--shiny{width:10em}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-line{top:9px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-min,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-max,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-from,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-to,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-single{top:20px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-bar{top:8px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-handle{top:0px}.quarto-dashboard .toolbar .shiny-input-checkboxgroup>label{margin-top:6px}.quarto-dashboard .toolbar .shiny-input-checkboxgroup>.shiny-options-group{margin-top:0;align-items:baseline}.quarto-dashboard .toolbar .shiny-input-radiogroup>label{margin-top:6px}.quarto-dashboard .toolbar .shiny-input-radiogroup>.shiny-options-group{align-items:baseline;margin-top:0}.quarto-dashboard .toolbar .shiny-input-radiogroup>.shiny-options-group>.radio{margin-right:.3em}.quarto-dashboard .toolbar .form-select{padding-top:.2em;padding-bottom:.2em}.quarto-dashboard .toolbar .shiny-input-select{min-width:6em}.quarto-dashboard .toolbar div.checkbox{margin-bottom:0px}.quarto-dashboard .toolbar>.checkbox:first-child{margin-top:6px}.quarto-dashboard .toolbar form{width:fit-content}.quarto-dashboard .toolbar form label{padding-top:.2em;padding-bottom:.2em;width:fit-content}.quarto-dashboard .toolbar form input[type=date]{width:fit-content}.quarto-dashboard .toolbar form input[type=color]{width:3em}.quarto-dashboard .toolbar form button{padding:.4em}.quarto-dashboard .toolbar form select{width:fit-content}.quarto-dashboard .toolbar>*{font-size:.9em;flex-grow:0}.quarto-dashboard .toolbar .shiny-input-container label{margin-bottom:1px}.quarto-dashboard .toolbar-bottom{margin-top:1em;margin-bottom:0 !important;order:2}.quarto-dashboard .quarto-dashboard-content>.dashboard-toolbar-container>.toolbar-content>.tab-content>.tab-pane>*:not(.bslib-sidebar-layout){padding:1em}.quarto-dashboard .quarto-dashboard-content>.dashboard-toolbar-container>.toolbar-content>*:not(.tab-content){padding:1em}.quarto-dashboard .quarto-dashboard-content>.tab-content>.dashboard-page>.dashboard-toolbar-container>.toolbar-content,.quarto-dashboard .quarto-dashboard-content>.tab-content>.dashboard-page:not(.dashboard-sidebar-container)>*:not(.dashboard-toolbar-container){padding:1em}.quarto-dashboard .toolbar-content{padding:0}.quarto-dashboard .quarto-dashboard-content.quarto-dashboard-pages .tab-pane>.dashboard-toolbar-container .toolbar{border-radius:0;margin-bottom:0}.quarto-dashboard .dashboard-toolbar-container.toolbar-toplevel .toolbar{border-bottom:1px solid rgba(0,0,0,.175)}.quarto-dashboard .dashboard-toolbar-container.toolbar-toplevel .toolbar-bottom{margin-top:0}.quarto-dashboard .dashboard-toolbar-container:not(.toolbar-toplevel) .toolbar{margin-bottom:1em;border-top:none;border-radius:.25rem;border:1px solid rgba(0,0,0,.175)}.quarto-dashboard .vega-embed.has-actions details{width:1.7em;height:2em;position:absolute !important;top:0;right:0}.quarto-dashboard .dashboard-toolbar-container{padding:0}.quarto-dashboard .card .card-header p:last-child,.quarto-dashboard .card .card-footer p:last-child{margin-bottom:0}.quarto-dashboard .card .card-body>.h4:first-child{margin-top:0}.quarto-dashboard .card .card-body{z-index:4}@media(max-width: 767.98px){.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_length,.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_info,.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_paginate{text-align:initial}.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_filter{text-align:right}.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_paginate ul.pagination{justify-content:initial}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;padding-top:0}.quarto-dashboard .card .card-body .itables .dataTables_wrapper table{flex-shrink:0}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons{margin-bottom:.5em;margin-left:auto;width:fit-content;float:right}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons.btn-group{background:#fff;border:none}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons .btn-secondary{background-color:#fff;background-image:none;border:solid #dee2e6 1px;padding:.2em .7em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons .btn span{font-size:.8em;color:#343a40}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{margin-left:.5em;margin-bottom:.5em;padding-top:0}@media(min-width: 768px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{font-size:.875em}}@media(max-width: 767.98px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{font-size:.8em}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_filter{margin-bottom:.5em;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_filter input[type=search]{padding:1px 5px 1px 5px;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_length{flex-basis:1 1 50%;margin-bottom:.5em;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_length select{padding:.4em 3em .4em .5em;font-size:.875em;margin-left:.2em;margin-right:.2em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate{flex-shrink:0}@media(min-width: 768px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate{margin-left:auto}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate ul.pagination .paginate_button .page-link{font-size:.8em}.quarto-dashboard .card .card-footer{font-size:.9em}.quarto-dashboard .card .card-toolbar{display:flex;flex-grow:1;flex-direction:row;width:100%;flex-wrap:wrap}.quarto-dashboard .card .card-toolbar>*{font-size:.8em;flex-grow:0}.quarto-dashboard .card .card-toolbar>.card-title{font-size:1em;flex-grow:1;align-self:flex-start;margin-top:.1em}.quarto-dashboard .card .card-toolbar .cell-output-display{display:flex}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .card .card-toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card .card-toolbar>*:last-child{margin-right:0}.quarto-dashboard .card .card-toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .card .card-toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .card .card-toolbar form{width:fit-content}.quarto-dashboard .card .card-toolbar form label{padding-top:.2em;padding-bottom:.2em;width:fit-content}.quarto-dashboard .card .card-toolbar form input[type=date]{width:fit-content}.quarto-dashboard .card .card-toolbar form input[type=color]{width:3em}.quarto-dashboard .card .card-toolbar form button{padding:.4em}.quarto-dashboard .card .card-toolbar form select{width:fit-content}.quarto-dashboard .card .card-toolbar .cell-output-display{display:flex}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .card .card-toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card .card-toolbar>*:last-child{margin-right:0}.quarto-dashboard .card .card-toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .card .card-toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:0;margin-bottom:0}.quarto-dashboard .card .card-toolbar .shiny-input-container>*{flex-shrink:0;flex-grow:0}.quarto-dashboard .card .card-toolbar .form-group.shiny-input-container:not([role=group])>label{margin-bottom:0}.quarto-dashboard .card .card-toolbar .shiny-input-container.no-baseline{align-items:start;padding-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-container{display:flex;align-items:baseline}.quarto-dashboard .card .card-toolbar .shiny-input-container label{padding-right:.4em}.quarto-dashboard .card .card-toolbar .shiny-input-container .bslib-input-switch{margin-top:6px}.quarto-dashboard .card .card-toolbar input[type=text]{line-height:1;width:inherit}.quarto-dashboard .card .card-toolbar .input-daterange{width:inherit}.quarto-dashboard .card .card-toolbar .input-daterange input[type=text]{height:2.4em;width:10em}.quarto-dashboard .card .card-toolbar .input-daterange .input-group-addon{height:auto;padding:0;margin-left:-5px !important;margin-right:-5px}.quarto-dashboard .card .card-toolbar .input-daterange .input-group-addon .input-group-text{padding-top:0;padding-bottom:0;height:100%}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny{width:10em}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-line{top:9px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-min,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-max,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-from,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-to,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-single{top:20px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-bar{top:8px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-handle{top:0px}.quarto-dashboard .card .card-toolbar .shiny-input-checkboxgroup>label{margin-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-checkboxgroup>.shiny-options-group{margin-top:0;align-items:baseline}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>label{margin-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>.shiny-options-group{align-items:baseline;margin-top:0}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>.shiny-options-group>.radio{margin-right:.3em}.quarto-dashboard .card .card-toolbar .form-select{padding-top:.2em;padding-bottom:.2em}.quarto-dashboard .card .card-toolbar .shiny-input-select{min-width:6em}.quarto-dashboard .card .card-toolbar div.checkbox{margin-bottom:0px}.quarto-dashboard .card .card-toolbar>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card-body>table>thead{border-top:none}.quarto-dashboard .card-body>.table>:not(caption)>*>*{background-color:#fff}.tableFloatingHeaderOriginal{background-color:#fff;position:sticky !important;top:0 !important}.dashboard-data-table{margin-top:-1px}div.value-box-area span.observablehq--number{font-size:calc(clamp(.1em,15cqw,5em)*1.25);line-height:1.2;color:inherit;font-family:var(--bs-body-font-family)}.quarto-listing{padding-bottom:1em}.listing-pagination{padding-top:.5em}ul.pagination{float:right;padding-left:8px;padding-top:.5em}ul.pagination li{padding-right:.75em}ul.pagination li.disabled a,ul.pagination li.active a{color:#fff;text-decoration:none}ul.pagination li:last-of-type{padding-right:0}.listing-actions-group{display:flex}.quarto-listing-filter{margin-bottom:1em;width:200px;margin-left:auto}.quarto-listing-sort{margin-bottom:1em;margin-right:auto;width:auto}.quarto-listing-sort .input-group-text{font-size:.8em}.input-group-text{border-right:none}.quarto-listing-sort select.form-select{font-size:.8em}.listing-no-matching{text-align:center;padding-top:2em;padding-bottom:3em;font-size:1em}#quarto-margin-sidebar .quarto-listing-category{padding-top:0;font-size:1rem}#quarto-margin-sidebar .quarto-listing-category-title{cursor:pointer;font-weight:600;font-size:1rem}.quarto-listing-category .category{cursor:pointer}.quarto-listing-category .category.active{font-weight:600}.quarto-listing-category.category-cloud{display:flex;flex-wrap:wrap;align-items:baseline}.quarto-listing-category.category-cloud .category{padding-right:5px}.quarto-listing-category.category-cloud .category-cloud-1{font-size:.75em}.quarto-listing-category.category-cloud .category-cloud-2{font-size:.95em}.quarto-listing-category.category-cloud .category-cloud-3{font-size:1.15em}.quarto-listing-category.category-cloud .category-cloud-4{font-size:1.35em}.quarto-listing-category.category-cloud .category-cloud-5{font-size:1.55em}.quarto-listing-category.category-cloud .category-cloud-6{font-size:1.75em}.quarto-listing-category.category-cloud .category-cloud-7{font-size:1.95em}.quarto-listing-category.category-cloud .category-cloud-8{font-size:2.15em}.quarto-listing-category.category-cloud .category-cloud-9{font-size:2.35em}.quarto-listing-category.category-cloud .category-cloud-10{font-size:2.55em}.quarto-listing-cols-1{grid-template-columns:repeat(1, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-1{grid-template-columns:repeat(1, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-1{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-2{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-3{grid-template-columns:repeat(3, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-3{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-3{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-4{grid-template-columns:repeat(4, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-4{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-4{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-5{grid-template-columns:repeat(5, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-5{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-5{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-6{grid-template-columns:repeat(6, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-6{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-6{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-7{grid-template-columns:repeat(7, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-7{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-7{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-8{grid-template-columns:repeat(8, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-8{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-8{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-9{grid-template-columns:repeat(9, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-9{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-9{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-10{grid-template-columns:repeat(10, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-10{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-10{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-11{grid-template-columns:repeat(11, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-11{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-11{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-12{grid-template-columns:repeat(12, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-12{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-12{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-grid{gap:1.5em}.quarto-grid-item.borderless{border:none}.quarto-grid-item.borderless .listing-categories .listing-category:last-of-type,.quarto-grid-item.borderless .listing-categories .listing-category:first-of-type{padding-left:0}.quarto-grid-item.borderless .listing-categories .listing-category{border:0}.quarto-grid-link{text-decoration:none;color:inherit}.quarto-grid-link:hover{text-decoration:none;color:inherit}.quarto-grid-item h5.title,.quarto-grid-item .title.h5{margin-top:0;margin-bottom:0}.quarto-grid-item .card-footer{display:flex;justify-content:space-between;font-size:.8em}.quarto-grid-item .card-footer p{margin-bottom:0}.quarto-grid-item p.card-img-top{margin-bottom:0}.quarto-grid-item p.card-img-top>img{object-fit:cover}.quarto-grid-item .card-other-values{margin-top:.5em;font-size:.8em}.quarto-grid-item .card-other-values tr{margin-bottom:.5em}.quarto-grid-item .card-other-values tr>td:first-of-type{font-weight:600;padding-right:1em;padding-left:1em;vertical-align:top}.quarto-grid-item div.post-contents{display:flex;flex-direction:column;text-decoration:none;height:100%}.quarto-grid-item .listing-item-img-placeholder{background-color:rgba(52,58,64,.25);flex-shrink:0}.quarto-grid-item .card-attribution{padding-top:1em;display:flex;gap:1em;text-transform:uppercase;color:#6c757d;font-weight:500;flex-grow:10;align-items:flex-end}.quarto-grid-item .description{padding-bottom:1em}.quarto-grid-item .card-attribution .date{align-self:flex-end}.quarto-grid-item .card-attribution.justify{justify-content:space-between}.quarto-grid-item .card-attribution.start{justify-content:flex-start}.quarto-grid-item .card-attribution.end{justify-content:flex-end}.quarto-grid-item .card-title{margin-bottom:.1em}.quarto-grid-item .card-subtitle{padding-top:.25em}.quarto-grid-item .card-text{font-size:.9em}.quarto-grid-item .listing-reading-time{padding-bottom:.25em}.quarto-grid-item .card-text-small{font-size:.8em}.quarto-grid-item .card-subtitle.subtitle{font-size:.9em;font-weight:600;padding-bottom:.5em}.quarto-grid-item .listing-categories{display:flex;flex-wrap:wrap;padding-bottom:5px}.quarto-grid-item .listing-categories .listing-category{color:#6c757d;border:solid 1px #dee2e6;border-radius:.25rem;text-transform:uppercase;font-size:.65em;padding-left:.5em;padding-right:.5em;padding-top:.15em;padding-bottom:.15em;cursor:pointer;margin-right:4px;margin-bottom:4px}.quarto-grid-item.card-right{text-align:right}.quarto-grid-item.card-right .listing-categories{justify-content:flex-end}.quarto-grid-item.card-left{text-align:left}.quarto-grid-item.card-center{text-align:center}.quarto-grid-item.card-center .listing-description{text-align:justify}.quarto-grid-item.card-center .listing-categories{justify-content:center}table.quarto-listing-table td.image{padding:0px}table.quarto-listing-table td.image img{width:100%;max-width:50px;object-fit:contain}table.quarto-listing-table a{text-decoration:none;word-break:keep-all}table.quarto-listing-table th a{color:inherit}table.quarto-listing-table th a.asc:after{margin-bottom:-2px;margin-left:5px;display:inline-block;height:1rem;width:1rem;background-repeat:no-repeat;background-size:1rem 1rem;background-image:url('data:image/svg+xml,');content:""}table.quarto-listing-table th a.desc:after{margin-bottom:-2px;margin-left:5px;display:inline-block;height:1rem;width:1rem;background-repeat:no-repeat;background-size:1rem 1rem;background-image:url('data:image/svg+xml,');content:""}table.quarto-listing-table.table-hover td{cursor:pointer}.quarto-post.image-left{flex-direction:row}.quarto-post.image-right{flex-direction:row-reverse}@media(max-width: 767.98px){.quarto-post.image-right,.quarto-post.image-left{gap:0em;flex-direction:column}.quarto-post .metadata{padding-bottom:1em;order:2}.quarto-post .body{order:1}.quarto-post .thumbnail{order:3}}.list.quarto-listing-default div:last-of-type{border-bottom:none}@media(min-width: 992px){.quarto-listing-container-default{margin-right:2em}}div.quarto-post{display:flex;gap:2em;margin-bottom:1.5em;border-bottom:1px solid #dee2e6}@media(max-width: 767.98px){div.quarto-post{padding-bottom:1em}}div.quarto-post .metadata{flex-basis:20%;flex-grow:0;margin-top:.2em;flex-shrink:10}div.quarto-post .thumbnail{flex-basis:30%;flex-grow:0;flex-shrink:0}div.quarto-post .thumbnail img{margin-top:.4em;width:100%;object-fit:cover}div.quarto-post .body{flex-basis:45%;flex-grow:1;flex-shrink:0}div.quarto-post .body h3.listing-title,div.quarto-post .body .listing-title.h3{margin-top:0px;margin-bottom:0px;border-bottom:none}div.quarto-post .body .listing-subtitle{font-size:.875em;margin-bottom:.5em;margin-top:.2em}div.quarto-post .body .description{font-size:.9em}div.quarto-post .body pre code{white-space:pre-wrap}div.quarto-post a{color:#343a40;text-decoration:none}div.quarto-post .metadata{display:flex;flex-direction:column;font-size:.8em;font-family:"Source Sans Pro",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";flex-basis:33%}div.quarto-post .listing-categories{display:flex;flex-wrap:wrap;padding-bottom:5px}div.quarto-post .listing-categories .listing-category{color:#6c757d;border:solid 1px #dee2e6;border-radius:.25rem;text-transform:uppercase;font-size:.65em;padding-left:.5em;padding-right:.5em;padding-top:.15em;padding-bottom:.15em;cursor:pointer;margin-right:4px;margin-bottom:4px}div.quarto-post .listing-description{margin-bottom:.5em}div.quarto-about-jolla{display:flex !important;flex-direction:column;align-items:center;margin-top:10%;padding-bottom:1em}div.quarto-about-jolla .about-image{object-fit:cover;margin-left:auto;margin-right:auto;margin-bottom:1.5em}div.quarto-about-jolla img.round{border-radius:50%}div.quarto-about-jolla img.rounded{border-radius:10px}div.quarto-about-jolla .quarto-title h1.title,div.quarto-about-jolla .quarto-title .title.h1{text-align:center}div.quarto-about-jolla .quarto-title .description{text-align:center}div.quarto-about-jolla h2,div.quarto-about-jolla .h2{border-bottom:none}div.quarto-about-jolla .about-sep{width:60%}div.quarto-about-jolla main{text-align:center}div.quarto-about-jolla .about-links{display:flex}@media(min-width: 992px){div.quarto-about-jolla .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-jolla .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-jolla .about-link{color:rgb(97.724137931,109,120.275862069);text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-jolla .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-jolla .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-jolla .about-link:hover{color:#2761e3}div.quarto-about-jolla .about-link i.bi{margin-right:.15em}div.quarto-about-solana{display:flex !important;flex-direction:column;padding-top:3em !important;padding-bottom:1em}div.quarto-about-solana .about-entity{display:flex !important;align-items:start;justify-content:space-between}@media(min-width: 992px){div.quarto-about-solana .about-entity{flex-direction:row}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity{flex-direction:column-reverse;align-items:center;text-align:center}}div.quarto-about-solana .about-entity .entity-contents{display:flex;flex-direction:column}@media(max-width: 767.98px){div.quarto-about-solana .about-entity .entity-contents{width:100%}}div.quarto-about-solana .about-entity .about-image{object-fit:cover}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-image{margin-bottom:1.5em}}div.quarto-about-solana .about-entity img.round{border-radius:50%}div.quarto-about-solana .about-entity img.rounded{border-radius:10px}div.quarto-about-solana .about-entity .about-links{display:flex;justify-content:left;padding-bottom:1.2em}@media(min-width: 992px){div.quarto-about-solana .about-entity .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-solana .about-entity .about-link{color:rgb(97.724137931,109,120.275862069);text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-solana .about-entity .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-solana .about-entity .about-link:hover{color:#2761e3}div.quarto-about-solana .about-entity .about-link i.bi{margin-right:.15em}div.quarto-about-solana .about-contents{padding-right:1.5em;flex-basis:0;flex-grow:1}div.quarto-about-solana .about-contents main.content{margin-top:0}div.quarto-about-solana .about-contents h2,div.quarto-about-solana .about-contents .h2{border-bottom:none}div.quarto-about-trestles{display:flex !important;flex-direction:row;padding-top:3em !important;padding-bottom:1em}@media(max-width: 991.98px){div.quarto-about-trestles{flex-direction:column;padding-top:0em !important}}div.quarto-about-trestles .about-entity{display:flex !important;flex-direction:column;align-items:center;text-align:center;padding-right:1em}@media(min-width: 992px){div.quarto-about-trestles .about-entity{flex:0 0 42%}}div.quarto-about-trestles .about-entity .about-image{object-fit:cover;margin-bottom:1.5em}div.quarto-about-trestles .about-entity img.round{border-radius:50%}div.quarto-about-trestles .about-entity img.rounded{border-radius:10px}div.quarto-about-trestles .about-entity .about-links{display:flex;justify-content:center}@media(min-width: 992px){div.quarto-about-trestles .about-entity .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-trestles .about-entity .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-trestles .about-entity .about-link{color:rgb(97.724137931,109,120.275862069);text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-trestles .about-entity .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-trestles .about-entity .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-trestles .about-entity .about-link:hover{color:#2761e3}div.quarto-about-trestles .about-entity .about-link i.bi{margin-right:.15em}div.quarto-about-trestles .about-contents{flex-basis:0;flex-grow:1}div.quarto-about-trestles .about-contents h2,div.quarto-about-trestles .about-contents .h2{border-bottom:none}@media(min-width: 992px){div.quarto-about-trestles .about-contents{border-left:solid 1px #dee2e6;padding-left:1.5em}}div.quarto-about-trestles .about-contents main.content{margin-top:0}div.quarto-about-marquee{padding-bottom:1em}div.quarto-about-marquee .about-contents{display:flex;flex-direction:column}div.quarto-about-marquee .about-image{max-height:550px;margin-bottom:1.5em;object-fit:cover}div.quarto-about-marquee img.round{border-radius:50%}div.quarto-about-marquee img.rounded{border-radius:10px}div.quarto-about-marquee h2,div.quarto-about-marquee .h2{border-bottom:none}div.quarto-about-marquee .about-links{display:flex;justify-content:center;padding-top:1.5em}@media(min-width: 992px){div.quarto-about-marquee .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-marquee .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-marquee .about-link{color:rgb(97.724137931,109,120.275862069);text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-marquee .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-marquee .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-marquee .about-link:hover{color:#2761e3}div.quarto-about-marquee .about-link i.bi{margin-right:.15em}@media(min-width: 992px){div.quarto-about-marquee .about-link{border:none}}div.quarto-about-broadside{display:flex;flex-direction:column;padding-bottom:1em}div.quarto-about-broadside .about-main{display:flex !important;padding-top:0 !important}@media(min-width: 992px){div.quarto-about-broadside .about-main{flex-direction:row;align-items:flex-start}}@media(max-width: 991.98px){div.quarto-about-broadside .about-main{flex-direction:column}}@media(max-width: 991.98px){div.quarto-about-broadside .about-main .about-entity{flex-shrink:0;width:100%;height:450px;margin-bottom:1.5em;background-size:cover;background-repeat:no-repeat}}@media(min-width: 992px){div.quarto-about-broadside .about-main .about-entity{flex:0 10 50%;margin-right:1.5em;width:100%;height:100%;background-size:100%;background-repeat:no-repeat}}div.quarto-about-broadside .about-main .about-contents{padding-top:14px;flex:0 0 50%}div.quarto-about-broadside h2,div.quarto-about-broadside .h2{border-bottom:none}div.quarto-about-broadside .about-sep{margin-top:1.5em;width:60%;align-self:center}div.quarto-about-broadside .about-links{display:flex;justify-content:center;column-gap:20px;padding-top:1.5em}@media(min-width: 992px){div.quarto-about-broadside .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-broadside .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-broadside .about-link{color:rgb(97.724137931,109,120.275862069);text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-broadside .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-broadside .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-broadside .about-link:hover{color:#2761e3}div.quarto-about-broadside .about-link i.bi{margin-right:.15em}@media(min-width: 992px){div.quarto-about-broadside .about-link{border:none}}.tippy-box[data-theme~=quarto]{background-color:#fff;border:solid 1px #dee2e6;border-radius:.25rem;color:#343a40;font-size:.875rem}.tippy-box[data-theme~=quarto]>.tippy-backdrop{background-color:#fff}.tippy-box[data-theme~=quarto]>.tippy-arrow:after,.tippy-box[data-theme~=quarto]>.tippy-svg-arrow:after{content:"";position:absolute;z-index:-1}.tippy-box[data-theme~=quarto]>.tippy-arrow:after{border-color:rgba(0,0,0,0);border-style:solid}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-6px}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-6px}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-6px}.tippy-box[data-placement^=left]>.tippy-arrow:before{right:-6px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-arrow:before{border-top-color:#fff}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-arrow:after{border-top-color:#dee2e6;border-width:7px 7px 0;top:17px;left:1px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-svg-arrow>svg{top:16px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-svg-arrow:after{top:17px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#fff;bottom:16px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-arrow:after{border-bottom-color:#dee2e6;border-width:0 7px 7px;bottom:17px;left:1px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-svg-arrow>svg{bottom:15px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-svg-arrow:after{bottom:17px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-arrow:before{border-left-color:#fff}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-arrow:after{border-left-color:#dee2e6;border-width:7px 0 7px 7px;left:17px;top:1px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-svg-arrow>svg{left:11px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-svg-arrow:after{left:12px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-arrow:before{border-right-color:#fff;right:16px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-arrow:after{border-width:7px 7px 7px 0;right:17px;top:1px;border-right-color:#dee2e6}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-svg-arrow>svg{right:11px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-svg-arrow:after{right:12px}.tippy-box[data-theme~=quarto]>.tippy-svg-arrow{fill:#343a40}.tippy-box[data-theme~=quarto]>.tippy-svg-arrow:after{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMCA2czEuNzk2LS4wMTMgNC42Ny0zLjYxNUM1Ljg1MS45IDYuOTMuMDA2IDggMGMxLjA3LS4wMDYgMi4xNDguODg3IDMuMzQzIDIuMzg1QzE0LjIzMyA2LjAwNSAxNiA2IDE2IDZIMHoiIGZpbGw9InJnYmEoMCwgOCwgMTYsIDAuMikiLz48L3N2Zz4=);background-size:16px 6px;width:16px;height:6px}.top-right{position:absolute;top:1em;right:1em}.visually-hidden{border:0;clip:rect(0 0 0 0);height:auto;margin:0;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none !important}.zindex-bottom{z-index:-1 !important}figure.figure{display:block}.quarto-layout-panel{margin-bottom:1em}.quarto-layout-panel>figure{width:100%}.quarto-layout-panel>figure>figcaption,.quarto-layout-panel>.panel-caption{margin-top:10pt}.quarto-layout-panel>.table-caption{margin-top:0px}.table-caption p{margin-bottom:.5em}.quarto-layout-row{display:flex;flex-direction:row;align-items:flex-start}.quarto-layout-valign-top{align-items:flex-start}.quarto-layout-valign-bottom{align-items:flex-end}.quarto-layout-valign-center{align-items:center}.quarto-layout-cell{position:relative;margin-right:20px}.quarto-layout-cell:last-child{margin-right:0}.quarto-layout-cell figure,.quarto-layout-cell>p{margin:.2em}.quarto-layout-cell img{max-width:100%}.quarto-layout-cell .html-widget{width:100% !important}.quarto-layout-cell div figure p{margin:0}.quarto-layout-cell figure{display:block;margin-inline-start:0;margin-inline-end:0}.quarto-layout-cell table{display:inline-table}.quarto-layout-cell-subref figcaption,figure .quarto-layout-row figure figcaption{text-align:center;font-style:italic}.quarto-figure{position:relative;margin-bottom:1em}.quarto-figure>figure{width:100%;margin-bottom:0}.quarto-figure-left>figure>p,.quarto-figure-left>figure>div{text-align:left}.quarto-figure-center>figure>p,.quarto-figure-center>figure>div{text-align:center}.quarto-figure-right>figure>p,.quarto-figure-right>figure>div{text-align:right}.quarto-figure>figure>div.cell-annotation,.quarto-figure>figure>div code{text-align:left}figure>p:empty{display:none}figure>p:first-child{margin-top:0;margin-bottom:0}figure>figcaption.quarto-float-caption-bottom{margin-bottom:.5em}figure>figcaption.quarto-float-caption-top{margin-top:.5em}div[id^=tbl-]{position:relative}.quarto-figure>.anchorjs-link{position:absolute;top:.6em;right:.5em}div[id^=tbl-]>.anchorjs-link{position:absolute;top:.7em;right:.3em}.quarto-figure:hover>.anchorjs-link,div[id^=tbl-]:hover>.anchorjs-link,h2:hover>.anchorjs-link,.h2:hover>.anchorjs-link,h3:hover>.anchorjs-link,.h3:hover>.anchorjs-link,h4:hover>.anchorjs-link,.h4:hover>.anchorjs-link,h5:hover>.anchorjs-link,.h5:hover>.anchorjs-link,h6:hover>.anchorjs-link,.h6:hover>.anchorjs-link,.reveal-anchorjs-link>.anchorjs-link{opacity:1}#title-block-header{margin-block-end:1rem;position:relative;margin-top:-1px}#title-block-header .abstract{margin-block-start:1rem}#title-block-header .abstract .abstract-title{font-weight:600}#title-block-header a{text-decoration:none}#title-block-header .author,#title-block-header .date,#title-block-header .doi{margin-block-end:.2rem}#title-block-header .quarto-title-block>div{display:flex}#title-block-header .quarto-title-block>div>h1,#title-block-header .quarto-title-block>div>.h1{flex-grow:1}#title-block-header .quarto-title-block>div>button{flex-shrink:0;height:2.25rem;margin-top:0}@media(min-width: 992px){#title-block-header .quarto-title-block>div>button{margin-top:5px}}tr.header>th>p:last-of-type{margin-bottom:0px}table,table.table{margin-top:.5rem;margin-bottom:.5rem}caption,.table-caption{padding-top:.5rem;padding-bottom:.5rem;text-align:center}figure.quarto-float-tbl figcaption.quarto-float-caption-top{margin-top:.5rem;margin-bottom:.25rem;text-align:center}figure.quarto-float-tbl figcaption.quarto-float-caption-bottom{padding-top:.25rem;margin-bottom:.5rem;text-align:center}.utterances{max-width:none;margin-left:-8px}iframe{margin-bottom:1em}details{margin-bottom:1em}details[show]{margin-bottom:0}details>summary{color:#6c757d}details>summary>p:only-child{display:inline}div.code-copy-outer-scaffold{position:relative}dd code:not(.sourceCode),p code:not(.sourceCode){white-space:pre-wrap}code{white-space:pre}@media print{code{white-space:pre-wrap}}pre>code{display:block}pre>code.sourceCode{white-space:pre}pre>code.sourceCode>span>a:first-child::before{text-decoration:none}pre.code-overflow-wrap>code.sourceCode{white-space:pre-wrap}pre.code-overflow-scroll>code.sourceCode{white-space:pre}code a:any-link{color:inherit;text-decoration:none}code a:hover{color:inherit;text-decoration:underline}ul.task-list{padding-left:1em}[data-tippy-root]{display:inline-block}.tippy-content .footnote-back{display:none}.footnote-back{margin-left:.2em}.tippy-content{overflow-x:auto}.quarto-embedded-source-code{display:none}.quarto-unresolved-ref{font-weight:600}.quarto-cover-image{max-width:35%;float:right;margin-left:30px}.cell-output-display .widget-subarea{margin-bottom:1em}.cell-output-display:not(.no-overflow-x),.knitsql-table:not(.no-overflow-x){overflow-x:auto}.panel-input{margin-bottom:1em}.panel-input>div,.panel-input>div>div{display:inline-block;vertical-align:top;padding-right:12px}.panel-input>p:last-child{margin-bottom:0}.layout-sidebar{margin-bottom:1em}.layout-sidebar .tab-content{border:none}.tab-content>.page-columns.active{display:grid}div.sourceCode>iframe{width:100%;height:300px;margin-bottom:-0.5em}a{text-underline-offset:3px}.callout pre.sourceCode{padding-left:0}div.ansi-escaped-output{font-family:monospace;display:block}/*! -* -* ansi colors from IPython notebook's -* -* we also add `bright-[color]-` synonyms for the `-[color]-intense` classes since -* that seems to be what ansi_up emits -* -*/.ansi-black-fg{color:#3e424d}.ansi-black-bg{background-color:#3e424d}.ansi-black-intense-black,.ansi-bright-black-fg{color:#282c36}.ansi-black-intense-black,.ansi-bright-black-bg{background-color:#282c36}.ansi-red-fg{color:#e75c58}.ansi-red-bg{background-color:#e75c58}.ansi-red-intense-red,.ansi-bright-red-fg{color:#b22b31}.ansi-red-intense-red,.ansi-bright-red-bg{background-color:#b22b31}.ansi-green-fg{color:#00a250}.ansi-green-bg{background-color:#00a250}.ansi-green-intense-green,.ansi-bright-green-fg{color:#007427}.ansi-green-intense-green,.ansi-bright-green-bg{background-color:#007427}.ansi-yellow-fg{color:#ddb62b}.ansi-yellow-bg{background-color:#ddb62b}.ansi-yellow-intense-yellow,.ansi-bright-yellow-fg{color:#b27d12}.ansi-yellow-intense-yellow,.ansi-bright-yellow-bg{background-color:#b27d12}.ansi-blue-fg{color:#208ffb}.ansi-blue-bg{background-color:#208ffb}.ansi-blue-intense-blue,.ansi-bright-blue-fg{color:#0065ca}.ansi-blue-intense-blue,.ansi-bright-blue-bg{background-color:#0065ca}.ansi-magenta-fg{color:#d160c4}.ansi-magenta-bg{background-color:#d160c4}.ansi-magenta-intense-magenta,.ansi-bright-magenta-fg{color:#a03196}.ansi-magenta-intense-magenta,.ansi-bright-magenta-bg{background-color:#a03196}.ansi-cyan-fg{color:#60c6c8}.ansi-cyan-bg{background-color:#60c6c8}.ansi-cyan-intense-cyan,.ansi-bright-cyan-fg{color:#258f8f}.ansi-cyan-intense-cyan,.ansi-bright-cyan-bg{background-color:#258f8f}.ansi-white-fg{color:#c5c1b4}.ansi-white-bg{background-color:#c5c1b4}.ansi-white-intense-white,.ansi-bright-white-fg{color:#a1a6b2}.ansi-white-intense-white,.ansi-bright-white-bg{background-color:#a1a6b2}.ansi-default-inverse-fg{color:#fff}.ansi-default-inverse-bg{background-color:#000}.ansi-bold{font-weight:bold}.ansi-underline{text-decoration:underline}:root{--quarto-body-bg: #fff;--quarto-body-color: #343a40;--quarto-text-muted: #6c757d;--quarto-border-color: #dee2e6;--quarto-border-width: 1px}table.gt_table{color:var(--quarto-body-color);font-size:1em;width:100%;background-color:rgba(0,0,0,0);border-top-width:inherit;border-bottom-width:inherit;border-color:var(--quarto-border-color)}table.gt_table th.gt_column_spanner_outer{color:var(--quarto-body-color);background-color:rgba(0,0,0,0);border-top-width:inherit;border-bottom-width:inherit;border-color:var(--quarto-border-color)}table.gt_table th.gt_col_heading{color:var(--quarto-body-color);font-weight:bold;background-color:rgba(0,0,0,0)}table.gt_table thead.gt_col_headings{border-bottom:1px solid currentColor;border-top-width:inherit;border-top-color:var(--quarto-border-color)}table.gt_table thead.gt_col_headings:not(:first-child){border-top-width:1px;border-top-color:var(--quarto-border-color)}table.gt_table td.gt_row{border-bottom-width:1px;border-bottom-color:var(--quarto-border-color);border-top-width:0px}table.gt_table tbody.gt_table_body{border-top-width:1px;border-bottom-width:1px;border-bottom-color:var(--quarto-border-color);border-top-color:currentColor}div.columns{display:initial;gap:initial}div.column{display:inline-block;overflow-x:initial;vertical-align:top;width:50%}.code-annotation-tip-content{word-wrap:break-word}.code-annotation-container-hidden{display:none !important}dl.code-annotation-container-grid{display:grid;grid-template-columns:min-content auto}dl.code-annotation-container-grid dt{grid-column:1}dl.code-annotation-container-grid dd{grid-column:2}pre.sourceCode.code-annotation-code{padding-right:0}code.sourceCode .code-annotation-anchor{z-index:100;position:relative;float:right;background-color:rgba(0,0,0,0)}input[type=checkbox]{margin-right:.5ch}:root{--mermaid-bg-color: #fff;--mermaid-edge-color: #343a40;--mermaid-node-fg-color: #343a40;--mermaid-fg-color: #343a40;--mermaid-fg-color--lighter: rgb(74.8620689655, 83.5, 92.1379310345);--mermaid-fg-color--lightest: rgb(97.724137931, 109, 120.275862069);--mermaid-font-family: Source Sans Pro, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;--mermaid-label-bg-color: #fff;--mermaid-label-fg-color: #2780e3;--mermaid-node-bg-color: rgba(39, 128, 227, 0.1);--mermaid-node-fg-color: #343a40}@media print{:root{font-size:11pt}#quarto-sidebar,#TOC,.nav-page{display:none}.page-columns .content{grid-column-start:page-start}.fixed-top{position:relative}.panel-caption,.figure-caption,figcaption{color:#666}}.code-copy-button{position:absolute;top:0;right:0;border:0;margin-top:5px;margin-right:5px;background-color:rgba(0,0,0,0);z-index:3}.code-copy-button-tooltip{font-size:.75em}div.code-copy-outer-scaffold:hover>.code-copy-button>.bi::before{display:inline-block;height:1rem;width:1rem;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:1rem 1rem}div.code-copy-outer-scaffold:hover>.code-copy-button-checked>.bi::before{background-image:url('data:image/svg+xml,')}div.code-copy-outer-scaffold:hover>.code-copy-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}div.code-copy-outer-scaffold:hover>.code-copy-button-checked:hover>.bi::before{background-image:url('data:image/svg+xml,')}main ol ol,main ul ul,main ol ul,main ul ol{margin-bottom:1em}ul>li:not(:has(>p))>ul,ol>li:not(:has(>p))>ul,ul>li:not(:has(>p))>ol,ol>li:not(:has(>p))>ol{margin-bottom:0}ul>li:not(:has(>p))>ul>li:has(>p),ol>li:not(:has(>p))>ul>li:has(>p),ul>li:not(:has(>p))>ol>li:has(>p),ol>li:not(:has(>p))>ol>li:has(>p){margin-top:1rem}body{margin:0}main.page-columns>header>h1.title,main.page-columns>header>.title.h1{margin-bottom:0}@media(min-width: 992px){body .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(1050px - 3em)) [body-content-end] 1.5em [body-end] 21px [body-end-outset] minmax(45px, 87px) [page-end-inset] 21px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.fullcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(1050px - 3em)) [body-content-end] 1.5em [body-end] 21px [body-end-outset] 21px [page-end-inset page-end] 5fr [screen-end-inset] 1.5em}body.slimcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(1050px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(0px, 120px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.listing:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1050px - 3em)) [body-content-end] 3em [body-end] 50px [body-end-outset] minmax(0px, 150px) [page-end-inset] minmax(50px, 100px) [page-end] 1fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 175px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(0px, 120px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 175px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(0px, 120px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] minmax(25px, 50px) [page-start-inset] minmax(50px, 150px) [body-start-outset] minmax(25px, 50px) [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] minmax(15px, 30px) [body-end-outset] minmax(30px, 90px) [page-end-inset] minmax(15px, 30px) [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1200px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(30px, 60px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1200px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 50px [page-start-inset] minmax(50px, 150px) [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(450px, calc(950px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(0px, 120px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1200px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(0px, 120px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 50px [page-start-inset] minmax(50px, 150px) [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(450px, calc(950px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(30px, 90px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] minmax(25px, 50px) [page-start-inset] minmax(50px, 150px) [body-start-outset] minmax(25px, 50px) [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] minmax(15px, 30px) [body-end-outset] minmax(30px, 90px) [page-end-inset] minmax(15px, 30px) [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}}@media(max-width: 991.98px){body .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] 21px [body-end-outset] minmax(45px, 87px) [page-end-inset] 21px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.fullcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.slimcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] 21px [body-end-outset] minmax(45px, 87px) [page-end-inset] 21px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.listing:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(1450px - 3em)) [body-content-end body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 145px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 145px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1.5em [body-content-start] minmax(500px, calc(950px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(45px, 90px) [page-end-inset] 15px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(950px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(15px, 30px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(1200px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 4fr [screen-end-inset] 1.5em [screen-end]}body.docked.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(950px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(15px, 30px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(950px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(15px, 30px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(950px - 3em)) [body-content-end] 1.5em [body-end] 21px [body-end-outset] minmax(45px, 87px) [page-end-inset] 21px [page-end] 4fr [screen-end-inset] 1.5em [screen-end]}body.floating.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(950px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(45px, 90px) [page-end-inset] 15px [page-end] 4fr [screen-end-inset] 1.5em [screen-end]}}@media(max-width: 767.98px){body .page-columns,body.fullcontent:not(.floating):not(.docked) .page-columns,body.slimcontent:not(.floating):not(.docked) .page-columns,body.docked .page-columns,body.docked.slimcontent .page-columns,body.docked.fullcontent .page-columns,body.floating .page-columns,body.floating.slimcontent .page-columns,body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}nav[role=doc-toc]{display:none}}body,.page-row-navigation{grid-template-rows:[page-top] max-content [contents-top] max-content [contents-bottom] max-content [page-bottom]}.page-rows-contents{grid-template-rows:[content-top] minmax(max-content, 1fr) [content-bottom] minmax(60px, max-content) [page-bottom]}.page-full{grid-column:screen-start/screen-end !important}.page-columns>*{grid-column:body-content-start/body-content-end}.page-columns.column-page>*{grid-column:page-start/page-end}.page-columns.column-page-left .page-columns.page-full>*,.page-columns.column-page-left>*{grid-column:page-start/body-content-end}.page-columns.column-page-right .page-columns.page-full>*,.page-columns.column-page-right>*{grid-column:body-content-start/page-end}.page-rows{grid-auto-rows:auto}.header{grid-column:screen-start/screen-end;grid-row:page-top/contents-top}#quarto-content{padding:0;grid-column:screen-start/screen-end;grid-row:contents-top/contents-bottom}body.floating .sidebar.sidebar-navigation{grid-column:page-start/body-start;grid-row:content-top/page-bottom}body.docked .sidebar.sidebar-navigation{grid-column:screen-start/body-start;grid-row:content-top/page-bottom}.sidebar.toc-left{grid-column:page-start/body-start;grid-row:content-top/page-bottom}.sidebar.margin-sidebar{grid-column:body-end/page-end;grid-row:content-top/page-bottom}.page-columns .content{grid-column:body-content-start/body-content-end;grid-row:content-top/content-bottom;align-content:flex-start}.page-columns .page-navigation{grid-column:body-content-start/body-content-end;grid-row:content-bottom/page-bottom}.page-columns .footer{grid-column:screen-start/screen-end;grid-row:contents-bottom/page-bottom}.page-columns .column-body{grid-column:body-content-start/body-content-end}.page-columns .column-body-fullbleed{grid-column:body-start/body-end}.page-columns .column-body-outset{grid-column:body-start-outset/body-end-outset;z-index:998;opacity:.999}.page-columns .column-body-outset table{background:#fff}.page-columns .column-body-outset-left{grid-column:body-start-outset/body-content-end;z-index:998;opacity:.999}.page-columns .column-body-outset-left table{background:#fff}.page-columns .column-body-outset-right{grid-column:body-content-start/body-end-outset;z-index:998;opacity:.999}.page-columns .column-body-outset-right table{background:#fff}.page-columns .column-page{grid-column:page-start/page-end;z-index:998;opacity:.999}.page-columns .column-page table{background:#fff}.page-columns .column-page-inset{grid-column:page-start-inset/page-end-inset;z-index:998;opacity:.999}.page-columns .column-page-inset table{background:#fff}.page-columns .column-page-inset-left{grid-column:page-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-page-inset-left table{background:#fff}.page-columns .column-page-inset-right{grid-column:body-content-start/page-end-inset;z-index:998;opacity:.999}.page-columns .column-page-inset-right figcaption table{background:#fff}.page-columns .column-page-left{grid-column:page-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-page-left table{background:#fff}.page-columns .column-page-right{grid-column:body-content-start/page-end;z-index:998;opacity:.999}.page-columns .column-page-right figcaption table{background:#fff}#quarto-content.page-columns #quarto-margin-sidebar,#quarto-content.page-columns #quarto-sidebar{z-index:1}@media(max-width: 991.98px){#quarto-content.page-columns #quarto-margin-sidebar.collapse,#quarto-content.page-columns #quarto-sidebar.collapse,#quarto-content.page-columns #quarto-margin-sidebar.collapsing,#quarto-content.page-columns #quarto-sidebar.collapsing{z-index:1055}}#quarto-content.page-columns main.column-page,#quarto-content.page-columns main.column-page-right,#quarto-content.page-columns main.column-page-left{z-index:0}.page-columns .column-screen-inset{grid-column:screen-start-inset/screen-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset table{background:#fff}.page-columns .column-screen-inset-left{grid-column:screen-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-inset-left table{background:#fff}.page-columns .column-screen-inset-right{grid-column:body-content-start/screen-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset-right table{background:#fff}.page-columns .column-screen{grid-column:screen-start/screen-end;z-index:998;opacity:.999}.page-columns .column-screen table{background:#fff}.page-columns .column-screen-left{grid-column:screen-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-left table{background:#fff}.page-columns .column-screen-right{grid-column:body-content-start/screen-end;z-index:998;opacity:.999}.page-columns .column-screen-right table{background:#fff}.page-columns .column-screen-inset-shaded{grid-column:screen-start/screen-end;padding:1em;background:#f8f9fa;z-index:998;opacity:.999;margin-bottom:1em}.zindex-content{z-index:998;opacity:.999}.zindex-modal{z-index:1055;opacity:.999}.zindex-over-content{z-index:999;opacity:.999}img.img-fluid.column-screen,img.img-fluid.column-screen-inset-shaded,img.img-fluid.column-screen-inset,img.img-fluid.column-screen-inset-left,img.img-fluid.column-screen-inset-right,img.img-fluid.column-screen-left,img.img-fluid.column-screen-right{width:100%}@media(min-width: 992px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-end/page-end !important;z-index:998}.column-sidebar{grid-column:page-start/body-start !important;z-index:998}.column-leftmargin{grid-column:screen-start-inset/body-start !important;z-index:998}.no-row-height{height:1em;overflow:visible}}@media(max-width: 991.98px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-end/page-end !important;z-index:998}.no-row-height{height:1em;overflow:visible}.page-columns.page-full{overflow:visible}.page-columns.toc-left .margin-caption,.page-columns.toc-left div.aside,.page-columns.toc-left aside:not(.footnotes):not(.sidebar),.page-columns.toc-left .column-margin{grid-column:body-content-start/body-content-end !important;z-index:998;opacity:.999}.page-columns.toc-left .no-row-height{height:initial;overflow:initial}}@media(max-width: 767.98px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-content-start/body-content-end !important;z-index:998;opacity:.999}.no-row-height{height:initial;overflow:initial}#quarto-margin-sidebar{display:none}#quarto-sidebar-toc-left{display:none}.hidden-sm{display:none}}.panel-grid{display:grid;grid-template-rows:repeat(1, 1fr);grid-template-columns:repeat(24, 1fr);gap:1em}.panel-grid .g-col-1{grid-column:auto/span 1}.panel-grid .g-col-2{grid-column:auto/span 2}.panel-grid .g-col-3{grid-column:auto/span 3}.panel-grid .g-col-4{grid-column:auto/span 4}.panel-grid .g-col-5{grid-column:auto/span 5}.panel-grid .g-col-6{grid-column:auto/span 6}.panel-grid .g-col-7{grid-column:auto/span 7}.panel-grid .g-col-8{grid-column:auto/span 8}.panel-grid .g-col-9{grid-column:auto/span 9}.panel-grid .g-col-10{grid-column:auto/span 10}.panel-grid .g-col-11{grid-column:auto/span 11}.panel-grid .g-col-12{grid-column:auto/span 12}.panel-grid .g-col-13{grid-column:auto/span 13}.panel-grid .g-col-14{grid-column:auto/span 14}.panel-grid .g-col-15{grid-column:auto/span 15}.panel-grid .g-col-16{grid-column:auto/span 16}.panel-grid .g-col-17{grid-column:auto/span 17}.panel-grid .g-col-18{grid-column:auto/span 18}.panel-grid .g-col-19{grid-column:auto/span 19}.panel-grid .g-col-20{grid-column:auto/span 20}.panel-grid .g-col-21{grid-column:auto/span 21}.panel-grid .g-col-22{grid-column:auto/span 22}.panel-grid .g-col-23{grid-column:auto/span 23}.panel-grid .g-col-24{grid-column:auto/span 24}.panel-grid .g-start-1{grid-column-start:1}.panel-grid .g-start-2{grid-column-start:2}.panel-grid .g-start-3{grid-column-start:3}.panel-grid .g-start-4{grid-column-start:4}.panel-grid .g-start-5{grid-column-start:5}.panel-grid .g-start-6{grid-column-start:6}.panel-grid .g-start-7{grid-column-start:7}.panel-grid .g-start-8{grid-column-start:8}.panel-grid .g-start-9{grid-column-start:9}.panel-grid .g-start-10{grid-column-start:10}.panel-grid .g-start-11{grid-column-start:11}.panel-grid .g-start-12{grid-column-start:12}.panel-grid .g-start-13{grid-column-start:13}.panel-grid .g-start-14{grid-column-start:14}.panel-grid .g-start-15{grid-column-start:15}.panel-grid .g-start-16{grid-column-start:16}.panel-grid .g-start-17{grid-column-start:17}.panel-grid .g-start-18{grid-column-start:18}.panel-grid .g-start-19{grid-column-start:19}.panel-grid .g-start-20{grid-column-start:20}.panel-grid .g-start-21{grid-column-start:21}.panel-grid .g-start-22{grid-column-start:22}.panel-grid .g-start-23{grid-column-start:23}@media(min-width: 576px){.panel-grid .g-col-sm-1{grid-column:auto/span 1}.panel-grid .g-col-sm-2{grid-column:auto/span 2}.panel-grid .g-col-sm-3{grid-column:auto/span 3}.panel-grid .g-col-sm-4{grid-column:auto/span 4}.panel-grid .g-col-sm-5{grid-column:auto/span 5}.panel-grid .g-col-sm-6{grid-column:auto/span 6}.panel-grid .g-col-sm-7{grid-column:auto/span 7}.panel-grid .g-col-sm-8{grid-column:auto/span 8}.panel-grid .g-col-sm-9{grid-column:auto/span 9}.panel-grid .g-col-sm-10{grid-column:auto/span 10}.panel-grid .g-col-sm-11{grid-column:auto/span 11}.panel-grid .g-col-sm-12{grid-column:auto/span 12}.panel-grid .g-col-sm-13{grid-column:auto/span 13}.panel-grid .g-col-sm-14{grid-column:auto/span 14}.panel-grid .g-col-sm-15{grid-column:auto/span 15}.panel-grid .g-col-sm-16{grid-column:auto/span 16}.panel-grid .g-col-sm-17{grid-column:auto/span 17}.panel-grid .g-col-sm-18{grid-column:auto/span 18}.panel-grid .g-col-sm-19{grid-column:auto/span 19}.panel-grid .g-col-sm-20{grid-column:auto/span 20}.panel-grid .g-col-sm-21{grid-column:auto/span 21}.panel-grid .g-col-sm-22{grid-column:auto/span 22}.panel-grid .g-col-sm-23{grid-column:auto/span 23}.panel-grid .g-col-sm-24{grid-column:auto/span 24}.panel-grid .g-start-sm-1{grid-column-start:1}.panel-grid .g-start-sm-2{grid-column-start:2}.panel-grid .g-start-sm-3{grid-column-start:3}.panel-grid .g-start-sm-4{grid-column-start:4}.panel-grid .g-start-sm-5{grid-column-start:5}.panel-grid .g-start-sm-6{grid-column-start:6}.panel-grid .g-start-sm-7{grid-column-start:7}.panel-grid .g-start-sm-8{grid-column-start:8}.panel-grid .g-start-sm-9{grid-column-start:9}.panel-grid .g-start-sm-10{grid-column-start:10}.panel-grid .g-start-sm-11{grid-column-start:11}.panel-grid .g-start-sm-12{grid-column-start:12}.panel-grid .g-start-sm-13{grid-column-start:13}.panel-grid .g-start-sm-14{grid-column-start:14}.panel-grid .g-start-sm-15{grid-column-start:15}.panel-grid .g-start-sm-16{grid-column-start:16}.panel-grid .g-start-sm-17{grid-column-start:17}.panel-grid .g-start-sm-18{grid-column-start:18}.panel-grid .g-start-sm-19{grid-column-start:19}.panel-grid .g-start-sm-20{grid-column-start:20}.panel-grid .g-start-sm-21{grid-column-start:21}.panel-grid .g-start-sm-22{grid-column-start:22}.panel-grid .g-start-sm-23{grid-column-start:23}}@media(min-width: 768px){.panel-grid .g-col-md-1{grid-column:auto/span 1}.panel-grid .g-col-md-2{grid-column:auto/span 2}.panel-grid .g-col-md-3{grid-column:auto/span 3}.panel-grid .g-col-md-4{grid-column:auto/span 4}.panel-grid .g-col-md-5{grid-column:auto/span 5}.panel-grid .g-col-md-6{grid-column:auto/span 6}.panel-grid .g-col-md-7{grid-column:auto/span 7}.panel-grid .g-col-md-8{grid-column:auto/span 8}.panel-grid .g-col-md-9{grid-column:auto/span 9}.panel-grid .g-col-md-10{grid-column:auto/span 10}.panel-grid .g-col-md-11{grid-column:auto/span 11}.panel-grid .g-col-md-12{grid-column:auto/span 12}.panel-grid .g-col-md-13{grid-column:auto/span 13}.panel-grid .g-col-md-14{grid-column:auto/span 14}.panel-grid .g-col-md-15{grid-column:auto/span 15}.panel-grid .g-col-md-16{grid-column:auto/span 16}.panel-grid .g-col-md-17{grid-column:auto/span 17}.panel-grid .g-col-md-18{grid-column:auto/span 18}.panel-grid .g-col-md-19{grid-column:auto/span 19}.panel-grid .g-col-md-20{grid-column:auto/span 20}.panel-grid .g-col-md-21{grid-column:auto/span 21}.panel-grid .g-col-md-22{grid-column:auto/span 22}.panel-grid .g-col-md-23{grid-column:auto/span 23}.panel-grid .g-col-md-24{grid-column:auto/span 24}.panel-grid .g-start-md-1{grid-column-start:1}.panel-grid .g-start-md-2{grid-column-start:2}.panel-grid .g-start-md-3{grid-column-start:3}.panel-grid .g-start-md-4{grid-column-start:4}.panel-grid .g-start-md-5{grid-column-start:5}.panel-grid .g-start-md-6{grid-column-start:6}.panel-grid .g-start-md-7{grid-column-start:7}.panel-grid .g-start-md-8{grid-column-start:8}.panel-grid .g-start-md-9{grid-column-start:9}.panel-grid .g-start-md-10{grid-column-start:10}.panel-grid .g-start-md-11{grid-column-start:11}.panel-grid .g-start-md-12{grid-column-start:12}.panel-grid .g-start-md-13{grid-column-start:13}.panel-grid .g-start-md-14{grid-column-start:14}.panel-grid .g-start-md-15{grid-column-start:15}.panel-grid .g-start-md-16{grid-column-start:16}.panel-grid .g-start-md-17{grid-column-start:17}.panel-grid .g-start-md-18{grid-column-start:18}.panel-grid .g-start-md-19{grid-column-start:19}.panel-grid .g-start-md-20{grid-column-start:20}.panel-grid .g-start-md-21{grid-column-start:21}.panel-grid .g-start-md-22{grid-column-start:22}.panel-grid .g-start-md-23{grid-column-start:23}}@media(min-width: 992px){.panel-grid .g-col-lg-1{grid-column:auto/span 1}.panel-grid .g-col-lg-2{grid-column:auto/span 2}.panel-grid .g-col-lg-3{grid-column:auto/span 3}.panel-grid .g-col-lg-4{grid-column:auto/span 4}.panel-grid .g-col-lg-5{grid-column:auto/span 5}.panel-grid .g-col-lg-6{grid-column:auto/span 6}.panel-grid .g-col-lg-7{grid-column:auto/span 7}.panel-grid .g-col-lg-8{grid-column:auto/span 8}.panel-grid .g-col-lg-9{grid-column:auto/span 9}.panel-grid .g-col-lg-10{grid-column:auto/span 10}.panel-grid .g-col-lg-11{grid-column:auto/span 11}.panel-grid .g-col-lg-12{grid-column:auto/span 12}.panel-grid .g-col-lg-13{grid-column:auto/span 13}.panel-grid .g-col-lg-14{grid-column:auto/span 14}.panel-grid .g-col-lg-15{grid-column:auto/span 15}.panel-grid .g-col-lg-16{grid-column:auto/span 16}.panel-grid .g-col-lg-17{grid-column:auto/span 17}.panel-grid .g-col-lg-18{grid-column:auto/span 18}.panel-grid .g-col-lg-19{grid-column:auto/span 19}.panel-grid .g-col-lg-20{grid-column:auto/span 20}.panel-grid .g-col-lg-21{grid-column:auto/span 21}.panel-grid .g-col-lg-22{grid-column:auto/span 22}.panel-grid .g-col-lg-23{grid-column:auto/span 23}.panel-grid .g-col-lg-24{grid-column:auto/span 24}.panel-grid .g-start-lg-1{grid-column-start:1}.panel-grid .g-start-lg-2{grid-column-start:2}.panel-grid .g-start-lg-3{grid-column-start:3}.panel-grid .g-start-lg-4{grid-column-start:4}.panel-grid .g-start-lg-5{grid-column-start:5}.panel-grid .g-start-lg-6{grid-column-start:6}.panel-grid .g-start-lg-7{grid-column-start:7}.panel-grid .g-start-lg-8{grid-column-start:8}.panel-grid .g-start-lg-9{grid-column-start:9}.panel-grid .g-start-lg-10{grid-column-start:10}.panel-grid .g-start-lg-11{grid-column-start:11}.panel-grid .g-start-lg-12{grid-column-start:12}.panel-grid .g-start-lg-13{grid-column-start:13}.panel-grid .g-start-lg-14{grid-column-start:14}.panel-grid .g-start-lg-15{grid-column-start:15}.panel-grid .g-start-lg-16{grid-column-start:16}.panel-grid .g-start-lg-17{grid-column-start:17}.panel-grid .g-start-lg-18{grid-column-start:18}.panel-grid .g-start-lg-19{grid-column-start:19}.panel-grid .g-start-lg-20{grid-column-start:20}.panel-grid .g-start-lg-21{grid-column-start:21}.panel-grid .g-start-lg-22{grid-column-start:22}.panel-grid .g-start-lg-23{grid-column-start:23}}@media(min-width: 1200px){.panel-grid .g-col-xl-1{grid-column:auto/span 1}.panel-grid .g-col-xl-2{grid-column:auto/span 2}.panel-grid .g-col-xl-3{grid-column:auto/span 3}.panel-grid .g-col-xl-4{grid-column:auto/span 4}.panel-grid .g-col-xl-5{grid-column:auto/span 5}.panel-grid .g-col-xl-6{grid-column:auto/span 6}.panel-grid .g-col-xl-7{grid-column:auto/span 7}.panel-grid .g-col-xl-8{grid-column:auto/span 8}.panel-grid .g-col-xl-9{grid-column:auto/span 9}.panel-grid .g-col-xl-10{grid-column:auto/span 10}.panel-grid .g-col-xl-11{grid-column:auto/span 11}.panel-grid .g-col-xl-12{grid-column:auto/span 12}.panel-grid .g-col-xl-13{grid-column:auto/span 13}.panel-grid .g-col-xl-14{grid-column:auto/span 14}.panel-grid .g-col-xl-15{grid-column:auto/span 15}.panel-grid .g-col-xl-16{grid-column:auto/span 16}.panel-grid .g-col-xl-17{grid-column:auto/span 17}.panel-grid .g-col-xl-18{grid-column:auto/span 18}.panel-grid .g-col-xl-19{grid-column:auto/span 19}.panel-grid .g-col-xl-20{grid-column:auto/span 20}.panel-grid .g-col-xl-21{grid-column:auto/span 21}.panel-grid .g-col-xl-22{grid-column:auto/span 22}.panel-grid .g-col-xl-23{grid-column:auto/span 23}.panel-grid .g-col-xl-24{grid-column:auto/span 24}.panel-grid .g-start-xl-1{grid-column-start:1}.panel-grid .g-start-xl-2{grid-column-start:2}.panel-grid .g-start-xl-3{grid-column-start:3}.panel-grid .g-start-xl-4{grid-column-start:4}.panel-grid .g-start-xl-5{grid-column-start:5}.panel-grid .g-start-xl-6{grid-column-start:6}.panel-grid .g-start-xl-7{grid-column-start:7}.panel-grid .g-start-xl-8{grid-column-start:8}.panel-grid .g-start-xl-9{grid-column-start:9}.panel-grid .g-start-xl-10{grid-column-start:10}.panel-grid .g-start-xl-11{grid-column-start:11}.panel-grid .g-start-xl-12{grid-column-start:12}.panel-grid .g-start-xl-13{grid-column-start:13}.panel-grid .g-start-xl-14{grid-column-start:14}.panel-grid .g-start-xl-15{grid-column-start:15}.panel-grid .g-start-xl-16{grid-column-start:16}.panel-grid .g-start-xl-17{grid-column-start:17}.panel-grid .g-start-xl-18{grid-column-start:18}.panel-grid .g-start-xl-19{grid-column-start:19}.panel-grid .g-start-xl-20{grid-column-start:20}.panel-grid .g-start-xl-21{grid-column-start:21}.panel-grid .g-start-xl-22{grid-column-start:22}.panel-grid .g-start-xl-23{grid-column-start:23}}@media(min-width: 1400px){.panel-grid .g-col-xxl-1{grid-column:auto/span 1}.panel-grid .g-col-xxl-2{grid-column:auto/span 2}.panel-grid .g-col-xxl-3{grid-column:auto/span 3}.panel-grid .g-col-xxl-4{grid-column:auto/span 4}.panel-grid .g-col-xxl-5{grid-column:auto/span 5}.panel-grid .g-col-xxl-6{grid-column:auto/span 6}.panel-grid .g-col-xxl-7{grid-column:auto/span 7}.panel-grid .g-col-xxl-8{grid-column:auto/span 8}.panel-grid .g-col-xxl-9{grid-column:auto/span 9}.panel-grid .g-col-xxl-10{grid-column:auto/span 10}.panel-grid .g-col-xxl-11{grid-column:auto/span 11}.panel-grid .g-col-xxl-12{grid-column:auto/span 12}.panel-grid .g-col-xxl-13{grid-column:auto/span 13}.panel-grid .g-col-xxl-14{grid-column:auto/span 14}.panel-grid .g-col-xxl-15{grid-column:auto/span 15}.panel-grid .g-col-xxl-16{grid-column:auto/span 16}.panel-grid .g-col-xxl-17{grid-column:auto/span 17}.panel-grid .g-col-xxl-18{grid-column:auto/span 18}.panel-grid .g-col-xxl-19{grid-column:auto/span 19}.panel-grid .g-col-xxl-20{grid-column:auto/span 20}.panel-grid .g-col-xxl-21{grid-column:auto/span 21}.panel-grid .g-col-xxl-22{grid-column:auto/span 22}.panel-grid .g-col-xxl-23{grid-column:auto/span 23}.panel-grid .g-col-xxl-24{grid-column:auto/span 24}.panel-grid .g-start-xxl-1{grid-column-start:1}.panel-grid .g-start-xxl-2{grid-column-start:2}.panel-grid .g-start-xxl-3{grid-column-start:3}.panel-grid .g-start-xxl-4{grid-column-start:4}.panel-grid .g-start-xxl-5{grid-column-start:5}.panel-grid .g-start-xxl-6{grid-column-start:6}.panel-grid .g-start-xxl-7{grid-column-start:7}.panel-grid .g-start-xxl-8{grid-column-start:8}.panel-grid .g-start-xxl-9{grid-column-start:9}.panel-grid .g-start-xxl-10{grid-column-start:10}.panel-grid .g-start-xxl-11{grid-column-start:11}.panel-grid .g-start-xxl-12{grid-column-start:12}.panel-grid .g-start-xxl-13{grid-column-start:13}.panel-grid .g-start-xxl-14{grid-column-start:14}.panel-grid .g-start-xxl-15{grid-column-start:15}.panel-grid .g-start-xxl-16{grid-column-start:16}.panel-grid .g-start-xxl-17{grid-column-start:17}.panel-grid .g-start-xxl-18{grid-column-start:18}.panel-grid .g-start-xxl-19{grid-column-start:19}.panel-grid .g-start-xxl-20{grid-column-start:20}.panel-grid .g-start-xxl-21{grid-column-start:21}.panel-grid .g-start-xxl-22{grid-column-start:22}.panel-grid .g-start-xxl-23{grid-column-start:23}}main{margin-top:1em;margin-bottom:1em}h1,.h1,h2,.h2{color:inherit;margin-top:2rem;margin-bottom:1rem;font-weight:600}h1.title,.title.h1{margin-top:0}main.content>p:has(+section){margin-bottom:2rem}main.content>section:first-of-type>h2:nth-child(1),main.content>section:first-of-type>.h2:nth-child(1){margin-top:0}h2,.h2{border-bottom:1px solid #dee2e6;padding-bottom:.5rem}h3,.h3{font-weight:600}h3,.h3,h4,.h4{opacity:.9;margin-top:1.5rem}h5,.h5,h6,.h6{opacity:.9}.header-section-number{color:hsl(210,10.3448275862%,47.7450980392%)}.nav-link.active .header-section-number{color:inherit}mark,.mark{padding:0em}.panel-caption,.figure-caption,.subfigure-caption,.table-caption,figcaption,caption{font-size:.9rem;color:hsl(210,10.3448275862%,47.7450980392%)}.quarto-layout-cell[data-ref-parent] caption{color:hsl(210,10.3448275862%,47.7450980392%)}.column-margin figcaption,.margin-caption,div.aside,aside,.column-margin{color:hsl(210,10.3448275862%,47.7450980392%);font-size:.825rem}.panel-caption.margin-caption{text-align:inherit}.column-margin.column-container p{margin-bottom:0}.column-margin.column-container>*:not(.collapse):first-child{padding-bottom:.5em;display:block}.column-margin.column-container>*:not(.collapse):not(:first-child){padding-top:.5em;padding-bottom:.5em;display:block}.column-margin.column-container>*.collapse:not(.show){display:none}@media(min-width: 768px){.column-margin.column-container .callout-margin-content:first-child{margin-top:4.5em}.column-margin.column-container .callout-margin-content-simple:first-child{margin-top:3.5em}}.margin-caption>*{padding-top:.5em;padding-bottom:.5em}@media(max-width: 767.98px){.quarto-layout-row{flex-direction:column}}.nav-tabs .nav-item{margin-top:1px;cursor:pointer}.tab-content{margin-top:0px;border-left:#dee2e6 1px solid;border-right:#dee2e6 1px solid;border-bottom:#dee2e6 1px solid;margin-left:0;padding:1em;margin-bottom:1em}@media(max-width: 767.98px){.layout-sidebar{margin-left:0;margin-right:0}}.panel-sidebar,.panel-sidebar .form-control,.panel-input,.panel-input .form-control,.selectize-dropdown{font-size:.9rem}.panel-sidebar .form-control,.panel-input .form-control{padding-top:.1rem}.tab-pane div.sourceCode{margin-top:0px}.tab-pane>p{padding-top:0}.tab-pane>p:nth-child(1){padding-top:0}.tab-pane>p:last-child{margin-bottom:0}.tab-pane>pre:last-child{margin-bottom:0}.tab-content>.tab-pane:not(.active){display:none !important}div.sourceCode{background-color:rgba(233,236,239,.65);border:1px solid rgba(233,236,239,.65)}pre.sourceCode{background-color:rgba(0,0,0,0)}pre.sourceCode{border:none;font-size:.875em;overflow-y:visible !important;padding:.4em}div.sourceCode{overflow-y:hidden}.callout div.sourceCode{margin-left:initial}.blockquote{font-size:inherit;padding-left:1rem;padding-right:1.5rem;color:hsl(210,10.3448275862%,47.7450980392%)}.blockquote h1:first-child,.blockquote .h1:first-child,.blockquote h2:first-child,.blockquote .h2:first-child,.blockquote h3:first-child,.blockquote .h3:first-child,.blockquote h4:first-child,.blockquote .h4:first-child,.blockquote h5:first-child,.blockquote .h5:first-child{margin-top:0}pre{background-color:initial;padding:initial;border:initial}p code.sourceCode,li code.sourceCode,td code.sourceCode{background-color:rgba(233,236,239,.65)}p pre code:not(.sourceCode),li pre code:not(.sourceCode),pre code:not(.sourceCode){background-color:initial}p code:not(.sourceCode),li code:not(.sourceCode),td code:not(.sourceCode){background-color:rgba(233,236,239,.65);padding:.2em}nav p code:not(.sourceCode),nav li code:not(.sourceCode),nav td code:not(.sourceCode){background-color:rgba(0,0,0,0);padding:0}td code:not(.sourceCode){white-space:pre-wrap}#quarto-embedded-source-code-modal>.modal-dialog{max-width:1000px;padding-left:1.75rem;padding-right:1.75rem}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-body{padding:0}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-body div.sourceCode{margin:0;padding:.2rem .2rem;border-radius:0px;border:none}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-header{padding:.7rem}.code-tools-button{font-size:1rem;padding:.15rem .15rem;margin-left:5px;color:#6c757d;background-color:rgba(0,0,0,0);transition:initial;cursor:pointer}.code-tools-button>.bi::before{display:inline-block;height:1rem;width:1rem;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:1rem 1rem}.code-tools-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}#quarto-embedded-source-code-modal .code-copy-button>.bi::before{background-image:url('data:image/svg+xml,')}#quarto-embedded-source-code-modal .code-copy-button-checked>.bi::before{background-image:url('data:image/svg+xml,')}.sidebar{will-change:top;transition:top 200ms linear;position:sticky;overflow-y:auto;padding-top:1.2em;max-height:100vh}.sidebar.toc-left,.sidebar.margin-sidebar{top:0px;padding-top:1em}.sidebar.quarto-banner-title-block-sidebar>*{padding-top:1.65em}figure .quarto-notebook-link{margin-top:.5em}.quarto-notebook-link{font-size:.75em;color:#6c757d;margin-bottom:1em;text-decoration:none;display:block}.quarto-notebook-link:hover{text-decoration:underline;color:#2761e3}.quarto-notebook-link::before{display:inline-block;height:.75rem;width:.75rem;margin-bottom:0em;margin-right:.25em;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:.75rem .75rem}.toc-actions i.bi,.quarto-code-links i.bi,.quarto-other-links i.bi,.quarto-alternate-notebooks i.bi,.quarto-alternate-formats i.bi{margin-right:.4em;font-size:.8rem}.quarto-other-links-text-target .quarto-code-links i.bi,.quarto-other-links-text-target .quarto-other-links i.bi{margin-right:.2em}.quarto-other-formats-text-target .quarto-alternate-formats i.bi{margin-right:.1em}.toc-actions i.bi.empty,.quarto-code-links i.bi.empty,.quarto-other-links i.bi.empty,.quarto-alternate-notebooks i.bi.empty,.quarto-alternate-formats i.bi.empty{padding-left:1em}.quarto-notebook h2,.quarto-notebook .h2{border-bottom:none}.quarto-notebook .cell-container{display:flex}.quarto-notebook .cell-container .cell{flex-grow:4}.quarto-notebook .cell-container .cell-decorator{padding-top:1.5em;padding-right:1em;text-align:right}.quarto-notebook .cell-container.code-fold .cell-decorator{padding-top:3em}.quarto-notebook .cell-code code{white-space:pre-wrap}.quarto-notebook .cell .cell-output-stderr pre code,.quarto-notebook .cell .cell-output-stdout pre code{white-space:pre-wrap;overflow-wrap:anywhere}.toc-actions,.quarto-alternate-formats,.quarto-other-links,.quarto-code-links,.quarto-alternate-notebooks{padding-left:0em}.sidebar .toc-actions a,.sidebar .quarto-alternate-formats a,.sidebar .quarto-other-links a,.sidebar .quarto-code-links a,.sidebar .quarto-alternate-notebooks a,.sidebar nav[role=doc-toc] a{text-decoration:none}.sidebar .toc-actions a:hover,.sidebar .quarto-other-links a:hover,.sidebar .quarto-code-links a:hover,.sidebar .quarto-alternate-formats a:hover,.sidebar .quarto-alternate-notebooks a:hover{color:#2761e3}.sidebar .toc-actions h2,.sidebar .toc-actions .h2,.sidebar .quarto-code-links h2,.sidebar .quarto-code-links .h2,.sidebar .quarto-other-links h2,.sidebar .quarto-other-links .h2,.sidebar .quarto-alternate-notebooks h2,.sidebar .quarto-alternate-notebooks .h2,.sidebar .quarto-alternate-formats h2,.sidebar .quarto-alternate-formats .h2,.sidebar nav[role=doc-toc]>h2,.sidebar nav[role=doc-toc]>.h2{font-weight:500;margin-bottom:.2rem;margin-top:.3rem;font-family:inherit;border-bottom:0;padding-bottom:0;padding-top:0px}.sidebar .toc-actions>h2,.sidebar .toc-actions>.h2,.sidebar .quarto-code-links>h2,.sidebar .quarto-code-links>.h2,.sidebar .quarto-other-links>h2,.sidebar .quarto-other-links>.h2,.sidebar .quarto-alternate-notebooks>h2,.sidebar .quarto-alternate-notebooks>.h2,.sidebar .quarto-alternate-formats>h2,.sidebar .quarto-alternate-formats>.h2{font-size:.8rem}.sidebar nav[role=doc-toc]>h2,.sidebar nav[role=doc-toc]>.h2{font-size:.875rem}.sidebar nav[role=doc-toc]>ul a{border-left:1px solid #e9ecef;padding-left:.6rem}.sidebar .toc-actions h2>ul a,.sidebar .toc-actions .h2>ul a,.sidebar .quarto-code-links h2>ul a,.sidebar .quarto-code-links .h2>ul a,.sidebar .quarto-other-links h2>ul a,.sidebar .quarto-other-links .h2>ul a,.sidebar .quarto-alternate-notebooks h2>ul a,.sidebar .quarto-alternate-notebooks .h2>ul a,.sidebar .quarto-alternate-formats h2>ul a,.sidebar .quarto-alternate-formats .h2>ul a{border-left:none;padding-left:.6rem}.sidebar .toc-actions ul a:empty,.sidebar .quarto-code-links ul a:empty,.sidebar .quarto-other-links ul a:empty,.sidebar .quarto-alternate-notebooks ul a:empty,.sidebar .quarto-alternate-formats ul a:empty,.sidebar nav[role=doc-toc]>ul a:empty{display:none}.sidebar .toc-actions ul,.sidebar .quarto-code-links ul,.sidebar .quarto-other-links ul,.sidebar .quarto-alternate-notebooks ul,.sidebar .quarto-alternate-formats ul{padding-left:0;list-style:none}.sidebar nav[role=doc-toc] ul{list-style:none;padding-left:0;list-style:none}.sidebar nav[role=doc-toc]>ul{margin-left:.45em}.quarto-margin-sidebar nav[role=doc-toc]{padding-left:.5em}.sidebar .toc-actions>ul,.sidebar .quarto-code-links>ul,.sidebar .quarto-other-links>ul,.sidebar .quarto-alternate-notebooks>ul,.sidebar .quarto-alternate-formats>ul{font-size:.8rem}.sidebar nav[role=doc-toc]>ul{font-size:.875rem}.sidebar .toc-actions ul li a,.sidebar .quarto-code-links ul li a,.sidebar .quarto-other-links ul li a,.sidebar .quarto-alternate-notebooks ul li a,.sidebar .quarto-alternate-formats ul li a,.sidebar nav[role=doc-toc]>ul li a{line-height:1.1rem;padding-bottom:.2rem;padding-top:.2rem;color:inherit}.sidebar nav[role=doc-toc] ul>li>ul>li>a{padding-left:1.2em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>a{padding-left:2.4em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>a{padding-left:3.6em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>ul>li>a{padding-left:4.8em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>ul>li>ul>li>a{padding-left:6em}.sidebar nav[role=doc-toc] ul>li>a.active,.sidebar nav[role=doc-toc] ul>li>ul>li>a.active{border-left:1px solid #2761e3;color:#2761e3 !important}.sidebar nav[role=doc-toc] ul>li>a:hover,.sidebar nav[role=doc-toc] ul>li>ul>li>a:hover{color:#2761e3 !important}kbd,.kbd{color:#343a40;background-color:#f8f9fa;border:1px solid;border-radius:5px;border-color:#dee2e6}.quarto-appendix-contents div.hanging-indent{margin-left:0em}.quarto-appendix-contents div.hanging-indent div.csl-entry{margin-left:1em;text-indent:-1em}.citation a,.footnote-ref{text-decoration:none}.footnotes ol{padding-left:1em}.tippy-content>*{margin-bottom:.7em}.tippy-content>*:last-child{margin-bottom:0}.callout{margin-top:1.25rem;margin-bottom:1.25rem;border-radius:.25rem;overflow-wrap:break-word}.callout .callout-title-container{overflow-wrap:anywhere}.callout.callout-style-simple{padding:.4em .7em;border-left:5px solid;border-right:1px solid #dee2e6;border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}.callout.callout-style-default{border-left:5px solid;border-right:1px solid #dee2e6;border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}.callout .callout-body-container{flex-grow:1}.callout.callout-style-simple .callout-body{font-size:.9rem;font-weight:400;margin-bottom:-0.4em;margin-top:.5em}.callout.callout-style-default .callout-body{font-size:.9rem;font-weight:400}.callout:not(.no-icon).callout-titled.callout-style-simple .callout-body{padding-left:1.6em}.callout.callout-titled>.callout-header{padding-top:.2em;margin-bottom:-0.2em}.callout.callout-empty-content>.callout-header{margin-bottom:0em;border-bottom-right-radius:calc(0.25rem + -1px)}.callout>.callout-header.collapsed{border-bottom-right-radius:calc(0.25rem + -1px)}.callout.callout-style-simple>div.callout-header{border-bottom:none;font-size:.9rem;font-weight:600;opacity:75%}.callout.callout-style-default>div.callout-header{border-bottom:none;font-weight:600;opacity:85%;font-size:.9rem;padding-left:.5em;padding-right:.5em;border-top-right-radius:calc(0.25rem + -1px)}.callout.callout-style-default .callout-body{padding-left:.5em;padding-right:.5em}.callout.callout-style-default .callout-body>:first-child{padding-top:.5rem;margin-top:0}.callout>div.callout-header[data-bs-toggle=collapse]{cursor:pointer}.callout.callout-style-default .callout-header[aria-expanded=false],.callout.callout-style-default .callout-header[aria-expanded=true]{padding-top:0px;margin-bottom:0px;align-items:center}.callout.callout-titled .callout-body>:last-child:not(.sourceCode),.callout.callout-titled .callout-body>div>:last-child:not(.sourceCode){padding-bottom:.5rem;margin-bottom:0}.callout:not(.callout-titled) .callout-body>:first-child,.callout:not(.callout-titled) .callout-body>div>:first-child{margin-top:.25rem}.callout:not(.callout-titled) .callout-body>:last-child,.callout:not(.callout-titled) .callout-body>div>:last-child{margin-bottom:.2rem}.callout.callout-style-simple .callout-icon::before,.callout.callout-style-simple .callout-toggle::before{height:1rem;width:1rem;display:inline-block;content:"";background-repeat:no-repeat;background-size:1rem 1rem}.callout.callout-style-default .callout-icon::before,.callout.callout-style-default .callout-toggle::before{height:.9rem;width:.9rem;display:inline-block;content:"";background-repeat:no-repeat;background-size:.9rem .9rem}.callout.callout-style-default .callout-toggle::before{margin-top:5px}.callout .callout-btn-toggle .callout-toggle::before{transition:transform .2s linear}.callout .callout-header[aria-expanded=false] .callout-toggle::before{transform:rotate(-90deg)}.callout .callout-header[aria-expanded=true] .callout-toggle::before{transform:none}.callout.callout-style-simple:not(.no-icon) div.callout-icon-container{padding-top:.2em;padding-right:.55em}.callout.callout-style-default:not(.no-icon) div.callout-icon-container{padding-top:.1em;padding-right:.35em}.callout.callout-style-default:not(.no-icon) div.callout-title-container{margin-top:-1px}.callout.callout-style-default.callout-caution:not(.no-icon) div.callout-icon-container{padding-top:.3em;padding-right:.35em}.callout>.callout-body>.callout-icon-container>.no-icon,.callout>.callout-header>.callout-icon-container>.no-icon{display:none}div.callout.callout{border-left-color:#6c757d}div.callout.callout-style-default>.callout-header{background-color:#6c757d}div.callout-note.callout{border-left-color:#2780e3}div.callout-note.callout-style-default>.callout-header{background-color:rgb(233.4,242.3,252.2)}div.callout-note:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-note.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-note .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-tip.callout{border-left-color:#3fb618}div.callout-tip.callout-style-default>.callout-header{background-color:rgb(235.8,247.7,231.9)}div.callout-tip:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-tip.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-tip .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-warning.callout{border-left-color:#ff7518}div.callout-warning.callout-style-default>.callout-header{background-color:rgb(255,241.2,231.9)}div.callout-warning:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-warning.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-warning .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-caution.callout{border-left-color:#f0ad4e}div.callout-caution.callout-style-default>.callout-header{background-color:rgb(253.5,246.8,237.3)}div.callout-caution:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-caution.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-caution .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-important.callout{border-left-color:#ff0039}div.callout-important.callout-style-default>.callout-header{background-color:rgb(255,229.5,235.2)}div.callout-important:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-important.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-important .callout-toggle::before{background-image:url('data:image/svg+xml,')}.quarto-toggle-container{display:flex;align-items:center}.quarto-reader-toggle .bi::before,.quarto-color-scheme-toggle .bi::before{display:inline-block;height:1rem;width:1rem;content:"";background-repeat:no-repeat;background-size:1rem 1rem}.sidebar-navigation{padding-left:20px}.navbar{background-color:#f8f9fa;color:rgb(84.32,84.66,85)}.navbar .quarto-color-scheme-toggle:not(.alternate) .bi::before{background-image:url('data:image/svg+xml,')}.navbar .quarto-color-scheme-toggle.alternate .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-color-scheme-toggle:not(.alternate) .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-color-scheme-toggle.alternate .bi::before{background-image:url('data:image/svg+xml,')}.quarto-sidebar-toggle{border-color:#dee2e6;border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem;border-style:solid;border-width:1px;overflow:hidden;border-top-width:0px;padding-top:0px !important}.quarto-sidebar-toggle-title{cursor:pointer;padding-bottom:2px;margin-left:.25em;text-align:center;font-weight:400;font-size:.775em}#quarto-content .quarto-sidebar-toggle{background:hsl(0,0%,98%)}#quarto-content .quarto-sidebar-toggle-title{color:#343a40}.quarto-sidebar-toggle-icon{color:#dee2e6;margin-right:.5em;float:right;transition:transform .2s ease}.quarto-sidebar-toggle-icon::before{padding-top:5px}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-icon{transform:rotate(-180deg)}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-title{border-bottom:solid #dee2e6 1px}.quarto-sidebar-toggle-contents{background-color:#fff;padding-right:10px;padding-left:10px;margin-top:0px !important;transition:max-height .5s ease}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-contents{padding-top:1em;padding-bottom:10px}@media(max-width: 767.98px){.sidebar-menu-container{padding-bottom:5em}}.quarto-sidebar-toggle:not(.expanded) .quarto-sidebar-toggle-contents{padding-top:0px !important;padding-bottom:0px}nav[role=doc-toc]{z-index:1020}#quarto-sidebar>*,nav[role=doc-toc]>*{transition:opacity .1s ease,border .1s ease}#quarto-sidebar.slow>*,nav[role=doc-toc].slow>*{transition:opacity .4s ease,border .4s ease}.quarto-color-scheme-toggle:not(.alternate).top-right .bi::before{background-image:url('data:image/svg+xml,')}.quarto-color-scheme-toggle.alternate.top-right .bi::before{background-image:url('data:image/svg+xml,')}#quarto-appendix.default{border-top:1px solid #dee2e6}#quarto-appendix.default{background-color:#fff;padding-top:1.5em;margin-top:2em;z-index:998}#quarto-appendix.default .quarto-appendix-heading{margin-top:0;line-height:1.4em;font-weight:600;opacity:.9;border-bottom:none;margin-bottom:0}#quarto-appendix.default .footnotes ol,#quarto-appendix.default .footnotes ol li>p:last-of-type,#quarto-appendix.default .quarto-appendix-contents>p:last-of-type{margin-bottom:0}#quarto-appendix.default .footnotes ol{margin-left:.5em}#quarto-appendix.default .quarto-appendix-secondary-label{margin-bottom:.4em}#quarto-appendix.default .quarto-appendix-bibtex{font-size:.7em;padding:1em;border:solid 1px #dee2e6;margin-bottom:1em}#quarto-appendix.default .quarto-appendix-bibtex code.sourceCode{white-space:pre-wrap}#quarto-appendix.default .quarto-appendix-citeas{font-size:.9em;padding:1em;border:solid 1px #dee2e6;margin-bottom:1em}#quarto-appendix.default .quarto-appendix-heading{font-size:1em !important}#quarto-appendix.default *[role=doc-endnotes]>ol,#quarto-appendix.default .quarto-appendix-contents>*:not(h2):not(.h2){font-size:.9em}#quarto-appendix.default section{padding-bottom:1.5em}#quarto-appendix.default section *[role=doc-endnotes],#quarto-appendix.default section>*:not(a){opacity:.9;word-wrap:break-word}.btn.btn-quarto,div.cell-output-display .btn-quarto{--bs-btn-color: rgb(202.22, 203.78, 205.34);--bs-btn-bg: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: rgb(202.22, 203.78, 205.34);--bs-btn-hover-bg: rgb(82.45, 87.55, 92.65);--bs-btn-hover-border-color: rgb(72.3, 77.7, 83.1);--bs-btn-focus-shadow-rgb: 75, 80, 85;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(92.6, 97.4, 102.2);--bs-btn-active-border-color: rgb(72.3, 77.7, 83.1);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #343a40;--bs-btn-disabled-border-color: #343a40}nav.quarto-secondary-nav.color-navbar{background-color:#f8f9fa;color:rgb(84.32,84.66,85)}nav.quarto-secondary-nav.color-navbar h1,nav.quarto-secondary-nav.color-navbar .h1,nav.quarto-secondary-nav.color-navbar .quarto-btn-toggle{color:rgb(84.32,84.66,85)}@media(max-width: 991.98px){body.nav-sidebar .quarto-title-banner{margin-bottom:0;padding-bottom:1em}body.nav-sidebar #title-block-header{margin-block-end:0}}p.subtitle{margin-top:.25em;margin-bottom:.5em}code a:any-link{color:inherit;text-decoration-color:#6c757d}/*! light */div.observablehq table thead tr th{background-color:var(--bs-body-bg)}input,button,select,optgroup,textarea{background-color:var(--bs-body-bg)}.code-annotated .code-copy-button{margin-right:1.25em;margin-top:0;padding-bottom:0;padding-top:3px}.code-annotation-gutter-bg{background-color:#fff}.code-annotation-gutter{background-color:rgba(233,236,239,.65)}.code-annotation-gutter,.code-annotation-gutter-bg{height:100%;width:calc(20px + .5em);position:absolute;top:0;right:0}dl.code-annotation-container-grid dt{margin-right:1em;margin-top:.25rem}dl.code-annotation-container-grid dt{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;color:rgb(74.8620689655,83.5,92.1379310345);border:solid rgb(74.8620689655,83.5,92.1379310345) 1px;border-radius:50%;height:22px;width:22px;line-height:22px;font-size:11px;text-align:center;vertical-align:middle;text-decoration:none}dl.code-annotation-container-grid dt[data-target-cell]{cursor:pointer}dl.code-annotation-container-grid dt[data-target-cell].code-annotation-active{color:#fff;border:solid #aaa 1px;background-color:#aaa}pre.code-annotation-code{padding-top:0;padding-bottom:0}pre.code-annotation-code code{z-index:3}#code-annotation-line-highlight-gutter{width:100%;border-top:solid rgba(170,170,170,.2666666667) 1px;border-bottom:solid rgba(170,170,170,.2666666667) 1px;z-index:2;background-color:rgba(170,170,170,.1333333333)}#code-annotation-line-highlight{margin-left:-4em;width:calc(100% + 4em);border-top:solid rgba(170,170,170,.2666666667) 1px;border-bottom:solid rgba(170,170,170,.2666666667) 1px;z-index:2;background-color:rgba(170,170,170,.1333333333)}code.sourceCode .code-annotation-anchor.code-annotation-active{background-color:var(--quarto-hl-normal-color, #aaaaaa);border:solid var(--quarto-hl-normal-color, #aaaaaa) 1px;color:#e9ecef;font-weight:bolder}code.sourceCode .code-annotation-anchor{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;color:var(--quarto-hl-co-color);border:solid var(--quarto-hl-co-color) 1px;border-radius:50%;height:18px;width:18px;font-size:9px;margin-top:2px}code.sourceCode button.code-annotation-anchor{padding:2px;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none}code.sourceCode a.code-annotation-anchor{line-height:18px;text-align:center;vertical-align:middle;cursor:default;text-decoration:none}@media print{.page-columns .column-screen-inset{grid-column:page-start-inset/page-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset table{background:#fff}.page-columns .column-screen-inset-left{grid-column:page-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-inset-left table{background:#fff}.page-columns .column-screen-inset-right{grid-column:body-content-start/page-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset-right table{background:#fff}.page-columns .column-screen{grid-column:page-start/page-end;z-index:998;opacity:.999}.page-columns .column-screen table{background:#fff}.page-columns .column-screen-left{grid-column:page-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-left table{background:#fff}.page-columns .column-screen-right{grid-column:body-content-start/page-end;z-index:998;opacity:.999}.page-columns .column-screen-right table{background:#fff}.page-columns .column-screen-inset-shaded{grid-column:page-start-inset/page-end-inset;padding:1em;background:#f8f9fa;z-index:998;opacity:.999;margin-bottom:1em}}.quarto-video{margin-bottom:1em}.table{border-top:1px solid rgb(214.4,215.6,216.8);border-bottom:1px solid rgb(214.4,215.6,216.8)}.table>thead{border-top-width:0;border-bottom:1px solid rgb(153.5,156.5,159.5)}.table a{word-break:break-word}.table>:not(caption)>*>*{background-color:unset;color:unset}#quarto-document-content .crosstalk-input .checkbox input[type=checkbox],#quarto-document-content .crosstalk-input .checkbox-inline input[type=checkbox]{position:unset;margin-top:unset;margin-left:unset}#quarto-document-content .row{margin-left:unset;margin-right:unset}.quarto-xref{white-space:nowrap}#quarto-draft-alert{margin-top:0px;margin-bottom:0px;padding:.3em;text-align:center;font-size:.9em}#quarto-draft-alert i{margin-right:.3em}#quarto-back-to-top{z-index:1000}pre{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:0.875em;font-weight:400}pre code{font-family:inherit;font-size:inherit;font-weight:inherit}code{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:0.875em;font-weight:400}a{background-color:rgba(0,0,0,0);font-weight:400;text-decoration:underline}.screen-reader-only{position:absolute;clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;width:1px}a.external:after{content:"";background-image:url('data:image/svg+xml,');background-size:contain;background-repeat:no-repeat;background-position:center center;margin-left:.2em;padding-right:.75em}div.sourceCode code a.external:after{content:none}a.external:after:hover{cursor:pointer}.quarto-ext-icon{display:inline-block;font-size:.75em;padding-left:.3em}.code-with-filename .code-with-filename-file{margin-bottom:0;padding-bottom:2px;padding-top:2px;padding-left:.7em;border:var(--quarto-border-width) solid var(--quarto-border-color);border-radius:var(--quarto-border-radius);border-bottom:0;border-bottom-left-radius:0%;border-bottom-right-radius:0%}.code-with-filename div.sourceCode,.reveal .code-with-filename div.sourceCode{margin-top:0;border-top-left-radius:0%;border-top-right-radius:0%}.code-with-filename .code-with-filename-file pre{margin-bottom:0}.code-with-filename .code-with-filename-file{background-color:rgba(219,219,219,.8)}.quarto-dark .code-with-filename .code-with-filename-file{background-color:#555}.code-with-filename .code-with-filename-file strong{font-weight:400}.quarto-title-banner{margin-bottom:1em;color:rgb(84.32,84.66,85);background:#f8f9fa}.quarto-title-banner a{color:rgb(84.32,84.66,85)}.quarto-title-banner h1,.quarto-title-banner .h1,.quarto-title-banner h2,.quarto-title-banner .h2{color:rgb(84.32,84.66,85)}.quarto-title-banner .code-tools-button{color:hsl(210,.4016064257%,53.2%)}.quarto-title-banner .code-tools-button:hover{color:rgb(84.32,84.66,85)}.quarto-title-banner .code-tools-button>.bi::before{background-image:url('data:image/svg+xml,')}.quarto-title-banner .code-tools-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}.quarto-title-banner .quarto-title .title{font-weight:600}.quarto-title-banner .quarto-categories{margin-top:.75em}@media(min-width: 992px){.quarto-title-banner{padding-top:2.5em;padding-bottom:2.5em}}@media(max-width: 991.98px){.quarto-title-banner{padding-top:1em;padding-bottom:1em}}@media(max-width: 767.98px){body.hypothesis-enabled #title-block-header>*{padding-right:20px}}main.quarto-banner-title-block>section:first-child>h2,main.quarto-banner-title-block>section:first-child>.h2,main.quarto-banner-title-block>section:first-child>h3,main.quarto-banner-title-block>section:first-child>.h3,main.quarto-banner-title-block>section:first-child>h4,main.quarto-banner-title-block>section:first-child>.h4{margin-top:0}.quarto-title .quarto-categories{display:flex;flex-wrap:wrap;row-gap:.5em;column-gap:.4em;padding-bottom:.5em;margin-top:.75em}.quarto-title .quarto-categories .quarto-category{padding:.25em .75em;font-size:.65em;text-transform:uppercase;border:solid 1px;border-radius:.25rem;opacity:.6}.quarto-title .quarto-categories .quarto-category a{color:inherit}.quarto-title-meta-container{display:grid;grid-template-columns:1fr auto}.quarto-title-meta-column-end{display:flex;flex-direction:column;padding-left:1em}.quarto-title-meta-column-end a .bi{margin-right:.3em}#title-block-header.quarto-title-block.default .quarto-title-meta{display:grid;grid-template-columns:repeat(2, 1fr);grid-column-gap:1em}#title-block-header.quarto-title-block.default .quarto-title .title{margin-bottom:0}#title-block-header.quarto-title-block.default .quarto-title-author-orcid img{margin-top:-0.2em;height:.8em;width:.8em}#title-block-header.quarto-title-block.default .quarto-title-author-email{opacity:.7}#title-block-header.quarto-title-block.default .quarto-description p:last-of-type{margin-bottom:0}#title-block-header.quarto-title-block.default .quarto-title-meta-contents p,#title-block-header.quarto-title-block.default .quarto-title-authors p,#title-block-header.quarto-title-block.default .quarto-title-affiliations p{margin-bottom:.1em}#title-block-header.quarto-title-block.default .quarto-title-meta-heading{text-transform:uppercase;margin-top:1em;font-size:.8em;opacity:.8;font-weight:400}#title-block-header.quarto-title-block.default .quarto-title-meta-contents{font-size:.9em}#title-block-header.quarto-title-block.default .quarto-title-meta-contents p.affiliation:last-of-type{margin-bottom:.1em}#title-block-header.quarto-title-block.default p.affiliation{margin-bottom:.1em}#title-block-header.quarto-title-block.default .keywords,#title-block-header.quarto-title-block.default .description,#title-block-header.quarto-title-block.default .abstract{margin-top:0}#title-block-header.quarto-title-block.default .keywords>p,#title-block-header.quarto-title-block.default .description>p,#title-block-header.quarto-title-block.default .abstract>p{font-size:.9em}#title-block-header.quarto-title-block.default .keywords>p:last-of-type,#title-block-header.quarto-title-block.default .description>p:last-of-type,#title-block-header.quarto-title-block.default .abstract>p:last-of-type{margin-bottom:0}#title-block-header.quarto-title-block.default .keywords .block-title,#title-block-header.quarto-title-block.default .description .block-title,#title-block-header.quarto-title-block.default .abstract .block-title{margin-top:1em;text-transform:uppercase;font-size:.8em;opacity:.8;font-weight:400}#title-block-header.quarto-title-block.default .quarto-title-meta-author{display:grid;grid-template-columns:minmax(max-content, 1fr) 1fr;grid-column-gap:1em}.quarto-title-tools-only{display:flex;justify-content:right}body{-webkit-font-smoothing:antialiased}.badge.bg-light{color:#343a40}.progress .progress-bar{font-size:8px;line-height:8px}:root{--quarto-scss-export-gray-300: #dee2e6;--quarto-scss-export-gray-500: #adb5bd;--quarto-scss-export-gray-600: #6c757d;--quarto-scss-export-gray-800: #343a40;--quarto-scss-export-card-cap-bg: rgba(52, 58, 64, 0.25);--quarto-scss-export-border-color: #dee2e6;--quarto-scss-export-text-muted: #6c757d;--quarto-scss-export-white: #fff;--quarto-scss-export-gray-100: #f8f9fa;--quarto-scss-export-gray-200: #e9ecef;--quarto-scss-export-gray-400: #ced4da;--quarto-scss-export-gray-700: #495057;--quarto-scss-export-gray-900: #212529;--quarto-scss-export-black: #000;--quarto-scss-export-blue: #2780e3;--quarto-scss-export-indigo: #6610f2;--quarto-scss-export-purple: #613d7c;--quarto-scss-export-pink: #e83e8c;--quarto-scss-export-red: #ff0039;--quarto-scss-export-orange: #f0ad4e;--quarto-scss-export-yellow: #ff7518;--quarto-scss-export-green: #3fb618;--quarto-scss-export-teal: #20c997;--quarto-scss-export-cyan: #9954bb;--quarto-scss-export-primary: #2780e3;--quarto-scss-export-secondary: #343a40;--quarto-scss-export-success: #3fb618;--quarto-scss-export-info: #9954bb;--quarto-scss-export-warning: #ff7518;--quarto-scss-export-danger: #ff0039;--quarto-scss-export-light: #f8f9fa;--quarto-scss-export-dark: #343a40;--quarto-scss-export-body-color: #343a40;--quarto-scss-export-title-banner-color: ;--quarto-scss-export-title-banner-bg: ;--quarto-scss-export-btn-code-copy-color: #5E5E5E;--quarto-scss-export-btn-code-copy-color-active: #4758AB;--quarto-scss-export-sidebar-bg: #fff;--quarto-scss-export-link-color: #2761e3;--quarto-scss-export-link-color-bg: transparent;--quarto-scss-export-code-color: #7d12ba;--quarto-scss-export-code-bg: #f8f9fa;--quarto-scss-export-toc-color: #2761e3;--quarto-scss-export-toc-active-border: #2761e3;--quarto-scss-export-toc-inactive-border: #e9ecef;--quarto-scss-export-navbar-default: #2780e3;--quarto-scss-export-navbar-hl-override: false;--quarto-scss-export-navbar-bg: #f8f9fa;--quarto-scss-export-btn-bg: #343a40;--quarto-scss-export-btn-fg: rgb(202.22, 203.78, 205.34);--quarto-scss-export-body-contrast-bg: #fff;--quarto-scss-export-body-contrast-color: #343a40;--quarto-scss-export-navbar-fg: rgb(84.32, 84.66, 85);--quarto-scss-export-navbar-hl: rgb(31.2, 77.6, 181.6);--quarto-scss-export-navbar-brand: rgb(84.32, 84.66, 85);--quarto-scss-export-navbar-brand-hl: rgb(31.2, 77.6, 181.6);--quarto-scss-export-navbar-toggler-border-color: rgba(84.32, 84.66, 85, 0);--quarto-scss-export-navbar-hover-color: rgba(31.2, 77.6, 181.6, 0.8);--quarto-scss-export-navbar-disabled-color: rgba(84.32, 84.66, 85, 0.75);--quarto-scss-export-sidebar-fg: rgb(89.25, 89.25, 89.25);--quarto-scss-export-title-block-color: #343a40;--quarto-scss-export-title-block-contast-color: #fff;--quarto-scss-export-footer-bg: #fff;--quarto-scss-export-footer-fg: rgb(117.3, 117.3, 117.3);--quarto-scss-export-popover-bg: #fff;--quarto-scss-export-input-bg: #fff;--quarto-scss-export-input-border-color: #dee2e6;--quarto-scss-export-code-annotation-higlight-color: rgba(170, 170, 170, 0.2666666667);--quarto-scss-export-code-annotation-higlight-bg: rgba(170, 170, 170, 0.1333333333);--quarto-scss-export-table-group-separator-color: rgb(153.5, 156.5, 159.5);--quarto-scss-export-table-group-separator-color-lighter: rgb(214.4, 215.6, 216.8);--quarto-scss-export-link-decoration: underline;--quarto-scss-export-table-border-color: #dee2e6;--quarto-scss-export-sidebar-glass-bg: rgba(102, 102, 102, 0.4);--quarto-scss-export-color-contrast-dark: #000;--quarto-scss-export-color-contrast-light: #fff;--quarto-scss-export-blue-100: rgb(211.8, 229.6, 249.4);--quarto-scss-export-blue-200: rgb(168.6, 204.2, 243.8);--quarto-scss-export-blue-300: rgb(125.4, 178.8, 238.2);--quarto-scss-export-blue-400: rgb(82.2, 153.4, 232.6);--quarto-scss-export-blue-500: #2780e3;--quarto-scss-export-blue-600: rgb(31.2, 102.4, 181.6);--quarto-scss-export-blue-700: rgb(23.4, 76.8, 136.2);--quarto-scss-export-blue-800: rgb(15.6, 51.2, 90.8);--quarto-scss-export-blue-900: rgb(7.8, 25.6, 45.4);--quarto-scss-export-indigo-100: rgb(224.4, 207.2, 252.4);--quarto-scss-export-indigo-200: rgb(193.8, 159.4, 249.8);--quarto-scss-export-indigo-300: rgb(163.2, 111.6, 247.2);--quarto-scss-export-indigo-400: rgb(132.6, 63.8, 244.6);--quarto-scss-export-indigo-500: #6610f2;--quarto-scss-export-indigo-600: rgb(81.6, 12.8, 193.6);--quarto-scss-export-indigo-700: rgb(61.2, 9.6, 145.2);--quarto-scss-export-indigo-800: rgb(40.8, 6.4, 96.8);--quarto-scss-export-indigo-900: rgb(20.4, 3.2, 48.4);--quarto-scss-export-purple-100: rgb(223.4, 216.2, 228.8);--quarto-scss-export-purple-200: rgb(191.8, 177.4, 202.6);--quarto-scss-export-purple-300: rgb(160.2, 138.6, 176.4);--quarto-scss-export-purple-400: rgb(128.6, 99.8, 150.2);--quarto-scss-export-purple-500: #613d7c;--quarto-scss-export-purple-600: rgb(77.6, 48.8, 99.2);--quarto-scss-export-purple-700: rgb(58.2, 36.6, 74.4);--quarto-scss-export-purple-800: rgb(38.8, 24.4, 49.6);--quarto-scss-export-purple-900: rgb(19.4, 12.2, 24.8);--quarto-scss-export-pink-100: rgb(250.4, 216.4, 232);--quarto-scss-export-pink-200: rgb(245.8, 177.8, 209);--quarto-scss-export-pink-300: rgb(241.2, 139.2, 186);--quarto-scss-export-pink-400: rgb(236.6, 100.6, 163);--quarto-scss-export-pink-500: #e83e8c;--quarto-scss-export-pink-600: rgb(185.6, 49.6, 112);--quarto-scss-export-pink-700: rgb(139.2, 37.2, 84);--quarto-scss-export-pink-800: rgb(92.8, 24.8, 56);--quarto-scss-export-pink-900: rgb(46.4, 12.4, 28);--quarto-scss-export-red-100: rgb(255, 204, 215.4);--quarto-scss-export-red-200: rgb(255, 153, 175.8);--quarto-scss-export-red-300: rgb(255, 102, 136.2);--quarto-scss-export-red-400: rgb(255, 51, 96.6);--quarto-scss-export-red-500: #ff0039;--quarto-scss-export-red-600: rgb(204, 0, 45.6);--quarto-scss-export-red-700: rgb(153, 0, 34.2);--quarto-scss-export-red-800: rgb(102, 0, 22.8);--quarto-scss-export-red-900: rgb(51, 0, 11.4);--quarto-scss-export-orange-100: rgb(252, 238.6, 219.6);--quarto-scss-export-orange-200: rgb(249, 222.2, 184.2);--quarto-scss-export-orange-300: rgb(246, 205.8, 148.8);--quarto-scss-export-orange-400: rgb(243, 189.4, 113.4);--quarto-scss-export-orange-500: #f0ad4e;--quarto-scss-export-orange-600: rgb(192, 138.4, 62.4);--quarto-scss-export-orange-700: rgb(144, 103.8, 46.8);--quarto-scss-export-orange-800: rgb(96, 69.2, 31.2);--quarto-scss-export-orange-900: rgb(48, 34.6, 15.6);--quarto-scss-export-yellow-100: rgb(255, 227.4, 208.8);--quarto-scss-export-yellow-200: rgb(255, 199.8, 162.6);--quarto-scss-export-yellow-300: rgb(255, 172.2, 116.4);--quarto-scss-export-yellow-400: rgb(255, 144.6, 70.2);--quarto-scss-export-yellow-500: #ff7518;--quarto-scss-export-yellow-600: rgb(204, 93.6, 19.2);--quarto-scss-export-yellow-700: rgb(153, 70.2, 14.4);--quarto-scss-export-yellow-800: rgb(102, 46.8, 9.6);--quarto-scss-export-yellow-900: rgb(51, 23.4, 4.8);--quarto-scss-export-green-100: rgb(216.6, 240.4, 208.8);--quarto-scss-export-green-200: rgb(178.2, 225.8, 162.6);--quarto-scss-export-green-300: rgb(139.8, 211.2, 116.4);--quarto-scss-export-green-400: rgb(101.4, 196.6, 70.2);--quarto-scss-export-green-500: #3fb618;--quarto-scss-export-green-600: rgb(50.4, 145.6, 19.2);--quarto-scss-export-green-700: rgb(37.8, 109.2, 14.4);--quarto-scss-export-green-800: rgb(25.2, 72.8, 9.6);--quarto-scss-export-green-900: rgb(12.6, 36.4, 4.8);--quarto-scss-export-teal-100: rgb(210.4, 244.2, 234.2);--quarto-scss-export-teal-200: rgb(165.8, 233.4, 213.4);--quarto-scss-export-teal-300: rgb(121.2, 222.6, 192.6);--quarto-scss-export-teal-400: rgb(76.6, 211.8, 171.8);--quarto-scss-export-teal-500: #20c997;--quarto-scss-export-teal-600: rgb(25.6, 160.8, 120.8);--quarto-scss-export-teal-700: rgb(19.2, 120.6, 90.6);--quarto-scss-export-teal-800: rgb(12.8, 80.4, 60.4);--quarto-scss-export-teal-900: rgb(6.4, 40.2, 30.2);--quarto-scss-export-cyan-100: rgb(234.6, 220.8, 241.4);--quarto-scss-export-cyan-200: rgb(214.2, 186.6, 227.8);--quarto-scss-export-cyan-300: rgb(193.8, 152.4, 214.2);--quarto-scss-export-cyan-400: rgb(173.4, 118.2, 200.6);--quarto-scss-export-cyan-500: #9954bb;--quarto-scss-export-cyan-600: rgb(122.4, 67.2, 149.6);--quarto-scss-export-cyan-700: rgb(91.8, 50.4, 112.2);--quarto-scss-export-cyan-800: rgb(61.2, 33.6, 74.8);--quarto-scss-export-cyan-900: rgb(30.6, 16.8, 37.4);--quarto-scss-export-default: #343a40;--quarto-scss-export-primary-text-emphasis: rgb(15.6, 51.2, 90.8);--quarto-scss-export-secondary-text-emphasis: rgb(20.8, 23.2, 25.6);--quarto-scss-export-success-text-emphasis: rgb(25.2, 72.8, 9.6);--quarto-scss-export-info-text-emphasis: rgb(61.2, 33.6, 74.8);--quarto-scss-export-warning-text-emphasis: rgb(102, 46.8, 9.6);--quarto-scss-export-danger-text-emphasis: rgb(102, 0, 22.8);--quarto-scss-export-light-text-emphasis: #495057;--quarto-scss-export-dark-text-emphasis: #495057;--quarto-scss-export-primary-bg-subtle: rgb(211.8, 229.6, 249.4);--quarto-scss-export-secondary-bg-subtle: rgb(214.4, 215.6, 216.8);--quarto-scss-export-success-bg-subtle: rgb(216.6, 240.4, 208.8);--quarto-scss-export-info-bg-subtle: rgb(234.6, 220.8, 241.4);--quarto-scss-export-warning-bg-subtle: rgb(255, 227.4, 208.8);--quarto-scss-export-danger-bg-subtle: rgb(255, 204, 215.4);--quarto-scss-export-light-bg-subtle: rgb(251.5, 252, 252.5);--quarto-scss-export-dark-bg-subtle: #ced4da;--quarto-scss-export-primary-border-subtle: rgb(168.6, 204.2, 243.8);--quarto-scss-export-secondary-border-subtle: rgb(173.8, 176.2, 178.6);--quarto-scss-export-success-border-subtle: rgb(178.2, 225.8, 162.6);--quarto-scss-export-info-border-subtle: rgb(214.2, 186.6, 227.8);--quarto-scss-export-warning-border-subtle: rgb(255, 199.8, 162.6);--quarto-scss-export-danger-border-subtle: rgb(255, 153, 175.8);--quarto-scss-export-light-border-subtle: #e9ecef;--quarto-scss-export-dark-border-subtle: #adb5bd;--quarto-scss-export-body-text-align: ;--quarto-scss-export-body-bg: #fff;--quarto-scss-export-body-secondary-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-body-secondary-bg: #e9ecef;--quarto-scss-export-body-tertiary-color: rgba(52, 58, 64, 0.5);--quarto-scss-export-body-tertiary-bg: #f8f9fa;--quarto-scss-export-body-emphasis-color: #000;--quarto-scss-export-link-hover-color: rgb(31.2, 77.6, 181.6);--quarto-scss-export-link-hover-decoration: ;--quarto-scss-export-border-color-translucent: rgba(0, 0, 0, 0.175);--quarto-scss-export-component-active-bg: #2780e3;--quarto-scss-export-component-active-color: #fff;--quarto-scss-export-focus-ring-color: rgba(39, 128, 227, 0.25);--quarto-scss-export-headings-font-family: ;--quarto-scss-export-headings-font-style: ;--quarto-scss-export-display-font-family: ;--quarto-scss-export-display-font-style: ;--quarto-scss-export-blockquote-footer-color: #6c757d;--quarto-scss-export-blockquote-border-color: #e9ecef;--quarto-scss-export-hr-bg-color: ;--quarto-scss-export-hr-height: ;--quarto-scss-export-hr-border-color: ;--quarto-scss-export-legend-font-weight: ;--quarto-scss-export-mark-bg: rgb(255, 227.4, 208.8);--quarto-scss-export-table-color: #343a40;--quarto-scss-export-table-bg: #fff;--quarto-scss-export-table-accent-bg: transparent;--quarto-scss-export-table-th-font-weight: ;--quarto-scss-export-table-striped-color: #343a40;--quarto-scss-export-table-striped-bg: rgba(0, 0, 0, 0.05);--quarto-scss-export-table-active-color: #343a40;--quarto-scss-export-table-active-bg: rgba(0, 0, 0, 0.1);--quarto-scss-export-table-hover-color: #343a40;--quarto-scss-export-table-hover-bg: rgba(0, 0, 0, 0.075);--quarto-scss-export-table-caption-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-input-btn-font-family: ;--quarto-scss-export-input-btn-focus-color: rgba(39, 128, 227, 0.25);--quarto-scss-export-btn-color: #343a40;--quarto-scss-export-btn-font-family: ;--quarto-scss-export-btn-white-space: ;--quarto-scss-export-btn-link-color: #2761e3;--quarto-scss-export-btn-link-hover-color: rgb(31.2, 77.6, 181.6);--quarto-scss-export-btn-link-disabled-color: #6c757d;--quarto-scss-export-form-text-font-style: ;--quarto-scss-export-form-text-font-weight: ;--quarto-scss-export-form-text-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-form-label-font-size: ;--quarto-scss-export-form-label-font-style: ;--quarto-scss-export-form-label-font-weight: ;--quarto-scss-export-form-label-color: ;--quarto-scss-export-input-font-family: ;--quarto-scss-export-input-disabled-color: ;--quarto-scss-export-input-disabled-bg: #e9ecef;--quarto-scss-export-input-disabled-border-color: ;--quarto-scss-export-input-color: #343a40;--quarto-scss-export-input-focus-bg: #fff;--quarto-scss-export-input-focus-border-color: rgb(147, 191.5, 241);--quarto-scss-export-input-focus-color: #343a40;--quarto-scss-export-input-placeholder-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-input-plaintext-color: #343a40;--quarto-scss-export-form-check-label-color: ;--quarto-scss-export-form-check-transition: ;--quarto-scss-export-form-check-input-bg: #fff;--quarto-scss-export-form-check-input-focus-border: rgb(147, 191.5, 241);--quarto-scss-export-form-check-input-checked-color: #fff;--quarto-scss-export-form-check-input-checked-bg-color: #2780e3;--quarto-scss-export-form-check-input-checked-border-color: #2780e3;--quarto-scss-export-form-check-input-indeterminate-color: #fff;--quarto-scss-export-form-check-input-indeterminate-bg-color: #2780e3;--quarto-scss-export-form-check-input-indeterminate-border-color: #2780e3;--quarto-scss-export-form-switch-color: rgba(0, 0, 0, 0.25);--quarto-scss-export-form-switch-focus-color: rgb(147, 191.5, 241);--quarto-scss-export-form-switch-checked-color: #fff;--quarto-scss-export-input-group-addon-color: #343a40;--quarto-scss-export-input-group-addon-bg: #f8f9fa;--quarto-scss-export-input-group-addon-border-color: #dee2e6;--quarto-scss-export-form-select-font-family: ;--quarto-scss-export-form-select-color: #343a40;--quarto-scss-export-form-select-bg: #fff;--quarto-scss-export-form-select-disabled-color: ;--quarto-scss-export-form-select-disabled-bg: #e9ecef;--quarto-scss-export-form-select-disabled-border-color: ;--quarto-scss-export-form-select-indicator-color: #343a40;--quarto-scss-export-form-select-border-color: #dee2e6;--quarto-scss-export-form-select-focus-border-color: rgb(147, 191.5, 241);--quarto-scss-export-form-range-track-bg: #f8f9fa;--quarto-scss-export-form-range-thumb-bg: #2780e3;--quarto-scss-export-form-range-thumb-active-bg: rgb(190.2, 216.9, 246.6);--quarto-scss-export-form-range-thumb-disabled-bg: rgba(52, 58, 64, 0.75);--quarto-scss-export-form-file-button-color: #343a40;--quarto-scss-export-form-file-button-bg: #f8f9fa;--quarto-scss-export-form-file-button-hover-bg: #e9ecef;--quarto-scss-export-form-floating-label-disabled-color: #6c757d;--quarto-scss-export-form-feedback-font-style: ;--quarto-scss-export-form-feedback-valid-color: #3fb618;--quarto-scss-export-form-feedback-invalid-color: #ff0039;--quarto-scss-export-form-feedback-icon-valid-color: #3fb618;--quarto-scss-export-form-feedback-icon-invalid-color: #ff0039;--quarto-scss-export-form-valid-color: #3fb618;--quarto-scss-export-form-valid-border-color: #3fb618;--quarto-scss-export-form-invalid-color: #ff0039;--quarto-scss-export-form-invalid-border-color: #ff0039;--quarto-scss-export-nav-link-font-size: ;--quarto-scss-export-nav-link-font-weight: ;--quarto-scss-export-nav-link-color: #2761e3;--quarto-scss-export-nav-link-hover-color: rgb(31.2, 77.6, 181.6);--quarto-scss-export-nav-link-disabled-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-nav-tabs-border-color: #dee2e6;--quarto-scss-export-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;--quarto-scss-export-nav-tabs-link-active-color: #000;--quarto-scss-export-nav-tabs-link-active-bg: #fff;--quarto-scss-export-nav-pills-link-active-bg: #2780e3;--quarto-scss-export-nav-pills-link-active-color: #fff;--quarto-scss-export-nav-underline-link-active-color: #000;--quarto-scss-export-navbar-padding-x: ;--quarto-scss-export-navbar-light-contrast: #000;--quarto-scss-export-navbar-dark-contrast: #000;--quarto-scss-export-navbar-light-icon-color: rgba(0, 0, 0, 0.75);--quarto-scss-export-navbar-dark-icon-color: rgba(0, 0, 0, 0.75);--quarto-scss-export-dropdown-color: #343a40;--quarto-scss-export-dropdown-bg: #fff;--quarto-scss-export-dropdown-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-dropdown-divider-bg: rgba(0, 0, 0, 0.175);--quarto-scss-export-dropdown-link-color: #343a40;--quarto-scss-export-dropdown-link-hover-color: #343a40;--quarto-scss-export-dropdown-link-hover-bg: #f8f9fa;--quarto-scss-export-dropdown-link-active-bg: #2780e3;--quarto-scss-export-dropdown-link-active-color: #fff;--quarto-scss-export-dropdown-link-disabled-color: rgba(52, 58, 64, 0.5);--quarto-scss-export-dropdown-header-color: #6c757d;--quarto-scss-export-dropdown-dark-color: #dee2e6;--quarto-scss-export-dropdown-dark-bg: #343a40;--quarto-scss-export-dropdown-dark-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-dropdown-dark-divider-bg: rgba(0, 0, 0, 0.175);--quarto-scss-export-dropdown-dark-box-shadow: ;--quarto-scss-export-dropdown-dark-link-color: #dee2e6;--quarto-scss-export-dropdown-dark-link-hover-color: #fff;--quarto-scss-export-dropdown-dark-link-hover-bg: rgba(255, 255, 255, 0.15);--quarto-scss-export-dropdown-dark-link-active-color: #fff;--quarto-scss-export-dropdown-dark-link-active-bg: #2780e3;--quarto-scss-export-dropdown-dark-link-disabled-color: #adb5bd;--quarto-scss-export-dropdown-dark-header-color: #adb5bd;--quarto-scss-export-pagination-color: #2761e3;--quarto-scss-export-pagination-bg: #fff;--quarto-scss-export-pagination-border-color: #dee2e6;--quarto-scss-export-pagination-focus-color: rgb(31.2, 77.6, 181.6);--quarto-scss-export-pagination-focus-bg: #e9ecef;--quarto-scss-export-pagination-hover-color: rgb(31.2, 77.6, 181.6);--quarto-scss-export-pagination-hover-bg: #f8f9fa;--quarto-scss-export-pagination-hover-border-color: #dee2e6;--quarto-scss-export-pagination-active-color: #fff;--quarto-scss-export-pagination-active-bg: #2780e3;--quarto-scss-export-pagination-active-border-color: #2780e3;--quarto-scss-export-pagination-disabled-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-pagination-disabled-bg: #e9ecef;--quarto-scss-export-pagination-disabled-border-color: #dee2e6;--quarto-scss-export-card-title-color: ;--quarto-scss-export-card-subtitle-color: ;--quarto-scss-export-card-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-card-box-shadow: ;--quarto-scss-export-card-cap-color: ;--quarto-scss-export-card-height: ;--quarto-scss-export-card-color: ;--quarto-scss-export-card-bg: #fff;--quarto-scss-export-accordion-color: #343a40;--quarto-scss-export-accordion-bg: #fff;--quarto-scss-export-accordion-border-color: #dee2e6;--quarto-scss-export-accordion-button-color: #343a40;--quarto-scss-export-accordion-button-bg: #fff;--quarto-scss-export-accordion-button-active-bg: rgb(211.8, 229.6, 249.4);--quarto-scss-export-accordion-button-active-color: rgb(15.6, 51.2, 90.8);--quarto-scss-export-accordion-button-focus-border-color: rgb(147, 191.5, 241);--quarto-scss-export-accordion-icon-color: #343a40;--quarto-scss-export-accordion-icon-active-color: rgb(15.6, 51.2, 90.8);--quarto-scss-export-tooltip-color: #fff;--quarto-scss-export-tooltip-bg: #000;--quarto-scss-export-tooltip-margin: ;--quarto-scss-export-tooltip-arrow-color: ;--quarto-scss-export-form-feedback-tooltip-line-height: ;--quarto-scss-export-popover-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-popover-header-bg: #e9ecef;--quarto-scss-export-popover-body-color: #343a40;--quarto-scss-export-popover-arrow-color: #fff;--quarto-scss-export-popover-arrow-outer-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-toast-color: ;--quarto-scss-export-toast-background-color: rgba(255, 255, 255, 0.85);--quarto-scss-export-toast-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-toast-header-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-toast-header-background-color: rgba(255, 255, 255, 0.85);--quarto-scss-export-toast-header-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-badge-color: #fff;--quarto-scss-export-modal-content-color: ;--quarto-scss-export-modal-content-bg: #fff;--quarto-scss-export-modal-content-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-modal-backdrop-bg: #000;--quarto-scss-export-modal-header-border-color: #dee2e6;--quarto-scss-export-modal-footer-bg: ;--quarto-scss-export-modal-footer-border-color: #dee2e6;--quarto-scss-export-progress-bg: #e9ecef;--quarto-scss-export-progress-bar-color: #fff;--quarto-scss-export-progress-bar-bg: #2780e3;--quarto-scss-export-list-group-color: #343a40;--quarto-scss-export-list-group-bg: #fff;--quarto-scss-export-list-group-border-color: #dee2e6;--quarto-scss-export-list-group-hover-bg: #f8f9fa;--quarto-scss-export-list-group-active-bg: #2780e3;--quarto-scss-export-list-group-active-color: #fff;--quarto-scss-export-list-group-active-border-color: #2780e3;--quarto-scss-export-list-group-disabled-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-list-group-disabled-bg: #fff;--quarto-scss-export-list-group-action-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-list-group-action-hover-color: #000;--quarto-scss-export-list-group-action-active-color: #343a40;--quarto-scss-export-list-group-action-active-bg: #e9ecef;--quarto-scss-export-thumbnail-bg: #fff;--quarto-scss-export-thumbnail-border-color: #dee2e6;--quarto-scss-export-figure-caption-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-breadcrumb-font-size: ;--quarto-scss-export-breadcrumb-bg: ;--quarto-scss-export-breadcrumb-divider-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-breadcrumb-active-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-breadcrumb-border-radius: ;--quarto-scss-export-carousel-control-color: #fff;--quarto-scss-export-carousel-indicator-active-bg: #fff;--quarto-scss-export-carousel-caption-color: #fff;--quarto-scss-export-carousel-dark-indicator-active-bg: #000;--quarto-scss-export-carousel-dark-caption-color: #000;--quarto-scss-export-btn-close-color: #000;--quarto-scss-export-offcanvas-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-offcanvas-bg-color: #fff;--quarto-scss-export-offcanvas-color: #343a40;--quarto-scss-export-offcanvas-backdrop-bg: #000;--quarto-scss-export-code-color-dark: white;--quarto-scss-export-kbd-color: #fff;--quarto-scss-export-kbd-bg: #343a40;--quarto-scss-export-nested-kbd-font-weight: ;--quarto-scss-export-pre-bg: #f8f9fa;--quarto-scss-export-pre-color: #000;--quarto-scss-export-bslib-page-sidebar-title-bg: #f8f9fa;--quarto-scss-export-bslib-page-sidebar-title-color: #000;--quarto-scss-export-bslib-sidebar-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.05);--quarto-scss-export-bslib-sidebar-toggle-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.1);--quarto-scss-export-sidebar-color: rgb(89.25, 89.25, 89.25);--quarto-scss-export-sidebar-hover-color: rgba(32.76, 81.48, 190.68, 0.8);--quarto-scss-export-sidebar-disabled-color: rgba(89.25, 89.25, 89.25, 0.75);--quarto-scss-export-valuebox-bg-primary: #5397e9;--quarto-scss-export-valuebox-bg-secondary: #343a40;--quarto-scss-export-valuebox-bg-success: #3aa716;--quarto-scss-export-valuebox-bg-info: rgba(153, 84, 187, 0.7019607843);--quarto-scss-export-valuebox-bg-warning: #fa6400;--quarto-scss-export-valuebox-bg-danger: rgba(255, 0, 57, 0.7019607843);--quarto-scss-export-valuebox-bg-light: #f8f9fa;--quarto-scss-export-valuebox-bg-dark: #343a40;--quarto-scss-export-mermaid-bg-color: #fff;--quarto-scss-export-mermaid-edge-color: #343a40;--quarto-scss-export-mermaid-node-fg-color: #343a40;--quarto-scss-export-mermaid-fg-color: #343a40;--quarto-scss-export-mermaid-fg-color--lighter: rgb(74.8620689655, 83.5, 92.1379310345);--quarto-scss-export-mermaid-fg-color--lightest: rgb(97.724137931, 109, 120.275862069);--quarto-scss-export-mermaid-label-bg-color: #fff;--quarto-scss-export-mermaid-label-fg-color: #2780e3;--quarto-scss-export-mermaid-node-bg-color: rgba(39, 128, 227, 0.1);--quarto-scss-export-code-block-border-left-color: #dee2e6;--quarto-scss-export-callout-color-note: #2780e3;--quarto-scss-export-callout-color-tip: #3fb618;--quarto-scss-export-callout-color-important: #ff0039;--quarto-scss-export-callout-color-caution: #f0ad4e;--quarto-scss-export-callout-color-warning: #ff7518} \ No newline at end of file diff --git a/docs/docs/site_libs/bootstrap/bootstrap-icons.css b/docs/docs/site_libs/bootstrap/bootstrap-icons.css deleted file mode 100644 index 82b40f5..0000000 --- a/docs/docs/site_libs/bootstrap/bootstrap-icons.css +++ /dev/null @@ -1,2106 +0,0 @@ -/*! - * Bootstrap Icons v1.13.1 (https://icons.getbootstrap.com/) - * Copyright 2019-2024 The Bootstrap Authors - * Licensed under MIT (https://github.com/twbs/icons/blob/main/LICENSE) - */ - -@font-face { - font-display: block; - font-family: "bootstrap-icons"; - src: -url("./bootstrap-icons.woff?e34853135f9e39acf64315236852cd5a") format("woff"); -} - -.bi::before, -[class^="bi-"]::before, -[class*=" bi-"]::before { - display: inline-block; - font-family: bootstrap-icons !important; - font-style: normal; - font-weight: normal !important; - font-variant: normal; - text-transform: none; - line-height: 1; - vertical-align: -.125em; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -.bi-123::before { content: "\f67f"; } -.bi-alarm-fill::before { content: "\f101"; } -.bi-alarm::before { content: "\f102"; } -.bi-align-bottom::before { content: "\f103"; } -.bi-align-center::before { content: "\f104"; } -.bi-align-end::before { content: "\f105"; } -.bi-align-middle::before { content: "\f106"; } -.bi-align-start::before { content: "\f107"; } -.bi-align-top::before { content: "\f108"; } -.bi-alt::before { content: "\f109"; } -.bi-app-indicator::before { content: "\f10a"; } -.bi-app::before { content: "\f10b"; } -.bi-archive-fill::before { content: "\f10c"; } -.bi-archive::before { content: "\f10d"; } -.bi-arrow-90deg-down::before { content: "\f10e"; } -.bi-arrow-90deg-left::before { content: "\f10f"; } -.bi-arrow-90deg-right::before { content: "\f110"; } -.bi-arrow-90deg-up::before { content: "\f111"; } -.bi-arrow-bar-down::before { content: "\f112"; } -.bi-arrow-bar-left::before { content: "\f113"; } -.bi-arrow-bar-right::before { content: "\f114"; } -.bi-arrow-bar-up::before { content: "\f115"; } -.bi-arrow-clockwise::before { content: "\f116"; } -.bi-arrow-counterclockwise::before { content: "\f117"; } -.bi-arrow-down-circle-fill::before { content: "\f118"; } -.bi-arrow-down-circle::before { content: "\f119"; } -.bi-arrow-down-left-circle-fill::before { content: "\f11a"; } -.bi-arrow-down-left-circle::before { content: "\f11b"; } -.bi-arrow-down-left-square-fill::before { content: "\f11c"; } -.bi-arrow-down-left-square::before { content: "\f11d"; } -.bi-arrow-down-left::before { content: "\f11e"; } -.bi-arrow-down-right-circle-fill::before { content: "\f11f"; } -.bi-arrow-down-right-circle::before { content: "\f120"; } -.bi-arrow-down-right-square-fill::before { content: "\f121"; } -.bi-arrow-down-right-square::before { content: "\f122"; } -.bi-arrow-down-right::before { content: "\f123"; } -.bi-arrow-down-short::before { content: "\f124"; } -.bi-arrow-down-square-fill::before { content: "\f125"; } -.bi-arrow-down-square::before { content: "\f126"; } -.bi-arrow-down-up::before { content: "\f127"; } -.bi-arrow-down::before { content: "\f128"; } -.bi-arrow-left-circle-fill::before { content: "\f129"; } -.bi-arrow-left-circle::before { content: "\f12a"; } -.bi-arrow-left-right::before { content: "\f12b"; } -.bi-arrow-left-short::before { content: "\f12c"; } -.bi-arrow-left-square-fill::before { content: "\f12d"; } -.bi-arrow-left-square::before { content: "\f12e"; } -.bi-arrow-left::before { content: "\f12f"; } -.bi-arrow-repeat::before { content: "\f130"; } -.bi-arrow-return-left::before { content: "\f131"; } -.bi-arrow-return-right::before { content: "\f132"; } -.bi-arrow-right-circle-fill::before { content: "\f133"; } -.bi-arrow-right-circle::before { content: "\f134"; } -.bi-arrow-right-short::before { content: "\f135"; } -.bi-arrow-right-square-fill::before { content: "\f136"; } -.bi-arrow-right-square::before { content: "\f137"; } -.bi-arrow-right::before { content: "\f138"; } -.bi-arrow-up-circle-fill::before { content: "\f139"; } -.bi-arrow-up-circle::before { content: "\f13a"; } -.bi-arrow-up-left-circle-fill::before { content: "\f13b"; } -.bi-arrow-up-left-circle::before { content: "\f13c"; } -.bi-arrow-up-left-square-fill::before { content: "\f13d"; } -.bi-arrow-up-left-square::before { content: "\f13e"; } -.bi-arrow-up-left::before { content: "\f13f"; } -.bi-arrow-up-right-circle-fill::before { content: "\f140"; } -.bi-arrow-up-right-circle::before { content: "\f141"; } -.bi-arrow-up-right-square-fill::before { content: "\f142"; } -.bi-arrow-up-right-square::before { content: "\f143"; } -.bi-arrow-up-right::before { content: "\f144"; } -.bi-arrow-up-short::before { content: "\f145"; } -.bi-arrow-up-square-fill::before { content: "\f146"; } -.bi-arrow-up-square::before { content: "\f147"; } -.bi-arrow-up::before { content: "\f148"; } -.bi-arrows-angle-contract::before { content: "\f149"; } -.bi-arrows-angle-expand::before { content: "\f14a"; } -.bi-arrows-collapse::before { content: "\f14b"; } -.bi-arrows-expand::before { content: "\f14c"; } -.bi-arrows-fullscreen::before { content: "\f14d"; } -.bi-arrows-move::before { content: "\f14e"; } -.bi-aspect-ratio-fill::before { content: "\f14f"; } -.bi-aspect-ratio::before { content: "\f150"; } -.bi-asterisk::before { content: "\f151"; } -.bi-at::before { content: "\f152"; } -.bi-award-fill::before { content: "\f153"; } -.bi-award::before { content: "\f154"; } -.bi-back::before { content: "\f155"; } -.bi-backspace-fill::before { content: "\f156"; } -.bi-backspace-reverse-fill::before { content: "\f157"; } -.bi-backspace-reverse::before { content: "\f158"; } -.bi-backspace::before { content: "\f159"; } -.bi-badge-3d-fill::before { content: "\f15a"; } -.bi-badge-3d::before { content: "\f15b"; } -.bi-badge-4k-fill::before { content: "\f15c"; } -.bi-badge-4k::before { content: "\f15d"; } -.bi-badge-8k-fill::before { content: "\f15e"; } -.bi-badge-8k::before { content: "\f15f"; } -.bi-badge-ad-fill::before { content: "\f160"; } -.bi-badge-ad::before { content: "\f161"; } -.bi-badge-ar-fill::before { content: "\f162"; } -.bi-badge-ar::before { content: "\f163"; } -.bi-badge-cc-fill::before { content: "\f164"; } -.bi-badge-cc::before { content: "\f165"; } -.bi-badge-hd-fill::before { content: "\f166"; } -.bi-badge-hd::before { content: "\f167"; } -.bi-badge-tm-fill::before { content: "\f168"; } -.bi-badge-tm::before { content: "\f169"; } -.bi-badge-vo-fill::before { content: "\f16a"; } -.bi-badge-vo::before { content: "\f16b"; } -.bi-badge-vr-fill::before { content: "\f16c"; } -.bi-badge-vr::before { content: "\f16d"; } -.bi-badge-wc-fill::before { content: "\f16e"; } -.bi-badge-wc::before { content: "\f16f"; } -.bi-bag-check-fill::before { content: "\f170"; } -.bi-bag-check::before { content: "\f171"; } -.bi-bag-dash-fill::before { content: "\f172"; } -.bi-bag-dash::before { content: "\f173"; } -.bi-bag-fill::before { content: "\f174"; } -.bi-bag-plus-fill::before { content: "\f175"; } -.bi-bag-plus::before { content: "\f176"; } -.bi-bag-x-fill::before { content: "\f177"; } -.bi-bag-x::before { content: "\f178"; } -.bi-bag::before { content: "\f179"; } -.bi-bar-chart-fill::before { content: "\f17a"; } -.bi-bar-chart-line-fill::before { content: "\f17b"; } -.bi-bar-chart-line::before { content: "\f17c"; } -.bi-bar-chart-steps::before { content: "\f17d"; } -.bi-bar-chart::before { content: "\f17e"; } -.bi-basket-fill::before { content: "\f17f"; } -.bi-basket::before { content: "\f180"; } -.bi-basket2-fill::before { content: "\f181"; } -.bi-basket2::before { content: "\f182"; } -.bi-basket3-fill::before { content: "\f183"; } -.bi-basket3::before { content: "\f184"; } -.bi-battery-charging::before { content: "\f185"; } -.bi-battery-full::before { content: "\f186"; } -.bi-battery-half::before { content: "\f187"; } -.bi-battery::before { content: "\f188"; } -.bi-bell-fill::before { content: "\f189"; } -.bi-bell::before { content: "\f18a"; } -.bi-bezier::before { content: "\f18b"; } -.bi-bezier2::before { content: "\f18c"; } -.bi-bicycle::before { content: "\f18d"; } -.bi-binoculars-fill::before { content: "\f18e"; } -.bi-binoculars::before { content: "\f18f"; } -.bi-blockquote-left::before { content: "\f190"; } -.bi-blockquote-right::before { content: "\f191"; } -.bi-book-fill::before { content: "\f192"; } -.bi-book-half::before { content: "\f193"; } -.bi-book::before { content: "\f194"; } -.bi-bookmark-check-fill::before { content: "\f195"; } -.bi-bookmark-check::before { content: "\f196"; } -.bi-bookmark-dash-fill::before { content: "\f197"; } -.bi-bookmark-dash::before { content: "\f198"; } -.bi-bookmark-fill::before { content: "\f199"; } -.bi-bookmark-heart-fill::before { content: "\f19a"; } -.bi-bookmark-heart::before { content: "\f19b"; } -.bi-bookmark-plus-fill::before { content: "\f19c"; } -.bi-bookmark-plus::before { content: "\f19d"; } -.bi-bookmark-star-fill::before { content: "\f19e"; } -.bi-bookmark-star::before { content: "\f19f"; } -.bi-bookmark-x-fill::before { content: "\f1a0"; } -.bi-bookmark-x::before { content: "\f1a1"; } -.bi-bookmark::before { content: "\f1a2"; } -.bi-bookmarks-fill::before { content: "\f1a3"; } -.bi-bookmarks::before { content: "\f1a4"; } -.bi-bookshelf::before { content: "\f1a5"; } -.bi-bootstrap-fill::before { content: "\f1a6"; } -.bi-bootstrap-reboot::before { content: "\f1a7"; } -.bi-bootstrap::before { content: "\f1a8"; } -.bi-border-all::before { content: "\f1a9"; } -.bi-border-bottom::before { content: "\f1aa"; } -.bi-border-center::before { content: "\f1ab"; } -.bi-border-inner::before { content: "\f1ac"; } -.bi-border-left::before { content: "\f1ad"; } -.bi-border-middle::before { content: "\f1ae"; } -.bi-border-outer::before { content: "\f1af"; } -.bi-border-right::before { content: "\f1b0"; } -.bi-border-style::before { content: "\f1b1"; } -.bi-border-top::before { content: "\f1b2"; } -.bi-border-width::before { content: "\f1b3"; } -.bi-border::before { content: "\f1b4"; } -.bi-bounding-box-circles::before { content: "\f1b5"; } -.bi-bounding-box::before { content: "\f1b6"; } -.bi-box-arrow-down-left::before { content: "\f1b7"; } -.bi-box-arrow-down-right::before { content: "\f1b8"; } -.bi-box-arrow-down::before { content: "\f1b9"; } -.bi-box-arrow-in-down-left::before { content: "\f1ba"; } -.bi-box-arrow-in-down-right::before { content: "\f1bb"; } -.bi-box-arrow-in-down::before { content: "\f1bc"; } -.bi-box-arrow-in-left::before { content: "\f1bd"; } -.bi-box-arrow-in-right::before { content: "\f1be"; } -.bi-box-arrow-in-up-left::before { content: "\f1bf"; } -.bi-box-arrow-in-up-right::before { content: "\f1c0"; } -.bi-box-arrow-in-up::before { content: "\f1c1"; } -.bi-box-arrow-left::before { content: "\f1c2"; } -.bi-box-arrow-right::before { content: "\f1c3"; } -.bi-box-arrow-up-left::before { content: "\f1c4"; } -.bi-box-arrow-up-right::before { content: "\f1c5"; } -.bi-box-arrow-up::before { content: "\f1c6"; } -.bi-box-seam::before { content: "\f1c7"; } -.bi-box::before { content: "\f1c8"; } -.bi-braces::before { content: "\f1c9"; } -.bi-bricks::before { content: "\f1ca"; } -.bi-briefcase-fill::before { content: "\f1cb"; } -.bi-briefcase::before { content: "\f1cc"; } -.bi-brightness-alt-high-fill::before { content: "\f1cd"; } -.bi-brightness-alt-high::before { content: "\f1ce"; } -.bi-brightness-alt-low-fill::before { content: "\f1cf"; } -.bi-brightness-alt-low::before { content: "\f1d0"; } -.bi-brightness-high-fill::before { content: "\f1d1"; } -.bi-brightness-high::before { content: "\f1d2"; } -.bi-brightness-low-fill::before { content: "\f1d3"; } -.bi-brightness-low::before { content: "\f1d4"; } -.bi-broadcast-pin::before { content: "\f1d5"; } -.bi-broadcast::before { content: "\f1d6"; } -.bi-brush-fill::before { content: "\f1d7"; } -.bi-brush::before { content: "\f1d8"; } -.bi-bucket-fill::before { content: "\f1d9"; } -.bi-bucket::before { content: "\f1da"; } -.bi-bug-fill::before { content: "\f1db"; } -.bi-bug::before { content: "\f1dc"; } -.bi-building::before { content: "\f1dd"; } -.bi-bullseye::before { content: "\f1de"; } -.bi-calculator-fill::before { content: "\f1df"; } -.bi-calculator::before { content: "\f1e0"; } -.bi-calendar-check-fill::before { content: "\f1e1"; } -.bi-calendar-check::before { content: "\f1e2"; } -.bi-calendar-date-fill::before { content: "\f1e3"; } -.bi-calendar-date::before { content: "\f1e4"; } -.bi-calendar-day-fill::before { content: "\f1e5"; } -.bi-calendar-day::before { content: "\f1e6"; } -.bi-calendar-event-fill::before { content: "\f1e7"; } -.bi-calendar-event::before { content: "\f1e8"; } -.bi-calendar-fill::before { content: "\f1e9"; } -.bi-calendar-minus-fill::before { content: "\f1ea"; } -.bi-calendar-minus::before { content: "\f1eb"; } -.bi-calendar-month-fill::before { content: "\f1ec"; } -.bi-calendar-month::before { content: "\f1ed"; } -.bi-calendar-plus-fill::before { content: "\f1ee"; } -.bi-calendar-plus::before { content: "\f1ef"; } -.bi-calendar-range-fill::before { content: "\f1f0"; } -.bi-calendar-range::before { content: "\f1f1"; } -.bi-calendar-week-fill::before { content: "\f1f2"; } -.bi-calendar-week::before { content: "\f1f3"; } -.bi-calendar-x-fill::before { content: "\f1f4"; } -.bi-calendar-x::before { content: "\f1f5"; } -.bi-calendar::before { content: "\f1f6"; } -.bi-calendar2-check-fill::before { content: "\f1f7"; } -.bi-calendar2-check::before { content: "\f1f8"; } -.bi-calendar2-date-fill::before { content: "\f1f9"; } -.bi-calendar2-date::before { content: "\f1fa"; } -.bi-calendar2-day-fill::before { content: "\f1fb"; } -.bi-calendar2-day::before { content: "\f1fc"; } -.bi-calendar2-event-fill::before { content: "\f1fd"; } -.bi-calendar2-event::before { content: "\f1fe"; } -.bi-calendar2-fill::before { content: "\f1ff"; } -.bi-calendar2-minus-fill::before { content: "\f200"; } -.bi-calendar2-minus::before { content: "\f201"; } -.bi-calendar2-month-fill::before { content: "\f202"; } -.bi-calendar2-month::before { content: "\f203"; } -.bi-calendar2-plus-fill::before { content: "\f204"; } -.bi-calendar2-plus::before { content: "\f205"; } -.bi-calendar2-range-fill::before { content: "\f206"; } -.bi-calendar2-range::before { content: "\f207"; } -.bi-calendar2-week-fill::before { content: "\f208"; } -.bi-calendar2-week::before { content: "\f209"; } -.bi-calendar2-x-fill::before { content: "\f20a"; } -.bi-calendar2-x::before { content: "\f20b"; } -.bi-calendar2::before { content: "\f20c"; } -.bi-calendar3-event-fill::before { content: "\f20d"; } -.bi-calendar3-event::before { content: "\f20e"; } -.bi-calendar3-fill::before { content: "\f20f"; } -.bi-calendar3-range-fill::before { content: "\f210"; } -.bi-calendar3-range::before { content: "\f211"; } -.bi-calendar3-week-fill::before { content: "\f212"; } -.bi-calendar3-week::before { content: "\f213"; } -.bi-calendar3::before { content: "\f214"; } -.bi-calendar4-event::before { content: "\f215"; } -.bi-calendar4-range::before { content: "\f216"; } -.bi-calendar4-week::before { content: "\f217"; } -.bi-calendar4::before { content: "\f218"; } -.bi-camera-fill::before { content: "\f219"; } -.bi-camera-reels-fill::before { content: "\f21a"; } -.bi-camera-reels::before { content: "\f21b"; } -.bi-camera-video-fill::before { content: "\f21c"; } -.bi-camera-video-off-fill::before { content: "\f21d"; } -.bi-camera-video-off::before { content: "\f21e"; } -.bi-camera-video::before { content: "\f21f"; } -.bi-camera::before { content: "\f220"; } -.bi-camera2::before { content: "\f221"; } -.bi-capslock-fill::before { content: "\f222"; } -.bi-capslock::before { content: "\f223"; } -.bi-card-checklist::before { content: "\f224"; } -.bi-card-heading::before { content: "\f225"; } -.bi-card-image::before { content: "\f226"; } -.bi-card-list::before { content: "\f227"; } -.bi-card-text::before { content: "\f228"; } -.bi-caret-down-fill::before { content: "\f229"; } -.bi-caret-down-square-fill::before { content: "\f22a"; } -.bi-caret-down-square::before { content: "\f22b"; } -.bi-caret-down::before { content: "\f22c"; } -.bi-caret-left-fill::before { content: "\f22d"; } -.bi-caret-left-square-fill::before { content: "\f22e"; } -.bi-caret-left-square::before { content: "\f22f"; } -.bi-caret-left::before { content: "\f230"; } -.bi-caret-right-fill::before { content: "\f231"; } -.bi-caret-right-square-fill::before { content: "\f232"; } -.bi-caret-right-square::before { content: "\f233"; } -.bi-caret-right::before { content: "\f234"; } -.bi-caret-up-fill::before { content: "\f235"; } -.bi-caret-up-square-fill::before { content: "\f236"; } -.bi-caret-up-square::before { content: "\f237"; } -.bi-caret-up::before { content: "\f238"; } -.bi-cart-check-fill::before { content: "\f239"; } -.bi-cart-check::before { content: "\f23a"; } -.bi-cart-dash-fill::before { content: "\f23b"; } -.bi-cart-dash::before { content: "\f23c"; } -.bi-cart-fill::before { content: "\f23d"; } -.bi-cart-plus-fill::before { content: "\f23e"; } -.bi-cart-plus::before { content: "\f23f"; } -.bi-cart-x-fill::before { content: "\f240"; } -.bi-cart-x::before { content: "\f241"; } -.bi-cart::before { content: "\f242"; } -.bi-cart2::before { content: "\f243"; } -.bi-cart3::before { content: "\f244"; } -.bi-cart4::before { content: "\f245"; } -.bi-cash-stack::before { content: "\f246"; } -.bi-cash::before { content: "\f247"; } -.bi-cast::before { content: "\f248"; } -.bi-chat-dots-fill::before { content: "\f249"; } -.bi-chat-dots::before { content: "\f24a"; } -.bi-chat-fill::before { content: "\f24b"; } -.bi-chat-left-dots-fill::before { content: "\f24c"; } -.bi-chat-left-dots::before { content: "\f24d"; } -.bi-chat-left-fill::before { content: "\f24e"; } -.bi-chat-left-quote-fill::before { content: "\f24f"; } -.bi-chat-left-quote::before { content: "\f250"; } -.bi-chat-left-text-fill::before { content: "\f251"; } -.bi-chat-left-text::before { content: "\f252"; } -.bi-chat-left::before { content: "\f253"; } -.bi-chat-quote-fill::before { content: "\f254"; } -.bi-chat-quote::before { content: "\f255"; } -.bi-chat-right-dots-fill::before { content: "\f256"; } -.bi-chat-right-dots::before { content: "\f257"; } -.bi-chat-right-fill::before { content: "\f258"; } -.bi-chat-right-quote-fill::before { content: "\f259"; } -.bi-chat-right-quote::before { content: "\f25a"; } -.bi-chat-right-text-fill::before { content: "\f25b"; } -.bi-chat-right-text::before { content: "\f25c"; } -.bi-chat-right::before { content: "\f25d"; } -.bi-chat-square-dots-fill::before { content: "\f25e"; } -.bi-chat-square-dots::before { content: "\f25f"; } -.bi-chat-square-fill::before { content: "\f260"; } -.bi-chat-square-quote-fill::before { content: "\f261"; } -.bi-chat-square-quote::before { content: "\f262"; } -.bi-chat-square-text-fill::before { content: "\f263"; } -.bi-chat-square-text::before { content: "\f264"; } -.bi-chat-square::before { content: "\f265"; } -.bi-chat-text-fill::before { content: "\f266"; } -.bi-chat-text::before { content: "\f267"; } -.bi-chat::before { content: "\f268"; } -.bi-check-all::before { content: "\f269"; } -.bi-check-circle-fill::before { content: "\f26a"; } -.bi-check-circle::before { content: "\f26b"; } -.bi-check-square-fill::before { content: "\f26c"; } -.bi-check-square::before { content: "\f26d"; } -.bi-check::before { content: "\f26e"; } -.bi-check2-all::before { content: "\f26f"; } -.bi-check2-circle::before { content: "\f270"; } -.bi-check2-square::before { content: "\f271"; } -.bi-check2::before { content: "\f272"; } -.bi-chevron-bar-contract::before { content: "\f273"; } -.bi-chevron-bar-down::before { content: "\f274"; } -.bi-chevron-bar-expand::before { content: "\f275"; } -.bi-chevron-bar-left::before { content: "\f276"; } -.bi-chevron-bar-right::before { content: "\f277"; } -.bi-chevron-bar-up::before { content: "\f278"; } -.bi-chevron-compact-down::before { content: "\f279"; } -.bi-chevron-compact-left::before { content: "\f27a"; } -.bi-chevron-compact-right::before { content: "\f27b"; } -.bi-chevron-compact-up::before { content: "\f27c"; } -.bi-chevron-contract::before { content: "\f27d"; } -.bi-chevron-double-down::before { content: "\f27e"; } -.bi-chevron-double-left::before { content: "\f27f"; } -.bi-chevron-double-right::before { content: "\f280"; } -.bi-chevron-double-up::before { content: "\f281"; } -.bi-chevron-down::before { content: "\f282"; } -.bi-chevron-expand::before { content: "\f283"; } -.bi-chevron-left::before { content: "\f284"; } -.bi-chevron-right::before { content: "\f285"; } -.bi-chevron-up::before { content: "\f286"; } -.bi-circle-fill::before { content: "\f287"; } -.bi-circle-half::before { content: "\f288"; } -.bi-circle-square::before { content: "\f289"; } -.bi-circle::before { content: "\f28a"; } -.bi-clipboard-check::before { content: "\f28b"; } -.bi-clipboard-data::before { content: "\f28c"; } -.bi-clipboard-minus::before { content: "\f28d"; } -.bi-clipboard-plus::before { content: "\f28e"; } -.bi-clipboard-x::before { content: "\f28f"; } -.bi-clipboard::before { content: "\f290"; } -.bi-clock-fill::before { content: "\f291"; } -.bi-clock-history::before { content: "\f292"; } -.bi-clock::before { content: "\f293"; } -.bi-cloud-arrow-down-fill::before { content: "\f294"; } -.bi-cloud-arrow-down::before { content: "\f295"; } -.bi-cloud-arrow-up-fill::before { content: "\f296"; } -.bi-cloud-arrow-up::before { content: "\f297"; } -.bi-cloud-check-fill::before { content: "\f298"; } -.bi-cloud-check::before { content: "\f299"; } -.bi-cloud-download-fill::before { content: "\f29a"; } -.bi-cloud-download::before { content: "\f29b"; } -.bi-cloud-drizzle-fill::before { content: "\f29c"; } -.bi-cloud-drizzle::before { content: "\f29d"; } -.bi-cloud-fill::before { content: "\f29e"; } -.bi-cloud-fog-fill::before { content: "\f29f"; } -.bi-cloud-fog::before { content: "\f2a0"; } -.bi-cloud-fog2-fill::before { content: "\f2a1"; } -.bi-cloud-fog2::before { content: "\f2a2"; } -.bi-cloud-hail-fill::before { content: "\f2a3"; } -.bi-cloud-hail::before { content: "\f2a4"; } -.bi-cloud-haze-fill::before { content: "\f2a6"; } -.bi-cloud-haze::before { content: "\f2a7"; } -.bi-cloud-haze2-fill::before { content: "\f2a8"; } -.bi-cloud-lightning-fill::before { content: "\f2a9"; } -.bi-cloud-lightning-rain-fill::before { content: "\f2aa"; } -.bi-cloud-lightning-rain::before { content: "\f2ab"; } -.bi-cloud-lightning::before { content: "\f2ac"; } -.bi-cloud-minus-fill::before { content: "\f2ad"; } -.bi-cloud-minus::before { content: "\f2ae"; } -.bi-cloud-moon-fill::before { content: "\f2af"; } -.bi-cloud-moon::before { content: "\f2b0"; } -.bi-cloud-plus-fill::before { content: "\f2b1"; } -.bi-cloud-plus::before { content: "\f2b2"; } -.bi-cloud-rain-fill::before { content: "\f2b3"; } -.bi-cloud-rain-heavy-fill::before { content: "\f2b4"; } -.bi-cloud-rain-heavy::before { content: "\f2b5"; } -.bi-cloud-rain::before { content: "\f2b6"; } -.bi-cloud-slash-fill::before { content: "\f2b7"; } -.bi-cloud-slash::before { content: "\f2b8"; } -.bi-cloud-sleet-fill::before { content: "\f2b9"; } -.bi-cloud-sleet::before { content: "\f2ba"; } -.bi-cloud-snow-fill::before { content: "\f2bb"; } -.bi-cloud-snow::before { content: "\f2bc"; } -.bi-cloud-sun-fill::before { content: "\f2bd"; } -.bi-cloud-sun::before { content: "\f2be"; } -.bi-cloud-upload-fill::before { content: "\f2bf"; } -.bi-cloud-upload::before { content: "\f2c0"; } -.bi-cloud::before { content: "\f2c1"; } -.bi-clouds-fill::before { content: "\f2c2"; } -.bi-clouds::before { content: "\f2c3"; } -.bi-cloudy-fill::before { content: "\f2c4"; } -.bi-cloudy::before { content: "\f2c5"; } -.bi-code-slash::before { content: "\f2c6"; } -.bi-code-square::before { content: "\f2c7"; } -.bi-code::before { content: "\f2c8"; } -.bi-collection-fill::before { content: "\f2c9"; } -.bi-collection-play-fill::before { content: "\f2ca"; } -.bi-collection-play::before { content: "\f2cb"; } -.bi-collection::before { content: "\f2cc"; } -.bi-columns-gap::before { content: "\f2cd"; } -.bi-columns::before { content: "\f2ce"; } -.bi-command::before { content: "\f2cf"; } -.bi-compass-fill::before { content: "\f2d0"; } -.bi-compass::before { content: "\f2d1"; } -.bi-cone-striped::before { content: "\f2d2"; } -.bi-cone::before { content: "\f2d3"; } -.bi-controller::before { content: "\f2d4"; } -.bi-cpu-fill::before { content: "\f2d5"; } -.bi-cpu::before { content: "\f2d6"; } -.bi-credit-card-2-back-fill::before { content: "\f2d7"; } -.bi-credit-card-2-back::before { content: "\f2d8"; } -.bi-credit-card-2-front-fill::before { content: "\f2d9"; } -.bi-credit-card-2-front::before { content: "\f2da"; } -.bi-credit-card-fill::before { content: "\f2db"; } -.bi-credit-card::before { content: "\f2dc"; } -.bi-crop::before { content: "\f2dd"; } -.bi-cup-fill::before { content: "\f2de"; } -.bi-cup-straw::before { content: "\f2df"; } -.bi-cup::before { content: "\f2e0"; } -.bi-cursor-fill::before { content: "\f2e1"; } -.bi-cursor-text::before { content: "\f2e2"; } -.bi-cursor::before { content: "\f2e3"; } -.bi-dash-circle-dotted::before { content: "\f2e4"; } -.bi-dash-circle-fill::before { content: "\f2e5"; } -.bi-dash-circle::before { content: "\f2e6"; } -.bi-dash-square-dotted::before { content: "\f2e7"; } -.bi-dash-square-fill::before { content: "\f2e8"; } -.bi-dash-square::before { content: "\f2e9"; } -.bi-dash::before { content: "\f2ea"; } -.bi-diagram-2-fill::before { content: "\f2eb"; } -.bi-diagram-2::before { content: "\f2ec"; } -.bi-diagram-3-fill::before { content: "\f2ed"; } -.bi-diagram-3::before { content: "\f2ee"; } -.bi-diamond-fill::before { content: "\f2ef"; } -.bi-diamond-half::before { content: "\f2f0"; } -.bi-diamond::before { content: "\f2f1"; } -.bi-dice-1-fill::before { content: "\f2f2"; } -.bi-dice-1::before { content: "\f2f3"; } -.bi-dice-2-fill::before { content: "\f2f4"; } -.bi-dice-2::before { content: "\f2f5"; } -.bi-dice-3-fill::before { content: "\f2f6"; } -.bi-dice-3::before { content: "\f2f7"; } -.bi-dice-4-fill::before { content: "\f2f8"; } -.bi-dice-4::before { content: "\f2f9"; } -.bi-dice-5-fill::before { content: "\f2fa"; } -.bi-dice-5::before { content: "\f2fb"; } -.bi-dice-6-fill::before { content: "\f2fc"; } -.bi-dice-6::before { content: "\f2fd"; } -.bi-disc-fill::before { content: "\f2fe"; } -.bi-disc::before { content: "\f2ff"; } -.bi-discord::before { content: "\f300"; } -.bi-display-fill::before { content: "\f301"; } -.bi-display::before { content: "\f302"; } -.bi-distribute-horizontal::before { content: "\f303"; } -.bi-distribute-vertical::before { content: "\f304"; } -.bi-door-closed-fill::before { content: "\f305"; } -.bi-door-closed::before { content: "\f306"; } -.bi-door-open-fill::before { content: "\f307"; } -.bi-door-open::before { content: "\f308"; } -.bi-dot::before { content: "\f309"; } -.bi-download::before { content: "\f30a"; } -.bi-droplet-fill::before { content: "\f30b"; } -.bi-droplet-half::before { content: "\f30c"; } -.bi-droplet::before { content: "\f30d"; } -.bi-earbuds::before { content: "\f30e"; } -.bi-easel-fill::before { content: "\f30f"; } -.bi-easel::before { content: "\f310"; } -.bi-egg-fill::before { content: "\f311"; } -.bi-egg-fried::before { content: "\f312"; } -.bi-egg::before { content: "\f313"; } -.bi-eject-fill::before { content: "\f314"; } -.bi-eject::before { content: "\f315"; } -.bi-emoji-angry-fill::before { content: "\f316"; } -.bi-emoji-angry::before { content: "\f317"; } -.bi-emoji-dizzy-fill::before { content: "\f318"; } -.bi-emoji-dizzy::before { content: "\f319"; } -.bi-emoji-expressionless-fill::before { content: "\f31a"; } -.bi-emoji-expressionless::before { content: "\f31b"; } -.bi-emoji-frown-fill::before { content: "\f31c"; } -.bi-emoji-frown::before { content: "\f31d"; } -.bi-emoji-heart-eyes-fill::before { content: "\f31e"; } -.bi-emoji-heart-eyes::before { content: "\f31f"; } -.bi-emoji-laughing-fill::before { content: "\f320"; } -.bi-emoji-laughing::before { content: "\f321"; } -.bi-emoji-neutral-fill::before { content: "\f322"; } -.bi-emoji-neutral::before { content: "\f323"; } -.bi-emoji-smile-fill::before { content: "\f324"; } -.bi-emoji-smile-upside-down-fill::before { content: "\f325"; } -.bi-emoji-smile-upside-down::before { content: "\f326"; } -.bi-emoji-smile::before { content: "\f327"; } -.bi-emoji-sunglasses-fill::before { content: "\f328"; } -.bi-emoji-sunglasses::before { content: "\f329"; } -.bi-emoji-wink-fill::before { content: "\f32a"; } -.bi-emoji-wink::before { content: "\f32b"; } -.bi-envelope-fill::before { content: "\f32c"; } -.bi-envelope-open-fill::before { content: "\f32d"; } -.bi-envelope-open::before { content: "\f32e"; } -.bi-envelope::before { content: "\f32f"; } -.bi-eraser-fill::before { content: "\f330"; } -.bi-eraser::before { content: "\f331"; } -.bi-exclamation-circle-fill::before { content: "\f332"; } -.bi-exclamation-circle::before { content: "\f333"; } -.bi-exclamation-diamond-fill::before { content: "\f334"; } -.bi-exclamation-diamond::before { content: "\f335"; } -.bi-exclamation-octagon-fill::before { content: "\f336"; } -.bi-exclamation-octagon::before { content: "\f337"; } -.bi-exclamation-square-fill::before { content: "\f338"; } -.bi-exclamation-square::before { content: "\f339"; } -.bi-exclamation-triangle-fill::before { content: "\f33a"; } -.bi-exclamation-triangle::before { content: "\f33b"; } -.bi-exclamation::before { content: "\f33c"; } -.bi-exclude::before { content: "\f33d"; } -.bi-eye-fill::before { content: "\f33e"; } -.bi-eye-slash-fill::before { content: "\f33f"; } -.bi-eye-slash::before { content: "\f340"; } -.bi-eye::before { content: "\f341"; } -.bi-eyedropper::before { content: "\f342"; } -.bi-eyeglasses::before { content: "\f343"; } -.bi-facebook::before { content: "\f344"; } -.bi-file-arrow-down-fill::before { content: "\f345"; } -.bi-file-arrow-down::before { content: "\f346"; } -.bi-file-arrow-up-fill::before { content: "\f347"; } -.bi-file-arrow-up::before { content: "\f348"; } -.bi-file-bar-graph-fill::before { content: "\f349"; } -.bi-file-bar-graph::before { content: "\f34a"; } -.bi-file-binary-fill::before { content: "\f34b"; } -.bi-file-binary::before { content: "\f34c"; } -.bi-file-break-fill::before { content: "\f34d"; } -.bi-file-break::before { content: "\f34e"; } -.bi-file-check-fill::before { content: "\f34f"; } -.bi-file-check::before { content: "\f350"; } -.bi-file-code-fill::before { content: "\f351"; } -.bi-file-code::before { content: "\f352"; } -.bi-file-diff-fill::before { content: "\f353"; } -.bi-file-diff::before { content: "\f354"; } -.bi-file-earmark-arrow-down-fill::before { content: "\f355"; } -.bi-file-earmark-arrow-down::before { content: "\f356"; } -.bi-file-earmark-arrow-up-fill::before { content: "\f357"; } -.bi-file-earmark-arrow-up::before { content: "\f358"; } -.bi-file-earmark-bar-graph-fill::before { content: "\f359"; } -.bi-file-earmark-bar-graph::before { content: "\f35a"; } -.bi-file-earmark-binary-fill::before { content: "\f35b"; } -.bi-file-earmark-binary::before { content: "\f35c"; } -.bi-file-earmark-break-fill::before { content: "\f35d"; } -.bi-file-earmark-break::before { content: "\f35e"; } -.bi-file-earmark-check-fill::before { content: "\f35f"; } -.bi-file-earmark-check::before { content: "\f360"; } -.bi-file-earmark-code-fill::before { content: "\f361"; } -.bi-file-earmark-code::before { content: "\f362"; } -.bi-file-earmark-diff-fill::before { content: "\f363"; } -.bi-file-earmark-diff::before { content: "\f364"; } -.bi-file-earmark-easel-fill::before { content: "\f365"; } -.bi-file-earmark-easel::before { content: "\f366"; } -.bi-file-earmark-excel-fill::before { content: "\f367"; } -.bi-file-earmark-excel::before { content: "\f368"; } -.bi-file-earmark-fill::before { content: "\f369"; } -.bi-file-earmark-font-fill::before { content: "\f36a"; } -.bi-file-earmark-font::before { content: "\f36b"; } -.bi-file-earmark-image-fill::before { content: "\f36c"; } -.bi-file-earmark-image::before { content: "\f36d"; } -.bi-file-earmark-lock-fill::before { content: "\f36e"; } -.bi-file-earmark-lock::before { content: "\f36f"; } -.bi-file-earmark-lock2-fill::before { content: "\f370"; } -.bi-file-earmark-lock2::before { content: "\f371"; } -.bi-file-earmark-medical-fill::before { content: "\f372"; } -.bi-file-earmark-medical::before { content: "\f373"; } -.bi-file-earmark-minus-fill::before { content: "\f374"; } -.bi-file-earmark-minus::before { content: "\f375"; } -.bi-file-earmark-music-fill::before { content: "\f376"; } -.bi-file-earmark-music::before { content: "\f377"; } -.bi-file-earmark-person-fill::before { content: "\f378"; } -.bi-file-earmark-person::before { content: "\f379"; } -.bi-file-earmark-play-fill::before { content: "\f37a"; } -.bi-file-earmark-play::before { content: "\f37b"; } -.bi-file-earmark-plus-fill::before { content: "\f37c"; } -.bi-file-earmark-plus::before { content: "\f37d"; } -.bi-file-earmark-post-fill::before { content: "\f37e"; } -.bi-file-earmark-post::before { content: "\f37f"; } -.bi-file-earmark-ppt-fill::before { content: "\f380"; } -.bi-file-earmark-ppt::before { content: "\f381"; } -.bi-file-earmark-richtext-fill::before { content: "\f382"; } -.bi-file-earmark-richtext::before { content: "\f383"; } -.bi-file-earmark-ruled-fill::before { content: "\f384"; } -.bi-file-earmark-ruled::before { content: "\f385"; } -.bi-file-earmark-slides-fill::before { content: "\f386"; } -.bi-file-earmark-slides::before { content: "\f387"; } -.bi-file-earmark-spreadsheet-fill::before { content: "\f388"; } -.bi-file-earmark-spreadsheet::before { content: "\f389"; } -.bi-file-earmark-text-fill::before { content: "\f38a"; } -.bi-file-earmark-text::before { content: "\f38b"; } -.bi-file-earmark-word-fill::before { content: "\f38c"; } -.bi-file-earmark-word::before { content: "\f38d"; } -.bi-file-earmark-x-fill::before { content: "\f38e"; } -.bi-file-earmark-x::before { content: "\f38f"; } -.bi-file-earmark-zip-fill::before { content: "\f390"; } -.bi-file-earmark-zip::before { content: "\f391"; } -.bi-file-earmark::before { content: "\f392"; } -.bi-file-easel-fill::before { content: "\f393"; } -.bi-file-easel::before { content: "\f394"; } -.bi-file-excel-fill::before { content: "\f395"; } -.bi-file-excel::before { content: "\f396"; } -.bi-file-fill::before { content: "\f397"; } -.bi-file-font-fill::before { content: "\f398"; } -.bi-file-font::before { content: "\f399"; } -.bi-file-image-fill::before { content: "\f39a"; } -.bi-file-image::before { content: "\f39b"; } -.bi-file-lock-fill::before { content: "\f39c"; } -.bi-file-lock::before { content: "\f39d"; } -.bi-file-lock2-fill::before { content: "\f39e"; } -.bi-file-lock2::before { content: "\f39f"; } -.bi-file-medical-fill::before { content: "\f3a0"; } -.bi-file-medical::before { content: "\f3a1"; } -.bi-file-minus-fill::before { content: "\f3a2"; } -.bi-file-minus::before { content: "\f3a3"; } -.bi-file-music-fill::before { content: "\f3a4"; } -.bi-file-music::before { content: "\f3a5"; } -.bi-file-person-fill::before { content: "\f3a6"; } -.bi-file-person::before { content: "\f3a7"; } -.bi-file-play-fill::before { content: "\f3a8"; } -.bi-file-play::before { content: "\f3a9"; } -.bi-file-plus-fill::before { content: "\f3aa"; } -.bi-file-plus::before { content: "\f3ab"; } -.bi-file-post-fill::before { content: "\f3ac"; } -.bi-file-post::before { content: "\f3ad"; } -.bi-file-ppt-fill::before { content: "\f3ae"; } -.bi-file-ppt::before { content: "\f3af"; } -.bi-file-richtext-fill::before { content: "\f3b0"; } -.bi-file-richtext::before { content: "\f3b1"; } -.bi-file-ruled-fill::before { content: "\f3b2"; } -.bi-file-ruled::before { content: "\f3b3"; } -.bi-file-slides-fill::before { content: "\f3b4"; } -.bi-file-slides::before { content: "\f3b5"; } -.bi-file-spreadsheet-fill::before { content: "\f3b6"; } -.bi-file-spreadsheet::before { content: "\f3b7"; } -.bi-file-text-fill::before { content: "\f3b8"; } -.bi-file-text::before { content: "\f3b9"; } -.bi-file-word-fill::before { content: "\f3ba"; } -.bi-file-word::before { content: "\f3bb"; } -.bi-file-x-fill::before { content: "\f3bc"; } -.bi-file-x::before { content: "\f3bd"; } -.bi-file-zip-fill::before { content: "\f3be"; } -.bi-file-zip::before { content: "\f3bf"; } -.bi-file::before { content: "\f3c0"; } -.bi-files-alt::before { content: "\f3c1"; } -.bi-files::before { content: "\f3c2"; } -.bi-film::before { content: "\f3c3"; } -.bi-filter-circle-fill::before { content: "\f3c4"; } -.bi-filter-circle::before { content: "\f3c5"; } -.bi-filter-left::before { content: "\f3c6"; } -.bi-filter-right::before { content: "\f3c7"; } -.bi-filter-square-fill::before { content: "\f3c8"; } -.bi-filter-square::before { content: "\f3c9"; } -.bi-filter::before { content: "\f3ca"; } -.bi-flag-fill::before { content: "\f3cb"; } -.bi-flag::before { content: "\f3cc"; } -.bi-flower1::before { content: "\f3cd"; } -.bi-flower2::before { content: "\f3ce"; } -.bi-flower3::before { content: "\f3cf"; } -.bi-folder-check::before { content: "\f3d0"; } -.bi-folder-fill::before { content: "\f3d1"; } -.bi-folder-minus::before { content: "\f3d2"; } -.bi-folder-plus::before { content: "\f3d3"; } -.bi-folder-symlink-fill::before { content: "\f3d4"; } -.bi-folder-symlink::before { content: "\f3d5"; } -.bi-folder-x::before { content: "\f3d6"; } -.bi-folder::before { content: "\f3d7"; } -.bi-folder2-open::before { content: "\f3d8"; } -.bi-folder2::before { content: "\f3d9"; } -.bi-fonts::before { content: "\f3da"; } -.bi-forward-fill::before { content: "\f3db"; } -.bi-forward::before { content: "\f3dc"; } -.bi-front::before { content: "\f3dd"; } -.bi-fullscreen-exit::before { content: "\f3de"; } -.bi-fullscreen::before { content: "\f3df"; } -.bi-funnel-fill::before { content: "\f3e0"; } -.bi-funnel::before { content: "\f3e1"; } -.bi-gear-fill::before { content: "\f3e2"; } -.bi-gear-wide-connected::before { content: "\f3e3"; } -.bi-gear-wide::before { content: "\f3e4"; } -.bi-gear::before { content: "\f3e5"; } -.bi-gem::before { content: "\f3e6"; } -.bi-geo-alt-fill::before { content: "\f3e7"; } -.bi-geo-alt::before { content: "\f3e8"; } -.bi-geo-fill::before { content: "\f3e9"; } -.bi-geo::before { content: "\f3ea"; } -.bi-gift-fill::before { content: "\f3eb"; } -.bi-gift::before { content: "\f3ec"; } -.bi-github::before { content: "\f3ed"; } -.bi-globe::before { content: "\f3ee"; } -.bi-globe2::before { content: "\f3ef"; } -.bi-google::before { content: "\f3f0"; } -.bi-graph-down::before { content: "\f3f1"; } -.bi-graph-up::before { content: "\f3f2"; } -.bi-grid-1x2-fill::before { content: "\f3f3"; } -.bi-grid-1x2::before { content: "\f3f4"; } -.bi-grid-3x2-gap-fill::before { content: "\f3f5"; } -.bi-grid-3x2-gap::before { content: "\f3f6"; } -.bi-grid-3x2::before { content: "\f3f7"; } -.bi-grid-3x3-gap-fill::before { content: "\f3f8"; } -.bi-grid-3x3-gap::before { content: "\f3f9"; } -.bi-grid-3x3::before { content: "\f3fa"; } -.bi-grid-fill::before { content: "\f3fb"; } -.bi-grid::before { content: "\f3fc"; } -.bi-grip-horizontal::before { content: "\f3fd"; } -.bi-grip-vertical::before { content: "\f3fe"; } -.bi-hammer::before { content: "\f3ff"; } -.bi-hand-index-fill::before { content: "\f400"; } -.bi-hand-index-thumb-fill::before { content: "\f401"; } -.bi-hand-index-thumb::before { content: "\f402"; } -.bi-hand-index::before { content: "\f403"; } -.bi-hand-thumbs-down-fill::before { content: "\f404"; } -.bi-hand-thumbs-down::before { content: "\f405"; } -.bi-hand-thumbs-up-fill::before { content: "\f406"; } -.bi-hand-thumbs-up::before { content: "\f407"; } -.bi-handbag-fill::before { content: "\f408"; } -.bi-handbag::before { content: "\f409"; } -.bi-hash::before { content: "\f40a"; } -.bi-hdd-fill::before { content: "\f40b"; } -.bi-hdd-network-fill::before { content: "\f40c"; } -.bi-hdd-network::before { content: "\f40d"; } -.bi-hdd-rack-fill::before { content: "\f40e"; } -.bi-hdd-rack::before { content: "\f40f"; } -.bi-hdd-stack-fill::before { content: "\f410"; } -.bi-hdd-stack::before { content: "\f411"; } -.bi-hdd::before { content: "\f412"; } -.bi-headphones::before { content: "\f413"; } -.bi-headset::before { content: "\f414"; } -.bi-heart-fill::before { content: "\f415"; } -.bi-heart-half::before { content: "\f416"; } -.bi-heart::before { content: "\f417"; } -.bi-heptagon-fill::before { content: "\f418"; } -.bi-heptagon-half::before { content: "\f419"; } -.bi-heptagon::before { content: "\f41a"; } -.bi-hexagon-fill::before { content: "\f41b"; } -.bi-hexagon-half::before { content: "\f41c"; } -.bi-hexagon::before { content: "\f41d"; } -.bi-hourglass-bottom::before { content: "\f41e"; } -.bi-hourglass-split::before { content: "\f41f"; } -.bi-hourglass-top::before { content: "\f420"; } -.bi-hourglass::before { content: "\f421"; } -.bi-house-door-fill::before { content: "\f422"; } -.bi-house-door::before { content: "\f423"; } -.bi-house-fill::before { content: "\f424"; } -.bi-house::before { content: "\f425"; } -.bi-hr::before { content: "\f426"; } -.bi-hurricane::before { content: "\f427"; } -.bi-image-alt::before { content: "\f428"; } -.bi-image-fill::before { content: "\f429"; } -.bi-image::before { content: "\f42a"; } -.bi-images::before { content: "\f42b"; } -.bi-inbox-fill::before { content: "\f42c"; } -.bi-inbox::before { content: "\f42d"; } -.bi-inboxes-fill::before { content: "\f42e"; } -.bi-inboxes::before { content: "\f42f"; } -.bi-info-circle-fill::before { content: "\f430"; } -.bi-info-circle::before { content: "\f431"; } -.bi-info-square-fill::before { content: "\f432"; } -.bi-info-square::before { content: "\f433"; } -.bi-info::before { content: "\f434"; } -.bi-input-cursor-text::before { content: "\f435"; } -.bi-input-cursor::before { content: "\f436"; } -.bi-instagram::before { content: "\f437"; } -.bi-intersect::before { content: "\f438"; } -.bi-journal-album::before { content: "\f439"; } -.bi-journal-arrow-down::before { content: "\f43a"; } -.bi-journal-arrow-up::before { content: "\f43b"; } -.bi-journal-bookmark-fill::before { content: "\f43c"; } -.bi-journal-bookmark::before { content: "\f43d"; } -.bi-journal-check::before { content: "\f43e"; } -.bi-journal-code::before { content: "\f43f"; } -.bi-journal-medical::before { content: "\f440"; } -.bi-journal-minus::before { content: "\f441"; } -.bi-journal-plus::before { content: "\f442"; } -.bi-journal-richtext::before { content: "\f443"; } -.bi-journal-text::before { content: "\f444"; } -.bi-journal-x::before { content: "\f445"; } -.bi-journal::before { content: "\f446"; } -.bi-journals::before { content: "\f447"; } -.bi-joystick::before { content: "\f448"; } -.bi-justify-left::before { content: "\f449"; } -.bi-justify-right::before { content: "\f44a"; } -.bi-justify::before { content: "\f44b"; } -.bi-kanban-fill::before { content: "\f44c"; } -.bi-kanban::before { content: "\f44d"; } -.bi-key-fill::before { content: "\f44e"; } -.bi-key::before { content: "\f44f"; } -.bi-keyboard-fill::before { content: "\f450"; } -.bi-keyboard::before { content: "\f451"; } -.bi-ladder::before { content: "\f452"; } -.bi-lamp-fill::before { content: "\f453"; } -.bi-lamp::before { content: "\f454"; } -.bi-laptop-fill::before { content: "\f455"; } -.bi-laptop::before { content: "\f456"; } -.bi-layer-backward::before { content: "\f457"; } -.bi-layer-forward::before { content: "\f458"; } -.bi-layers-fill::before { content: "\f459"; } -.bi-layers-half::before { content: "\f45a"; } -.bi-layers::before { content: "\f45b"; } -.bi-layout-sidebar-inset-reverse::before { content: "\f45c"; } -.bi-layout-sidebar-inset::before { content: "\f45d"; } -.bi-layout-sidebar-reverse::before { content: "\f45e"; } -.bi-layout-sidebar::before { content: "\f45f"; } -.bi-layout-split::before { content: "\f460"; } -.bi-layout-text-sidebar-reverse::before { content: "\f461"; } -.bi-layout-text-sidebar::before { content: "\f462"; } -.bi-layout-text-window-reverse::before { content: "\f463"; } -.bi-layout-text-window::before { content: "\f464"; } -.bi-layout-three-columns::before { content: "\f465"; } -.bi-layout-wtf::before { content: "\f466"; } -.bi-life-preserver::before { content: "\f467"; } -.bi-lightbulb-fill::before { content: "\f468"; } -.bi-lightbulb-off-fill::before { content: "\f469"; } -.bi-lightbulb-off::before { content: "\f46a"; } -.bi-lightbulb::before { content: "\f46b"; } -.bi-lightning-charge-fill::before { content: "\f46c"; } -.bi-lightning-charge::before { content: "\f46d"; } -.bi-lightning-fill::before { content: "\f46e"; } -.bi-lightning::before { content: "\f46f"; } -.bi-link-45deg::before { content: "\f470"; } -.bi-link::before { content: "\f471"; } -.bi-linkedin::before { content: "\f472"; } -.bi-list-check::before { content: "\f473"; } -.bi-list-nested::before { content: "\f474"; } -.bi-list-ol::before { content: "\f475"; } -.bi-list-stars::before { content: "\f476"; } -.bi-list-task::before { content: "\f477"; } -.bi-list-ul::before { content: "\f478"; } -.bi-list::before { content: "\f479"; } -.bi-lock-fill::before { content: "\f47a"; } -.bi-lock::before { content: "\f47b"; } -.bi-mailbox::before { content: "\f47c"; } -.bi-mailbox2::before { content: "\f47d"; } -.bi-map-fill::before { content: "\f47e"; } -.bi-map::before { content: "\f47f"; } -.bi-markdown-fill::before { content: "\f480"; } -.bi-markdown::before { content: "\f481"; } -.bi-mask::before { content: "\f482"; } -.bi-megaphone-fill::before { content: "\f483"; } -.bi-megaphone::before { content: "\f484"; } -.bi-menu-app-fill::before { content: "\f485"; } -.bi-menu-app::before { content: "\f486"; } -.bi-menu-button-fill::before { content: "\f487"; } -.bi-menu-button-wide-fill::before { content: "\f488"; } -.bi-menu-button-wide::before { content: "\f489"; } -.bi-menu-button::before { content: "\f48a"; } -.bi-menu-down::before { content: "\f48b"; } -.bi-menu-up::before { content: "\f48c"; } -.bi-mic-fill::before { content: "\f48d"; } -.bi-mic-mute-fill::before { content: "\f48e"; } -.bi-mic-mute::before { content: "\f48f"; } -.bi-mic::before { content: "\f490"; } -.bi-minecart-loaded::before { content: "\f491"; } -.bi-minecart::before { content: "\f492"; } -.bi-moisture::before { content: "\f493"; } -.bi-moon-fill::before { content: "\f494"; } -.bi-moon-stars-fill::before { content: "\f495"; } -.bi-moon-stars::before { content: "\f496"; } -.bi-moon::before { content: "\f497"; } -.bi-mouse-fill::before { content: "\f498"; } -.bi-mouse::before { content: "\f499"; } -.bi-mouse2-fill::before { content: "\f49a"; } -.bi-mouse2::before { content: "\f49b"; } -.bi-mouse3-fill::before { content: "\f49c"; } -.bi-mouse3::before { content: "\f49d"; } -.bi-music-note-beamed::before { content: "\f49e"; } -.bi-music-note-list::before { content: "\f49f"; } -.bi-music-note::before { content: "\f4a0"; } -.bi-music-player-fill::before { content: "\f4a1"; } -.bi-music-player::before { content: "\f4a2"; } -.bi-newspaper::before { content: "\f4a3"; } -.bi-node-minus-fill::before { content: "\f4a4"; } -.bi-node-minus::before { content: "\f4a5"; } -.bi-node-plus-fill::before { content: "\f4a6"; } -.bi-node-plus::before { content: "\f4a7"; } -.bi-nut-fill::before { content: "\f4a8"; } -.bi-nut::before { content: "\f4a9"; } -.bi-octagon-fill::before { content: "\f4aa"; } -.bi-octagon-half::before { content: "\f4ab"; } -.bi-octagon::before { content: "\f4ac"; } -.bi-option::before { content: "\f4ad"; } -.bi-outlet::before { content: "\f4ae"; } -.bi-paint-bucket::before { content: "\f4af"; } -.bi-palette-fill::before { content: "\f4b0"; } -.bi-palette::before { content: "\f4b1"; } -.bi-palette2::before { content: "\f4b2"; } -.bi-paperclip::before { content: "\f4b3"; } -.bi-paragraph::before { content: "\f4b4"; } -.bi-patch-check-fill::before { content: "\f4b5"; } -.bi-patch-check::before { content: "\f4b6"; } -.bi-patch-exclamation-fill::before { content: "\f4b7"; } -.bi-patch-exclamation::before { content: "\f4b8"; } -.bi-patch-minus-fill::before { content: "\f4b9"; } -.bi-patch-minus::before { content: "\f4ba"; } -.bi-patch-plus-fill::before { content: "\f4bb"; } -.bi-patch-plus::before { content: "\f4bc"; } -.bi-patch-question-fill::before { content: "\f4bd"; } -.bi-patch-question::before { content: "\f4be"; } -.bi-pause-btn-fill::before { content: "\f4bf"; } -.bi-pause-btn::before { content: "\f4c0"; } -.bi-pause-circle-fill::before { content: "\f4c1"; } -.bi-pause-circle::before { content: "\f4c2"; } -.bi-pause-fill::before { content: "\f4c3"; } -.bi-pause::before { content: "\f4c4"; } -.bi-peace-fill::before { content: "\f4c5"; } -.bi-peace::before { content: "\f4c6"; } -.bi-pen-fill::before { content: "\f4c7"; } -.bi-pen::before { content: "\f4c8"; } -.bi-pencil-fill::before { content: "\f4c9"; } -.bi-pencil-square::before { content: "\f4ca"; } -.bi-pencil::before { content: "\f4cb"; } -.bi-pentagon-fill::before { content: "\f4cc"; } -.bi-pentagon-half::before { content: "\f4cd"; } -.bi-pentagon::before { content: "\f4ce"; } -.bi-people-fill::before { content: "\f4cf"; } -.bi-people::before { content: "\f4d0"; } -.bi-percent::before { content: "\f4d1"; } -.bi-person-badge-fill::before { content: "\f4d2"; } -.bi-person-badge::before { content: "\f4d3"; } -.bi-person-bounding-box::before { content: "\f4d4"; } -.bi-person-check-fill::before { content: "\f4d5"; } -.bi-person-check::before { content: "\f4d6"; } -.bi-person-circle::before { content: "\f4d7"; } -.bi-person-dash-fill::before { content: "\f4d8"; } -.bi-person-dash::before { content: "\f4d9"; } -.bi-person-fill::before { content: "\f4da"; } -.bi-person-lines-fill::before { content: "\f4db"; } -.bi-person-plus-fill::before { content: "\f4dc"; } -.bi-person-plus::before { content: "\f4dd"; } -.bi-person-square::before { content: "\f4de"; } -.bi-person-x-fill::before { content: "\f4df"; } -.bi-person-x::before { content: "\f4e0"; } -.bi-person::before { content: "\f4e1"; } -.bi-phone-fill::before { content: "\f4e2"; } -.bi-phone-landscape-fill::before { content: "\f4e3"; } -.bi-phone-landscape::before { content: "\f4e4"; } -.bi-phone-vibrate-fill::before { content: "\f4e5"; } -.bi-phone-vibrate::before { content: "\f4e6"; } -.bi-phone::before { content: "\f4e7"; } -.bi-pie-chart-fill::before { content: "\f4e8"; } -.bi-pie-chart::before { content: "\f4e9"; } -.bi-pin-angle-fill::before { content: "\f4ea"; } -.bi-pin-angle::before { content: "\f4eb"; } -.bi-pin-fill::before { content: "\f4ec"; } -.bi-pin::before { content: "\f4ed"; } -.bi-pip-fill::before { content: "\f4ee"; } -.bi-pip::before { content: "\f4ef"; } -.bi-play-btn-fill::before { content: "\f4f0"; } -.bi-play-btn::before { content: "\f4f1"; } -.bi-play-circle-fill::before { content: "\f4f2"; } -.bi-play-circle::before { content: "\f4f3"; } -.bi-play-fill::before { content: "\f4f4"; } -.bi-play::before { content: "\f4f5"; } -.bi-plug-fill::before { content: "\f4f6"; } -.bi-plug::before { content: "\f4f7"; } -.bi-plus-circle-dotted::before { content: "\f4f8"; } -.bi-plus-circle-fill::before { content: "\f4f9"; } -.bi-plus-circle::before { content: "\f4fa"; } -.bi-plus-square-dotted::before { content: "\f4fb"; } -.bi-plus-square-fill::before { content: "\f4fc"; } -.bi-plus-square::before { content: "\f4fd"; } -.bi-plus::before { content: "\f4fe"; } -.bi-power::before { content: "\f4ff"; } -.bi-printer-fill::before { content: "\f500"; } -.bi-printer::before { content: "\f501"; } -.bi-puzzle-fill::before { content: "\f502"; } -.bi-puzzle::before { content: "\f503"; } -.bi-question-circle-fill::before { content: "\f504"; } -.bi-question-circle::before { content: "\f505"; } -.bi-question-diamond-fill::before { content: "\f506"; } -.bi-question-diamond::before { content: "\f507"; } -.bi-question-octagon-fill::before { content: "\f508"; } -.bi-question-octagon::before { content: "\f509"; } -.bi-question-square-fill::before { content: "\f50a"; } -.bi-question-square::before { content: "\f50b"; } -.bi-question::before { content: "\f50c"; } -.bi-rainbow::before { content: "\f50d"; } -.bi-receipt-cutoff::before { content: "\f50e"; } -.bi-receipt::before { content: "\f50f"; } -.bi-reception-0::before { content: "\f510"; } -.bi-reception-1::before { content: "\f511"; } -.bi-reception-2::before { content: "\f512"; } -.bi-reception-3::before { content: "\f513"; } -.bi-reception-4::before { content: "\f514"; } -.bi-record-btn-fill::before { content: "\f515"; } -.bi-record-btn::before { content: "\f516"; } -.bi-record-circle-fill::before { content: "\f517"; } -.bi-record-circle::before { content: "\f518"; } -.bi-record-fill::before { content: "\f519"; } -.bi-record::before { content: "\f51a"; } -.bi-record2-fill::before { content: "\f51b"; } -.bi-record2::before { content: "\f51c"; } -.bi-reply-all-fill::before { content: "\f51d"; } -.bi-reply-all::before { content: "\f51e"; } -.bi-reply-fill::before { content: "\f51f"; } -.bi-reply::before { content: "\f520"; } -.bi-rss-fill::before { content: "\f521"; } -.bi-rss::before { content: "\f522"; } -.bi-rulers::before { content: "\f523"; } -.bi-save-fill::before { content: "\f524"; } -.bi-save::before { content: "\f525"; } -.bi-save2-fill::before { content: "\f526"; } -.bi-save2::before { content: "\f527"; } -.bi-scissors::before { content: "\f528"; } -.bi-screwdriver::before { content: "\f529"; } -.bi-search::before { content: "\f52a"; } -.bi-segmented-nav::before { content: "\f52b"; } -.bi-server::before { content: "\f52c"; } -.bi-share-fill::before { content: "\f52d"; } -.bi-share::before { content: "\f52e"; } -.bi-shield-check::before { content: "\f52f"; } -.bi-shield-exclamation::before { content: "\f530"; } -.bi-shield-fill-check::before { content: "\f531"; } -.bi-shield-fill-exclamation::before { content: "\f532"; } -.bi-shield-fill-minus::before { content: "\f533"; } -.bi-shield-fill-plus::before { content: "\f534"; } -.bi-shield-fill-x::before { content: "\f535"; } -.bi-shield-fill::before { content: "\f536"; } -.bi-shield-lock-fill::before { content: "\f537"; } -.bi-shield-lock::before { content: "\f538"; } -.bi-shield-minus::before { content: "\f539"; } -.bi-shield-plus::before { content: "\f53a"; } -.bi-shield-shaded::before { content: "\f53b"; } -.bi-shield-slash-fill::before { content: "\f53c"; } -.bi-shield-slash::before { content: "\f53d"; } -.bi-shield-x::before { content: "\f53e"; } -.bi-shield::before { content: "\f53f"; } -.bi-shift-fill::before { content: "\f540"; } -.bi-shift::before { content: "\f541"; } -.bi-shop-window::before { content: "\f542"; } -.bi-shop::before { content: "\f543"; } -.bi-shuffle::before { content: "\f544"; } -.bi-signpost-2-fill::before { content: "\f545"; } -.bi-signpost-2::before { content: "\f546"; } -.bi-signpost-fill::before { content: "\f547"; } -.bi-signpost-split-fill::before { content: "\f548"; } -.bi-signpost-split::before { content: "\f549"; } -.bi-signpost::before { content: "\f54a"; } -.bi-sim-fill::before { content: "\f54b"; } -.bi-sim::before { content: "\f54c"; } -.bi-skip-backward-btn-fill::before { content: "\f54d"; } -.bi-skip-backward-btn::before { content: "\f54e"; } -.bi-skip-backward-circle-fill::before { content: "\f54f"; } -.bi-skip-backward-circle::before { content: "\f550"; } -.bi-skip-backward-fill::before { content: "\f551"; } -.bi-skip-backward::before { content: "\f552"; } -.bi-skip-end-btn-fill::before { content: "\f553"; } -.bi-skip-end-btn::before { content: "\f554"; } -.bi-skip-end-circle-fill::before { content: "\f555"; } -.bi-skip-end-circle::before { content: "\f556"; } -.bi-skip-end-fill::before { content: "\f557"; } -.bi-skip-end::before { content: "\f558"; } -.bi-skip-forward-btn-fill::before { content: "\f559"; } -.bi-skip-forward-btn::before { content: "\f55a"; } -.bi-skip-forward-circle-fill::before { content: "\f55b"; } -.bi-skip-forward-circle::before { content: "\f55c"; } -.bi-skip-forward-fill::before { content: "\f55d"; } -.bi-skip-forward::before { content: "\f55e"; } -.bi-skip-start-btn-fill::before { content: "\f55f"; } -.bi-skip-start-btn::before { content: "\f560"; } -.bi-skip-start-circle-fill::before { content: "\f561"; } -.bi-skip-start-circle::before { content: "\f562"; } -.bi-skip-start-fill::before { content: "\f563"; } -.bi-skip-start::before { content: "\f564"; } -.bi-slack::before { content: "\f565"; } -.bi-slash-circle-fill::before { content: "\f566"; } -.bi-slash-circle::before { content: "\f567"; } -.bi-slash-square-fill::before { content: "\f568"; } -.bi-slash-square::before { content: "\f569"; } -.bi-slash::before { content: "\f56a"; } -.bi-sliders::before { content: "\f56b"; } -.bi-smartwatch::before { content: "\f56c"; } -.bi-snow::before { content: "\f56d"; } -.bi-snow2::before { content: "\f56e"; } -.bi-snow3::before { content: "\f56f"; } -.bi-sort-alpha-down-alt::before { content: "\f570"; } -.bi-sort-alpha-down::before { content: "\f571"; } -.bi-sort-alpha-up-alt::before { content: "\f572"; } -.bi-sort-alpha-up::before { content: "\f573"; } -.bi-sort-down-alt::before { content: "\f574"; } -.bi-sort-down::before { content: "\f575"; } -.bi-sort-numeric-down-alt::before { content: "\f576"; } -.bi-sort-numeric-down::before { content: "\f577"; } -.bi-sort-numeric-up-alt::before { content: "\f578"; } -.bi-sort-numeric-up::before { content: "\f579"; } -.bi-sort-up-alt::before { content: "\f57a"; } -.bi-sort-up::before { content: "\f57b"; } -.bi-soundwave::before { content: "\f57c"; } -.bi-speaker-fill::before { content: "\f57d"; } -.bi-speaker::before { content: "\f57e"; } -.bi-speedometer::before { content: "\f57f"; } -.bi-speedometer2::before { content: "\f580"; } -.bi-spellcheck::before { content: "\f581"; } -.bi-square-fill::before { content: "\f582"; } -.bi-square-half::before { content: "\f583"; } -.bi-square::before { content: "\f584"; } -.bi-stack::before { content: "\f585"; } -.bi-star-fill::before { content: "\f586"; } -.bi-star-half::before { content: "\f587"; } -.bi-star::before { content: "\f588"; } -.bi-stars::before { content: "\f589"; } -.bi-stickies-fill::before { content: "\f58a"; } -.bi-stickies::before { content: "\f58b"; } -.bi-sticky-fill::before { content: "\f58c"; } -.bi-sticky::before { content: "\f58d"; } -.bi-stop-btn-fill::before { content: "\f58e"; } -.bi-stop-btn::before { content: "\f58f"; } -.bi-stop-circle-fill::before { content: "\f590"; } -.bi-stop-circle::before { content: "\f591"; } -.bi-stop-fill::before { content: "\f592"; } -.bi-stop::before { content: "\f593"; } -.bi-stoplights-fill::before { content: "\f594"; } -.bi-stoplights::before { content: "\f595"; } -.bi-stopwatch-fill::before { content: "\f596"; } -.bi-stopwatch::before { content: "\f597"; } -.bi-subtract::before { content: "\f598"; } -.bi-suit-club-fill::before { content: "\f599"; } -.bi-suit-club::before { content: "\f59a"; } -.bi-suit-diamond-fill::before { content: "\f59b"; } -.bi-suit-diamond::before { content: "\f59c"; } -.bi-suit-heart-fill::before { content: "\f59d"; } -.bi-suit-heart::before { content: "\f59e"; } -.bi-suit-spade-fill::before { content: "\f59f"; } -.bi-suit-spade::before { content: "\f5a0"; } -.bi-sun-fill::before { content: "\f5a1"; } -.bi-sun::before { content: "\f5a2"; } -.bi-sunglasses::before { content: "\f5a3"; } -.bi-sunrise-fill::before { content: "\f5a4"; } -.bi-sunrise::before { content: "\f5a5"; } -.bi-sunset-fill::before { content: "\f5a6"; } -.bi-sunset::before { content: "\f5a7"; } -.bi-symmetry-horizontal::before { content: "\f5a8"; } -.bi-symmetry-vertical::before { content: "\f5a9"; } -.bi-table::before { content: "\f5aa"; } -.bi-tablet-fill::before { content: "\f5ab"; } -.bi-tablet-landscape-fill::before { content: "\f5ac"; } -.bi-tablet-landscape::before { content: "\f5ad"; } -.bi-tablet::before { content: "\f5ae"; } -.bi-tag-fill::before { content: "\f5af"; } -.bi-tag::before { content: "\f5b0"; } -.bi-tags-fill::before { content: "\f5b1"; } -.bi-tags::before { content: "\f5b2"; } -.bi-telegram::before { content: "\f5b3"; } -.bi-telephone-fill::before { content: "\f5b4"; } -.bi-telephone-forward-fill::before { content: "\f5b5"; } -.bi-telephone-forward::before { content: "\f5b6"; } -.bi-telephone-inbound-fill::before { content: "\f5b7"; } -.bi-telephone-inbound::before { content: "\f5b8"; } -.bi-telephone-minus-fill::before { content: "\f5b9"; } -.bi-telephone-minus::before { content: "\f5ba"; } -.bi-telephone-outbound-fill::before { content: "\f5bb"; } -.bi-telephone-outbound::before { content: "\f5bc"; } -.bi-telephone-plus-fill::before { content: "\f5bd"; } -.bi-telephone-plus::before { content: "\f5be"; } -.bi-telephone-x-fill::before { content: "\f5bf"; } -.bi-telephone-x::before { content: "\f5c0"; } -.bi-telephone::before { content: "\f5c1"; } -.bi-terminal-fill::before { content: "\f5c2"; } -.bi-terminal::before { content: "\f5c3"; } -.bi-text-center::before { content: "\f5c4"; } -.bi-text-indent-left::before { content: "\f5c5"; } -.bi-text-indent-right::before { content: "\f5c6"; } -.bi-text-left::before { content: "\f5c7"; } -.bi-text-paragraph::before { content: "\f5c8"; } -.bi-text-right::before { content: "\f5c9"; } -.bi-textarea-resize::before { content: "\f5ca"; } -.bi-textarea-t::before { content: "\f5cb"; } -.bi-textarea::before { content: "\f5cc"; } -.bi-thermometer-half::before { content: "\f5cd"; } -.bi-thermometer-high::before { content: "\f5ce"; } -.bi-thermometer-low::before { content: "\f5cf"; } -.bi-thermometer-snow::before { content: "\f5d0"; } -.bi-thermometer-sun::before { content: "\f5d1"; } -.bi-thermometer::before { content: "\f5d2"; } -.bi-three-dots-vertical::before { content: "\f5d3"; } -.bi-three-dots::before { content: "\f5d4"; } -.bi-toggle-off::before { content: "\f5d5"; } -.bi-toggle-on::before { content: "\f5d6"; } -.bi-toggle2-off::before { content: "\f5d7"; } -.bi-toggle2-on::before { content: "\f5d8"; } -.bi-toggles::before { content: "\f5d9"; } -.bi-toggles2::before { content: "\f5da"; } -.bi-tools::before { content: "\f5db"; } -.bi-tornado::before { content: "\f5dc"; } -.bi-trash-fill::before { content: "\f5dd"; } -.bi-trash::before { content: "\f5de"; } -.bi-trash2-fill::before { content: "\f5df"; } -.bi-trash2::before { content: "\f5e0"; } -.bi-tree-fill::before { content: "\f5e1"; } -.bi-tree::before { content: "\f5e2"; } -.bi-triangle-fill::before { content: "\f5e3"; } -.bi-triangle-half::before { content: "\f5e4"; } -.bi-triangle::before { content: "\f5e5"; } -.bi-trophy-fill::before { content: "\f5e6"; } -.bi-trophy::before { content: "\f5e7"; } -.bi-tropical-storm::before { content: "\f5e8"; } -.bi-truck-flatbed::before { content: "\f5e9"; } -.bi-truck::before { content: "\f5ea"; } -.bi-tsunami::before { content: "\f5eb"; } -.bi-tv-fill::before { content: "\f5ec"; } -.bi-tv::before { content: "\f5ed"; } -.bi-twitch::before { content: "\f5ee"; } -.bi-twitter::before { content: "\f5ef"; } -.bi-type-bold::before { content: "\f5f0"; } -.bi-type-h1::before { content: "\f5f1"; } -.bi-type-h2::before { content: "\f5f2"; } -.bi-type-h3::before { content: "\f5f3"; } -.bi-type-italic::before { content: "\f5f4"; } -.bi-type-strikethrough::before { content: "\f5f5"; } -.bi-type-underline::before { content: "\f5f6"; } -.bi-type::before { content: "\f5f7"; } -.bi-ui-checks-grid::before { content: "\f5f8"; } -.bi-ui-checks::before { content: "\f5f9"; } -.bi-ui-radios-grid::before { content: "\f5fa"; } -.bi-ui-radios::before { content: "\f5fb"; } -.bi-umbrella-fill::before { content: "\f5fc"; } -.bi-umbrella::before { content: "\f5fd"; } -.bi-union::before { content: "\f5fe"; } -.bi-unlock-fill::before { content: "\f5ff"; } -.bi-unlock::before { content: "\f600"; } -.bi-upc-scan::before { content: "\f601"; } -.bi-upc::before { content: "\f602"; } -.bi-upload::before { content: "\f603"; } -.bi-vector-pen::before { content: "\f604"; } -.bi-view-list::before { content: "\f605"; } -.bi-view-stacked::before { content: "\f606"; } -.bi-vinyl-fill::before { content: "\f607"; } -.bi-vinyl::before { content: "\f608"; } -.bi-voicemail::before { content: "\f609"; } -.bi-volume-down-fill::before { content: "\f60a"; } -.bi-volume-down::before { content: "\f60b"; } -.bi-volume-mute-fill::before { content: "\f60c"; } -.bi-volume-mute::before { content: "\f60d"; } -.bi-volume-off-fill::before { content: "\f60e"; } -.bi-volume-off::before { content: "\f60f"; } -.bi-volume-up-fill::before { content: "\f610"; } -.bi-volume-up::before { content: "\f611"; } -.bi-vr::before { content: "\f612"; } -.bi-wallet-fill::before { content: "\f613"; } -.bi-wallet::before { content: "\f614"; } -.bi-wallet2::before { content: "\f615"; } -.bi-watch::before { content: "\f616"; } -.bi-water::before { content: "\f617"; } -.bi-whatsapp::before { content: "\f618"; } -.bi-wifi-1::before { content: "\f619"; } -.bi-wifi-2::before { content: "\f61a"; } -.bi-wifi-off::before { content: "\f61b"; } -.bi-wifi::before { content: "\f61c"; } -.bi-wind::before { content: "\f61d"; } -.bi-window-dock::before { content: "\f61e"; } -.bi-window-sidebar::before { content: "\f61f"; } -.bi-window::before { content: "\f620"; } -.bi-wrench::before { content: "\f621"; } -.bi-x-circle-fill::before { content: "\f622"; } -.bi-x-circle::before { content: "\f623"; } -.bi-x-diamond-fill::before { content: "\f624"; } -.bi-x-diamond::before { content: "\f625"; } -.bi-x-octagon-fill::before { content: "\f626"; } -.bi-x-octagon::before { content: "\f627"; } -.bi-x-square-fill::before { content: "\f628"; } -.bi-x-square::before { content: "\f629"; } -.bi-x::before { content: "\f62a"; } -.bi-youtube::before { content: "\f62b"; } -.bi-zoom-in::before { content: "\f62c"; } -.bi-zoom-out::before { content: "\f62d"; } -.bi-bank::before { content: "\f62e"; } -.bi-bank2::before { content: "\f62f"; } -.bi-bell-slash-fill::before { content: "\f630"; } -.bi-bell-slash::before { content: "\f631"; } -.bi-cash-coin::before { content: "\f632"; } -.bi-check-lg::before { content: "\f633"; } -.bi-coin::before { content: "\f634"; } -.bi-currency-bitcoin::before { content: "\f635"; } -.bi-currency-dollar::before { content: "\f636"; } -.bi-currency-euro::before { content: "\f637"; } -.bi-currency-exchange::before { content: "\f638"; } -.bi-currency-pound::before { content: "\f639"; } -.bi-currency-yen::before { content: "\f63a"; } -.bi-dash-lg::before { content: "\f63b"; } -.bi-exclamation-lg::before { content: "\f63c"; } -.bi-file-earmark-pdf-fill::before { content: "\f63d"; } -.bi-file-earmark-pdf::before { content: "\f63e"; } -.bi-file-pdf-fill::before { content: "\f63f"; } -.bi-file-pdf::before { content: "\f640"; } -.bi-gender-ambiguous::before { content: "\f641"; } -.bi-gender-female::before { content: "\f642"; } -.bi-gender-male::before { content: "\f643"; } -.bi-gender-trans::before { content: "\f644"; } -.bi-headset-vr::before { content: "\f645"; } -.bi-info-lg::before { content: "\f646"; } -.bi-mastodon::before { content: "\f647"; } -.bi-messenger::before { content: "\f648"; } -.bi-piggy-bank-fill::before { content: "\f649"; } -.bi-piggy-bank::before { content: "\f64a"; } -.bi-pin-map-fill::before { content: "\f64b"; } -.bi-pin-map::before { content: "\f64c"; } -.bi-plus-lg::before { content: "\f64d"; } -.bi-question-lg::before { content: "\f64e"; } -.bi-recycle::before { content: "\f64f"; } -.bi-reddit::before { content: "\f650"; } -.bi-safe-fill::before { content: "\f651"; } -.bi-safe2-fill::before { content: "\f652"; } -.bi-safe2::before { content: "\f653"; } -.bi-sd-card-fill::before { content: "\f654"; } -.bi-sd-card::before { content: "\f655"; } -.bi-skype::before { content: "\f656"; } -.bi-slash-lg::before { content: "\f657"; } -.bi-translate::before { content: "\f658"; } -.bi-x-lg::before { content: "\f659"; } -.bi-safe::before { content: "\f65a"; } -.bi-apple::before { content: "\f65b"; } -.bi-microsoft::before { content: "\f65d"; } -.bi-windows::before { content: "\f65e"; } -.bi-behance::before { content: "\f65c"; } -.bi-dribbble::before { content: "\f65f"; } -.bi-line::before { content: "\f660"; } -.bi-medium::before { content: "\f661"; } -.bi-paypal::before { content: "\f662"; } -.bi-pinterest::before { content: "\f663"; } -.bi-signal::before { content: "\f664"; } -.bi-snapchat::before { content: "\f665"; } -.bi-spotify::before { content: "\f666"; } -.bi-stack-overflow::before { content: "\f667"; } -.bi-strava::before { content: "\f668"; } -.bi-wordpress::before { content: "\f669"; } -.bi-vimeo::before { content: "\f66a"; } -.bi-activity::before { content: "\f66b"; } -.bi-easel2-fill::before { content: "\f66c"; } -.bi-easel2::before { content: "\f66d"; } -.bi-easel3-fill::before { content: "\f66e"; } -.bi-easel3::before { content: "\f66f"; } -.bi-fan::before { content: "\f670"; } -.bi-fingerprint::before { content: "\f671"; } -.bi-graph-down-arrow::before { content: "\f672"; } -.bi-graph-up-arrow::before { content: "\f673"; } -.bi-hypnotize::before { content: "\f674"; } -.bi-magic::before { content: "\f675"; } -.bi-person-rolodex::before { content: "\f676"; } -.bi-person-video::before { content: "\f677"; } -.bi-person-video2::before { content: "\f678"; } -.bi-person-video3::before { content: "\f679"; } -.bi-person-workspace::before { content: "\f67a"; } -.bi-radioactive::before { content: "\f67b"; } -.bi-webcam-fill::before { content: "\f67c"; } -.bi-webcam::before { content: "\f67d"; } -.bi-yin-yang::before { content: "\f67e"; } -.bi-bandaid-fill::before { content: "\f680"; } -.bi-bandaid::before { content: "\f681"; } -.bi-bluetooth::before { content: "\f682"; } -.bi-body-text::before { content: "\f683"; } -.bi-boombox::before { content: "\f684"; } -.bi-boxes::before { content: "\f685"; } -.bi-dpad-fill::before { content: "\f686"; } -.bi-dpad::before { content: "\f687"; } -.bi-ear-fill::before { content: "\f688"; } -.bi-ear::before { content: "\f689"; } -.bi-envelope-check-fill::before { content: "\f68b"; } -.bi-envelope-check::before { content: "\f68c"; } -.bi-envelope-dash-fill::before { content: "\f68e"; } -.bi-envelope-dash::before { content: "\f68f"; } -.bi-envelope-exclamation-fill::before { content: "\f691"; } -.bi-envelope-exclamation::before { content: "\f692"; } -.bi-envelope-plus-fill::before { content: "\f693"; } -.bi-envelope-plus::before { content: "\f694"; } -.bi-envelope-slash-fill::before { content: "\f696"; } -.bi-envelope-slash::before { content: "\f697"; } -.bi-envelope-x-fill::before { content: "\f699"; } -.bi-envelope-x::before { content: "\f69a"; } -.bi-explicit-fill::before { content: "\f69b"; } -.bi-explicit::before { content: "\f69c"; } -.bi-git::before { content: "\f69d"; } -.bi-infinity::before { content: "\f69e"; } -.bi-list-columns-reverse::before { content: "\f69f"; } -.bi-list-columns::before { content: "\f6a0"; } -.bi-meta::before { content: "\f6a1"; } -.bi-nintendo-switch::before { content: "\f6a4"; } -.bi-pc-display-horizontal::before { content: "\f6a5"; } -.bi-pc-display::before { content: "\f6a6"; } -.bi-pc-horizontal::before { content: "\f6a7"; } -.bi-pc::before { content: "\f6a8"; } -.bi-playstation::before { content: "\f6a9"; } -.bi-plus-slash-minus::before { content: "\f6aa"; } -.bi-projector-fill::before { content: "\f6ab"; } -.bi-projector::before { content: "\f6ac"; } -.bi-qr-code-scan::before { content: "\f6ad"; } -.bi-qr-code::before { content: "\f6ae"; } -.bi-quora::before { content: "\f6af"; } -.bi-quote::before { content: "\f6b0"; } -.bi-robot::before { content: "\f6b1"; } -.bi-send-check-fill::before { content: "\f6b2"; } -.bi-send-check::before { content: "\f6b3"; } -.bi-send-dash-fill::before { content: "\f6b4"; } -.bi-send-dash::before { content: "\f6b5"; } -.bi-send-exclamation-fill::before { content: "\f6b7"; } -.bi-send-exclamation::before { content: "\f6b8"; } -.bi-send-fill::before { content: "\f6b9"; } -.bi-send-plus-fill::before { content: "\f6ba"; } -.bi-send-plus::before { content: "\f6bb"; } -.bi-send-slash-fill::before { content: "\f6bc"; } -.bi-send-slash::before { content: "\f6bd"; } -.bi-send-x-fill::before { content: "\f6be"; } -.bi-send-x::before { content: "\f6bf"; } -.bi-send::before { content: "\f6c0"; } -.bi-steam::before { content: "\f6c1"; } -.bi-terminal-dash::before { content: "\f6c3"; } -.bi-terminal-plus::before { content: "\f6c4"; } -.bi-terminal-split::before { content: "\f6c5"; } -.bi-ticket-detailed-fill::before { content: "\f6c6"; } -.bi-ticket-detailed::before { content: "\f6c7"; } -.bi-ticket-fill::before { content: "\f6c8"; } -.bi-ticket-perforated-fill::before { content: "\f6c9"; } -.bi-ticket-perforated::before { content: "\f6ca"; } -.bi-ticket::before { content: "\f6cb"; } -.bi-tiktok::before { content: "\f6cc"; } -.bi-window-dash::before { content: "\f6cd"; } -.bi-window-desktop::before { content: "\f6ce"; } -.bi-window-fullscreen::before { content: "\f6cf"; } -.bi-window-plus::before { content: "\f6d0"; } -.bi-window-split::before { content: "\f6d1"; } -.bi-window-stack::before { content: "\f6d2"; } -.bi-window-x::before { content: "\f6d3"; } -.bi-xbox::before { content: "\f6d4"; } -.bi-ethernet::before { content: "\f6d5"; } -.bi-hdmi-fill::before { content: "\f6d6"; } -.bi-hdmi::before { content: "\f6d7"; } -.bi-usb-c-fill::before { content: "\f6d8"; } -.bi-usb-c::before { content: "\f6d9"; } -.bi-usb-fill::before { content: "\f6da"; } -.bi-usb-plug-fill::before { content: "\f6db"; } -.bi-usb-plug::before { content: "\f6dc"; } -.bi-usb-symbol::before { content: "\f6dd"; } -.bi-usb::before { content: "\f6de"; } -.bi-boombox-fill::before { content: "\f6df"; } -.bi-displayport::before { content: "\f6e1"; } -.bi-gpu-card::before { content: "\f6e2"; } -.bi-memory::before { content: "\f6e3"; } -.bi-modem-fill::before { content: "\f6e4"; } -.bi-modem::before { content: "\f6e5"; } -.bi-motherboard-fill::before { content: "\f6e6"; } -.bi-motherboard::before { content: "\f6e7"; } -.bi-optical-audio-fill::before { content: "\f6e8"; } -.bi-optical-audio::before { content: "\f6e9"; } -.bi-pci-card::before { content: "\f6ea"; } -.bi-router-fill::before { content: "\f6eb"; } -.bi-router::before { content: "\f6ec"; } -.bi-thunderbolt-fill::before { content: "\f6ef"; } -.bi-thunderbolt::before { content: "\f6f0"; } -.bi-usb-drive-fill::before { content: "\f6f1"; } -.bi-usb-drive::before { content: "\f6f2"; } -.bi-usb-micro-fill::before { content: "\f6f3"; } -.bi-usb-micro::before { content: "\f6f4"; } -.bi-usb-mini-fill::before { content: "\f6f5"; } -.bi-usb-mini::before { content: "\f6f6"; } -.bi-cloud-haze2::before { content: "\f6f7"; } -.bi-device-hdd-fill::before { content: "\f6f8"; } -.bi-device-hdd::before { content: "\f6f9"; } -.bi-device-ssd-fill::before { content: "\f6fa"; } -.bi-device-ssd::before { content: "\f6fb"; } -.bi-displayport-fill::before { content: "\f6fc"; } -.bi-mortarboard-fill::before { content: "\f6fd"; } -.bi-mortarboard::before { content: "\f6fe"; } -.bi-terminal-x::before { content: "\f6ff"; } -.bi-arrow-through-heart-fill::before { content: "\f700"; } -.bi-arrow-through-heart::before { content: "\f701"; } -.bi-badge-sd-fill::before { content: "\f702"; } -.bi-badge-sd::before { content: "\f703"; } -.bi-bag-heart-fill::before { content: "\f704"; } -.bi-bag-heart::before { content: "\f705"; } -.bi-balloon-fill::before { content: "\f706"; } -.bi-balloon-heart-fill::before { content: "\f707"; } -.bi-balloon-heart::before { content: "\f708"; } -.bi-balloon::before { content: "\f709"; } -.bi-box2-fill::before { content: "\f70a"; } -.bi-box2-heart-fill::before { content: "\f70b"; } -.bi-box2-heart::before { content: "\f70c"; } -.bi-box2::before { content: "\f70d"; } -.bi-braces-asterisk::before { content: "\f70e"; } -.bi-calendar-heart-fill::before { content: "\f70f"; } -.bi-calendar-heart::before { content: "\f710"; } -.bi-calendar2-heart-fill::before { content: "\f711"; } -.bi-calendar2-heart::before { content: "\f712"; } -.bi-chat-heart-fill::before { content: "\f713"; } -.bi-chat-heart::before { content: "\f714"; } -.bi-chat-left-heart-fill::before { content: "\f715"; } -.bi-chat-left-heart::before { content: "\f716"; } -.bi-chat-right-heart-fill::before { content: "\f717"; } -.bi-chat-right-heart::before { content: "\f718"; } -.bi-chat-square-heart-fill::before { content: "\f719"; } -.bi-chat-square-heart::before { content: "\f71a"; } -.bi-clipboard-check-fill::before { content: "\f71b"; } -.bi-clipboard-data-fill::before { content: "\f71c"; } -.bi-clipboard-fill::before { content: "\f71d"; } -.bi-clipboard-heart-fill::before { content: "\f71e"; } -.bi-clipboard-heart::before { content: "\f71f"; } -.bi-clipboard-minus-fill::before { content: "\f720"; } -.bi-clipboard-plus-fill::before { content: "\f721"; } -.bi-clipboard-pulse::before { content: "\f722"; } -.bi-clipboard-x-fill::before { content: "\f723"; } -.bi-clipboard2-check-fill::before { content: "\f724"; } -.bi-clipboard2-check::before { content: "\f725"; } -.bi-clipboard2-data-fill::before { content: "\f726"; } -.bi-clipboard2-data::before { content: "\f727"; } -.bi-clipboard2-fill::before { content: "\f728"; } -.bi-clipboard2-heart-fill::before { content: "\f729"; } -.bi-clipboard2-heart::before { content: "\f72a"; } -.bi-clipboard2-minus-fill::before { content: "\f72b"; } -.bi-clipboard2-minus::before { content: "\f72c"; } -.bi-clipboard2-plus-fill::before { content: "\f72d"; } -.bi-clipboard2-plus::before { content: "\f72e"; } -.bi-clipboard2-pulse-fill::before { content: "\f72f"; } -.bi-clipboard2-pulse::before { content: "\f730"; } -.bi-clipboard2-x-fill::before { content: "\f731"; } -.bi-clipboard2-x::before { content: "\f732"; } -.bi-clipboard2::before { content: "\f733"; } -.bi-emoji-kiss-fill::before { content: "\f734"; } -.bi-emoji-kiss::before { content: "\f735"; } -.bi-envelope-heart-fill::before { content: "\f736"; } -.bi-envelope-heart::before { content: "\f737"; } -.bi-envelope-open-heart-fill::before { content: "\f738"; } -.bi-envelope-open-heart::before { content: "\f739"; } -.bi-envelope-paper-fill::before { content: "\f73a"; } -.bi-envelope-paper-heart-fill::before { content: "\f73b"; } -.bi-envelope-paper-heart::before { content: "\f73c"; } -.bi-envelope-paper::before { content: "\f73d"; } -.bi-filetype-aac::before { content: "\f73e"; } -.bi-filetype-ai::before { content: "\f73f"; } -.bi-filetype-bmp::before { content: "\f740"; } -.bi-filetype-cs::before { content: "\f741"; } -.bi-filetype-css::before { content: "\f742"; } -.bi-filetype-csv::before { content: "\f743"; } -.bi-filetype-doc::before { content: "\f744"; } -.bi-filetype-docx::before { content: "\f745"; } -.bi-filetype-exe::before { content: "\f746"; } -.bi-filetype-gif::before { content: "\f747"; } -.bi-filetype-heic::before { content: "\f748"; } -.bi-filetype-html::before { content: "\f749"; } -.bi-filetype-java::before { content: "\f74a"; } -.bi-filetype-jpg::before { content: "\f74b"; } -.bi-filetype-js::before { content: "\f74c"; } -.bi-filetype-jsx::before { content: "\f74d"; } -.bi-filetype-key::before { content: "\f74e"; } -.bi-filetype-m4p::before { content: "\f74f"; } -.bi-filetype-md::before { content: "\f750"; } -.bi-filetype-mdx::before { content: "\f751"; } -.bi-filetype-mov::before { content: "\f752"; } -.bi-filetype-mp3::before { content: "\f753"; } -.bi-filetype-mp4::before { content: "\f754"; } -.bi-filetype-otf::before { content: "\f755"; } -.bi-filetype-pdf::before { content: "\f756"; } -.bi-filetype-php::before { content: "\f757"; } -.bi-filetype-png::before { content: "\f758"; } -.bi-filetype-ppt::before { content: "\f75a"; } -.bi-filetype-psd::before { content: "\f75b"; } -.bi-filetype-py::before { content: "\f75c"; } -.bi-filetype-raw::before { content: "\f75d"; } -.bi-filetype-rb::before { content: "\f75e"; } -.bi-filetype-sass::before { content: "\f75f"; } -.bi-filetype-scss::before { content: "\f760"; } -.bi-filetype-sh::before { content: "\f761"; } -.bi-filetype-svg::before { content: "\f762"; } -.bi-filetype-tiff::before { content: "\f763"; } -.bi-filetype-tsx::before { content: "\f764"; } -.bi-filetype-ttf::before { content: "\f765"; } -.bi-filetype-txt::before { content: "\f766"; } -.bi-filetype-wav::before { content: "\f767"; } -.bi-filetype-woff::before { content: "\f768"; } -.bi-filetype-xls::before { content: "\f76a"; } -.bi-filetype-xml::before { content: "\f76b"; } -.bi-filetype-yml::before { content: "\f76c"; } -.bi-heart-arrow::before { content: "\f76d"; } -.bi-heart-pulse-fill::before { content: "\f76e"; } -.bi-heart-pulse::before { content: "\f76f"; } -.bi-heartbreak-fill::before { content: "\f770"; } -.bi-heartbreak::before { content: "\f771"; } -.bi-hearts::before { content: "\f772"; } -.bi-hospital-fill::before { content: "\f773"; } -.bi-hospital::before { content: "\f774"; } -.bi-house-heart-fill::before { content: "\f775"; } -.bi-house-heart::before { content: "\f776"; } -.bi-incognito::before { content: "\f777"; } -.bi-magnet-fill::before { content: "\f778"; } -.bi-magnet::before { content: "\f779"; } -.bi-person-heart::before { content: "\f77a"; } -.bi-person-hearts::before { content: "\f77b"; } -.bi-phone-flip::before { content: "\f77c"; } -.bi-plugin::before { content: "\f77d"; } -.bi-postage-fill::before { content: "\f77e"; } -.bi-postage-heart-fill::before { content: "\f77f"; } -.bi-postage-heart::before { content: "\f780"; } -.bi-postage::before { content: "\f781"; } -.bi-postcard-fill::before { content: "\f782"; } -.bi-postcard-heart-fill::before { content: "\f783"; } -.bi-postcard-heart::before { content: "\f784"; } -.bi-postcard::before { content: "\f785"; } -.bi-search-heart-fill::before { content: "\f786"; } -.bi-search-heart::before { content: "\f787"; } -.bi-sliders2-vertical::before { content: "\f788"; } -.bi-sliders2::before { content: "\f789"; } -.bi-trash3-fill::before { content: "\f78a"; } -.bi-trash3::before { content: "\f78b"; } -.bi-valentine::before { content: "\f78c"; } -.bi-valentine2::before { content: "\f78d"; } -.bi-wrench-adjustable-circle-fill::before { content: "\f78e"; } -.bi-wrench-adjustable-circle::before { content: "\f78f"; } -.bi-wrench-adjustable::before { content: "\f790"; } -.bi-filetype-json::before { content: "\f791"; } -.bi-filetype-pptx::before { content: "\f792"; } -.bi-filetype-xlsx::before { content: "\f793"; } -.bi-1-circle-fill::before { content: "\f796"; } -.bi-1-circle::before { content: "\f797"; } -.bi-1-square-fill::before { content: "\f798"; } -.bi-1-square::before { content: "\f799"; } -.bi-2-circle-fill::before { content: "\f79c"; } -.bi-2-circle::before { content: "\f79d"; } -.bi-2-square-fill::before { content: "\f79e"; } -.bi-2-square::before { content: "\f79f"; } -.bi-3-circle-fill::before { content: "\f7a2"; } -.bi-3-circle::before { content: "\f7a3"; } -.bi-3-square-fill::before { content: "\f7a4"; } -.bi-3-square::before { content: "\f7a5"; } -.bi-4-circle-fill::before { content: "\f7a8"; } -.bi-4-circle::before { content: "\f7a9"; } -.bi-4-square-fill::before { content: "\f7aa"; } -.bi-4-square::before { content: "\f7ab"; } -.bi-5-circle-fill::before { content: "\f7ae"; } -.bi-5-circle::before { content: "\f7af"; } -.bi-5-square-fill::before { content: "\f7b0"; } -.bi-5-square::before { content: "\f7b1"; } -.bi-6-circle-fill::before { content: "\f7b4"; } -.bi-6-circle::before { content: "\f7b5"; } -.bi-6-square-fill::before { content: "\f7b6"; } -.bi-6-square::before { content: "\f7b7"; } -.bi-7-circle-fill::before { content: "\f7ba"; } -.bi-7-circle::before { content: "\f7bb"; } -.bi-7-square-fill::before { content: "\f7bc"; } -.bi-7-square::before { content: "\f7bd"; } -.bi-8-circle-fill::before { content: "\f7c0"; } -.bi-8-circle::before { content: "\f7c1"; } -.bi-8-square-fill::before { content: "\f7c2"; } -.bi-8-square::before { content: "\f7c3"; } -.bi-9-circle-fill::before { content: "\f7c6"; } -.bi-9-circle::before { content: "\f7c7"; } -.bi-9-square-fill::before { content: "\f7c8"; } -.bi-9-square::before { content: "\f7c9"; } -.bi-airplane-engines-fill::before { content: "\f7ca"; } -.bi-airplane-engines::before { content: "\f7cb"; } -.bi-airplane-fill::before { content: "\f7cc"; } -.bi-airplane::before { content: "\f7cd"; } -.bi-alexa::before { content: "\f7ce"; } -.bi-alipay::before { content: "\f7cf"; } -.bi-android::before { content: "\f7d0"; } -.bi-android2::before { content: "\f7d1"; } -.bi-box-fill::before { content: "\f7d2"; } -.bi-box-seam-fill::before { content: "\f7d3"; } -.bi-browser-chrome::before { content: "\f7d4"; } -.bi-browser-edge::before { content: "\f7d5"; } -.bi-browser-firefox::before { content: "\f7d6"; } -.bi-browser-safari::before { content: "\f7d7"; } -.bi-c-circle-fill::before { content: "\f7da"; } -.bi-c-circle::before { content: "\f7db"; } -.bi-c-square-fill::before { content: "\f7dc"; } -.bi-c-square::before { content: "\f7dd"; } -.bi-capsule-pill::before { content: "\f7de"; } -.bi-capsule::before { content: "\f7df"; } -.bi-car-front-fill::before { content: "\f7e0"; } -.bi-car-front::before { content: "\f7e1"; } -.bi-cassette-fill::before { content: "\f7e2"; } -.bi-cassette::before { content: "\f7e3"; } -.bi-cc-circle-fill::before { content: "\f7e6"; } -.bi-cc-circle::before { content: "\f7e7"; } -.bi-cc-square-fill::before { content: "\f7e8"; } -.bi-cc-square::before { content: "\f7e9"; } -.bi-cup-hot-fill::before { content: "\f7ea"; } -.bi-cup-hot::before { content: "\f7eb"; } -.bi-currency-rupee::before { content: "\f7ec"; } -.bi-dropbox::before { content: "\f7ed"; } -.bi-escape::before { content: "\f7ee"; } -.bi-fast-forward-btn-fill::before { content: "\f7ef"; } -.bi-fast-forward-btn::before { content: "\f7f0"; } -.bi-fast-forward-circle-fill::before { content: "\f7f1"; } -.bi-fast-forward-circle::before { content: "\f7f2"; } -.bi-fast-forward-fill::before { content: "\f7f3"; } -.bi-fast-forward::before { content: "\f7f4"; } -.bi-filetype-sql::before { content: "\f7f5"; } -.bi-fire::before { content: "\f7f6"; } -.bi-google-play::before { content: "\f7f7"; } -.bi-h-circle-fill::before { content: "\f7fa"; } -.bi-h-circle::before { content: "\f7fb"; } -.bi-h-square-fill::before { content: "\f7fc"; } -.bi-h-square::before { content: "\f7fd"; } -.bi-indent::before { content: "\f7fe"; } -.bi-lungs-fill::before { content: "\f7ff"; } -.bi-lungs::before { content: "\f800"; } -.bi-microsoft-teams::before { content: "\f801"; } -.bi-p-circle-fill::before { content: "\f804"; } -.bi-p-circle::before { content: "\f805"; } -.bi-p-square-fill::before { content: "\f806"; } -.bi-p-square::before { content: "\f807"; } -.bi-pass-fill::before { content: "\f808"; } -.bi-pass::before { content: "\f809"; } -.bi-prescription::before { content: "\f80a"; } -.bi-prescription2::before { content: "\f80b"; } -.bi-r-circle-fill::before { content: "\f80e"; } -.bi-r-circle::before { content: "\f80f"; } -.bi-r-square-fill::before { content: "\f810"; } -.bi-r-square::before { content: "\f811"; } -.bi-repeat-1::before { content: "\f812"; } -.bi-repeat::before { content: "\f813"; } -.bi-rewind-btn-fill::before { content: "\f814"; } -.bi-rewind-btn::before { content: "\f815"; } -.bi-rewind-circle-fill::before { content: "\f816"; } -.bi-rewind-circle::before { content: "\f817"; } -.bi-rewind-fill::before { content: "\f818"; } -.bi-rewind::before { content: "\f819"; } -.bi-train-freight-front-fill::before { content: "\f81a"; } -.bi-train-freight-front::before { content: "\f81b"; } -.bi-train-front-fill::before { content: "\f81c"; } -.bi-train-front::before { content: "\f81d"; } -.bi-train-lightrail-front-fill::before { content: "\f81e"; } -.bi-train-lightrail-front::before { content: "\f81f"; } -.bi-truck-front-fill::before { content: "\f820"; } -.bi-truck-front::before { content: "\f821"; } -.bi-ubuntu::before { content: "\f822"; } -.bi-unindent::before { content: "\f823"; } -.bi-unity::before { content: "\f824"; } -.bi-universal-access-circle::before { content: "\f825"; } -.bi-universal-access::before { content: "\f826"; } -.bi-virus::before { content: "\f827"; } -.bi-virus2::before { content: "\f828"; } -.bi-wechat::before { content: "\f829"; } -.bi-yelp::before { content: "\f82a"; } -.bi-sign-stop-fill::before { content: "\f82b"; } -.bi-sign-stop-lights-fill::before { content: "\f82c"; } -.bi-sign-stop-lights::before { content: "\f82d"; } -.bi-sign-stop::before { content: "\f82e"; } -.bi-sign-turn-left-fill::before { content: "\f82f"; } -.bi-sign-turn-left::before { content: "\f830"; } -.bi-sign-turn-right-fill::before { content: "\f831"; } -.bi-sign-turn-right::before { content: "\f832"; } -.bi-sign-turn-slight-left-fill::before { content: "\f833"; } -.bi-sign-turn-slight-left::before { content: "\f834"; } -.bi-sign-turn-slight-right-fill::before { content: "\f835"; } -.bi-sign-turn-slight-right::before { content: "\f836"; } -.bi-sign-yield-fill::before { content: "\f837"; } -.bi-sign-yield::before { content: "\f838"; } -.bi-ev-station-fill::before { content: "\f839"; } -.bi-ev-station::before { content: "\f83a"; } -.bi-fuel-pump-diesel-fill::before { content: "\f83b"; } -.bi-fuel-pump-diesel::before { content: "\f83c"; } -.bi-fuel-pump-fill::before { content: "\f83d"; } -.bi-fuel-pump::before { content: "\f83e"; } -.bi-0-circle-fill::before { content: "\f83f"; } -.bi-0-circle::before { content: "\f840"; } -.bi-0-square-fill::before { content: "\f841"; } -.bi-0-square::before { content: "\f842"; } -.bi-rocket-fill::before { content: "\f843"; } -.bi-rocket-takeoff-fill::before { content: "\f844"; } -.bi-rocket-takeoff::before { content: "\f845"; } -.bi-rocket::before { content: "\f846"; } -.bi-stripe::before { content: "\f847"; } -.bi-subscript::before { content: "\f848"; } -.bi-superscript::before { content: "\f849"; } -.bi-trello::before { content: "\f84a"; } -.bi-envelope-at-fill::before { content: "\f84b"; } -.bi-envelope-at::before { content: "\f84c"; } -.bi-regex::before { content: "\f84d"; } -.bi-text-wrap::before { content: "\f84e"; } -.bi-sign-dead-end-fill::before { content: "\f84f"; } -.bi-sign-dead-end::before { content: "\f850"; } -.bi-sign-do-not-enter-fill::before { content: "\f851"; } -.bi-sign-do-not-enter::before { content: "\f852"; } -.bi-sign-intersection-fill::before { content: "\f853"; } -.bi-sign-intersection-side-fill::before { content: "\f854"; } -.bi-sign-intersection-side::before { content: "\f855"; } -.bi-sign-intersection-t-fill::before { content: "\f856"; } -.bi-sign-intersection-t::before { content: "\f857"; } -.bi-sign-intersection-y-fill::before { content: "\f858"; } -.bi-sign-intersection-y::before { content: "\f859"; } -.bi-sign-intersection::before { content: "\f85a"; } -.bi-sign-merge-left-fill::before { content: "\f85b"; } -.bi-sign-merge-left::before { content: "\f85c"; } -.bi-sign-merge-right-fill::before { content: "\f85d"; } -.bi-sign-merge-right::before { content: "\f85e"; } -.bi-sign-no-left-turn-fill::before { content: "\f85f"; } -.bi-sign-no-left-turn::before { content: "\f860"; } -.bi-sign-no-parking-fill::before { content: "\f861"; } -.bi-sign-no-parking::before { content: "\f862"; } -.bi-sign-no-right-turn-fill::before { content: "\f863"; } -.bi-sign-no-right-turn::before { content: "\f864"; } -.bi-sign-railroad-fill::before { content: "\f865"; } -.bi-sign-railroad::before { content: "\f866"; } -.bi-building-add::before { content: "\f867"; } -.bi-building-check::before { content: "\f868"; } -.bi-building-dash::before { content: "\f869"; } -.bi-building-down::before { content: "\f86a"; } -.bi-building-exclamation::before { content: "\f86b"; } -.bi-building-fill-add::before { content: "\f86c"; } -.bi-building-fill-check::before { content: "\f86d"; } -.bi-building-fill-dash::before { content: "\f86e"; } -.bi-building-fill-down::before { content: "\f86f"; } -.bi-building-fill-exclamation::before { content: "\f870"; } -.bi-building-fill-gear::before { content: "\f871"; } -.bi-building-fill-lock::before { content: "\f872"; } -.bi-building-fill-slash::before { content: "\f873"; } -.bi-building-fill-up::before { content: "\f874"; } -.bi-building-fill-x::before { content: "\f875"; } -.bi-building-fill::before { content: "\f876"; } -.bi-building-gear::before { content: "\f877"; } -.bi-building-lock::before { content: "\f878"; } -.bi-building-slash::before { content: "\f879"; } -.bi-building-up::before { content: "\f87a"; } -.bi-building-x::before { content: "\f87b"; } -.bi-buildings-fill::before { content: "\f87c"; } -.bi-buildings::before { content: "\f87d"; } -.bi-bus-front-fill::before { content: "\f87e"; } -.bi-bus-front::before { content: "\f87f"; } -.bi-ev-front-fill::before { content: "\f880"; } -.bi-ev-front::before { content: "\f881"; } -.bi-globe-americas::before { content: "\f882"; } -.bi-globe-asia-australia::before { content: "\f883"; } -.bi-globe-central-south-asia::before { content: "\f884"; } -.bi-globe-europe-africa::before { content: "\f885"; } -.bi-house-add-fill::before { content: "\f886"; } -.bi-house-add::before { content: "\f887"; } -.bi-house-check-fill::before { content: "\f888"; } -.bi-house-check::before { content: "\f889"; } -.bi-house-dash-fill::before { content: "\f88a"; } -.bi-house-dash::before { content: "\f88b"; } -.bi-house-down-fill::before { content: "\f88c"; } -.bi-house-down::before { content: "\f88d"; } -.bi-house-exclamation-fill::before { content: "\f88e"; } -.bi-house-exclamation::before { content: "\f88f"; } -.bi-house-gear-fill::before { content: "\f890"; } -.bi-house-gear::before { content: "\f891"; } -.bi-house-lock-fill::before { content: "\f892"; } -.bi-house-lock::before { content: "\f893"; } -.bi-house-slash-fill::before { content: "\f894"; } -.bi-house-slash::before { content: "\f895"; } -.bi-house-up-fill::before { content: "\f896"; } -.bi-house-up::before { content: "\f897"; } -.bi-house-x-fill::before { content: "\f898"; } -.bi-house-x::before { content: "\f899"; } -.bi-person-add::before { content: "\f89a"; } -.bi-person-down::before { content: "\f89b"; } -.bi-person-exclamation::before { content: "\f89c"; } -.bi-person-fill-add::before { content: "\f89d"; } -.bi-person-fill-check::before { content: "\f89e"; } -.bi-person-fill-dash::before { content: "\f89f"; } -.bi-person-fill-down::before { content: "\f8a0"; } -.bi-person-fill-exclamation::before { content: "\f8a1"; } -.bi-person-fill-gear::before { content: "\f8a2"; } -.bi-person-fill-lock::before { content: "\f8a3"; } -.bi-person-fill-slash::before { content: "\f8a4"; } -.bi-person-fill-up::before { content: "\f8a5"; } -.bi-person-fill-x::before { content: "\f8a6"; } -.bi-person-gear::before { content: "\f8a7"; } -.bi-person-lock::before { content: "\f8a8"; } -.bi-person-slash::before { content: "\f8a9"; } -.bi-person-up::before { content: "\f8aa"; } -.bi-scooter::before { content: "\f8ab"; } -.bi-taxi-front-fill::before { content: "\f8ac"; } -.bi-taxi-front::before { content: "\f8ad"; } -.bi-amd::before { content: "\f8ae"; } -.bi-database-add::before { content: "\f8af"; } -.bi-database-check::before { content: "\f8b0"; } -.bi-database-dash::before { content: "\f8b1"; } -.bi-database-down::before { content: "\f8b2"; } -.bi-database-exclamation::before { content: "\f8b3"; } -.bi-database-fill-add::before { content: "\f8b4"; } -.bi-database-fill-check::before { content: "\f8b5"; } -.bi-database-fill-dash::before { content: "\f8b6"; } -.bi-database-fill-down::before { content: "\f8b7"; } -.bi-database-fill-exclamation::before { content: "\f8b8"; } -.bi-database-fill-gear::before { content: "\f8b9"; } -.bi-database-fill-lock::before { content: "\f8ba"; } -.bi-database-fill-slash::before { content: "\f8bb"; } -.bi-database-fill-up::before { content: "\f8bc"; } -.bi-database-fill-x::before { content: "\f8bd"; } -.bi-database-fill::before { content: "\f8be"; } -.bi-database-gear::before { content: "\f8bf"; } -.bi-database-lock::before { content: "\f8c0"; } -.bi-database-slash::before { content: "\f8c1"; } -.bi-database-up::before { content: "\f8c2"; } -.bi-database-x::before { content: "\f8c3"; } -.bi-database::before { content: "\f8c4"; } -.bi-houses-fill::before { content: "\f8c5"; } -.bi-houses::before { content: "\f8c6"; } -.bi-nvidia::before { content: "\f8c7"; } -.bi-person-vcard-fill::before { content: "\f8c8"; } -.bi-person-vcard::before { content: "\f8c9"; } -.bi-sina-weibo::before { content: "\f8ca"; } -.bi-tencent-qq::before { content: "\f8cb"; } -.bi-wikipedia::before { content: "\f8cc"; } -.bi-alphabet-uppercase::before { content: "\f2a5"; } -.bi-alphabet::before { content: "\f68a"; } -.bi-amazon::before { content: "\f68d"; } -.bi-arrows-collapse-vertical::before { content: "\f690"; } -.bi-arrows-expand-vertical::before { content: "\f695"; } -.bi-arrows-vertical::before { content: "\f698"; } -.bi-arrows::before { content: "\f6a2"; } -.bi-ban-fill::before { content: "\f6a3"; } -.bi-ban::before { content: "\f6b6"; } -.bi-bing::before { content: "\f6c2"; } -.bi-cake::before { content: "\f6e0"; } -.bi-cake2::before { content: "\f6ed"; } -.bi-cookie::before { content: "\f6ee"; } -.bi-copy::before { content: "\f759"; } -.bi-crosshair::before { content: "\f769"; } -.bi-crosshair2::before { content: "\f794"; } -.bi-emoji-astonished-fill::before { content: "\f795"; } -.bi-emoji-astonished::before { content: "\f79a"; } -.bi-emoji-grimace-fill::before { content: "\f79b"; } -.bi-emoji-grimace::before { content: "\f7a0"; } -.bi-emoji-grin-fill::before { content: "\f7a1"; } -.bi-emoji-grin::before { content: "\f7a6"; } -.bi-emoji-surprise-fill::before { content: "\f7a7"; } -.bi-emoji-surprise::before { content: "\f7ac"; } -.bi-emoji-tear-fill::before { content: "\f7ad"; } -.bi-emoji-tear::before { content: "\f7b2"; } -.bi-envelope-arrow-down-fill::before { content: "\f7b3"; } -.bi-envelope-arrow-down::before { content: "\f7b8"; } -.bi-envelope-arrow-up-fill::before { content: "\f7b9"; } -.bi-envelope-arrow-up::before { content: "\f7be"; } -.bi-feather::before { content: "\f7bf"; } -.bi-feather2::before { content: "\f7c4"; } -.bi-floppy-fill::before { content: "\f7c5"; } -.bi-floppy::before { content: "\f7d8"; } -.bi-floppy2-fill::before { content: "\f7d9"; } -.bi-floppy2::before { content: "\f7e4"; } -.bi-gitlab::before { content: "\f7e5"; } -.bi-highlighter::before { content: "\f7f8"; } -.bi-marker-tip::before { content: "\f802"; } -.bi-nvme-fill::before { content: "\f803"; } -.bi-nvme::before { content: "\f80c"; } -.bi-opencollective::before { content: "\f80d"; } -.bi-pci-card-network::before { content: "\f8cd"; } -.bi-pci-card-sound::before { content: "\f8ce"; } -.bi-radar::before { content: "\f8cf"; } -.bi-send-arrow-down-fill::before { content: "\f8d0"; } -.bi-send-arrow-down::before { content: "\f8d1"; } -.bi-send-arrow-up-fill::before { content: "\f8d2"; } -.bi-send-arrow-up::before { content: "\f8d3"; } -.bi-sim-slash-fill::before { content: "\f8d4"; } -.bi-sim-slash::before { content: "\f8d5"; } -.bi-sourceforge::before { content: "\f8d6"; } -.bi-substack::before { content: "\f8d7"; } -.bi-threads-fill::before { content: "\f8d8"; } -.bi-threads::before { content: "\f8d9"; } -.bi-transparency::before { content: "\f8da"; } -.bi-twitter-x::before { content: "\f8db"; } -.bi-type-h4::before { content: "\f8dc"; } -.bi-type-h5::before { content: "\f8dd"; } -.bi-type-h6::before { content: "\f8de"; } -.bi-backpack-fill::before { content: "\f8df"; } -.bi-backpack::before { content: "\f8e0"; } -.bi-backpack2-fill::before { content: "\f8e1"; } -.bi-backpack2::before { content: "\f8e2"; } -.bi-backpack3-fill::before { content: "\f8e3"; } -.bi-backpack3::before { content: "\f8e4"; } -.bi-backpack4-fill::before { content: "\f8e5"; } -.bi-backpack4::before { content: "\f8e6"; } -.bi-brilliance::before { content: "\f8e7"; } -.bi-cake-fill::before { content: "\f8e8"; } -.bi-cake2-fill::before { content: "\f8e9"; } -.bi-duffle-fill::before { content: "\f8ea"; } -.bi-duffle::before { content: "\f8eb"; } -.bi-exposure::before { content: "\f8ec"; } -.bi-gender-neuter::before { content: "\f8ed"; } -.bi-highlights::before { content: "\f8ee"; } -.bi-luggage-fill::before { content: "\f8ef"; } -.bi-luggage::before { content: "\f8f0"; } -.bi-mailbox-flag::before { content: "\f8f1"; } -.bi-mailbox2-flag::before { content: "\f8f2"; } -.bi-noise-reduction::before { content: "\f8f3"; } -.bi-passport-fill::before { content: "\f8f4"; } -.bi-passport::before { content: "\f8f5"; } -.bi-person-arms-up::before { content: "\f8f6"; } -.bi-person-raised-hand::before { content: "\f8f7"; } -.bi-person-standing-dress::before { content: "\f8f8"; } -.bi-person-standing::before { content: "\f8f9"; } -.bi-person-walking::before { content: "\f8fa"; } -.bi-person-wheelchair::before { content: "\f8fb"; } -.bi-shadows::before { content: "\f8fc"; } -.bi-suitcase-fill::before { content: "\f8fd"; } -.bi-suitcase-lg-fill::before { content: "\f8fe"; } -.bi-suitcase-lg::before { content: "\f8ff"; } -.bi-suitcase::before { content: "\f900"; } -.bi-suitcase2-fill::before { content: "\f901"; } -.bi-suitcase2::before { content: "\f902"; } -.bi-vignette::before { content: "\f903"; } -.bi-bluesky::before { content: "\f7f9"; } -.bi-tux::before { content: "\f904"; } -.bi-beaker-fill::before { content: "\f905"; } -.bi-beaker::before { content: "\f906"; } -.bi-flask-fill::before { content: "\f907"; } -.bi-flask-florence-fill::before { content: "\f908"; } -.bi-flask-florence::before { content: "\f909"; } -.bi-flask::before { content: "\f90a"; } -.bi-leaf-fill::before { content: "\f90b"; } -.bi-leaf::before { content: "\f90c"; } -.bi-measuring-cup-fill::before { content: "\f90d"; } -.bi-measuring-cup::before { content: "\f90e"; } -.bi-unlock2-fill::before { content: "\f90f"; } -.bi-unlock2::before { content: "\f910"; } -.bi-battery-low::before { content: "\f911"; } -.bi-anthropic::before { content: "\f912"; } -.bi-apple-music::before { content: "\f913"; } -.bi-claude::before { content: "\f914"; } -.bi-openai::before { content: "\f915"; } -.bi-perplexity::before { content: "\f916"; } -.bi-css::before { content: "\f917"; } -.bi-javascript::before { content: "\f918"; } -.bi-typescript::before { content: "\f919"; } -.bi-fork-knife::before { content: "\f91a"; } -.bi-globe-americas-fill::before { content: "\f91b"; } -.bi-globe-asia-australia-fill::before { content: "\f91c"; } -.bi-globe-central-south-asia-fill::before { content: "\f91d"; } -.bi-globe-europe-africa-fill::before { content: "\f91e"; } diff --git a/docs/docs/site_libs/bootstrap/bootstrap-icons.woff b/docs/docs/site_libs/bootstrap/bootstrap-icons.woff deleted file mode 100644 index a4fa4f024c2171080ebaf3112fccbf90cdb98479..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 180288 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 DSDONf diff --git a/docs/docs/site_libs/bootstrap/bootstrap.min.js b/docs/docs/site_libs/bootstrap/bootstrap.min.js deleted file mode 100644 index e8f21f7..0000000 --- a/docs/docs/site_libs/bootstrap/bootstrap.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * Bootstrap v5.3.1 (https://getbootstrap.com/) - * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */ -!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t=new Map,e={set(e,i,n){t.has(e)||t.set(e,new Map);const s=t.get(e);s.has(i)||0===s.size?s.set(i,n):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(s.keys())[0]}.`)},get:(e,i)=>t.has(e)&&t.get(e).get(i)||null,remove(e,i){if(!t.has(e))return;const n=t.get(e);n.delete(i),0===n.size&&t.delete(e)}},i="transitionend",n=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),s=t=>{t.dispatchEvent(new Event(i))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(n(t)):null,a=t=>{if(!o(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},l=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),c=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?c(t.parentNode):null},h=()=>{},d=t=>{t.offsetHeight},u=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,f=[],p=()=>"rtl"===document.documentElement.dir,m=t=>{var e;e=()=>{const e=u();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of f)t()})),f.push(e)):e()},g=(t,e=[],i=t)=>"function"==typeof t?t(...e):i,_=(t,e,n=!0)=>{if(!n)return void g(t);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let r=!1;const a=({target:n})=>{n===e&&(r=!0,e.removeEventListener(i,a),g(t))};e.addEventListener(i,a),setTimeout((()=>{r||s(e)}),o)},b=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},v=/[^.]*(?=\..*)\.|.*/,y=/\..*/,w=/::\d+$/,A={};let E=1;const T={mouseenter:"mouseover",mouseleave:"mouseout"},C=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function O(t,e){return e&&`${e}::${E++}`||t.uidEvent||E++}function x(t){const e=O(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function k(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function L(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=I(t);return C.has(o)||(o=t),[n,s,o]}function S(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=L(e,i,n);if(e in T){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=x(t),c=l[a]||(l[a]={}),h=k(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=O(r,e.replace(v,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return P(s,{delegateTarget:r}),n.oneOff&&N.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return P(n,{delegateTarget:t}),i.oneOff&&N.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function D(t,e,i,n,s){const o=k(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function $(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&D(t,e,i,r.callable,r.delegationSelector)}function I(t){return t=t.replace(y,""),T[t]||t}const N={on(t,e,i,n){S(t,e,i,n,!1)},one(t,e,i,n){S(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=L(e,i,n),a=r!==e,l=x(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))$(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(w,"");a&&!e.includes(s)||D(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;D(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=u();let s=null,o=!0,r=!0,a=!1;e!==I(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=P(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function P(t,e={}){for(const[i,n]of Object.entries(e))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}function M(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function j(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const F={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${j(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${j(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=M(t.dataset[n])}return e},getDataAttribute:(t,e)=>M(t.getAttribute(`data-bs-${j(e)}`))};class H{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=o(e)?F.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...o(e)?F.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[n,s]of Object.entries(e)){const e=t[n],r=o(e)?"element":null==(i=e)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${r}" but expected type "${s}".`)}var i}}class W extends H{constructor(t,i){super(),(t=r(t))&&(this._element=t,this._config=this._getConfig(i),e.set(this._element,this.constructor.DATA_KEY,this))}dispose(){e.remove(this._element,this.constructor.DATA_KEY),N.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){_(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return e.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.1"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const B=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return n(e)},z={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!l(t)&&a(t)))},getSelectorFromElement(t){const e=B(t);return e&&z.findOne(e)?e:null},getElementFromSelector(t){const e=B(t);return e?z.findOne(e):null},getMultipleElementsFromSelector(t){const e=B(t);return e?z.find(e):[]}},R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;N.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),l(this))return;const s=z.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},q=".bs.alert",V=`close${q}`,K=`closed${q}`;class Q extends W{static get NAME(){return"alert"}close(){if(N.trigger(this._element,V).defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),N.trigger(this._element,K),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Q.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(Q,"close"),m(Q);const X='[data-bs-toggle="button"]';class Y extends W{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=Y.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}N.on(document,"click.bs.button.data-api",X,(t=>{t.preventDefault();const e=t.target.closest(X);Y.getOrCreateInstance(e).toggle()})),m(Y);const U=".bs.swipe",G=`touchstart${U}`,J=`touchmove${U}`,Z=`touchend${U}`,tt=`pointerdown${U}`,et=`pointerup${U}`,it={endCallback:null,leftCallback:null,rightCallback:null},nt={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class st extends H{constructor(t,e){super(),this._element=t,t&&st.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return it}static get DefaultType(){return nt}static get NAME(){return"swipe"}dispose(){N.off(this._element,U)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),g(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&g(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(N.on(this._element,tt,(t=>this._start(t))),N.on(this._element,et,(t=>this._end(t))),this._element.classList.add("pointer-event")):(N.on(this._element,G,(t=>this._start(t))),N.on(this._element,J,(t=>this._move(t))),N.on(this._element,Z,(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const ot=".bs.carousel",rt=".data-api",at="next",lt="prev",ct="left",ht="right",dt=`slide${ot}`,ut=`slid${ot}`,ft=`keydown${ot}`,pt=`mouseenter${ot}`,mt=`mouseleave${ot}`,gt=`dragstart${ot}`,_t=`load${ot}${rt}`,bt=`click${ot}${rt}`,vt="carousel",yt="active",wt=".active",At=".carousel-item",Et=wt+At,Tt={ArrowLeft:ht,ArrowRight:ct},Ct={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},Ot={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class xt extends W{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=z.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===vt&&this.cycle()}static get Default(){return Ct}static get DefaultType(){return Ot}static get NAME(){return"carousel"}next(){this._slide(at)}nextWhenVisible(){!document.hidden&&a(this._element)&&this.next()}prev(){this._slide(lt)}pause(){this._isSliding&&s(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?N.one(this._element,ut,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void N.one(this._element,ut,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?at:lt;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&N.on(this._element,ft,(t=>this._keydown(t))),"hover"===this._config.pause&&(N.on(this._element,pt,(()=>this.pause())),N.on(this._element,mt,(()=>this._maybeEnableCycle()))),this._config.touch&&st.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of z.find(".carousel-item img",this._element))N.on(t,gt,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(ct)),rightCallback:()=>this._slide(this._directionToOrder(ht)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new st(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=Tt[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=z.findOne(wt,this._indicatorsElement);e.classList.remove(yt),e.removeAttribute("aria-current");const i=z.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(yt),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===at,s=e||b(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>N.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(dt).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),d(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(yt),i.classList.remove(yt,c,l),this._isSliding=!1,r(ut)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return z.findOne(Et,this._element)}_getItems(){return z.find(At,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return p()?t===ct?lt:at:t===ct?at:lt}_orderToDirection(t){return p()?t===lt?ct:ht:t===lt?ht:ct}static jQueryInterface(t){return this.each((function(){const e=xt.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}N.on(document,bt,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=z.getElementFromSelector(this);if(!e||!e.classList.contains(vt))return;t.preventDefault();const i=xt.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===F.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),N.on(window,_t,(()=>{const t=z.find('[data-bs-ride="carousel"]');for(const e of t)xt.getOrCreateInstance(e)})),m(xt);const kt=".bs.collapse",Lt=`show${kt}`,St=`shown${kt}`,Dt=`hide${kt}`,$t=`hidden${kt}`,It=`click${kt}.data-api`,Nt="show",Pt="collapse",Mt="collapsing",jt=`:scope .${Pt} .${Pt}`,Ft='[data-bs-toggle="collapse"]',Ht={parent:null,toggle:!0},Wt={parent:"(null|element)",toggle:"boolean"};class Bt extends W{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=z.find(Ft);for(const t of i){const e=z.getSelectorFromElement(t),i=z.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Ht}static get DefaultType(){return Wt}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>Bt.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(N.trigger(this._element,Lt).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(Pt),this._element.classList.add(Mt),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Mt),this._element.classList.add(Pt,Nt),this._element.style[e]="",N.trigger(this._element,St)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(N.trigger(this._element,Dt).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,d(this._element),this._element.classList.add(Mt),this._element.classList.remove(Pt,Nt);for(const t of this._triggerArray){const e=z.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Mt),this._element.classList.add(Pt),N.trigger(this._element,$t)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(Nt)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=r(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(Ft);for(const e of t){const t=z.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=z.find(jt,this._config.parent);return z.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=Bt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}N.on(document,It,Ft,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of z.getMultipleElementsFromSelector(this))Bt.getOrCreateInstance(t,{toggle:!1}).toggle()})),m(Bt);var zt="top",Rt="bottom",qt="right",Vt="left",Kt="auto",Qt=[zt,Rt,qt,Vt],Xt="start",Yt="end",Ut="clippingParents",Gt="viewport",Jt="popper",Zt="reference",te=Qt.reduce((function(t,e){return t.concat([e+"-"+Xt,e+"-"+Yt])}),[]),ee=[].concat(Qt,[Kt]).reduce((function(t,e){return t.concat([e,e+"-"+Xt,e+"-"+Yt])}),[]),ie="beforeRead",ne="read",se="afterRead",oe="beforeMain",re="main",ae="afterMain",le="beforeWrite",ce="write",he="afterWrite",de=[ie,ne,se,oe,re,ae,le,ce,he];function ue(t){return t?(t.nodeName||"").toLowerCase():null}function fe(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function pe(t){return t instanceof fe(t).Element||t instanceof Element}function me(t){return t instanceof fe(t).HTMLElement||t instanceof HTMLElement}function ge(t){return"undefined"!=typeof ShadowRoot&&(t instanceof fe(t).ShadowRoot||t instanceof ShadowRoot)}const _e={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];me(s)&&ue(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});me(n)&&ue(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function be(t){return t.split("-")[0]}var ve=Math.max,ye=Math.min,we=Math.round;function Ae(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function Ee(){return!/^((?!chrome|android).)*safari/i.test(Ae())}function Te(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&me(t)&&(s=t.offsetWidth>0&&we(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&we(n.height)/t.offsetHeight||1);var r=(pe(t)?fe(t):window).visualViewport,a=!Ee()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function Ce(t){var e=Te(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Oe(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&ge(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function xe(t){return fe(t).getComputedStyle(t)}function ke(t){return["table","td","th"].indexOf(ue(t))>=0}function Le(t){return((pe(t)?t.ownerDocument:t.document)||window.document).documentElement}function Se(t){return"html"===ue(t)?t:t.assignedSlot||t.parentNode||(ge(t)?t.host:null)||Le(t)}function De(t){return me(t)&&"fixed"!==xe(t).position?t.offsetParent:null}function $e(t){for(var e=fe(t),i=De(t);i&&ke(i)&&"static"===xe(i).position;)i=De(i);return i&&("html"===ue(i)||"body"===ue(i)&&"static"===xe(i).position)?e:i||function(t){var e=/firefox/i.test(Ae());if(/Trident/i.test(Ae())&&me(t)&&"fixed"===xe(t).position)return null;var i=Se(t);for(ge(i)&&(i=i.host);me(i)&&["html","body"].indexOf(ue(i))<0;){var n=xe(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function Ie(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function Ne(t,e,i){return ve(t,ye(e,i))}function Pe(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function Me(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const je={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=be(i.placement),l=Ie(a),c=[Vt,qt].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return Pe("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:Me(t,Qt))}(s.padding,i),d=Ce(o),u="y"===l?zt:Vt,f="y"===l?Rt:qt,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=$e(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,A=Ne(v,w,y),E=l;i.modifiersData[n]=((e={})[E]=A,e.centerOffset=A-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Oe(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Fe(t){return t.split("-")[1]}var He={top:"auto",right:"auto",bottom:"auto",left:"auto"};function We(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=t.isFixed,u=r.x,f=void 0===u?0:u,p=r.y,m=void 0===p?0:p,g="function"==typeof h?h({x:f,y:m}):{x:f,y:m};f=g.x,m=g.y;var _=r.hasOwnProperty("x"),b=r.hasOwnProperty("y"),v=Vt,y=zt,w=window;if(c){var A=$e(i),E="clientHeight",T="clientWidth";A===fe(i)&&"static"!==xe(A=Le(i)).position&&"absolute"===a&&(E="scrollHeight",T="scrollWidth"),(s===zt||(s===Vt||s===qt)&&o===Yt)&&(y=Rt,m-=(d&&A===w&&w.visualViewport?w.visualViewport.height:A[E])-n.height,m*=l?1:-1),s!==Vt&&(s!==zt&&s!==Rt||o!==Yt)||(v=qt,f-=(d&&A===w&&w.visualViewport?w.visualViewport.width:A[T])-n.width,f*=l?1:-1)}var C,O=Object.assign({position:a},c&&He),x=!0===h?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:we(i*s)/s||0,y:we(n*s)/s||0}}({x:f,y:m},fe(i)):{x:f,y:m};return f=x.x,m=x.y,l?Object.assign({},O,((C={})[y]=b?"0":"",C[v]=_?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",C)):Object.assign({},O,((e={})[y]=b?m+"px":"",e[v]=_?f+"px":"",e.transform="",e))}const Be={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:be(e.placement),variation:Fe(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,We(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,We(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var ze={passive:!0};const Re={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=fe(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,ze)})),a&&l.addEventListener("resize",i.update,ze),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,ze)})),a&&l.removeEventListener("resize",i.update,ze)}},data:{}};var qe={left:"right",right:"left",bottom:"top",top:"bottom"};function Ve(t){return t.replace(/left|right|bottom|top/g,(function(t){return qe[t]}))}var Ke={start:"end",end:"start"};function Qe(t){return t.replace(/start|end/g,(function(t){return Ke[t]}))}function Xe(t){var e=fe(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Ye(t){return Te(Le(t)).left+Xe(t).scrollLeft}function Ue(t){var e=xe(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ge(t){return["html","body","#document"].indexOf(ue(t))>=0?t.ownerDocument.body:me(t)&&Ue(t)?t:Ge(Se(t))}function Je(t,e){var i;void 0===e&&(e=[]);var n=Ge(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=fe(n),r=s?[o].concat(o.visualViewport||[],Ue(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Je(Se(r)))}function Ze(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function ti(t,e,i){return e===Gt?Ze(function(t,e){var i=fe(t),n=Le(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=Ee();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+Ye(t),y:l}}(t,i)):pe(e)?function(t,e){var i=Te(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):Ze(function(t){var e,i=Le(t),n=Xe(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=ve(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ve(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+Ye(t),l=-n.scrollTop;return"rtl"===xe(s||i).direction&&(a+=ve(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Le(t)))}function ei(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?be(s):null,r=s?Fe(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case zt:e={x:a,y:i.y-n.height};break;case Rt:e={x:a,y:i.y+i.height};break;case qt:e={x:i.x+i.width,y:l};break;case Vt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?Ie(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case Xt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Yt:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ii(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.strategy,r=void 0===o?t.strategy:o,a=i.boundary,l=void 0===a?Ut:a,c=i.rootBoundary,h=void 0===c?Gt:c,d=i.elementContext,u=void 0===d?Jt:d,f=i.altBoundary,p=void 0!==f&&f,m=i.padding,g=void 0===m?0:m,_=Pe("number"!=typeof g?g:Me(g,Qt)),b=u===Jt?Zt:Jt,v=t.rects.popper,y=t.elements[p?b:u],w=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=Je(Se(t)),i=["absolute","fixed"].indexOf(xe(t).position)>=0&&me(t)?$e(t):t;return pe(i)?e.filter((function(t){return pe(t)&&Oe(t,i)&&"body"!==ue(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=ti(t,i,n);return e.top=ve(s.top,e.top),e.right=ye(s.right,e.right),e.bottom=ye(s.bottom,e.bottom),e.left=ve(s.left,e.left),e}),ti(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(pe(y)?y:y.contextElement||Le(t.elements.popper),l,h,r),A=Te(t.elements.reference),E=ei({reference:A,element:v,strategy:"absolute",placement:s}),T=Ze(Object.assign({},v,E)),C=u===Jt?T:A,O={top:w.top-C.top+_.top,bottom:C.bottom-w.bottom+_.bottom,left:w.left-C.left+_.left,right:C.right-w.right+_.right},x=t.modifiersData.offset;if(u===Jt&&x){var k=x[s];Object.keys(O).forEach((function(t){var e=[qt,Rt].indexOf(t)>=0?1:-1,i=[zt,Rt].indexOf(t)>=0?"y":"x";O[t]+=k[i]*e}))}return O}function ni(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?ee:l,h=Fe(n),d=h?a?te:te.filter((function(t){return Fe(t)===h})):Qt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ii(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[be(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const si={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=be(g),b=l||(_!==g&&p?function(t){if(be(t)===Kt)return[];var e=Ve(t);return[Qe(t),e,Qe(e)]}(g):[Ve(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(be(i)===Kt?ni(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,A=new Map,E=!0,T=v[0],C=0;C=0,S=L?"width":"height",D=ii(e,{placement:O,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),$=L?k?qt:Vt:k?Rt:zt;y[S]>w[S]&&($=Ve($));var I=Ve($),N=[];if(o&&N.push(D[x]<=0),a&&N.push(D[$]<=0,D[I]<=0),N.every((function(t){return t}))){T=O,E=!1;break}A.set(O,N)}if(E)for(var P=function(t){var e=v.find((function(e){var i=A.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==P(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function oi(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function ri(t){return[zt,qt,Rt,Vt].some((function(e){return t[e]>=0}))}const ai={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ii(e,{elementContext:"reference"}),a=ii(e,{altBoundary:!0}),l=oi(r,n),c=oi(a,s,o),h=ri(l),d=ri(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},li={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=ee.reduce((function(t,i){return t[i]=function(t,e,i){var n=be(t),s=[Vt,zt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[Vt,qt].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},ci={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=ei({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},hi={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ii(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=be(e.placement),b=Fe(e.placement),v=!b,y=Ie(_),w="x"===y?"y":"x",A=e.modifiersData.popperOffsets,E=e.rects.reference,T=e.rects.popper,C="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,O="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),x=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,k={x:0,y:0};if(A){if(o){var L,S="y"===y?zt:Vt,D="y"===y?Rt:qt,$="y"===y?"height":"width",I=A[y],N=I+g[S],P=I-g[D],M=f?-T[$]/2:0,j=b===Xt?E[$]:T[$],F=b===Xt?-T[$]:-E[$],H=e.elements.arrow,W=f&&H?Ce(H):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=B[S],R=B[D],q=Ne(0,E[$],W[$]),V=v?E[$]/2-M-q-z-O.mainAxis:j-q-z-O.mainAxis,K=v?-E[$]/2+M+q+R+O.mainAxis:F+q+R+O.mainAxis,Q=e.elements.arrow&&$e(e.elements.arrow),X=Q?"y"===y?Q.clientTop||0:Q.clientLeft||0:0,Y=null!=(L=null==x?void 0:x[y])?L:0,U=I+K-Y,G=Ne(f?ye(N,I+V-Y-X):N,I,f?ve(P,U):P);A[y]=G,k[y]=G-I}if(a){var J,Z="x"===y?zt:Vt,tt="x"===y?Rt:qt,et=A[w],it="y"===w?"height":"width",nt=et+g[Z],st=et-g[tt],ot=-1!==[zt,Vt].indexOf(_),rt=null!=(J=null==x?void 0:x[w])?J:0,at=ot?nt:et-E[it]-T[it]-rt+O.altAxis,lt=ot?et+E[it]+T[it]-rt-O.altAxis:st,ct=f&&ot?function(t,e,i){var n=Ne(t,e,i);return n>i?i:n}(at,et,lt):Ne(f?at:nt,et,f?lt:st);A[w]=ct,k[w]=ct-et}e.modifiersData[n]=k}},requiresIfExists:["offset"]};function di(t,e,i){void 0===i&&(i=!1);var n,s,o=me(e),r=me(e)&&function(t){var e=t.getBoundingClientRect(),i=we(e.width)/t.offsetWidth||1,n=we(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=Le(e),l=Te(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==ue(e)||Ue(a))&&(c=(n=e)!==fe(n)&&me(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:Xe(n)),me(e)?((h=Te(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=Ye(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function ui(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var fi={placement:"bottom",modifiers:[],strategy:"absolute"};function pi(){for(var t=arguments.length,e=new Array(t),i=0;iNumber.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(F.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...g(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const i=z.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>a(t)));i.length&&b(i,e,t===Ti,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=qi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=z.find(Ni);for(const i of e){const e=qi.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Ei,Ti].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Ii)?this:z.prev(this,Ii)[0]||z.next(this,Ii)[0]||z.findOne(Ii,t.delegateTarget.parentNode),o=qi.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}N.on(document,Si,Ii,qi.dataApiKeydownHandler),N.on(document,Si,Pi,qi.dataApiKeydownHandler),N.on(document,Li,qi.clearMenus),N.on(document,Di,qi.clearMenus),N.on(document,Li,Ii,(function(t){t.preventDefault(),qi.getOrCreateInstance(this).toggle()})),m(qi);const Vi="backdrop",Ki="show",Qi=`mousedown.bs.${Vi}`,Xi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Yi={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Ui extends H{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Xi}static get DefaultType(){return Yi}static get NAME(){return Vi}show(t){if(!this._config.isVisible)return void g(t);this._append();const e=this._getElement();this._config.isAnimated&&d(e),e.classList.add(Ki),this._emulateAnimation((()=>{g(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Ki),this._emulateAnimation((()=>{this.dispose(),g(t)}))):g(t)}dispose(){this._isAppended&&(N.off(this._element,Qi),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=r(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),N.on(t,Qi,(()=>{g(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){_(t,this._getElement(),this._config.isAnimated)}}const Gi=".bs.focustrap",Ji=`focusin${Gi}`,Zi=`keydown.tab${Gi}`,tn="backward",en={autofocus:!0,trapElement:null},nn={autofocus:"boolean",trapElement:"element"};class sn extends H{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return en}static get DefaultType(){return nn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),N.off(document,Gi),N.on(document,Ji,(t=>this._handleFocusin(t))),N.on(document,Zi,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,N.off(document,Gi))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=z.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===tn?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?tn:"forward")}}const on=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",rn=".sticky-top",an="padding-right",ln="margin-right";class cn{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,an,(e=>e+t)),this._setElementAttributes(on,an,(e=>e+t)),this._setElementAttributes(rn,ln,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,an),this._resetElementAttributes(on,an),this._resetElementAttributes(rn,ln)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&F.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=F.getDataAttribute(t,e);null!==i?(F.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(o(t))e(t);else for(const i of z.find(t,this._element))e(i)}}const hn=".bs.modal",dn=`hide${hn}`,un=`hidePrevented${hn}`,fn=`hidden${hn}`,pn=`show${hn}`,mn=`shown${hn}`,gn=`resize${hn}`,_n=`click.dismiss${hn}`,bn=`mousedown.dismiss${hn}`,vn=`keydown.dismiss${hn}`,yn=`click${hn}.data-api`,wn="modal-open",An="show",En="modal-static",Tn={backdrop:!0,focus:!0,keyboard:!0},Cn={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class On extends W{constructor(t,e){super(t,e),this._dialog=z.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new cn,this._addEventListeners()}static get Default(){return Tn}static get DefaultType(){return Cn}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||N.trigger(this._element,pn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(wn),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(N.trigger(this._element,dn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(An),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){N.off(window,hn),N.off(this._dialog,hn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Ui({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=z.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),d(this._element),this._element.classList.add(An),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,N.trigger(this._element,mn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){N.on(this._element,vn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),N.on(window,gn,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),N.on(this._element,bn,(t=>{N.one(this._element,_n,(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(wn),this._resetAdjustments(),this._scrollBar.reset(),N.trigger(this._element,fn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(N.trigger(this._element,un).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(En)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(En),this._queueCallback((()=>{this._element.classList.remove(En),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=p()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=p()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=On.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}N.on(document,yn,'[data-bs-toggle="modal"]',(function(t){const e=z.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),N.one(e,pn,(t=>{t.defaultPrevented||N.one(e,fn,(()=>{a(this)&&this.focus()}))}));const i=z.findOne(".modal.show");i&&On.getInstance(i).hide(),On.getOrCreateInstance(e).toggle(this)})),R(On),m(On);const xn=".bs.offcanvas",kn=".data-api",Ln=`load${xn}${kn}`,Sn="show",Dn="showing",$n="hiding",In=".offcanvas.show",Nn=`show${xn}`,Pn=`shown${xn}`,Mn=`hide${xn}`,jn=`hidePrevented${xn}`,Fn=`hidden${xn}`,Hn=`resize${xn}`,Wn=`click${xn}${kn}`,Bn=`keydown.dismiss${xn}`,zn={backdrop:!0,keyboard:!0,scroll:!1},Rn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class qn extends W{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return zn}static get DefaultType(){return Rn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||N.trigger(this._element,Nn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new cn).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Dn),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Sn),this._element.classList.remove(Dn),N.trigger(this._element,Pn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(N.trigger(this._element,Mn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add($n),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(Sn,$n),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new cn).reset(),N.trigger(this._element,Fn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Ui({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():N.trigger(this._element,jn)}:null})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_addEventListeners(){N.on(this._element,Bn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():N.trigger(this._element,jn))}))}static jQueryInterface(t){return this.each((function(){const e=qn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}N.on(document,Wn,'[data-bs-toggle="offcanvas"]',(function(t){const e=z.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this))return;N.one(e,Fn,(()=>{a(this)&&this.focus()}));const i=z.findOne(In);i&&i!==e&&qn.getInstance(i).hide(),qn.getOrCreateInstance(e).toggle(this)})),N.on(window,Ln,(()=>{for(const t of z.find(In))qn.getOrCreateInstance(t).show()})),N.on(window,Hn,(()=>{for(const t of z.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&qn.getOrCreateInstance(t).hide()})),R(qn),m(qn);const Vn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Kn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Qn=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Xn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Kn.has(i)||Boolean(Qn.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Yn={allowList:Vn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},Un={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Gn={entry:"(string|element|function|null)",selector:"(string|element)"};class Jn extends H{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Yn}static get DefaultType(){return Un}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Gn)}_setContent(t,e,i){const n=z.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?o(e)?this._putElementInTemplate(r(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Xn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return g(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Zn=new Set(["sanitize","allowList","sanitizeFn"]),ts="fade",es="show",is=".modal",ns="hide.bs.modal",ss="hover",os="focus",rs={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},as={allowList:Vn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},ls={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class cs extends W{constructor(t,e){if(void 0===vi)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return as}static get DefaultType(){return ls}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),N.off(this._element.closest(is),ns,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=N.trigger(this._element,this.constructor.eventName("show")),e=(c(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),N.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.on(t,"mouseover",h);this._queueCallback((()=>{N.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!N.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.off(t,"mouseover",h);this._activeTrigger.click=!1,this._activeTrigger[os]=!1,this._activeTrigger[ss]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),N.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(ts,es),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(ts),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Jn({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(ts)}_isShown(){return this.tip&&this.tip.classList.contains(es)}_createPopper(t){const e=g(this._config.placement,[this,t,this._element]),i=rs[e.toUpperCase()];return bi(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return g(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...g(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)N.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===ss?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===ss?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");N.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?os:ss]=!0,e._enter()})),N.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?os:ss]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},N.on(this._element.closest(is),ns,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=F.getDataAttributes(this._element);for(const t of Object.keys(e))Zn.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,i]of Object.entries(this._config))this.constructor.Default[e]!==i&&(t[e]=i);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=cs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(cs);const hs={...cs.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},ds={...cs.DefaultType,content:"(null|string|element|function)"};class us extends cs{static get Default(){return hs}static get DefaultType(){return ds}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=us.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(us);const fs=".bs.scrollspy",ps=`activate${fs}`,ms=`click${fs}`,gs=`load${fs}.data-api`,_s="active",bs="[href]",vs=".nav-link",ys=`${vs}, .nav-item > ${vs}, .list-group-item`,ws={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},As={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Es extends W{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return ws}static get DefaultType(){return As}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=r(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(N.off(this._config.target,ms),N.on(this._config.target,ms,bs,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=z.find(bs,this._config.target);for(const e of t){if(!e.hash||l(e))continue;const t=z.findOne(decodeURI(e.hash),this._element);a(t)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(_s),this._activateParents(t),N.trigger(this._element,ps,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))z.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(_s);else for(const e of z.parents(t,".nav, .list-group"))for(const t of z.prev(e,ys))t.classList.add(_s)}_clearActiveClass(t){t.classList.remove(_s);const e=z.find(`${bs}.${_s}`,t);for(const t of e)t.classList.remove(_s)}static jQueryInterface(t){return this.each((function(){const e=Es.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(window,gs,(()=>{for(const t of z.find('[data-bs-spy="scroll"]'))Es.getOrCreateInstance(t)})),m(Es);const Ts=".bs.tab",Cs=`hide${Ts}`,Os=`hidden${Ts}`,xs=`show${Ts}`,ks=`shown${Ts}`,Ls=`click${Ts}`,Ss=`keydown${Ts}`,Ds=`load${Ts}`,$s="ArrowLeft",Is="ArrowRight",Ns="ArrowUp",Ps="ArrowDown",Ms="Home",js="End",Fs="active",Hs="fade",Ws="show",Bs=":not(.dropdown-toggle)",zs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Rs=`.nav-link${Bs}, .list-group-item${Bs}, [role="tab"]${Bs}, ${zs}`,qs=`.${Fs}[data-bs-toggle="tab"], .${Fs}[data-bs-toggle="pill"], .${Fs}[data-bs-toggle="list"]`;class Vs extends W{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),N.on(this._element,Ss,(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?N.trigger(e,Cs,{relatedTarget:t}):null;N.trigger(t,xs,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(Fs),this._activate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),N.trigger(t,ks,{relatedTarget:e})):t.classList.add(Ws)}),t,t.classList.contains(Hs)))}_deactivate(t,e){t&&(t.classList.remove(Fs),t.blur(),this._deactivate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),N.trigger(t,Os,{relatedTarget:e})):t.classList.remove(Ws)}),t,t.classList.contains(Hs)))}_keydown(t){if(![$s,Is,Ns,Ps,Ms,js].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter((t=>!l(t)));let i;if([Ms,js].includes(t.key))i=e[t.key===Ms?0:e.length-1];else{const n=[Is,Ps].includes(t.key);i=b(e,t.target,n,!0)}i&&(i.focus({preventScroll:!0}),Vs.getOrCreateInstance(i).show())}_getChildren(){return z.find(Rs,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=z.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=z.findOne(t,i);s&&s.classList.toggle(n,e)};n(".dropdown-toggle",Fs),n(".dropdown-menu",Ws),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(Fs)}_getInnerElement(t){return t.matches(Rs)?t:z.findOne(Rs,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Vs.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(document,Ls,zs,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this)||Vs.getOrCreateInstance(this).show()})),N.on(window,Ds,(()=>{for(const t of z.find(qs))Vs.getOrCreateInstance(t)})),m(Vs);const Ks=".bs.toast",Qs=`mouseover${Ks}`,Xs=`mouseout${Ks}`,Ys=`focusin${Ks}`,Us=`focusout${Ks}`,Gs=`hide${Ks}`,Js=`hidden${Ks}`,Zs=`show${Ks}`,to=`shown${Ks}`,eo="hide",io="show",no="showing",so={animation:"boolean",autohide:"boolean",delay:"number"},oo={animation:!0,autohide:!0,delay:5e3};class ro extends W{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return oo}static get DefaultType(){return so}static get NAME(){return"toast"}show(){N.trigger(this._element,Zs).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(eo),d(this._element),this._element.classList.add(io,no),this._queueCallback((()=>{this._element.classList.remove(no),N.trigger(this._element,to),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(N.trigger(this._element,Gs).defaultPrevented||(this._element.classList.add(no),this._queueCallback((()=>{this._element.classList.add(eo),this._element.classList.remove(no,io),N.trigger(this._element,Js)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(io),super.dispose()}isShown(){return this._element.classList.contains(io)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){N.on(this._element,Qs,(t=>this._onInteraction(t,!0))),N.on(this._element,Xs,(t=>this._onInteraction(t,!1))),N.on(this._element,Ys,(t=>this._onInteraction(t,!0))),N.on(this._element,Us,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=ro.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(ro),m(ro),{Alert:Q,Button:Y,Carousel:xt,Collapse:Bt,Dropdown:qi,Modal:On,Offcanvas:qn,Popover:us,ScrollSpy:Es,Tab:Vs,Toast:ro,Tooltip:cs}})); -//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file diff --git a/docs/docs/site_libs/clipboard/clipboard.min.js b/docs/docs/site_libs/clipboard/clipboard.min.js deleted file mode 100644 index 1103f81..0000000 --- a/docs/docs/site_libs/clipboard/clipboard.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * clipboard.js v2.0.11 - * https://clipboardjs.com/ - * - * Licensed MIT © Zeno Rocha - */ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return b}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),r=n.n(e);function c(t){try{return document.execCommand(t)}catch(t){return}}var a=function(t){t=r()(t);return c("cut"),t};function o(t,e){var n,o,t=(n=t,o="rtl"===document.documentElement.getAttribute("dir"),(t=document.createElement("textarea")).style.fontSize="12pt",t.style.border="0",t.style.padding="0",t.style.margin="0",t.style.position="absolute",t.style[o?"right":"left"]="-9999px",o=window.pageYOffset||document.documentElement.scrollTop,t.style.top="".concat(o,"px"),t.setAttribute("readonly",""),t.value=n,t);return e.container.appendChild(t),e=r()(t),c("copy"),t.remove(),e}var f=function(t){var e=1.anchorjs-link,.anchorjs-link:focus{opacity:1}",A.sheet.cssRules.length),A.sheet.insertRule("[data-anchorjs-icon]::after{content:attr(data-anchorjs-icon)}",A.sheet.cssRules.length),A.sheet.insertRule('@font-face{font-family:anchorjs-icons;src:url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype")}',A.sheet.cssRules.length)),h=document.querySelectorAll("[id]"),t=[].map.call(h,function(A){return A.id}),i=0;i\]./()*\\\n\t\b\v\u00A0]/g,"-").replace(/-{2,}/g,"-").substring(0,this.options.truncate).replace(/^-+|-+$/gm,"").toLowerCase()},this.hasAnchorJSLink=function(A){var e=A.firstChild&&-1<(" "+A.firstChild.className+" ").indexOf(" anchorjs-link "),A=A.lastChild&&-1<(" "+A.lastChild.className+" ").indexOf(" anchorjs-link ");return e||A||!1}}}); -// @license-end \ No newline at end of file diff --git a/docs/docs/site_libs/quarto-html/axe/axe-check.js b/docs/docs/site_libs/quarto-html/axe/axe-check.js deleted file mode 100644 index 8808085..0000000 --- a/docs/docs/site_libs/quarto-html/axe/axe-check.js +++ /dev/null @@ -1,145 +0,0 @@ -class QuartoAxeReporter { - constructor(axeResult, options) { - this.axeResult = axeResult; - this.options = options; - } - - report() { - throw new Error("report() is an abstract method"); - } -} - -class QuartoAxeJsonReporter extends QuartoAxeReporter { - constructor(axeResult, options) { - super(axeResult, options); - } - - report() { - console.log(JSON.stringify(this.axeResult, null, 2)); - } -} - -class QuartoAxeConsoleReporter extends QuartoAxeReporter { - constructor(axeResult, options) { - super(axeResult, options); - } - - report() { - for (const violation of this.axeResult.violations) { - console.log(violation.description); - for (const node of violation.nodes) { - for (const target of node.target) { - console.log(target); - console.log(document.querySelector(target)); - } - } - } - } -} - -class QuartoAxeDocumentReporter extends QuartoAxeReporter { - constructor(axeResult, options) { - super(axeResult, options); - } - - createViolationElement(violation) { - const violationElement = document.createElement("div"); - - const descriptionElement = document.createElement("div"); - descriptionElement.className = "quarto-axe-violation-description"; - descriptionElement.innerText = `${violation.impact.replace(/^[a-z]/, match => match.toLocaleUpperCase())}: ${violation.description}`; - violationElement.appendChild(descriptionElement); - - const helpElement = document.createElement("div"); - helpElement.className = "quarto-axe-violation-help"; - helpElement.innerText = violation.help; - violationElement.appendChild(helpElement); - - const nodesElement = document.createElement("div"); - nodesElement.className = "quarto-axe-violation-nodes"; - violationElement.appendChild(nodesElement); - const nodeElement = document.createElement("div"); - nodeElement.className = "quarto-axe-violation-selector"; - for (const node of violation.nodes) { - for (const target of node.target) { - const targetElement = document.createElement("span"); - targetElement.className = "quarto-axe-violation-target"; - targetElement.innerText = target; - nodeElement.appendChild(targetElement); - nodeElement.addEventListener("mouseenter", () => { - const element = document.querySelector(target); - if (element) { - element.scrollIntoView({ behavior: "smooth", block: "center" }); - element.classList.add("quarto-axe-hover-highlight"); - setTimeout(() => { - element.style.border = ""; - }, 2000); - } - }); - nodeElement.addEventListener("mouseleave", () => { - const element = document.querySelector(target); - if (element) { - element.classList.remove("quarto-axe-hover-highlight"); - } - }); - nodeElement.addEventListener("click", () => { - console.log(document.querySelector(target)); - }); - nodeElement.appendChild(targetElement); - } - nodesElement.appendChild(nodeElement); - } - return violationElement; - } - - report() { - const violations = this.axeResult.violations; - const reportElement = document.createElement("div"); - reportElement.className = "quarto-axe-report"; - if (violations.length === 0) { - const noViolationsElement = document.createElement("div"); - noViolationsElement.className = "quarto-axe-no-violations"; - noViolationsElement.innerText = "No axe-core violations found."; - reportElement.appendChild(noViolationsElement); - } - violations.forEach((violation) => { - reportElement.appendChild(this.createViolationElement(violation)); - }); - document.querySelector("main").appendChild(reportElement); - } -} - -const reporters = { - json: QuartoAxeJsonReporter, - console: QuartoAxeConsoleReporter, - document: QuartoAxeDocumentReporter, -}; - -class QuartoAxeChecker { - constructor(opts) { - this.options = opts; - } - async init() { - const axe = (await import("https://cdn.skypack.dev/pin/axe-core@v4.10.3-aVOFXWsJaCpVrtv89pCa/mode=imports,min/optimized/axe-core.js")).default; - const result = await axe.run({ - exclude: [ - // https://github.com/microsoft/tabster/issues/288 - // MS has claimed they won't fix this, so we need to add an exclusion to - // all tabster elements - "[data-tabster-dummy]" - ], - preload: { assets: ['cssom'], timeout: 50000 } - }); - const reporter = this.options === true ? new QuartoAxeConsoleReporter(result) : new reporters[this.options.output](result, this.options); - reporter.report(); - } -} - -export async function init() { - const opts = document.querySelector("#quarto-axe-checker-options"); - if (opts) { - const jsonOptions = JSON.parse(atob(opts.textContent)); - const checker = new QuartoAxeChecker(jsonOptions); - await checker.init(); - } -} \ No newline at end of file diff --git a/docs/docs/site_libs/quarto-html/popper.min.js b/docs/docs/site_libs/quarto-html/popper.min.js deleted file mode 100644 index e3726d7..0000000 --- a/docs/docs/site_libs/quarto-html/popper.min.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * @popperjs/core v2.11.7 - MIT License - */ - -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Popper={})}(this,(function(e){"use strict";function t(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function n(e){return e instanceof t(e).Element||e instanceof Element}function r(e){return e instanceof t(e).HTMLElement||e instanceof HTMLElement}function o(e){return"undefined"!=typeof ShadowRoot&&(e instanceof t(e).ShadowRoot||e instanceof ShadowRoot)}var i=Math.max,a=Math.min,s=Math.round;function f(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function c(){return!/^((?!chrome|android).)*safari/i.test(f())}function p(e,o,i){void 0===o&&(o=!1),void 0===i&&(i=!1);var a=e.getBoundingClientRect(),f=1,p=1;o&&r(e)&&(f=e.offsetWidth>0&&s(a.width)/e.offsetWidth||1,p=e.offsetHeight>0&&s(a.height)/e.offsetHeight||1);var u=(n(e)?t(e):window).visualViewport,l=!c()&&i,d=(a.left+(l&&u?u.offsetLeft:0))/f,h=(a.top+(l&&u?u.offsetTop:0))/p,m=a.width/f,v=a.height/p;return{width:m,height:v,top:h,right:d+m,bottom:h+v,left:d,x:d,y:h}}function u(e){var n=t(e);return{scrollLeft:n.pageXOffset,scrollTop:n.pageYOffset}}function l(e){return e?(e.nodeName||"").toLowerCase():null}function d(e){return((n(e)?e.ownerDocument:e.document)||window.document).documentElement}function h(e){return p(d(e)).left+u(e).scrollLeft}function m(e){return t(e).getComputedStyle(e)}function v(e){var t=m(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function y(e,n,o){void 0===o&&(o=!1);var i,a,f=r(n),c=r(n)&&function(e){var t=e.getBoundingClientRect(),n=s(t.width)/e.offsetWidth||1,r=s(t.height)/e.offsetHeight||1;return 1!==n||1!==r}(n),m=d(n),y=p(e,c,o),g={scrollLeft:0,scrollTop:0},b={x:0,y:0};return(f||!f&&!o)&&(("body"!==l(n)||v(m))&&(g=(i=n)!==t(i)&&r(i)?{scrollLeft:(a=i).scrollLeft,scrollTop:a.scrollTop}:u(i)),r(n)?((b=p(n,!0)).x+=n.clientLeft,b.y+=n.clientTop):m&&(b.x=h(m))),{x:y.left+g.scrollLeft-b.x,y:y.top+g.scrollTop-b.y,width:y.width,height:y.height}}function g(e){var t=p(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function b(e){return"html"===l(e)?e:e.assignedSlot||e.parentNode||(o(e)?e.host:null)||d(e)}function x(e){return["html","body","#document"].indexOf(l(e))>=0?e.ownerDocument.body:r(e)&&v(e)?e:x(b(e))}function w(e,n){var r;void 0===n&&(n=[]);var o=x(e),i=o===(null==(r=e.ownerDocument)?void 0:r.body),a=t(o),s=i?[a].concat(a.visualViewport||[],v(o)?o:[]):o,f=n.concat(s);return i?f:f.concat(w(b(s)))}function O(e){return["table","td","th"].indexOf(l(e))>=0}function j(e){return r(e)&&"fixed"!==m(e).position?e.offsetParent:null}function E(e){for(var n=t(e),i=j(e);i&&O(i)&&"static"===m(i).position;)i=j(i);return i&&("html"===l(i)||"body"===l(i)&&"static"===m(i).position)?n:i||function(e){var t=/firefox/i.test(f());if(/Trident/i.test(f())&&r(e)&&"fixed"===m(e).position)return null;var n=b(e);for(o(n)&&(n=n.host);r(n)&&["html","body"].indexOf(l(n))<0;){var i=m(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||n}var D="top",A="bottom",L="right",P="left",M="auto",k=[D,A,L,P],W="start",B="end",H="viewport",T="popper",R=k.reduce((function(e,t){return e.concat([t+"-"+W,t+"-"+B])}),[]),S=[].concat(k,[M]).reduce((function(e,t){return e.concat([t,t+"-"+W,t+"-"+B])}),[]),V=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function q(e){var t=new Map,n=new Set,r=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&o(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),r}function C(e){return e.split("-")[0]}function N(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&o(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function I(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function _(e,r,o){return r===H?I(function(e,n){var r=t(e),o=d(e),i=r.visualViewport,a=o.clientWidth,s=o.clientHeight,f=0,p=0;if(i){a=i.width,s=i.height;var u=c();(u||!u&&"fixed"===n)&&(f=i.offsetLeft,p=i.offsetTop)}return{width:a,height:s,x:f+h(e),y:p}}(e,o)):n(r)?function(e,t){var n=p(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(r,o):I(function(e){var t,n=d(e),r=u(e),o=null==(t=e.ownerDocument)?void 0:t.body,a=i(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=i(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),f=-r.scrollLeft+h(e),c=-r.scrollTop;return"rtl"===m(o||n).direction&&(f+=i(n.clientWidth,o?o.clientWidth:0)-a),{width:a,height:s,x:f,y:c}}(d(e)))}function F(e,t,o,s){var f="clippingParents"===t?function(e){var t=w(b(e)),o=["absolute","fixed"].indexOf(m(e).position)>=0&&r(e)?E(e):e;return n(o)?t.filter((function(e){return n(e)&&N(e,o)&&"body"!==l(e)})):[]}(e):[].concat(t),c=[].concat(f,[o]),p=c[0],u=c.reduce((function(t,n){var r=_(e,n,s);return t.top=i(r.top,t.top),t.right=a(r.right,t.right),t.bottom=a(r.bottom,t.bottom),t.left=i(r.left,t.left),t}),_(e,p,s));return u.width=u.right-u.left,u.height=u.bottom-u.top,u.x=u.left,u.y=u.top,u}function U(e){return e.split("-")[1]}function z(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function X(e){var t,n=e.reference,r=e.element,o=e.placement,i=o?C(o):null,a=o?U(o):null,s=n.x+n.width/2-r.width/2,f=n.y+n.height/2-r.height/2;switch(i){case D:t={x:s,y:n.y-r.height};break;case A:t={x:s,y:n.y+n.height};break;case L:t={x:n.x+n.width,y:f};break;case P:t={x:n.x-r.width,y:f};break;default:t={x:n.x,y:n.y}}var c=i?z(i):null;if(null!=c){var p="y"===c?"height":"width";switch(a){case W:t[c]=t[c]-(n[p]/2-r[p]/2);break;case B:t[c]=t[c]+(n[p]/2-r[p]/2)}}return t}function Y(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function G(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function J(e,t){void 0===t&&(t={});var r=t,o=r.placement,i=void 0===o?e.placement:o,a=r.strategy,s=void 0===a?e.strategy:a,f=r.boundary,c=void 0===f?"clippingParents":f,u=r.rootBoundary,l=void 0===u?H:u,h=r.elementContext,m=void 0===h?T:h,v=r.altBoundary,y=void 0!==v&&v,g=r.padding,b=void 0===g?0:g,x=Y("number"!=typeof b?b:G(b,k)),w=m===T?"reference":T,O=e.rects.popper,j=e.elements[y?w:m],E=F(n(j)?j:j.contextElement||d(e.elements.popper),c,l,s),P=p(e.elements.reference),M=X({reference:P,element:O,strategy:"absolute",placement:i}),W=I(Object.assign({},O,M)),B=m===T?W:P,R={top:E.top-B.top+x.top,bottom:B.bottom-E.bottom+x.bottom,left:E.left-B.left+x.left,right:B.right-E.right+x.right},S=e.modifiersData.offset;if(m===T&&S){var V=S[i];Object.keys(R).forEach((function(e){var t=[L,A].indexOf(e)>=0?1:-1,n=[D,A].indexOf(e)>=0?"y":"x";R[e]+=V[n]*t}))}return R}var K={placement:"bottom",modifiers:[],strategy:"absolute"};function Q(){for(var e=arguments.length,t=new Array(e),n=0;n=0?-1:1,i="function"==typeof n?n(Object.assign({},t,{placement:e})):n,a=i[0],s=i[1];return a=a||0,s=(s||0)*o,[P,L].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}(n,t.rects,i),e}),{}),s=a[t.placement],f=s.x,c=s.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=f,t.modifiersData.popperOffsets.y+=c),t.modifiersData[r]=a}},se={left:"right",right:"left",bottom:"top",top:"bottom"};function fe(e){return e.replace(/left|right|bottom|top/g,(function(e){return se[e]}))}var ce={start:"end",end:"start"};function pe(e){return e.replace(/start|end/g,(function(e){return ce[e]}))}function ue(e,t){void 0===t&&(t={});var n=t,r=n.placement,o=n.boundary,i=n.rootBoundary,a=n.padding,s=n.flipVariations,f=n.allowedAutoPlacements,c=void 0===f?S:f,p=U(r),u=p?s?R:R.filter((function(e){return U(e)===p})):k,l=u.filter((function(e){return c.indexOf(e)>=0}));0===l.length&&(l=u);var d=l.reduce((function(t,n){return t[n]=J(e,{placement:n,boundary:o,rootBoundary:i,padding:a})[C(n)],t}),{});return Object.keys(d).sort((function(e,t){return d[e]-d[t]}))}var le={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,i=void 0===o||o,a=n.altAxis,s=void 0===a||a,f=n.fallbackPlacements,c=n.padding,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.flipVariations,h=void 0===d||d,m=n.allowedAutoPlacements,v=t.options.placement,y=C(v),g=f||(y===v||!h?[fe(v)]:function(e){if(C(e)===M)return[];var t=fe(e);return[pe(e),t,pe(t)]}(v)),b=[v].concat(g).reduce((function(e,n){return e.concat(C(n)===M?ue(t,{placement:n,boundary:p,rootBoundary:u,padding:c,flipVariations:h,allowedAutoPlacements:m}):n)}),[]),x=t.rects.reference,w=t.rects.popper,O=new Map,j=!0,E=b[0],k=0;k=0,S=R?"width":"height",V=J(t,{placement:B,boundary:p,rootBoundary:u,altBoundary:l,padding:c}),q=R?T?L:P:T?A:D;x[S]>w[S]&&(q=fe(q));var N=fe(q),I=[];if(i&&I.push(V[H]<=0),s&&I.push(V[q]<=0,V[N]<=0),I.every((function(e){return e}))){E=B,j=!1;break}O.set(B,I)}if(j)for(var _=function(e){var t=b.find((function(t){var n=O.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return E=t,"break"},F=h?3:1;F>0;F--){if("break"===_(F))break}t.placement!==E&&(t.modifiersData[r]._skip=!0,t.placement=E,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function de(e,t,n){return i(e,a(t,n))}var he={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,s=void 0===o||o,f=n.altAxis,c=void 0!==f&&f,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.padding,h=n.tether,m=void 0===h||h,v=n.tetherOffset,y=void 0===v?0:v,b=J(t,{boundary:p,rootBoundary:u,padding:d,altBoundary:l}),x=C(t.placement),w=U(t.placement),O=!w,j=z(x),M="x"===j?"y":"x",k=t.modifiersData.popperOffsets,B=t.rects.reference,H=t.rects.popper,T="function"==typeof y?y(Object.assign({},t.rects,{placement:t.placement})):y,R="number"==typeof T?{mainAxis:T,altAxis:T}:Object.assign({mainAxis:0,altAxis:0},T),S=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,V={x:0,y:0};if(k){if(s){var q,N="y"===j?D:P,I="y"===j?A:L,_="y"===j?"height":"width",F=k[j],X=F+b[N],Y=F-b[I],G=m?-H[_]/2:0,K=w===W?B[_]:H[_],Q=w===W?-H[_]:-B[_],Z=t.elements.arrow,$=m&&Z?g(Z):{width:0,height:0},ee=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},te=ee[N],ne=ee[I],re=de(0,B[_],$[_]),oe=O?B[_]/2-G-re-te-R.mainAxis:K-re-te-R.mainAxis,ie=O?-B[_]/2+G+re+ne+R.mainAxis:Q+re+ne+R.mainAxis,ae=t.elements.arrow&&E(t.elements.arrow),se=ae?"y"===j?ae.clientTop||0:ae.clientLeft||0:0,fe=null!=(q=null==S?void 0:S[j])?q:0,ce=F+ie-fe,pe=de(m?a(X,F+oe-fe-se):X,F,m?i(Y,ce):Y);k[j]=pe,V[j]=pe-F}if(c){var ue,le="x"===j?D:P,he="x"===j?A:L,me=k[M],ve="y"===M?"height":"width",ye=me+b[le],ge=me-b[he],be=-1!==[D,P].indexOf(x),xe=null!=(ue=null==S?void 0:S[M])?ue:0,we=be?ye:me-B[ve]-H[ve]-xe+R.altAxis,Oe=be?me+B[ve]+H[ve]-xe-R.altAxis:ge,je=m&&be?function(e,t,n){var r=de(e,t,n);return r>n?n:r}(we,me,Oe):de(m?we:ye,me,m?Oe:ge);k[M]=je,V[M]=je-me}t.modifiersData[r]=V}},requiresIfExists:["offset"]};var me={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,r=e.name,o=e.options,i=n.elements.arrow,a=n.modifiersData.popperOffsets,s=C(n.placement),f=z(s),c=[P,L].indexOf(s)>=0?"height":"width";if(i&&a){var p=function(e,t){return Y("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:G(e,k))}(o.padding,n),u=g(i),l="y"===f?D:P,d="y"===f?A:L,h=n.rects.reference[c]+n.rects.reference[f]-a[f]-n.rects.popper[c],m=a[f]-n.rects.reference[f],v=E(i),y=v?"y"===f?v.clientHeight||0:v.clientWidth||0:0,b=h/2-m/2,x=p[l],w=y-u[c]-p[d],O=y/2-u[c]/2+b,j=de(x,O,w),M=f;n.modifiersData[r]=((t={})[M]=j,t.centerOffset=j-O,t)}},effect:function(e){var t=e.state,n=e.options.element,r=void 0===n?"[data-popper-arrow]":n;null!=r&&("string"!=typeof r||(r=t.elements.popper.querySelector(r)))&&N(t.elements.popper,r)&&(t.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ve(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function ye(e){return[D,L,A,P].some((function(t){return e[t]>=0}))}var ge={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,i=t.modifiersData.preventOverflow,a=J(t,{elementContext:"reference"}),s=J(t,{altBoundary:!0}),f=ve(a,r),c=ve(s,o,i),p=ye(f),u=ye(c);t.modifiersData[n]={referenceClippingOffsets:f,popperEscapeOffsets:c,isReferenceHidden:p,hasPopperEscaped:u},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":p,"data-popper-escaped":u})}},be=Z({defaultModifiers:[ee,te,oe,ie]}),xe=[ee,te,oe,ie,ae,le,he,me,ge],we=Z({defaultModifiers:xe});e.applyStyles=ie,e.arrow=me,e.computeStyles=oe,e.createPopper=we,e.createPopperLite=be,e.defaultModifiers=xe,e.detectOverflow=J,e.eventListeners=ee,e.flip=le,e.hide=ge,e.offset=ae,e.popperGenerator=Z,e.popperOffsets=te,e.preventOverflow=he,Object.defineProperty(e,"__esModule",{value:!0})})); - diff --git a/docs/docs/site_libs/quarto-html/quarto-syntax-highlighting-ed96de9b727972fe78a7b5d16c58bf87.css b/docs/docs/site_libs/quarto-html/quarto-syntax-highlighting-ed96de9b727972fe78a7b5d16c58bf87.css deleted file mode 100644 index 7bb4f73..0000000 --- a/docs/docs/site_libs/quarto-html/quarto-syntax-highlighting-ed96de9b727972fe78a7b5d16c58bf87.css +++ /dev/null @@ -1,236 +0,0 @@ -/* quarto syntax highlight colors */ -:root { - --quarto-hl-ot-color: #003B4F; - --quarto-hl-at-color: #657422; - --quarto-hl-ss-color: #20794D; - --quarto-hl-an-color: #5E5E5E; - --quarto-hl-fu-color: #4758AB; - --quarto-hl-st-color: #20794D; - --quarto-hl-cf-color: #003B4F; - --quarto-hl-op-color: #5E5E5E; - --quarto-hl-er-color: #AD0000; - --quarto-hl-bn-color: #AD0000; - --quarto-hl-al-color: #AD0000; - --quarto-hl-va-color: #111111; - --quarto-hl-bu-color: inherit; - --quarto-hl-ex-color: inherit; - --quarto-hl-pp-color: #AD0000; - --quarto-hl-in-color: #5E5E5E; - --quarto-hl-vs-color: #20794D; - --quarto-hl-wa-color: #5E5E5E; - --quarto-hl-do-color: #5E5E5E; - --quarto-hl-im-color: #00769E; - --quarto-hl-ch-color: #20794D; - --quarto-hl-dt-color: #AD0000; - --quarto-hl-fl-color: #AD0000; - --quarto-hl-co-color: #5E5E5E; - --quarto-hl-cv-color: #5E5E5E; - --quarto-hl-cn-color: #8f5902; - --quarto-hl-sc-color: #5E5E5E; - --quarto-hl-dv-color: #AD0000; - --quarto-hl-kw-color: #003B4F; -} - -/* other quarto variables */ -:root { - --quarto-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; -} - -/* syntax highlight based on Pandoc's rules */ -pre > code.sourceCode > span { - color: #003B4F; -} - -code.sourceCode > span { - color: #003B4F; -} - -div.sourceCode, -div.sourceCode pre.sourceCode { - color: #003B4F; -} - -/* Normal */ -code span { - color: #003B4F; -} - -/* Alert */ -code span.al { - color: #AD0000; - font-style: inherit; -} - -/* Annotation */ -code span.an { - color: #5E5E5E; - font-style: inherit; -} - -/* Attribute */ -code span.at { - color: #657422; - font-style: inherit; -} - -/* BaseN */ -code span.bn { - color: #AD0000; - font-style: inherit; -} - -/* BuiltIn */ -code span.bu { - font-style: inherit; -} - -/* ControlFlow */ -code span.cf { - color: #003B4F; - font-weight: bold; - font-style: inherit; -} - -/* Char */ -code span.ch { - color: #20794D; - font-style: inherit; -} - -/* Constant */ -code span.cn { - color: #8f5902; - font-style: inherit; -} - -/* Comment */ -code span.co { - color: #5E5E5E; - font-style: inherit; -} - -/* CommentVar */ -code span.cv { - color: #5E5E5E; - font-style: italic; -} - -/* Documentation */ -code span.do { - color: #5E5E5E; - font-style: italic; -} - -/* DataType */ -code span.dt { - color: #AD0000; - font-style: inherit; -} - -/* DecVal */ -code span.dv { - color: #AD0000; - font-style: inherit; -} - -/* Error */ -code span.er { - color: #AD0000; - font-style: inherit; -} - -/* Extension */ -code span.ex { - font-style: inherit; -} - -/* Float */ -code span.fl { - color: #AD0000; - font-style: inherit; -} - -/* Function */ -code span.fu { - color: #4758AB; - font-style: inherit; -} - -/* Import */ -code span.im { - color: #00769E; - font-style: inherit; -} - -/* Information */ -code span.in { - color: #5E5E5E; - font-style: inherit; -} - -/* Keyword */ -code span.kw { - color: #003B4F; - font-weight: bold; - font-style: inherit; -} - -/* Operator */ -code span.op { - color: #5E5E5E; - font-style: inherit; -} - -/* Other */ -code span.ot { - color: #003B4F; - font-style: inherit; -} - -/* Preprocessor */ -code span.pp { - color: #AD0000; - font-style: inherit; -} - -/* SpecialChar */ -code span.sc { - color: #5E5E5E; - font-style: inherit; -} - -/* SpecialString */ -code span.ss { - color: #20794D; - font-style: inherit; -} - -/* String */ -code span.st { - color: #20794D; - font-style: inherit; -} - -/* Variable */ -code span.va { - color: #111111; - font-style: inherit; -} - -/* VerbatimString */ -code span.vs { - color: #20794D; - font-style: inherit; -} - -/* Warning */ -code span.wa { - color: #5E5E5E; - font-style: italic; -} - -.prevent-inlining { - content: " { - // Find any conflicting margin elements and add margins to the - // top to prevent overlap - const marginChildren = window.document.querySelectorAll( - ".column-margin.column-container > *, .margin-caption, .aside" - ); - - let lastBottom = 0; - for (const marginChild of marginChildren) { - if (marginChild.offsetParent !== null) { - // clear the top margin so we recompute it - marginChild.style.marginTop = null; - const top = marginChild.getBoundingClientRect().top + window.scrollY; - if (top < lastBottom) { - const marginChildStyle = window.getComputedStyle(marginChild); - const marginBottom = parseFloat(marginChildStyle["marginBottom"]); - const margin = lastBottom - top + marginBottom; - marginChild.style.marginTop = `${margin}px`; - } - const styles = window.getComputedStyle(marginChild); - const marginTop = parseFloat(styles["marginTop"]); - lastBottom = top + marginChild.getBoundingClientRect().height + marginTop; - } - } -}; - -window.document.addEventListener("DOMContentLoaded", function (_event) { - // Recompute the position of margin elements anytime the body size changes - if (window.ResizeObserver) { - const resizeObserver = new window.ResizeObserver( - throttle(() => { - layoutMarginEls(); - if ( - window.document.body.getBoundingClientRect().width < 990 && - isReaderMode() - ) { - quartoToggleReader(); - } - }, 50) - ); - resizeObserver.observe(window.document.body); - } - - const tocEl = window.document.querySelector('nav.toc-active[role="doc-toc"]'); - const sidebarEl = window.document.getElementById("quarto-sidebar"); - const leftTocEl = window.document.getElementById("quarto-sidebar-toc-left"); - const marginSidebarEl = window.document.getElementById( - "quarto-margin-sidebar" - ); - // function to determine whether the element has a previous sibling that is active - const prevSiblingIsActiveLink = (el) => { - const sibling = el.previousElementSibling; - if (sibling && sibling.tagName === "A") { - return sibling.classList.contains("active"); - } else { - return false; - } - }; - - // dispatch for htmlwidgets - // they use slideenter event to trigger resize - function fireSlideEnter() { - const event = window.document.createEvent("Event"); - event.initEvent("slideenter", true, true); - window.document.dispatchEvent(event); - } - - const tabs = window.document.querySelectorAll('a[data-bs-toggle="tab"]'); - tabs.forEach((tab) => { - tab.addEventListener("shown.bs.tab", fireSlideEnter); - }); - - // dispatch for shiny - // they use BS shown and hidden events to trigger rendering - function distpatchShinyEvents(previous, current) { - if (window.jQuery) { - if (previous) { - window.jQuery(previous).trigger("hidden"); - } - if (current) { - window.jQuery(current).trigger("shown"); - } - } - } - - // tabby.js listener: Trigger event for htmlwidget and shiny - document.addEventListener( - "tabby", - function (event) { - fireSlideEnter(); - distpatchShinyEvents(event.detail.previousTab, event.detail.tab); - }, - false - ); - - // Track scrolling and mark TOC links as active - // get table of contents and sidebar (bail if we don't have at least one) - const tocLinks = tocEl - ? [...tocEl.querySelectorAll("a[data-scroll-target]")] - : []; - const makeActive = (link) => tocLinks[link].classList.add("active"); - const removeActive = (link) => tocLinks[link].classList.remove("active"); - const removeAllActive = () => - [...Array(tocLinks.length).keys()].forEach((link) => removeActive(link)); - - // activate the anchor for a section associated with this TOC entry - tocLinks.forEach((link) => { - link.addEventListener("click", () => { - if (link.href.indexOf("#") !== -1) { - const anchor = link.href.split("#")[1]; - const heading = window.document.querySelector( - `[data-anchor-id="${anchor}"]` - ); - if (heading) { - // Add the class - heading.classList.add("reveal-anchorjs-link"); - - // function to show the anchor - const handleMouseout = () => { - heading.classList.remove("reveal-anchorjs-link"); - heading.removeEventListener("mouseout", handleMouseout); - }; - - // add a function to clear the anchor when the user mouses out of it - heading.addEventListener("mouseout", handleMouseout); - } - } - }); - }); - - const sections = tocLinks.map((link) => { - const target = link.getAttribute("data-scroll-target"); - if (target.startsWith("#")) { - return window.document.getElementById(decodeURI(`${target.slice(1)}`)); - } else { - return window.document.querySelector(decodeURI(`${target}`)); - } - }); - - const sectionMargin = 200; - let currentActive = 0; - // track whether we've initialized state the first time - let init = false; - - const updateActiveLink = () => { - // The index from bottom to top (e.g. reversed list) - let sectionIndex = -1; - if ( - window.innerHeight + window.pageYOffset >= - window.document.body.offsetHeight - ) { - // This is the no-scroll case where last section should be the active one - sectionIndex = 0; - } else { - // This finds the last section visible on screen that should be made active - sectionIndex = [...sections].reverse().findIndex((section) => { - if (section) { - return window.pageYOffset >= section.offsetTop - sectionMargin; - } else { - return false; - } - }); - } - if (sectionIndex > -1) { - const current = sections.length - sectionIndex - 1; - if (current !== currentActive) { - removeAllActive(); - currentActive = current; - makeActive(current); - if (init) { - window.dispatchEvent(sectionChanged); - } - init = true; - } - } - }; - - const inHiddenRegion = (top, bottom, hiddenRegions) => { - for (const region of hiddenRegions) { - if (top <= region.bottom && bottom >= region.top) { - return true; - } - } - return false; - }; - - const categorySelector = "header.quarto-title-block .quarto-category"; - const activateCategories = (href) => { - // Find any categories - // Surround them with a link pointing back to: - // #category=Authoring - try { - const categoryEls = window.document.querySelectorAll(categorySelector); - for (const categoryEl of categoryEls) { - const categoryText = categoryEl.textContent; - if (categoryText) { - const link = `${href}#category=${encodeURIComponent(categoryText)}`; - const linkEl = window.document.createElement("a"); - linkEl.setAttribute("href", link); - for (const child of categoryEl.childNodes) { - linkEl.append(child); - } - categoryEl.appendChild(linkEl); - } - } - } catch { - // Ignore errors - } - }; - function hasTitleCategories() { - return window.document.querySelector(categorySelector) !== null; - } - - function offsetRelativeUrl(url) { - const offset = getMeta("quarto:offset"); - return offset ? offset + url : url; - } - - function offsetAbsoluteUrl(url) { - const offset = getMeta("quarto:offset"); - const baseUrl = new URL(offset, window.location); - - const projRelativeUrl = url.replace(baseUrl, ""); - if (projRelativeUrl.startsWith("/")) { - return projRelativeUrl; - } else { - return "/" + projRelativeUrl; - } - } - - // read a meta tag value - function getMeta(metaName) { - const metas = window.document.getElementsByTagName("meta"); - for (let i = 0; i < metas.length; i++) { - if (metas[i].getAttribute("name") === metaName) { - return metas[i].getAttribute("content"); - } - } - return ""; - } - - async function findAndActivateCategories() { - // Categories search with listing only use path without query - const currentPagePath = offsetAbsoluteUrl( - window.location.origin + window.location.pathname - ); - const response = await fetch(offsetRelativeUrl("listings.json")); - if (response.status == 200) { - return response.json().then(function (listingPaths) { - const listingHrefs = []; - for (const listingPath of listingPaths) { - const pathWithoutLeadingSlash = listingPath.listing.substring(1); - for (const item of listingPath.items) { - const encodedItem = encodeURI(item); - if ( - encodedItem === currentPagePath || - encodedItem === currentPagePath + "index.html" - ) { - // Resolve this path against the offset to be sure - // we already are using the correct path to the listing - // (this adjusts the listing urls to be rooted against - // whatever root the page is actually running against) - const relative = offsetRelativeUrl(pathWithoutLeadingSlash); - const baseUrl = window.location; - const resolvedPath = new URL(relative, baseUrl); - listingHrefs.push(resolvedPath.pathname); - break; - } - } - } - - // Look up the tree for a nearby linting and use that if we find one - const nearestListing = findNearestParentListing( - offsetAbsoluteUrl(window.location.pathname), - listingHrefs - ); - if (nearestListing) { - activateCategories(nearestListing); - } else { - // See if the referrer is a listing page for this item - const referredRelativePath = offsetAbsoluteUrl(document.referrer); - const referrerListing = listingHrefs.find((listingHref) => { - const isListingReferrer = - listingHref === referredRelativePath || - listingHref === referredRelativePath + "index.html"; - return isListingReferrer; - }); - - if (referrerListing) { - // Try to use the referrer if possible - activateCategories(referrerListing); - } else if (listingHrefs.length > 0) { - // Otherwise, just fall back to the first listing - activateCategories(listingHrefs[0]); - } - } - }); - } - } - if (hasTitleCategories()) { - findAndActivateCategories(); - } - - const findNearestParentListing = (href, listingHrefs) => { - if (!href || !listingHrefs) { - return undefined; - } - // Look up the tree for a nearby linting and use that if we find one - const relativeParts = href.substring(1).split("/"); - while (relativeParts.length > 0) { - const path = relativeParts.join("/"); - for (const listingHref of listingHrefs) { - if (listingHref.startsWith(path)) { - return listingHref; - } - } - relativeParts.pop(); - } - - return undefined; - }; - - const manageSidebarVisiblity = (el, placeholderDescriptor) => { - let isVisible = true; - let elRect; - - return (hiddenRegions) => { - if (el === null) { - return; - } - - // Find the last element of the TOC - const lastChildEl = el.lastElementChild; - - if (lastChildEl) { - // Converts the sidebar to a menu - const convertToMenu = () => { - for (const child of el.children) { - child.style.opacity = 0; - child.style.overflow = "hidden"; - child.style.pointerEvents = "none"; - } - - nexttick(() => { - const toggleContainer = window.document.createElement("div"); - toggleContainer.style.width = "100%"; - toggleContainer.classList.add("zindex-over-content"); - toggleContainer.classList.add("quarto-sidebar-toggle"); - toggleContainer.classList.add("headroom-target"); // Marks this to be managed by headeroom - toggleContainer.id = placeholderDescriptor.id; - toggleContainer.style.position = "fixed"; - - const toggleIcon = window.document.createElement("i"); - toggleIcon.classList.add("quarto-sidebar-toggle-icon"); - toggleIcon.classList.add("bi"); - toggleIcon.classList.add("bi-caret-down-fill"); - - const toggleTitle = window.document.createElement("div"); - const titleEl = window.document.body.querySelector( - placeholderDescriptor.titleSelector - ); - if (titleEl) { - toggleTitle.append( - titleEl.textContent || titleEl.innerText, - toggleIcon - ); - } - toggleTitle.classList.add("zindex-over-content"); - toggleTitle.classList.add("quarto-sidebar-toggle-title"); - toggleContainer.append(toggleTitle); - - const toggleContents = window.document.createElement("div"); - toggleContents.classList = el.classList; - toggleContents.classList.add("zindex-over-content"); - toggleContents.classList.add("quarto-sidebar-toggle-contents"); - for (const child of el.children) { - if (child.id === "toc-title") { - continue; - } - - const clone = child.cloneNode(true); - clone.style.opacity = 1; - clone.style.pointerEvents = null; - clone.style.display = null; - toggleContents.append(clone); - } - toggleContents.style.height = "0px"; - const positionToggle = () => { - // position the element (top left of parent, same width as parent) - if (!elRect) { - elRect = el.getBoundingClientRect(); - } - toggleContainer.style.left = `${elRect.left}px`; - toggleContainer.style.top = `${elRect.top}px`; - toggleContainer.style.width = `${elRect.width}px`; - }; - positionToggle(); - - toggleContainer.append(toggleContents); - el.parentElement.prepend(toggleContainer); - - // Process clicks - let tocShowing = false; - // Allow the caller to control whether this is dismissed - // when it is clicked (e.g. sidebar navigation supports - // opening and closing the nav tree, so don't dismiss on click) - const clickEl = placeholderDescriptor.dismissOnClick - ? toggleContainer - : toggleTitle; - - const closeToggle = () => { - if (tocShowing) { - toggleContainer.classList.remove("expanded"); - toggleContents.style.height = "0px"; - tocShowing = false; - } - }; - - // Get rid of any expanded toggle if the user scrolls - window.document.addEventListener( - "scroll", - throttle(() => { - closeToggle(); - }, 50) - ); - - // Handle positioning of the toggle - window.addEventListener( - "resize", - throttle(() => { - elRect = undefined; - positionToggle(); - }, 50) - ); - - window.addEventListener("quarto-hrChanged", () => { - elRect = undefined; - }); - - // Process the click - clickEl.onclick = () => { - if (!tocShowing) { - toggleContainer.classList.add("expanded"); - toggleContents.style.height = null; - tocShowing = true; - } else { - closeToggle(); - } - }; - }); - }; - - // Converts a sidebar from a menu back to a sidebar - const convertToSidebar = () => { - for (const child of el.children) { - child.style.opacity = 1; - child.style.overflow = null; - child.style.pointerEvents = null; - } - - const placeholderEl = window.document.getElementById( - placeholderDescriptor.id - ); - if (placeholderEl) { - placeholderEl.remove(); - } - - el.classList.remove("rollup"); - }; - - if (isReaderMode()) { - convertToMenu(); - isVisible = false; - } else { - // Find the top and bottom o the element that is being managed - const elTop = el.offsetTop; - const elBottom = - elTop + lastChildEl.offsetTop + lastChildEl.offsetHeight; - - if (!isVisible) { - // If the element is current not visible reveal if there are - // no conflicts with overlay regions - if (!inHiddenRegion(elTop, elBottom, hiddenRegions)) { - convertToSidebar(); - isVisible = true; - } - } else { - // If the element is visible, hide it if it conflicts with overlay regions - // and insert a placeholder toggle (or if we're in reader mode) - if (inHiddenRegion(elTop, elBottom, hiddenRegions)) { - convertToMenu(); - isVisible = false; - } - } - } - } - }; - }; - - const tabEls = document.querySelectorAll('a[data-bs-toggle="tab"]'); - for (const tabEl of tabEls) { - const id = tabEl.getAttribute("data-bs-target"); - if (id) { - const columnEl = document.querySelector( - `${id} .column-margin, .tabset-margin-content` - ); - if (columnEl) - tabEl.addEventListener("shown.bs.tab", function (event) { - const el = event.srcElement; - if (el) { - const visibleCls = `${el.id}-margin-content`; - // walk up until we find a parent tabset - let panelTabsetEl = el.parentElement; - while (panelTabsetEl) { - if (panelTabsetEl.classList.contains("panel-tabset")) { - break; - } - panelTabsetEl = panelTabsetEl.parentElement; - } - - if (panelTabsetEl) { - const prevSib = panelTabsetEl.previousElementSibling; - if ( - prevSib && - prevSib.classList.contains("tabset-margin-container") - ) { - const childNodes = prevSib.querySelectorAll( - ".tabset-margin-content" - ); - for (const childEl of childNodes) { - if (childEl.classList.contains(visibleCls)) { - childEl.classList.remove("collapse"); - } else { - childEl.classList.add("collapse"); - } - } - } - } - } - - layoutMarginEls(); - }); - } - } - - // Manage the visibility of the toc and the sidebar - const marginScrollVisibility = manageSidebarVisiblity(marginSidebarEl, { - id: "quarto-toc-toggle", - titleSelector: "#toc-title", - dismissOnClick: true, - }); - const sidebarScrollVisiblity = manageSidebarVisiblity(sidebarEl, { - id: "quarto-sidebarnav-toggle", - titleSelector: ".title", - dismissOnClick: false, - }); - let tocLeftScrollVisibility; - if (leftTocEl) { - tocLeftScrollVisibility = manageSidebarVisiblity(leftTocEl, { - id: "quarto-lefttoc-toggle", - titleSelector: "#toc-title", - dismissOnClick: true, - }); - } - - // Find the first element that uses formatting in special columns - const conflictingEls = window.document.body.querySelectorAll( - '[class^="column-"], [class*=" column-"], aside, [class*="margin-caption"], [class*=" margin-caption"], [class*="margin-ref"], [class*=" margin-ref"]' - ); - - // Filter all the possibly conflicting elements into ones - // the do conflict on the left or ride side - const arrConflictingEls = Array.from(conflictingEls); - const leftSideConflictEls = arrConflictingEls.filter((el) => { - if (el.tagName === "ASIDE") { - return false; - } - return Array.from(el.classList).find((className) => { - return ( - className !== "column-body" && - className.startsWith("column-") && - !className.endsWith("right") && - !className.endsWith("container") && - className !== "column-margin" - ); - }); - }); - const rightSideConflictEls = arrConflictingEls.filter((el) => { - if (el.tagName === "ASIDE") { - return true; - } - - const hasMarginCaption = Array.from(el.classList).find((className) => { - return className == "margin-caption"; - }); - if (hasMarginCaption) { - return true; - } - - return Array.from(el.classList).find((className) => { - return ( - className !== "column-body" && - !className.endsWith("container") && - className.startsWith("column-") && - !className.endsWith("left") - ); - }); - }); - - const kOverlapPaddingSize = 10; - function toRegions(els) { - return els.map((el) => { - const boundRect = el.getBoundingClientRect(); - const top = - boundRect.top + - document.documentElement.scrollTop - - kOverlapPaddingSize; - return { - top, - bottom: top + el.scrollHeight + 2 * kOverlapPaddingSize, - }; - }); - } - - let hasObserved = false; - const visibleItemObserver = (els) => { - let visibleElements = [...els]; - const intersectionObserver = new IntersectionObserver( - (entries, _observer) => { - entries.forEach((entry) => { - if (entry.isIntersecting) { - if (visibleElements.indexOf(entry.target) === -1) { - visibleElements.push(entry.target); - } - } else { - visibleElements = visibleElements.filter((visibleEntry) => { - return visibleEntry !== entry; - }); - } - }); - - if (!hasObserved) { - hideOverlappedSidebars(); - } - hasObserved = true; - }, - {} - ); - els.forEach((el) => { - intersectionObserver.observe(el); - }); - - return { - getVisibleEntries: () => { - return visibleElements; - }, - }; - }; - - const rightElementObserver = visibleItemObserver(rightSideConflictEls); - const leftElementObserver = visibleItemObserver(leftSideConflictEls); - - const hideOverlappedSidebars = () => { - marginScrollVisibility(toRegions(rightElementObserver.getVisibleEntries())); - sidebarScrollVisiblity(toRegions(leftElementObserver.getVisibleEntries())); - if (tocLeftScrollVisibility) { - tocLeftScrollVisibility( - toRegions(leftElementObserver.getVisibleEntries()) - ); - } - }; - - window.quartoToggleReader = () => { - // Applies a slow class (or removes it) - // to update the transition speed - const slowTransition = (slow) => { - const manageTransition = (id, slow) => { - const el = document.getElementById(id); - if (el) { - if (slow) { - el.classList.add("slow"); - } else { - el.classList.remove("slow"); - } - } - }; - - manageTransition("TOC", slow); - manageTransition("quarto-sidebar", slow); - }; - const readerMode = !isReaderMode(); - setReaderModeValue(readerMode); - - // If we're entering reader mode, slow the transition - if (readerMode) { - slowTransition(readerMode); - } - highlightReaderToggle(readerMode); - hideOverlappedSidebars(); - - // If we're exiting reader mode, restore the non-slow transition - if (!readerMode) { - slowTransition(!readerMode); - } - }; - - const highlightReaderToggle = (readerMode) => { - const els = document.querySelectorAll(".quarto-reader-toggle"); - if (els) { - els.forEach((el) => { - if (readerMode) { - el.classList.add("reader"); - } else { - el.classList.remove("reader"); - } - }); - } - }; - - const setReaderModeValue = (val) => { - if (window.location.protocol !== "file:") { - window.localStorage.setItem("quarto-reader-mode", val); - } else { - localReaderMode = val; - } - }; - - const isReaderMode = () => { - if (window.location.protocol !== "file:") { - return window.localStorage.getItem("quarto-reader-mode") === "true"; - } else { - return localReaderMode; - } - }; - let localReaderMode = null; - - const tocOpenDepthStr = tocEl?.getAttribute("data-toc-expanded"); - const tocOpenDepth = tocOpenDepthStr ? Number(tocOpenDepthStr) : 1; - - // Walk the TOC and collapse/expand nodes - // Nodes are expanded if: - // - they are top level - // - they have children that are 'active' links - // - they are directly below an link that is 'active' - const walk = (el, depth) => { - // Tick depth when we enter a UL - if (el.tagName === "UL") { - depth = depth + 1; - } - - // It this is active link - let isActiveNode = false; - if (el.tagName === "A" && el.classList.contains("active")) { - isActiveNode = true; - } - - // See if there is an active child to this element - let hasActiveChild = false; - for (const child of el.children) { - hasActiveChild = walk(child, depth) || hasActiveChild; - } - - // Process the collapse state if this is an UL - if (el.tagName === "UL") { - if (tocOpenDepth === -1 && depth > 1) { - // toc-expand: false - el.classList.add("collapse"); - } else if ( - depth <= tocOpenDepth || - hasActiveChild || - prevSiblingIsActiveLink(el) - ) { - el.classList.remove("collapse"); - } else { - el.classList.add("collapse"); - } - - // untick depth when we leave a UL - depth = depth - 1; - } - return hasActiveChild || isActiveNode; - }; - - // walk the TOC and expand / collapse any items that should be shown - if (tocEl) { - updateActiveLink(); - walk(tocEl, 0); - } - - // Throttle the scroll event and walk peridiocally - window.document.addEventListener( - "scroll", - throttle(() => { - if (tocEl) { - updateActiveLink(); - walk(tocEl, 0); - } - if (!isReaderMode()) { - hideOverlappedSidebars(); - } - }, 5) - ); - window.addEventListener( - "resize", - throttle(() => { - if (tocEl) { - updateActiveLink(); - walk(tocEl, 0); - } - if (!isReaderMode()) { - hideOverlappedSidebars(); - } - }, 10) - ); - hideOverlappedSidebars(); - highlightReaderToggle(isReaderMode()); -}); - -tabsets.init(); -axe.init(); - -function throttle(func, wait) { - let waiting = false; - return function () { - if (!waiting) { - func.apply(this, arguments); - waiting = true; - setTimeout(function () { - waiting = false; - }, wait); - } - }; -} - -function nexttick(func) { - return setTimeout(func, 0); -} diff --git a/docs/docs/site_libs/quarto-html/tabsets/tabsets.js b/docs/docs/site_libs/quarto-html/tabsets/tabsets.js deleted file mode 100644 index 51345d0..0000000 --- a/docs/docs/site_libs/quarto-html/tabsets/tabsets.js +++ /dev/null @@ -1,95 +0,0 @@ -// grouped tabsets - -export function init() { - window.addEventListener("pageshow", (_event) => { - function getTabSettings() { - const data = localStorage.getItem("quarto-persistent-tabsets-data"); - if (!data) { - localStorage.setItem("quarto-persistent-tabsets-data", "{}"); - return {}; - } - if (data) { - return JSON.parse(data); - } - } - - function setTabSettings(data) { - localStorage.setItem( - "quarto-persistent-tabsets-data", - JSON.stringify(data) - ); - } - - function setTabState(groupName, groupValue) { - const data = getTabSettings(); - data[groupName] = groupValue; - setTabSettings(data); - } - - function toggleTab(tab, active) { - const tabPanelId = tab.getAttribute("aria-controls"); - const tabPanel = document.getElementById(tabPanelId); - if (active) { - tab.classList.add("active"); - tabPanel.classList.add("active"); - } else { - tab.classList.remove("active"); - tabPanel.classList.remove("active"); - } - } - - function toggleAll(selectedGroup, selectorsToSync) { - for (const [thisGroup, tabs] of Object.entries(selectorsToSync)) { - const active = selectedGroup === thisGroup; - for (const tab of tabs) { - toggleTab(tab, active); - } - } - } - - function findSelectorsToSyncByLanguage() { - const result = {}; - const tabs = Array.from( - document.querySelectorAll(`div[data-group] a[id^='tabset-']`) - ); - for (const item of tabs) { - const div = item.parentElement.parentElement.parentElement; - const group = div.getAttribute("data-group"); - if (!result[group]) { - result[group] = {}; - } - const selectorsToSync = result[group]; - const value = item.innerHTML; - if (!selectorsToSync[value]) { - selectorsToSync[value] = []; - } - selectorsToSync[value].push(item); - } - return result; - } - - function setupSelectorSync() { - const selectorsToSync = findSelectorsToSyncByLanguage(); - Object.entries(selectorsToSync).forEach(([group, tabSetsByValue]) => { - Object.entries(tabSetsByValue).forEach(([value, items]) => { - items.forEach((item) => { - item.addEventListener("click", (_event) => { - setTabState(group, value); - toggleAll(value, selectorsToSync[group]); - }); - }); - }); - }); - return selectorsToSync; - } - - const selectorsToSync = setupSelectorSync(); - for (const [group, selectedName] of Object.entries(getTabSettings())) { - const selectors = selectorsToSync[group]; - // it's possible that stale state gives us empty selections, so we explicitly check here. - if (selectors) { - toggleAll(selectedName, selectors); - } - } - }); -} diff --git a/docs/docs/site_libs/quarto-html/tippy.css b/docs/docs/site_libs/quarto-html/tippy.css deleted file mode 100644 index e6ae635..0000000 --- a/docs/docs/site_libs/quarto-html/tippy.css +++ /dev/null @@ -1 +0,0 @@ -.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;white-space:normal;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:"";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1} \ No newline at end of file diff --git a/docs/docs/site_libs/quarto-html/tippy.umd.min.js b/docs/docs/site_libs/quarto-html/tippy.umd.min.js deleted file mode 100644 index ca292be..0000000 --- a/docs/docs/site_libs/quarto-html/tippy.umd.min.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("@popperjs/core")):"function"==typeof define&&define.amd?define(["@popperjs/core"],t):(e=e||self).tippy=t(e.Popper)}(this,(function(e){"use strict";var t={passive:!0,capture:!0},n=function(){return document.body};function r(e,t,n){if(Array.isArray(e)){var r=e[t];return null==r?Array.isArray(n)?n[t]:n:r}return e}function o(e,t){var n={}.toString.call(e);return 0===n.indexOf("[object")&&n.indexOf(t+"]")>-1}function i(e,t){return"function"==typeof e?e.apply(void 0,t):e}function a(e,t){return 0===t?e:function(r){clearTimeout(n),n=setTimeout((function(){e(r)}),t)};var n}function s(e,t){var n=Object.assign({},e);return t.forEach((function(e){delete n[e]})),n}function u(e){return[].concat(e)}function c(e,t){-1===e.indexOf(t)&&e.push(t)}function p(e){return e.split("-")[0]}function f(e){return[].slice.call(e)}function l(e){return Object.keys(e).reduce((function(t,n){return void 0!==e[n]&&(t[n]=e[n]),t}),{})}function d(){return document.createElement("div")}function v(e){return["Element","Fragment"].some((function(t){return o(e,t)}))}function m(e){return o(e,"MouseEvent")}function g(e){return!(!e||!e._tippy||e._tippy.reference!==e)}function h(e){return v(e)?[e]:function(e){return o(e,"NodeList")}(e)?f(e):Array.isArray(e)?e:f(document.querySelectorAll(e))}function b(e,t){e.forEach((function(e){e&&(e.style.transitionDuration=t+"ms")}))}function y(e,t){e.forEach((function(e){e&&e.setAttribute("data-state",t)}))}function w(e){var t,n=u(e)[0];return null!=n&&null!=(t=n.ownerDocument)&&t.body?n.ownerDocument:document}function E(e,t,n){var r=t+"EventListener";["transitionend","webkitTransitionEnd"].forEach((function(t){e[r](t,n)}))}function O(e,t){for(var n=t;n;){var r;if(e.contains(n))return!0;n=null==n.getRootNode||null==(r=n.getRootNode())?void 0:r.host}return!1}var x={isTouch:!1},C=0;function T(){x.isTouch||(x.isTouch=!0,window.performance&&document.addEventListener("mousemove",A))}function A(){var e=performance.now();e-C<20&&(x.isTouch=!1,document.removeEventListener("mousemove",A)),C=e}function L(){var e=document.activeElement;if(g(e)){var t=e._tippy;e.blur&&!t.state.isVisible&&e.blur()}}var D=!!("undefined"!=typeof window&&"undefined"!=typeof document)&&!!window.msCrypto,R=Object.assign({appendTo:n,aria:{content:"auto",expanded:"auto"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:"",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:"top",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:"mouseenter focus",triggerTarget:null},{animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},{allowHTML:!1,animation:"fade",arrow:!0,content:"",inertia:!1,maxWidth:350,role:"tooltip",theme:"",zIndex:9999}),k=Object.keys(R);function P(e){var t=(e.plugins||[]).reduce((function(t,n){var r,o=n.name,i=n.defaultValue;o&&(t[o]=void 0!==e[o]?e[o]:null!=(r=R[o])?r:i);return t}),{});return Object.assign({},e,t)}function j(e,t){var n=Object.assign({},t,{content:i(t.content,[e])},t.ignoreAttributes?{}:function(e,t){return(t?Object.keys(P(Object.assign({},R,{plugins:t}))):k).reduce((function(t,n){var r=(e.getAttribute("data-tippy-"+n)||"").trim();if(!r)return t;if("content"===n)t[n]=r;else try{t[n]=JSON.parse(r)}catch(e){t[n]=r}return t}),{})}(e,t.plugins));return n.aria=Object.assign({},R.aria,n.aria),n.aria={expanded:"auto"===n.aria.expanded?t.interactive:n.aria.expanded,content:"auto"===n.aria.content?t.interactive?null:"describedby":n.aria.content},n}function M(e,t){e.innerHTML=t}function V(e){var t=d();return!0===e?t.className="tippy-arrow":(t.className="tippy-svg-arrow",v(e)?t.appendChild(e):M(t,e)),t}function I(e,t){v(t.content)?(M(e,""),e.appendChild(t.content)):"function"!=typeof t.content&&(t.allowHTML?M(e,t.content):e.textContent=t.content)}function S(e){var t=e.firstElementChild,n=f(t.children);return{box:t,content:n.find((function(e){return e.classList.contains("tippy-content")})),arrow:n.find((function(e){return e.classList.contains("tippy-arrow")||e.classList.contains("tippy-svg-arrow")})),backdrop:n.find((function(e){return e.classList.contains("tippy-backdrop")}))}}function N(e){var t=d(),n=d();n.className="tippy-box",n.setAttribute("data-state","hidden"),n.setAttribute("tabindex","-1");var r=d();function o(n,r){var o=S(t),i=o.box,a=o.content,s=o.arrow;r.theme?i.setAttribute("data-theme",r.theme):i.removeAttribute("data-theme"),"string"==typeof r.animation?i.setAttribute("data-animation",r.animation):i.removeAttribute("data-animation"),r.inertia?i.setAttribute("data-inertia",""):i.removeAttribute("data-inertia"),i.style.maxWidth="number"==typeof r.maxWidth?r.maxWidth+"px":r.maxWidth,r.role?i.setAttribute("role",r.role):i.removeAttribute("role"),n.content===r.content&&n.allowHTML===r.allowHTML||I(a,e.props),r.arrow?s?n.arrow!==r.arrow&&(i.removeChild(s),i.appendChild(V(r.arrow))):i.appendChild(V(r.arrow)):s&&i.removeChild(s)}return r.className="tippy-content",r.setAttribute("data-state","hidden"),I(r,e.props),t.appendChild(n),n.appendChild(r),o(e.props,e.props),{popper:t,onUpdate:o}}N.$$tippy=!0;var B=1,H=[],U=[];function _(o,s){var v,g,h,C,T,A,L,k,M=j(o,Object.assign({},R,P(l(s)))),V=!1,I=!1,N=!1,_=!1,F=[],W=a(we,M.interactiveDebounce),X=B++,Y=(k=M.plugins).filter((function(e,t){return k.indexOf(e)===t})),$={id:X,reference:o,popper:d(),popperInstance:null,props:M,state:{isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},plugins:Y,clearDelayTimeouts:function(){clearTimeout(v),clearTimeout(g),cancelAnimationFrame(h)},setProps:function(e){if($.state.isDestroyed)return;ae("onBeforeUpdate",[$,e]),be();var t=$.props,n=j(o,Object.assign({},t,l(e),{ignoreAttributes:!0}));$.props=n,he(),t.interactiveDebounce!==n.interactiveDebounce&&(ce(),W=a(we,n.interactiveDebounce));t.triggerTarget&&!n.triggerTarget?u(t.triggerTarget).forEach((function(e){e.removeAttribute("aria-expanded")})):n.triggerTarget&&o.removeAttribute("aria-expanded");ue(),ie(),J&&J(t,n);$.popperInstance&&(Ce(),Ae().forEach((function(e){requestAnimationFrame(e._tippy.popperInstance.forceUpdate)})));ae("onAfterUpdate",[$,e])},setContent:function(e){$.setProps({content:e})},show:function(){var e=$.state.isVisible,t=$.state.isDestroyed,o=!$.state.isEnabled,a=x.isTouch&&!$.props.touch,s=r($.props.duration,0,R.duration);if(e||t||o||a)return;if(te().hasAttribute("disabled"))return;if(ae("onShow",[$],!1),!1===$.props.onShow($))return;$.state.isVisible=!0,ee()&&(z.style.visibility="visible");ie(),de(),$.state.isMounted||(z.style.transition="none");if(ee()){var u=re(),p=u.box,f=u.content;b([p,f],0)}A=function(){var e;if($.state.isVisible&&!_){if(_=!0,z.offsetHeight,z.style.transition=$.props.moveTransition,ee()&&$.props.animation){var t=re(),n=t.box,r=t.content;b([n,r],s),y([n,r],"visible")}se(),ue(),c(U,$),null==(e=$.popperInstance)||e.forceUpdate(),ae("onMount",[$]),$.props.animation&&ee()&&function(e,t){me(e,t)}(s,(function(){$.state.isShown=!0,ae("onShown",[$])}))}},function(){var e,t=$.props.appendTo,r=te();e=$.props.interactive&&t===n||"parent"===t?r.parentNode:i(t,[r]);e.contains(z)||e.appendChild(z);$.state.isMounted=!0,Ce()}()},hide:function(){var e=!$.state.isVisible,t=$.state.isDestroyed,n=!$.state.isEnabled,o=r($.props.duration,1,R.duration);if(e||t||n)return;if(ae("onHide",[$],!1),!1===$.props.onHide($))return;$.state.isVisible=!1,$.state.isShown=!1,_=!1,V=!1,ee()&&(z.style.visibility="hidden");if(ce(),ve(),ie(!0),ee()){var i=re(),a=i.box,s=i.content;$.props.animation&&(b([a,s],o),y([a,s],"hidden"))}se(),ue(),$.props.animation?ee()&&function(e,t){me(e,(function(){!$.state.isVisible&&z.parentNode&&z.parentNode.contains(z)&&t()}))}(o,$.unmount):$.unmount()},hideWithInteractivity:function(e){ne().addEventListener("mousemove",W),c(H,W),W(e)},enable:function(){$.state.isEnabled=!0},disable:function(){$.hide(),$.state.isEnabled=!1},unmount:function(){$.state.isVisible&&$.hide();if(!$.state.isMounted)return;Te(),Ae().forEach((function(e){e._tippy.unmount()})),z.parentNode&&z.parentNode.removeChild(z);U=U.filter((function(e){return e!==$})),$.state.isMounted=!1,ae("onHidden",[$])},destroy:function(){if($.state.isDestroyed)return;$.clearDelayTimeouts(),$.unmount(),be(),delete o._tippy,$.state.isDestroyed=!0,ae("onDestroy",[$])}};if(!M.render)return $;var q=M.render($),z=q.popper,J=q.onUpdate;z.setAttribute("data-tippy-root",""),z.id="tippy-"+$.id,$.popper=z,o._tippy=$,z._tippy=$;var G=Y.map((function(e){return e.fn($)})),K=o.hasAttribute("aria-expanded");return he(),ue(),ie(),ae("onCreate",[$]),M.showOnCreate&&Le(),z.addEventListener("mouseenter",(function(){$.props.interactive&&$.state.isVisible&&$.clearDelayTimeouts()})),z.addEventListener("mouseleave",(function(){$.props.interactive&&$.props.trigger.indexOf("mouseenter")>=0&&ne().addEventListener("mousemove",W)})),$;function Q(){var e=$.props.touch;return Array.isArray(e)?e:[e,0]}function Z(){return"hold"===Q()[0]}function ee(){var e;return!(null==(e=$.props.render)||!e.$$tippy)}function te(){return L||o}function ne(){var e=te().parentNode;return e?w(e):document}function re(){return S(z)}function oe(e){return $.state.isMounted&&!$.state.isVisible||x.isTouch||C&&"focus"===C.type?0:r($.props.delay,e?0:1,R.delay)}function ie(e){void 0===e&&(e=!1),z.style.pointerEvents=$.props.interactive&&!e?"":"none",z.style.zIndex=""+$.props.zIndex}function ae(e,t,n){var r;(void 0===n&&(n=!0),G.forEach((function(n){n[e]&&n[e].apply(n,t)})),n)&&(r=$.props)[e].apply(r,t)}function se(){var e=$.props.aria;if(e.content){var t="aria-"+e.content,n=z.id;u($.props.triggerTarget||o).forEach((function(e){var r=e.getAttribute(t);if($.state.isVisible)e.setAttribute(t,r?r+" "+n:n);else{var o=r&&r.replace(n,"").trim();o?e.setAttribute(t,o):e.removeAttribute(t)}}))}}function ue(){!K&&$.props.aria.expanded&&u($.props.triggerTarget||o).forEach((function(e){$.props.interactive?e.setAttribute("aria-expanded",$.state.isVisible&&e===te()?"true":"false"):e.removeAttribute("aria-expanded")}))}function ce(){ne().removeEventListener("mousemove",W),H=H.filter((function(e){return e!==W}))}function pe(e){if(!x.isTouch||!N&&"mousedown"!==e.type){var t=e.composedPath&&e.composedPath()[0]||e.target;if(!$.props.interactive||!O(z,t)){if(u($.props.triggerTarget||o).some((function(e){return O(e,t)}))){if(x.isTouch)return;if($.state.isVisible&&$.props.trigger.indexOf("click")>=0)return}else ae("onClickOutside",[$,e]);!0===$.props.hideOnClick&&($.clearDelayTimeouts(),$.hide(),I=!0,setTimeout((function(){I=!1})),$.state.isMounted||ve())}}}function fe(){N=!0}function le(){N=!1}function de(){var e=ne();e.addEventListener("mousedown",pe,!0),e.addEventListener("touchend",pe,t),e.addEventListener("touchstart",le,t),e.addEventListener("touchmove",fe,t)}function ve(){var e=ne();e.removeEventListener("mousedown",pe,!0),e.removeEventListener("touchend",pe,t),e.removeEventListener("touchstart",le,t),e.removeEventListener("touchmove",fe,t)}function me(e,t){var n=re().box;function r(e){e.target===n&&(E(n,"remove",r),t())}if(0===e)return t();E(n,"remove",T),E(n,"add",r),T=r}function ge(e,t,n){void 0===n&&(n=!1),u($.props.triggerTarget||o).forEach((function(r){r.addEventListener(e,t,n),F.push({node:r,eventType:e,handler:t,options:n})}))}function he(){var e;Z()&&(ge("touchstart",ye,{passive:!0}),ge("touchend",Ee,{passive:!0})),(e=$.props.trigger,e.split(/\s+/).filter(Boolean)).forEach((function(e){if("manual"!==e)switch(ge(e,ye),e){case"mouseenter":ge("mouseleave",Ee);break;case"focus":ge(D?"focusout":"blur",Oe);break;case"focusin":ge("focusout",Oe)}}))}function be(){F.forEach((function(e){var t=e.node,n=e.eventType,r=e.handler,o=e.options;t.removeEventListener(n,r,o)})),F=[]}function ye(e){var t,n=!1;if($.state.isEnabled&&!xe(e)&&!I){var r="focus"===(null==(t=C)?void 0:t.type);C=e,L=e.currentTarget,ue(),!$.state.isVisible&&m(e)&&H.forEach((function(t){return t(e)})),"click"===e.type&&($.props.trigger.indexOf("mouseenter")<0||V)&&!1!==$.props.hideOnClick&&$.state.isVisible?n=!0:Le(e),"click"===e.type&&(V=!n),n&&!r&&De(e)}}function we(e){var t=e.target,n=te().contains(t)||z.contains(t);"mousemove"===e.type&&n||function(e,t){var n=t.clientX,r=t.clientY;return e.every((function(e){var t=e.popperRect,o=e.popperState,i=e.props.interactiveBorder,a=p(o.placement),s=o.modifiersData.offset;if(!s)return!0;var u="bottom"===a?s.top.y:0,c="top"===a?s.bottom.y:0,f="right"===a?s.left.x:0,l="left"===a?s.right.x:0,d=t.top-r+u>i,v=r-t.bottom-c>i,m=t.left-n+f>i,g=n-t.right-l>i;return d||v||m||g}))}(Ae().concat(z).map((function(e){var t,n=null==(t=e._tippy.popperInstance)?void 0:t.state;return n?{popperRect:e.getBoundingClientRect(),popperState:n,props:M}:null})).filter(Boolean),e)&&(ce(),De(e))}function Ee(e){xe(e)||$.props.trigger.indexOf("click")>=0&&V||($.props.interactive?$.hideWithInteractivity(e):De(e))}function Oe(e){$.props.trigger.indexOf("focusin")<0&&e.target!==te()||$.props.interactive&&e.relatedTarget&&z.contains(e.relatedTarget)||De(e)}function xe(e){return!!x.isTouch&&Z()!==e.type.indexOf("touch")>=0}function Ce(){Te();var t=$.props,n=t.popperOptions,r=t.placement,i=t.offset,a=t.getReferenceClientRect,s=t.moveTransition,u=ee()?S(z).arrow:null,c=a?{getBoundingClientRect:a,contextElement:a.contextElement||te()}:o,p=[{name:"offset",options:{offset:i}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5}},{name:"computeStyles",options:{adaptive:!s}},{name:"$$tippy",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:function(e){var t=e.state;if(ee()){var n=re().box;["placement","reference-hidden","escaped"].forEach((function(e){"placement"===e?n.setAttribute("data-placement",t.placement):t.attributes.popper["data-popper-"+e]?n.setAttribute("data-"+e,""):n.removeAttribute("data-"+e)})),t.attributes.popper={}}}}];ee()&&u&&p.push({name:"arrow",options:{element:u,padding:3}}),p.push.apply(p,(null==n?void 0:n.modifiers)||[]),$.popperInstance=e.createPopper(c,z,Object.assign({},n,{placement:r,onFirstUpdate:A,modifiers:p}))}function Te(){$.popperInstance&&($.popperInstance.destroy(),$.popperInstance=null)}function Ae(){return f(z.querySelectorAll("[data-tippy-root]"))}function Le(e){$.clearDelayTimeouts(),e&&ae("onTrigger",[$,e]),de();var t=oe(!0),n=Q(),r=n[0],o=n[1];x.isTouch&&"hold"===r&&o&&(t=o),t?v=setTimeout((function(){$.show()}),t):$.show()}function De(e){if($.clearDelayTimeouts(),ae("onUntrigger",[$,e]),$.state.isVisible){if(!($.props.trigger.indexOf("mouseenter")>=0&&$.props.trigger.indexOf("click")>=0&&["mouseleave","mousemove"].indexOf(e.type)>=0&&V)){var t=oe(!1);t?g=setTimeout((function(){$.state.isVisible&&$.hide()}),t):h=requestAnimationFrame((function(){$.hide()}))}}else ve()}}function F(e,n){void 0===n&&(n={});var r=R.plugins.concat(n.plugins||[]);document.addEventListener("touchstart",T,t),window.addEventListener("blur",L);var o=Object.assign({},n,{plugins:r}),i=h(e).reduce((function(e,t){var n=t&&_(t,o);return n&&e.push(n),e}),[]);return v(e)?i[0]:i}F.defaultProps=R,F.setDefaultProps=function(e){Object.keys(e).forEach((function(t){R[t]=e[t]}))},F.currentInput=x;var W=Object.assign({},e.applyStyles,{effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow)}}),X={mouseover:"mouseenter",focusin:"focus",click:"click"};var Y={name:"animateFill",defaultValue:!1,fn:function(e){var t;if(null==(t=e.props.render)||!t.$$tippy)return{};var n=S(e.popper),r=n.box,o=n.content,i=e.props.animateFill?function(){var e=d();return e.className="tippy-backdrop",y([e],"hidden"),e}():null;return{onCreate:function(){i&&(r.insertBefore(i,r.firstElementChild),r.setAttribute("data-animatefill",""),r.style.overflow="hidden",e.setProps({arrow:!1,animation:"shift-away"}))},onMount:function(){if(i){var e=r.style.transitionDuration,t=Number(e.replace("ms",""));o.style.transitionDelay=Math.round(t/10)+"ms",i.style.transitionDuration=e,y([i],"visible")}},onShow:function(){i&&(i.style.transitionDuration="0ms")},onHide:function(){i&&y([i],"hidden")}}}};var $={clientX:0,clientY:0},q=[];function z(e){var t=e.clientX,n=e.clientY;$={clientX:t,clientY:n}}var J={name:"followCursor",defaultValue:!1,fn:function(e){var t=e.reference,n=w(e.props.triggerTarget||t),r=!1,o=!1,i=!0,a=e.props;function s(){return"initial"===e.props.followCursor&&e.state.isVisible}function u(){n.addEventListener("mousemove",f)}function c(){n.removeEventListener("mousemove",f)}function p(){r=!0,e.setProps({getReferenceClientRect:null}),r=!1}function f(n){var r=!n.target||t.contains(n.target),o=e.props.followCursor,i=n.clientX,a=n.clientY,s=t.getBoundingClientRect(),u=i-s.left,c=a-s.top;!r&&e.props.interactive||e.setProps({getReferenceClientRect:function(){var e=t.getBoundingClientRect(),n=i,r=a;"initial"===o&&(n=e.left+u,r=e.top+c);var s="horizontal"===o?e.top:r,p="vertical"===o?e.right:n,f="horizontal"===o?e.bottom:r,l="vertical"===o?e.left:n;return{width:p-l,height:f-s,top:s,right:p,bottom:f,left:l}}})}function l(){e.props.followCursor&&(q.push({instance:e,doc:n}),function(e){e.addEventListener("mousemove",z)}(n))}function d(){0===(q=q.filter((function(t){return t.instance!==e}))).filter((function(e){return e.doc===n})).length&&function(e){e.removeEventListener("mousemove",z)}(n)}return{onCreate:l,onDestroy:d,onBeforeUpdate:function(){a=e.props},onAfterUpdate:function(t,n){var i=n.followCursor;r||void 0!==i&&a.followCursor!==i&&(d(),i?(l(),!e.state.isMounted||o||s()||u()):(c(),p()))},onMount:function(){e.props.followCursor&&!o&&(i&&(f($),i=!1),s()||u())},onTrigger:function(e,t){m(t)&&($={clientX:t.clientX,clientY:t.clientY}),o="focus"===t.type},onHidden:function(){e.props.followCursor&&(p(),c(),i=!0)}}}};var G={name:"inlinePositioning",defaultValue:!1,fn:function(e){var t,n=e.reference;var r=-1,o=!1,i=[],a={name:"tippyInlinePositioning",enabled:!0,phase:"afterWrite",fn:function(o){var a=o.state;e.props.inlinePositioning&&(-1!==i.indexOf(a.placement)&&(i=[]),t!==a.placement&&-1===i.indexOf(a.placement)&&(i.push(a.placement),e.setProps({getReferenceClientRect:function(){return function(e){return function(e,t,n,r){if(n.length<2||null===e)return t;if(2===n.length&&r>=0&&n[0].left>n[1].right)return n[r]||t;switch(e){case"top":case"bottom":var o=n[0],i=n[n.length-1],a="top"===e,s=o.top,u=i.bottom,c=a?o.left:i.left,p=a?o.right:i.right;return{top:s,bottom:u,left:c,right:p,width:p-c,height:u-s};case"left":case"right":var f=Math.min.apply(Math,n.map((function(e){return e.left}))),l=Math.max.apply(Math,n.map((function(e){return e.right}))),d=n.filter((function(t){return"left"===e?t.left===f:t.right===l})),v=d[0].top,m=d[d.length-1].bottom;return{top:v,bottom:m,left:f,right:l,width:l-f,height:m-v};default:return t}}(p(e),n.getBoundingClientRect(),f(n.getClientRects()),r)}(a.placement)}})),t=a.placement)}};function s(){var t;o||(t=function(e,t){var n;return{popperOptions:Object.assign({},e.popperOptions,{modifiers:[].concat(((null==(n=e.popperOptions)?void 0:n.modifiers)||[]).filter((function(e){return e.name!==t.name})),[t])})}}(e.props,a),o=!0,e.setProps(t),o=!1)}return{onCreate:s,onAfterUpdate:s,onTrigger:function(t,n){if(m(n)){var o=f(e.reference.getClientRects()),i=o.find((function(e){return e.left-2<=n.clientX&&e.right+2>=n.clientX&&e.top-2<=n.clientY&&e.bottom+2>=n.clientY})),a=o.indexOf(i);r=a>-1?a:r}},onHidden:function(){r=-1}}}};var K={name:"sticky",defaultValue:!1,fn:function(e){var t=e.reference,n=e.popper;function r(t){return!0===e.props.sticky||e.props.sticky===t}var o=null,i=null;function a(){var s=r("reference")?(e.popperInstance?e.popperInstance.state.elements.reference:t).getBoundingClientRect():null,u=r("popper")?n.getBoundingClientRect():null;(s&&Q(o,s)||u&&Q(i,u))&&e.popperInstance&&e.popperInstance.update(),o=s,i=u,e.state.isMounted&&requestAnimationFrame(a)}return{onMount:function(){e.props.sticky&&a()}}}};function Q(e,t){return!e||!t||(e.top!==t.top||e.right!==t.right||e.bottom!==t.bottom||e.left!==t.left)}return F.setDefaultProps({plugins:[Y,J,G,K],render:N}),F.createSingleton=function(e,t){var n;void 0===t&&(t={});var r,o=e,i=[],a=[],c=t.overrides,p=[],f=!1;function l(){a=o.map((function(e){return u(e.props.triggerTarget||e.reference)})).reduce((function(e,t){return e.concat(t)}),[])}function v(){i=o.map((function(e){return e.reference}))}function m(e){o.forEach((function(t){e?t.enable():t.disable()}))}function g(e){return o.map((function(t){var n=t.setProps;return t.setProps=function(o){n(o),t.reference===r&&e.setProps(o)},function(){t.setProps=n}}))}function h(e,t){var n=a.indexOf(t);if(t!==r){r=t;var s=(c||[]).concat("content").reduce((function(e,t){return e[t]=o[n].props[t],e}),{});e.setProps(Object.assign({},s,{getReferenceClientRect:"function"==typeof s.getReferenceClientRect?s.getReferenceClientRect:function(){var e;return null==(e=i[n])?void 0:e.getBoundingClientRect()}}))}}m(!1),v(),l();var b={fn:function(){return{onDestroy:function(){m(!0)},onHidden:function(){r=null},onClickOutside:function(e){e.props.showOnCreate&&!f&&(f=!0,r=null)},onShow:function(e){e.props.showOnCreate&&!f&&(f=!0,h(e,i[0]))},onTrigger:function(e,t){h(e,t.currentTarget)}}}},y=F(d(),Object.assign({},s(t,["overrides"]),{plugins:[b].concat(t.plugins||[]),triggerTarget:a,popperOptions:Object.assign({},t.popperOptions,{modifiers:[].concat((null==(n=t.popperOptions)?void 0:n.modifiers)||[],[W])})})),w=y.show;y.show=function(e){if(w(),!r&&null==e)return h(y,i[0]);if(!r||null!=e){if("number"==typeof e)return i[e]&&h(y,i[e]);if(o.indexOf(e)>=0){var t=e.reference;return h(y,t)}return i.indexOf(e)>=0?h(y,e):void 0}},y.showNext=function(){var e=i[0];if(!r)return y.show(0);var t=i.indexOf(r);y.show(i[t+1]||e)},y.showPrevious=function(){var e=i[i.length-1];if(!r)return y.show(e);var t=i.indexOf(r),n=i[t-1]||e;y.show(n)};var E=y.setProps;return y.setProps=function(e){c=e.overrides||c,E(e)},y.setInstances=function(e){m(!0),p.forEach((function(e){return e()})),o=e,m(!1),v(),l(),p=g(y),y.setProps({triggerTarget:a})},p=g(y),y},F.delegate=function(e,n){var r=[],o=[],i=!1,a=n.target,c=s(n,["target"]),p=Object.assign({},c,{trigger:"manual",touch:!1}),f=Object.assign({touch:R.touch},c,{showOnCreate:!0}),l=F(e,p);function d(e){if(e.target&&!i){var t=e.target.closest(a);if(t){var r=t.getAttribute("data-tippy-trigger")||n.trigger||R.trigger;if(!t._tippy&&!("touchstart"===e.type&&"boolean"==typeof f.touch||"touchstart"!==e.type&&r.indexOf(X[e.type])<0)){var s=F(t,f);s&&(o=o.concat(s))}}}}function v(e,t,n,o){void 0===o&&(o=!1),e.addEventListener(t,n,o),r.push({node:e,eventType:t,handler:n,options:o})}return u(l).forEach((function(e){var n=e.destroy,a=e.enable,s=e.disable;e.destroy=function(e){void 0===e&&(e=!0),e&&o.forEach((function(e){e.destroy()})),o=[],r.forEach((function(e){var t=e.node,n=e.eventType,r=e.handler,o=e.options;t.removeEventListener(n,r,o)})),r=[],n()},e.enable=function(){a(),o.forEach((function(e){return e.enable()})),i=!1},e.disable=function(){s(),o.forEach((function(e){return e.disable()})),i=!0},function(e){var n=e.reference;v(n,"touchstart",d,t),v(n,"mouseover",d),v(n,"focusin",d),v(n,"click",d)}(e)})),l},F.hideAll=function(e){var t=void 0===e?{}:e,n=t.exclude,r=t.duration;U.forEach((function(e){var t=!1;if(n&&(t=g(n)?e.reference===n:e.popper===n.popper),!t){var o=e.props.duration;e.setProps({duration:r}),e.hide(),e.state.isDestroyed||e.setProps({duration:o})}}))},F.roundArrow='',F})); - diff --git a/docs/docs/site_libs/quarto-nav/headroom.min.js b/docs/docs/site_libs/quarto-nav/headroom.min.js deleted file mode 100644 index b08f1df..0000000 --- a/docs/docs/site_libs/quarto-nav/headroom.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * headroom.js v0.12.0 - Give your page some headroom. Hide your header until you need it - * Copyright (c) 2020 Nick Williams - http://wicky.nillia.ms/headroom.js - * License: MIT - */ - -!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(t=t||self).Headroom=n()}(this,function(){"use strict";function t(){return"undefined"!=typeof window}function d(t){return function(t){return t&&t.document&&function(t){return 9===t.nodeType}(t.document)}(t)?function(t){var n=t.document,o=n.body,s=n.documentElement;return{scrollHeight:function(){return Math.max(o.scrollHeight,s.scrollHeight,o.offsetHeight,s.offsetHeight,o.clientHeight,s.clientHeight)},height:function(){return t.innerHeight||s.clientHeight||o.clientHeight},scrollY:function(){return void 0!==t.pageYOffset?t.pageYOffset:(s||o.parentNode||o).scrollTop}}}(t):function(t){return{scrollHeight:function(){return Math.max(t.scrollHeight,t.offsetHeight,t.clientHeight)},height:function(){return Math.max(t.offsetHeight,t.clientHeight)},scrollY:function(){return t.scrollTop}}}(t)}function n(t,s,e){var n,o=function(){var n=!1;try{var t={get passive(){n=!0}};window.addEventListener("test",t,t),window.removeEventListener("test",t,t)}catch(t){n=!1}return n}(),i=!1,r=d(t),l=r.scrollY(),a={};function c(){var t=Math.round(r.scrollY()),n=r.height(),o=r.scrollHeight();a.scrollY=t,a.lastScrollY=l,a.direction=ls.tolerance[a.direction],e(a),l=t,i=!1}function h(){i||(i=!0,n=requestAnimationFrame(c))}var u=!!o&&{passive:!0,capture:!1};return t.addEventListener("scroll",h,u),c(),{destroy:function(){cancelAnimationFrame(n),t.removeEventListener("scroll",h,u)}}}function o(t){return t===Object(t)?t:{down:t,up:t}}function s(t,n){n=n||{},Object.assign(this,s.options,n),this.classes=Object.assign({},s.options.classes,n.classes),this.elem=t,this.tolerance=o(this.tolerance),this.offset=o(this.offset),this.initialised=!1,this.frozen=!1}return s.prototype={constructor:s,init:function(){return s.cutsTheMustard&&!this.initialised&&(this.addClass("initial"),this.initialised=!0,setTimeout(function(t){t.scrollTracker=n(t.scroller,{offset:t.offset,tolerance:t.tolerance},t.update.bind(t))},100,this)),this},destroy:function(){this.initialised=!1,Object.keys(this.classes).forEach(this.removeClass,this),this.scrollTracker.destroy()},unpin:function(){!this.hasClass("pinned")&&this.hasClass("unpinned")||(this.addClass("unpinned"),this.removeClass("pinned"),this.onUnpin&&this.onUnpin.call(this))},pin:function(){this.hasClass("unpinned")&&(this.addClass("pinned"),this.removeClass("unpinned"),this.onPin&&this.onPin.call(this))},freeze:function(){this.frozen=!0,this.addClass("frozen")},unfreeze:function(){this.frozen=!1,this.removeClass("frozen")},top:function(){this.hasClass("top")||(this.addClass("top"),this.removeClass("notTop"),this.onTop&&this.onTop.call(this))},notTop:function(){this.hasClass("notTop")||(this.addClass("notTop"),this.removeClass("top"),this.onNotTop&&this.onNotTop.call(this))},bottom:function(){this.hasClass("bottom")||(this.addClass("bottom"),this.removeClass("notBottom"),this.onBottom&&this.onBottom.call(this))},notBottom:function(){this.hasClass("notBottom")||(this.addClass("notBottom"),this.removeClass("bottom"),this.onNotBottom&&this.onNotBottom.call(this))},shouldUnpin:function(t){return"down"===t.direction&&!t.top&&t.toleranceExceeded},shouldPin:function(t){return"up"===t.direction&&t.toleranceExceeded||t.top},addClass:function(t){this.elem.classList.add.apply(this.elem.classList,this.classes[t].split(" "))},removeClass:function(t){this.elem.classList.remove.apply(this.elem.classList,this.classes[t].split(" "))},hasClass:function(t){return this.classes[t].split(" ").every(function(t){return this.classList.contains(t)},this.elem)},update:function(t){t.isOutOfBounds||!0!==this.frozen&&(t.top?this.top():this.notTop(),t.bottom?this.bottom():this.notBottom(),this.shouldUnpin(t)?this.unpin():this.shouldPin(t)&&this.pin())}},s.options={tolerance:{up:0,down:0},offset:0,scroller:t()?window:null,classes:{frozen:"headroom--frozen",pinned:"headroom--pinned",unpinned:"headroom--unpinned",top:"headroom--top",notTop:"headroom--not-top",bottom:"headroom--bottom",notBottom:"headroom--not-bottom",initial:"headroom"}},s.cutsTheMustard=!!(t()&&function(){}.bind&&"classList"in document.documentElement&&Object.assign&&Object.keys&&requestAnimationFrame),s}); diff --git a/docs/docs/site_libs/quarto-nav/quarto-nav.js b/docs/docs/site_libs/quarto-nav/quarto-nav.js deleted file mode 100644 index 38cc430..0000000 --- a/docs/docs/site_libs/quarto-nav/quarto-nav.js +++ /dev/null @@ -1,325 +0,0 @@ -const headroomChanged = new CustomEvent("quarto-hrChanged", { - detail: {}, - bubbles: true, - cancelable: false, - composed: false, -}); - -const announceDismiss = () => { - const annEl = window.document.getElementById("quarto-announcement"); - if (annEl) { - annEl.remove(); - - const annId = annEl.getAttribute("data-announcement-id"); - window.localStorage.setItem(`quarto-announce-${annId}`, "true"); - } -}; - -const announceRegister = () => { - const annEl = window.document.getElementById("quarto-announcement"); - if (annEl) { - const annId = annEl.getAttribute("data-announcement-id"); - const isDismissed = - window.localStorage.getItem(`quarto-announce-${annId}`) || false; - if (isDismissed) { - announceDismiss(); - return; - } else { - annEl.classList.remove("hidden"); - } - - const actionEl = annEl.querySelector(".quarto-announcement-action"); - if (actionEl) { - actionEl.addEventListener("click", function (e) { - e.preventDefault(); - // Hide the bar immediately - announceDismiss(); - }); - } - } -}; - -window.document.addEventListener("DOMContentLoaded", function () { - let init = false; - - announceRegister(); - - // Manage the back to top button, if one is present. - let lastScrollTop = window.pageYOffset || document.documentElement.scrollTop; - const scrollDownBuffer = 5; - const scrollUpBuffer = 35; - const btn = document.getElementById("quarto-back-to-top"); - const hideBackToTop = () => { - btn.style.display = "none"; - }; - const showBackToTop = () => { - btn.style.display = "inline-block"; - }; - if (btn) { - window.document.addEventListener( - "scroll", - function () { - const currentScrollTop = - window.pageYOffset || document.documentElement.scrollTop; - - // Shows and hides the button 'intelligently' as the user scrolls - if (currentScrollTop - scrollDownBuffer > lastScrollTop) { - hideBackToTop(); - lastScrollTop = currentScrollTop <= 0 ? 0 : currentScrollTop; - } else if (currentScrollTop < lastScrollTop - scrollUpBuffer) { - showBackToTop(); - lastScrollTop = currentScrollTop <= 0 ? 0 : currentScrollTop; - } - - // Show the button at the bottom, hides it at the top - if (currentScrollTop <= 0) { - hideBackToTop(); - } else if ( - window.innerHeight + currentScrollTop >= - document.body.offsetHeight - ) { - showBackToTop(); - } - }, - false - ); - } - - function throttle(func, wait) { - var timeout; - return function () { - const context = this; - const args = arguments; - const later = function () { - clearTimeout(timeout); - timeout = null; - func.apply(context, args); - }; - - if (!timeout) { - timeout = setTimeout(later, wait); - } - }; - } - - function headerOffset() { - // Set an offset if there is are fixed top navbar - const headerEl = window.document.querySelector("header.fixed-top"); - if (headerEl) { - return headerEl.clientHeight; - } else { - return 0; - } - } - - function footerOffset() { - const footerEl = window.document.querySelector("footer.footer"); - if (footerEl) { - return footerEl.clientHeight; - } else { - return 0; - } - } - - function dashboardOffset() { - const dashboardNavEl = window.document.getElementById( - "quarto-dashboard-header" - ); - if (dashboardNavEl !== null) { - return dashboardNavEl.clientHeight; - } else { - return 0; - } - } - - function updateDocumentOffsetWithoutAnimation() { - updateDocumentOffset(false); - } - - function updateDocumentOffset(animated) { - // set body offset - const topOffset = headerOffset(); - const bodyOffset = topOffset + footerOffset() + dashboardOffset(); - const bodyEl = window.document.body; - bodyEl.setAttribute("data-bs-offset", topOffset); - bodyEl.style.paddingTop = topOffset + "px"; - - // deal with sidebar offsets - const sidebars = window.document.querySelectorAll( - ".sidebar, .headroom-target" - ); - sidebars.forEach((sidebar) => { - if (!animated) { - sidebar.classList.add("notransition"); - // Remove the no transition class after the animation has time to complete - setTimeout(function () { - sidebar.classList.remove("notransition"); - }, 201); - } - - if (window.Headroom && sidebar.classList.contains("sidebar-unpinned")) { - sidebar.style.top = "0"; - sidebar.style.maxHeight = "100vh"; - } else { - sidebar.style.top = topOffset + "px"; - sidebar.style.maxHeight = "calc(100vh - " + topOffset + "px)"; - } - }); - - // allow space for footer - const mainContainer = window.document.querySelector(".quarto-container"); - if (mainContainer) { - mainContainer.style.minHeight = "calc(100vh - " + bodyOffset + "px)"; - } - - // link offset - let linkStyle = window.document.querySelector("#quarto-target-style"); - if (!linkStyle) { - linkStyle = window.document.createElement("style"); - linkStyle.setAttribute("id", "quarto-target-style"); - window.document.head.appendChild(linkStyle); - } - while (linkStyle.firstChild) { - linkStyle.removeChild(linkStyle.firstChild); - } - if (topOffset > 0) { - linkStyle.appendChild( - window.document.createTextNode(` - section:target::before { - content: ""; - display: block; - height: ${topOffset}px; - margin: -${topOffset}px 0 0; - }`) - ); - } - if (init) { - window.dispatchEvent(headroomChanged); - } - init = true; - } - - // initialize headroom - var header = window.document.querySelector("#quarto-header"); - if (header && window.Headroom) { - const headroom = new window.Headroom(header, { - tolerance: 5, - onPin: function () { - const sidebars = window.document.querySelectorAll( - ".sidebar, .headroom-target" - ); - sidebars.forEach((sidebar) => { - sidebar.classList.remove("sidebar-unpinned"); - }); - updateDocumentOffset(); - }, - onUnpin: function () { - const sidebars = window.document.querySelectorAll( - ".sidebar, .headroom-target" - ); - sidebars.forEach((sidebar) => { - sidebar.classList.add("sidebar-unpinned"); - }); - updateDocumentOffset(); - }, - }); - headroom.init(); - - let frozen = false; - window.quartoToggleHeadroom = function () { - if (frozen) { - headroom.unfreeze(); - frozen = false; - } else { - headroom.freeze(); - frozen = true; - } - }; - } - - window.addEventListener( - "hashchange", - function (e) { - if ( - getComputedStyle(document.documentElement).scrollBehavior !== "smooth" - ) { - window.scrollTo(0, window.pageYOffset - headerOffset()); - } - }, - false - ); - - // Observe size changed for the header - const headerEl = window.document.querySelector("header.fixed-top"); - if (headerEl && window.ResizeObserver) { - const observer = new window.ResizeObserver(() => { - setTimeout(updateDocumentOffsetWithoutAnimation, 0); - }); - observer.observe(headerEl, { - attributes: true, - childList: true, - characterData: true, - }); - } else { - window.addEventListener( - "resize", - throttle(updateDocumentOffsetWithoutAnimation, 50) - ); - } - setTimeout(updateDocumentOffsetWithoutAnimation, 250); - - // fixup index.html links if we aren't on the filesystem - if (window.location.protocol !== "file:") { - const links = window.document.querySelectorAll("a"); - for (let i = 0; i < links.length; i++) { - if (links[i].href) { - links[i].dataset.originalHref = links[i].href; - links[i].href = links[i].href.replace(/\/index\.html/, "/"); - } - } - - // Fixup any sharing links that require urls - // Append url to any sharing urls - const sharingLinks = window.document.querySelectorAll( - "a.sidebar-tools-main-item, a.quarto-navigation-tool, a.quarto-navbar-tools, a.quarto-navbar-tools-item" - ); - for (let i = 0; i < sharingLinks.length; i++) { - const sharingLink = sharingLinks[i]; - const href = sharingLink.getAttribute("href"); - if (href) { - sharingLink.setAttribute( - "href", - href.replace("|url|", window.location.href) - ); - } - } - - // Scroll the active navigation item into view, if necessary - const navSidebar = window.document.querySelector("nav#quarto-sidebar"); - if (navSidebar) { - // Find the active item - const activeItem = navSidebar.querySelector("li.sidebar-item a.active"); - if (activeItem) { - // Wait for the scroll height and height to resolve by observing size changes on the - // nav element that is scrollable - const resizeObserver = new ResizeObserver((_entries) => { - // The bottom of the element - const elBottom = activeItem.offsetTop; - const viewBottom = navSidebar.scrollTop + navSidebar.clientHeight; - - // The element height and scroll height are the same, then we are still loading - if (viewBottom !== navSidebar.scrollHeight) { - // Determine if the item isn't visible and scroll to it - if (elBottom >= viewBottom) { - navSidebar.scrollTop = elBottom; - } - - // stop observing now since we've completed the scroll - resizeObserver.unobserve(navSidebar); - } - }); - resizeObserver.observe(navSidebar); - } - } - } -}); diff --git a/docs/docs/site_libs/quarto-search/autocomplete.umd.js b/docs/docs/site_libs/quarto-search/autocomplete.umd.js deleted file mode 100644 index 6090a55..0000000 --- a/docs/docs/site_libs/quarto-search/autocomplete.umd.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! @algolia/autocomplete-js 1.19.1 | MIT License | © Algolia, Inc. and contributors | https://github.com/algolia/autocomplete */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@algolia/autocomplete-js"]={})}(this,(function(e){"use strict";function t(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function n(e){for(var n=1;n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function a(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,u,a=[],l=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(a.push(r.value),a.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=n.return&&(u=n.return(),Object(u)!==u))return}finally{if(c)throw o}}return a}}(e,t)||c(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e){return function(e){if(Array.isArray(e))return s(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||c(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){if(e){if("string"==typeof e)return s(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?s(e,t):void 0}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function x(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function N(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:20,n=[],r=0;r=3||2===n&&r>=4||1===n&&r>=10);function i(t,n,r){if(o&&void 0!==r){var i=r[0].__autocomplete_algoliaCredentials,u={"X-Algolia-Application-Id":i.appId,"X-Algolia-API-Key":i.apiKey};e.apply(void 0,[t].concat(D(n),[{headers:u}]))}else e.apply(void 0,[t].concat(D(n)))}return{init:function(t,n){e("init",{appId:t,apiKey:n})},setAuthenticatedUserToken:function(t){e("setAuthenticatedUserToken",t)},setUserToken:function(t){e("setUserToken",t)},clickedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&i("clickedObjectIDsAfterSearch",B(t),t[0].items)},clickedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&i("clickedObjectIDs",B(t),t[0].items)},clickedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r0&&e.apply(void 0,["clickedFilters"].concat(n))},convertedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&i("convertedObjectIDsAfterSearch",B(t),t[0].items)},convertedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&i("convertedObjectIDs",B(t),t[0].items)},convertedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r0&&e.apply(void 0,["convertedFilters"].concat(n))},viewedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&t.reduce((function(e,t){var n=t.items,r=k(t,A);return[].concat(D(e),D(q(N(N({},r),{},{objectIDs:(null==n?void 0:n.map((function(e){return e.objectID})))||r.objectIDs})).map((function(e){return{items:n,payload:e}}))))}),[]).forEach((function(e){var t=e.items;return i("viewedObjectIDs",[e.payload],t)}))},viewedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r0&&e.apply(void 0,["viewedFilters"].concat(n))}}}function L(e){var t=e.items.reduce((function(e,t){var n;return e[t.__autocomplete_indexName]=(null!==(n=e[t.__autocomplete_indexName])&&void 0!==n?n:[]).concat(t),e}),{});return Object.keys(t).map((function(e){return{index:e,items:t[e],algoliaSource:["autocomplete"]}}))}function F(e){return e.objectID&&e.__autocomplete_indexName&&e.__autocomplete_queryID}function U(e){return U="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},U(e)}function M(e){return function(e){if(Array.isArray(e))return H(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return H(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return H(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function H(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&z({onItemsChange:o,items:n,insights:c,state:t}))}}),0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(e){var t=e.setContext,n=e.onSelect,r=e.onActive;function o(e){t({algoliaInsightsPlugin:{__algoliaSearchParameters:W(W({},a?{clickAnalytics:!0}:{}),e?{userToken:X(e)}:{}),insights:c}})}l("addAlgoliaAgent","insights-plugin"),o(),l("onUserTokenChange",(function(e){o(e)})),l("getUserToken",null,(function(e,t){o(t)})),n((function(e){var t=e.item,n=e.state,r=e.event,o=e.source;F(t)&&i({state:n,event:r,insights:c,item:t,insightsEvents:[W({eventName:"Item Selected"},j({item:t,items:o.getItems().filter(F)}))]})})),r((function(e){var t=e.item,n=e.source,r=e.state,o=e.event;F(t)&&u({state:r,event:o,insights:c,item:t,insightsEvents:[W({eventName:"Item Active"},j({item:t,items:n.getItems().filter(F)}))]})}))},onStateChange:function(e){var t=e.state;m({state:t})},__autocomplete_pluginOptions:e}}function J(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1?arguments[1]:void 0;return[].concat(M(t),["autocomplete-internal"],M(null!==(e=n.algoliaInsightsPlugin)&&void 0!==e&&e.__automaticInsights?["autocomplete-automatic"]:[]))}function X(e){return"number"==typeof e?e.toString():e}function Y(e,t){var n=t;return{then:function(t,r){return Y(e.then(ee(t,n,e),ee(r,n,e)),n)},catch:function(t){return Y(e.catch(ee(t,n,e)),n)},finally:function(t){return t&&n.onCancelList.push(t),Y(e.finally(ee(t&&function(){return n.onCancelList=[],t()},n,e)),n)},cancel:function(){n.isCanceled=!0;var e=n.onCancelList;n.onCancelList=[],e.forEach((function(e){e()}))},isCanceled:function(){return!0===n.isCanceled}}}function Z(e){return Y(e,{isCanceled:!1,onCancelList:[]})}function ee(e,t,n){return e?function(n){return t.isCanceled?n:e(n)}:n}var te,ne=!0;function re(e,t,n,r){if(!n)return null;if(e<0&&(null===t||null!==r&&0===t))return n+e;var o=(null===t?-1:t)+e;return o<=-1||o>=n?null===r?null:0:o}function oe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function ie(e){for(var t=1;t=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,u=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return u=e.done,e},e:function(e){a=!0,i=e},f:function(){try{u||null==n.return||n.return()}finally{if(a)throw i}}}}function ce(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0?t.wait(Math.max.apply(Math,o)):void 0};function fe(e){var t=function(e){var t=e.collections.map((function(e){return e.items.length})).reduce((function(e,t,n){var r=(e[n-1]||0)+t;return e.push(r),e}),[]).reduce((function(t,n){return n<=e.activeItemId?t+1:t}),0);return e.collections[t]}(e);if(!t)return null;var n=t.items[function(e){for(var t=e.state,n=e.collection,r=!1,o=0,i=0;!1===r;){var u=t.collections[o];if(u===n){r=!0;break}i+=u.items.length,o++}return t.activeItemId-i}({state:e,collection:t})],r=t.source;return{item:n,itemInputValue:r.getItemInputValue({item:n,state:e}),itemUrl:r.getItemUrl({item:n,state:e}),source:r}}function pe(e,t,n){return[e,null==n?void 0:n.sourceId,t].filter(Boolean).join("-").replace(/\s/g,"")}var me=/((gt|sm)-|galaxy nexus)|samsung[- ]|samsungbrowser/i;function ve(e){return e.nativeEvent||e}function de(e){return de="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},de(e)}function ye(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function be(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==de(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==de(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===de(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ge(e,t,n){var r,o=t.initialState;return{getState:function(){return o},dispatch:function(r,i){var u=function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n0},reshape:function(e){return e.sources}},e),{},{id:null!==(n=e.id)&&void 0!==n?n:d(),plugins:o,initialState:Ae({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var n;null===(n=e.onStateChange)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onStateChange)||void 0===n?void 0:n.call(e,t)}))},onSubmit:function(t){var n;null===(n=e.onSubmit)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onSubmit)||void 0===n?void 0:n.call(e,t)}))},onReset:function(t){var n;null===(n=e.onReset)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onReset)||void 0===n?void 0:n.call(e,t)}))},getSources:function(n){return Promise.all([].concat(Pe(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return function(e,t){var n=[];return Promise.resolve(e(t)).then((function(e){return Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,n.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));n.push(e.sourceId);var t={getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:_,onResolve:_};Object.keys(t).forEach((function(e){t[e].__default=!0}));var r=ie(ie({},t),e);return Promise.resolve(r)})))}))}(e,n)}))).then((function(e){return m(e)})).then((function(e){return e.map((function(e){return Ae(Ae({},e),{},{onSelect:function(n){e.onSelect(n),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,n)}))},onActive:function(n){e.onActive(n),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,n)}))},onResolve:function(n){e.onResolve(n),t.forEach((function(e){var t;return null===(t=e.onResolve)||void 0===t?void 0:t.call(e,n)}))}})}))}))},navigator:Ae({navigate:function(e){var t=e.itemUrl;r.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,n=r.open(t,"_blank","noopener");null==n||n.focus()},navigateNewWindow:function(e){var t=e.itemUrl;r.open(t,"_blank","noopener")}},e.navigator)})}function Ce(e){return Ce="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ce(e)}function ke(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function xe(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var Je,Xe,Ye,Ze=null,et=(Je=-1,Xe=-1,Ye=void 0,function(e){var t=++Je;return Promise.resolve(e).then((function(e){return Ye&&t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function lt(e){return lt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},lt(e)}var ct=["props","refresh","store"],st=["inputElement","formElement","panelElement"],ft=["inputElement"],pt=["inputElement","maxLength"],mt=["source"],vt=["item","source"];function dt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function yt(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ht(e){var t=e.props,n=e.refresh,r=e.store,o=gt(e,ct);return{getEnvironmentProps:function(e){var n=e.inputElement,o=e.formElement,i=e.panelElement;function u(e){!r.getState().isOpen&&r.pendingRequests.isEmpty()||e.target===n||!1===[o,i].some((function(t){return n=t,r=e.target,n===r||n.contains(r);var n,r}))&&(r.dispatch("blur",null),t.debug||r.pendingRequests.cancelAll())}return yt({onTouchStart:u,onMouseDown:u,onTouchMove:function(e){!1!==r.getState().isOpen&&n===t.environment.document.activeElement&&e.target!==n&&n.blur()}},gt(e,st))},getRootProps:function(e){return yt({role:"combobox","aria-expanded":r.getState().isOpen,"aria-haspopup":"listbox","aria-controls":r.getState().isOpen?r.getState().collections.map((function(e){var n=e.source;return pe(t.id,"list",n)})).join(" "):void 0,"aria-labelledby":pe(t.id,"label")},e)},getFormProps:function(e){e.inputElement;var i=gt(e,ft),u=function(i){var u;t.onSubmit(yt({event:i,refresh:n,state:r.getState()},o)),r.dispatch("submit",null),null===(u=e.inputElement)||void 0===u||u.blur()};return yt({action:"",noValidate:!0,role:"search",onSubmit:function(e){e.preventDefault();var n=se(t.plugins,r.pendingRequests);void 0!==n?n.then((function(){return u(e)})):u(e)},onReset:function(i){var u;i.preventDefault(),t.onReset(yt({event:i,refresh:n,state:r.getState()},o)),r.dispatch("reset",null),null===(u=e.inputElement)||void 0===u||u.focus()}},i)},getLabelProps:function(e){return yt({htmlFor:pe(t.id,"input"),id:pe(t.id,"label")},e)},getInputProps:function(e){var i;function u(e){(t.openOnFocus||Boolean(r.getState().query))&&tt(yt({event:e,props:t,query:r.getState().completion||r.getState().query,refresh:n,store:r},o)),r.dispatch("focus",null)}var a=e||{};a.inputElement;var l=a.maxLength,c=void 0===l?512:l,s=gt(a,pt),f=fe(r.getState()),p=function(e){return Boolean(e&&e.match(me))}((null===(i=t.environment.navigator)||void 0===i?void 0:i.userAgent)||""),m=t.enterKeyHint||(null!=f&&f.itemUrl&&!p?"go":"search");return yt({"aria-autocomplete":"both","aria-activedescendant":r.getState().isOpen&&null!==r.getState().activeItemId?pe(t.id,"item-".concat(r.getState().activeItemId),null==f?void 0:f.source):void 0,"aria-controls":r.getState().isOpen?r.getState().collections.filter((function(e){return e.items.length>0})).map((function(e){var n=e.source;return pe(t.id,"list",n)})).join(" "):void 0,"aria-labelledby":pe(t.id,"label"),value:r.getState().completion||r.getState().query,id:pe(t.id,"input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:m,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:c,type:"search",onChange:function(e){var i=e.currentTarget.value;t.ignoreCompositionEvents&&ve(e).isComposing?o.setQuery(i):tt(yt({event:e,props:t,query:i.slice(0,c),refresh:n,store:r},o))},onCompositionEnd:function(e){tt(yt({event:e,props:t,query:e.currentTarget.value.slice(0,c),refresh:n,store:r},o))},onKeyDown:function(e){ve(e).isComposing||function(e){var t=e.event,n=e.props,r=e.refresh,o=e.store,i=at(e,rt);if("ArrowUp"===t.key||"ArrowDown"===t.key){var u=function(){var e=fe(o.getState()),t=n.environment.document.getElementById(pe(n.id,"item-".concat(o.getState().activeItemId),null==e?void 0:e.source));t&&(t.scrollIntoViewIfNeeded?t.scrollIntoViewIfNeeded(!1):t.scrollIntoView(!1))},a=function(){var e=fe(o.getState());if(null!==o.getState().activeItemId&&e){var n=e.item,u=e.itemInputValue,a=e.itemUrl,l=e.source;l.onActive(it({event:t,item:n,itemInputValue:u,itemUrl:a,refresh:r,source:l,state:o.getState()},i))}};t.preventDefault(),!1===o.getState().isOpen&&(n.openOnFocus||Boolean(o.getState().query))?tt(it({event:t,props:n,query:o.getState().query,refresh:r,store:o},i)).then((function(){o.dispatch(t.key,{nextActiveItemId:n.defaultActiveItemId}),a(),setTimeout(u,0)})):(o.dispatch(t.key,{}),a(),u())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length}))){var l=se(n.plugins,o.pendingRequests);return void(void 0!==l?l.then(o.pendingRequests.cancelAll):n.debug||o.pendingRequests.cancelAll())}t.preventDefault();var c=fe(o.getState()),s=c.item,f=c.itemInputValue,p=c.itemUrl,m=c.source;if(t.metaKey||t.ctrlKey)void 0!==p&&(m.onSelect(it({event:t,item:s,itemInputValue:f,itemUrl:p,refresh:r,source:m,state:o.getState()},i)),n.navigator.navigateNewTab({itemUrl:p,item:s,state:o.getState()}));else if(t.shiftKey)void 0!==p&&(m.onSelect(it({event:t,item:s,itemInputValue:f,itemUrl:p,refresh:r,source:m,state:o.getState()},i)),n.navigator.navigateNewWindow({itemUrl:p,item:s,state:o.getState()}));else if(t.altKey);else{if(void 0!==p)return m.onSelect(it({event:t,item:s,itemInputValue:f,itemUrl:p,refresh:r,source:m,state:o.getState()},i)),void n.navigator.navigate({itemUrl:p,item:s,state:o.getState()});tt(it({event:t,nextState:{isOpen:!1},props:n,query:f,refresh:r,store:o},i)).then((function(){m.onSelect(it({event:t,item:s,itemInputValue:f,itemUrl:p,refresh:r,source:m,state:o.getState()},i))}))}}}(yt({event:e,props:t,refresh:n,store:r},o))},onFocus:u,onBlur:_,onClick:function(n){e.inputElement!==t.environment.document.activeElement||r.getState().isOpen||u(n)}},s)},getPanelProps:function(e){return yt({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){r.dispatch("mouseleave",null)}},e)},getListProps:function(e){var n=e||{},r=n.source,o=gt(n,mt);return yt({role:"listbox","aria-labelledby":pe(t.id,"label"),id:pe(t.id,"list",r)},o)},getItemProps:function(e){var i=e.item,u=e.source,a=gt(e,vt);return yt({id:pe(t.id,"item-".concat(i.__autocomplete_id),u),role:"option","aria-selected":r.getState().activeItemId===i.__autocomplete_id,onMouseMove:function(e){if(i.__autocomplete_id!==r.getState().activeItemId){r.dispatch("mousemove",i.__autocomplete_id);var t=fe(r.getState());if(null!==r.getState().activeItemId&&t){var u=t.item,a=t.itemInputValue,l=t.itemUrl,c=t.source;c.onActive(yt({event:e,item:u,itemInputValue:a,itemUrl:l,refresh:n,source:c,state:r.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var a=u.getItemInputValue({item:i,state:r.getState()}),l=u.getItemUrl({item:i,state:r.getState()});(l?Promise.resolve():tt(yt({event:e,nextState:{isOpen:!1},props:t,query:a,refresh:n,store:r},o))).then((function(){u.onSelect(yt({event:e,item:i,itemInputValue:a,itemUrl:l,refresh:n,source:u,state:r.getState()},o))}))}},a)}}}function _t(e){return _t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_t(e)}function Ot(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function St(e){for(var t=1;t=5&&((o||!e&&5===r)&&(u.push(r,0,o,n),r=6),e&&(u.push(r,e,0,n),r=6)),o=""},l=0;l"===t?(r=1,o=""):o=t+o[0]:i?t===i?i="":o+=t:'"'===t||"'"===t?i=t:">"===t?(a(),r=1):r&&("="===t?(r=5,n=o,o=""):"/"===t&&(r<5||">"===e[l][c+1])?(a(),3===r&&(u=u[0]),r=u,(u=u[0]).push(2,0,r),r=0):" "===t||"\t"===t||"\n"===t||"\r"===t?(a(),r=2):o+=t),3===r&&"!--"===o&&(r=4,u=u[0])}return a(),u}(e)),t),arguments,[])).length>1?t:t[0]}var Ft=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-ClearIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","18"),n.setAttribute("height","18"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"),n.appendChild(r),n};function Ut(e,t){if("string"==typeof t){var n=e.document.querySelector(t);return"The element ".concat(JSON.stringify(t)," is not in the document."),n}return t}function Mt(){for(var e=arguments.length,t=new Array(e),n=0;n2&&(u.children=arguments.length>3?on.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(i in e.defaultProps)void 0===u[i]&&(u[i]=e.defaultProps[i]);return gn(e,u,r,o,null)}function gn(e,t,n,r,o){var i={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++an:o};return null==o&&null!=un.vnode&&un.vnode(i),i}function hn(e){return e.children}function _n(e,t){this.props=e,this.context=t}function On(e,t){if(null==t)return e.__?On(e.__,e.__.__k.indexOf(e)+1):null;for(var n;tt&&ln.sort(fn));Pn.__r=0}function wn(e,t,n,r,o,i,u,a,l,c){var s,f,p,m,v,d,y,b=r&&r.__k||mn,g=b.length;for(n.__k=[],s=0;s0?gn(m.type,m.props,m.key,m.ref?m.ref:null,m.__v):m)){if(m.__=n,m.__b=n.__b+1,null===(p=b[s])||p&&m.key==p.key&&m.type===p.type)b[s]=void 0;else for(f=0;f=0;t--)if((n=e.__k[t])&&(r=En(n)))return r;return null}function Dn(e,t,n){"-"===t[0]?e.setProperty(t,null==n?"":n):e[t]=null==n?"":"number"!=typeof n||vn.test(t)?n:n+"px"}function Cn(e,t,n,r,o){var i;e:if("style"===t)if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof r&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||Dn(e.style,t,"");if(n)for(t in n)r&&n[t]===r[t]||Dn(e.style,t,n[t])}else if("o"===t[0]&&"n"===t[1])i=t!==(t=t.replace(/Capture$/,"")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+i]=n,n?r||e.addEventListener(t,i?xn:kn,i):e.removeEventListener(t,i?xn:kn,i);else if("dangerouslySetInnerHTML"!==t){if(o)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!==t&&"height"!==t&&"href"!==t&&"list"!==t&&"form"!==t&&"tabIndex"!==t&&"download"!==t&&t in e)try{e[t]=null==n?"":n;break e}catch(e){}"function"==typeof n||(null==n||!1===n&&"-"!==t[4]?e.removeAttribute(t):e.setAttribute(t,n))}}function kn(e){return this.l[e.type+!1](un.event?un.event(e):e)}function xn(e){return this.l[e.type+!0](un.event?un.event(e):e)}function Nn(e,t,n,r,o,i,u,a,l){var c,s,f,p,m,v,d,y,b,g,h,_,O,S,j,P=t.type;if(void 0!==t.constructor)return null;null!=n.__h&&(l=n.__h,a=t.__e=n.__e,t.__h=null,i=[a]),(c=un.__b)&&c(t);try{e:if("function"==typeof P){if(y=t.props,b=(c=P.contextType)&&r[c.__c],g=c?b?b.props.value:c.__:r,n.__c?d=(s=t.__c=n.__c).__=s.__E:("prototype"in P&&P.prototype.render?t.__c=s=new P(y,g):(t.__c=s=new _n(y,g),s.constructor=P,s.render=Ln),b&&b.sub(s),s.props=y,s.state||(s.state={}),s.context=g,s.__n=r,f=s.__d=!0,s.__h=[],s._sb=[]),null==s.__s&&(s.__s=s.state),null!=P.getDerivedStateFromProps&&(s.__s==s.state&&(s.__s=dn({},s.__s)),dn(s.__s,P.getDerivedStateFromProps(y,s.__s))),p=s.props,m=s.state,s.__v=t,f)null==P.getDerivedStateFromProps&&null!=s.componentWillMount&&s.componentWillMount(),null!=s.componentDidMount&&s.__h.push(s.componentDidMount);else{if(null==P.getDerivedStateFromProps&&y!==p&&null!=s.componentWillReceiveProps&&s.componentWillReceiveProps(y,g),!s.__e&&null!=s.shouldComponentUpdate&&!1===s.shouldComponentUpdate(y,s.__s,g)||t.__v===n.__v){for(t.__v!==n.__v&&(s.props=y,s.state=s.__s,s.__d=!1),s.__e=!1,t.__e=n.__e,t.__k=n.__k,t.__k.forEach((function(e){e&&(e.__=t)})),h=0;h0&&void 0!==arguments[0]?arguments[0]:[];return{get:function(){return e},add:function(t){var n=e[e.length-1];(null==n?void 0:n.isHighlighted)===t.isHighlighted?e[e.length-1]={value:n.value+t.value,isHighlighted:n.isHighlighted}:e.push(t)}}}(n?[{value:n,isHighlighted:!1}]:[]);return t.forEach((function(e){var t=e.split(Un);r.add({value:t[0],isHighlighted:!0}),""!==t[1]&&r.add({value:t[1],isHighlighted:!1})})),r.get()}function Hn(e){return function(e){if(Array.isArray(e))return Vn(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Vn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Vn(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Vn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n",""":'"',"'":"'"},Kn=new RegExp(/\w/i),$n=/&(amp|quot|lt|gt|#39);/g,zn=RegExp($n.source);function Gn(e,t){var n,r,o,i=e[t],u=(null===(n=e[t+1])||void 0===n?void 0:n.isHighlighted)||!0,a=(null===(r=e[t-1])||void 0===r?void 0:r.isHighlighted)||!0;return Kn.test((o=i.value)&&zn.test(o)?o.replace($n,(function(e){return Qn[e]})):o)||a!==u?i.isHighlighted:a}function Jn(e){return Jn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Jn(e)}function Xn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Yn(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function vr(e){return function(e){if(Array.isArray(e))return dr(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return dr(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return dr(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function dr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0;if(!_.value.core.openOnFocus&&!t.query)return n;var r=Boolean(y.current||_.value.renderer.renderNoResults);return!n&&r||n},__autocomplete_metadata:{userAgents:wr,options:e}}))})),j=f(n({collections:[],completion:null,context:{},isOpen:!1,query:"",activeItemId:null,status:"idle"},_.value.core.initialState)),P={getEnvironmentProps:_.value.renderer.getEnvironmentProps,getFormProps:_.value.renderer.getFormProps,getInputProps:_.value.renderer.getInputProps,getItemProps:_.value.renderer.getItemProps,getLabelProps:_.value.renderer.getLabelProps,getListProps:_.value.renderer.getListProps,getPanelProps:_.value.renderer.getPanelProps,getRootProps:_.value.renderer.getRootProps},w={setActiveItemId:S.value.setActiveItemId,setQuery:S.value.setQuery,setCollections:S.value.setCollections,setIsOpen:S.value.setIsOpen,setStatus:S.value.setStatus,setContext:S.value.setContext,refresh:S.value.refresh,navigator:S.value.navigator},I=m((function(){return Lt.bind(_.value.renderer.renderer.createElement)})),A=m((function(){return rn({autocomplete:S.value,autocompleteScopeApi:w,classNames:_.value.renderer.classNames,environment:_.value.core.environment,isDetached:O.value,placeholder:_.value.core.placeholder,propGetters:P,setIsModalOpen:k,state:j.current,translations:_.value.renderer.translations})}));function E(){Jt(A.value.panel,{style:O.value?{}:Pr({panelPlacement:_.value.renderer.panelPlacement,container:A.value.root,form:A.value.form,environment:_.value.core.environment})})}function D(e){j.current=e;var t={autocomplete:S.value,autocompleteScopeApi:w,classNames:_.value.renderer.classNames,components:_.value.renderer.components,container:_.value.renderer.container,html:I.value,dom:A.value,panelContainer:O.value?A.value.detachedContainer:_.value.renderer.panelContainer,propGetters:P,state:j.current,renderer:_.value.renderer.renderer},r=!b(e)&&!y.current&&_.value.renderer.renderNoResults||_.value.renderer.render;!function(e){var t=e.autocomplete,r=e.autocompleteScopeApi,o=e.dom,i=e.propGetters,u=e.state;Xt(o.root,i.getRootProps(n({state:u,props:t.getRootProps({})},r))),Xt(o.input,i.getInputProps(n({state:u,props:t.getInputProps({inputElement:o.input}),inputElement:o.input},r))),Jt(o.label,{hidden:"stalled"===u.status}),Jt(o.loadingIndicator,{hidden:"stalled"!==u.status}),Jt(o.clearButton,{hidden:!u.query}),Jt(o.detachedSearchButtonQuery,{textContent:u.query}),Jt(o.detachedSearchButtonPlaceholder,{hidden:Boolean(u.query)})}(t),function(e,t){var r=t.autocomplete,o=t.autocompleteScopeApi,u=t.classNames,a=t.html,l=t.dom,c=t.panelContainer,s=t.propGetters,f=t.state,p=t.components,m=t.renderer;if(f.isOpen){c.contains(l.panel)||"loading"===f.status||c.appendChild(l.panel),l.panel.classList.toggle("aa-Panel--stalled","stalled"===f.status);var v=f.collections.filter((function(e){var t=e.source,n=e.items;return t.templates.noResults||n.length>0})).map((function(e,t){var l=e.source,c=e.items;return m.createElement("section",{key:t,className:u.source,"data-autocomplete-source-id":l.sourceId},l.templates.header&&m.createElement("div",{className:u.sourceHeader},l.templates.header({components:p,createElement:m.createElement,Fragment:m.Fragment,items:c,source:l,state:f,html:a})),l.templates.noResults&&0===c.length?m.createElement("div",{className:u.sourceNoResults},l.templates.noResults({components:p,createElement:m.createElement,Fragment:m.Fragment,source:l,state:f,html:a})):m.createElement("ul",i({className:u.list},s.getListProps(n({state:f,props:r.getListProps({source:l})},o))),c.map((function(e){var t=r.getItemProps({item:e,source:l});return m.createElement("li",i({key:t.id,className:u.item},s.getItemProps(n({state:f,props:t},o))),l.templates.item({components:p,createElement:m.createElement,Fragment:m.Fragment,item:e,state:f,html:a}))}))),l.templates.footer&&m.createElement("div",{className:u.sourceFooter},l.templates.footer({components:p,createElement:m.createElement,Fragment:m.Fragment,items:c,source:l,state:f,html:a})))})),d=m.createElement(m.Fragment,null,m.createElement("div",{className:u.panelLayout},v),m.createElement("div",{className:"aa-GradientBottom"})),y=v.reduce((function(e,t){return e[t.props["data-autocomplete-source-id"]]=t,e}),{});e(n(n({children:d,state:f,sections:v,elements:y},m),{},{components:p,html:a},o),l.panel)}else c.contains(l.panel)&&c.removeChild(l.panel)}(r,t)}function C(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};l();var t=_.value.renderer,n=t.components,r=u(t,Ir);g.current=Vt(r,_.value.core,{components:Wt(n,(function(e){return!e.value.hasOwnProperty("__autocomplete_componentName")})),initialState:j.current},e),v(),c(),S.value.refresh().then((function(){D(j.current)}))}function k(e){e!==_.value.core.environment.document.body.contains(A.value.detachedOverlay)&&(e?(_.value.core.environment.document.body.appendChild(A.value.detachedOverlay),_.value.core.environment.document.body.classList.add("aa-Detached"),A.value.input.focus()):(_.value.core.environment.document.body.removeChild(A.value.detachedOverlay),_.value.core.environment.document.body.classList.remove("aa-Detached")))}return a((function(){var e=S.value.getEnvironmentProps({formElement:A.value.form,panelElement:A.value.panel,inputElement:A.value.input});return Jt(_.value.core.environment,e),function(){Jt(_.value.core.environment,Object.keys(e).reduce((function(e,t){return n(n({},e),{},o({},t,void 0))}),{}))}})),a((function(){var e=O.value?_.value.core.environment.document.body:_.value.renderer.panelContainer,t=O.value?A.value.detachedOverlay:A.value.panel;return O.value&&j.current.isOpen&&k(!0),D(j.current),function(){e.contains(t)&&(e.removeChild(t),e.classList.remove("aa-Detached"))}})),a((function(){var e=_.value.renderer.container;return e.appendChild(A.value.root),function(){e.removeChild(A.value.root)}})),a((function(){var e=p((function(e){D(e.state)}),0);return h.current=function(t){var n=t.state,r=t.prevState;(O.value&&r.isOpen!==n.isOpen&&k(n.isOpen),O.value||!n.isOpen||r.isOpen||E(),n.query!==r.query)&&_.value.core.environment.document.querySelectorAll(".aa-Panel--scrollable").forEach((function(e){0!==e.scrollTop&&(e.scrollTop=0)}));e({state:n})},function(){h.current=void 0}})),a((function(){var e=p((function(){var e=O.value;O.value=_.value.core.environment.matchMedia(_.value.renderer.detachedMediaQuery).matches,e!==O.value?C({}):requestAnimationFrame(E)}),20);return _.value.core.environment.addEventListener("resize",e),function(){_.value.core.environment.removeEventListener("resize",e)}})),a((function(){if(!O.value)return function(){};function e(e){A.value.detachedContainer.classList.toggle("aa-DetachedContainer--modal",e)}function t(t){e(t.matches)}var n=_.value.core.environment.matchMedia(getComputedStyle(_.value.core.environment.document.documentElement).getPropertyValue("--aa-detached-modal-media-query"));e(n.matches);var r=Boolean(n.addEventListener);return r?n.addEventListener("change",t):n.addListener(t),function(){r?n.removeEventListener("change",t):n.removeListener(t)}})),a((function(){return requestAnimationFrame(E),function(){}})),n(n({},w),{},{update:C,destroy:function(){l()}})},e.getAlgoliaFacets=function(e){var t=Ar({transformResponse:function(e){return e.facetHits}}),r=e.queries.map((function(e){return n(n({},e),{},{type:"facet"})}));return t(n(n({},e),{},{queries:r}))},e.getAlgoliaResults=Er,Object.defineProperty(e,"__esModule",{value:!0})})); - diff --git a/docs/docs/site_libs/quarto-search/fuse.min.js b/docs/docs/site_libs/quarto-search/fuse.min.js deleted file mode 100644 index adc2835..0000000 --- a/docs/docs/site_libs/quarto-search/fuse.min.js +++ /dev/null @@ -1,9 +0,0 @@ -/** - * Fuse.js v6.6.2 - Lightweight fuzzy-search (http://fusejs.io) - * - * Copyright (c) 2022 Kiro Risk (http://kiro.me) - * All Rights Reserved. Apache Software License 2.0 - * - * http://www.apache.org/licenses/LICENSE-2.0 - */ -var e,t;e=this,t=function(){"use strict";function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function t(t){for(var n=1;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:3,n=new Map,r=Math.pow(10,t);return{get:function(t){var i=t.match(C).length;if(n.has(i))return n.get(i);var o=1/Math.pow(i,.5*e),c=parseFloat(Math.round(o*r)/r);return n.set(i,c),c},clear:function(){n.clear()}}}var $=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.getFn,i=void 0===n?I.getFn:n,o=t.fieldNormWeight,c=void 0===o?I.fieldNormWeight:o;r(this,e),this.norm=E(c,3),this.getFn=i,this.isCreated=!1,this.setIndexRecords()}return o(e,[{key:"setSources",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.docs=e}},{key:"setIndexRecords",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.records=e}},{key:"setKeys",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.keys=t,this._keysMap={},t.forEach((function(t,n){e._keysMap[t.id]=n}))}},{key:"create",value:function(){var e=this;!this.isCreated&&this.docs.length&&(this.isCreated=!0,g(this.docs[0])?this.docs.forEach((function(t,n){e._addString(t,n)})):this.docs.forEach((function(t,n){e._addObject(t,n)})),this.norm.clear())}},{key:"add",value:function(e){var t=this.size();g(e)?this._addString(e,t):this._addObject(e,t)}},{key:"removeAt",value:function(e){this.records.splice(e,1);for(var t=e,n=this.size();t2&&void 0!==arguments[2]?arguments[2]:{},r=n.getFn,i=void 0===r?I.getFn:r,o=n.fieldNormWeight,c=void 0===o?I.fieldNormWeight:o,a=new $({getFn:i,fieldNormWeight:c});return a.setKeys(e.map(_)),a.setSources(t),a.create(),a}function R(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.errors,r=void 0===n?0:n,i=t.currentLocation,o=void 0===i?0:i,c=t.expectedLocation,a=void 0===c?0:c,s=t.distance,u=void 0===s?I.distance:s,h=t.ignoreLocation,l=void 0===h?I.ignoreLocation:h,f=r/e.length;if(l)return f;var d=Math.abs(a-o);return u?f+d/u:d?1:f}function N(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:I.minMatchCharLength,n=[],r=-1,i=-1,o=0,c=e.length;o=t&&n.push([r,i]),r=-1)}return e[o-1]&&o-r>=t&&n.push([r,o-1]),n}var P=32;function W(e){for(var t={},n=0,r=e.length;n1&&void 0!==arguments[1]?arguments[1]:{},o=i.location,c=void 0===o?I.location:o,a=i.threshold,s=void 0===a?I.threshold:a,u=i.distance,h=void 0===u?I.distance:u,l=i.includeMatches,f=void 0===l?I.includeMatches:l,d=i.findAllMatches,v=void 0===d?I.findAllMatches:d,g=i.minMatchCharLength,y=void 0===g?I.minMatchCharLength:g,p=i.isCaseSensitive,m=void 0===p?I.isCaseSensitive:p,k=i.ignoreLocation,M=void 0===k?I.ignoreLocation:k;if(r(this,e),this.options={location:c,threshold:s,distance:h,includeMatches:f,findAllMatches:v,minMatchCharLength:y,isCaseSensitive:m,ignoreLocation:M},this.pattern=m?t:t.toLowerCase(),this.chunks=[],this.pattern.length){var b=function(e,t){n.chunks.push({pattern:e,alphabet:W(e),startIndex:t})},x=this.pattern.length;if(x>P){for(var w=0,L=x%P,S=x-L;w3&&void 0!==arguments[3]?arguments[3]:{},i=r.location,o=void 0===i?I.location:i,c=r.distance,a=void 0===c?I.distance:c,s=r.threshold,u=void 0===s?I.threshold:s,h=r.findAllMatches,l=void 0===h?I.findAllMatches:h,f=r.minMatchCharLength,d=void 0===f?I.minMatchCharLength:f,v=r.includeMatches,g=void 0===v?I.includeMatches:v,y=r.ignoreLocation,p=void 0===y?I.ignoreLocation:y;if(t.length>P)throw new Error(w(P));for(var m,k=t.length,M=e.length,b=Math.max(0,Math.min(o,M)),x=u,L=b,S=d>1||g,_=S?Array(M):[];(m=e.indexOf(t,L))>-1;){var O=R(t,{currentLocation:m,expectedLocation:b,distance:a,ignoreLocation:p});if(x=Math.min(O,x),L=m+k,S)for(var j=0;j=z;q-=1){var B=q-1,J=n[e.charAt(B)];if(S&&(_[B]=+!!J),K[q]=(K[q+1]<<1|1)&J,F&&(K[q]|=(A[q+1]|A[q])<<1|1|A[q+1]),K[q]&$&&(C=R(t,{errors:F,currentLocation:B,expectedLocation:b,distance:a,ignoreLocation:p}))<=x){if(x=C,(L=B)<=b)break;z=Math.max(1,2*b-L)}}if(R(t,{errors:F+1,currentLocation:b,expectedLocation:b,distance:a,ignoreLocation:p})>x)break;A=K}var U={isMatch:L>=0,score:Math.max(.001,C)};if(S){var V=N(_,d);V.length?g&&(U.indices=V):U.isMatch=!1}return U}(e,n,i,{location:c+o,distance:a,threshold:s,findAllMatches:u,minMatchCharLength:h,includeMatches:r,ignoreLocation:l}),p=y.isMatch,m=y.score,k=y.indices;p&&(g=!0),v+=m,p&&k&&(d=[].concat(f(d),f(k)))}));var y={isMatch:g,score:g?v/this.chunks.length:1};return g&&r&&(y.indices=d),y}}]),e}(),z=function(){function e(t){r(this,e),this.pattern=t}return o(e,[{key:"search",value:function(){}}],[{key:"isMultiMatch",value:function(e){return D(e,this.multiRegex)}},{key:"isSingleMatch",value:function(e){return D(e,this.singleRegex)}}]),e}();function D(e,t){var n=e.match(t);return n?n[1]:null}var K=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e===this.pattern;return{isMatch:t,score:t?0:1,indices:[0,this.pattern.length-1]}}}],[{key:"type",get:function(){return"exact"}},{key:"multiRegex",get:function(){return/^="(.*)"$/}},{key:"singleRegex",get:function(){return/^=(.*)$/}}]),n}(z),q=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=-1===e.indexOf(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-exact"}},{key:"multiRegex",get:function(){return/^!"(.*)"$/}},{key:"singleRegex",get:function(){return/^!(.*)$/}}]),n}(z),B=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e.startsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,this.pattern.length-1]}}}],[{key:"type",get:function(){return"prefix-exact"}},{key:"multiRegex",get:function(){return/^\^"(.*)"$/}},{key:"singleRegex",get:function(){return/^\^(.*)$/}}]),n}(z),J=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=!e.startsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-prefix-exact"}},{key:"multiRegex",get:function(){return/^!\^"(.*)"$/}},{key:"singleRegex",get:function(){return/^!\^(.*)$/}}]),n}(z),U=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e.endsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[e.length-this.pattern.length,e.length-1]}}}],[{key:"type",get:function(){return"suffix-exact"}},{key:"multiRegex",get:function(){return/^"(.*)"\$$/}},{key:"singleRegex",get:function(){return/^(.*)\$$/}}]),n}(z),V=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=!e.endsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-suffix-exact"}},{key:"multiRegex",get:function(){return/^!"(.*)"\$$/}},{key:"singleRegex",get:function(){return/^!(.*)\$$/}}]),n}(z),G=function(e){a(n,e);var t=l(n);function n(e){var i,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},c=o.location,a=void 0===c?I.location:c,s=o.threshold,u=void 0===s?I.threshold:s,h=o.distance,l=void 0===h?I.distance:h,f=o.includeMatches,d=void 0===f?I.includeMatches:f,v=o.findAllMatches,g=void 0===v?I.findAllMatches:v,y=o.minMatchCharLength,p=void 0===y?I.minMatchCharLength:y,m=o.isCaseSensitive,k=void 0===m?I.isCaseSensitive:m,M=o.ignoreLocation,b=void 0===M?I.ignoreLocation:M;return r(this,n),(i=t.call(this,e))._bitapSearch=new T(e,{location:a,threshold:u,distance:l,includeMatches:d,findAllMatches:g,minMatchCharLength:p,isCaseSensitive:k,ignoreLocation:b}),i}return o(n,[{key:"search",value:function(e){return this._bitapSearch.searchIn(e)}}],[{key:"type",get:function(){return"fuzzy"}},{key:"multiRegex",get:function(){return/^"(.*)"$/}},{key:"singleRegex",get:function(){return/^(.*)$/}}]),n}(z),H=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){for(var t,n=0,r=[],i=this.pattern.length;(t=e.indexOf(this.pattern,n))>-1;)n=t+i,r.push([t,n-1]);var o=!!r.length;return{isMatch:o,score:o?0:1,indices:r}}}],[{key:"type",get:function(){return"include"}},{key:"multiRegex",get:function(){return/^'"(.*)"$/}},{key:"singleRegex",get:function(){return/^'(.*)$/}}]),n}(z),Q=[K,H,B,J,V,U,q,G],X=Q.length,Y=/ +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/;function Z(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.split("|").map((function(e){for(var n=e.trim().split(Y).filter((function(e){return e&&!!e.trim()})),r=[],i=0,o=n.length;i1&&void 0!==arguments[1]?arguments[1]:{},i=n.isCaseSensitive,o=void 0===i?I.isCaseSensitive:i,c=n.includeMatches,a=void 0===c?I.includeMatches:c,s=n.minMatchCharLength,u=void 0===s?I.minMatchCharLength:s,h=n.ignoreLocation,l=void 0===h?I.ignoreLocation:h,f=n.findAllMatches,d=void 0===f?I.findAllMatches:f,v=n.location,g=void 0===v?I.location:v,y=n.threshold,p=void 0===y?I.threshold:y,m=n.distance,k=void 0===m?I.distance:m;r(this,e),this.query=null,this.options={isCaseSensitive:o,includeMatches:a,minMatchCharLength:u,findAllMatches:d,ignoreLocation:l,location:g,threshold:p,distance:k},this.pattern=o?t:t.toLowerCase(),this.query=Z(this.pattern,this.options)}return o(e,[{key:"searchIn",value:function(e){var t=this.query;if(!t)return{isMatch:!1,score:1};var n=this.options,r=n.includeMatches;e=n.isCaseSensitive?e:e.toLowerCase();for(var i=0,o=[],c=0,a=0,s=t.length;a-1&&(n.refIndex=e.idx),t.matches.push(n)}}))}function ve(e,t){t.score=e.score}function ge(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.includeMatches,i=void 0===r?I.includeMatches:r,o=n.includeScore,c=void 0===o?I.includeScore:o,a=[];return i&&a.push(de),c&&a.push(ve),e.map((function(e){var n=e.idx,r={item:t[n],refIndex:n};return a.length&&a.forEach((function(t){t(e,r)})),r}))}var ye=function(){function e(n){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments.length>2?arguments[2]:void 0;r(this,e),this.options=t(t({},I),i),this.options.useExtendedSearch,this._keyStore=new S(this.options.keys),this.setCollection(n,o)}return o(e,[{key:"setCollection",value:function(e,t){if(this._docs=e,t&&!(t instanceof $))throw new Error("Incorrect 'index' type");this._myIndex=t||F(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}},{key:"add",value:function(e){k(e)&&(this._docs.push(e),this._myIndex.add(e))}},{key:"remove",value:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){return!1},t=[],n=0,r=this._docs.length;n1&&void 0!==arguments[1]?arguments[1]:{},n=t.limit,r=void 0===n?-1:n,i=this.options,o=i.includeMatches,c=i.includeScore,a=i.shouldSort,s=i.sortFn,u=i.ignoreFieldNorm,h=g(e)?g(this._docs[0])?this._searchStringList(e):this._searchObjectList(e):this._searchLogical(e);return fe(h,{ignoreFieldNorm:u}),a&&h.sort(s),y(r)&&r>-1&&(h=h.slice(0,r)),ge(h,this._docs,{includeMatches:o,includeScore:c})}},{key:"_searchStringList",value:function(e){var t=re(e,this.options),n=this._myIndex.records,r=[];return n.forEach((function(e){var n=e.v,i=e.i,o=e.n;if(k(n)){var c=t.searchIn(n),a=c.isMatch,s=c.score,u=c.indices;a&&r.push({item:n,idx:i,matches:[{score:s,value:n,norm:o,indices:u}]})}})),r}},{key:"_searchLogical",value:function(e){var t=this,n=function(e,t){var n=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).auto,r=void 0===n||n,i=function e(n){var i=Object.keys(n),o=ue(n);if(!o&&i.length>1&&!se(n))return e(le(n));if(he(n)){var c=o?n[ce]:i[0],a=o?n[ae]:n[c];if(!g(a))throw new Error(x(c));var s={keyId:j(c),pattern:a};return r&&(s.searcher=re(a,t)),s}var u={children:[],operator:i[0]};return i.forEach((function(t){var r=n[t];v(r)&&r.forEach((function(t){u.children.push(e(t))}))})),u};return se(e)||(e=le(e)),i(e)}(e,this.options),r=function e(n,r,i){if(!n.children){var o=n.keyId,c=n.searcher,a=t._findMatches({key:t._keyStore.get(o),value:t._myIndex.getValueForItemAtKeyId(r,o),searcher:c});return a&&a.length?[{idx:i,item:r,matches:a}]:[]}for(var s=[],u=0,h=n.children.length;u1&&void 0!==arguments[1]?arguments[1]:{},n=t.getFn,r=void 0===n?I.getFn:n,i=t.fieldNormWeight,o=void 0===i?I.fieldNormWeight:i,c=e.keys,a=e.records,s=new $({getFn:r,fieldNormWeight:o});return s.setKeys(c),s.setIndexRecords(a),s},ye.config=I,function(){ne.push.apply(ne,arguments)}(te),ye},"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Fuse=t(); \ No newline at end of file diff --git a/docs/docs/site_libs/quarto-search/quarto-search.js b/docs/docs/site_libs/quarto-search/quarto-search.js deleted file mode 100644 index d788a95..0000000 --- a/docs/docs/site_libs/quarto-search/quarto-search.js +++ /dev/null @@ -1,1290 +0,0 @@ -const kQueryArg = "q"; -const kResultsArg = "show-results"; - -// If items don't provide a URL, then both the navigator and the onSelect -// function aren't called (and therefore, the default implementation is used) -// -// We're using this sentinel URL to signal to those handlers that this -// item is a more item (along with the type) and can be handled appropriately -const kItemTypeMoreHref = "0767FDFD-0422-4E5A-BC8A-3BE11E5BBA05"; - -window.document.addEventListener("DOMContentLoaded", function (_event) { - // Ensure that search is available on this page. If it isn't, - // should return early and not do anything - var searchEl = window.document.getElementById("quarto-search"); - if (!searchEl) return; - - const { autocomplete } = window["@algolia/autocomplete-js"]; - - let quartoSearchOptions = {}; - let language = {}; - const searchOptionEl = window.document.getElementById( - "quarto-search-options" - ); - if (searchOptionEl) { - const jsonStr = searchOptionEl.textContent; - quartoSearchOptions = JSON.parse(jsonStr); - language = quartoSearchOptions.language; - } - - // note the search mode - if (quartoSearchOptions.type === "overlay") { - searchEl.classList.add("type-overlay"); - } else { - searchEl.classList.add("type-textbox"); - } - - // Used to determine highlighting behavior for this page - // A `q` query param is expected when the user follows a search - // to this page - const currentUrl = new URL(window.location); - const query = currentUrl.searchParams.get(kQueryArg); - const showSearchResults = currentUrl.searchParams.get(kResultsArg); - const mainEl = window.document.querySelector("main"); - - // highlight matches on the page - if (query && mainEl) { - // perform any highlighting - highlight(escapeRegExp(query), mainEl); - - // fix up the URL to remove the q query param - const replacementUrl = new URL(window.location); - replacementUrl.searchParams.delete(kQueryArg); - window.history.replaceState({}, "", replacementUrl); - } - - // function to clear highlighting on the page when the search query changes - // (e.g. if the user edits the query or clears it) - let highlighting = true; - const resetHighlighting = (searchTerm) => { - if (mainEl && highlighting && query && searchTerm !== query) { - clearHighlight(query, mainEl); - highlighting = false; - } - }; - - // Clear search highlighting when the user scrolls sufficiently - const resetFn = () => { - resetHighlighting(""); - window.removeEventListener("quarto-hrChanged", resetFn); - window.removeEventListener("quarto-sectionChanged", resetFn); - }; - - // Register this event after the initial scrolling and settling of events - // on the page - window.addEventListener("quarto-hrChanged", resetFn); - window.addEventListener("quarto-sectionChanged", resetFn); - - // Responsively switch to overlay mode if the search is present on the navbar - // Note that switching the sidebar to overlay mode requires more coordinate (not just - // the media query since we generate different HTML for sidebar overlays than we do - // for sidebar input UI) - const detachedMediaQuery = - quartoSearchOptions.type === "overlay" ? "all" : "(max-width: 991px)"; - - // If configured, include the analytics client to send insights - const plugins = configurePlugins(quartoSearchOptions); - - let lastState = null; - const { setIsOpen, setQuery, setCollections } = autocomplete({ - container: searchEl, - detachedMediaQuery: detachedMediaQuery, - defaultActiveItemId: 0, - panelContainer: "#quarto-search-results", - panelPlacement: quartoSearchOptions["panel-placement"], - debug: false, - openOnFocus: true, - plugins, - classNames: { - form: "d-flex", - }, - placeholder: language["search-text-placeholder"], - translations: { - clearButtonTitle: language["search-clear-button-title"], - detachedCancelButtonText: language["search-detached-cancel-button-title"], - submitButtonTitle: language["search-submit-button-title"], - }, - initialState: { - query, - }, - getItemUrl({ item }) { - return item.href; - }, - onStateChange({ state }) { - // If this is a file URL, note that - - // Perhaps reset highlighting - resetHighlighting(state.query); - - // If the panel just opened, ensure the panel is positioned properly - if (state.isOpen) { - if (lastState && !lastState.isOpen) { - setTimeout(() => { - positionPanel(quartoSearchOptions["panel-placement"]); - }, 150); - } - } - - // Perhaps show the copy link - showCopyLink(state.query, quartoSearchOptions); - - lastState = state; - }, - reshape({ sources, state }) { - return sources.map((source) => { - try { - const items = source.getItems(); - - // Validate the items - validateItems(items); - - // group the items by document - const groupedItems = new Map(); - items.forEach((item) => { - const hrefParts = item.href.split("#"); - const baseHref = hrefParts[0]; - const isDocumentItem = hrefParts.length === 1; - - const items = groupedItems.get(baseHref); - if (!items) { - groupedItems.set(baseHref, [item]); - } else { - // If the href for this item matches the document - // exactly, place this item first as it is the item that represents - // the document itself - if (isDocumentItem) { - items.unshift(item); - } else { - items.push(item); - } - groupedItems.set(baseHref, items); - } - }); - - const reshapedItems = []; - let count = 1; - for (const [_key, value] of groupedItems) { - const firstItem = value[0]; - reshapedItems.push({ - ...firstItem, - type: kItemTypeDoc, - }); - - const collapseMatches = quartoSearchOptions["collapse-after"]; - const collapseCount = - typeof collapseMatches === "number" ? collapseMatches : 1; - - if (value.length > 1) { - const target = `search-more-${count}`; - const isExpanded = - state.context.expanded && - state.context.expanded.includes(target); - - const remainingCount = value.length - collapseCount; - - for (let i = 1; i < value.length; i++) { - if (collapseMatches && i === collapseCount) { - reshapedItems.push({ - target, - title: isExpanded - ? language["search-hide-matches-text"] - : remainingCount === 1 - ? `${remainingCount} ${language["search-more-match-text"]}` - : `${remainingCount} ${language["search-more-matches-text"]}`, - type: kItemTypeMore, - href: kItemTypeMoreHref, - }); - } - - if (isExpanded || !collapseMatches || i < collapseCount) { - reshapedItems.push({ - ...value[i], - type: kItemTypeItem, - target, - }); - } - } - } - count += 1; - } - - return { - ...source, - getItems() { - return reshapedItems; - }, - }; - } catch (error) { - // Some form of error occurred - return { - ...source, - getItems() { - return [ - { - title: error.name || "An Error Occurred While Searching", - text: - error.message || - "An unknown error occurred while attempting to perform the requested search.", - type: kItemTypeError, - }, - ]; - }, - }; - } - }); - }, - navigator: { - navigate({ itemUrl }) { - if (itemUrl !== offsetURL(kItemTypeMoreHref)) { - window.location.assign(itemUrl); - } - }, - navigateNewTab({ itemUrl }) { - if (itemUrl !== offsetURL(kItemTypeMoreHref)) { - const windowReference = window.open(itemUrl, "_blank", "noopener"); - if (windowReference) { - windowReference.focus(); - } - } - }, - navigateNewWindow({ itemUrl }) { - if (itemUrl !== offsetURL(kItemTypeMoreHref)) { - window.open(itemUrl, "_blank", "noopener"); - } - }, - }, - getSources({ state, setContext, setActiveItemId, refresh }) { - return [ - { - sourceId: "documents", - getItemUrl({ item }) { - if (item.href) { - return offsetURL(item.href); - } else { - return undefined; - } - }, - onSelect({ - item, - state, - setContext, - setIsOpen, - setActiveItemId, - refresh, - }) { - if (item.type === kItemTypeMore) { - toggleExpanded(item, state, setContext, setActiveItemId, refresh); - - // Toggle more - setIsOpen(true); - } - }, - getItems({ query }) { - if (query === null || query === "") { - return []; - } - - const limit = quartoSearchOptions.limit; - if (quartoSearchOptions.algolia) { - return algoliaSearch(query, limit, quartoSearchOptions.algolia); - } else { - // Fuse search options - const fuseSearchOptions = { - isCaseSensitive: false, - shouldSort: true, - minMatchCharLength: 2, - limit: limit, - }; - - return readSearchData().then(function (fuse) { - return fuseSearch(query, fuse, fuseSearchOptions); - }); - } - }, - templates: { - noResults({ createElement }) { - const hasQuery = lastState.query; - - return createElement( - "div", - { - class: `quarto-search-no-results${ - hasQuery ? "" : " no-query" - }`, - }, - language["search-no-results-text"] - ); - }, - header({ items, createElement }) { - // count the documents - const count = items.filter((item) => { - return item.type === kItemTypeDoc; - }).length; - - if (count > 0) { - return createElement( - "div", - { class: "search-result-header" }, - `${count} ${language["search-matching-documents-text"]}` - ); - } else { - return createElement( - "div", - { class: "search-result-header-no-results" }, - `` - ); - } - }, - footer({ _items, createElement }) { - if ( - quartoSearchOptions.algolia && - quartoSearchOptions.algolia["show-logo"] - ) { - const libDir = quartoSearchOptions.algolia["libDir"]; - const logo = createElement("img", { - src: offsetURL( - `${libDir}/quarto-search/search-by-algolia.svg` - ), - class: "algolia-search-logo", - }); - return createElement( - "a", - { href: "http://www.algolia.com/" }, - logo - ); - } - }, - - item({ item, createElement }) { - return renderItem( - item, - createElement, - state, - setActiveItemId, - setContext, - refresh, - quartoSearchOptions - ); - }, - }, - }, - ]; - }, - }); - - window.quartoOpenSearch = () => { - setIsOpen(false); - setIsOpen(true); - focusSearchInput(); - }; - - document.addEventListener("keyup", (event) => { - const { key } = event; - const kbds = quartoSearchOptions["keyboard-shortcut"]; - const focusedEl = document.activeElement; - - const isFormElFocused = [ - "input", - "select", - "textarea", - "button", - "option", - ].find((tag) => { - return focusedEl.tagName.toLowerCase() === tag; - }); - - if ( - kbds && - kbds.includes(key) && - !isFormElFocused && - !document.activeElement.isContentEditable - ) { - event.preventDefault(); - window.quartoOpenSearch(); - } - }); - - // Remove the labeleledby attribute since it is pointing - // to a non-existent label - if (quartoSearchOptions.type === "overlay") { - const inputEl = window.document.querySelector( - "#quarto-search .aa-Autocomplete" - ); - if (inputEl) { - inputEl.removeAttribute("aria-labelledby"); - } - } - - function throttle(func, wait) { - let waiting = false; - return function () { - if (!waiting) { - func.apply(this, arguments); - waiting = true; - setTimeout(function () { - waiting = false; - }, wait); - } - }; - } - - // If the main document scrolls dismiss the search results - // (otherwise, since they're floating in the document they can scroll with the document) - window.document.body.onscroll = throttle(() => { - // Only do this if we're not detached - // Bug #7117 - // This will happen when the keyboard is shown on ios (resulting in a scroll) - // which then closed the search UI - if (!window.matchMedia(detachedMediaQuery).matches) { - setIsOpen(false); - } - }, 50); - - if (showSearchResults) { - setIsOpen(true); - focusSearchInput(); - } -}); - -function configurePlugins(quartoSearchOptions) { - const autocompletePlugins = []; - const algoliaOptions = quartoSearchOptions.algolia; - if ( - algoliaOptions && - algoliaOptions["analytics-events"] && - algoliaOptions["search-only-api-key"] && - algoliaOptions["application-id"] - ) { - const apiKey = algoliaOptions["search-only-api-key"]; - const appId = algoliaOptions["application-id"]; - - // Aloglia insights may not be loaded because they require cookie consent - // Use deferred loading so events will start being recorded when/if consent - // is granted. - const algoliaInsightsDeferredPlugin = deferredLoadPlugin(() => { - if ( - window.aa && - window["@algolia/autocomplete-plugin-algolia-insights"] - ) { - window.aa("init", { - appId, - apiKey, - useCookie: true, - }); - - const { createAlgoliaInsightsPlugin } = - window["@algolia/autocomplete-plugin-algolia-insights"]; - // Register the insights client - const algoliaInsightsPlugin = createAlgoliaInsightsPlugin({ - insightsClient: window.aa, - onItemsChange({ insights, insightsEvents }) { - const events = insightsEvents.flatMap((event) => { - // This API limits the number of items per event to 20 - const chunkSize = 20; - const itemChunks = []; - const eventItems = event.items; - for (let i = 0; i < eventItems.length; i += chunkSize) { - itemChunks.push(eventItems.slice(i, i + chunkSize)); - } - // Split the items into multiple events that can be sent - const events = itemChunks.map((items) => { - return { - ...event, - items, - }; - }); - return events; - }); - - for (const event of events) { - insights.viewedObjectIDs(event); - } - }, - }); - return algoliaInsightsPlugin; - } - }); - - // Add the plugin - autocompletePlugins.push(algoliaInsightsDeferredPlugin); - return autocompletePlugins; - } -} - -// For plugins that may not load immediately, create a wrapper -// plugin and forward events and plugin data once the plugin -// is initialized. This is useful for cases like cookie consent -// which may prevent the analytics insights event plugin from initializing -// immediately. -function deferredLoadPlugin(createPlugin) { - let plugin = undefined; - let subscribeObj = undefined; - const wrappedPlugin = () => { - if (!plugin && subscribeObj) { - plugin = createPlugin(); - if (plugin && plugin.subscribe) { - plugin.subscribe(subscribeObj); - } - } - return plugin; - }; - - return { - subscribe: (obj) => { - subscribeObj = obj; - }, - onStateChange: (obj) => { - const plugin = wrappedPlugin(); - if (plugin && plugin.onStateChange) { - plugin.onStateChange(obj); - } - }, - onSubmit: (obj) => { - const plugin = wrappedPlugin(); - if (plugin && plugin.onSubmit) { - plugin.onSubmit(obj); - } - }, - onReset: (obj) => { - const plugin = wrappedPlugin(); - if (plugin && plugin.onReset) { - plugin.onReset(obj); - } - }, - getSources: (obj) => { - const plugin = wrappedPlugin(); - if (plugin && plugin.getSources) { - return plugin.getSources(obj); - } else { - return Promise.resolve([]); - } - }, - data: (obj) => { - const plugin = wrappedPlugin(); - if (plugin && plugin.data) { - plugin.data(obj); - } - }, - }; -} - -function validateItems(items) { - // Validate the first item - if (items.length > 0) { - const item = items[0]; - const missingFields = []; - if (item.href == undefined) { - missingFields.push("href"); - } - if (!item.title == undefined) { - missingFields.push("title"); - } - if (!item.text == undefined) { - missingFields.push("text"); - } - - if (missingFields.length === 1) { - throw { - name: `Error: Search index is missing the ${missingFields[0]} field.`, - message: `The items being returned for this search do not include all the required fields. Please ensure that your index items include the ${missingFields[0]} field or use index-fields in your _quarto.yml file to specify the field names.`, - }; - } else if (missingFields.length > 1) { - const missingFieldList = missingFields - .map((field) => { - return `${field}`; - }) - .join(", "); - - throw { - name: `Error: Search index is missing the following fields: ${missingFieldList}.`, - message: `The items being returned for this search do not include all the required fields. Please ensure that your index items includes the following fields: ${missingFieldList}, or use index-fields in your _quarto.yml file to specify the field names.`, - }; - } - } -} - -let lastQuery = null; -function showCopyLink(query, options) { - const language = options.language; - lastQuery = query; - // Insert share icon - const inputSuffixEl = window.document.body.querySelector( - ".aa-Form .aa-InputWrapperSuffix" - ); - - if (inputSuffixEl) { - let copyButtonEl = window.document.body.querySelector( - ".aa-Form .aa-InputWrapperSuffix .aa-CopyButton" - ); - - if (copyButtonEl === null) { - copyButtonEl = window.document.createElement("button"); - copyButtonEl.setAttribute("class", "aa-CopyButton"); - copyButtonEl.setAttribute("type", "button"); - copyButtonEl.setAttribute("title", language["search-copy-link-title"]); - copyButtonEl.onmousedown = (e) => { - e.preventDefault(); - e.stopPropagation(); - }; - - const linkIcon = "bi-clipboard"; - const checkIcon = "bi-check2"; - - const shareIconEl = window.document.createElement("i"); - shareIconEl.setAttribute("class", `bi ${linkIcon}`); - copyButtonEl.appendChild(shareIconEl); - inputSuffixEl.prepend(copyButtonEl); - - const clipboard = new window.ClipboardJS(".aa-CopyButton", { - text: function (_trigger) { - const copyUrl = new URL(window.location); - copyUrl.searchParams.set(kQueryArg, lastQuery); - copyUrl.searchParams.set(kResultsArg, "1"); - return copyUrl.toString(); - }, - }); - clipboard.on("success", function (e) { - // Focus the input - - // button target - const button = e.trigger; - const icon = button.querySelector("i.bi"); - - // flash "checked" - icon.classList.add(checkIcon); - icon.classList.remove(linkIcon); - setTimeout(function () { - icon.classList.remove(checkIcon); - icon.classList.add(linkIcon); - }, 1000); - }); - } - - // If there is a query, show the link icon - if (copyButtonEl) { - if (lastQuery && options["copy-button"]) { - copyButtonEl.style.display = "flex"; - } else { - copyButtonEl.style.display = "none"; - } - } - } -} - -/* Search Index Handling */ -// create the index -var fuseIndex = undefined; -var shownWarning = false; - -// fuse index options -const kFuseIndexOptions = { - keys: [ - { name: "title", weight: 20 }, - { name: "section", weight: 20 }, - { name: "text", weight: 10 }, - ], - ignoreLocation: true, - threshold: 0.1, -}; - -async function readSearchData() { - // Initialize the search index on demand - if (fuseIndex === undefined) { - if (window.location.protocol === "file:" && !shownWarning) { - window.alert( - "Search requires JavaScript features disabled when running in file://... URLs. In order to use search, please run this document in a web server." - ); - shownWarning = true; - return; - } - const fuse = new window.Fuse([], kFuseIndexOptions); - - // fetch the main search.json - const response = await fetch(offsetURL("search.json")); - if (response.status == 200) { - return response.json().then(function (searchDocs) { - searchDocs.forEach(function (searchDoc) { - fuse.add(searchDoc); - }); - fuseIndex = fuse; - return fuseIndex; - }); - } else { - return Promise.reject( - new Error( - "Unexpected status from search index request: " + response.status - ) - ); - } - } - - return fuseIndex; -} - -function inputElement() { - return window.document.body.querySelector(".aa-Form .aa-Input"); -} - -function focusSearchInput() { - setTimeout(() => { - const inputEl = inputElement(); - if (inputEl) { - inputEl.focus(); - } - }, 50); -} - -/* Panels */ -const kItemTypeDoc = "document"; -const kItemTypeMore = "document-more"; -const kItemTypeItem = "document-item"; -const kItemTypeError = "error"; - -function renderItem( - item, - createElement, - state, - setActiveItemId, - setContext, - refresh, - quartoSearchOptions -) { - switch (item.type) { - case kItemTypeDoc: - return createDocumentCard( - createElement, - "file-richtext", - item.title, - item.section, - item.text, - item.href, - item.crumbs, - quartoSearchOptions - ); - case kItemTypeMore: - return createMoreCard( - createElement, - item, - state, - setActiveItemId, - setContext, - refresh - ); - case kItemTypeItem: - return createSectionCard( - createElement, - item.section, - item.text, - item.href - ); - case kItemTypeError: - return createErrorCard(createElement, item.title, item.text); - default: - return undefined; - } -} - -function createDocumentCard( - createElement, - icon, - title, - section, - text, - href, - crumbs, - quartoSearchOptions -) { - const iconEl = createElement("i", { - class: `bi bi-${icon} search-result-icon`, - }); - const titleEl = createElement("p", { class: "search-result-title" }, title); - const titleContents = [iconEl, titleEl]; - const showParent = quartoSearchOptions["show-item-context"]; - if (crumbs && showParent) { - let crumbsOut = undefined; - const crumbClz = ["search-result-crumbs"]; - if (showParent === "root") { - crumbsOut = crumbs.length > 1 ? crumbs[0] : undefined; - } else if (showParent === "parent") { - crumbsOut = crumbs.length > 1 ? crumbs[crumbs.length - 2] : undefined; - } else { - crumbsOut = crumbs.length > 1 ? crumbs.join(" > ") : undefined; - crumbClz.push("search-result-crumbs-wrap"); - } - - const crumbEl = createElement( - "p", - { class: crumbClz.join(" ") }, - crumbsOut - ); - titleContents.push(crumbEl); - } - - const titleContainerEl = createElement( - "div", - { class: "search-result-title-container" }, - titleContents - ); - - const textEls = []; - if (section) { - const sectionEl = createElement( - "p", - { class: "search-result-section" }, - section - ); - textEls.push(sectionEl); - } - const descEl = createElement("p", { - class: "search-result-text", - dangerouslySetInnerHTML: { - __html: text, - }, - }); - textEls.push(descEl); - - const textContainerEl = createElement( - "div", - { class: "search-result-text-container" }, - textEls - ); - - const containerEl = createElement( - "div", - { - class: "search-result-container", - }, - [titleContainerEl, textContainerEl] - ); - - const linkEl = createElement( - "a", - { - href: offsetURL(href), - class: "search-result-link", - }, - containerEl - ); - - const classes = ["search-result-doc", "search-item"]; - if (!section) { - classes.push("document-selectable"); - } - - return createElement( - "div", - { - class: classes.join(" "), - }, - linkEl - ); -} - -function createMoreCard( - createElement, - item, - state, - setActiveItemId, - setContext, - refresh -) { - const moreCardEl = createElement( - "div", - { - class: "search-result-more search-item", - onClick: (e) => { - // Handle expanding the sections by adding the expanded - // section to the list of expanded sections - toggleExpanded(item, state, setContext, setActiveItemId, refresh); - e.stopPropagation(); - }, - }, - item.title - ); - - return moreCardEl; -} - -function toggleExpanded(item, state, setContext, setActiveItemId, refresh) { - const expanded = state.context.expanded || []; - if (expanded.includes(item.target)) { - setContext({ - expanded: expanded.filter((target) => target !== item.target), - }); - } else { - setContext({ expanded: [...expanded, item.target] }); - } - - refresh(); - setActiveItemId(item.__autocomplete_id); -} - -function createSectionCard(createElement, section, text, href) { - const sectionEl = createSection(createElement, section, text, href); - return createElement( - "div", - { - class: "search-result-doc-section search-item", - }, - sectionEl - ); -} - -function createSection(createElement, title, text, href) { - const descEl = createElement("p", { - class: "search-result-text", - dangerouslySetInnerHTML: { - __html: text, - }, - }); - - const titleEl = createElement("p", { class: "search-result-section" }, title); - const linkEl = createElement( - "a", - { - href: offsetURL(href), - class: "search-result-link", - }, - [titleEl, descEl] - ); - return linkEl; -} - -function createErrorCard(createElement, title, text) { - const descEl = createElement("p", { - class: "search-error-text", - dangerouslySetInnerHTML: { - __html: text, - }, - }); - - const titleEl = createElement("p", { - class: "search-error-title", - dangerouslySetInnerHTML: { - __html: ` ${title}`, - }, - }); - const errorEl = createElement("div", { class: "search-error" }, [ - titleEl, - descEl, - ]); - return errorEl; -} - -function positionPanel(pos) { - const panelEl = window.document.querySelector( - "#quarto-search-results .aa-Panel" - ); - const inputEl = window.document.querySelector( - "#quarto-search .aa-Autocomplete" - ); - - if (panelEl && inputEl) { - panelEl.style.top = `${Math.round(panelEl.offsetTop)}px`; - if (pos === "start") { - panelEl.style.left = `${Math.round(inputEl.left)}px`; - } else { - panelEl.style.right = `${Math.round(inputEl.offsetRight)}px`; - } - } -} - -/* Highlighting */ -// highlighting functions -function highlightMatch(query, text) { - if (text) { - const start = text.toLowerCase().indexOf(query.toLowerCase()); - if (start !== -1) { - const startMark = ""; - const endMark = ""; - - const end = start + query.length; - text = - text.slice(0, start) + - startMark + - text.slice(start, end) + - endMark + - text.slice(end); - const startInfo = clipStart(text, start); - const endInfo = clipEnd( - text, - startInfo.position + startMark.length + endMark.length - ); - text = - startInfo.prefix + - text.slice(startInfo.position, endInfo.position) + - endInfo.suffix; - - return text; - } else { - return text; - } - } else { - return text; - } -} - -function clipStart(text, pos) { - const clipStart = pos - 50; - if (clipStart < 0) { - // This will just return the start of the string - return { - position: 0, - prefix: "", - }; - } else { - // We're clipping before the start of the string, walk backwards to the first space. - const spacePos = findSpace(text, pos, -1); - return { - position: spacePos.position, - prefix: "", - }; - } -} - -function clipEnd(text, pos) { - const clipEnd = pos + 200; - if (clipEnd > text.length) { - return { - position: text.length, - suffix: "", - }; - } else { - const spacePos = findSpace(text, clipEnd, 1); - return { - position: spacePos.position, - suffix: spacePos.clipped ? "…" : "", - }; - } -} - -function findSpace(text, start, step) { - let stepPos = start; - while (stepPos > -1 && stepPos < text.length) { - const char = text[stepPos]; - if (char === " " || char === "," || char === ":") { - return { - position: step === 1 ? stepPos : stepPos - step, - clipped: stepPos > 1 && stepPos < text.length, - }; - } - stepPos = stepPos + step; - } - - return { - position: stepPos - step, - clipped: false, - }; -} - -// removes highlighting as implemented by the mark tag -function clearHighlight(searchterm, el) { - const childNodes = el.childNodes; - for (let i = childNodes.length - 1; i >= 0; i--) { - const node = childNodes[i]; - if (node.nodeType === Node.ELEMENT_NODE) { - if ( - node.tagName === "MARK" && - node.innerText.toLowerCase() === searchterm.toLowerCase() - ) { - el.replaceChild(document.createTextNode(node.innerText), node); - } else { - clearHighlight(searchterm, node); - } - } - } -} - -function escapeRegExp(string) { - return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string -} - -// highlight matches -function highlight(term, el) { - const termRegex = new RegExp(term, "ig"); - const childNodes = el.childNodes; - - // walk back to front avoid mutating elements in front of us - for (let i = childNodes.length - 1; i >= 0; i--) { - const node = childNodes[i]; - - if (node.nodeType === Node.TEXT_NODE) { - // Search text nodes for text to highlight - const text = node.nodeValue; - - let startIndex = 0; - let matchIndex = text.search(termRegex); - if (matchIndex > -1) { - const markFragment = document.createDocumentFragment(); - while (matchIndex > -1) { - const prefix = text.slice(startIndex, matchIndex); - markFragment.appendChild(document.createTextNode(prefix)); - - const mark = document.createElement("mark"); - mark.appendChild( - document.createTextNode( - text.slice(matchIndex, matchIndex + term.length) - ) - ); - markFragment.appendChild(mark); - - startIndex = matchIndex + term.length; - matchIndex = text.slice(startIndex).search(new RegExp(term, "ig")); - if (matchIndex > -1) { - matchIndex = startIndex + matchIndex; - } - } - if (startIndex < text.length) { - markFragment.appendChild( - document.createTextNode(text.slice(startIndex, text.length)) - ); - } - - el.replaceChild(markFragment, node); - } - } else if (node.nodeType === Node.ELEMENT_NODE) { - // recurse through elements - highlight(term, node); - } - } -} - -/* Link Handling */ -// get the offset from this page for a given site root relative url -function offsetURL(url) { - var offset = getMeta("quarto:offset"); - return offset ? offset + url : url; -} - -// read a meta tag value -function getMeta(metaName) { - var metas = window.document.getElementsByTagName("meta"); - for (let i = 0; i < metas.length; i++) { - if (metas[i].getAttribute("name") === metaName) { - return metas[i].getAttribute("content"); - } - } - return ""; -} - -function algoliaSearch(query, limit, algoliaOptions) { - const { getAlgoliaResults } = window["@algolia/autocomplete-preset-algolia"]; - - const applicationId = algoliaOptions["application-id"]; - const searchOnlyApiKey = algoliaOptions["search-only-api-key"]; - const indexName = algoliaOptions["index-name"]; - const indexFields = algoliaOptions["index-fields"]; - const searchClient = window.algoliasearch(applicationId, searchOnlyApiKey); - const searchParams = algoliaOptions["params"]; - const searchAnalytics = !!algoliaOptions["analytics-events"]; - - return getAlgoliaResults({ - searchClient, - queries: [ - { - indexName: indexName, - query, - params: { - hitsPerPage: limit, - clickAnalytics: searchAnalytics, - ...searchParams, - }, - }, - ], - transformResponse: (response) => { - if (!indexFields) { - return response.hits.map((hit) => { - return hit.map((item) => { - return { - ...item, - text: highlightMatch(query, item.text), - }; - }); - }); - } else { - const remappedHits = response.hits.map((hit) => { - return hit.map((item) => { - const newItem = { ...item }; - ["href", "section", "title", "text", "crumbs"].forEach( - (keyName) => { - const mappedName = indexFields[keyName]; - if ( - mappedName && - item[mappedName] !== undefined && - mappedName !== keyName - ) { - newItem[keyName] = item[mappedName]; - delete newItem[mappedName]; - } - } - ); - newItem.text = highlightMatch(query, newItem.text); - return newItem; - }); - }); - return remappedHits; - } - }, - }); -} - -let subSearchTerm = undefined; -let subSearchFuse = undefined; -const kFuseMaxWait = 125; - -async function fuseSearch(query, fuse, fuseOptions) { - let index = fuse; - // Fuse.js using the Bitap algorithm for text matching which runs in - // O(nm) time (no matter the structure of the text). In our case this - // means that long search terms mixed with large index gets very slow - // - // This injects a subIndex that will be used once the terms get long enough - // Usually making this subindex is cheap since there will typically be - // a subset of results matching the existing query - if (subSearchFuse !== undefined && query.startsWith(subSearchTerm)) { - // Use the existing subSearchFuse - index = subSearchFuse; - } else if (subSearchFuse !== undefined) { - // The term changed, discard the existing fuse - subSearchFuse = undefined; - subSearchTerm = undefined; - } - - // Search using the active fuse - const then = performance.now(); - const resultsRaw = await index.search(query, fuseOptions); - const now = performance.now(); - - const results = resultsRaw.map((result) => { - const addParam = (url, name, value) => { - const anchorParts = url.split("#"); - const baseUrl = anchorParts[0]; - const sep = baseUrl.search("\\?") > 0 ? "&" : "?"; - anchorParts[0] = baseUrl + sep + name + "=" + value; - return anchorParts.join("#"); - }; - - return { - title: result.item.title, - section: result.item.section, - href: addParam(result.item.href, kQueryArg, query), - text: highlightMatch(query, result.item.text), - crumbs: result.item.crumbs, - }; - }); - - // If we don't have a subfuse and the query is long enough, go ahead - // and create a subfuse to use for subsequent queries - if ( - now - then > kFuseMaxWait && - subSearchFuse === undefined && - resultsRaw.length < fuseOptions.limit - ) { - subSearchTerm = query; - subSearchFuse = new window.Fuse([], kFuseIndexOptions); - resultsRaw.forEach((rr) => { - subSearchFuse.add(rr.item); - }); - } - return results; -} diff --git a/docs/docs/theme.scss b/docs/docs/theme.scss deleted file mode 100644 index 30df0d3..0000000 --- a/docs/docs/theme.scss +++ /dev/null @@ -1,31 +0,0 @@ -/*-- scss:defaults --*/ -$primary: #39729E !default; -$link-color: #39729E !default; - -/*-- scss:rules --*/ - -.sidebar-title { - color: #39729E; -} - -div.sidebar-item-container .active { - font-weight: bold; -} - -.sidebar nav[role=doc-toc] ul>li>a.active, .sidebar nav[role=doc-toc] ul>li>ul>li>a.active{ - font-weight: bold; -} - -/* Code ------------------------------------------------ */ - -code { - color: #373a3c; -} - -code a:any-link { - text-decoration: underline; - text-decoration-color: #ccc; -} - - - From fd348869c3d06c19008fb11587f649bb528d7635 Mon Sep 17 00:00:00 2001 From: Hirototensho Date: Fri, 23 Jan 2026 23:17:27 +0900 Subject: [PATCH 11/19] =?UTF-8?q?docs=20=E3=81=AE=E3=83=87=E3=82=A3?= =?UTF-8?q?=E3=83=AC=E3=82=AF=E3=83=88=E3=83=AA=E6=A7=8B=E6=88=90=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 +- docs/.gitignore | 2 - .../eda_tools_development_status.html | 1193 ++++++++++ docs/articles/narwhals_in_py4stats.html | 975 ++++++++ ...\343\201\256\350\200\203\345\257\237.html" | 1028 ++++++++ docs/index.html | 1058 +++++++++ docs/introduction.html | 1358 +++++++++++ docs/man/Blinder_Oaxaca.html | 1141 +++++++++ docs/man/Heckit_from_formula.html | 1001 ++++++++ docs/man/Pareto_plot.html | 970 ++++++++ docs/man/arg_match.html | 985 ++++++++ docs/man/assert_dtype.html | 1060 +++++++++ docs/man/coefplot.html | 1011 ++++++++ docs/man/compare_df_cols.html | 977 ++++++++ docs/man/compare_group_stats.html | 1063 +++++++++ docs/man/compare_mfx.html | 1093 +++++++++ docs/man/compare_ols.html | 1413 +++++++++++ docs/man/diagnose.html | 943 ++++++++ docs/man/diagnose_category.html | 988 ++++++++ docs/man/filtering_out.html | 988 ++++++++ docs/man/freq_table.html | 984 ++++++++ docs/man/glance.html | 949 ++++++++ docs/man/heckitmfx_compute.html | 1029 ++++++++ docs/man/image/Pareto_plot1.png | Bin 0 -> 25849 bytes docs/man/image/Pareto_plot2.png | Bin 0 -> 27946 bytes docs/man/image/Pareto_plot3.png | Bin 0 -> 28448 bytes docs/man/image/coefplot1.png | Bin 0 -> 17557 bytes docs/man/image/coefplot2.png | Bin 0 -> 24639 bytes docs/man/image/coefplot3.png | Bin 0 -> 23963 bytes docs/man/image/plot_Blinder_Oaxaca1.png | Bin 0 -> 21792 bytes docs/man/image/plot_Blinder_Oaxaca2.png | Bin 0 -> 16077 bytes docs/man/image/plot_category1.png | Bin 0 -> 23258 bytes docs/man/image/plot_category2.png | Bin 0 -> 27997 bytes docs/man/image/plot_mean_diff1.png | Bin 0 -> 13213 bytes docs/man/image/plot_mean_diff2.png | Bin 0 -> 13819 bytes docs/man/image/plot_median_diff1.png | Bin 0 -> 13379 bytes docs/man/image/plot_miss_var1.png | Bin 0 -> 16981 bytes docs/man/image/plot_miss_var2.png | Bin 0 -> 13189 bytes docs/man/image/set_miss.png | Bin 0 -> 15691 bytes docs/man/is_dtype.html | 962 ++++++++ docs/man/is_dummy.html | 972 ++++++++ docs/man/miscellaneous.html | 957 ++++++++ docs/man/oxford_comma.html | 941 ++++++++ docs/man/plot_category.html | 992 ++++++++ docs/man/plot_miss_var.html | 957 ++++++++ docs/man/point_range.html | 972 ++++++++ docs/man/predicate_str.html | 1003 ++++++++ docs/man/relocate.html | 994 ++++++++ docs/man/remove_empty_constant.html | 1017 ++++++++ docs/man/scale_wmean.html | 1013 ++++++++ docs/man/set_miss.html | 976 ++++++++ docs/man/style_pvalue.html | 964 ++++++++ docs/man/tabyl.html | 971 ++++++++ docs/man/tidy.html | 1026 ++++++++ docs/man/tidy_heckit.html | 1018 ++++++++ docs/man/tidy_test.html | 958 ++++++++ docs/man/varidate.html | 1040 ++++++++ docs/reference.html | 996 ++++++++ docs/search.json | 2050 ++++++++++++++++ ...p-322e28c2ea576fd4147837fb8c5b7a3d.min.css | 12 + docs/site_libs/bootstrap/bootstrap-icons.css | 2106 +++++++++++++++++ docs/site_libs/bootstrap/bootstrap-icons.woff | Bin 0 -> 180288 bytes docs/site_libs/bootstrap/bootstrap.min.js | 7 + docs/site_libs/clipboard/clipboard.min.js | 7 + docs/site_libs/quarto-html/anchor.min.js | 9 + docs/site_libs/quarto-html/axe/axe-check.js | 145 ++ docs/site_libs/quarto-html/popper.min.js | 6 + ...hting-ed96de9b727972fe78a7b5d16c58bf87.css | 236 ++ docs/site_libs/quarto-html/quarto.js | 847 +++++++ docs/site_libs/quarto-html/tabsets/tabsets.js | 95 + docs/site_libs/quarto-html/tippy.css | 1 + docs/site_libs/quarto-html/tippy.umd.min.js | 2 + docs/site_libs/quarto-nav/headroom.min.js | 7 + docs/site_libs/quarto-nav/quarto-nav.js | 325 +++ .../quarto-search/autocomplete.umd.js | 3 + docs/site_libs/quarto-search/fuse.min.js | 9 + docs/site_libs/quarto-search/quarto-search.js | 1290 ++++++++++ docs/theme.scss | 31 + 78 files changed, 48127 insertions(+), 3 deletions(-) delete mode 100644 docs/.gitignore create mode 100644 docs/articles/eda_tools_development_status.html create mode 100644 docs/articles/narwhals_in_py4stats.html create mode 100644 "docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.html" create mode 100644 docs/index.html create mode 100644 docs/introduction.html create mode 100644 docs/man/Blinder_Oaxaca.html create mode 100644 docs/man/Heckit_from_formula.html create mode 100644 docs/man/Pareto_plot.html create mode 100644 docs/man/arg_match.html create mode 100644 docs/man/assert_dtype.html create mode 100644 docs/man/coefplot.html create mode 100644 docs/man/compare_df_cols.html create mode 100644 docs/man/compare_group_stats.html create mode 100644 docs/man/compare_mfx.html create mode 100644 docs/man/compare_ols.html create mode 100644 docs/man/diagnose.html create mode 100644 docs/man/diagnose_category.html create mode 100644 docs/man/filtering_out.html create mode 100644 docs/man/freq_table.html create mode 100644 docs/man/glance.html create mode 100644 docs/man/heckitmfx_compute.html create mode 100644 docs/man/image/Pareto_plot1.png create mode 100644 docs/man/image/Pareto_plot2.png create mode 100644 docs/man/image/Pareto_plot3.png create mode 100644 docs/man/image/coefplot1.png create mode 100644 docs/man/image/coefplot2.png create mode 100644 docs/man/image/coefplot3.png create mode 100644 docs/man/image/plot_Blinder_Oaxaca1.png create mode 100644 docs/man/image/plot_Blinder_Oaxaca2.png create mode 100644 docs/man/image/plot_category1.png create mode 100644 docs/man/image/plot_category2.png create mode 100644 docs/man/image/plot_mean_diff1.png create mode 100644 docs/man/image/plot_mean_diff2.png create mode 100644 docs/man/image/plot_median_diff1.png create mode 100644 docs/man/image/plot_miss_var1.png create mode 100644 docs/man/image/plot_miss_var2.png create mode 100644 docs/man/image/set_miss.png create mode 100644 docs/man/is_dtype.html create mode 100644 docs/man/is_dummy.html create mode 100644 docs/man/miscellaneous.html create mode 100644 docs/man/oxford_comma.html create mode 100644 docs/man/plot_category.html create mode 100644 docs/man/plot_miss_var.html create mode 100644 docs/man/point_range.html create mode 100644 docs/man/predicate_str.html create mode 100644 docs/man/relocate.html create mode 100644 docs/man/remove_empty_constant.html create mode 100644 docs/man/scale_wmean.html create mode 100644 docs/man/set_miss.html create mode 100644 docs/man/style_pvalue.html create mode 100644 docs/man/tabyl.html create mode 100644 docs/man/tidy.html create mode 100644 docs/man/tidy_heckit.html create mode 100644 docs/man/tidy_test.html create mode 100644 docs/man/varidate.html create mode 100644 docs/reference.html create mode 100644 docs/search.json create mode 100644 docs/site_libs/bootstrap/bootstrap-322e28c2ea576fd4147837fb8c5b7a3d.min.css create mode 100644 docs/site_libs/bootstrap/bootstrap-icons.css create mode 100644 docs/site_libs/bootstrap/bootstrap-icons.woff create mode 100644 docs/site_libs/bootstrap/bootstrap.min.js create mode 100644 docs/site_libs/clipboard/clipboard.min.js create mode 100644 docs/site_libs/quarto-html/anchor.min.js create mode 100644 docs/site_libs/quarto-html/axe/axe-check.js create mode 100644 docs/site_libs/quarto-html/popper.min.js create mode 100644 docs/site_libs/quarto-html/quarto-syntax-highlighting-ed96de9b727972fe78a7b5d16c58bf87.css create mode 100644 docs/site_libs/quarto-html/quarto.js create mode 100644 docs/site_libs/quarto-html/tabsets/tabsets.js create mode 100644 docs/site_libs/quarto-html/tippy.css create mode 100644 docs/site_libs/quarto-html/tippy.umd.min.js create mode 100644 docs/site_libs/quarto-nav/headroom.min.js create mode 100644 docs/site_libs/quarto-nav/quarto-nav.js create mode 100644 docs/site_libs/quarto-search/autocomplete.umd.js create mode 100644 docs/site_libs/quarto-search/fuse.min.js create mode 100644 docs/site_libs/quarto-search/quarto-search.js create mode 100644 docs/theme.scss diff --git a/.gitignore b/.gitignore index 83a655b..2804844 100644 --- a/.gitignore +++ b/.gitignore @@ -18,4 +18,6 @@ venv/ # packaging/build artifacts *.egg-info/ build/ -dist/ \ No newline at end of file +dist/ +/.quarto/ +**/*.quarto_ipynb diff --git a/docs/.gitignore b/docs/.gitignore deleted file mode 100644 index ad29309..0000000 --- a/docs/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/.quarto/ -**/*.quarto_ipynb diff --git a/docs/articles/eda_tools_development_status.html b/docs/articles/eda_tools_development_status.html new file mode 100644 index 0000000..0f996c7 --- /dev/null +++ b/docs/articles/eda_tools_development_status.html @@ -0,0 +1,1193 @@ + + + + + + + + + +39  eda_toolsの開発状況 – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

39  eda_toolsの開発状況

+
+ + + +
+ + + + +
+ + + +
+ + +

2026年1月22日

+

eda_toolsの開発状況

+ ++++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
functionsInputPandasPolarsPyarrow補足
Meanpd.Seriespd.DataFrame.eval() での使用を想定した関数
Medianpd.Seriespd.DataFrame.eval() での使用を想定した関数
Maxpd.Seriespd.DataFrame.eval() での使用を想定した関数
Minpd.Seriespd.DataFrame.eval() での使用を想定した関数
Pareto_plotDataFrame
Sumpd.Seriespd.DataFrame.eval() での使用を想定した関数
check_thatDataFrame⭕️⭕️実装に pd.DataFrame.eval() を使用
check_viorateDataFrame⭕️⭕️実装に pd.DataFrame.eval() を使用
compare_df_colsDataFrame
compare_df_recordDataFrame
compare_df_statsDataFrame
compare_group_meansDataFrame
compare_group_medianDataFrame
crosstabDataFrame⭕️Pyarrow は Polars 依存の実装
diagnoseDataFrame
diagnose_categoryDataFrame
filtering_outDataFrame
freq_tableDataFrame
implies_experpd.Seriespd.DataFrame.eval() での使用を想定した関数
is_dummyDataFrame/Series
is_numberSeries
is_ymd_likeSeries
is_ymdSeries
mean_ciDataFrame/Series
mean_qiDataFrame/Series
median_qiDataFrame/Series
min_maxSeries
plot_mean_diffDataFrame
plot_median_diffDataFrame
plot_miss_varDataFrame
scaleSeries
set_missSeries
relocateDataFrame
remove_constantDataFrame
remove_emptyDataFrame
tabylDataFrame⭕️⭕️一部の処理が Pandas 依存
weighted_meanSeries
+
+

39.1 凡例

+
    +
  • ✅ 実装済/テスト済
  • +
  • ⭕️ 実装済/テスト済(異なるバックエンドに依存)
  • +
  • 🔼 実装済/テスト未
  • +
  • ❌ 未実装
  • +
+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/articles/narwhals_in_py4stats.html b/docs/articles/narwhals_in_py4stats.html new file mode 100644 index 0000000..d1b855b --- /dev/null +++ b/docs/articles/narwhals_in_py4stats.html @@ -0,0 +1,975 @@ + + + + + + + + + +38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装 – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装

+
+ + + +
+ + + + +
+ + + +
+ + +
+

38.1 概要

+

py4stats.eda_tools モジュールは、複数の DataFrame バックエンドに対して共通の API を提供することを目的として、narwhals ライブラリを用いて実装されています。

+

本ドキュメントでは、本モジュールの内部実装に関する前提条件や、バックエンドの違いに起因する挙動上の注意点について説明します。

+

通常の利用にあたって本ドキュメントを読む必要はありませんが、実装の詳細や挙動の違いが気になる場合には参考にしてください。

+
+
+

38.2 対応している DataFrame バックエンドについて

+

 py4stats.eda_tools モジュールの関数は、第一引数として narwhals.from_native() によって nw.DataFrame 型へ変換可能な DataFrame オブジェクトを受け取ります。

+

具体的には、以下のようなバックエンドを想定しています。

+
    +
  • pandas.DataFrame(主に動作検証を行っているバックエンド)
  • +
  • polars.DataFrame(簡易的な動作確認のみ)
  • +
  • pyarrow.Table(簡易的な動作確認のみ)
  • +
+

本ライブラリの動作確認は、基本的に pandas.DataFrame を用いて実施しています。そのため、polarspyarrow を使用した場合には、バックエンド固有の仕様差や未検証の挙動により、一部の関数でエラーが発生する可能性があります。そのような挙動が確認された場合は、Issue 等での報告を歓迎します。

+

 また、バックエンド別の実装状況については eda_tools開発状況 も参照して下さい。

+
+
+

38.3 narwhals を用いた関数の返り値の型について

+

py4stats.eda_tools モジュールの関数のうち、py4stats.diagnose() など、第一引数にデータフレームを取る関数の返り値の型は、to_native 引数の値によって変化します。
 初期設定である to_nativ = True の場合には、第一引数に入力されたデータフレームと同じ型のデータフレームが出力され、to_nativ = False の場合には narwhals.DataFrame 型のデータフレームが出力されます。to_nativ = False のオプションは、主にライブラリ内部での利用や、データフレームのバックエンドに依存しない後続処理を行いたい場合を想定したオプションです。

+
import py4stats as py4st
+import pandas as pd
+import polars as pl
+import pyarrow as pa
+import wooldridge
+mroz_pd = wooldridge.data('mroz')       # pd.DataFrame
+mroz_pl = pl.from_pandas(mroz_pd)       # pl.DataFrame
+mroz_pa = pa.Table.from_pandas(mroz_pd) # pyarrow.lib.Table
+
# to_nativ = True の場合(初期設定): 入力されたデータフレームと同じ型
+
+print(type(py4st.diagnose(mroz_pd, to_native = True)))
+#> <class 'pandas.core.frame.DataFrame'>
+
+print(type(py4st.diagnose(mroz_pl, to_native = True)))
+#> <class 'polars.dataframe.frame.DataFrame'>
+
+print(type(py4st.diagnose(mroz_pa, to_native = True)))
+#> <class 'pyarrow.lib.Table'>
+
# to_nativ = False の場合: narwhals.DataFrame 型
+
+print(type(py4st.diagnose(mroz_pd, to_native = False)))
+#> <class 'narwhals.dataframe.DataFrame'>
+
+print(type(py4st.diagnose(mroz_pl, to_native = False)))
+#> <class 'narwhals.dataframe.DataFrame'>
+
+print(type(py4st.diagnose(mroz_pa, to_native = False)))
+#> <class 'narwhals.dataframe.DataFrame'>
+
+
+

38.4 narwhals を用いた実装方針について

+

 内部実装では、関数の冒頭で

+
nw.from_native(data)
+

を用いて入力データを nw.DataFrame に変換し、以降の処理を narwhals の抽象 API 上で行っています。

+

この設計により、DataFrame バックエンドごとの差異を最小限に抑えつつ、将来的な拡張性を確保することを目的としています。

+

一方で、narwhals は各バックエンドの完全な互換性を保証するものではないため、特定の操作や型変換についてはバックエンドごとに挙動が異なる場合があります。

+
+
+

38.5  pandas_flavor を用いた DataFrame メソッド登録について

+

py4stats.eda_tools の関数のうち、単一の DataFrame オブジェクトを引数として受け取る関数については、pandas_flavor.register_dataframe_method を用いて DataFrame メソッドとして登録されています。その結果、以下のような使い方が可能です。

+
df.diagnose()
+

ただし、pandas_flavor は pandas の拡張を前提とした仕組みであるため、このメソッド形式の呼び出しは、pandas.DataFrame を対象としています。  polars.DataFrame や pyarrow ベースのオブジェクトを使用する場合には、関数として直接呼び出す形での利用を推奨します。

+
import py4stats as py4st
+
+py4st.diagnose(df)
+
+
+

38.6 今後について

+

 py4stats.eda_tools モジュールは、今後も narwhals ベースの実装を主軸として改良・拡張を行っていく予定です。一方で、従来の pandas ベースの実装については、互換性のために当面は保持される予定ですが、機能追加は行わない予定です。バックエンドごとの挙動差や制限事項については、必要に応じて本ドキュメントを更新していきます。

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git "a/docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.html" "b/docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.html" new file mode 100644 index 0000000..5f797bc --- /dev/null +++ "b/docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.html" @@ -0,0 +1,1028 @@ + + + + + + + + + +40  narwhals についての考察 – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

40  narwhals についての考察

+
+ + + +
+ + + + +
+ + + +
+ + +
+

40.1 narwhals での再現が難しい Pandas の機能

+
+

40.1.1 異なるデータフレーム間の二項演算

+

Pandas の場合、2つのデータフレーム df1df2 が共通の columns と index をもつ限り、df3 = df1 + df2 によって二項演算を行うことができ、このとき、columns と index をもつ要素同士が加算されます。しかし、narwhals には Pandas のような index が存在しないため、この計算は再現が困難です。

+
+
+

40.1.2 データフレームへの値の代入

+

Pandas の場合、df.loc[i, j] = x という形でデータフレーム df の i, j 要素に値 x を代入することができますが、narwhals ではこれに相当する演算 df[i, j] = x は禁止されています。

+

異なるデータフレーム間の二項演算に制約があること、そしてデータフレームへの値の代入が難しいことから、tabyl() 関数では、集計後の作表処理の一部を Pandas に依存しています。

+
+
+

40.1.3 任意の関数でグループ別集計を行う

+

自作関数を使ってグループ別集計を行いたい場合、Pandas であれば df.groupby(group)[x].agg(my_func) で行うことができます。同じく narwhals でも

+
data_nw.group_by(nw.col(group)).agg(nw.col('x').mean())
+

という形でグループ別の集計がサポートされているものの、ここで使用できる集計関数は narwhals で実装されているものに限定されるようで、次のような方法で自作関数を使用することはできません。

+
data_nw.group_by(nw.col(group)).agg(nw.col('x').my_func())
+data_nw.group_by(nw.col(group)).agg(my_func(nw.col('x')))
+

例えば Py4Stats では、Pareto_plot() 関数の内部実装に使用している make_rank_table() 関数において、任意の aggfunc() 関数をグループ別集計に使うために、サブセッティングを使って group_by() メソッドの使用を回避するという変則的(かつ、おそらく非効率な)な実装を行なっています。

+
stat_values = [
+            aggfunc(
+                data_nw.filter(nw.col(group) == g)[values]
+                .drop_nulls().to_native()
+                ) 
+            for g in group_value
+            ]
+

また、上記の回避策のもう1つの問題として、data_nw.filter(nw.col(group) == g) では、複数の変数に基づくグループ化に対応できないことも挙げられます。make_rank_table() 関数については、Pareto_plot() 関数でパレート図を作図するときに横軸になる group が多変数だと対応できないので、group が1変数(= 引数として1つの文字列だけを受け付ける)とすることで妥協しています。

+

ただ、現時点で narwhals.GroupBy クラスに実装されているメソッドは .agg() しかなく、開発が進めばより柔軟な関数適用が可能になるのではないかと期待しています。

+
+
+
+

40.2 narwhals におけるバックエンドとその書き換え

+
+

40.2.1 バックエンドの基本的な理解

+

narwhals におけるバックエンドによる型変換の基本的な理解として(不正確かもしれませんが)、nw.from_native(data) の実行時に data の型に応じて backend が記録され、.to_native() メソッドを呼び出すと、記録された backend に応じて元の型に変換されます。

+

backend の情報は .select() .filter() などのメソッドを使って data_nw を加工しても保持され、これによって入力された input_pd と同じ型のデータフレームを返すことが可能になっています。

+
data_nw = nw.from_native(input_pd) # ここで backend が記録される
+data_nw.implementation       # -> Pandas
+result = data_nw.to_native() # -> pd.DataFrame が出力される
+

一方で、処理の途中で pd.DataFrame や pl.DataFrame などの native オブジェクトを経由した場合、改めて nw.from_native() を使って nw.DataFrame に変換し直したとしても、その時点で backend が上書きされるので、.to_native() メソッドを使用しても引数として入力された input_pd と同じ型に復元される保証はありません。

+
data_nw = nw.from_native(input_pd)              # ここで backend が記録される
+data_nw2 = nw.from_native(data_nw.to_polars())  # ここで backend が上書きされる
+data_nw2.implementation        # -> polars
+result = data_nw2.to_native()  # -> pl.DataFrame が出力される
+

従って、resultinput_pd と同じ型をもつことを保証するには、data_nw を nw.DataFrame クラスのまま維持する(≒ narwhals ベースのメソッドだけで処理を書く)必要があり、これが narwhals ベースの実装としてのあるべき姿だと思われます。

+

一方で、一部の処理が特定のバックエンド(e.g. Pandas)に依存している場合にはどうするべきでしょうか。これには次のような2つの選択肢があると考えています。

+
    +
  1. 処理が依存しているバックエンドのオブジェクト(e.g. pd.DataFrame)として出力する〔推奨〕
  2. +
  3. narwhals の仕様を迂回してバックエンドを書き換える〔非推奨ですが次節で考察〕
  4. +
+

これら2つの可能性の間での選択は、技術的な問題であると同時にユーザーとのコミュニケーションの問題です。入力と同型のデータフレームを返す関数の中に pd.DataFrame を返す関数が混ざっていることをユーザーにどう説明するのか。あるいは、narwhals の仕様を迂回をしたことで非効率性やカラムレベルでデータ型(dtype)の一貫性が失われる問題が生じたとして、それをユーザーにどう説明するのか、という問いです。

+
+
+

40.2.2 バックエンドの書き換え (非推奨)

+

いま、some_computation() として実装された処理の一部が Pandas に依存しており、結果が result_pd という pd.DataFrame 型のオブジェクトとして得られているとします。このとき、result_pd をもとのデータフレーム data_pl と同型にする方法の1つとして、result_pdpd.Series.to_dict() などを使って辞書のリスト(list of dict)に変換したのち、nw.from_dicts() を使って data_pl と同じバックエンドをもつ nw.DataFrame に変換するという方法があります。

+

以上の変換の実例を見てみましょう。まずは、data_pl

+
data_pl = pl.from_pandas(load_penguins())[:10, :2]
+
+data_pl = data_pl.with_columns(
+        pl.all().cast(pl.Categorical)
+    )
+print(type(data_pl))
+#> <class 'polars.dataframe.frame.DataFrame'>
+print(data_pl.schema)
+#> Schema({'species': Categorical, 'island': Categorical})
+
+data_nw_pl = nw.from_native(data_pl) # ここでバックエンドを記録、後ほど復元に使います。
+
+# 何かしらの処理の結果 pd.DataFrame に変換されたとする
+result_pd = data_nw_pl.to_pandas()
+print(type(result_pd))
+#> <class 'pandas.core.frame.DataFrame'>
+

次に、pl.DataFrame 型をもつ result_pd を pl.DataFrame に変換します。

+

ここでポイントとなるのが、nw.from_dicts() 関数の引数の (1)schema 引数と、(2)backend引数に、それぞれ data_nw_pl から取得した値を入力することで、result_pl の列が data_pl と同じく Categorical 型になるようにしています(指定しないと String 型として解釈されてしまいます)。

+
# Pandas -> polars の変換
+dict_list = [result_pd.loc[i, :].to_dict() for i in result_pd.index]
+
+result_nw_pl = nw.from_dicts(
+    dict_list, 
+    schema = data_nw_pl.schema,         # (1)
+    backend = data_nw_pl.implementation # (2)
+    )
+result_pl = result_nw_pl.to_native()
+
+print(type(result_pl))
+#> <class 'polars.dataframe.frame.DataFrame'>
+
+print(result_pl.schema)
+#> Schema({'species': Categorical, 'island': Categorical})
+

また、Series については、nw.Series.from_iterable() 関数を使うことで、次のようにバックエンドを書き換えることができます。

+
x_pl = data_pl['island']
+print(type(x_pl))
+#> <class 'polars.series.series.Series'>
+print(x_pl.dtype)
+#> Categorical
+
+x_nw = nw.from_native(x_pl, allow_series = True)
+x_pd = x_nw.to_pandas()
+print(type(x_pd))
+#> <class 'pandas.core.series.Series'>
+
x_pl2 = nw.Series.from_iterable(
+    name = x_pd.name,
+    values = x_pd.to_list(),
+    backend = x_nw.implementation,
+    dtype = x_nw.dtype
+).to_native()
+
+print(type(x_pl2))
+#> <class 'polars.series.series.Series'>
+print(x_pl2.dtype)
+#> Categorical
+

narwhals の仕様を迂回してバックエンドを書き換えることは可能ですが、この方法には次のような問題があります。 ただし、以上のような方法でバックエンドの書き換えは可能ですが、

+
    +
  1. 小さいデータフレームでない限り時間がかかる +
      +
    • 恐らく、dict_list を作成するための for ループによるもの
    • +
  2. +
  3. 上記の (1) に代入する正しい schema が用意できないと、カラムレベルでデータ型の一貫性保証できない。
  4. +
+

特に2番目の問題点については、集計処理によって列名が変わった場合には正しい schema(≒ {列名:dtype} の辞書オブジェクト)を用意することが難しくなります。そして、schema を指定できないと、pd.Categoricalpl.Categorical あるいは pl.Enum といったカテゴリー変数は文字列型に変換されてしまい、データ型の一貫性が失われます。

+

カラムレベルで型の一貫性が失われると、返り値が入力値とは異なる型になるよりも把握しづらく、また挙動の予測が難しいため、上記のような処理は採用するとしても、他に方法がないときの最終手段として扱うべきでしょう。

+ + +
+
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/index.html b/docs/index.html new file mode 100644 index 0000000..de5db56 --- /dev/null +++ b/docs/index.html @@ -0,0 +1,1058 @@ + + + + + + + + + + +Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

Py4Stats

+
+ + + +
+ + +
+
Published
+
+

2026-01-23

+
+
+ + +
+ + + +
+ + +
+

1 Readme

+

 Py4Stats は、主に実証研究で用いられる、探索的データ分析および回帰結果レポート用のユーティリティライブラリで、回帰分析を中心とする分析でよく使われるR言語の機能を、Python で実装しています。本ライブラリの主な機能は Get started を、実装されている関数の一覧は Function reference を参照してください。

+
+

1.1 Installation

+

uv をお使いの場合、次のコードで py4stats をインストールできます。

+
! uv add git+https://github.com/Hirototensho/py4stats.git
+

一方で、pip をお使いの場合には、次のコードで py4stats をインストールできます。

+
! pip install git+https://github.com/Hirototensho/py4stats.git
+
+
+

1.2 使用例

+
import py4stats as py4st
+

py4stats.diagnose() 関数はデータの全般的な状態についての要約を提供します。

+
import pandas as pd
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込み
+
+print(py4st.diagnose(penguins).round(4))
+#>              columns    dtype  missing_count  missing_percent  unique_count  unique_rate
+#> 0            species   object              0           0.0000             3       0.8721
+#> 1             island   object              0           0.0000             3       0.8721
+#> 2     bill_length_mm  float64              2           0.5814           165      47.9651
+#> 3      bill_depth_mm  float64              2           0.5814            81      23.5465
+#> 4  flipper_length_mm  float64              2           0.5814            56      16.2791
+#> 5        body_mass_g  float64              2           0.5814            95      27.6163
+#> 6                sex   object             11           3.1977             3       0.8721
+#> 7               year    int64              0           0.0000             3       0.8721
+

py4stats.compare_ols() 関数は、計量経済学の実証論文でよく用いられる、回帰分析の結果を列方向に並べて比較する表を作成します。

+
import statsmodels.formula.api as smf
+
+# 回帰分析の実行
+fit1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()
+fit2 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species', data = penguins).fit()
+fit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()
+
+compare_tab1 = py4st.compare_ols(list_models = [fit1, fit2, fit3]) # 表の作成
+compare_tab1
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
termmodel 1model 2model 3
Intercept153.7397-1,742.7202 ***843.9812 **
(268.9012)(313.7697)(403.5956)
species[T.Chinstrap]-885.8121 ***-539.6864 ***-245.1516 ***
(88.2502)(86.9425)(84.5952)
species[T.Gentoo]578.6292 ***1,492.8283 ***1,443.3525 ***
(75.3623)(118.4442)(107.7844)
bill_length_mm91.4358 ***55.6461 ***26.5366 ***
(6.8871)(7.2326)(7.2436)
bill_depth_mm179.0434 ***87.9328 ***
(19.0997)(20.2192)
sex[T.male]437.2007 ***
(49.1098)
rsquared_adj0.78100.82580.8613
nobs342342333
df345
+

詳細は、py4stats.compare_ols() を参照してください。 

+
+

Jump to Function Get started.
+Jump to Function reference.

+ + +
+
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/introduction.html b/docs/introduction.html new file mode 100644 index 0000000..42374a9 --- /dev/null +++ b/docs/introduction.html @@ -0,0 +1,1358 @@ + + + + + + + + + +2  Introduction to Py4Stats – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

2  Introduction to Py4Stats

+
+ + + +
+ + + + +
+ + + +
+ + +
import py4stats as py4st
+

ここでは Py4Stats の主な機能を紹介します。実装されている関数の一覧は Function reference を参照してください。

+
+

2.1 py4stats.eda_tools

+

 探索的データ解析と前処理に関する機能を提供するモジュールです。このモジュールは、複数の DataFrame バックエンドに対して共通の API を提供することを目的として、narwhals ライブラリを用いて実装されています。詳細は Technical Notes: py4stats.eda_tools における narwhals ベースの実装 を参照してください。

+

 py4stats.diagnose():R言語のdlookr::diagnose()を再現した関数で、データの全般的な状態についての要約を提供します。

+
import pandas as pd
+import numpy as np
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込み
+
+print(py4st.diagnose(penguins).round(4))
+#>                      dtype  missing_count  missing_percent  unique_count  unique_rate
+#> species             object              0           0.0000             3       0.8721
+#> island              object              0           0.0000             3       0.8721
+#> bill_length_mm     float64              2           0.5814           164      47.6744
+#> bill_depth_mm      float64              2           0.5814            80      23.2558
+#> flipper_length_mm  float64              2           0.5814            55      15.9884
+#> body_mass_g        float64              2           0.5814            94      27.3256
+#> sex                 object             11           3.1977             2       0.5814
+#> year                 int64              0           0.0000             3       0.8721
+

py4stats.tabyl():R言語の janitor::tabyl()を参考にした、クロス集計表を作成する関数です。

+
print(py4st.tabyl(penguins, 'island', 'species'))
+#> species         Adelie   Chinstrap       Gentoo  All
+#> island                                              
+#> Biscoe      44 (26.2%)    0 (0.0%)  124 (73.8%)  168
+#> Dream       56 (45.2%)  68 (54.8%)     0 (0.0%)  124
+#> Torgersen  52 (100.0%)    0 (0.0%)     0 (0.0%)   52
+#> All        152 (44.2%)  68 (19.8%)  124 (36.0%)  344
+

 py4stats.freq_table():R言語のDescTools::Freq()をオマージュした、1変数の度数分布表を計算する関数。度数 freq と相対度数 perc に加えて、それぞれの累積値を計算します。

+
print(py4st.freq_table(penguins, 'species'))
+#>            freq      perc  cumfreq   cumperc
+#> species                                     
+#> Adelie      152  0.441860      152  0.441860
+#> Gentoo      124  0.360465      276  0.802326
+#> Chinstrap    68  0.197674      344  1.000000
+

引数 group を指定すると、グループ別の度数分布表を計算できます。

+
penguins2 = penguins.assign(bill_length_mm2 = pd.cut(penguins['bill_length_mm'], 6))
+
+print(
+    py4st.freq_table(penguins2, ['species', 'bill_length_mm2'], sort = False)
+    )
+#>                             freq      perc  cumfreq   cumperc
+#> species   bill_length_mm2
+#> Adelie    (32.072, 38.975]    79  0.523179       79  0.523179
+#>           (38.975, 45.85]     71  0.470199      150  0.993377
+#>           (45.85, 52.725]      1  0.006623      151  1.000000
+#>           (52.725, 59.6]       0  0.000000      151  1.000000
+#> Chinstrap (32.072, 38.975]     0  0.000000        0  0.000000
+#>           (38.975, 45.85]     13  0.191176       13  0.191176
+#>           (45.85, 52.725]     50  0.735294       63  0.926471
+#>           (52.725, 59.6]       5  0.073529       68  1.000000
+#> Gentoo    (32.072, 38.975]     0  0.000000        0  0.000000
+#>           (38.975, 45.85]     40  0.325203       40  0.325203
+#>           (45.85, 52.725]     78  0.634146      118  0.959350
+#>           (52.725, 59.6]       5  0.040650      123  1.000000
+

 py4stats.remove_empty():完全に空白な列や行の削除する関数。R言語の janitor::remove_empty() をオマージュした関数で、全ての要素が NaN である列や行をデータフレームから除外します。

+
penguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy()
+penguins2.loc[:, 'empty'] = np.nan
+penguins2.loc[344, :] = np.nan
+
+print(penguins2.tail(3))
+#>        species  body_mass_g  empty
+#> 342  Chinstrap       4100.0    NaN
+#> 343  Chinstrap       3775.0    NaN
+#> 344        NaN          NaN    NaN
+
+# 完全に空白な行と列を削除。
+print(py4st.remove_empty(penguins2, quiet = False).tail(3))
+#> Removing 1 empty column(s) out of 3 columns(Removed: empty).
+#> Removing 1 empty row(s) out of 345 rows(Removed: 344). 
+#>        species  body_mass_g
+#> 341  Chinstrap       3775.0
+#> 342  Chinstrap       4100.0
+#> 343  Chinstrap       3775.0
+
+# 完全に空白な列のみ削除。
+print(py4st.remove_empty(penguins2, rows = False, quiet = False).tail(3))
+#> Removing 1 empty column(s) out of 3 columns(Removed: empty).
+#>        species  body_mass_g
+#> 342  Chinstrap       4100.0
+#> 343  Chinstrap       3775.0
+#> 344        NaN          NaN
+
+# 完全に空白な行のみ削除。
+print(py4st.remove_empty(penguins2, cols = False, quiet = False).tail(3))
+#> Removing 1 empty row(s) out of 345 rows(Removed: 344). 
+#>        species  body_mass_g  empty
+#> 341  Chinstrap       3775.0    NaN
+#> 342  Chinstrap       4100.0    NaN
+#> 343  Chinstrap       3775.0    NaN
+

 py4stats.remove_constant():定数列の削除。R言語の janitor::remove_constant() をオマージュした関数で、1種類だけの要素からなる列をデータフレームから除外します。

+
penguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy()
+penguins2.loc[:, 'constant'] = 'c'
+
+print(penguins2.head(3))
+#>   species  body_mass_g constant
+#> 0  Adelie       3750.0        c
+#> 1  Adelie       3800.0        c
+#> 2  Adelie       3250.0        c
+
+print(py4st.remove_constant(penguins2, quiet = False).head(3))
+#> Removing 1 constant column(s) out of 3 column(s)(Removed: constant). 
+#>   species  body_mass_g
+#> 0  Adelie       3750.0
+#> 1  Adelie       3800.0
+#> 2  Adelie       3250.0
+

 py4stats.filtering_out()pandasDataFrame.filter() メソッドでは引数 like に文字列を指定することで、列名に特定の文字列を含む列を選択できますが、反対に py4stats.filtering_out() では列名に特定の文字列を含む列を除外します。実装の一部はR言語の dplyr::select() を参考にしました。

+
# 列名に 'length' を含む列を除外
+print(py4st.filtering_out(penguins, contains = 'length').head(3))
+#>   species     island  bill_depth_mm  body_mass_g     sex  year  female
+#> 0  Adelie  Torgersen           18.7       3750.0    male  2007       0
+#> 1  Adelie  Torgersen           17.4       3800.0  female  2007       1
+#> 2  Adelie  Torgersen           18.0       3250.0  female  2007       1
+
+# 列名が 'bill' から始まる列を除外
+print(py4st.filtering_out(penguins, starts_with = 'bill').head(3))
+#>   species     island  flipper_length_mm  body_mass_g     sex  year  female
+#> 0  Adelie  Torgersen              181.0       3750.0    male  2007       0
+#> 1  Adelie  Torgersen              186.0       3800.0  female  2007       1
+#> 2  Adelie  Torgersen              195.0       3250.0  female  2007       1
+
+# 列名が '_mm' で終わる列を除外
+print(py4st.filtering_out(penguins, ends_with = '_mm').head(3))
+#>   species     island  body_mass_g     sex  year  female
+#> 0  Adelie  Torgersen       3750.0    male  2007       0
+#> 1  Adelie  Torgersen       3800.0  female  2007       1
+#> 2  Adelie  Torgersen       3250.0  female  2007       1
+
+
+

2.2 py4stats.regression_tools

+

 py4stats.regression_toolsstatsmodelsライブラリで作成された回帰分析の結果についての表作成と可視化を補助する機能を提供するモジュールです。

+

 py4stats.compare_ols() :計量経済学の実証論文でよく用いられる、回帰分析の結果を列方向に並べて比較する表を作成します。表のフォーマットについてはR言語のtexreg::screenreg()modelsummary::modelsummary()を参考にしています。同種の機能を提供する Python ライブラリーとしては、R言語の stargazer パッケージをもとにした stargazer ライブラリがあります。

+
import statsmodels.formula.api as smf
+
+# 回帰分析の実行
+fit1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()
+fit2 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species', data = penguins).fit()
+fit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()
+
+compare_tab1 = py4st.compare_ols(list_models = [fit1, fit2, fit3]) # 表の作成
+compare_tab1
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
termmodel 1model 2model 3
Intercept153.7397-1,742.7202 ***843.9812 **
(268.9012)(313.7697)(403.5956)
species[T.Chinstrap]-885.8121 ***-539.6864 ***-245.1516 ***
(88.2502)(86.9425)(84.5952)
species[T.Gentoo]578.6292 ***1,492.8283 ***1,443.3525 ***
(75.3623)(118.4442)(107.7844)
bill_length_mm91.4358 ***55.6461 ***26.5366 ***
(6.8871)(7.2326)(7.2436)
bill_depth_mm179.0434 ***87.9328 ***
(19.0997)(20.2192)
sex[T.male]437.2007 ***
(49.1098)
rsquared_adj0.78100.82580.8613
nobs342342333
df345
+

py4stats.compare_ols() の実行結果は PandasDataFrame として出力されるため、.xlsx. ファイルなどに変換することができます。また、用途に応じて表の体裁を調整できるようにしています。詳細については 「回帰分析の比較」 を参照してください。

+
compare_tab2 = py4st.compare_ols(
+    list_models = [fit1, fit2, fit3],
+    model_name = ['基本モデル', '嘴の高さ追加', '性別追加'], # モデル名を変更
+    stats = 'p_value',        # () 内の値をP-値に変更する
+    add_stars = False,        # 有意性のアスタリスクなし
+    table_style = 'one_line', # 表スタイルを1行表示に設定 'one' でも可能
+    digits = 3                # 小数点以下の桁数を3に設定
+    )
+compare_tab2
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
term基本モデル嘴の高さ追加性別追加
Intercept153.740(0.568)-1,742.720(0.000)843.981(0.037)
species[T.Chinstrap]-885.812(0.000)-539.686(0.000)-245.152(0.004)
species[T.Gentoo]578.629(0.000)1,492.828(0.000)1,443.353(0.000)
bill_length_mm91.436(0.000)55.646(0.000)26.537(0.000)
bill_depth_mm179.043(0.000)87.933(0.000)
sex[T.male]437.201(0.000)
rsquared_adj0.7810.8260.861
nobs342342333
df345
+

py4stats.coefplot():回帰係数の可視化。R言語の coefplot::coefplot() を参考にしました。

+
import matplotlib.pyplot as plt
+py4st.coefplot(fit3)
+
+
+

+
coefplot1
+
+
+
plt.rcParams["figure.autolayout"] = True
+
+fig, ax = plt.subplots(1, 2, figsize = (2.2 * 5, 5), dpi = 100)
+
+py4st.coefplot(fit2, ax = ax[0])
+ax[0].set_xlim(-900, 1800)
+
+py4st.coefplot(fit3, ax = ax[1], palette = ['#FF6F91', '#F2E5EB'])
+ax[1].set_xlim(-900, 1800);
+
+
+

+
coefplot2
+
+
+

 py4stats.compare_mfx()py4stats.mfxplot() は、それぞれ py4stats.compare_ols()py4stats.coefplot() の一般化線型モデルバージョンです。statsmodels ライブラリの.get_margeff() メソッドから得られた限界効果の推定値を表示します。

+
penguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)
+
+# ロジスティック回帰の実行
+fit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()
+fit_logit2 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm + species', data = penguins).fit()
+
+py4st.compare_mfx([fit_logit1, fit_logit2])
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
termmodel 1model 2
body_mass_g-0.0004 ***-0.0003 ***
(0.0000)(0.0000)
bill_length_mm-0.0053-0.0357 ***
(0.0036)(0.0070)
bill_depth_mm-0.1490 ***-0.1098 ***
(0.0051)(0.0175)
species[T.Chinstrap]0.4172 ***
(0.0848)
species[T.Gentoo]0.3527 ***
(0.1308)
prsquared0.56470.6187
nobs342342
df35
+
plt.rcParams["figure.autolayout"] = True
+
+fig, ax = plt.subplots(1, 2, figsize = (2.2 * 5, 5), dpi = 100)
+
+py4st.mfxplot(fit_logit1, ax = ax[0])
+ax[0].set_xlim(-0.2, 0.85)
+
+py4st.mfxplot(fit_logit2, ax = ax[1], palette = ['#FF6F91', '#F2E5EB'])
+ax[1].set_xlim(-0.2, 0.85);
+
+
+

+
coefplot3
+
+
+
+

Jump to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/Blinder_Oaxaca.html b/docs/man/Blinder_Oaxaca.html new file mode 100644 index 0000000..f1a96e0 --- /dev/null +++ b/docs/man/Blinder_Oaxaca.html @@ -0,0 +1,1141 @@ + + + + + + + + + +28  py4stats.Blinder_Oaxaca(), py4stats.plot_Blinder_Oaxaca() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

28  py4stats.Blinder_Oaxaca(), py4stats.plot_Blinder_Oaxaca()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

28.1 概要

+

 2つのサブサンプルを用いた回帰分析の推定結果に対して、Blinder-Oaxaca分解を行います。

+
Blinder_Oaxaca(model1, model2)
+
+plot_Blinder_Oaxaca(
+    model1, model2,
+    diff_type = ['observed_diff', 'unobserved_diff'],
+    ax = None, 
+)
+

 いま、ある変数 \(s\) を用いて \(s = m\)\(s = f\) の2つのサブグループからなるデータセットがあるとし、次のような回帰式を仮定します。

+

\[ +\begin{aligned} +Y_{i}^s = \boldsymbol{X}_i^s\boldsymbol{\beta}^s + \epsilon_i^s, && +s = m, f +\end{aligned} +\tag{1} +\]

+

 ここで、\(\boldsymbol{X}_i^s\) サブグループ \(s\) に属する個人 \(i\) についての説明変数からなる行列で、\(\boldsymbol{\beta}^s\) はサブグループ \(s\) のについての回帰係数、\(\epsilon_i^s\) は誤差項です。  さらに、サブグループ \(s\) の被説明変数の平均値を \(\bar{Y}^s\) とし、説明変数の平均値を \(\bar{\boldsymbol{X}}^s\) とするとき、Blinder-Oaxaca分解は2つのグループにおける被説明変数の平均値の差 \(\bar{Y}^m - \bar{Y}^f\) を次のように分解します。

+

\[ +\begin{aligned} +\bar{Y}^m - \bar{Y}^f = (\bar{\boldsymbol{X}}^m - \bar{\boldsymbol{X}}^f)\boldsymbol{\beta}^m + \bar{\boldsymbol{X}}^f(\boldsymbol{\beta}^m - \boldsymbol{\beta}^f) +\end{aligned} +\tag{2} +\]

+

このとき、式(2)右辺の各項は、それぞれ次のような意味を持ちます。

+
    +
  • \((\bar{\boldsymbol{X}}^m - \bar{\boldsymbol{X}}^f)\boldsymbol{\beta}^m\):2つのグループの観測可能な属性の差に起因する被説明変数の差 observed_diff
  • +
  • \(\bar{\boldsymbol{X}}^f(\boldsymbol{\beta}^m - \boldsymbol{\beta}^f)\):2つのグループの観測できない要因の違いに起因する被説明変数の差 unobserved_diff
  • +
+

 式(1)および式(2)については朝井(2014, p.9)を参照しました。

+
+
+

28.2 引数 Argument

+
    +
  • model1statsmodels で作成した回帰分析の結果(必須)。
  • +
  • model2statsmodels で作成した回帰分析の結果(必須)。
  • +
  • diff_typeplot_Blinder_Oaxaca()のみ)list of str or str
     グラフの描画に使用する要約統計量の種類。初期設定では observed_diffunobserved_diff の両方を表示します。
  • +
  • ax:matplotlib の ax オブジェクト。複数のグラフを並べる場合などに使用します。   ## 使用例 Examples
  • +
+
import pandas as pd
+import statsmodels.formula.api as smf
+import py4stats as py4st
+
+wage1 = wooldridge.data('wage1')
+
+fit_female = smf.ols(
+    'lwage ~ educ + exper + expersq + tenure + tenursq + married', 
+    data = wage1.query('female == 1')
+    ).fit()
+
+fit_male = smf.ols(
+    'lwage ~ educ + exper + expersq + tenure + tenursq + married', 
+    data = wage1.query('female == 0')
+    ).fit()
+
py4st.compare_ols(
+    list_models = [fit_female, fit_male],
+    model_name = ['female', 'male']
+    )
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
termfemalemale
Intercept0.3159 **
(0.1401)
0.2255 *
(0.1302)
educ0.0737 ***
(0.0104)
0.0830 ***
(0.0089)
exper0.0200 ***
(0.0072)
0.0329 ***
(0.0076)
expersq-0.0004 ***
(0.0002)
-0.0006 ***
(0.0002)
tenure0.0391 ***
(0.0117)
0.0301 ***
(0.0089)
tenursq-0.0014 ***
(0.0005)
-0.0005 *
(0.0003)
married-0.0548
(0.0539)
0.1718 ***
(0.0595)
rsquared_adj0.24460.4509
nobs252274
df66
+
wage_decomp = py4st.Blinder_Oaxaca(
+    model1 = fit_female,
+    model2 = fit_male
+)
+wage_decomp
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
termsobserved_diffunobserved_diff
Intercept0-0.0903337
educ0.03906610.114713
exper0.03715770.211177
expersq-0.0216026-0.0962631
tenure0.0859831-0.0327949
tenursq-0.03427270.0378497
married0.02788060.118657
+
py4st.plot_Blinder_Oaxaca(
+    model1 = fit_female,
+    model2 = fit_male
+)
+
+
+

+
plot_Blinder_Oaxaca1.png
+
+
+

diff_type を指定することで、一方の統計量だけを表示することもできます。

+
py4st.plot_Blinder_Oaxaca(
+    model1 = fit_female,
+    model2 = fit_male,
+    diff_type = 'unobserved_diff'
+)
+
+
+

+
plot_Blinder_Oaxaca2.png
+
+
+

グラフのサイズや解像度を指定するには、次のように行います。

+
fig, ax = plt.subplots(1, 2, figsize = (1.1 * 2 * 4, 4), sharey = True, dpi = 200)
+
+py4st.plot_Blinder_Oaxaca(
+    model1 = fit_female,
+    model2 = fit_male,
+    ax = ax
+)
+fig.tight_layout()
+
+
+

28.3 参考文献

+
    +
  • 朝井 友紀子 (2014) 「労働市場における男女差の30年― 就業のサンプルセレクションと男女間賃金格差」『日本労働研究雑誌』, No.648, pp.6–16
  • +
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/Heckit_from_formula.html b/docs/man/Heckit_from_formula.html new file mode 100644 index 0000000..dd3b70e --- /dev/null +++ b/docs/man/Heckit_from_formula.html @@ -0,0 +1,1001 @@ + + + + + + + + + +30  heckit_helper.Heckit_from_formula() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

30  heckit_helper.Heckit_from_formula()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

30.1 概要

+
Heckit_from_formula(
+  selection, 
+  outcome, 
+  data, 
+  **kwargs
+  )
+
+
+

30.2 引数 Argument

+
    +
  • selectionstr(必須)
     Type2トービットモデルのうち第1段階の selection equation(選択関数, 就業決定関数)の回帰式
  • +
  • outcomestr(必須)
     Type2トービットモデルのうち第2段階の regression equation(賃金関数)の回帰式
  • +
  • datapandas.DataFrame(必須)
  • +
  • **kwargs
    py4etrics.heckit.Heckit() に渡すその他の引数
  • +
+
+
+

30.3 返り値 Value

+

 3つの要素を持つ tuple。左から順に次の3つのオブジェクトが出力されます。

+
    +
  1. py4etrics.heckit.Heckit() から出力されたモデルの推定結果
  2. +
  3. 第2段階の regression equation(賃金関数)の説明変数からなる pd.DataFrame
  4. +
  5. 第1段階のselection equation(選択関数, 就業決定関数)の説明変数からなる pd.DataFrame
  6. +
+
+
+

30.4 使用例 Examples

+

 heckit_helper モジュールはヘックマンの2段階推定(Heckit)を実行を Py4Etrics モジュールの py4etrics.heckit.Heckit() に依存しているため、事前のインストールをお願いします。

+
pip install git+https://github.com/Py4Etrics/py4etrics.git
+

ここでは春山(2023, Chap.24)のモデルを再現するため、wooldridge モジュールから mroz データを読み込みます。

+
import pandas as pd
+import wooldridge
+from py4stats import heckit_helper
+
+mroz = wooldridge.data('mroz') # サンプルデータの読み込み
+

Heckit_from_formula() 関数を使い、モデルを推定します。なお、Type2トービットモデルを推定する場合、第2段階の回帰式 outcome で使用される説明変数は全て第1段階の回帰式 selection に含まれ、なおかつ selection に含まれるものの、outcome には含まれない説明変数が少なくとも1つは必要であることに注意してください(末石, 2015, p.117)。

+
mod_heckit, exog_outcome, exog_select = \
+ heckit_helper.Heckit_from_formula(
+    selection = 'lwage ~ educ + exper + expersq + nwifeinc + age + kidslt6 + kidsge6',
+    outcome = 'lwage ~ educ + exper + expersq',
+    data = mroz
+)
+
+res_heckit = mod_heckit.fit(cov_type_2 = 'HC1')
+
+print(res_heckit.summary())
+#>                            Heckit Regression Results                            
+#> ================================================================================
+#> Dep. Variable:                    lwage   R-squared:                       0.156
+#> Model:                           Heckit   Adj. R-squared:                  0.150
+#> Method:                Heckman Two-Step   F-statistics:                   26.148
+#> Date:                  Mon, 11 Mar 2024   Prob (F-statistic):              0.000
+#> Time:                          08:40:39   Cov in 1st Stage:            nonrobust
+#> No. Total Obs.:                     753   Cov in 2nd Stage:                  HC1
+#> No. Censored Obs.:                  325                                         
+#> No. Uncensored Obs.:                428                                         
+#> ==============================================================================
+#>                  coef    std err          z      P>|z|      [0.025      0.975]
+#> ------------------------------------------------------------------------------
+#> Intercept     -0.5781      0.305     -1.895      0.058      -1.176       0.020
+#> educ           0.1091      0.016      7.026      0.000       0.079       0.139
+#> exper          0.0439      0.016      2.699      0.007       0.012       0.076
+#> expersq       -0.0009      0.000     -1.957      0.050      -0.002    1.15e-06
+#> ==============================================================================
+#>                  coef    std err          z      P>|z|      [0.025      0.975]
+#> ------------------------------------------------------------------------------
+#> Intercept      0.2701      0.509      0.531      0.595      -0.727       1.267
+#> educ           0.1309      0.025      5.183      0.000       0.081       0.180
+#> exper          0.1233      0.019      6.590      0.000       0.087       0.160
+#> expersq       -0.0019      0.001     -3.145      0.002      -0.003      -0.001
+#> nwifeinc      -0.0120      0.005     -2.484      0.013      -0.022      -0.003
+#> age           -0.0529      0.008     -6.235      0.000      -0.069      -0.036
+#> kidslt6       -0.8683      0.119     -7.326      0.000      -1.101      -0.636
+#> kidsge6        0.0360      0.043      0.828      0.408      -0.049       0.121
+#> ================================================================================
+#>                    coef    std err          z      P>|z|      [0.025      0.975]
+#> --------------------------------------------------------------------------------
+#> IMR (Lambda)     0.0323      0.134      0.241      0.809      -0.230       0.294
+#> =====================================
+#> rho:                            0.049
+#> sigma:                          0.664
+#> =====================================
+#> 
+#> First table are the estimates for the regression (response) equation.
+#> Second table are the estimates for the selection equation.
+#> Third table is the estimate for the coef of the inverse Mills ratio (Heckman's Lambda).
+
+
+

30.5 参考文献

+
    +
  • 末石直也(2015)『計量経済学:ミクロデータ分析へのいざない』 日本評論社.
  • +
  • 春山鉄源(2023) 『Pythonで学ぶ入門計量経済学』 https://py4etrics.github.io/index.html
  • +
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/Pareto_plot.html b/docs/man/Pareto_plot.html new file mode 100644 index 0000000..b5f99e5 --- /dev/null +++ b/docs/man/Pareto_plot.html @@ -0,0 +1,970 @@ + + + + + + + + + +7  py4stats.Pareto_plot(): パレート図の作成 – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

7  py4stats.Pareto_plot(): パレート図の作成

+
+ + + +
+ + + + +
+ + + +
+ + +
+

7.1 概要

+

データフレームからパレート図を作図する関数です。

+
Pareto_plot(
+    data: IntoFrameT,
+    group: str,
+    values: Optional[str] = None,
+    top_n: Optional[int] = None,
+    aggfunc: Callable[..., Any] = np.mean,
+    ax: Optional[Axes] = None,
+    fontsize: int = 12,
+    xlab_rotation: Union[int, float] = 0,
+    palette: Sequence[str] = ("#478FCE", "#252525"),
+    )
+
    +
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • +
  • groupstr
     集計に使用するデータフレームの列名(必須)。
  • +
  • valuesstr
     集計に使用するデータフレームの列名。values = None(初期設定)の場合、group 別の度数が表示され、values が指定された場合、group 別に valuesaggfuncで集計した値がグラフに表示されます。
  • +
  • top_nint
     棒グラフを表示するカテゴリーの件数。top_n = None(初期設定)の場合、すべてのカテゴリーを表示し、整数値が指定された場合、上位 top_n 件が表示されます。
  • +
  • aggfunccallable
    values が指定された際に、集計に使用する集計関数。np.mean など values 列を1次元配列として受け取って単一の数値を返す任意の関数が使用できるほか、nw.mean など narwhals.functions モジュールで実装された関数を使用できます。
  • +
  • ax
    描画先となる matplotlib の Axes。複数のグラフを並べる場合などに使用します。デフォルトの None の場合は、新しい Figure と Axes が作成されます。
  • +
  • fontsizeint
     軸ラベルなどのフォントサイズ。
  • +
  • xlab_rotationint or float
    横軸ラベルの角度。matplotlib の ax.xaxis.set_tick_params() に引数 rotation として渡されます。
  • +
  • palettelist of str
    グラフの描画に使用する色コード。1つ目の要素が棒グラフの色に、2つ目の累積値を表す折線グラフの色に対応します。
  • +
+
+
+

7.2 使用例

+
import py4stats as py4st
+import pandas as pd
+import numpy as np
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込
+
+penguins['group'] = penguins['species'] + '\n' + penguins['island']
+
+py4st.Pareto_plot(penguins, group = 'group')
+
+
+

+
Pareto_plot1
+
+
+
py4st.Pareto_plot(
+    penguins, group = 'group', 
+    values = 'bill_length_mm',
+    aggfunc = np.mean,
+    palette = ['#FF6F91', '#252525']
+    )
+
+
+

+
Pareto_plot2
+
+
+
py4st.Pareto_plot(
+    penguins, 
+    values = 'bill_length_mm',
+    group = 'group',
+    aggfunc = lambda x: x.std()
+    )
+
+
+

+
Pareto_plot3
+
+
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/arg_match.html b/docs/man/arg_match.html new file mode 100644 index 0000000..d805320 --- /dev/null +++ b/docs/man/arg_match.html @@ -0,0 +1,985 @@ + + + + + + + + + +32  引数のアサーション building_block.arg_match() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

32  引数のアサーション building_block.arg_match()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

32.1 概要

+

 R言語の rlang::arg_match() をオマージュした関数で、文字列で与えられた引数のアサーションを行います。

+
arg_match(
+    arg: Union[str, Sequence[str], pd.Series, np.ndarray],
+    values: Sequence[str],
+    arg_name: Optional[str] = None,
+    multiple: bool = False,
+    any_missing: bool = False,
+    all_missing: bool = False,
+    nullable: bool = False
+    )
+
+
+

32.2 引数 Argument

+
    +
  • arg(必須)str or list of str
     適正かどうかを判断したい引数の値
  • +
  • values(必須):list of str
     引数 arg の適正な値のリスト
  • +
  • arg_namestr
     エラーメッセージに表示する引数の名前。指定されなかった場合(初期設定)、引数 arg に代入されたオブジェクトの名称を表示します。なお、この機能は varname.argname()関数を使って実装されています。
  • +
  • multiplebool
     引数の値として複数の値を許容するかどうかを示すブール値。arg にリストが代入された場合、multiple = False(初期設定)であれば最初の値のみを出力し、multiple = True であればリストの値を全て出力します。
  • +
  • any_missing:bool
    True の場合、欠測値(例:NoneNaNpd.NA など)が引数 arg一部に含まれていても許容されます。
  • +
  • all_missing: bool
    True の場合、すべての要素が欠測値であることを許容します。
  • +
  • nullable: bool
    True の場合、引数そのものが None であることを許容します。
  • +
+
+
+

32.3 返り値 Value

+

 引数 arg に代入された値が、values に代入されたリストに含まれていればその値を返し、そうでなければエラーメッセージを出力します。エラーメッセージでは values に代入されたリストの値を arg の適正な値の候補として提示します。

+
+
+

32.4 使用例 Examples

+
from py4stats import building_block as build
+
+def my_faivarit(fruits):
+  fruits = build.arg_match(
+      fruits, arg_name = 'fruits',
+      values = ['apple', 'orange', 'grape'], 
+      multiple = False
+      )
+  return fruits
+
+my_faivarit('apple')
+#> 'apple'
+
+my_faivarit('orang')
+#> ValueError: `fruits` must be one of 'apple', 'orange' or 'grape', not 'orang'.
+#>              Did you mean 'orange'?
+
+my_faivarit('ap')
+#> ValueError: `fruits` must be one of 'apple', 'orange' or 'grape', not 'ap'.
+#>              Did you mean 'apple' or 'grape'?
+
# arg に list を指定した場合
+# 初期設定では1つ目の要素だけ使用されます。
+my_faivarit(['apple', 'orange'])
+#> 'apple'
+
+# multiple = True として再度関数を定義
+def my_faivarit2(fruits):
+  fruits = build.arg_match(
+      fruits, arg_name = 'fruits',
+      values = ['apple', 'orange', 'grape'], 
+      multiple = True
+      )
+  return fruits
+
+my_faivarit2(['apple', 'orange'])
+#> ['apple', 'orange']
+
+my_faivarit2(['apple', 'orang'])
+#> ValueError: `fruits` must be one of 'apple', 'orange' or 'grape', not 'orang'.
+#>              Did you mean 'orange'?
+

 Py4Stats では eda_tools.tabyl()regression_tools.compare_ols() など、文字列で指定する引数をもつ関数で、引数のアサーションに build.arg_match() を使用しています。

+
import py4stats as py4st
+import pandas as pd
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込
+
+py4st.tabyl(penguins, 'island', 'species', normalize = 'ind')
+#> ValueError: `normalize` must be one of 'index', 'columns' or 'all', not 'ind'.
+#>              Did you mean 'index'?
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/assert_dtype.html b/docs/man/assert_dtype.html new file mode 100644 index 0000000..d0e161e --- /dev/null +++ b/docs/man/assert_dtype.html @@ -0,0 +1,1060 @@ + + + + + + + + + +33  データ型による引数のアサーション – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

33  データ型による引数のアサーション

+
+ + + +
+ + + + +
+ + + +
+ + +
+

33.1 概要

+

 R言語の checkmate パッケージの関数群をオマージュした、引数に代入された値が想定されたデータ型ではないときにエラーを出力する関数です。

+
assert_character(
+    arg: Any, 
+    arg_name: Optional[str] = None,
+    len_arg: Optional[int] = None,
+    len_min: int = 1,
+    len_max: Optional[int] = None,
+    any_missing: bool = False,
+    all_missing: bool = False,
+    nullable: bool = False,
+    scalar_only: bool = False
+    )
+
+assert_logical(
+    arg: Any, 
+    arg_name: Optional[str] = None,
+    len_arg: Optional[int] = None,
+    len_min: int = 1,
+    len_max: Optional[int] = None,
+    any_missing: bool = False,
+    all_missing: bool = False,
+    nullable: bool = False,
+    scalar_only: bool = False
+    )
+
+assert_numeric(
+    arg: Any,
+    arg_name: Optional[str] = None,
+    lower = -float('inf'), 
+    upper = float('inf'), 
+    inclusive: Literal["both", "neither", "left", "right"] = "both",
+    len_arg: Optional[int] = None,
+    len_min: int = 1,
+    len_max: Optional[int] = None,
+    any_missing: bool = False,
+    all_missing: bool = False,
+    nullable: bool = False,
+    scalar_only: bool = False
+    )
+
+assert_integer(
+    arg: Any,
+    arg_name: Optional[str] = None,
+    lower = -float('inf'), 
+    upper = float('inf'), 
+    inclusive: Literal["both", "neither", "left", "right"] = "both",
+    len_arg: Optional[int] = None,
+    len_min: int = 1,
+    len_max: Optional[int] = None,
+    any_missing: bool = False,
+    all_missing: bool = False,
+    nullable: bool = False,
+    scalar_only: bool = False
+    )
+
+assert_count(
+    arg: Any,
+    arg_name: Optional[str] = None,
+    lower = 0, 
+    upper = float('inf'), 
+    inclusive: Literal["both", "neither", "left", "right"] = "both",
+    len_arg: Optional[int] = None,
+    len_min: int = 1,
+    len_max: Optional[int] = None,
+    any_missing: bool = False,
+    all_missing: bool = False,
+    nullable: bool = False,
+    scalar_only: bool = False
+    )
+
+assert_float(
+    arg: Any,
+    arg_name: Optional[str] = None,
+    lower = -float('inf'), 
+    upper = float('inf'), 
+    inclusive: Literal["both", "neither", "left", "right"] = "both",
+    len_arg: Optional[int] = None,
+    len_min: int = 1,
+    len_max: Optional[int] = None,
+    any_missing: bool = False,
+    all_missing: bool = False,
+    nullable: bool = False,
+    scalar_only: bool = False
+    )
+

 それぞれの関数は第一引数 arg に代入された array-like オブジェクトの要素が、次の型ではない場合にエラーを出力します。

+
    +
  • assert_character()str
  • +
  • assert_numeric()int or float
  • +
  • assert_integer()int
  • +
  • assert_count()int
  • +
  • assert_float()float
  • +
+
+
+

33.2 引数 Argument

+
    +
  • arg(必須)array-like
     適正かどうかを判断したい引数。検証対象となる引数。スカラー値、または array-like オブジェクト(例:list、NumPy 配列、pandas Series)を指定できます。
  • +
  • arg_namestr
     エラーメッセージに表示する引数の名前。None の場合、可能であれば arg に渡された変数名が自動的に推定されます。なお、この機能は varname.argname()関数を使って実装されています。
  • +
  • lower, upperint or float
     arg に代入されたオブジェクトの要素が取るべき値の最大値と最小値。
  • +
  • inclusive:str
     値の範囲チェックにおいて、境界値を含めるかどうかを表す文字列。
    'both', 'neither', 'left', 'right' から選択できます。
    +
      +
    • 'both'lower <= x <= upper
    • +
    • 'neither'lower < x < upper
    • +
    • 'left'lower <= x < upper
    • +
    • 'right'lower < x <= upper
    • +
  • +
  • len_arg: int 引数の要素数を表す自然数:要素数をこの値と正確に一致させたい場合に指定します。len_arg を指定した場合、引数はちょうどこの個数の要素をもつ必要があります。
     引数の長さは、Nonenp.nan などの欠測値を含む要素数をもとに判定されます。例えば引数の要素が arg = [1, None, 3] のとき、len_arg = 3なら正常として判定され、len_arg = 2 ならエラーが出されます。
  • +
  • len_min, len_max:: int
    許容される最小の要素数と最大の要素数。len_max = None の場合、上限は設けられません。
  • +
  • any_missing:bool
    True の場合、欠測値(例:NoneNaNpd.NA など)が引数 arg一部に含まれていても許容されます。
  • +
  • all_missing: bool
    True の場合、すべての要素が欠測値であることを許容します。
  • +
  • nullable: bool
    True の場合、引数そのものが None であることを許容します。
  • +
  • scalar_only: bool
    True の場合、スカラー値のみを許容します。この場合、1要素であっても、list や配列などの array-like オブジェクトは受け付けません。
  • +
+
+
+

33.3 返り値 Value

+

引数 arg に代入されたオブジェクトの全ての要素が、アサーションの条件を満たしていれば何も返さず、そうでなければエラーメッセージを出力します。

+
+
+

33.4 使用例 Examples

+
from py4stats import building_block as build
+x = [1, 2, 3]
+y = ['A', 'B', 'C']
+
+build.assert_character(x, arg_name = 'x')
+#> TypeError: Argument `x` must be of type 'str'.
+
+build.assert_character(y, arg_name = 'y')
+
build.assert_numeric(x, arg_name = 'x')
+
+build.assert_numeric(y, arg_name = 'y')
+#> TypeError: Argument `y` must be of type 'int' or 'float' with value(s) -inf <= x <= inf.
+
+z = [0.1, 0.3, 0.6]
+build.assert_numeric(z, arg_name = 'z', lower = 0, upper = 1)
+
+z.extend([2, 3])
+build.assert_numeric(z, arg_name = 'z', lower = 0, upper = 1)
+#> ValueError: Argument `z` must have value 0 <= x <= 1
+#> element '3' and '4' of 'z' not sutisfy the condtion.
+
+z = 1
+build.assert_numeric(
+    z, arg_name = 'z', 
+    lower = 0, upper = 1, 
+    inclusive = 'left'
+    )
+#> ValueError: Argument `z` must have value 0 <= x < 1.
+
+
+

33.5 参照

+

 データ型の判定にはこちらの関数を使用しています。

+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/coefplot.html b/docs/man/coefplot.html new file mode 100644 index 0000000..3fa8bee --- /dev/null +++ b/docs/man/coefplot.html @@ -0,0 +1,1011 @@ + + + + + + + + + +24  回帰分析による推定値の視覚化:py4stats.coefplot(), py4stats.mfxplot() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

24  回帰分析による推定値の視覚化:py4stats.coefplot(), py4stats.mfxplot()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

24.1 概要

+

 グラフ上の縦軸が説明変数、横軸回帰係数の値です。点が回帰係数の推定値を、エラーバー(横棒)が信頼区間を表します。

+
coefplot(
+    mod, 
+    subset = None, 
+    conf_level = [0.95, 0.99], 
+    palette = ['#1b69af', '#629CE7'], 
+    show_Intercept = False,
+    show_vline = True,
+    ax = None,
+    **kwargs
+)
+
+mfxplot(
+    mod, 
+    subset = None, 
+    conf_level = [0.95, 0.99], 
+    at = 'overall',
+    method = 'dydx',
+    dummy = False,
+    palette = ['#1b69af', '#629CE7'], 
+    show_Intercept = False,
+    show_vline = True,
+    ax = None,
+    **kwargs
+)
+
+
+

24.2 引数 Argument

+
    +
  • modstatsmodels で作成した回帰分析の結果(必須)。

  • +
  • subset:グラフに回帰係数を表示する説明変数のリスト。指定しなければモデルに含まれる全ての説明変数を使用します。また subset に指定された順番に合わせてグラフ内での回帰係数の並び順が変更されます。

  • +
  • conf.level:信頼区間の計算に用いる信頼係数。1つ目の要素が太い方のエラーバーの幅に、2つ目の要素が細い方のエラーバーの幅に対応します。初期設定は [0.95, 0.99] です。

  • +
  • palette:グラフの描画に使用する色コード。1つ目の要素が太い方のエラーバーの色に、2つ目の要素が細い方のエラーバーの色に対応します。

  • +
  • show_Intercept:切片の係数を表示するかどうか。True だと切片の係数を表示し、False(初期設定)だと表示しません。

  • +
  • show_vline:回帰係数 = 0 の垂直線を表示するかどうか。True (初期設定)を指定すると垂直線を表示し、False を指定すると表示されません。

  • +
  • ax:matplotlib の ax オブジェクト。複数のグラフを並べる場合などに使用します。

  • +
  • at:限界効果の集計方法(mfxplot() のみ)。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 at として渡されます。method = 'coef' を指定した場合、この引数は無視されます。

    +
      +
    • 'overall':各観測値の限界効果の平均値を表示(初期設定)
    • +
    • 'mean':各説明変数の平均値における限界効果を表示
    • +
    • 'median':各説明変数の中央値における限界効果を表示
    • +
    • 'zero':各説明変数の値がゼロであるときの限界効果を表示
    • +
  • +
  • method:推定する限界効果の種類(mfxplot() のみ)。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 method として渡されます。ただし、method = 'coef' を指定した場合には限界効果を推定せずに回帰係数をそのまま表示します。

    +
      +
    • 'coef':回帰係数の推定値を表示
    • +
    • 'dydx':限界効果の値を変換なしでそのまま表。(初期設定)
    • +
    • 'eyex':弾力性 d(lny)/d(lnx) の推定値を表示
    • +
    • 'dyex':準弾力性 dy /d(lnx) の推定値を表示
    • +
    • 'eydx':準弾力性 d(lny)/dx の推定値を表示
    • +
  • +
  • dummy:ダミー変数の限界効果の推定方法(mfxplot() のみ)。もし False (初期設定)であれば、ダミー変数を連続な数値変数として扱います。もし、True であればダミー変数が0から1へと変化したときの予測値の変化を推定します。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 dummy として渡されます。

  • +
+
+
+

24.3 使用例

+
import py4stats as py4st
+import statsmodels.formula.api as smf
+import pandas as pd
+import numpy as np
+import matplotlib.pyplot as plt
+
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込み
+
+
+# 回帰分析の実行
+fit2 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species', data = penguins).fit()
+fit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()
+
+py4st.coefplot(fit3)
+
+
+

+
coefplot1
+
+
+
plt.rcParams["figure.autolayout"] = True
+
+fig, ax = plt.subplots(1, 2, figsize = (2.2 * 5, 5), dpi = 100)
+
+py4st.coefplot(fit2, ax = ax[0])
+ax[0].set_xlim(-900, 1800)
+
+py4st.coefplot(fit3, ax = ax[1], palette = ['#FF6F91', '#F2E5EB'])
+ax[1].set_xlim(-900, 1800);
+
+
+

+
coefplot2
+
+
+
penguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)
+
+# ロジスティック回帰の実行
+fit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()
+fit_logit2 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm + species', data = penguins).fit()
+
plt.rcParams["figure.autolayout"] = True
+
+fig, ax = plt.subplots(1, 2, figsize = (2.2 * 5, 5), dpi = 100)
+
+py4st.mfxplot(fit_logit1, ax = ax[0])
+ax[0].set_xlim(-0.2, 0.85)
+
+py4st.mfxplot(fit_logit2, ax = ax[1], palette = ['#FF6F91', '#F2E5EB'])
+ax[1].set_xlim(-0.2, 0.85);
+

coefplot3 *** Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/compare_df_cols.html b/docs/man/compare_df_cols.html new file mode 100644 index 0000000..a72965b --- /dev/null +++ b/docs/man/compare_df_cols.html @@ -0,0 +1,977 @@ + + + + + + + + + +14  py4stats.compare_df_cols(), py4stats.compare_df_stats() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

14  py4stats.compare_df_cols(), py4stats.compare_df_stats()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

14.1 概要

+

 R言語の janitor::compare_df_cols() をオマージュした関数で、compare_df_cols() は複数の pandas.DataFrame に含まれる同じ名前を持つ列同士のデータ型 dtype を比較し、compare_df_stats() は同じ名前を持つ列同士の記述統計量を比較します。

+
compare_df_cols(
+    df_list: Union[List[IntoFrameT], Mapping[str, IntoFrameT]],
+    df_name: Optional[List[str]] = None,
+    return_match: Literal["all", "match", "mismatch"] = 'all',
+    dropna:bool = False,
+    to_native: bool = True
+)
+
+compare_df_stats(
+    df_list: List[IntoFrameT],
+    df_name: Optional[List[str]] = None,
+    return_match: Literal["all", "match", "mismatch"] = "all",
+    stats: Callable[..., Any] = np.mean,
+    rtol: float = 1e-05,
+    atol: float = 1e-08,
+    to_native: bool = True,
+    **kwargs: Any,
+)
+
+
+

14.2 引数 Argument

+
    +
  • df_list(必須) A list or dict of IntoFrameT
     列を比較するデータフレームのリストもしくは辞書オブジェクト。辞書が df_name が未指定の場合、辞書の keys を df_name として使用します。
  • +
  • df_name list of str
     表頭に表示するデータフレームの名前。['df1', 'df2'] のように文字列のリストを指定してください。初期設定では、自動的に df1, df2, df3 … と連番が割り当てられます。
  • +
  • return_match str
     出力に反映する変数の範囲を表す文字列。次の値から選択できます。 +
      +
    • 'all'(初期設定): 全ての列を表示。
    • +
    • 'match':全てのデータフレームで dtype が一致している列のみを表示。
    • +
    • 'mismatch':少なくとも1つのデータフレームで dtype が一致していない列のみを表示。
    • +
  • +
  • dropna bool (compare_df_cols() のみ)
     データ型 dtype の一致判定に当たり、NaN を無視するかどうか。初期設定 False の場合、すべてのデータフレームが同名かつ同じデータ型の列を持たない限り、ミスマッチが発生したと判定されます。
  • +
  • stats str or function
     比較に用いる記述統計量を定義する関数。np.mean など values 列を1次元配列として受け取って単一の数値を返す任意の関数が使用できるほか、nw.mean など narwhals.functions モジュールで実装された関数を使用できます。初期設定は np.mean です。
  • +
+
+
+

14.3 使用例 Examples

+
import pandas as pd
+import py4stats as py4st
+
+df1 = pd.DataFrame({'x':[1, 2, 3], 'y':[5,   4, 2], 'z':[True, False, True]})
+df2 = pd.DataFrame({'x':[1, 2, 3], 'y':[5.0, 4, 2], 'z':['True', 'False', 'True']})
+
+print(py4st.compare_df_cols([df1, df2]))
+#>   term    df1      df2  match_dtype
+#> 0    x  int64    int64         True
+#> 1    y  int64  float64        False
+#> 2    z   bool   object        False
+

return_match = 'mismatch' を指定すると、データフレームの中で、dtype が一致していないものがある列を返します。

+
print(py4st.compare_df_cols(
+    [df1, df2], return_match = 'mismatch'
+    ))
+#>   term    df1      df2  match_dtype
+#> 1    y  int64  float64        False
+#> 2    z   bool   object        False
+

 py4st.compare_df_stats() は数値変数の記述統計量を比較するため、異なる経路で行われたデータ処理の結果が一致しているかを検証する場合に便利です。

+
from palmerpenguins import load_penguins
+penguins = load_penguins()
+penguins2 = penguins.copy()
+vars = ['flipper_length_mm', 'body_mass_g']
+penguins2.loc[:, vars] = py4st.scale(penguins2.loc[:, vars])
+
+print(
+    py4st.compare_df_stats([penguins, penguins2]).round(2)
+)
+#>                 term      df1      df2  match_stats
+#> 0      bill_depth_mm    17.15    17.15         True
+#> 1     bill_length_mm    43.92    43.92         True
+#> 2        body_mass_g  4201.75     0.00        False
+#> 3  flipper_length_mm   200.92    -0.00        False
+#> 4               year  2008.03  2008.03         True
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/compare_group_stats.html b/docs/man/compare_group_stats.html new file mode 100644 index 0000000..06690ba --- /dev/null +++ b/docs/man/compare_group_stats.html @@ -0,0 +1,1063 @@ + + + + + + + + + +15  統計量に基づくグループ間比較 – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

15  統計量に基づくグループ間比較

+
+ + + +
+ + + + +
+ + + +
+ + +
+

15.1 概要

+

これら関数は、入力された2つのデータフレームについて、各数値変数の統計量に基づいた比較を提供します。

+
compare_group_means(
+    group1: IntoFrameT,
+    group2: IntoFrameT,
+    group_names: Sequence[str] = ('group1', 'group2'),
+    columns: Literal['common', 'all'] = 'all',
+    to_native: bool = True
+    )
+
+compare_group_median(
+    group1: IntoFrameT,
+    group2: IntoFrameT,
+    group_names: Sequence[str] = ('group1', 'group2'),
+    columns: Literal['common', 'all'] = 'all',
+    to_native: bool = True
+    )
+
+plot_mean_diff(
+    group1: IntoFrameT,
+    group2: IntoFrameT,
+    stats_diff: Literal["norm_diff", "abs_diff", "rel_diff"] = "norm_diff",
+    ax: Optional[Axes] = None,
+    )
+
+plot_median_diff(
+    group1: IntoFrameT,
+    group2: IntoFrameT,
+    stats_diff: Literal["abs_diff", "rel_diff"] = "rel_diff",
+    ax: Optional[Axes] = None,
+    )
+
+
+

15.2 引数 Argument

+
    +
  • group1(必須)a pandas.DataFrame
     数値変数を含む pandas.DataFrame で group2 との比較対象となるもの
  • +
  • group2(必須)a pandas.DataFrame
     数値変数を含む pandas.DataFrame で group1 との比較対象となるもの
  • +
  • group_names list of str
     表頭に表示するグループの名前。['group1', 'group2'] のように、2つの要素をもつ文字列のリストとして指定してください。
  • +
  • columns str
    2つのグループの結果を結合する際に含める変数を指定します。 +
      +
    • "common": 両方のグループに存在する変数のみが含まれます。
    • +
    • "all": いずれかのグループに存在する全ての変数が含まれます。この場合、一方のグループにのみ存在する変数についての差分統計量は、欠損値(例:NaN または None)となります。
    • +
  • +
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • +
  • stats_diff: strplot_mean_diff() および plot_median_diff() のみ)
     グラフの描画に使用する差分統計量。'norm_diff'plot_mean_diff() のみ)、'abs_diff', 'rel_diff' のいずれかから選ぶことができます。
  • +
+
+
+

15.3 返り値 Value

+

 compare_group_means()関数および, compare_group_median() 関数では、次の値をもつ pandas.DataFrame が出力されます。

+
    +
  • group1, group2(初期設定の場合)
     各グループにおける記述統計統計量の値
  • +
  • norm_diffcompare_group_means() のみ)
     標準化された平均値の差で、2つのグループの平均値を \(\bar{X}_1\), \(\bar{X}_2\)、分散を \(s^2_1, s^2_2\) とし、サンプルサイズを \(n_1, n_2\) とするとき、次式のように定義されます。
  • +
+

\[ +\delta = \frac{\bar{X}_1 - \bar{X}_2}{s},~~~~~ s^2 = \frac{(n_1-1)s_1^2 + (n_2-1)s_2^2}{n_1 + n_2 - 2} +\]

+
    +
  • abs_diff
    2つのグループの記述統計量の絶対差
  • +
  • rel_diff
    2つのグループの記述統計量の相対差。2つのグループの記述統計量を \(\bar{X}_1\), \(\bar{X}_2\) とするとき、次式のように定義されます。
  • +
+

\[ +\delta = \cfrac{\bar{X}_1 - \bar{X}_2}{\cfrac{\bar{X}_1 + \bar{X}_2}{2}} += 2 \cdot \frac{\bar{X}_1 - \bar{X}_2}{\bar{X}_1 + \bar{X}_2} +\]

+

plot_mean_diff() 関数および, plot_median_diff() 関数では、グループ別の記述統計両の差をグラフとして可視化します。詳細は使用例を参照して下さい。

+
+
+

15.4 使用例 Examples

+
import pandas as pd
+import py4stats as py4st
+from palmerpenguins import load_penguins
+
+penguins = load_penguins().drop('year', axis = 1) # サンプルデータの読み込み
+
res1 = py4st.compare_group_means(
+    penguins.query('species == "Gentoo"'),
+    penguins.query('species == "Adelie"')
+)
+print(res1.round(3))
+#>             variable    group1    group2  norm_diff  abs_diff  rel_diff
+#> 0      bill_depth_mm    14.982    18.346     -3.012     3.364    -0.202
+#> 1     bill_length_mm    47.505    38.791      3.048     8.713     0.202
+#> 2        body_mass_g  5076.016  3700.662      2.868  1375.354     0.313
+#> 3  flipper_length_mm   217.187   189.954      4.180    27.233     0.134
+
res2 = py4st.compare_group_median(
+    penguins.query('species == "Gentoo"'),
+    penguins.query('species == "Adelie"'),
+    group_names = ['Gentoo', 'Adelie']
+)
+print(res2.round(3))
+#>             variable    Gentoo    Adelie  abs_diff  rel_diff
+#> 0      bill_depth_mm    14.982    18.346     3.364    -0.202
+#> 1     bill_length_mm    47.505    38.791     8.713     0.202
+#> 2        body_mass_g  5076.016  3700.662  1375.354     0.313
+#> 3  flipper_length_mm   217.187   189.954    27.233     0.134
+
py4st.plot_mean_diff(
+    penguins.query('species == "Gentoo"'),
+    penguins.query('species == "Adelie"'),
+    stats_diff = 'norm_diff'
+)
+
+
+

+
plot_mean_diff1
+
+
+
py4st.plot_mean_diff(
+    penguins.query('species == "Gentoo"'),
+    penguins.query('species == "Adelie"'),
+    stats_diff = 'abs_diff'
+)
+
+
+

+
plot_mean_diff2
+
+
+
py4st.plot_median_diff(
+    penguins.query('species == "Gentoo"'),
+    penguins.query('species == "Adelie"'),
+    stats_diff = 'rel_diff'
+)
+
+
+

+
plot_median_diff1
+
+
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/compare_mfx.html b/docs/man/compare_mfx.html new file mode 100644 index 0000000..90fa9a3 --- /dev/null +++ b/docs/man/compare_mfx.html @@ -0,0 +1,1093 @@ + + + + + + + + + +23  限界効果の比較:py4stats.compare_mfx() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

23  限界効果の比較:py4stats.compare_mfx()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

23.1 概要

+

 sm.glm()の推定結果を計量経済学の実証論文でよく用いられる、回帰分析の結果を縦方向に並べて比較する表を作成します。表のフォーマットについてはR言語の texreg::screenreg()modelsummary::modelsummary()を参考にしています。

+
compare_mfx(
+    list_models, 
+    model_name = None,
+    subset = None,
+    stats = 'std_err',
+    add_stars = True,
+    stats_glance = ['prsquared', 'nobs', 'df'],
+    at = 'overall',
+    method = 'dydx',
+    dummy = False,
+    digits = 4, 
+    table_style = 'two_line',
+    line_break = '\n',
+    **kwargs
+)
+
+
+

23.2 引数 Argument

+
    +
  • list_models
    推定結果を表示する分析結果のリスト(必須)。sm.glm()で作成された一般化線形モデルの結果を list_models = [fit1, fit2] のようにリストとして指定してください。

  • +
  • model_namelist of str
    表頭に表示するモデルの名前。['モデル1', 'モデル2'] のように文字列のリストを指定してください。初期設定では、自動的に model 1, model 2, model 3 … と連番が割り当てられます。

  • +
  • subsetlist of str
    表示する回帰係数のリスト。指定しない場合(初期設定)、モデルに含まれる全ての回帰係数が表示されます。内部ではpandas.DataFrame.locメソッドを用いて処理を行っているため、['変数1', '変数2', ...] のような文字列のリスト、[True, False, True, ...] のようなブール値のリストに対応しています。文字列のリストが指定された場合、リストの並び順に合わせて回帰係数が表示されます。

  • +
  • statsstr
    表中の丸括弧 ( ) 内に表示する統計値の設定。次の値が指定できます。

    +
      +
    • 'std_err' 標準誤差(初期設定)
    • +
    • 'p_value' p-値
    • +
    • 'statistics' t統計量
    • +
  • +
  • add_starsbool
    回帰係数の統計的有意性を表すアスタリスク * を表示するかどうかを表すブール値。add_stars = True(初期-設定)なら表示、add_stars = Falseなら非表示となります。table_style'two_line' を指定した場合はアスタリスクは回帰係数の直後に表示され、'one_line' を指定した場合は stats で指定した統計値の後に表示されます。アスタリスクはp-値の値に応じて次のように表示されます。

  • +
  • starsdictp_stars() のみ)
     有意性を示す記号を key に、表示を切り替える閾値を値(value)にもつ辞書オブジェクト。初期設定の stars = None の場合、下記の方式で表示されます。

    +
  • +
  • stats_glance:list of str

  • +
  • 表の下部に追加する当てはまりの尺度の種類を表す文字列のリスト。リストの値には次の値を指定できます。なお、None もしくは空のリスト [ ] が指定された場合には非表示となります。

    +
      +
    • 'rsquared':決定係数
    • +
    • 'rsquared_adj':自由度調整済み決定係数
    • +
    • 'nobs':サインプルサイズ
    • +
    • 'df':モデルの自由度(説明変数の数)
    • +
    • 'sigma':回帰式の標準誤差
    • +
    • 'F_values':全ての回帰係数がゼロであることを帰無仮説とするF検定の統計量
    • +
    • 'p_values':F検定のP-値
    • +
    • 'AIC':赤池情報量基準
    • +
    • 'BIC':ベイズ情報量基準
    • +
  • +
  • digits: int
    回帰係数と統計値について表示する小数点以下の桁数。初期設定は4です。

  • +
  • table_style: str
    表の書式を表す文字列。次の値から選択できます(部分一致可)。

    +
      +
    • 'two_line'回帰係数と統計値を2行に分ける(初期設定)
    • +
    • 'one_line'回帰係数と統計値を1行で表示する
    • +
  • +
  • line_break: str
    table_style = 'two_line' とした場合に使用される改行記号。table_style = 'one_line' とした場合、この引数は無視されます。

  • +
  • at: str
    限界効果の集計方法。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 at として渡されます。method = 'coef' を指定した場合、この引数は無視されます。

    +
      +
    • 'overall':各観測値の限界効果の平均値を表示(初期設定)
    • +
    • 'mean':各説明変数の平均値における限界効果を表示
    • +
    • 'median':各説明変数の中央値における限界効果を表示
    • +
    • 'zero':各説明変数の値がゼロであるときの限界効果を表示
    • +
  • +
  • method: str
    推定する限界効果の種類。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 method として渡されます。ただし、method = 'coef' を指定した場合には限界効果を推定せずに回帰係数をそのまま表示します。

    +
      +
    • 'coef':回帰係数の推定値を表示
    • +
    • 'dydx':限界効果の値を変換なしでそのまま表。(初期設定)
    • +
    • 'eyex':弾力性 d(lny)/d(lnx) の推定値を表示
    • +
    • 'dyex':準弾力性 dy /d(lnx) の推定値を表示
    • +
    • 'eydx':準弾力性 d(lny)/dx の推定値を表示
    • +
  • +
  • dummy: bool
    ダミー変数の限界効果の推定方法を制御するブール値。もし False (初期設定)であれば、ダミー変数を連続な数値変数として扱います。もし、True であればダミー変数が0から1へと変化したときの予測値の変化を推定します。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 dummy として渡されます。

  • +
+
+
+

23.3 使用例

+
import py4stats as py4st
+import statsmodels.formula.api as smf
+
+import pandas as pd
+import numpy as np
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込み
+

 py4st.compare_mfx()py4st.compare_ols() の一般化線型モデルバージョンで、初期設定では statsmodels ライブラリの.get_margeff() メソッドから得られた限界効果の推定値を表示します。

+
penguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)
+
+# ロジスティック回帰の実行
+fit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()
+fit_logit2 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm + species', data = penguins).fit()
+
+py4st.compare_mfx([fit_logit1, fit_logit2])
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
termmodel 1model 2
body_mass_g-0.0004 ***-0.0003 ***
(0.0000)(0.0000)
bill_length_mm-0.0053-0.0357 ***
(0.0036)(0.0070)
bill_depth_mm-0.1490 ***-0.1098 ***
(0.0051)(0.0175)
species[T.Chinstrap]0.4172 ***
(0.0848)
species[T.Gentoo]0.3527 ***
(0.1308)
prsquared0.56470.6187
nobs342342
df35
+
from great_tables import GT, md, html
+compare_tab = py4st.compare_mfx(
+    [fit_logit1, fit_logit2],
+    model_name = ['ベースモデル', 'species 追加'], # モデル名を変更
+    line_break = '<br>'                         # 改行文字の変更
+)
+
+GT(compare_tab.reset_index())\
+  .tab_header(title = 'ロジットモデルの限界効果')\
+  .tab_source_note(
+      source_note= "Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’"
+      )\
+  .tab_source_note(source_note = '丸括弧 ( ) の値は標準誤差')
+

compare_tab_gt2

+
+
+

23.4 補足

+

  table_style = 'two_line' としたとき、初期設定ではの回帰係数とp-値の間に改行記号 '\n'が挿入されます。そのため、print() 関数や display() 関数を使った出力では、改行記号 '\n' がそのまま表示されます。この場合でも、pd.DataFrame.to_excel()pd.DataFrame.to_markdown() を使って Excel ファイルや markdown の表に変換していただくと、改行として反映されます。

+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/compare_ols.html b/docs/man/compare_ols.html new file mode 100644 index 0000000..08ae41b --- /dev/null +++ b/docs/man/compare_ols.html @@ -0,0 +1,1413 @@ + + + + + + + + + +22  回帰分析の比較:py4stats.compare_ols() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

22  回帰分析の比較:py4stats.compare_ols()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

22.1 概要

+

 sm.ols()smf.glm() で作成された回帰分析の結果から、推定結果を縦方向に並べて比較する表を作成します。表のフォーマットについてはR言語の texreg::screenreg()modelsummary::modelsummary()を参考にしています。

+
compare_ols(
+    list_models: Sequence[RegressionResultsWrapper],
+    model_name: Optional[Sequence[str]] = None,
+    subset: Optional[Sequence[str]] = None,
+    stats: Literal["std_err", "statistics", "p_value", "conf_int"] = "std_err",
+    add_stars: bool = True,
+    stars: Optional[Mapping[str, float]] = None,
+    stats_glance: Optional[Sequence[str]] = ("rsquared_adj", "nobs", "df"),
+    digits: int = 4,
+    table_style: Literal["two_line", "one_line"] = "two_line",
+    line_break: str = "\n",
+    **kwargs: Any
+)
+
+
+

22.2 引数 Argument

+
    +
  • list_modelsSequence[RegressionResultsWrapper]
    推定結果を表示する分析結果のリスト(必須)。sm.ols()smf.ols() で作成された回帰分析の結果を list_models = [fit1, fit2] のようにリストとして指定してください。

  • +
  • model_namelist of str
    表頭に表示するモデルの名前。['モデル1', 'モデル2'] のように文字列のリストを指定してください。初期設定では、自動的に model 1, model 2, model 3 … と連番が割り当てられます。

  • +
  • subsetlist of str
    表示する回帰係数のリスト。指定しない場合(初期設定)、モデルに含まれる全ての回帰係数が表示されます。内部ではpandas.DataFrame.locメソッドを用いて処理を行っているため、['変数1', '変数2', ...] のような文字列のリスト、[True, False, True, ...] のようなブール値のリストに対応しています。文字列のリストが指定された場合、リストの並び順に合わせて回帰係数が表示されます。

  • +
  • statsstr
    表中の丸括弧 ( ) 内に表示する統計値の設定。次の値が指定できます。

    +
      +
    • 'std_err' 標準誤差(初期設定)
    • +
    • 'p_value' p-値
    • +
    • 'statistics' t統計量
    • +
  • +
  • add_starsbool
    回帰係数の統計的有意性を表すアスタリスク * を表示するかどうかを表すブール値。add_stars = True(初期-設定)なら表示、add_stars = Falseなら非表示となります。table_style'two_line' を指定した場合はアスタリスクは回帰係数の直後に表示され、'one_line' を指定した場合は stats で指定した統計値の後に表示されます。アスタリスクはp-値の値に応じて次のように表示されます。

  • +
  • starsdictp_stars() のみ)
     有意性を示す記号を key に、表示を切り替える閾値を値(value)にもつ辞書オブジェクト。初期設定の stars = None の場合、下記の方式で表示されます。

    +
  • +
  • stats_glance:list of str

  • +
  • 表の下部に追加する当てはまりの尺度の種類を表す文字列のリスト。リストの値には次の値を指定できます。なお、None もしくは空のリスト [ ] が指定された場合には非表示となります。

    +
      +
    • 'rsquared':決定係数
    • +
    • 'rsquared_adj':自由度調整済み決定係数
    • +
    • 'nobs':サインプルサイズ
    • +
    • 'df':モデルの自由度(説明変数の数)
    • +
    • 'sigma':回帰式の標準誤差
    • +
    • 'F_values':全ての回帰係数がゼロであることを帰無仮説とするF検定の統計量
    • +
    • 'p_values':F検定のP-値
    • +
    • 'AIC':赤池情報量基準
    • +
    • 'BIC':ベイズ情報量基準
    • +
  • +
  • digits: int
    回帰係数と統計値について表示する小数点以下の桁数。初期設定は4です。

  • +
  • table_style: str
    表の書式を表す文字列。次の値から選択できます(部分一致可)。

    +
      +
    • 'two_line'回帰係数と統計値を2行に分ける(初期設定)
    • +
    • 'one_line'回帰係数と統計値を1行で表示する
    • +
  • +
  • line_break: str
    table_style = 'two_line' とした場合に使用される改行記号。table_style = 'one_line' とした場合、この引数は無視されます。

  • +
+
+
+

22.3 使用例 Examples

+
import py4stats as py4st
+import statsmodels.formula.api as smf
+
+import pandas as pd
+import numpy as np
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込み
+
+# 回帰分析の実行
+fit1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()
+fit2 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species', data = penguins).fit()
+fit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()
+
+compare_tab1 = py4st.compare_ols(list_models = [fit1, fit2, fit3]) # 表の作成
+compare_tab1
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
termmodel 1model 2model 3
Intercept153.7397-1,742.7202 ***843.9812 **
(268.9012)(313.7697)(403.5956)
species[T.Chinstrap]-885.8121 ***-539.6864 ***-245.1516 ***
(88.2502)(86.9425)(84.5952)
species[T.Gentoo]578.6292 ***1,492.8283 ***1,443.3525 ***
(75.3623)(118.4442)(107.7844)
bill_length_mm91.4358 ***55.6461 ***26.5366 ***
(6.8871)(7.2326)(7.2436)
bill_depth_mm179.0434 ***87.9328 ***
(19.0997)(20.2192)
sex[T.male]437.2007 ***
(49.1098)
rsquared_adj0.78100.82580.8613
nobs342342333
df345
+

py4st.compare_ols() の実行結果は PandasDataFrame として出力されるため、.xlsx. ファイルなどに変換することができます。また、用途に応じて表の体裁を調整できるようにしています。

+
compare_tab2 = py4st.compare_ols(
+    list_models = [fit1, fit2, fit3],
+    model_name = ['基本モデル', '嘴の高さ追加', '性別追加'], # モデル名を変更
+    stats = 'p_value',        # () 内の値をP-値に変更する
+    add_stars = False,        # 有意性のアスタリスクなし
+    table_style = 'one_line', # 表スタイルを1行表示に設定 'one' でも可能
+    digits = 3                # 小数点以下の桁数を3に設定
+    )
+compare_tab2
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
term基本モデル嘴の高さ追加性別追加
Intercept153.740(0.568)-1,742.720(0.000)843.981(0.037)
species[T.Chinstrap]-885.812(0.000)-539.686(0.000)-245.152(0.004)
species[T.Gentoo]578.629(0.000)1,492.828(0.000)1,443.353(0.000)
bill_length_mm91.436(0.000)55.646(0.000)26.537(0.000)
bill_depth_mm179.043(0.000)87.933(0.000)
sex[T.male]437.201(0.000)
rsquared_adj0.7810.8260.861
nobs342342333
df345
+

table_style = 'two_line' のときに使用される改行記号は line_break で指定できます。great_tables モジュールの GT() 関数と併用する場合など、html 形式で出力する場合には line_break = '<br>' を指定します。

+
from great_tables import GT, md, html
+
+compare_tab3 = py4st.compare_ols(
+    list_models = [fit1, fit2, fit3],
+    model_name = ['基本モデル', '嘴の高さ追加', '性別追加'], # モデル名を変更
+    line_break = '<br>'                              # 改行文字の変更
+    )
+
+GT(compare_tab3.reset_index())\
+  .tab_header(title = 'Palmer penguin データを使った回帰分析の結果')\
+  .tab_source_note(
+      source_note= "Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’"
+      )\
+  .tab_source_note(source_note = '( ) の値は標準誤差')
+

compare_tab_gt

+
+

22.3.0.1 有意性の表示規則の変更

+

py4statsv0.2.0 以降は、stars 引数で有意性の表示規則を変更できるようになりました。

+
stars_dict = {'★★★':0.001, '★★':0.01, '★': 0.05, '.':0.1}
+
+reg.compare_ols(
+    list_models = [fit3],
+    model_name = ['model 3'],
+    stars = stars_dict
+    )
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
termmodel 3
Intercept843.9812 ★
(403.5956)
species[T.Chinstrap]-245.1516 ★★
(84.5952)
species[T.Gentoo]1,443.3525 ★★★
(107.7844)
sex[T.male]437.2007 ★★★
(49.1098)
bill_length_mm26.5366 ★★★
(7.2436)
bill_depth_mm87.9328 ★★★
(20.2192)
rsquared_adj0.8613
nobs333
df5
+
+
+

22.3.0.2 回帰係数の sbusetting

+

引数 subset を使って表示したい回帰係数を指定することで、一部の回帰係数を省略して表記することもできます。

+
# 説明変数に island を追加したモデルを推定
+fit4 = smf.ols(
+    'body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex + island',
+    data = penguins).fit()
+
+var_list = [
+    'species[T.Chinstrap]', 'species[T.Gentoo]',
+    'bill_length_mm', 'bill_depth_mm', 'sex[T.male]'
+    ]
+
+# 全ての回帰係数を表示すると表が長すぎるので、一部を省略します
+compare_tab4 = py4st.compare_ols(
+    list_models = [fit2, fit3, fit4],
+    subset = var_list
+    )
+
+compare_tab4.loc['島ダミー', :] = ['No', 'No', 'Yes']
+
+compare_tab4
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
termmodel 1model 2model 3
species[T.Chinstrap]-539.6864 ***-245.1516 ***-255.2732 ***
(86.9425)(84.5952)(92.4796)
species[T.Gentoo]1,492.8283 ***1,443.3525 ***1,446.1574 ***
(118.4442)(107.7844)(114.1676)
bill_length_mm55.6461 ***26.5366 ***26.6643 ***
(7.2326)(7.2436)(7.2792)
bill_depth_mm179.0434 ***87.9328 ***88.3284 ***
(19.0997)(20.2192)(20.3267)
sex[T.male]437.2007 ***436.0334 ***
(49.1098)(49.4227)
rsquared_adj0.82580.86130.8605
nobs342333333
df457
島ダミーNoNoYes
+

pandas の pandas.DataFrame.query メソッドを使って、次のように説明変数を除外することもできます。

+
compare_tab4 = py4st.compare_ols(
+    list_models = [fit2, fit3, fit4]
+    )
+
+compare_tab4 = compare_tab4\
+  .query('~term.str.contains("Intercept|island")').copy()
+
+compare_tab4.loc['島ダミー', :] = ['No', 'No', 'Yes']
+
+compare_tab4 # 上記のコードと同じ結果
+
+
+
+

22.4 補足

+

  table_style = 'two_line' としたとき、初期設定ではの回帰係数とp-値の間に改行記号 '\n'が挿入されます。そのため、print() 関数や display() 関数を使った出力では、改行記号 '\n' がそのまま表示されます。この場合でも、pd.DataFrame.to_excel()pd.DataFrame.to_markdown() を使って Excel ファイルや markdown の表に変換していただくと、改行として反映されます。

+
+
+

22.5 参照 see also

+

 一般化線形モデルの限界効果を比較する場合は py4stats.compare_mfx()をご利用ください。

+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/diagnose.html b/docs/man/diagnose.html new file mode 100644 index 0000000..ed544cd --- /dev/null +++ b/docs/man/diagnose.html @@ -0,0 +1,943 @@ + + + + + + + + + +4  py4stats.diagnose(): データフレームの概要 – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

4  py4stats.diagnose(): データフレームの概要

+
+ + + +
+ + + + +
+ + + +
+ + +
+

4.1 概要

+

 R言語の dlookr::diagnose() を再現した関数で、データの全般的な状態についての要約を提供します。

+
diagnose(data: IntoFrameT, to_native: bool = True)
+
+
+

4.2 引数 Argument

+
    +
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • +
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • +
+
+
+

4.3 返り値

+
    +
  • dtype:該当する列のpandasにおけるデータの型。「〇〇の個数」や「〇〇の金額」といったデータの dtypeobjectString になっていたら、文字列として読み込まれているので要注意です。
  • +
  • missing_count:1列のなかで NaN などの欠測値になっている数
  • +
  • missing_percent:1列のなかで欠測値が占めている割合でmissing_percent = (missing_count / 行数) * 100 として計算されます。もし missing_percent = 100 なら、その列は完全に空白です。
  • +
  • unique_count:その列で重複を除外したユニークな値の数。例えばある列の中身が「a, a, b」であればユニークな値は ab の2つなので unique_count = 2 です。もし unique_count = 1 であれば、その行にはたった1種類の値しか含まれていないことが分かりますし、例えば都道府県を表す列の unique_count が47より多ければ、都道府県以外のものが混ざっていると考えられます。
  • +
  • unique_rate: サンプルに占めるユニークな値の割合。 unique_rate = unique_count / 行数 で計算されます。unique_rate = 1 であれば、全ての行に異なる値が入っています。一般的に、実数値の列は unique_rate が高くなりますが、年齢の「20代」や価格の「200円代」のように階級に分けられている場合には unique_rate が低くなります。
  • +
+
+
+

4.4 使用例 Examples

+
import py4stats as py4st
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込み
+
+print(py4st.diagnose(penguins).round(4))
+#>              columns    dtype  missing_count  missing_percent  unique_count  unique_rate
+#> 0            species   object              0           0.0000             3       0.8721
+#> 1             island   object              0           0.0000             3       0.8721
+#> 2     bill_length_mm  float64              2           0.5814           165      47.9651
+#> 3      bill_depth_mm  float64              2           0.5814            81      23.5465
+#> 4  flipper_length_mm  float64              2           0.5814            56      16.2791
+#> 5        body_mass_g  float64              2           0.5814            95      27.6163
+#> 6                sex   object             11           3.1977             3       0.8721
+#> 7               year    int64              0           0.0000             3       0.8721
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/diagnose_category.html b/docs/man/diagnose_category.html new file mode 100644 index 0000000..dcb2b92 --- /dev/null +++ b/docs/man/diagnose_category.html @@ -0,0 +1,988 @@ + + + + + + + + + +9  カテゴリー変数の要約 py4stats.diagnose_category() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

9  カテゴリー変数の要約 py4stats.diagnose_category()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

9.1 概要

+

データフレームのカテゴリー変数を要約します。本関数は、カテゴリー情報を表す列(カテゴリ型・文字列型・ブール型)およびダミー変数(値が {0, 1} に制限された整数列)を対象として、欠損率、ユニーク値の数、最頻値、最頻値の頻度と割合、evenness などの指標を提供します。

+
diagnose_category(
+        data: IntoFrameT, 
+        dropna: bool = True, 
+        to_native: bool = True
+        )
+
+
+

9.2 引数 Argument

+
    +
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • +
  • dropnabool
     欠測値(NaN, None など)を統計値の計算から除外するかどうかを表すブール値。初期設定は True です。
  • +
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • +
+
+
+

9.3 返り値 Value

+

freq_table()関数は、次の値をもつ DataFrame を出力します。

+
    +
  • variables: 変数(列)名
  • +
  • count: 非欠損値の個数
  • +
  • miss_pct: 欠損率(null_count / N * 100) (* ここで Ndata の行数)
  • +
  • unique: ユニーク値の個数
  • +
  • unique_pct: ユニーク値の割合(unique / N * 100)
  • +
  • mode: 最頻値
  • +
  • mode_freq: 最頻値の度数
  • +
  • mode_pct: 最頻値の割合(mode_freq / N * 100)
  • +
  • evenness: カテゴリー分布の均等度([0, 1] の範囲)
  • +
+
+
+

9.4 使用例 Examples

+
import pandas as pd
+import py4stats as py4st
+from palmerpenguins import load_penguins
+
+penguins = load_penguins().drop('year', axis = 1) # サンプルデータの読み込み
+
penguins2 = penguins.copy()
+s = penguins2['body_mass_g']
+penguins2['heavy'] = np.where(s >= s.quantile(0.75), True, False)
+
+print(py4st.diagnose_category(penguins2).round(4))
+#>   variables  count  miss_pct  unique  unique_pct    mode  mode_freq  mode_pct  evenness
+#> 0   species    344    0.0000       3      0.8721  Adelie        152   44.1860    0.9550
+#> 1    island    344    0.0000       3      0.8721  Biscoe        168   48.8372    0.9133
+#> 2       sex    333    3.1977       2      0.5814    male        168   50.4505    0.9999
+#> 3     heavy    344    0.0000       2      0.5814   False        254   73.8372    0.8292
+
+
+

9.5 Note

+

evenness は、各列ごとに情報エントロピーを \([0, 1]\) の範囲に正規化した指標です。本実装では、対数の底をカテゴリの個数(unique)に設定することで正規化を行っており、これは底を2とした情報エントロピーを log2(unique) で割ることと同値です。この指標は正規化エントロピー(normalized entropy)としても知られています。

+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/filtering_out.html b/docs/man/filtering_out.html new file mode 100644 index 0000000..09bb909 --- /dev/null +++ b/docs/man/filtering_out.html @@ -0,0 +1,988 @@ + + + + + + + + + +12  py4stats.filtering_out() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

12  py4stats.filtering_out()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

12.1 概要

+

 pandasDataFrame.filter() メソッドでは引数 like に文字列を指定することで、列名に特定の文字列を含む列を選択できますが、反対に py4st.filtering_out() では列名に特定の文字列を含む列を除外します。実装の一部はR言語の dplyr::select() を参考にしました。

+
filtering_out(
+    data: IntoFrameT,
+    contains: Optional[str] = None,
+    starts_with: Optional[str] = None,
+    ends_with: Optional[str] = None,
+    axis: Union[int, str] = 'columns',
+    to_native: bool = True,
+)
+
+
+

12.2 引数 Argument

+
    +
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • +
  • *argsstr / list[str] / narwhals.Expr / narwhals.Selector
    移動したい列を指定します。指定方法は次のとおりです。 +
      +
    • 列名(例:"x"
    • +
    • 列名のリスト(例:["x", "y"]
    • +
    • narwhals の式(Expr)(例:nw.col("x")) *axis = 'columns' の場合のみ
    • +
    • narwhals の Selector (例:ncs.numeric())*axis = 'columns' の場合のみ
    • +
  • +
  • containsstr
     列名(行名)の検索に使用する文字列。内部で使用している pandas.Series.str.contains に渡され、指定された文字列を列名(行名)に含む列(行)を除外します。
  • +
  • starts_withstr
     列名(行名)の検索に使用する文字列。内部で使用している pandas.Series.str.startswith に渡され、指定された文字列で列名(行名)が始まる列(行)を除外します。
  • +
  • ends_withstr
     列名(行名)の検索に使用する文字列。内部で使用している pandas.Series.str.endswith に渡され、指定された文字列で列名(行名)が終わる列(行)を除外します。
  • +
  • axis{0 or 'index', 1 or 'columns'}
    axis = 1 または axis = 'columns' なら列の削除を行い、axis = 0 または axis = 'index' なら行の削除を行います。 このオプションは、data がインデックス属性 (例: pandas.DataFrame) をもつ場合のみ有効です。
  • +
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • +
+
+
+

12.3 使用例

+
import py4stats as py4st
+import pandas as pd
+import narwhals.selectors as ncs
+from palmerpenguins import load_penguins
+
+penguins = load_penguins().head(3) # サンプルデータの読み込み
+
+print(penguins)
+#>   species     island  bill_length_mm  bill_depth_mm  flipper_length_mm  body_mass_g     sex  year  female
+#> 0  Adelie  Torgersen            39.1           18.7              181.0       3750.0    male  2007       0
+#> 1  Adelie  Torgersen            39.5           17.4              186.0       3800.0  female  2007       1
+#> 2  Adelie  Torgersen            40.3           18.0              195.0       3250.0  female  2007       1
+
# *args で列名を直接指定
+print(py4st.filtering_out(penguins, 'year', 'island', 'sex'))
+#>   species  bill_length_mm  bill_depth_mm  flipper_length_mm  body_mass_g
+#> 0  Adelie            39.1           18.7              181.0       3750.0
+#> 1  Adelie            39.5           17.4              186.0       3800.0
+#> 2  Adelie            40.3           18.0              195.0       3250.0
+
+
+# narwhals.selector の使用例 文字列型の変数を除外
+print(py4st.filtering_out(penguins, ncs.string()))
+#>    bill_length_mm  bill_depth_mm  flipper_length_mm  body_mass_g  year
+#> 0            39.1           18.7              181.0       3750.0  2007
+#> 1            39.5           17.4              186.0       3800.0  2007
+#> 2            40.3           18.0              195.0       3250.0  2007
+
+# 列名に 'length' を含む列を除外
+print(py4st.filtering_out(penguins, contains = 'length'))
+#>   species     island  bill_depth_mm  body_mass_g     sex  year  female
+#> 0  Adelie  Torgersen           18.7       3750.0    male  2007       0
+#> 1  Adelie  Torgersen           17.4       3800.0  female  2007       1
+#> 2  Adelie  Torgersen           18.0       3250.0  female  2007       1
+
+# 列名が 'bill' から始まる列を除外
+print(py4st.filtering_out(penguins, starts_with = 'bill'))
+#>   species     island  flipper_length_mm  body_mass_g     sex  year  female
+#> 0  Adelie  Torgersen              181.0       3750.0    male  2007       0
+#> 1  Adelie  Torgersen              186.0       3800.0  female  2007       1
+#> 2  Adelie  Torgersen              195.0       3250.0  female  2007       1
+
+# 列名が '_mm' で終わる列を除外
+print(py4st.filtering_out(penguins, ends_with = '_mm'))
+#>   species     island  body_mass_g     sex  year  female
+#> 0  Adelie  Torgersen       3750.0    male  2007       0
+#> 1  Adelie  Torgersen       3800.0  female  2007       1
+#> 2  Adelie  Torgersen       3250.0  female  2007       1
+
+
+

12.4 Notes

+

axis='index' による行を対象とするフィルタリングは、インデックスの存在に依存します。したがって、pd.DataFrame 以外の行ラベルをもたない DataFrame バックエンドでは、このオプションは利用できません。

+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/freq_table.html b/docs/man/freq_table.html new file mode 100644 index 0000000..a4f2974 --- /dev/null +++ b/docs/man/freq_table.html @@ -0,0 +1,984 @@ + + + + + + + + + +6  py4stats.freq_table() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

6  py4stats.freq_table()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

6.1 概要

+

 R言語のDescTools::Freq()をオマージュした、1変数の度数分布表を計算する関数。度数 freq と相対度数 perc に加えて、それぞれの累積値を計算します。

+
freq_table(
+    data: IntoFrameT,
+    subset: Union[str, Sequence[str]],
+    sort_by: Literal['frequency', 'values'] = 'frequency',
+    descending: bool = False,
+    dropna: bool = False,
+    to_native: bool = True,
+    *,
+    sort: Optional[bool] = None
+)
+
+
+

6.2 引数 Argument

+
    +
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • +
  • subsetstr or list of str
     集計に使用するデータフレームの列名(必須)。
  • +
  • sort_bystr
     sort_by = 'frequency' なら度数分布表を頻度に応じてソートし、sort_by = 'values' なら subset で指定した列の値に応じてソートします。
  • +
  • descendingbool
     ソートの方式。True なら降順でソートし、False(初期設定)なら昇順でソートします。
  • +
  • dropnabool
     欠測値(NaN, None など)を集計から除外するかどうかを表すブール値。初期設定は False です。
  • +
  • sortDeprecated..
     sort_by の使用を推奨しています。この引数は後方互換性のために保持されおり、指定された場合は FutureWarningが発生します。デフォルトは None です。
  • +
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • +
+
+
+

6.3 返り値 Value

+

 freq_table()関数は、次の値をもつ DataFrame を出力します。

+
    +
  • freq: 度数
  • +
  • perc: 相対度数
  • +
  • cumfreq: 累積度数
  • +
  • cumperc: 累積相対度数
  • +
+
+
+

6.4 使用例

+
import py4stats as py4st
+import pandas as pd
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込
+
+print(py4st.freq_table(penguins, 'species'))
+#>      species  freq      perc  cumfreq   cumperc
+#> 0  Chinstrap    68  0.197674       68  0.197674
+#> 1     Gentoo   124  0.360465      192  0.558140
+#> 2     Adelie   152  0.441860      344  1.000000
+
+print(py4st.freq_table(penguins, ['island', 'species']))
+#>       island    species  freq      perc  cumfreq   cumperc
+#> 0     Biscoe     Adelie    44  0.127907       44  0.127907
+#> 1  Torgersen     Adelie    52  0.151163       96  0.279070
+#> 2      Dream     Adelie    56  0.162791      152  0.441860
+#> 3      Dream  Chinstrap    68  0.197674      220  0.639535
+#> 4     Biscoe     Gentoo   124  0.360465      344  1.000000
+
penguins2 = penguins.assign(bill_length_mm2 = pd.cut(penguins['bill_length_mm'], 6))
+
+print(
+    py4st.freq_table(
+        penguins2, ['species', 'bill_length_mm2'], 
+        sort_by = 'values',  dropna = True
+        )
+    )
+#>       species   bill_length_mm2  freq      perc  cumfreq   cumperc
+#> 0      Adelie  (32.072, 36.683]    36  0.105263       36  0.105263
+#> 1      Adelie  (36.683, 41.267]    89  0.260234      125  0.365497
+#> 2      Adelie   (41.267, 45.85]    25  0.073099      150  0.438596
+#> 3      Adelie   (45.85, 50.433]     1  0.002924      151  0.441520
+#> 4   Chinstrap  (36.683, 41.267]     1  0.002924      152  0.444444
+#> 5   Chinstrap   (41.267, 45.85]    12  0.035088      164  0.479532
+#> 6   Chinstrap   (45.85, 50.433]    29  0.084795      193  0.564327
+#> 7   Chinstrap  (50.433, 55.017]    24  0.070175      217  0.634503
+#> 8   Chinstrap    (55.017, 59.6]     2  0.005848      219  0.640351
+#> 9      Gentoo  (36.683, 41.267]     1  0.002924      220  0.643275
+#> 10     Gentoo   (41.267, 45.85]    39  0.114035      259  0.757310
+#> 11     Gentoo   (45.85, 50.433]    65  0.190058      324  0.947368
+#> 12     Gentoo  (50.433, 55.017]    15  0.043860      339  0.991228
+#> 13     Gentoo    (55.017, 59.6]     3  0.008772      342  1.000000
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/glance.html b/docs/man/glance.html new file mode 100644 index 0000000..3cf37a5 --- /dev/null +++ b/docs/man/glance.html @@ -0,0 +1,949 @@ + + + + + + + + + +27  py4stats.glance() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

27  py4stats.glance()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

27.1 概要

+

 R言語の bloom::glance() をオマージュした関数で、sm.ols()smf.logit() などで推定されたモデルを pands.DataFrame に変換します。

+
glance(x)
+
+
+

27.2 引数 Argument

+
    +
  • x(必須)
     sm.ols() もしくは smf.logit() などで作成された分析結果のオブジェクト。
  • +
+
+
+

27.3 返り値 Value

+

 モデルの当てはまり(goodness of fit)の尺度を各列に持つ pands.DataFrame が出力されます。表示される指標はモデルの種類によって異なります。

+
+
+

27.4 使用例 Examples

+
import pandas as pd
+import numpy as np
+from palmerpenguins import load_penguins
+import statsmodels.formula.api as smf
+
+import py4stats as py4st
+penguins = load_penguins() # サンプルデータの読み込み
+
# 線形回帰の場合
+fit_lm1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()
+
+pd.set_option('display.expand_frame_repr', False)
+print(py4st.glance(fit_lm1).round(4))
+#>    rsquared  rsquared_adj  nobs  df     sigma  F_values  p_values        AIC        BIC
+#> 0    0.7829         0.781   342   3  375.3251  406.2735       0.0  5029.1406  5044.4798
+
# ロジスティック回帰の場合
+penguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)
+fit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()
+
+print(py4st.glance(fit_logit1).round(4))
+#>    prsquared   LL-Null  df_null    logLik       AIC      BIC  deviance  df_resid  df_model  nobs
+#> 0     0.5647 -236.8458      341 -103.1079  214.2157  229.555  206.2157       338         3   342
+
+
+

27.5 注意点

+

 参考にしたR言語の bloom::glance() は様々な種類のモデルに対応したジェネリック関数として定義されていますが、py4st.glance() は現段階では限られたモデルにしか対応していません。py4st.glance() のメソッドが定義されているオブジェクトのクラスを確認するには次のコードを実行して下さい。

+
list(py4st.glance.registry.keys())
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/heckitmfx_compute.html b/docs/man/heckitmfx_compute.html new file mode 100644 index 0000000..fed1c21 --- /dev/null +++ b/docs/man/heckitmfx_compute.html @@ -0,0 +1,1029 @@ + + + + + + + + + +31  heckit_helper.heckitmfx_compute() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

31  heckit_helper.heckitmfx_compute()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

31.1 概要

+

 Type2トービットモデルの限界効果を推定します。推定方法についてはダハナ, 勝又(2023, p.136)および Hoffmann, Kassouf(2005)を参照し、関数の実装についてはR言語の heckitmfx::heckitmfx_log() 関数を参考にしています。

+
heckitmfx_compute(
+    model, 
+    exog_select, 
+    exog_outcome, 
+    exponentiate = False
+)
+
+
+

31.2 引数 Argument

+
    +
  • model(必須)
      Py4Etrics モジュールの py4etrics.heckit.Heckit() で作成された HeckitResults クラスのオブジェクト
  • +
  • exog_selectpd.DataFrame(必須)
     Type2トービットモデルのうち第1段階の selection equation(選択関数, 就業決定関数)の説明変数からなる pd.DataFrame
  • +
  • exog_outcomepd.DataFrame(必須)
     Type2トービットモデルのうち第2段階の regression equation(賃金関数)の説明変数からなる pd.DataFrame
  • +
+

これらの引数は heckit_helper.Heckit_from_formula() の出力を使用することを想定しています(使用例を参照)。

+
    +
  • exponentiatebool
     推定結果に指数関数を用いた変換を行うかどうかを表す論理値。もし False (初期設定)であれば限界効果と回帰係数の推定値をそのまま出力し、もし True であれば出力されるデータフレームのうち unconditionalconditionalselectionbeta の列について指数関数 \(100[\exp(x - 1)]\) を用いた変換を行います。例えば被説明変数は対数賃金であれば、変換後の限界効果はパーセンテージで表された賃金の変化率として解釈できます。
  • +
+
+
+

31.3 返り値 Value

+

 次の列を含む pands.DataFrame が出力されます。

+
    +
  • term(index)
     説明変数の名称
  • +
  • unconditional
     Hoffmann, Kassouf(2005, p.6)の(14)式および(15)式に基づく条件付なしの平均限界効果(unconditional marginal effect)
  • +
  • conditional
     Hoffmann, Kassouf(2005, pp.4-5)の(8)式および(9)式に基づく条件付平均限界効果(conditional marginal effect)
  • +
  • selection
     Hoffmann, Kassouf(2005, p.6)の(14)式および(15)式の第3項に当たる間接効果
  • +
  • beta
     第2段階の regression equation の回帰係数
  • +
  • gamma
     第1段階の selection equation の回帰係数
  • +
+
+
+

31.4 使用例 Examples

+

 heckit_helper モジュールはヘックマンの2段階推定(Heckit)を実行を Py4Etrics モジュールの py4etrics.heckit.Heckit() に依存しているため、事前のインストールをお願いします。

+
pip install git+https://github.com/Py4Etrics/py4etrics.git
+

ここでは wooldridge モジュールの mroz データを使い、春山(2023, Chap.24)のモデルを再現します。

+
import pandas as pd
+import wooldridge
+from py4stats import heckit_helper
+
+mroz = wooldridge.data('mroz') # サンプルデータの読み込み
+
+mod_heckit, exog_outcome, exog_select = \
+ heckit_helper.Heckit_from_formula(
+    selection = 'lwage ~ educ + exper + expersq + nwifeinc + age + kidslt6 + kidsge6',
+    outcome = 'lwage ~ educ + exper + expersq',
+    data = mroz
+)
+
+res_heckit = mod_heckit.fit(cov_type_2 = 'HC1')
+
print(heckit_helper.heckitmfx_compute(
+    res_heckit,
+    exog_select = exog_select,
+    exog_outcome = exog_outcome
+    ).round(4))
+#>           unconditional  conditional  selection    beta   gamma
+#> term                                                           
+#> age             -0.0385       0.0010    -0.0395  0.0000 -0.0529
+#> educ             0.2045       0.1067     0.0978  0.1091  0.1309
+#> exper            0.1338       0.0417     0.0922  0.0439  0.1233
+#> expersq         -0.0022      -0.0008    -0.0014 -0.0009 -0.0019
+#> kidsge6          0.0263      -0.0006     0.0269  0.0000  0.0360
+#> kidslt6         -0.6332       0.0157    -0.6489  0.0000 -0.8683
+#> nwifeinc        -0.0088       0.0002    -0.0090  0.0000 -0.0120
+

被説明変数の lwage は対数賃金であるため、exponentiate = True として指数関数 \(100[\exp(x - 1)]\) を使った変換を行うことで、限界効果を賃金の変化率として解釈できるようになります。

+
print(heckit_helper.heckitmfx_compute(
+    res_heckit,
+    exog_select = exog_select,
+    exog_outcome = exog_outcome,
+    exponentiate = True
+    ).round(4))
+#>           unconditional  conditional  selection     beta   gamma
+#> term                                                            
+#> age             -3.7809       0.0954    -3.8725   0.0000 -0.0529
+#> educ            22.6943      11.2606    10.2765  11.5235  0.1309
+#> exper           14.3206       4.2543     9.6555   4.4865  0.1233
+#> expersq         -0.2233      -0.0825    -0.1409  -0.0859 -0.0019
+#> kidsge6          2.6604      -0.0649     2.7271   0.0000  0.0360
+#> kidslt6        -46.9117       1.5782   -47.7365   0.0000 -0.8683
+#> nwifeinc        -0.8730       0.0217    -0.8945   0.0000 -0.0120
+
+
+

31.5 注意

+

 heckitmfx_compute() の実装は実験的なものであり、 Stata における margins コマンドなどの既存の手法とは計算結果が一致しない可能性があります。

+
+
+

31.6 参考文献

+
    +
  • ダハナ・ウィラワン ドニ, 勝又壮太郎(2023) 『Rによるマーケティング・データ分析: 基礎から応用まで (ライブラリ データ分析への招待 4)』新世社.
  • +
  • 春山鉄源 (2023) 『Pythonで学ぶ入門計量経済学』. https://py4etrics.github.io/index.html
  • +
  • Hoffmann, Rodolfo, and Ana Lucia Kassouf. (2005). Deriving conditional and unconditional marginal effects in log earnings equations estimated by heckman’s procedure. Applied Economics, 37(11), 1303–1311. *** Return to Function reference.
  • +
+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/image/Pareto_plot1.png b/docs/man/image/Pareto_plot1.png new file mode 100644 index 0000000000000000000000000000000000000000..a3d9d1bbea537af5de3e9058f14ac7b829ab8967 GIT binary patch literal 25849 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 literal 0 HcmV?d00001 diff --git a/docs/man/image/Pareto_plot2.png b/docs/man/image/Pareto_plot2.png new file mode 100644 index 0000000000000000000000000000000000000000..82f83fbe52905029e3f82c752d9d901b8251c117 GIT binary patch literal 27946 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 IIcDtnALWD3d;kCd literal 0 HcmV?d00001 diff --git a/docs/man/image/coefplot1.png b/docs/man/image/coefplot1.png new file mode 100644 index 0000000000000000000000000000000000000000..82a4975e75acc123b8af90833183992413f89d35 GIT binary patch literal 17557 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 VWm3qy17Azgjwl?CKX~%;{{vYFtq=eJ literal 0 HcmV?d00001 diff --git a/docs/man/image/coefplot2.png b/docs/man/image/coefplot2.png new file mode 100644 index 0000000000000000000000000000000000000000..7430971e9500c8be6d30ba5feda64f5692d83d89 GIT binary patch literal 24639 zcmeHvc|4Wt+W(S96-^oxQW_AARK`k!mC8J3NF`Y!nP>Jc*(IqJ2^q>fCuAO?R1}#j zbCM~UGxPi2t9{y?efGQG^A3Of{&;=P{v6w0mS;WBeP7piy6$W8Cyp#+;b5UqC=01F z2NfxlnfoaerjEI@@e||a>w58jdo2#BTPR&TXJM^prcXJpXJLBbqQwQn(`&8t&CCri zn(P$XEwp{h+Vd6`rskqsw;KO=fzU-WgRQkJbKUSJ^Gszl%qbK$J@OAzq*R0~1&eS|6v{qMgCT1s#mDB7RYi^3P4qwCQ6!CKRp%*#NIe(Zka9VQ)jV0U7 zw#=H6)@0^5XQ>6_!~gVYPKhp{1kIg0SH7nqTcQ;I)xkA~*(DVpd*n(LO~uUYac(g_ z_{M#WOnE1dxqZKP;dwHPD3Z-qncn{X0@R~NkJ77-e#WA5xJ-U`#DdbaRLDoxs5-XH zPuS>_S^9)FD}@qS&@M)?asPL2dYae*7fqwKr|TRu!uCBkC|<^KTB-5G@v4nNuN(E5 zC@vqGgi5U>)4qp2lz4reVNP6@xes;RnSc7dv5b)QXfEB$In80T>`so*Dwm+j z&PAd8R+-wYZqiXvQBy+C1!7d=%0sDlCbVbE8_$?AqcX$ND8-~+lZlC`>Ph{P70wAC zlk@}MwzT1I;!f_;>-bEo-9*u1b)3_rt24wIQ6eKNB@i@ac1`ktNr=N}rtV0*I>kxF zK>F5)a~0vo`L}Etv|g1b9FzPyE^c&Fis1C84dZv`*ImW+Q;pw9X{=9S+Gi}?$h32N z-PHxDJQ8;{aPC>B9qxIHXVuO1J6QXs7Y7SP5AnS0sE80Y`y?Z5{6YDR|L&Tugj^wN zQE~B|=cg5PbQ)B83YtyZ1MR;m96NSHGu0$cO~m@62Av z5t^2^NBClc7H(I6^k+P}dgtj$4hg$tyeb+OqvJe1-Y9JT`Pc?t-bjt4b9Te^)&i9) zmo5$Q(RI?GQmNN(-o&1~D>*r+lww?~x_$e0yN}m4on7fORlQkIQ03C4ORjTX7k66; zNJ;6Aj*gmT)~jV_C(3%BpYmzT(#bVwGf_*Hq}W`}2{D^$7vr^Kn>eZB_#&#{g+*s? zqQHlSsCjI^T}#)byxacYUVX`}gndCi-3sMMzCjSMN5d{QSm0<$T#X$EndapSs2yt9CA1zWlT8 zvllOPUqv0}Y%xn8e6=a4{f?aE?c&yc>%A0t!FDmBxbSh-YYoiPhe-iSk({||$JyWT zsU)e2!(Z!#?FP>aYNb8;@FW*E!1zNlb)cgHx&ZQGqvQ<-Uf zap7u_WAw@}*%clf!qNGgN3UvMqX+uWMN?`&$1mzCU4T9HDo!z&|`IkkamU) zeQdZVAwU1X3LGGYR21zvnJ47@l7mr;Zlc6BzfVpgJY6lNq>F@8aOfjmF{VF9SR5BpGd9w`N;_H2D>51v2bN+8O zQfVkK-nALMfk6q*%@QizVte+eKYjXCr)suV)G2?JNt5%@K9cpVRb%=me8%b*b+trO z?k)W3>X&y-H$-(L+K2f_McTE_@8PpN%1L)rXQwzvp)kCtbUL%kigGv=7Nq zEc54+wIpm(r>;0UQ88V25nbrx$B%=b{V%Gf$KiI`=G4grh=$?02&2h-pv~&c5V@o` zrZQk^{7UT7tIPr!MVG3FCD%NvL`4SaU6j17`x}`mPYZrgJbi4m`%+9sQAX7|VfWj9 zI`7*TQ&Obkf>@I*IuzryGgaxy#|Qxa^&1=cJQj6R^=(CkyM|njlqY9X0V$!Cx}WdJ(UuvkiG8>r<3$T zwb^+K+QnQnO=K=c>B!r@Rag}h<}fOqO?x6l5e~0*TU!w!SA!LMHnrBWCwrLo?aO

f+ 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 jJ{ literal 0 HcmV?d00001 diff --git a/docs/man/image/plot_Blinder_Oaxaca2.png b/docs/man/image/plot_Blinder_Oaxaca2.png new file mode 100644 index 0000000000000000000000000000000000000000..d268b4b8ead261eab57fa8ae27b9716bc9b8e3dc GIT binary patch literal 16077 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 literal 0 HcmV?d00001 diff --git a/docs/man/image/plot_median_diff1.png b/docs/man/image/plot_median_diff1.png new file mode 100644 index 0000000000000000000000000000000000000000..28915877b0f8f3e3da25d9d80e94393936483668 GIT binary patch literal 13379 zcmbVzbwHHq8t)+30v5Wo0R|u}N=qpVG9W3PBGTP3Qi_U&=um>BfW%PJje?5O-6_%? zL&tqy+_URBd-mMD_m3TPWafM0iC;YXSYGxT`97L`7z~CSEBTuu2D8H(gCPmsvkTrK zOzt}iKlts%)$DIr8QMGP*&1ME^z5z8t?bQBZk=#6u(dO>vb@C3%g)Jm!r0#4+D?Fj z!{U!$V7Ib0;^^GB2fh)r*IH8D4uhf8L;sP)i^Q2=FqhJ>zgNj1xZw6SqS4qf3R!<=}pH0b{;yCexL6aD?4y?$V7 z!(jRfD=ID|_qr+VmODzo7HQ;j7vH@XdOSjs`Yz$~0^OOjXIW35j&2z4vdp=qub<^O zsex^HLdD8bH52yoWz_fY-z$Y>9lq4msAL#cuRFS8Fo|P+)jP-5y$!}L8-<0hc9t|d z)d)CjmR)p9&wJk+`$2;H44saoxp@+Nqk!YY$h4xX<8YXhX>GXB_8CODrss+J4t-CI zOv^1@o!Y~J?WMx|lUFMH6Fu2#_=qbE6=YmR%R~JSrYHM4)D23zeqpyvtmaGOiPIV<{S`{hJ z4^`jr+C|P3MlDe?ncbOb+RS3no-TetGh0bk_W9>$)X{^LL97=qD%uU#D37-!vkK{8 zv5#R1RReF{ypc9F>WgFRUt!*4C&_)ohTZw#lSau}ya12Y$h58XgXVa>LG=v7^A|42 z?A*CiBkks02_KqR@u$by9R+hbli9WNM}kV$W8s#Lap)vfRb4Myn<}8nuKe<)?i!<8 z%)NU%#3dw5*OzC9@<>Q`#VZq3Yzw;KBwn^8YsO7Xm_K;%z@#$p0zM|othHj&@%2oO z$Ci7tdWM9q8!^CfqAiLz-a4M@v0)Z4?ml15n}s8qT6AX1>_5gPFD3P4s3wd6xiC7@ zUxphDP-QU}xwB}#u~O@ya^=e1LY-7R9)JC^(|C(anKz}#^t<%*^zXKLRdQNdS^?u^ z?qh-sz85cE>~h*X!&Pj^aZ*WPQf?ugl4)rs@-s);ahtWU zRlnja3mh;oG8)exPif4x8DPS;>UtERBT?0LYi>G;yhfI3Y)lMOxATAxKE|>;|2!{mPU+&tD)GjxTW^>W%vw`e*w~aH(3r93&z}$B zw;OWt<+kkN^P%H!5M*azIdx)3P+#TV99Ax_rd|V#a=QDH0(t1#C-EFJ#Z(n;C9g4+ z=u*Agw{Jfv=k0NhhQu-Lob9q);umYyNmX@#U`f-ye*Kv`1v$C0&Fq%j4b#r-9M!LRRo50Li4X+i_$5xms$Vu%TT5ClPZvf*wvMk1N3>4n^t$gPkYOTmJNfBD zUIj*8v$Gw1!9w;iBPinfb?Lra{sbi-fnn>-^%adg+t`>($DdS%3$48=vJM*P_hxK) zEAyJmZsT5dNM(x(Ruf(%o`WuC9ZEZ8nTG=6+218q0QnWR9Q!+HY(=Si4U%_D7 z&M7V+h~sY+?w3I^z*B{vXeYDDNt0jt?(`T!5k>Gden&s7wevBNGw>nIY%m z;*w1_-C>s64CRpvw_v=nxm2PmFaHAeqS_x?`qX7*FvwwRV~GIQy>I{i8%j$4;m+Uo z#>T}-iN^fYu{&`p$0J~cx-J7xUc7qH4}!X52xn7d2=dHi=FD&F%`a`L+|rYB3!z}j2$TV z9lm!I<33P1>;x%Lco>Q~tM)YHOw&bGDaa{Qb4Est?fM@YsGBy$zl1oRoZp0_A@mg8 zQC-!7oYe8yAXZ+W7Uj0(qcg34^FV!JOczX5K*hnLH3)t+7mr$pf`CbG3si^51H zS!1PuOS8^y4@R_ac5wc+^`3}>6eO5Eg2k@xt?`5a=vIBYs@?qF82KB{f($YtT-b)- z%d|FE_QCf;7o!ab41^kwnb})b0gd<9ZHVw+UUN05G3MW_`I<6KZe$$5-1US$&9is! z-ulQZUZ__r-`6vM&;N2?480y;CH0hnV|gnZ#)8E`iO+Lm@buh%UYM|3M=vwRQ|=cP zKsJBdNk24KU~V4qE{lTm`nTsniQo9!=NVSLI*G-t&zArBJh-KQyuYSg8-0%;3`Y1Q z-40Kgt72lr3?I%wsu;V`R%FI~fP-TrdWGGh0M6L9SBCA=x<=bZLp`i?wA zCw~)N#eaLX&bo+c`!Z;|f=>Q%Svp%~ulNaTKptNQZ4=Vcw8_33gHgK65zz~W ziNU--LAL{5`$EMqX;>4J1gPDtSQ;+l7gw)dUDrB<(W2`=h%vvV9ym8YUwsinw&Ncx z;GCdf*Y;K9x-qzxPR?T>Y`TOg;R1v1|A1k3u%|Pzv9T3jzrJK5PWMK14wLNJ19zPE z*g(A_!^jtf=lisa@R0+hC;$6v3Y-=#ryIGaXxZd^-w`+~2-W^Y7x?X5rXS%F3gOEG zO|rSus^kI|H}hdP|JFfKQP{Gl41l@k^p~st?_2tD*4Ar+%lBcGn1jx+D|iO`UN{&G zW|tEHx7YrGfnys>y+KUGk$SJ~y)69x3}~oX4&y55Cja)gQ zT~LtOz-OP1T$|{M%E}FG3XIb4i~q5OzkBtwjFLFVnv)6biC$14=?u|yv}JkMK3iJ? zCt3E37YBV9ggV$rMNh=r2zh_~`nBTAm-q#KfFEsbYRTFKD)`J>pPuYnVyXV}Mc&qS zj+wClAWKC}P4V~ER)2l65ILUX@$-y<3DcntxG}3Om0tewrWMM{g|9<9Jc4#<9fKql za2Si14HM{6r51f3Z___>6)NALV?pyf{c9dUip)=sU1*3`h+fy0@L7aU35EC(?v;Mq zH(tWQ))LL1NA?>aTI#Y2o{lszupN{VTI#ZcQ@;TnnfUD~N1{<} zIKJk9iO9@*(hw1kVgv-ec2g#bc~gXN>OcJU?c2gaz2GJ;SFDfl9<+AADf(+8m9D4TbfJINCI(v}x)8iZ}ML43rpI@{=WuVDW zRWO83MMZ^TiTlQNAGg(o`uls2ER>6ED#Xb}v;YFW^XcQqk#?hqW zeIdle{Km}8JY=Jw@UqszO?cdiQ7Eo_#+wb>dz^}({8=Qmjq~o<(WHyS)Bsj&{=oCg z>ssU(B^e(&m2hsez=nnfC3*SCo%@d&H^nOq4G~qZs;dX%7AF$SQt~A3EKN0k_My$X zvt&8hUC?Ttp;xx6+hsTmH}S3K?C-*D~pwdckFtUB`S;s8kzKOT`Yp8Nh4 zU8k*`9XH_D3+n0L3(G4jD)5zq7e#>d6>|}H(hJ&b-UMQ~9xbs*_ckt$0N4~CLqRWK zJk$3f1kM5)hmH7R3GC6LE$vE#`)UGIe`c)T8JR@us4r%zMQ;Hy-6&aYPG!OZf^LSc z$EE-IK!!Fd#Z|%4+jtXz&|5e%R$gA!$&Rec)3XtPI1rk^`-g-i8b!FN?53cTzkU0= zxS3UZdTc{uBQqATSAmYpAXU*qgS4$cm=qSPU}N(x+p0GORwpTNDTz2&$x%6KKL$KU z75;_c&IG6UZ@-;8b?R!eMpi?~)`k^eTqRtg&A?|wu~0D7Q|*5wGuE8g;Mnfffl7hu z_gA70bIyVx0{pE2WIg3fZ}Y9&NaoLerp>Y+ZD7sb(k^gJP>7az^61g8<8&0>K+?<@ z3c4+mHFHu*XR^u%6mH$R^}uc8*K^#)b)r5r+=@CnJv+agI|Mt`^UgvSJCqJSygj*n z#n0*ZZ>#SUOlP3u&RGVrZU!lcUJubua zMN2(*(%GZ|+&8|JxuK$>^1#jK7tX8jtNyLy%_z{{%FuS(RstcLnX#r9be0b^2s`3z zBO!ImAK_a`)lVmfBvmgIwTNKPKUQ#0Jb>|xcuPY~ap}?}SUcCJ&!17<0S1JhDwr;Y zdx?xZ0RjD6oNQQwL#uWik448hX6D$^7dF89vYcmc$%F|g*VosZ_7vvvSa!uniFvEE zwL*tWU7YM><>66TSy{nN7cCtTWq$t|L;h2r7pOha?0BJLQk zw?vcVoQL*xA@92PKEz;_@0KNw8KlSG{Pcth!a*}2^0R6kwfOS-&wW^ld$4%wOcrWm<}E%bXJFnfB5L`!}=!>nuMmFfEJf#{2ns*oswPTnC`;o3~%Y zDnc#ahIjAx{))NjH#cYNw%Bg8I+0PUq*D{>joCr^cYX5b_x&tMJZ0{Ac@f+6eS-}! zd&mkk;SE?09R9cIij!-JHGmw`#>B^`Cid_EXC>y~9_JkRF1|2Xi0S2@pyoCra4ynu+gusO z$G~-7$~~qXimb* zeWX}L2&lbq&pZA%WBI{kURCVEm>)iRGzJ*fYjn>DykdbdYGj*_{^vcTy;&8nNZ{=o zWq3K!d2i!2bQlnoS=Rkmfpe`C&|%^a{~g->`TZdT>d1EP94*;eE7=C+@ULx5=gvu5 zbY#x{w<8CAgBc5y-N=|)RCGJ^(2`Jx{%~(6Ky%UGX~17^_vd$RhX20Dsk~u^KgrX+ zeGSPuJ!5~_G$gUmokdA}2#*CzoZs{S##Fc`0rUP0lsOQ`8bM5hBKXhI=sZHykVsRx z0~CKgoPt6Hir5dPn3@iN{MUa$UP5G~C>{#Sr@D)tp6@SHVcI^96HRME`9m%lQRLK; z9{ewC^sg-S)pnlR3p9fe@NZAevF!fwRA4mk#r*>`kv>Neeon;?mt}9}N(!3CCj0)h z2Xg&sK)euO0WCo}PL_THRHyo4w>2hg(VZm~Ev?YE*Mo0KN2y+wka(z)q!vZRsiQ^?WEEZqAhM=NN%Yn}c9kN5=wK z19Yl0Iko%cBh1yCkdpuMMdNU7(=K4!Fhsr=P0kjXm+mf1|d_vHc3fkeeY>o$OG7jz2M z@C%?GNdv|M)$?NQSx~F_`PHeZsqry})ghxfB^$}Y>oa126=cb2d6Wzd-%gcmxo<1j z3-3uOjX^h}xn%f^f+kSf`jv?BK0nMPOJe;g%y-|w z5l0)#4{(&M487i#h%~HhZPP6aCV2p8Noi)AD?r@|0Lad%|JitDZt%&oXH8vscFp+? zW>}+#^}JR+YyfgCq7(X3_fq_ASZi)M_kl|0#F-s1I=T_rltlXgT zi;~LsRJXA#=h#|SyRS9Ba}o0hBGuwl-lQpjnnRrG)`SoY?3_ecnqxI&IKo2*aB$OI z(%lQ7ddJH}2(OM2Qmf|w4u<0wX38kdpj)g0n9Q;pmgNtVC8yzvFXilUU$cPdlfCRX zF?0TxK!{ub9xcE!h}FEk#*qFU*%q%qKc~M_Gd;6DUyH031cr8z(=b&E%nQv0sOr?i z1!Y=v@>q1|DEwdC3`t3riP)K%%y<47`Iu2zL%{_s-&kf{sqO zjvG;#oIw!bL%`d=E7Y~^eH0kJfxgGzo?4NS9n?%!VGwrB4IW^H&pGwF<$%WK09v#d zUP(hE5meuJ_l;G241`Srfar?qYGqIjAt;61Kukn39g_)&%jgeaYEOWHrcMB9H~|>Q z+qie|x(a}E0nm%iOq<_Xxt6R}9pGvpcDf0uWKSU!^7FJ`5TL!+xACnkPg0aR0(86$gnK8HAe?dNsXn9jgkKYB=a>ps_ zy~Ux{1wd{8ToTgms^|zcOjFwcvcspds&&2fcz`Kap=sNYPj=PRnhWr=Z85(l&aVMUrwRyZ8n@zimwE09Z~D zc6UF&JbmrD8o$e23~?m;P&lbRNA>yyMtd4N#l}|kBZ^+q&Im)oM&z# z_X)D(Qdv{+fkUJi)07i&Vn-SeFBr?F&?!FfbY7hEgW|3A>>lBHa!`#-@I`T2UQ2)b zp;LjBBJ1+Lf^(7&EI|8?f_tohVhwc6wDGNvW!~U1uocu`|1=PXPzTRp5r0*@aRc2? zWlAzIN+?`m4=EW_j+~X1#22rQu>t`OZ(MT}t`(erwz@Q(ioCC0x1}%?@s~cbg^fNC zbe@R>=*jF`Zr9FDx`$0R?ncS-Cys@uy6gA&DM*$6Bpp!$KS;-87YZBY^sHg)FE38w z032l63`l^GeL*eleQ1eO%kR8l9I6b8T9g8fw0yv+i%ew`t7YBWL0v zQ-ZW#m-W}JO_!w34wSQUaw-fC4no}BFf=p_@K(46t`2n1F^K0I&d#}Gt*NO^O-gpM zy)RCRaoLZ^!|BU`5A~vQFn=PSgzR}=-%TVhKz9l{57qz}jJDoK*KhMBWd!x;=v9Ys z-+;ag0*~70JgZ8QJhb)Ojr|01@R*vQ@ydkqDFD;#$TabTW94?5((1OW1+TOA7}P}D zJS{MKlB|VKV=(b~t}E-si8armW9J}KV$=>mrbxhx7uMpwIfm6Vh_C-}ljV(#;~~7? zL`QR&c)WY}E+7SkKUDQW|9$T%L77liQ#&_WwWa?skc8|WfrXA;D>qHUcL^%!7;1`0 zj0SBC80^L%hX<#h{2Ewvy6rnimIHt-0{LV@j)4)ta*_|()~|wsoIVWu`T3FJB-Qbd zAxY4$k@k%7WPQj<0f^~$ZT*L2`tz%5Gr((kKj08h%4`0F*Ir%@!2MRYNrkQfQlhuv z>^nATkd*?N9(a3K_FFIKoxtf4^>S`bG0>OU~LKL~n*R3F!v@Y<@l z{pY7QgO1}7M1m3SC$Pc#4{Sdq&>;A7^!@wyK|sZj+}%d1prL?&5)d5x6*OqFzZH`I z0Pt*mUy)6|KlcYpz_y6<5BBE+mjA@`VPM(YbPN)W!DHR# z?=KFTv?TuF0cvDYkdYx4g{*$?+%c}D|G<5K8n?YN8?``#m4ZEF&;Ky+SWcZP?Hz;| zU;*9Y_0Ja8AD#qYJZ3CR2q;2$MX>Jhe0utaWuWNpUi?q(4@k8iSCLceCAaNM-1SB# z1*Q-GLlv;Dfjz}!W-9UX^W$SSH`eSRJ&r4>Sek51MGH8;Q3E}%A$gYk=y!XiJM<*9 z6i_GvLPL|DJ$uHQT?;V${OQwTAUqe|S|gijgrORkr_c{1>2v+>D8-r zzdWdJAy!2~Pazj35DUo0^edh@QM(`;;37e<>>(Dwopq`F&w547TUFc#WMr(Nd;Q)XCSLM)a zl$V1@X7nv|SCw>ju0Z7_`HWYRS4$!m_$KPlKWw(G^4z4k46_hm2_yjVg$`H;&Pb+l z{VC7{u-f_d^{0IWPk}iD0~5w@phzHR!otdtdWRef5aU$=bu>Z$%5s|4!7AF@XCloW z^mw}@#HV0+)jPfV)vrCLt4FRDzN~>S7S(}OAQlUA70vKqZkul(rM#k;VC~>)21n%P=00U0eNP<~6$K8Iyra$KdnY|B zZD)R){luGpb%*2OiSOTUcZ2eR^mz3pV0mVM>JdwT*jj)=gOFj6_#G-QnD4RIZ8m5Sh-al6djCa2?*H)~0%?{?}*Gj0W}oVg6t7J+0&F-tT1Dj}QuyQ@@PgHmXkUnevoI5)7~!#*XILAa z9C$%9!~$V71j}KbO#zGwf-BYSt5@%xkqb|{GnEInFbpS99X~$atg4%AzgB^x82I+> z6&dZ!2NT~`@Lc1gTBd~)@7k5*jyPJ8k6Nn>c^6;5M_*S~@$%(MDu!MdS<%S1PXNFL zkmg2z-fPQzEFOe~I3R+FKx(OI%KNS3VaQ>~X1FHIVT0H@4qH}+14G0u-m14)Ic0L9 zxb|T-43bPUa=`@40!FF$>4uz1SFVj={HiOkLPBULox^mGHqa7uMu@?LJFTUq{R(d=uPp7d zPMN9mbSLb*8O?ryhP6Ujy7%}oRa{S$m}1O$RVGg}b7b$k=Zqpc{j)$85rl(Dr!lA$ z$unKNy{@OR2uZ@?5PH`yf1ZFSTFt_X4QG$j63^<^SLRXh6DK=W;fC|Rm6Y{vF7nE} z`t=H<>&#sMPiz23z_n=+WQ187s6j|L06ppXRMC5Au}+Lqd&XH#i0BU}GT_y#cqCaORUn5HrbVc}+Z*4~xW`caH9#!!;K5qQB^Zy1 zZ&{%rT@5W;nIAUWR)f*38)O$6f0P|#0l9F|P za>5BvKf(lE6iIg-c+sk9GZF{14*WRu5=UXLNZ)q!WFMw z!12=uot&5Zy_vyy@5%?jw^(LPg58@G;N4^46d*MI7Op!9;<#AN@xM|hrnP_GIggm zWLl(&o5pzZNqTTSmP{!hDq?hBC~Ct>*#YxcW`~!Jf!5g!`7X3jCx+M>lL-*QeDHk& zUcV*)Y<)Ua7IZ{|1S4AA2U9+xOLQHhFpJ}Rj7=@Ft4j;X+er}@4W6LMpA8q7*;!Yc zrG^L-v~q)tQna*8Nhw;?064%ZD5wR5Ez7hy(fR{i!Sd*v;Tb^?Ft~tkp_6s$b_gn| z%)5moZv#U^7EoUBO<;X(OgWX@03RZ80S9>c$Dq#$h?r)_LKt)F@k}I{G#BZ}#nsg`dpV{ssOE=pwCFn@J01h@_79=^jRe?-jUOK$ zfkB?3X~h)N%#01=fw3!>RVh32aLWZ@c_(%vqz`cAFXKz`oJc$bCruNQQW=J4{ey#D zK6I|D1;z&Hx~oHRlLvfZS-fJ146)SWd!#Q?Ewn%s0_tT3iI)iWCrG^tZl89&g8s^U z<_rsXYB@bP!se34)>2{TRBwqcrO?6)XjyMT^FU34!8eYEKz_YAa~8}vq%C$kc3ME3 zrhaB2jo_FpwCWW`v4zSTXv(;SktifD>u24q407Craiiv9w>zjjzzhbBpmQ4XH+5}} z$&=Cv*na`ZF%uAyVL(ujre#hil#evv8TLJ`g+S0-pg5RMwr7;XG!d!-NW(URNNQGg z6wUMJ3FotUEkm2UP+zYUS?? z^!Ha2S!=IFGOD^xYAcKqzd{20_-r|2>Qp-E6AlY=^*{%hEY$>9_6`7EGAvI;KlW~Q zkmI7WU<-J(#y-@SK7;oh*gBpS?lMG8fQbhc6B84MAO?9?li^z7wJOuLw5Ti?!Kh4U z8;6Tl@nsN7f;qj`?A1Nq@rQJ9qs#=5vZ-3oaIDJh+cAT)&Ma;+rlw>3SJJ>PZMjq{ zsIM7zcS5ma*?W)ouoHAcO^@{fM%E;0Y3U4!=X5SL*?_B6z~^PnTmf4v3EI>+5Qywn zns`@}0mhKaPVD`4yNfgDVfje_LkNY1T}f~(=}hW?wK9uZM2E(E=K+?p3c3TOPJ;05 z9Me~$<}L*}0L*<2y>9S^2>`%H(6qt=Hxeu%;j0GH(=UR$fJ0}VrO7ai z_7bFn*wJh`5^Ot73u&}WFN}*j#sa) zudhpWa>M^05bEK*--5Ci9fD#KaeF#+|yEI?QqrsTJS=9ebGbb>jjjUnEW zdQwWkNKodL_{0aLR!rRSZ$9UZrxav5&%&_NCd}X_055_Qg8-rBF|SK?C$hT1up77| zRdPJPs5GMpnL^X8kjk#Io$LS|U@&>u+@n?7$z-%47W%tkH|*Sgr0yhOukJ-0>C04$ zXVP}(Cj}iR)GT_7wZQ~o{*d;>)nXWt9GH}$YT-6*l7y;W2iSh{d_%UhHinT-2-k#) z2}o3W>VXD>!^4^|@SX|nho!qXDX9uX=S&!{A!Jl}4w=zzy~@>CDTEex6WXpCV22#G z%Jd$OEjLzR&)d=5o}HQ5WC}Aa#4fwq?MeYxgj%~UcYBmC5Qq#!Zd4wOhp$Yi@7FMWut;I})6=LV-;T9VXNV6dDDbQFj?b&!P9pj%pL tT2NGeGuMIc6#45BjW literal 0 HcmV?d00001 diff --git a/docs/man/image/plot_miss_var1.png b/docs/man/image/plot_miss_var1.png new file mode 100644 index 0000000000000000000000000000000000000000..7d99d39cb3f7bcfb3f2452888457d30e43d9a004 GIT binary patch literal 16981 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 E0Hvm + + + + + + + + +34  データ型を判定する論理関数 – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+
+ +
+ +
+ + +
+ + + +
+ +
+
+

34  データ型を判定する論理関数

+
+ + + +
+ + + + +
+ + + +
+ + +
+

34.1 building_block.is_character() building_block.is_logical() building_block.is_numeric() building_block.is_integer() building_block.is_float()

+
+
+

34.2 概要

+

 代入された値、あるいはリストの要素が特定のデータ型であるかどうかを判定する関数です。基本的には pandas.api.types.is_*() 関数のラッパー関数で、命名規則はR言語の同種の関数に基づいています。

+
is_character(x)
+
+is_logical(x)
+
+is_numeric(x)
+
+is_integer(x)
+
+is_float(x)
+
+
+

34.3 引数 Argument

+
    +
  • x(必須)array, list, or pd.Series
  • +
+
+
+

34.4 返り値 Value

+

引数 x が次の型であるときに、True を返します。

+
    +
  • is_character()str
  • +
  • is_logical()bool
  • +
  • is_numeric()int, float or bool
  • +
  • is_integer()int or bool
  • +
  • is_float()float
  • +
+
+
+

34.5 使用例 Examples

+
from py4stats import building_block as build
+x_str = ['A', 'B']
+x_bool = [True, False, True]
+x_int = [1, 2, 3]
+x_float = [0, 1, 2.1, 0.5]
+x_list = [x_str, x_bool, x_int, x_float]
+
+print([build.is_character(x) for x in x_list])
+#> [True, False, False, False]
+
+print([build.is_logical(x) for x in x_list])
+#> [False, True, False, False]
+
+print([build.is_numeric(x) for x in x_list])
+#> [False, True, True, True]
+
+print([build.is_integer(x) for x in x_list])
+#> [False, False, True, False]
+
+print([build.is_float(x) for x in x_list])
+#> [False, False, False, True]
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/is_dummy.html b/docs/man/is_dummy.html new file mode 100644 index 0000000..dc84a29 --- /dev/null +++ b/docs/man/is_dummy.html @@ -0,0 +1,972 @@ + + + + + + + + + +20  ダミー変数の判定: py4stats.is_dummy() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

20  ダミー変数の判定: py4stats.is_dummy()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

20.1 概要

+

リストや Series の要素が、指定されたダミーコードのみで構成されたダミー変数かどうかを判定します。

+
is_dummy(
+    data: Union[IntoFrameT, IntoSeriesT],
+    cording: Sequence[Any] = (0, 1),
+    dropna: bool = True,
+    to_pd_series: bool = False,
+    **kwargs
+    )
+
+
+

20.2 引数 Argument

+
    +
  • data: list, IntoFrameT or IntoSeriesT
    入力データ。list あるいは、narwhals が受け入れ可能な DataFrame もしくは Series 互換オブジェクト
  • +
  • cording: list
    ダミーコードとして許容される値の集合。入力データに含まれる値の集合が、この集合と完全に一致する場合にダミー変数であると判定されます。デフォルトは (0, 1) です。
  • +
  • dropnabool
     欠測値(NaN)をコーディングの判定から除外するかどうかを表すブール値。初期設定は True です。
  • +
  • to_pd_series: bool
    data が DataFrame 場合の戻り値の形式を制御します。 +
      +
    • True の場合:列名をインデックスにもつ pandas.Series を返します
    • +
    • False の場合:各列の判定結果を要素とする list を返します
    • +
  • +
  • **kwargs: 将来の拡張のために予約されたキーワード引数です。
  • +
+
+
+

20.3 返り値 Value

+
    +
  • data が Series-like の場合
    +
      +
    • -指定されたダミーコードのみで構成されていれば True、それ以外の場合は False
    • +
  • +
  • data が DataFrame-like の場合
    +
      +
    • to_pd_Series = False のとき:各列ごとの判定結果を要素とする list[bool]
    • +
    • to_pd_Series = True のとき:列名をインデックスにもつ pd.Series
    • +
  • +
+
+
+

20.4 使用例 Examples

+
import py4stats as py4st
+import pandas as pd
+from palmerpenguins import load_penguins
+
+penguins = load_penguins() # サンプルデータの読み込み
+
+# ダミー変数の作成
+penguins2 = pd.get_dummies(
+    penguins.loc[:, 'species':'bill_length_mm'], 
+    columns = ['species']
+    )
+penguins2['Intercept'] = 1 # 定数列の作成
+penguins2['female'] = penguins['sex'] == 'female' # bool 型の変数を作成
+
+print(py4st.is_dummy(penguins2['species_Adelie']))
+#> True
+

なお、初期設定では bool 型の変数についても True が出力されます。

+
print(py4st.is_dummy(penguins2))
+#> island               False
+#> bill_length_mm       False
+#> species_Adelie        True
+#> species_Chinstrap     True
+#> species_Gentoo        True
+#> Intercept            False
+#> female                True
+#> Name: 0, dtype: bool
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/miscellaneous.html b/docs/man/miscellaneous.html new file mode 100644 index 0000000..7364330 --- /dev/null +++ b/docs/man/miscellaneous.html @@ -0,0 +1,957 @@ + + + + + + + + + +35  数字のフォーマットを変更する関数 – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

35  数字のフォーマットを変更する関数

+
+ + + +
+ + + + +
+ + + +
+ + +
+

35.1 概要

+
style_number(x, digits = 2, big_mark = ',')
+
+style_currency(x, symbol = '$', digits = 0, big_mark = ',')
+
+style_percent(x, digits = 2, unit = 100, symbol = '%')
+
+
+

35.2 引数 Argument

+
    +
  • xscalar or array-like of int or float
  • +
  • p_valuescalar or array-like of int or float
  • +
  • digitsint
    小数点以下の桁数
  • +
  • big_markint
    3桁毎の桁区切りに使用する記号。カンマ ',', アンダーバー '_', もしくは 非表示 '' から選ぶことができます。
  • +
  • symbolstr
     貨幣記号を表す文字列
  • +
+
+
+

35.3 返り値 Value

+

 以下の値をもつ pd.Series を返します。

+
    +
  • building_block.style_number(): 任意の数値に対して、小数点以下を桁数 digits に丸め、3桁区切り記号を通過した値を文字列として返します。f-string によるフォーマット f'{x:{big_mark}.{digits}f}' を用いて実装されています。
  • +
  • building_block.style_currency()build.style_number() と同じく任意の数値に対して、小数点以下を桁数 digits に丸め、3桁区切り記号を通過した値を文字列として返しますが、さらに貨幣記号を追加します。f-string によるフォーマット f'{symbol}{x:{big_mark}.{digits}f}' を用いて実装されています。
  • +
  • building_block.style_percent(): 任意の数値をパーセンテージ表示に変換した値を文字列として返します。f-string によるフォーマット f'{x:,.{digits}%}' を用いて実装されています。
  • +
+
+
+

35.4 使用例 Examples

+
import numpy as np
+from py4stats import building_block as build
+
+x = [2000, 1000, 0.5, 0.11, 0.123]
+
+print(build.style_number(x).to_list())
+#> ['2,000.00', '1,000.00', '0.50', '0.11', '0.12']
+
+print(build.style_number(x, big_mark = '').to_list())
+#> ['2000.00', '1000.00', '0.50', '0.11', '0.12']
+
+print(build.style_currency(x).to_list())
+#> ['$2,000', '$1,000', '$0', '$0', '$0']
+
pct = [0.11, 0.06, 0.05, 0.01, 0.00234]
+
+print(build.style_percent(pct).to_list())
+#> ['11.00%', '6.00%', '5.00%', '1.00%', '0.23%']
+
+print(build.style_percent(pct, unit = 1).to_list())
+#> ['0.11%', '0.06%', '0.05%', '0.01%', '0.00%']
+
+print(build.style_percent(pct, unit = 1000, symbol = '‰').to_list())
+#> ['110.00‰', '60.00‰', '50.00‰', '10.00‰', '2.34‰']
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/oxford_comma.html b/docs/man/oxford_comma.html new file mode 100644 index 0000000..e53940a --- /dev/null +++ b/docs/man/oxford_comma.html @@ -0,0 +1,941 @@ + + + + + + + + + +37  並列文の作成 oxford_comma() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

37  並列文の作成 oxford_comma()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

37.1 概要

+

 文字列のリストを与えると、リストの要素を英文における並列文の形に変換する関数です。表記法については Wikipedia Serial comma を参照し、コードについては stack overflow:Grammatical List Join in Python [duplicate] を参照しました。

+
oxford_comma(x, sep_last = 'and', quotation = True)
+
+oxford_comma_and(x, quotation = True)
+
+oxford_comma_or(x, quotation = True)
+
+
+

37.2 引数

+
    +
  • xstr or list of str
  • +
  • quotation: bool
     リストの各要素にクオーテーションマーク ’’ を追加するかどうかを表す論理値。True(初期設定)であればクオーテーションマークを追加し、False であれば追加しません。
  • +
  • sep_last: str oxford_comma() のみ
     リストの最後の要素の直前に付加する単語を表す文字列。
  • +
+

なお、oxford_comma_and(x)oxford_comma(x, 'and') と、oxford_comma_or(x)oxford_comma(x, 'or') と同等です。

+
+
+

37.3 使用例

+
from py4stats import building_block as build
+x = ['A', 'B', 'C']
+
+print(build.oxford_comma_and(x))
+#> 'A', 'B' and 'C'
+
+print(build.oxford_comma_and(x, quotation = False))
+#> A, B and C
+
+print(build.oxford_comma_or(x))
+#> 'A', 'B' or 'C'
+

リストの要素が1つの場合、あるいは x に文字列が指定された場合はカンマなどを追加せずにそのまま出力します。

+
print(build.oxford_comma_or(['A']))
+#> 'A'
+
+print(build.oxford_comma_or('A'))
+#> 'A'
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/plot_category.html b/docs/man/plot_category.html new file mode 100644 index 0000000..962a17b --- /dev/null +++ b/docs/man/plot_category.html @@ -0,0 +1,992 @@ + + + + + + + + + +8  py4stats.plot_category() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

8  py4stats.plot_category()

+
+ + + +
+ + + + +
+ + + +
+ + +

カテゴリ変数の回答分布を 100% 積み上げ横棒グラフとして描画します。

+
+

8.1 概要

+

本関数は、複数のカテゴリ変数について回答分布を集計し、各変数を1本の100%積み上げ横棒グラフとして可視化します。リッカート尺度による設問や、共通のカテゴリをもつ、アンケートの回答データの可視化を主な用途としています。

+
plot_category(
+    data: IntoFrameT,
+    palette: Optional[sns.palettes._ColorPalette] = None,
+    legend_type: Literal['horizontal', 'vertical', 'none'] = 'horizontal',
+    show_vline: bool = True,
+    ax: Optional[Axes] = None,
+):
+
+
+

8.2 引数 Argument

+
    +
  • dataIntoFrameT(必須)
    カテゴリ変数を含む入力データフレーム(1列につき1変数)。 narwhals がサポートする任意のデータフレーム型(例:pandas.DataFramepolars.DataFrame)を指定できます。 すべての列は、同一のカテゴリ体系(共通のカテゴリラベル)を共有している必要があります。 注意pyarrow.Table については、その仕様による機能制限があります。詳細は「注意 Notes」セクションを参照してください。
  • +
  • sort_by: str
    回答カテゴリの並び順を決定する基準。'values':カテゴリの値(ラベル)でソートします。'frequency':出現頻度の高い順にソートします。デフォルトは 'values' です。
  • +
  • palette sns.palettes._ColorPalette:
    回答カテゴリに使用するカラーパレット。 None の場合は、内部でデフォルトの発散型パレットを生成します。 指定する場合は、カテゴリ数と同じ長さの配列である必要があります。 デフォルトは None です。
  • +
  • legend_typestr:
    凡例の配置方法。デフォルトは 'horizontal' です。 +
      +
    • 'horizontal':凡例をグラフ下部に横並びで表示します。
    • +
    • 'vertical':凡例をグラフ右側に縦並びで表示します。
    • +
    • 'none':凡例を表示しません。
    • +
  • +
  • show_vline:bool
    True の場合、x = 0.5(50%)の位置に基準となる垂直線を描画します。 割合の中点を視覚的に示す目的で使用できます。デフォルトは True です。
  • +
  • ax:
    描画先となる matplotlib の Axes。複数のグラフを並べる場合などに使用します。デフォルトの None の場合は、新しい Figure と Axes が作成されます。
  • +
+
+
+

8.3 使用例 Example

+
import py4stats as py4st
+import pandas as pd
+import itertools
+
+Q1 = [70 * ['Strongly agree'], 200 * ['Agree'], 235 * ['Disagree'], 149 * ['Strongly disagree']]
+Q2 = [74 * ['Strongly agree'], 209 * ['Agree'], 238 * ['Disagree'], 133 * ['Strongly disagree']]
+Q3 = [59 * ['Strongly agree'], 235 * ['Agree'], 220 * ['Disagree'], 140 * ['Strongly disagree']]
+Q4 = [40 * ['Strongly agree'], 72 * ['Agree'], 266 * ['Disagree'], 276 * ['Strongly disagree']]
+
+data = pd.DataFrame({
+    'I read only if I have to.':list(itertools.chain.from_iterable(Q1)),
+    'Reading is one of my favorite hobbies.':list(itertools.chain.from_iterable(Q2)),
+    'I like talking about books with other people.':list(itertools.chain.from_iterable(Q3)),
+    'For me, reading is a waste of time.':list(itertools.chain.from_iterable(Q4))
+})
+
categ_list = ['Strongly disagree', 'Disagree', 'Agree', 'Strongly agree']
+
+data_pd = data.apply(pd.Categorical, categories = categ_list)
+
+py4st.plot_category(data_pd)
+
+
+

+
plot_category1
+
+
+
import polars as pl
+import textwrap
+
+data_pl = pl.from_pandas(data)
+data_pl = data_pl.with_columns(
+        pl.all().cast(pl.Enum(categ_list))
+    )\
+    .rename(lambda x: textwrap.fill(x, width = 25))
+
+fig, ax = plt.subplots()
+
+py4st.plot_category(
+    data_pl, 
+    palette = sns.color_palette('RdBu', n_colors = 4),
+    ax = ax
+    )
+
+ax.set_title('Survey on attitudes toward reading');
+
+
+

+
plot_category2
+
+
+
+
+

8.4 注意 Notes

+
    +
  • sort_by="values" は、カテゴリの順序情報(例:pandasordered categoricalPolarsEnum で定義した順序)を前提に、カテゴリ順で描画します。
  • +
  • 推奨: sort_by=“values” を利用する場合は、入力として pandas.DataFrame(各列を pd.Categorical に設定)または polars.DataFrame(各列を Enum に設定)を推奨します。
  • +
  • polars.Categorical の列では、カテゴリ順が期待通りに保持されず、辞書順(例:Agree, Disagree, …)で描画される場合があります。
  • +
  • pyarrow.Table を入力した場合、sort_by = 'values’dictionary 型の制約によりエラーとなる場合があります。その場合は sort_by="frequency" を使用してください。
  • +
+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/plot_miss_var.html b/docs/man/plot_miss_var.html new file mode 100644 index 0000000..22948f8 --- /dev/null +++ b/docs/man/plot_miss_var.html @@ -0,0 +1,957 @@ + + + + + + + + + +16  py4stats.plot_miss_var() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

16  py4stats.plot_miss_var()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

16.1 概要

+

R言語の naniar::gg_miss_var() をオマージュした関数で、データフレームの各変数について欠測値の量を横棒グラフとして可視化します。欠損値統計の計算には py4stats.diagnose() を使用しています。

+
plot_miss_var(
+    data: IntoFrameT,
+    values: Literal['missing_percent', 'missing_count'] = 'missing_percent', 
+    sort: bool = True, 
+    miss_only: bool = False, 
+    top_n: Optional[int] = None,
+    fontsize: int = 12,
+    ax: Optional[Axes] = None,
+    color: str = '#478FCE',
+    **kwargs: Any
+)
+
+
+

16.2 引数 Argument

+
    +
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • +
  • normalizestr
     グラフに表示する値の種類。 +
      +
    • missing_percent 列毎の欠測率をパーセンテージで表示します。
    • +
    • columns 列毎の欠測数を表示します。
    • +
  • +
  • sortbool
    プロット前に選択した指標で列をソートするかどうか。初期設定は True です。。
  • +
  • miss_onlybool
    欠測値を含まない列を除外するかどうか。True だと欠測値を含まない列を除外し、False(初期設定)だと省略せずに全ての列を表示します。
  • +
  • top_nint
    棒グラフを表示するグラフの個数。top_n = None(初期設定)の場合、すべての棒グラフを表示し、整数値が指定された場合、欠測率(数)の上位 top_n 件が表示されます。
  • +
  • ax
     matplotlib の ax オブジェクト。複数のグラフを並べる場合などに使用します。
  • +
  • fontsizeint
     軸ラベルなどのフォントサイズ。
  • +
  • palettelist of str
     グラフの描画に使用する色コード。棒グラフの色に対応します。
  • +
+
+
+

16.3 使用例 Example

+
import py4stats as py4st
+import pandas as pd
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込
+
+py4st.plot_miss_var(penguins)
+
+
+

+
plot_miss_var1
+
+
+
py4st.plot_miss_var(penguins, values = 'missing_count', miss_only = True)
+
+
+

+
plot_miss_var2
+
+
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/point_range.html b/docs/man/point_range.html new file mode 100644 index 0000000..e6c062a --- /dev/null +++ b/docs/man/point_range.html @@ -0,0 +1,972 @@ + + + + + + + + + +10  数値変数の点推定と区間推定:py4stats.mean_qi() py4stats.median_qi() py4stats.mean_ci() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

10  数値変数の点推定と区間推定:py4stats.mean_qi() py4stats.median_qi() py4stats.mean_ci()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

10.1 概要

+

 R言語の ggdist::mean_qi() をオマージュした数値変数の点推定と区間推定を行う関数です。

+
mean_qi(
+    data: Union[IntoFrameT, SeriesT],
+    width: float = 0.975,
+    interpolation: str = 'midpoint',
+    to_native: bool = True
+)
+mean_qi(
+    data: Union[IntoFrameT, SeriesT],
+    width: float = 0.975,
+    interpolation: str = 'midpoint',
+    to_native: bool = True
+)
+
+median_qi(
+    data: Union[IntoFrameT, IntoSeriesT],
+    width: float = 0.975,
+    interpolation: str = 'midpoint',
+    to_native: bool = True
+)
+
+mean_ci(
+    data: Union[IntoFrameT, IntoSeriesT],
+    width: float = 0.975,
+    to_native: bool = True
+)
+
+
+

10.2 引数 Argument

+
    +
  • dataIntoFrameT or IntoSeriesT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame もしくは Series 互換オブジェクト (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • +
  • widthfloat
     分位点区間の幅、もしくは信頼区間の計算に用いる信頼係数。
  • +
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • +
+
+
+

10.3 使用例 Examples

+
import py4stats as py4st
+import pandas as pd
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込み
+
+print(py4st.mean_qi(penguins['bill_length_mm']).round(2))
+#>          variable   mean  lower  upper
+#> 0  bill_length_mm  43.92   34.8   53.1
+
+
+print(py4st.median_qi(penguins['bill_length_mm']).round(2))
+#>          variable  median  lower  upper
+#> 0  bill_length_mm   44.45   34.8   53.1
+
+print(py4st.mean_ci(penguins['bill_length_mm']).round(2))
+#>          variable   mean  lower  upper
+#> 0  bill_length_mm  43.92  43.26  44.58
+
+print(py4st.mean_ci(penguins[['bill_length_mm', 'bill_depth_mm']]).round(2))
+#>          variable   mean  lower  upper
+#> 0  bill_length_mm  43.92  43.26  44.58
+#> 1   bill_depth_mm  17.15  16.91  17.39
+
+print(penguins.groupby('species')[['bill_length_mm']].apply(py4st.median_qi).round(2))
+#>                    variable  median  lower  upper
+#> species                                          
+#> Adelie    0  bill_length_mm   38.80  34.05  44.10
+#> Chinstrap 0  bill_length_mm   49.55  42.45  55.00
+#> Gentoo    0  bill_length_mm   47.30  42.65  53.85
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/predicate_str.html b/docs/man/predicate_str.html new file mode 100644 index 0000000..5fb457f --- /dev/null +++ b/docs/man/predicate_str.html @@ -0,0 +1,1003 @@ + + + + + + + + + +19  文字列のフォーマットについての論理関数 py4stats.is_number(), py4stats.is_ymd(), py4stats.is_ymd_like() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

19  文字列のフォーマットについての論理関数
py4stats.is_number(), py4stats.is_ymd(), py4stats.is_ymd_like()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

19.1 概要

+

Series の要素が、特定のフォーマットにそった文字列かどうかを判定する関数です。

+
is_number(
+  data:IntoSeriesT, 
+  na_default:bool = True, 
+  to_native: bool = True
+  )
+
+is_ymd(
+  data:IntoSeriesT, 
+  na_default:bool = True, 
+  to_native: bool = True
+  )
+
+is_ymd_like(
+  data:IntoSeriesT, 
+  na_default:bool = True, 
+  to_native: bool = True
+  )
+
    +
  • py4stats.is_number():与えられた文字列が数字かどうかを判定します。
  • +
  • py4stats.is_ymd():与えられた文字列が yyyy-mm-dd フォーマットにそった値かどうかを判定します。
  • +
  • py4stats.is_ymd_like():与えられた文字列が’2024年3月3日’ のような yyyy-mm-dd に近いフォーマットの値かどうかを判定します。
  • +
+
+
+

19.2 引数 Argument

+
    +
  • dataIntoSeriesT(必須)
  • +
  • 入力データ。narwhals が受け入れ可能な Series 互換オブジェクト (例:pandas.Seriespolars.DataFramepyarrow.Table)を指定できます。
  • +
  • na_defaultbool
     NA値に対して関数が返す値。na_default = True (初期設定)であれば NoneNaN には True を返し、na_default = False であれば False が返します。
  • +
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • +
+
+
+

19.3 使用例

+
import py4stats as py4st
+import pandas as pd
+import numpy as np
+
+s = pd.Series([
+    '123', "0.12", "1e+07", '-31', '2個', '1A',
+    "2024-03-03", "2024年3月3日", "24年3月3日", '令和6年3月3日',
+    '0120-123-456', "apple", "不明", None, np.nan
+    ])
+
+print(s[py4st.is_number(s)])
+#> 0       123
+#> 1      0.12
+#> 2     1e+07
+#> 3       -31
+#> 13     None
+#> 14      NaN
+#> dtype: object
+
+print(s[py4st.is_ymd(s)])
+#> 6     2024-03-03
+#> 13          None
+#> 14           NaN
+#> dtype: object
+
+print(s[py4st.is_ymd_like(s)])
+#> 6     2024-03-03
+#> 7      2024年3月3日
+#> 8        24年3月3日
+#> 9       令和6年3月3日
+#> 13          None
+#> 14           NaN
+#> dtype: object
+

 実践的な使用例として「厚生労働省 4.食中毒統計資料」のうち、2020年の食中毒事件一覧を考えます。東京都のデータを取り出て'摂食者数'の列を見ると、数字が並んでいるものの dtypeobject となっており、数字ではない値が含まれていることが疑われます。

+
# 厚生労働省:食中毒統計資料より
+data = pd.read_excel('https://www.mhlw.go.jp/content/R2itiran.xlsx', header = 1)\
+  .query('都道府県名等.str.contains("東京")')
+
+print(data['摂食者数'])
+#> 280    41
+#> 281    86
+#> 282     3
+#> 283    10
+#> 284     3
+#>        ..
+#> 381     2
+#> 382     2
+#> 383     4
+#> 384     6
+#> 385     4
+#> Name: 摂食者数, Length: 106, dtype: object
+

eda.is_number() を使うと数字以外にどのような値が含まれているかを確認できるため、これをもとに「不明」となっている部分は NaN に置き換えるなどの対処法が考えられます。

+
print(data.loc[~py4st.is_number(data['摂食者数']), '摂食者数'])
+#> 285    不明
+#> 315    不明
+#> 374    不明
+#> 375    不明
+#> 377    不明
+#> 378    不明
+#> 379    不明
+#> 380    不明
+#> Name: 摂食者数, dtype: object
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/relocate.html b/docs/man/relocate.html new file mode 100644 index 0000000..28a0d6f --- /dev/null +++ b/docs/man/relocate.html @@ -0,0 +1,994 @@ + + + + + + + + + +13  py4stats.relocate(): 列を削除せずに並び替える – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

13  py4stats.relocate(): 列を削除せずに並び替える

+
+ + + +
+ + + + +
+ + + +
+ + +
+

13.1 概要

+

relocate() 関数は、データフレームに含まれる列を削除することなく並び替えるための関数です。指定した列(1 列または複数列)を、先頭・特定の列の前・特定の列の後に移動させることができます。本関数は、R の dplyr:relocate() に近い操作感を Python で提供することを目的としています。列の指定には、列名(文字列)だけでなく、narwhals の式(Expr)や Selector を利用でき、柔軟な列選択

+
relocate(
+        data: IntoFrameT, 
+        *args: Union[str, List[str], narwhals.Expr, narwhals.selectors.Selector], 
+        before: Optional[str] = None,
+        after: Optional[str] = None,
+        place: Optional[Literal["first", "last"]] = None,
+        to_native: bool = True
+    ):
+
+
+

13.2 引数 Argument

+
    +
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。

  • +
  • *argsstr / list[str] / narwhals.Expr / narwhals.Selector
    移動したい列を指定します。指定方法は次のとおりです。

    +
      +
    • 列名(例:"x"
    • +
    • 列名のリスト(例:["x", "y"]
    • +
    • narwhals の式(Expr)(例:nw.col("x")
    • +
    • narwhals の Selector (例:ncs.numeric()
    • +
    +

    指定した順序は、移動後の列順にもそのまま反映されます。

  • +
  • beforestr, optional)
    args で指定された列を、この列の直前に移動します。
    after と同時に指定することはできません。デフォルトは None です。

  • +
  • afterstr, optional)
    args で指定された列を、この列の直後に移動します。
    before と同時に指定することはできません。デフォルトは None です。

  • +
  • placestr, optional)
    *args で指定された列の、配置場所を指定します。

    +
      +
    • "first": 選択した列をデータフレームの先頭(最も左)に配置します。
    • +
    • "last": 選択した列をデータフレームの末尾(最も右)に配置します。 place 引数は before または after と同時に指定することはできません。 未指定(None)の場合は "first" と同じ挙動になります。
    • +
  • +
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。

  • +
+
+

13.2.1 返り値

+
    +
  • IntoFrameT
    入力データフレームと同じ列を保持したまま、指定されたルールに従って並び替えられたデータフレームを返します。
  • +
+
+
+
+

13.3 使用例 Example

+
import py4stats as py4st
+import pandas as pd
+import narwhals.selectors as ncs
+from palmerpenguins import load_penguins
+
+penguins_mini = py4st.filtering_out(penguins, starts_with = 'bill').head(3)
+print(penguins_mini)
+#>   species     island  flipper_length_mm  body_mass_g     sex  year
+#> 0  Adelie  Torgersen              181.0       3750.0    male  2007
+#> 1  Adelie  Torgersen              186.0       3800.0  female  2007
+#> 2  Adelie  Torgersen              195.0       3250.0  female  2007
+
# *args に指定した列は最前列に移動します
+print(py4st.relocate(penguins_mini, 'year', 'sex'))
+#>    year     sex species     island  flipper_length_mm  body_mass_g
+#> 0  2007    male  Adelie  Torgersen              181.0       3750.0
+#> 1  2007  female  Adelie  Torgersen              186.0       3800.0
+#> 2  2007  female  Adelie  Torgersen              195.0       3250.0
+
+# ncs.numeric() を使うことで、数値変数を指定できます
+print(py4st.relocate(penguins_mini, ncs.numeric()))
+#>    flipper_length_mm  body_mass_g  year species     island     sex
+#> 0              181.0       3750.0  2007  Adelie  Torgersen    male
+#> 1              186.0       3800.0  2007  Adelie  Torgersen  female
+#> 2              195.0       3250.0  2007  Adelie  Torgersen  female
+
+# year 列を island 列の直前に移動
+print(py4st.relocate(penguins_mini, 'year', before = 'island'))
+#>   species  year     island  flipper_length_mm  body_mass_g     sex
+#> 0  Adelie  2007  Torgersen              181.0       3750.0    male
+#> 1  Adelie  2007  Torgersen              186.0       3800.0  female
+#> 2  Adelie  2007  Torgersen              195.0       3250.0  female
+
+# year 列を island 列の直後に移動
+print(py4st.relocate(penguins_mini, 'year', after = 'island'))
+#>   species     island  year  flipper_length_mm  body_mass_g     sex
+#> 0  Adelie  Torgersen  2007              181.0       3750.0    male
+#> 1  Adelie  Torgersen  2007              186.0       3800.0  female
+#> 2  Adelie  Torgersen  2007              195.0       3250.0  female
+
+#.  place = 'last' で最後列に移動
+print(py4st.relocate(penguins_mini, 'year', place = 'last'))
+#>   species     island  flipper_length_mm  body_mass_g     sex  year
+#> 0  Adelie  Torgersen              181.0       3750.0    male  2007
+#> 1  Adelie  Torgersen              186.0       3800.0  female  2007
+#> 2  Adelie  Torgersen              195.0       3250.0  female  2007
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/remove_empty_constant.html b/docs/man/remove_empty_constant.html new file mode 100644 index 0000000..4f92720 --- /dev/null +++ b/docs/man/remove_empty_constant.html @@ -0,0 +1,1017 @@ + + + + + + + + + +11  空白列, 定数列の削除:py4stats.remove_empty(), py4stats.remove_constant() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

11  空白列, 定数列の削除:py4stats.remove_empty(), py4stats.remove_constant()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

11.1 概要

+

 py4stats.remove_empty()はR言語の janitor:remove_empty() をオマージュした関数で、全ての要素が NaN である列や行をデータフレームから除外します py4stats.remove_constant() はR言語の janitor:remove_constant() をオマージュした関数で、1種類だけの要素からなる列をデータフレームから除外します。

+
remove_empty(
+    data: IntoFrameT,
+    cols: bool = True,
+    rows: bool = True,
+    cutoff: float = 1.0,
+    quiet: bool = True,
+    to_native: bool = True,
+    **kwargs: Any
+) 
+
+remove_constant(
+    data: IntoFrameT,
+    quiet: bool = True,
+    to_native: bool = True,
+    dropna = False,
+    **kwargs: Any
+)
+
+
+

11.2 引数 Argument

+
    +
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • +
  • colsbool
     空白列を削除するかどうかを表すブール値(remove_empty() のみ)。True(初期設定) なら空白列を削除し、Falseなら全ての要素が NaN の列があっても削除しません。
  • +
  • rowsbool
     空白行を削除するかどうかを表すブール値(remove_empty() のみ)。True(初期設定) なら空白行を削除し、Falseなら全ての要素が NaN の行があっても削除しません。
  • +
  • cutofffloat
     列(行)の削除を行うかどうかを判定する欠測率の閾値(remove_empty() のみ)。ある列(行)における NaN の割合が >= cutoff のとき、その列(行)を削除します。初期設定は1で全ての要素が NaN の列(行)のみ削除しますが、例えば cutoff = 0.9 とすることで NaN の割合9が割以上の列(行)を削除できます。
  • +
  • quietbool
     削除した列(行)を報告するかどうかを表すブール値。quiet = True(初期設定) であれば何も報告せずに削除だけ行い、quiet = False なら、削除した列(行)の数と列名(行名)を報告します。
  • +
  • dropnabool
     ユニーク値の数を計算する際に、NaN を除外するかどうかを表すブール値(remove_constant() のみ)。dropna = True だと NaN を除外し、dropna = False(初期設定)だと NaN を除外しません。データフレームに NaN と、 NaN ではない1種類の値からなる列がある場合、dropna = False だと削除されず、dropna = True だと削除されます。
  • +
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • +
+
+
+

11.3 使用例 Example

+

py4stats.remove_empty() の使用例。

+
import py4stats as py4st
+import pandas as pd
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込み
+
+penguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy()
+# 空白列を作成
+penguins2.loc[:, 'empty'] = np.nan
+# 空白行を作成
+penguins2.loc[344, :] = np.nan
+
+print(penguins2.tail(3))
+#>        species  body_mass_g  empty
+#> 342  Chinstrap       4100.0    NaN
+#> 343  Chinstrap       3775.0    NaN
+#> 344        NaN          NaN    NaN
+
# 完全に空白な行と列を削除。
+print(py4st.remove_empty(penguins2, quiet = False).tail(3))
+#> Removing 1 empty column(s) out of 3 columns(Removed: empty).
+#> Removing 1 empty row(s) out of 345 rows(Removed: 344).
+#>        species  body_mass_g
+#> 341  Chinstrap       3775.0
+#> 342  Chinstrap       4100.0
+#> 343  Chinstrap       3775.0
+
+# 完全に空白な列のみ削除。
+print(py4st.remove_empty(penguins2, rows = False, quiet = False).tail(3))
+#> Removing 1 empty column(s) out of 3 columns(Removed: empty).
+#>        species  body_mass_g
+#> 342  Chinstrap       4100.0
+#> 343  Chinstrap       3775.0
+#> 344        NaN          NaN
+
+# 完全に空白な行のみ削除。
+print(py4st.remove_empty(penguins2, cols = False, quiet = False).tail(3))
+#> Removing 1 empty row(s) out of 345 rows(Removed: 344).
+#>        species  body_mass_g  empty
+#> 341  Chinstrap       3775.0    NaN
+#> 342  Chinstrap       4100.0    NaN
+#> 343  Chinstrap       3775.0    NaN
+
# quiet = True の場合
+print(py4st.remove_empty(penguins2).tail(3))
+#>        species  body_mass_g
+#> 341  Chinstrap       3775.0
+#> 342  Chinstrap       4100.0
+#> 343  Chinstrap       3775.0
+

py4stats.remove_constant() の使用例。

+
penguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy()
+penguins2.loc[:, 'constant'] = 'c'
+
+print(penguins2.head(3))
+#>   species  body_mass_g constant
+#> 0  Adelie       3750.0        c
+#> 1  Adelie       3800.0        c
+#> 2  Adelie       3250.0        c
+
+print(py4st.remove_constant(penguins2, quiet = False).head(3))
+#> Removing 1 constant column(s) out of 3 column(s)(Removed: constant).
+#>   species  body_mass_g
+#> 0  Adelie       3750.0
+#> 1  Adelie       3800.0
+#> 2  Adelie       3250.0
+
penguins2.loc[:, 'almost_empty'] = pd.NA
+penguins2.loc[1, 'almost_empty'] = 'c'
+
+# dropna = False なら、almost_empty は削除されません。
+print(py4st.remove_constant(penguins2).head(3))
+#>   species  body_mass_g almost_empty
+#> 0  Adelie       3750.0         <NA>
+#> 1  Adelie       3800.0            c
+#> 2  Adelie       3250.0         <NA>
+
+print(py4st.remove_constant(penguins2, dropna = True).head(3))
+#>   species  body_mass_g
+#> 0  Adelie       3750.0
+#> 1  Adelie       3800.0
+#> 2  Adelie       3250.0
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/scale_wmean.html b/docs/man/scale_wmean.html new file mode 100644 index 0000000..c526eac --- /dev/null +++ b/docs/man/scale_wmean.html @@ -0,0 +1,1013 @@ + + + + + + + + + +18  数値変換・正規化ユーティリティ: py4stats.weighted_mean(), py4stats.scale(), py4stats.min_max() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

18  数値変換・正規化ユーティリティ: py4stats.weighted_mean(), py4stats.scale(), py4stats.min_max()

+
+ + + +
+ + + + +
+ + + +
+ + +

本モジュールは、探索的データ解析(EDA)で頻繁に用いられる加重平均の計算および 数値データの正規化・標準化を行う関数群を提供します。
+内部では narwhals を利用することで、pandas・polars など複数のデータフレーム/シリーズ実装に対して共通の API を提供しています。

+
+

18.1 概要

+
weighted_mean(
+    x: IntoSeriesT, 
+    w: IntoSeriesT, 
+    dropna:bool = False
+    ) -> float:
+
+scale(
+    x: Union[IntoSeriesT, pd.DataFrame], 
+    ddof: int = 1, to_native: bool = True
+    ) -> IntoSeriesT:
+
+min_max(
+    x: Union[IntoSeriesT, pd.DataFrame], 
+    to_native: bool = True
+    ) -> IntoSeriesT:
+

weighted_mean(): 数値系列 x と対応する重み w を用いて、加重平均を計算します。欠損値の扱いを制御するためのオプションを備えています。

+

scale(): 数値データを Z スコア標準化します。系列データを主な対象としますが、pandas.DataFrame に対しても専用実装により列単位での標準化をサポートしています。

+

min_max(): 数値データを Min-Max Normarization により \([0, 1]\) の範囲に変換します。scale() と同様に、Series を主対象としつつ pandas.DataFrame にも対応しています。

+
+
+

18.2 引数 Argument

+
    +
  • xIntoSeriesT or pd.DataFrame(必須)
    +
      +
    • narwhals が受け入れ可能な Series 互換オブジェクト(例:pandas.Seriespolars.Series)を指定できます。scale()関数と min_max()関数のみ pandas.DataFrame を指定することができ、この場合、各列ごとに変換が適用されます。
    • +
  • +
  • wIntoSeriesT(必須)
    x に対応する重みを表す数値系列。x と同じ長さである必要があります。narwhals が受け入れ可能な Series 互換オブジェクト(例:pandas.Seriespolars.Series)を指定できます。
  • +
  • ddofint, optional)scale(), min_max() のみ
    標準偏差の計算に用いる自由度調整量(delta degrees of freedom)。デフォルトは 1 です。
  • +
  • dropnabool, optional)scale(), min_max() のみ
    True の場合、x または w のいずれかが欠損値(NaN)である観測を計算前に除外します。デフォルトは False です。
  • +
  • to_nativebool, optional)scale(), min_max() のみ
    True の場合、入力と同じ型の Series(e.g. pandas / polars / pyarrow)を返します。
    False の場合、Series を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • +
+
+
+
+

18.3 返り値 Value

+
    +
  • weighted_mean +
      +
    • float
    • +
    • 加重平均
    • +
  • +
  • scale +
      +
    • IntoSeriesT
    • +
    • 平均 0、標準偏差 1 に標準化された値を返します。
    • +
  • +
  • min_max +
      +
    • IntoSeriesT
    • +
    • 最小値が 0、最大値が 1 となるよう正規化された値を返します。
    • +
  • +
+
+
+

18.4 使用例 Example

+
import py4stats as py4st
+import pandas as pd
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込
+
+x1 = penguins.groupby('species')['bill_length_mm'].mean()
+w = penguins.groupby('species')['bill_length_mm'].count()
+
+print(
+    f"{py4st.weighted_mean(x1, w) :.2f}, "
+    f"{penguins['bill_length_mm'].mean() :.2f}"
+)
+#> 43.92, 43.92
+
+x2 = penguins['bill_length_mm']
+z1 = py4st.scale(x2)
+print(f"{z1.mean():.2f}, {z1.std():.2f}")
+#> 0.00, 1.00
+
+z2 = py4st.min_max(x2)
+print(f"{z2.min():.2f}, {z2.max():.2f}")
+#> 0.00, 1.00
+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/set_miss.html b/docs/man/set_miss.html new file mode 100644 index 0000000..d676c74 --- /dev/null +++ b/docs/man/set_miss.html @@ -0,0 +1,976 @@ + + + + + + + + + +17  py4stats.set_miss() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

17  py4stats.set_miss()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

17.1 概要

+

この関数は、Series の非欠測要素のうち、指定された個数または割合を欠測値に置き換えます。narwhals を利用することで、複数の Series バックエンドに対応しています。主にテストデータの作成や、欠測データのシミュレーションを目的とした関数です。

+
set_miss(
+    x: IntoSeriesT, 
+    n: Optional[int] = None,
+    prop: Optional[float] = None, 
+    method: Literal['random', 'first', 'last'] = 'random', 
+    random_state: Optional[int] = None, 
+    na_value: Any = None,
+    to_native: bool = True
+    )
+
+
+

17.2 引数 Argument

+
    +
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • +
  • nint
    処理後の Series に含まれる欠測値の目標個数。すでに n 個以上の欠測値が含まれている場合は、新たな欠測値は追加されず、警告が発せられます。
  • +
  • propfloat
    処理後の Series に含まれる欠測値の目標割合。0 から 1 の間で指定してください。すでに欠測値の割合が prop 以上である場合は、新たな欠測値は追加されず、警告が発せられます。
  • +
  • method: str: 欠測値に置き換える要素の選択方法。 +
      +
    • 'random': 非欠測要素の中からランダムに選択します。
    • +
    • 'first': Series の先頭から選択します。
    • +
    • 'last': Series の末尾から選択します。 デフォルトは 'random' です。
    • +
  • +
  • random_state (int, optional): method = 'random' の場合に使用する乱数シード。再現性のある結果を得るために指定できます。 method'random' 以外の場合、random_state は無視されます。
  • +
  • na_value: (Any)
    欠測値として使用する値。デフォルトは None です。
  • +
  • to_nativebool, optional)
    True の場合、入力と同じ型の Series(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.Series を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • +
+
+
+

17.3 使用例 Example

+
import pandas as pd
+from py4stats import set_miss
+s = pd.Series([1, 2, 3, 4, 5])
+py4st.set_miss(s, n = 2, method='first')
+#> 0    NaN
+#> 1    NaN
+#> 2    3.0
+#> 3    4.0
+#> 4    5.0
+#> dtype: float64
+
+s_miss = py4st.set_miss(s, prop=0.4, method='random', random_state=0)
+#> 0    1.0
+#> 1    NaN
+#> 2    3.0
+#> 3    NaN
+#> 4    5.0
+#> dtype: float64
+

x に代入された Series オブジェクトに、既に指定された以上の欠測値が含まれていた場合、次のように欠測値を追加せず UserWarning を出します。

+
py4st.set_miss(s_miss, n = 2)
+#> UserWarning: Already contained 2(>= n) missing value(s) in `x`, 
+#> no additional missing values were added.
+#> 0    1.0
+#> 1    NaN
+#> 2    3.0
+#> 3    NaN
+#> 4    5.0
+#> dtype: float64
+
from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込
+
+penguins['island'] = py4st.set_miss(
+    penguins['island'], 
+    n = 100, method='first'
+    )
+py4st.plot_miss_var(penguins, values = 'missing_count')
+
+
+

+
set_miss.png
+
+
+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/style_pvalue.html b/docs/man/style_pvalue.html new file mode 100644 index 0000000..ddb8e5e --- /dev/null +++ b/docs/man/style_pvalue.html @@ -0,0 +1,964 @@ + + + + + + + + + +36  p-値のフォーマットを変更する関数 – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

36  p-値のフォーマットを変更する関数

+
+ + + +
+ + + + +
+ + + +
+ + +
+

36.1 概要

+

 R言語の style_pvalue()gtools::stars.pval() をオマージュした関数でp-値を見やすい形のフォーマットに変換します。

+
style_pvalue(
+    p_value: ArrayLike,
+    digits: int = 3,
+    prepend_p: bool = False,
+    p_min: float = 0.001,
+    p_max: float = 0.9
+    )
+
+p_stars(
+    p_value, 
+    stars = {'***':0.01, '**':0.05, '*':0.1}
+    )
+
+
+

36.2 引数 Argument

+
    +
  • p_valuescalar or array-like of int or float
  • +
  • digitsintstyle_pvalue() のみ)
     小数点以下の桁数
  • +
  • prepend_pboolstyle_pvalue() のみ)
     出区力に接頭辞 ’p’ を追加するかどうかを表す論理値。False であれば追加されず、True であれば追加されます。
  • +
  • p_minintstyle_pvalue() のみ)
     p-値を実数値で表示する最小値。p_value がこの値を下回る場合、’<p_min’ もしくは ’p<p_min’ の形で表示されます。
  • +
  • p_maxintstyle_pvalue() のみ)
     p-値を実数値で表示する最大値。p_value がこの値を下回る場合、’>p_max’ もしくは ’p>p_max’ の形で表示されます。
  • +
  • starsdictp_stars() のみ)
     有意性を示す記号を key に、表示を切り替える閾値を値(value)にもつ辞書オブジェクト。初期設定の stars = None の場合、{'***': 0.01, '**': 0.05, '*': 0.1} が使用されます。詳細は下記を参照して下さい。
  • +
+
+
+

36.3 返り値 Value

+

 フォーマットされたp-値を表す pd.Series を出力します。building_block.style_pvalue() では引数 p_value に与えられた数値を指定された桁数に丸めた値を表示し、指定された範囲を外れる値については ’<p_min’ や ’>p_max’の書式にへんかんします。  building_block.p_stars()では仮説検定の有意性を示すアスタリスク*` に変換します。初期設定ではアスタリスクはp-値の値に応じて次のように表示されます。

+
    +
  • p ≤ 0.1 *
  • +
  • p ≤ 0.05 **
  • +
  • p ≤ 0.01 ***
  • +
  • p > 0.1 表示なし
  • +
+
+
+

36.4 使用例 Examples

+

+from py4stats import building_block as build
+p_value = [
+    0.999, 0.5028, 0.2514, 0.197, 0.10, 
+    0.0999, 0.06, 0.03, 0.002, 0.0002
+    ]
+
+print(build.style_pvalue(p_value).to_list())
+#> ['>0.9', '0.503', '0.251', '0.197', '0.1', '0.1', '0.06', '0.03', '0.002', '<0.001']
+
+print(build.style_pvalue(p_value, prepend_p = True).to_list())
+#> ['p>0.9', 'p=0.503', 'p=0.251', 'p=0.197', 'p=0.1', 'p=0.1', 'p=0.06', 'p=0.03', 'p=0.002', 'p<0.001']
+
+print(build.p_stars(p_value).to_list())
+#> ['', '', '', '', '*', '*', '*', '**', '***', '***']
+
+# R言語の stats::summary.lm() や gtools::stars.pval() を再現する場合。
+stars_dict = {'***':0.001, '**':0.01, '*': 0.05, '.':0.1}
+print(build.p_stars(p_value, stars = stars_dict).to_list())
+#> ['', '', '', '', '.', '.', '.', '*', '**', '***']
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/tabyl.html b/docs/man/tabyl.html new file mode 100644 index 0000000..ab722e5 --- /dev/null +++ b/docs/man/tabyl.html @@ -0,0 +1,971 @@ + + + + + + + + + +5  py4stats.tabyl() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

5  py4stats.tabyl()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

5.1 概要

+

 データフレームのクロス集計表を作成します。R言語の janitor::tabyl()にいくつかの adorn_ 関数を追加した状態を再現した関数です。初期設定ではクロス集計表の各セルに度数と相対度数を 「度数(相対度数%)`」 の形式で表示します。

+
tabyl(
+    data: IntoFrameT,
+    index: str,
+    columns: str,
+    margins: bool = True,
+    margins_name: str = 'All',
+    normalize: Union[bool, Literal["index", "columns", "all"]] = "index",
+    dropna: bool = False,
+    digits: int = 1,
+    **kwargs: Any
+)
+
+
+

5.2 引数 Argument

+
    +
  • dataIntoFrameT(必須)
    入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • +
  • indexstr
     集計に使用するデータフレームの変数名(必須)。
  • +
  • columnsstr
     集計に使用するデータフレームの変数名(必須)。
  • +
  • marginsbool
     行または列の合計を追加するかどうかを表すブール値。初期設定は True です。
  • +
  • margins_namebool
     行や列の合計の名前。初期設定は 'All' です。
  • +
  • dropnabool
      欠測値(NaN)を集計から除外するかどうかを表すブール値。初期設定は False です。
  • +
  • normalizestr
     丸括弧( )に表示する相対度数の計算方式。 +
      +
    • index 各セルの度数を行の和で割り、横方向の相対度数の和が100%になるように計算します。
    • +
    • columns 各セルの度数を行の列で割り、縦方向の相対度数の和が100%になるように計算します。
    • +
    • all 各セルの度数を総度数で割り、全てのセルの相対度数の和が100%になるように計算します。
    • +
  • +
  • digitsint
     丸括弧( )に表示する相対度数の小数点以下の桁数。初期設定は1です。
  • +
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • +
+
+
+

5.3 使用例

+
import py4stats as py4st
+import pandas as pd
+from palmerpenguins import load_penguins
+penguins = load_penguins() # サンプルデータの読み込
+
+# 横方向の和を100%として計算(初期設定)
+print(py4st.tabyl(penguins, 'island', 'species', normalize = 'index'))
+#> species         Adelie   Chinstrap       Gentoo  All
+#> island                                              
+#> Biscoe      44 (26.2%)    0 (0.0%)  124 (73.8%)  168
+#> Dream       56 (45.2%)  68 (54.8%)     0 (0.0%)  124
+#> Torgersen  52 (100.0%)    0 (0.0%)     0 (0.0%)   52
+#> All        152 (44.2%)  68 (19.8%)  124 (36.0%)  344
+
+# 縦方向の和を100%として計算
+print(py4st.tabyl(penguins, 'island', 'species', normalize = 'columns'))
+#> species        Adelie    Chinstrap        Gentoo          All
+#> island                                                       
+#> Biscoe     44 (28.9%)     0 (0.0%)  124 (100.0%)  168 (48.8%)
+#> Dream      56 (36.8%)  68 (100.0%)      0 (0.0%)  124 (36.0%)
+#> Torgersen  52 (34.2%)     0 (0.0%)      0 (0.0%)   52 (15.1%)
+#> All               152           68           124          344
+
+# 全体の和を100%として計算
+print(py4st.tabyl(penguins, 'island', 'species', normalize = 'all'))
+#> species         Adelie   Chinstrap       Gentoo           All
+#> island                                                       
+#> Biscoe      44 (12.8%)    0 (0.0%)  124 (36.0%)   168 (48.8%)
+#> Dream       56 (16.3%)  68 (19.8%)     0 (0.0%)   124 (36.0%)
+#> Torgersen   52 (15.1%)    0 (0.0%)     0 (0.0%)    52 (15.1%)
+#> All        152 (44.2%)  68 (19.8%)  124 (36.0%)  344 (100.0%)
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/tidy.html b/docs/man/tidy.html new file mode 100644 index 0000000..3e27975 --- /dev/null +++ b/docs/man/tidy.html @@ -0,0 +1,1026 @@ + + + + + + + + + +25  py4stats.tidy(), py4stats.tidy_mfx() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

25  py4stats.tidy(), py4stats.tidy_mfx()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

25.1 概要

+

 R言語の broom::tidy() をオマージュした関数で、sm.ols()smf.logit() などの推定結果を pands.DataFrame に変換します。py4stats.tidy() は回帰係数と関連する検定結果を表示し、 py4stats.tidy_mfx() は限界効果と関連する検定結果を表示します。

+
tidy(
+  x, 
+  name_of_term = None,
+  conf_level = 0.95,
+  **kwargs
+  )
+
+tidy_mfx(
+  x, 
+  at = 'overall', 
+  method = 'dydx', 
+  dummy = False, 
+  conf_level = 0.95, 
+  **kwargs
+  )
+
+
+

25.2 引数 Argument

+
    +
  • x(必須)
     sm.ols()もしくは smf.logit() などで作成された分析結果のオブジェクト。

  • +
  • name_of_termlist of str
     term 列(index) として表示する説明変数の名前のリスト。指定しない場合(初期設定)、モデルの推定に使用された説明変数の名前がそのまま表示されます。

  • +
  • conf_levelfloat
     信頼区間の計算に用いる信頼係数。

  • +
  • at:限界効果の集計方法(tidy_mfx() のみ)。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 at として渡されます。method = 'coef' を指定した場合、この引数は無視されます。

    +
      +
    • 'overall':各観測値の限界効果の平均値を表示(初期設定)
    • +
    • 'mean':各説明変数の平均値における限界効果を表示
    • +
    • 'median':各説明変数の中央値における限界効果を表示
    • +
    • 'zero':各説明変数の値がゼロであるときの限界効果を表示
    • +
  • +
  • method:推定する限界効果の種類(tidy_mfx() のみ)。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 method として渡されます。ただし、method = 'coef' を指定した場合には限界効果を推定せずに回帰係数をそのまま表示します。

    +
      +
    • 'coef':回帰係数の推定値を表示
    • +
    • 'dydx':限界効果の値を変換なしでそのまま表。(初期設定)
    • +
    • 'eyex':弾力性 d(lny)/d(lnx) の推定値を表示
    • +
    • 'dyex':準弾力性 dy /d(lnx) の推定値を表示
    • +
    • 'eydx':準弾力性 d(lny)/dx の推定値を表示
    • +
  • +
  • dummy:ダミー変数の限界効果の推定方法(tidy_mfx() のみ)。もし False (初期設定)であれば、ダミー変数を連続な数値変数として扱います。もし、True であればダミー変数が0から1へと変化したときの予測値の変化を推定します。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 dummy として渡されます。

  • +
+
+
+

25.3 返り値 Value

+

 次の列を含む pands.DataFrame が出力されます。

+
    +
  • term(index)
     説明変数の名称
  • +
  • estimate
     回帰係数(tidy()の場合)、もしくは限界効果(tidy_mfx()の場合)の推定値
  • +
  • std_err
    推定値 estimate の標準誤差
  • +
  • statistics
    estimate = 0 を帰無仮説とする仮説検定の標本検定統計量。x に代入されたモデルが sm.ols() によって作成されたものであれば \(t\) 統計量が表示され、sm.glm() によって作成されたものであれば \(z\) 統計量が表示されます。
  • +
  • p_value
    estimate = 0 を帰無仮説とする両側検定の標本p-値
  • +
  • conf_lower
     信頼区間の下側信頼限界
  • +
  • conf_higher
     信頼区間の上側信頼限界
  • +
+
+
+

25.4 使用例 Examples

+
import pandas as pd
+import numpy as np
+from palmerpenguins import load_penguins
+import statsmodels.formula.api as smf
+
+from py4stats import regression_tools as reg # 回帰分析の要約
+penguins = load_penguins() # サンプルデータの読み込み
+
# 回帰分析の実行
+fit1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()
+
+print(py4st.tidy(fit1).round(4))
+#>                       estimate   std_err  statistics  p_value  conf_lower  conf_higher
+#> term                                                                                  
+#> Intercept             153.7397  268.9012      0.5717   0.5679   -375.1910     682.6704
+#> species[T.Chinstrap] -885.8121   88.2502    -10.0375   0.0000  -1059.4008    -712.2234
+#> species[T.Gentoo]     578.6292   75.3623      7.6780   0.0000    430.3909     726.8674
+#> bill_length_mm         91.4358    6.8871     13.2764   0.0000     77.8888     104.9828
+
penguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)
+
+# ロジスティック回帰の実行
+fit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()
+
+print(py4st.tidy_mfx(fit_logit1).round(4))
+#>                 estimate  std_err  statistics  p_value  conf_lower  conf_higher
+#> body_mass_g      -0.0004   0.0000    -17.6561   0.0000     -0.0004      -0.0003
+#> bill_length_mm   -0.0053   0.0036     -1.4628   0.1435     -0.0123       0.0018
+#> bill_depth_mm    -0.1490   0.0051    -29.1681   0.0000     -0.1591      -0.1390
+
+
+

25.5 注意点

+

 参考にしたR言語の broom::tidy() は様々な種類のモデルに対応したジェネリック関数として定義されていますが、py4stats.tidy()py4stats.tidy_mfx() では対応しているモデルは限定的であることにご注意ださい。py4st.tidy() のメソッドが定義されているオブジェクトのクラスを確認するには次のコードを実行して下さい。

+
list(py4st.tidy.registry.keys())
+

py4stats.tidy()functools.singledispatch を用いたジェネリック関数として実装しています。 Py4Etrics モジュールの py4etrics.heckit.Heckit() で作成された HeckitResults クラスのオブジェクト用のメソッドについては heckit_helper.tidy_heckit() を参照してください。

+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/tidy_heckit.html b/docs/man/tidy_heckit.html new file mode 100644 index 0000000..315730e --- /dev/null +++ b/docs/man/tidy_heckit.html @@ -0,0 +1,1018 @@ + + + + + + + + + +29  heckit_helper.tidy_heckit() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

29  heckit_helper.tidy_heckit()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

29.1 概要

+

 R言語の broom::tidy() をオマージュした regression_tools.tidy() 関数の、py4etrics.heckit.HeckitResults クラス専用のメソッドです。regression_tools.tidy()はジェネリック関数として実装されているため、py4st.tidy(x) としてご利用いただけます。

+
tidy_heckit(
+    model, 
+    name_selection = None, 
+    name_outcome = None, 
+    conf_level = 0.95
+  )
+
+
+

29.2 引数 Argument

+
    +
  • x(必須)
      Py4Etrics モジュールの py4etrics.heckit.Heckit() で作成された HeckitResults クラスのオブジェクト
  • +
  • name_selectionlist of str
     term 列(index) のうち、第1段階の説明変数の名称として表示する文字列のリスト。指定しない場合(初期設定)、モデルの推定に使用された説明変数の名前がそのまま表示されます。
  • +
  • name_outcomelist of str
     term 列(index) のうち、第2段階の説明変数の名称として表示する文字列のリスト。指定しない場合(初期設定)、モデルの推定に使用された説明変数の名前がそのまま表示されます。
  • +
  • conf_levelfloat
     信頼区間の計算に用いる信頼係数。
  • +
+
+
+

29.3 返り値 Value

+

 次の列を含む pands.DataFrame が出力されます。

+
    +
  • term(index)
     説明変数の名称
  • +
  • estimate
     回帰係数の推定値
  • +
  • std_err
    推定値 estimate の標準誤差
  • +
  • statistics
    estimate = 0 を帰無仮説とする仮説検定の標本検定統計量。x に代入されたモデルが sm.ols() によって作成されたものであれば \(t\) 統計量が表示され、sm.glm() によって作成されたものであれば \(z\) 統計量が表示されます。
  • +
  • p_value
    estimate = 0 を帰無仮説とする両側検定の標本p-値
  • +
  • conf_lower
     信頼区間の下側信頼限界
  • +
  • conf_higher
     信頼区間の上側信頼限界
  • +
+
+
+

29.4 使用例 Examples

+

 heckit_helper モジュールはヘックマンの2段階推定(Heckit)を実行を Py4Etrics モジュールの py4etrics.heckit.Heckit() に依存しているため、事前のインストールをお願いします。

+
pip install git+https://github.com/Py4Etrics/py4etrics.git
+

ここでは wooldridge モジュールの mroz データを使い、春山(2023, Chap.24)のモデルを再現します。

+
import pandas as pd
+import wooldridge
+import py4stats as py4st
+from py4stats import heckit_helper
+
+mroz = wooldridge.data('mroz') # サンプルデータの読み込み
+
+mod_heckit, exog_outcome, exog_select = heckit_helper.Heckit_from_formula(
+    selection = 'lwage ~ educ + exper + expersq + nwifeinc + age + kidslt6 + kidsge6',
+    outcome = 'lwage ~ educ + exper + expersq',
+    data = mroz
+)
+
+res_heckit = mod_heckit.fit(cov_type_2 = 'HC1')
+

内部で functools.singledispatch を使用して定義しているため、heckit_helper モジュールの読み込み後は、py4st.tidy() 関数を呼び出すことで tidy_heckit() を実行することができます。

+
# 初期設定で使用した場合
+print(py4st.tidy(res_heckit).round(4))
+#>               estimate  std_err  statistics  p_value  conf_lower  conf_higher
+#> term                                                                         
+#> O: Intercept   -0.5781   0.3050     -1.8954   0.0580     -1.1759       0.0197
+#> O: educ         0.1091   0.0155      7.0261   0.0000      0.0786       0.1395
+#> O: exper        0.0439   0.0163      2.6989   0.0070      0.0120       0.0758
+#> O: expersq     -0.0009   0.0004     -1.9574   0.0503     -0.0017       0.0000
+#> S: const        0.2701   0.5086      0.5310   0.5954     -0.7267       1.2669
+#> S: x1           0.1309   0.0253      5.1835   0.0000      0.0814       0.1804
+#> S: x2           0.1233   0.0187      6.5903   0.0000      0.0867       0.1600
+#> S: x3          -0.0019   0.0006     -3.1452   0.0017     -0.0031      -0.0007
+#> S: x4          -0.0120   0.0048     -2.4843   0.0130     -0.0215      -0.0025
+#> S: x5          -0.0529   0.0085     -6.2347   0.0000     -0.0695      -0.0362
+#> S: x6          -0.8683   0.1185     -7.3263   0.0000     -1.1006      -0.6360
+#> S: x7           0.0360   0.0435      0.8281   0.4076     -0.0492       0.1212
+

 注意:内部で使用している statsmodels.iolib.summary.summary_params_frame() の仕様上、初期設定では第1段階の説明変数の名前が反映されません。説明変数の名前を反映するには name_selection 引数で指定してください。

+
print(py4st.tidy(res_heckit, name_selection = exog_select.columns).round(4))
+#>               estimate  std_err  statistics  p_value  conf_lower  conf_higher
+#> term                                                                         
+#> O: Intercept   -0.5781   0.3050     -1.8954   0.0580     -1.1759       0.0197
+#> O: educ         0.1091   0.0155      7.0261   0.0000      0.0786       0.1395
+#> O: exper        0.0439   0.0163      2.6989   0.0070      0.0120       0.0758
+#> O: expersq     -0.0009   0.0004     -1.9574   0.0503     -0.0017       0.0000
+#> S: Intercept    0.2701   0.5086      0.5310   0.5954     -0.7267       1.2669
+#> S: educ         0.1309   0.0253      5.1835   0.0000      0.0814       0.1804
+#> S: exper        0.1233   0.0187      6.5903   0.0000      0.0867       0.1600
+#> S: expersq     -0.0019   0.0006     -3.1452   0.0017     -0.0031      -0.0007
+#> S: nwifeinc    -0.0120   0.0048     -2.4843   0.0130     -0.0215      -0.0025
+#> S: age         -0.0529   0.0085     -6.2347   0.0000     -0.0695      -0.0362
+#> S: kidslt6     -0.8683   0.1185     -7.3263   0.0000     -1.1006      -0.6360
+#> S: kidsge6      0.0360   0.0435      0.8281   0.4076     -0.0492       0.1212
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/tidy_test.html b/docs/man/tidy_test.html new file mode 100644 index 0000000..4b93641 --- /dev/null +++ b/docs/man/tidy_test.html @@ -0,0 +1,958 @@ + + + + + + + + + +26  py4stats.tidy_test() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

26  py4stats.tidy_test()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

26.1 概要

+

 R言語の broom::tidy() をオマージュした py4stats.tidy() 関数のうち、statsmodels ライブラリのメソッド RegressionResults.t_test() もしくは RegressionResults.f_test() で作成された statsmodels.stats.contrast.ContrastResults クラスのオブジェクト専用のメソッドです。py4stats.tidy()はジェネリック関数として実装されているため、py4st.tidy(x) としてご利用いただけます。

+
tidy_test(x, conf_level = 0.95, **kwargs)
+
+
+

26.2 引数 Argument

+
    +
  • x(必須)
     statsmodels ライブラリのメソッド RegressionResults.t_test() もしくはRegressionResults.f_test() で作成された statsmodels.stats.contrast.ContrastResults クラスのオブジェクト。
  • +
  • conf_levelfloat
     信頼区間の計算に用いる信頼係数。ただし、x に代入されたオブジェクトが f_test() の結果である場合は、この引数は無視されます。
  • +
+
+
+

26.3 返り値 Value

+

 引数 x に代入されたオブジェクトが t_test() の結果である場合、次の列を含む pands.DataFrame が出力されます。

+
    +
  • estimate
     帰無仮説のもとでの回帰係数(の線型結合)の推定値
  • +
  • std_err
    推定値 estimate の標準誤差
  • +
  • statistics
     仮説検定の標本検定統計量。
  • +
  • p_value
    両側検定の標本p-値
  • +
  • conf_lower
     信頼区間の下側信頼限界
  • +
  • conf_higher
     信頼区間の上側信頼限界
  • +
+

 一方で引数 x に代入されたオブジェクトが f_test() の結果である場合、次の列を含む pands.DataFrame が出力されます。

+
    +
  • statistics
     仮説検定の標本検定統計量。
  • +
  • p_value
     F検定の標本p-値
  • +
  • df_denom
     モデルの残差自由度
  • +
  • df_denom
     帰無仮説のもとでの制約数
  • +
+
+
+

26.4 使用例 Examples

+
import py4stats as py4st
+
+import pandas as pd
+import numpy as np
+from palmerpenguins import load_penguins
+import statsmodels.formula.api as smf
+
+penguins = load_penguins() # サンプルデータの読み込み
+
+fit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()
+
hypotheses = 'bill_length_mm = 20'
+print(py4st.tidy(fit3.t_test(hypotheses)).round(4))
+#>       estimate  std_err  statistics  p_value  conf_lower  conf_higher
+#> term                                                                 
+#> c0     26.5366   7.2436      0.9024   0.3675     12.2867      40.7866
+
hypotheses = 'species[T.Chinstrap] = 0, species[T.Gentoo] = 0'
+print(py4st.tidy(fit3.f_test(hypotheses)).round(4))
+#>           statistics  p_value  df_denom  df_num
+#> term                                           
+#> contrast    210.9432      0.0       327       2
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/man/varidate.html b/docs/man/varidate.html new file mode 100644 index 0000000..e037016 --- /dev/null +++ b/docs/man/varidate.html @@ -0,0 +1,1040 @@ + + + + + + + + + +21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate() – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate()

+
+ + + +
+ + + + +
+ + + +
+ + +
+

21.1 概要

+

 R言語の varidateパッケージの check_that() 関数などをオマージュした、ごく簡易なデータ検証関数です。

+
check_that(
+    data: IntoFrameT,
+    rule_dict: Union[Mapping[str, str], pd.Series],
+    **kwargs: Any,
+)
+
+check_viorate(data, rule_dict, **kwargs)
+
+
+

21.2 引数 Argument

+
    +
  • dataIntoFrameT(必須)
     ルールに基づくデータ検証を行うデータセット。narwhals が受け入れ可能な DataFrame 互換オブジェクト
    (例:pandas.DataFramepolars.DataFramepyarrow.Table)を指定できます。
  • +
  • rule_dictdict or pd.Series of str(必須)
     pandas.eval() メソッドで実行した結果が論理値となるような expression の文字列を値とする辞書オブジェクト。詳細は使用例も参照してください。
  • +
  • to_nativebool, optional)
    True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。
    False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。
  • +
  • **kwargs
     pandas.eval() に渡す追加の引数。
  • +
+
+
+

21.3 返り値 Value

+
+

21.3.1 check_that(): データセット単位の検証結果の集計

+

次の列を含む、引数 data に代入されたデータフレームと同じ型の DataFrame が出力されます。

+
    +
  • rule: 検証ルールの名前
  • +
  • item: ルールが検証対象とした項目の数。レコード(行)を検証単位とするルールの場合、itemdata の行数(rows)になります。一方、データセット全体を検証単位とするルール(例:集計量に基づく条件)の場合、item は 1 になります。
  • +
  • passes: 検証の結果、ルールを満たすと判定されたレコードの数。
  • +
  • fails: 検証の結果、ルールを満たさないと判定されたレコードの数。
  • +
  • countna: 欠測値によって、ルールの検証が行えなかったレコードの数。行(レコード)を検証単位とするルールでは、ルールの評価に使用された変数のいずれかに欠測値が含まれる場合、そのレコードは検証不能として NA 扱いされます。countna は、このように検証を正しく実施できなかったレコードの件数を表します。
  • +
  • expression: 検証ルールを表す文字列(expression)。
  • +
+
+
+

21.3.2 check_viorate(): レコード単位の検証結果

+

ルール名を列名として、レコード毎の違反を示す論理変数をもつ DataFrame が出力されます。

+

各列の要素の True は検証のルールへの違反、もしくは欠測値によって評価に失敗したことを表します。rule_dict で設定された各ルールに対応する列の他に、次の列が追加で出力されます。

+
    +
  • any: 行内のいずれかのルールが違反または評価に失敗した場合に True となるブール値。
  • +
  • all: 行内の全ルールが違反または評価に失敗した場合に True となるブール値。
  • +
+
+
+
+

21.4 使用例 Examples

+

 ここでは py4st.check_that() 関数を使って Loo, Jonge(2022, p. 136)の結果を再現します。まずはR言語の validate パッケージに付属する retailers データを利用します。retailers は60件の小売業者の経営状況についてのデータで、従業員数、売上高とその他の収入、人件費、総費用、および利益がユーロ導入前の通貨単位である1000ギルダー単位で収録されています。

+
import py4stats as py4st
+import pandas as pd
+
+URL = 'https://raw.githubusercontent.com/data-cleaning/validate/master/pkg/data/retailers.csv'
+retailers = pd.read_csv(URL, sep = ';')
+retailers.columns = retailers.columns.to_series().str.replace('.', '_', regex = False)
+

 py4st.check_that() 関数は、第1引数にデータセットを、第2引数に検証ルールの辞書オブジェクトを代入して使用します。
+ まずは、検証ルールの辞書オブジェクトを定義します。辞書オブジェクトの値には pandas.eval() メソッドで実行可能な expression の文字列を指定し、key に検証ルールの名前を指定します。検証ルールの名前は任意の値で構いませんが、 expression は結果が論理値となるものでなければなりません。

+
rule_dict =  {
+    'to':'turnover > 0',                                     # 売上高は厳密に正である
+    'sc':'staff_costs / staff < 50',                         # 従業員1人当たりの人件費は50,000ギルダー未満である
+    'cd1':'staff_costs > 0 | ~(staff > 0)',                    # 従業員がいる場合、人件費は厳密に正である
+    'cd2':py4st.implies_exper('staff > 0', 'staff_costs > 0'), # cd1 の別表現
+    'bs':'turnover + other_rev == total_rev',                # 売上高とその他の収入の合計は総収入に等しい
+    'mn':'profit.mean() > 0'                                 # セクター全体の平均的な利益はゼロよりも大きい
+    }
+pd.Series(rule_dict)
+#> to                          turnover > 0
+#> sc              staff_costs / staff < 50
+#> cd1       staff_costs > 0 | ~(staff > 0)
+#> cd2       staff_costs > 0 | ~(staff > 0)
+#> bs     turnover + other_rev == total_rev
+#> mn                     profit.mean() > 0
+#> dtype: object
+

retailersrule_dictpy4st.check_that() に代入すると、rule_dict に指定したルールに基づいた検証が実行されます。item 列はその検証ルールで生成された論理値の個数(通常はデータセットの列数と一致します)を表し、passes 列は検証結果が True となったレコードの数を、fails は False となったレコードの数を表します。また、coutna はルールの検証に使用した変数(データセットの列)のいずれかが欠測値であったレコードの数です。

+
print(py4st.check_that(retailers, rule_dict))
+#>   rule  item  passes  fails  coutna                         expression
+#> 0   to    60      56      0       4                       turnover > 0
+#> 1   sc    60      39      5      16           staff_costs / staff < 50
+#> 2  cd1    60      44      0      16     staff_costs > 0 | ~(staff > 0)
+#> 3  cd2    60      44      0      16     staff_costs > 0 | ~(staff > 0)
+#> 4   bs    60      19      4      37  turnover + other_rev == total_rev
+#> 5   mn     1       1      0       0                  profit.mean() > 0
+

前述の通り、py4st.check_that() 関数ではルール検証を pandas.eval() メソッドで実行しているため、検証ルールに自作関数や外部のモジュールからインポート関数を使うには、関数名の前に @ をつけて @func(…) と記述し、また **kwargs 引数に local_dict = locals() と指定してください。
+ 次のコードで定義している is_complete() 関数は、代入された pd.Series が全て欠測値ではなく、指定された変数に関して完全ケースであることを判定する関数です。turnover.notna() & total_rev.notna() & other_rev.notna() と記述しても同じ結果が得られますが、自作関数を使うことで若干簡潔に記述できます。

+
from pandas.api.types import is_numeric_dtype
+def is_complete(*arg): return pd.concat(arg, axis = 'columns').notna().all(axis = 'columns')
+
+pd.set_option('display.expand_frame_repr', False)
+
+rule_dict2 =  {
+    'to_num':'@is_numeric_dtype(turnover)',                      # 売上高は数値変数である
+    'rev_complete':'@is_complete(turnover, total_rev, other_rev)', # 売上高と収入が全て観測されている
+    }
+
+print(py4st.check_that(
+    retailers, rule_dict2, local_dict = locals()
+    ))
+#>            rule  item  passes  fails  coutna                                    expression
+#> 0        to_num     1       1      0       0                   @is_numeric_dtype(turnover)
+#> 1  rev_complete    60      23      0      37  @is_complete(turnover, total_rev, other_rev)
+

py4st.check_viorate() の使い方も py4st.check_that() と同様ですが、py4st.check_that() がデータセット全体での検証結果を出力するのに対し、py4st.check_viorate() ではレコード別の検証結果を表示します。py4st.check_viorate() から出力されるデータフレームでは、各列が検証ルールに、各行が元データの観測値に対応し、当該ルールが満たされていない場合、True と表示されます。また、any 列は複数あるルールのいずれか1つでも満たされていないことを、all 列は全てのルールが満たされていないことを示します。

+
rule_dict3 =  {
+    'to':'turnover > 0',                                     # 売上高は厳密に正である
+    'sc':'staff_costs / staff < 50',                         # 従業員1人当たりの人件費は50,000ギルダー未満である
+    'rev_complete':'@is_complete(turnover, total_rev, other_rev)',# 売上高と収入が全て観測されている
+    }
+  
+df_viorate = py4st.check_viorate(retailers, rule_dict3)
+print(df_viorate.head())
+#>       to     sc rev_complete   any    all
+#> 0   True   True         True  True   True
+#> 1  False  False         True  True  False
+#> 2  False   True        False  True  False
+#> 3  False   True        False  True  False
+#> 4   True   True         True  True   True
+

df_viorate データフレームの各列は論理値であるため、次のように検証ルールを満たさない観測値を抽出することができます。

+
print(retailers.loc[df_viorate['to'], 'size':'turnover'])
+#>   size  incl_prob  staff  turnover
+#> 0  sc0       0.02   75.0       NaN
+#> 4  sc3       0.14    NaN       NaN
+#> 6  sc3       0.14    5.0       NaN
+
+
+

21.5 Notes

+

本関数の内部実装は、 pd.DataFrame.eval() メソッドに依存しているため、実行時間の面で必ずしも最適化されていません。

+
+
+

21.6 参考文献

+
    +
  • Loo, Mark van der, and Edwin de Jonge. (2022). 『統計的データクリーニングの理論と実践: Rによるデータ編集/欠測補完システム』. 共立出版. 地道 正行, 髙橋 雅夫, 藤野 友和, 安川 武彦〔訳〕
  • +
+
+

Return to Function reference.

+ + +
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/reference.html b/docs/reference.html new file mode 100644 index 0000000..71b8d47 --- /dev/null +++ b/docs/reference.html @@ -0,0 +1,996 @@ + + + + + + + + + +3  Function reference – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+ +
+ +
+ + +
+ + + +
+ +
+
+

3  Function reference

+
+ + + +
+ + + + +
+ + + +
+ + +
+

3.1 Main Module

+
+

3.1.1 py4stats.eda_tools

+

py4stats.eda_tools モジュールは、探索的データ解析と前処理に関する機能を提供します。複数の DataFrame バックエンドに対して共通の API を提供することを目的として、narwhals ライブラリを用いて実装されています。詳細は Technical Notes を参照してください。

+
+

3.1.1.1 データフレームの概要

+

py4stats.diagnose()

+
+
+

3.1.1.2 クロス集計

+

py4stats.tabyl()

+

py4stats.freq_table()

+

py4stats.Pareto_plot()

+

py4stats.plot_category()

+
+
+
+

3.1.2 数値変数の点推定と区間推定

+

py4stats.mean_qi() py4stats.median_qi() py4stats.mean_ci()

+
+

3.1.2.1 データフレームの列や行の削除

+

py4stats.remove_empty()
+py4stats.remove_constant()

+

py4stats.filtering_out()

+
+
+

3.1.2.2 データフレームの列の並べ替え

+

py4stats.relocate()

+
+
+

3.1.2.3 複数のデータフレームの比較

+

py4stats.compare_df_cols() py4stats.compare_df_stats()

+
+
+

3.1.2.4 簡易なグループ別統計量の比較

+

py4stats.compare_group_means() py4stats.compare_group_median()

+

py4stats.plot_mean_diff() py4stats.plot_median_diff()

+
+
+

3.1.2.5 簡易な欠測値の可視化

+

py4stats.plot_miss_var()

+
+
+

3.1.2.6 数値変数の集計と標準化

+

py4stats.weighted_mean() py4stats.scale() py4stats.min_max()

+
+
+

3.1.2.7 論理関数

+

py4stats.is_number() py4stats.is_ymd() py4stats.is_ymd_like()

+

py4stats.is_dummy()

+
+
+

3.1.2.8 簡易なルールベースのデータ検証ツール

+

py4stats.check_that() py4stats.check_viorate()

+
+
+
+
+

3.1.3 py4stats.regression_tools

+

py4stats.regression_toolsstatsmodels ライブラリで作成された回帰分析の結果についての可視化と表作成を補助する機能を提供するモジュールです。

+
+

3.1.3.1 線形モデルの比較

+

py4stats.compare_ols()

+

py4stats.compare_mfx()

+
+
+

3.1.3.2 線形モデルの可視化

+

py4stats.coefplot() py4stats.mfxplot()

+
+
+

3.1.3.3 線形モデルを作表するためのバックエンド関数

+

py4stats.tidy()py4stats.tidy_mfx()

+

py4stats.tidy_test()

+

py4stats.glance()

+
+
+

3.1.3.4 Blinder-Oaxaca分解

+

py4stats.Blinder_Oaxaca() py4stats.plot_Blinder_Oaxaca()

+
+
+
+
+

3.2 Sub Module

+
+

3.2.1 py4stats.heckit_helper

+

py4stats.regression_tools の関数を py4etrics.heckit ライブラリで実装された Heckit モデルに対応させるためのメソッドを提供します。

+

heckit_helper.Heckit_from_formula()

+

heckit_helper.tidy_heckit()

+

heckit_helper.heckitmfx_compute()

+
+
+
+

3.2.2 py4stats.building_block

+

py4stats ライブラリの実装に使用するアサーション関数やユーティリティ関数を提供します。 building_block モジュール自体は外部から呼び出すことなく内部実装に使用することを想定しています。

+
+
+

3.2.3 引数のアサーション関数

+

building_block.arg_match()

+

building_block.assert_character() building_block.assert_logical() building_block.assert_numeric() building_block.assert_integer() building_block.assert_count() building_block.assert_float()

+
+
+

3.2.4 データ型を判定する論理関数

+

building_block.is_character() building_block.is_logical() building_block.is_numeric() building_block.is_integer() building_block.is_float()

+
+
+

3.2.5 数字のフォーマット

+

building_block.style_number() building_block.style_currency() building_block.style_percent()

+

building_block.style_pvalue() building_block.p_stars()

+
+
+

3.2.6 並列文の作成

+

building_block.oxford_comma() building_block.oxford_comma_and() building_block.oxford_comma_or()

+
+

Jump to Get started.
+Jump to Readme.

+ + +
+
+ +
+ + +
+ + + + + \ No newline at end of file diff --git a/docs/search.json b/docs/search.json new file mode 100644 index 0000000..1389443 --- /dev/null +++ b/docs/search.json @@ -0,0 +1,2050 @@ +[ + { + "objectID": "index.html", + "href": "index.html", + "title": "Py4Stats", + "section": "", + "text": "1 Readme\nPy4Stats は、主に実証研究で用いられる、探索的データ分析および回帰結果レポート用のユーティリティライブラリで、回帰分析を中心とする分析でよく使われるR言語の機能を、Python で実装しています。本ライブラリの主な機能は Get started を、実装されている関数の一覧は Function reference を参照してください。", + "crumbs": [ + "1  Readme" + ] + }, + { + "objectID": "index.html#installation", + "href": "index.html#installation", + "title": "Py4Stats", + "section": "1.1 Installation", + "text": "1.1 Installation\nuv をお使いの場合、次のコードで py4stats をインストールできます。\n! uv add git+https://github.com/Hirototensho/py4stats.git\n一方で、pip をお使いの場合には、次のコードで py4stats をインストールできます。\n! pip install git+https://github.com/Hirototensho/py4stats.git", + "crumbs": [ + "1  Readme" + ] + }, + { + "objectID": "index.html#使用例", + "href": "index.html#使用例", + "title": "Py4Stats", + "section": "1.2 使用例", + "text": "1.2 使用例\nimport py4stats as py4st\npy4stats.diagnose() 関数はデータの全般的な状態についての要約を提供します。\nimport pandas as pd\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込み\n\nprint(py4st.diagnose(penguins).round(4))\n#> columns dtype missing_count missing_percent unique_count unique_rate\n#> 0 species object 0 0.0000 3 0.8721\n#> 1 island object 0 0.0000 3 0.8721\n#> 2 bill_length_mm float64 2 0.5814 165 47.9651\n#> 3 bill_depth_mm float64 2 0.5814 81 23.5465\n#> 4 flipper_length_mm float64 2 0.5814 56 16.2791\n#> 5 body_mass_g float64 2 0.5814 95 27.6163\n#> 6 sex object 11 3.1977 3 0.8721\n#> 7 year int64 0 0.0000 3 0.8721\npy4stats.compare_ols() 関数は、計量経済学の実証論文でよく用いられる、回帰分析の結果を列方向に並べて比較する表を作成します。\nimport statsmodels.formula.api as smf\n\n# 回帰分析の実行\nfit1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()\nfit2 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species', data = penguins).fit()\nfit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()\n\ncompare_tab1 = py4st.compare_ols(list_models = [fit1, fit2, fit3]) # 表の作成\ncompare_tab1\n\n\n\n\n\n\n\n\n\nterm\nmodel 1\nmodel 2\nmodel 3\n\n\n\n\nIntercept\n153.7397\n-1,742.7202 ***\n843.9812 **\n\n\n\n(268.9012)\n(313.7697)\n(403.5956)\n\n\nspecies[T.Chinstrap]\n-885.8121 ***\n-539.6864 ***\n-245.1516 ***\n\n\n\n(88.2502)\n(86.9425)\n(84.5952)\n\n\nspecies[T.Gentoo]\n578.6292 ***\n1,492.8283 ***\n1,443.3525 ***\n\n\n\n(75.3623)\n(118.4442)\n(107.7844)\n\n\nbill_length_mm\n91.4358 ***\n55.6461 ***\n26.5366 ***\n\n\n\n(6.8871)\n(7.2326)\n(7.2436)\n\n\nbill_depth_mm\n\n179.0434 ***\n87.9328 ***\n\n\n\n\n(19.0997)\n(20.2192)\n\n\nsex[T.male]\n\n\n437.2007 ***\n\n\n\n\n\n(49.1098)\n\n\nrsquared_adj\n0.7810\n0.8258\n0.8613\n\n\nnobs\n342\n342\n333\n\n\ndf\n3\n4\n5\n\n\n\n詳細は、py4stats.compare_ols() を参照してください。 \n\nJump to Function Get started.\nJump to Function reference.", + "crumbs": [ + "1  Readme" + ] + }, + { + "objectID": "introduction.html", + "href": "introduction.html", + "title": "2  Introduction to Py4Stats", + "section": "", + "text": "2.1 py4stats.eda_tools\nここでは Py4Stats の主な機能を紹介します。実装されている関数の一覧は Function reference を参照してください。\n探索的データ解析と前処理に関する機能を提供するモジュールです。このモジュールは、複数の DataFrame バックエンドに対して共通の API を提供することを目的として、narwhals ライブラリを用いて実装されています。詳細は Technical Notes: py4stats.eda_tools における narwhals ベースの実装 を参照してください。\npy4stats.diagnose():R言語のdlookr::diagnose()を再現した関数で、データの全般的な状態についての要約を提供します。\npy4stats.tabyl():R言語の janitor::tabyl()を参考にした、クロス集計表を作成する関数です。\npy4stats.freq_table():R言語のDescTools::Freq()をオマージュした、1変数の度数分布表を計算する関数。度数 freq と相対度数 perc に加えて、それぞれの累積値を計算します。\n引数 group を指定すると、グループ別の度数分布表を計算できます。\npy4stats.remove_empty():完全に空白な列や行の削除する関数。R言語の janitor::remove_empty() をオマージュした関数で、全ての要素が NaN である列や行をデータフレームから除外します。\npy4stats.remove_constant():定数列の削除。R言語の janitor::remove_constant() をオマージュした関数で、1種類だけの要素からなる列をデータフレームから除外します。\npy4stats.filtering_out():pandas の DataFrame.filter() メソッドでは引数 like に文字列を指定することで、列名に特定の文字列を含む列を選択できますが、反対に py4stats.filtering_out() では列名に特定の文字列を含む列を除外します。実装の一部はR言語の dplyr::select() を参考にしました。", + "crumbs": [ + "2  `Introduction to Py4Stats`" + ] + }, + { + "objectID": "introduction.html#py4stats.eda_tools", + "href": "introduction.html#py4stats.eda_tools", + "title": "2  Introduction to Py4Stats", + "section": "", + "text": "import pandas as pd\nimport numpy as np\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込み\n\nprint(py4st.diagnose(penguins).round(4))\n#> dtype missing_count missing_percent unique_count unique_rate\n#> species object 0 0.0000 3 0.8721\n#> island object 0 0.0000 3 0.8721\n#> bill_length_mm float64 2 0.5814 164 47.6744\n#> bill_depth_mm float64 2 0.5814 80 23.2558\n#> flipper_length_mm float64 2 0.5814 55 15.9884\n#> body_mass_g float64 2 0.5814 94 27.3256\n#> sex object 11 3.1977 2 0.5814\n#> year int64 0 0.0000 3 0.8721\n\nprint(py4st.tabyl(penguins, 'island', 'species'))\n#> species Adelie Chinstrap Gentoo All\n#> island \n#> Biscoe 44 (26.2%) 0 (0.0%) 124 (73.8%) 168\n#> Dream 56 (45.2%) 68 (54.8%) 0 (0.0%) 124\n#> Torgersen 52 (100.0%) 0 (0.0%) 0 (0.0%) 52\n#> All 152 (44.2%) 68 (19.8%) 124 (36.0%) 344\n\nprint(py4st.freq_table(penguins, 'species'))\n#> freq perc cumfreq cumperc\n#> species \n#> Adelie 152 0.441860 152 0.441860\n#> Gentoo 124 0.360465 276 0.802326\n#> Chinstrap 68 0.197674 344 1.000000\n\npenguins2 = penguins.assign(bill_length_mm2 = pd.cut(penguins['bill_length_mm'], 6))\n\nprint(\n py4st.freq_table(penguins2, ['species', 'bill_length_mm2'], sort = False)\n )\n#> freq perc cumfreq cumperc\n#> species bill_length_mm2\n#> Adelie (32.072, 38.975] 79 0.523179 79 0.523179\n#> (38.975, 45.85] 71 0.470199 150 0.993377\n#> (45.85, 52.725] 1 0.006623 151 1.000000\n#> (52.725, 59.6] 0 0.000000 151 1.000000\n#> Chinstrap (32.072, 38.975] 0 0.000000 0 0.000000\n#> (38.975, 45.85] 13 0.191176 13 0.191176\n#> (45.85, 52.725] 50 0.735294 63 0.926471\n#> (52.725, 59.6] 5 0.073529 68 1.000000\n#> Gentoo (32.072, 38.975] 0 0.000000 0 0.000000\n#> (38.975, 45.85] 40 0.325203 40 0.325203\n#> (45.85, 52.725] 78 0.634146 118 0.959350\n#> (52.725, 59.6] 5 0.040650 123 1.000000\n\npenguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy()\npenguins2.loc[:, 'empty'] = np.nan\npenguins2.loc[344, :] = np.nan\n\nprint(penguins2.tail(3))\n#> species body_mass_g empty\n#> 342 Chinstrap 4100.0 NaN\n#> 343 Chinstrap 3775.0 NaN\n#> 344 NaN NaN NaN\n\n# 完全に空白な行と列を削除。\nprint(py4st.remove_empty(penguins2, quiet = False).tail(3))\n#> Removing 1 empty column(s) out of 3 columns(Removed: empty).\n#> Removing 1 empty row(s) out of 345 rows(Removed: 344). \n#> species body_mass_g\n#> 341 Chinstrap 3775.0\n#> 342 Chinstrap 4100.0\n#> 343 Chinstrap 3775.0\n\n# 完全に空白な列のみ削除。\nprint(py4st.remove_empty(penguins2, rows = False, quiet = False).tail(3))\n#> Removing 1 empty column(s) out of 3 columns(Removed: empty).\n#> species body_mass_g\n#> 342 Chinstrap 4100.0\n#> 343 Chinstrap 3775.0\n#> 344 NaN NaN\n\n# 完全に空白な行のみ削除。\nprint(py4st.remove_empty(penguins2, cols = False, quiet = False).tail(3))\n#> Removing 1 empty row(s) out of 345 rows(Removed: 344). \n#> species body_mass_g empty\n#> 341 Chinstrap 3775.0 NaN\n#> 342 Chinstrap 4100.0 NaN\n#> 343 Chinstrap 3775.0 NaN\n\npenguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy()\npenguins2.loc[:, 'constant'] = 'c'\n\nprint(penguins2.head(3))\n#> species body_mass_g constant\n#> 0 Adelie 3750.0 c\n#> 1 Adelie 3800.0 c\n#> 2 Adelie 3250.0 c\n\nprint(py4st.remove_constant(penguins2, quiet = False).head(3))\n#> Removing 1 constant column(s) out of 3 column(s)(Removed: constant). \n#> species body_mass_g\n#> 0 Adelie 3750.0\n#> 1 Adelie 3800.0\n#> 2 Adelie 3250.0\n\n# 列名に 'length' を含む列を除外\nprint(py4st.filtering_out(penguins, contains = 'length').head(3))\n#> species island bill_depth_mm body_mass_g sex year female\n#> 0 Adelie Torgersen 18.7 3750.0 male 2007 0\n#> 1 Adelie Torgersen 17.4 3800.0 female 2007 1\n#> 2 Adelie Torgersen 18.0 3250.0 female 2007 1\n\n# 列名が 'bill' から始まる列を除外\nprint(py4st.filtering_out(penguins, starts_with = 'bill').head(3))\n#> species island flipper_length_mm body_mass_g sex year female\n#> 0 Adelie Torgersen 181.0 3750.0 male 2007 0\n#> 1 Adelie Torgersen 186.0 3800.0 female 2007 1\n#> 2 Adelie Torgersen 195.0 3250.0 female 2007 1\n\n# 列名が '_mm' で終わる列を除外\nprint(py4st.filtering_out(penguins, ends_with = '_mm').head(3))\n#> species island body_mass_g sex year female\n#> 0 Adelie Torgersen 3750.0 male 2007 0\n#> 1 Adelie Torgersen 3800.0 female 2007 1\n#> 2 Adelie Torgersen 3250.0 female 2007 1", + "crumbs": [ + "2  `Introduction to Py4Stats`" + ] + }, + { + "objectID": "introduction.html#py4stats.regression_tools", + "href": "introduction.html#py4stats.regression_tools", + "title": "2  Introduction to Py4Stats", + "section": "2.2 py4stats.regression_tools", + "text": "2.2 py4stats.regression_tools\n py4stats.regression_tools は statsmodelsライブラリで作成された回帰分析の結果についての表作成と可視化を補助する機能を提供するモジュールです。\n py4stats.compare_ols() :計量経済学の実証論文でよく用いられる、回帰分析の結果を列方向に並べて比較する表を作成します。表のフォーマットについてはR言語のtexreg::screenreg()やmodelsummary::modelsummary()を参考にしています。同種の機能を提供する Python ライブラリーとしては、R言語の stargazer パッケージをもとにした stargazer ライブラリがあります。\nimport statsmodels.formula.api as smf\n\n# 回帰分析の実行\nfit1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()\nfit2 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species', data = penguins).fit()\nfit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()\n\ncompare_tab1 = py4st.compare_ols(list_models = [fit1, fit2, fit3]) # 表の作成\ncompare_tab1\n\n\n\n\n\n\n\n\n\nterm\nmodel 1\nmodel 2\nmodel 3\n\n\n\n\nIntercept\n153.7397\n-1,742.7202 ***\n843.9812 **\n\n\n\n(268.9012)\n(313.7697)\n(403.5956)\n\n\nspecies[T.Chinstrap]\n-885.8121 ***\n-539.6864 ***\n-245.1516 ***\n\n\n\n(88.2502)\n(86.9425)\n(84.5952)\n\n\nspecies[T.Gentoo]\n578.6292 ***\n1,492.8283 ***\n1,443.3525 ***\n\n\n\n(75.3623)\n(118.4442)\n(107.7844)\n\n\nbill_length_mm\n91.4358 ***\n55.6461 ***\n26.5366 ***\n\n\n\n(6.8871)\n(7.2326)\n(7.2436)\n\n\nbill_depth_mm\n\n179.0434 ***\n87.9328 ***\n\n\n\n\n(19.0997)\n(20.2192)\n\n\nsex[T.male]\n\n\n437.2007 ***\n\n\n\n\n\n(49.1098)\n\n\nrsquared_adj\n0.7810\n0.8258\n0.8613\n\n\nnobs\n342\n342\n333\n\n\ndf\n3\n4\n5\n\n\n\npy4stats.compare_ols() の実行結果は Pandas の DataFrame として出力されるため、.xlsx. ファイルなどに変換することができます。また、用途に応じて表の体裁を調整できるようにしています。詳細については 「回帰分析の比較」 を参照してください。\ncompare_tab2 = py4st.compare_ols(\n list_models = [fit1, fit2, fit3],\n model_name = ['基本モデル', '嘴の高さ追加', '性別追加'], # モデル名を変更\n stats = 'p_value', # () 内の値をP-値に変更する\n add_stars = False, # 有意性のアスタリスクなし\n table_style = 'one_line', # 表スタイルを1行表示に設定 'one' でも可能\n digits = 3 # 小数点以下の桁数を3に設定\n )\ncompare_tab2\n\n\n\n\n\n\n\n\n\nterm\n基本モデル\n嘴の高さ追加\n性別追加\n\n\n\n\nIntercept\n153.740(0.568)\n-1,742.720(0.000)\n843.981(0.037)\n\n\nspecies[T.Chinstrap]\n-885.812(0.000)\n-539.686(0.000)\n-245.152(0.004)\n\n\nspecies[T.Gentoo]\n578.629(0.000)\n1,492.828(0.000)\n1,443.353(0.000)\n\n\nbill_length_mm\n91.436(0.000)\n55.646(0.000)\n26.537(0.000)\n\n\nbill_depth_mm\n\n179.043(0.000)\n87.933(0.000)\n\n\nsex[T.male]\n\n\n437.201(0.000)\n\n\nrsquared_adj\n0.781\n0.826\n0.861\n\n\nnobs\n342\n342\n333\n\n\ndf\n3\n4\n5\n\n\n\npy4stats.coefplot():回帰係数の可視化。R言語の coefplot::coefplot() を参考にしました。\nimport matplotlib.pyplot as plt\npy4st.coefplot(fit3)\n\n\n\ncoefplot1\n\n\nplt.rcParams[\"figure.autolayout\"] = True\n\nfig, ax = plt.subplots(1, 2, figsize = (2.2 * 5, 5), dpi = 100)\n\npy4st.coefplot(fit2, ax = ax[0])\nax[0].set_xlim(-900, 1800)\n\npy4st.coefplot(fit3, ax = ax[1], palette = ['#FF6F91', '#F2E5EB'])\nax[1].set_xlim(-900, 1800);\n\n\n\ncoefplot2\n\n\n py4stats.compare_mfx() と py4stats.mfxplot() は、それぞれ py4stats.compare_ols() と py4stats.coefplot() の一般化線型モデルバージョンです。statsmodels ライブラリの.get_margeff() メソッドから得られた限界効果の推定値を表示します。\npenguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)\n\n# ロジスティック回帰の実行\nfit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()\nfit_logit2 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm + species', data = penguins).fit()\n\npy4st.compare_mfx([fit_logit1, fit_logit2])\n\n\n\nterm\nmodel 1\nmodel 2\n\n\n\n\nbody_mass_g\n-0.0004 ***\n-0.0003 ***\n\n\n\n(0.0000)\n(0.0000)\n\n\nbill_length_mm\n-0.0053\n-0.0357 ***\n\n\n\n(0.0036)\n(0.0070)\n\n\nbill_depth_mm\n-0.1490 ***\n-0.1098 ***\n\n\n\n(0.0051)\n(0.0175)\n\n\nspecies[T.Chinstrap]\n\n0.4172 ***\n\n\n\n\n(0.0848)\n\n\nspecies[T.Gentoo]\n\n0.3527 ***\n\n\n\n\n(0.1308)\n\n\nprsquared\n0.5647\n0.6187\n\n\nnobs\n342\n342\n\n\ndf\n3\n5\n\n\n\nplt.rcParams[\"figure.autolayout\"] = True\n\nfig, ax = plt.subplots(1, 2, figsize = (2.2 * 5, 5), dpi = 100)\n\npy4st.mfxplot(fit_logit1, ax = ax[0])\nax[0].set_xlim(-0.2, 0.85)\n\npy4st.mfxplot(fit_logit2, ax = ax[1], palette = ['#FF6F91', '#F2E5EB'])\nax[1].set_xlim(-0.2, 0.85);\n\n\n\ncoefplot3\n\n\n\nJump to Function reference.", + "crumbs": [ + "2  `Introduction to Py4Stats`" + ] + }, + { + "objectID": "reference.html", + "href": "reference.html", + "title": "3  Function reference", + "section": "", + "text": "3.1 Main Module", + "crumbs": [ + "3  Function reference" + ] + }, + { + "objectID": "reference.html#main-module", + "href": "reference.html#main-module", + "title": "3  Function reference", + "section": "", + "text": "3.1.1 py4stats.eda_tools\npy4stats.eda_tools モジュールは、探索的データ解析と前処理に関する機能を提供します。複数の DataFrame バックエンドに対して共通の API を提供することを目的として、narwhals ライブラリを用いて実装されています。詳細は Technical Notes を参照してください。\n\n3.1.1.1 データフレームの概要\npy4stats.diagnose()\n\n\n3.1.1.2 クロス集計\npy4stats.tabyl()\npy4stats.freq_table()\npy4stats.Pareto_plot()\npy4stats.plot_category()\n\n\n\n3.1.2 数値変数の点推定と区間推定\npy4stats.mean_qi() py4stats.median_qi() py4stats.mean_ci()\n\n3.1.2.1 データフレームの列や行の削除\npy4stats.remove_empty()\npy4stats.remove_constant()\npy4stats.filtering_out()\n\n\n3.1.2.2 データフレームの列の並べ替え\npy4stats.relocate()\n\n\n3.1.2.3 複数のデータフレームの比較\npy4stats.compare_df_cols() py4stats.compare_df_stats()\n\n\n3.1.2.4 簡易なグループ別統計量の比較\npy4stats.compare_group_means() py4stats.compare_group_median()\npy4stats.plot_mean_diff() py4stats.plot_median_diff()\n\n\n3.1.2.5 簡易な欠測値の可視化\npy4stats.plot_miss_var()\n\n\n3.1.2.6 数値変数の集計と標準化\npy4stats.weighted_mean() py4stats.scale() py4stats.min_max()\n\n\n3.1.2.7 論理関数\npy4stats.is_number() py4stats.is_ymd() py4stats.is_ymd_like()\npy4stats.is_dummy()\n\n\n3.1.2.8 簡易なルールベースのデータ検証ツール\npy4stats.check_that() py4stats.check_viorate()\n\n\n\n\n3.1.3 py4stats.regression_tools\npy4stats.regression_tools は statsmodels ライブラリで作成された回帰分析の結果についての可視化と表作成を補助する機能を提供するモジュールです。\n\n3.1.3.1 線形モデルの比較\npy4stats.compare_ols()\npy4stats.compare_mfx()\n\n\n3.1.3.2 線形モデルの可視化\npy4stats.coefplot() py4stats.mfxplot()\n\n\n3.1.3.3 線形モデルを作表するためのバックエンド関数\npy4stats.tidy()py4stats.tidy_mfx()\npy4stats.tidy_test()\npy4stats.glance()\n\n\n3.1.3.4 Blinder-Oaxaca分解\npy4stats.Blinder_Oaxaca() py4stats.plot_Blinder_Oaxaca()", + "crumbs": [ + "3  Function reference" + ] + }, + { + "objectID": "reference.html#sub-module", + "href": "reference.html#sub-module", + "title": "3  Function reference", + "section": "3.2 Sub Module", + "text": "3.2 Sub Module\n\n3.2.1 py4stats.heckit_helper\npy4stats.regression_tools の関数を py4etrics.heckit ライブラリで実装された Heckit モデルに対応させるためのメソッドを提供します。\nheckit_helper.Heckit_from_formula()\nheckit_helper.tidy_heckit()\nheckit_helper.heckitmfx_compute()\n\n\n\n3.2.2 py4stats.building_block\npy4stats ライブラリの実装に使用するアサーション関数やユーティリティ関数を提供します。 building_block モジュール自体は外部から呼び出すことなく内部実装に使用することを想定しています。\n\n\n3.2.3 引数のアサーション関数\nbuilding_block.arg_match()\nbuilding_block.assert_character() building_block.assert_logical() building_block.assert_numeric() building_block.assert_integer() building_block.assert_count() building_block.assert_float()\n\n\n3.2.4 データ型を判定する論理関数\nbuilding_block.is_character() building_block.is_logical() building_block.is_numeric() building_block.is_integer() building_block.is_float()\n\n\n3.2.5 数字のフォーマット\nbuilding_block.style_number() building_block.style_currency() building_block.style_percent()\nbuilding_block.style_pvalue() building_block.p_stars()\n\n\n3.2.6 並列文の作成\nbuilding_block.oxford_comma() building_block.oxford_comma_and() building_block.oxford_comma_or()\n\nJump to Get started.\nJump to Readme.", + "crumbs": [ + "3  Function reference" + ] + }, + { + "objectID": "man/diagnose.html", + "href": "man/diagnose.html", + "title": "4  py4stats.diagnose(): データフレームの概要", + "section": "", + "text": "4.1 概要\nR言語の dlookr::diagnose() を再現した関数で、データの全般的な状態についての要約を提供します。", + "crumbs": [ + "eda_tools", + "4  `py4stats.diagnose()`: データフレームの概要" + ] + }, + { + "objectID": "man/diagnose.html#概要", + "href": "man/diagnose.html#概要", + "title": "4  py4stats.diagnose(): データフレームの概要", + "section": "", + "text": "diagnose(data: IntoFrameT, to_native: bool = True)", + "crumbs": [ + "eda_tools", + "4  `py4stats.diagnose()`: データフレームの概要" + ] + }, + { + "objectID": "man/diagnose.html#引数-argument", + "href": "man/diagnose.html#引数-argument", + "title": "4  py4stats.diagnose(): データフレームの概要", + "section": "4.2 引数 Argument", + "text": "4.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", + "crumbs": [ + "eda_tools", + "4  `py4stats.diagnose()`: データフレームの概要" + ] + }, + { + "objectID": "man/diagnose.html#返り値", + "href": "man/diagnose.html#返り値", + "title": "4  py4stats.diagnose(): データフレームの概要", + "section": "4.3 返り値", + "text": "4.3 返り値\n\ndtype:該当する列のpandasにおけるデータの型。「〇〇の個数」や「〇〇の金額」といったデータの dtype が object や String になっていたら、文字列として読み込まれているので要注意です。\nmissing_count:1列のなかで NaN などの欠測値になっている数\nmissing_percent:1列のなかで欠測値が占めている割合でmissing_percent = (missing_count / 行数) * 100 として計算されます。もし missing_percent = 100 なら、その列は完全に空白です。\nunique_count:その列で重複を除外したユニークな値の数。例えばある列の中身が「a, a, b」であればユニークな値は a と b の2つなので unique_count = 2 です。もし unique_count = 1 であれば、その行にはたった1種類の値しか含まれていないことが分かりますし、例えば都道府県を表す列の unique_count が47より多ければ、都道府県以外のものが混ざっていると考えられます。\nunique_rate: サンプルに占めるユニークな値の割合。 unique_rate = unique_count / 行数 で計算されます。unique_rate = 1 であれば、全ての行に異なる値が入っています。一般的に、実数値の列は unique_rate が高くなりますが、年齢の「20代」や価格の「200円代」のように階級に分けられている場合には unique_rate が低くなります。", + "crumbs": [ + "eda_tools", + "4  `py4stats.diagnose()`: データフレームの概要" + ] + }, + { + "objectID": "man/diagnose.html#使用例-examples", + "href": "man/diagnose.html#使用例-examples", + "title": "4  py4stats.diagnose(): データフレームの概要", + "section": "4.4 使用例 Examples", + "text": "4.4 使用例 Examples\nimport py4stats as py4st\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込み\n\nprint(py4st.diagnose(penguins).round(4))\n#> columns dtype missing_count missing_percent unique_count unique_rate\n#> 0 species object 0 0.0000 3 0.8721\n#> 1 island object 0 0.0000 3 0.8721\n#> 2 bill_length_mm float64 2 0.5814 165 47.9651\n#> 3 bill_depth_mm float64 2 0.5814 81 23.5465\n#> 4 flipper_length_mm float64 2 0.5814 56 16.2791\n#> 5 body_mass_g float64 2 0.5814 95 27.6163\n#> 6 sex object 11 3.1977 3 0.8721\n#> 7 year int64 0 0.0000 3 0.8721\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "4  `py4stats.diagnose()`: データフレームの概要" + ] + }, + { + "objectID": "man/tabyl.html", + "href": "man/tabyl.html", + "title": "5  py4stats.tabyl()", + "section": "", + "text": "5.1 概要\nデータフレームのクロス集計表を作成します。R言語の janitor::tabyl()にいくつかの adorn_ 関数を追加した状態を再現した関数です。初期設定ではクロス集計表の各セルに度数と相対度数を 「度数(相対度数%)`」 の形式で表示します。", + "crumbs": [ + "eda_tools", + "5  `py4stats.tabyl()`" + ] + }, + { + "objectID": "man/tabyl.html#概要", + "href": "man/tabyl.html#概要", + "title": "5  py4stats.tabyl()", + "section": "", + "text": "tabyl(\n data: IntoFrameT,\n index: str,\n columns: str,\n margins: bool = True,\n margins_name: str = 'All',\n normalize: Union[bool, Literal[\"index\", \"columns\", \"all\"]] = \"index\",\n dropna: bool = False,\n digits: int = 1,\n **kwargs: Any\n)", + "crumbs": [ + "eda_tools", + "5  `py4stats.tabyl()`" + ] + }, + { + "objectID": "man/tabyl.html#引数-argument", + "href": "man/tabyl.html#引数-argument", + "title": "5  py4stats.tabyl()", + "section": "5.2 引数 Argument", + "text": "5.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\nindex:str  集計に使用するデータフレームの変数名(必須)。\ncolumns:str  集計に使用するデータフレームの変数名(必須)。\nmargins:bool  行または列の合計を追加するかどうかを表すブール値。初期設定は True です。\nmargins_name:bool  行や列の合計の名前。初期設定は 'All' です。\ndropna:bool   欠測値(NaN)を集計から除外するかどうかを表すブール値。初期設定は False です。\nnormalize:str  丸括弧( )に表示する相対度数の計算方式。\n\nindex 各セルの度数を行の和で割り、横方向の相対度数の和が100%になるように計算します。\ncolumns 各セルの度数を行の列で割り、縦方向の相対度数の和が100%になるように計算します。\nall 各セルの度数を総度数で割り、全てのセルの相対度数の和が100%になるように計算します。\n\ndigits:int  丸括弧( )に表示する相対度数の小数点以下の桁数。初期設定は1です。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", + "crumbs": [ + "eda_tools", + "5  `py4stats.tabyl()`" + ] + }, + { + "objectID": "man/tabyl.html#使用例", + "href": "man/tabyl.html#使用例", + "title": "5  py4stats.tabyl()", + "section": "5.3 使用例", + "text": "5.3 使用例\nimport py4stats as py4st\nimport pandas as pd\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込\n\n# 横方向の和を100%として計算(初期設定)\nprint(py4st.tabyl(penguins, 'island', 'species', normalize = 'index'))\n#> species Adelie Chinstrap Gentoo All\n#> island \n#> Biscoe 44 (26.2%) 0 (0.0%) 124 (73.8%) 168\n#> Dream 56 (45.2%) 68 (54.8%) 0 (0.0%) 124\n#> Torgersen 52 (100.0%) 0 (0.0%) 0 (0.0%) 52\n#> All 152 (44.2%) 68 (19.8%) 124 (36.0%) 344\n\n# 縦方向の和を100%として計算\nprint(py4st.tabyl(penguins, 'island', 'species', normalize = 'columns'))\n#> species Adelie Chinstrap Gentoo All\n#> island \n#> Biscoe 44 (28.9%) 0 (0.0%) 124 (100.0%) 168 (48.8%)\n#> Dream 56 (36.8%) 68 (100.0%) 0 (0.0%) 124 (36.0%)\n#> Torgersen 52 (34.2%) 0 (0.0%) 0 (0.0%) 52 (15.1%)\n#> All 152 68 124 344\n\n# 全体の和を100%として計算\nprint(py4st.tabyl(penguins, 'island', 'species', normalize = 'all'))\n#> species Adelie Chinstrap Gentoo All\n#> island \n#> Biscoe 44 (12.8%) 0 (0.0%) 124 (36.0%) 168 (48.8%)\n#> Dream 56 (16.3%) 68 (19.8%) 0 (0.0%) 124 (36.0%)\n#> Torgersen 52 (15.1%) 0 (0.0%) 0 (0.0%) 52 (15.1%)\n#> All 152 (44.2%) 68 (19.8%) 124 (36.0%) 344 (100.0%)\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "5  `py4stats.tabyl()`" + ] + }, + { + "objectID": "man/freq_table.html", + "href": "man/freq_table.html", + "title": "6  py4stats.freq_table()", + "section": "", + "text": "6.1 概要\nR言語のDescTools::Freq()をオマージュした、1変数の度数分布表を計算する関数。度数 freq と相対度数 perc に加えて、それぞれの累積値を計算します。", + "crumbs": [ + "eda_tools", + "6  `py4stats.freq_table()`" + ] + }, + { + "objectID": "man/freq_table.html#概要", + "href": "man/freq_table.html#概要", + "title": "6  py4stats.freq_table()", + "section": "", + "text": "freq_table(\n data: IntoFrameT,\n subset: Union[str, Sequence[str]],\n sort_by: Literal['frequency', 'values'] = 'frequency',\n descending: bool = False,\n dropna: bool = False,\n to_native: bool = True,\n *,\n sort: Optional[bool] = None\n)", + "crumbs": [ + "eda_tools", + "6  `py4stats.freq_table()`" + ] + }, + { + "objectID": "man/freq_table.html#引数-argument", + "href": "man/freq_table.html#引数-argument", + "title": "6  py4stats.freq_table()", + "section": "6.2 引数 Argument", + "text": "6.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\nsubset:str or list of str  集計に使用するデータフレームの列名(必須)。\nsort_by:str  sort_by = 'frequency' なら度数分布表を頻度に応じてソートし、sort_by = 'values' なら subset で指定した列の値に応じてソートします。\ndescending:bool  ソートの方式。True なら降順でソートし、False(初期設定)なら昇順でソートします。\ndropna:bool  欠測値(NaN, None など)を集計から除外するかどうかを表すブール値。初期設定は False です。\nsort:Deprecated..  sort_by の使用を推奨しています。この引数は後方互換性のために保持されおり、指定された場合は FutureWarningが発生します。デフォルトは None です。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", + "crumbs": [ + "eda_tools", + "6  `py4stats.freq_table()`" + ] + }, + { + "objectID": "man/freq_table.html#返り値-value", + "href": "man/freq_table.html#返り値-value", + "title": "6  py4stats.freq_table()", + "section": "6.3 返り値 Value", + "text": "6.3 返り値 Value\n freq_table()関数は、次の値をもつ DataFrame を出力します。\n\nfreq: 度数\nperc: 相対度数\ncumfreq: 累積度数\ncumperc: 累積相対度数", + "crumbs": [ + "eda_tools", + "6  `py4stats.freq_table()`" + ] + }, + { + "objectID": "man/freq_table.html#使用例", + "href": "man/freq_table.html#使用例", + "title": "6  py4stats.freq_table()", + "section": "6.4 使用例", + "text": "6.4 使用例\nimport py4stats as py4st\nimport pandas as pd\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込\n\nprint(py4st.freq_table(penguins, 'species'))\n#> species freq perc cumfreq cumperc\n#> 0 Chinstrap 68 0.197674 68 0.197674\n#> 1 Gentoo 124 0.360465 192 0.558140\n#> 2 Adelie 152 0.441860 344 1.000000\n\nprint(py4st.freq_table(penguins, ['island', 'species']))\n#> island species freq perc cumfreq cumperc\n#> 0 Biscoe Adelie 44 0.127907 44 0.127907\n#> 1 Torgersen Adelie 52 0.151163 96 0.279070\n#> 2 Dream Adelie 56 0.162791 152 0.441860\n#> 3 Dream Chinstrap 68 0.197674 220 0.639535\n#> 4 Biscoe Gentoo 124 0.360465 344 1.000000\npenguins2 = penguins.assign(bill_length_mm2 = pd.cut(penguins['bill_length_mm'], 6))\n\nprint(\n py4st.freq_table(\n penguins2, ['species', 'bill_length_mm2'], \n sort_by = 'values', dropna = True\n )\n )\n#> species bill_length_mm2 freq perc cumfreq cumperc\n#> 0 Adelie (32.072, 36.683] 36 0.105263 36 0.105263\n#> 1 Adelie (36.683, 41.267] 89 0.260234 125 0.365497\n#> 2 Adelie (41.267, 45.85] 25 0.073099 150 0.438596\n#> 3 Adelie (45.85, 50.433] 1 0.002924 151 0.441520\n#> 4 Chinstrap (36.683, 41.267] 1 0.002924 152 0.444444\n#> 5 Chinstrap (41.267, 45.85] 12 0.035088 164 0.479532\n#> 6 Chinstrap (45.85, 50.433] 29 0.084795 193 0.564327\n#> 7 Chinstrap (50.433, 55.017] 24 0.070175 217 0.634503\n#> 8 Chinstrap (55.017, 59.6] 2 0.005848 219 0.640351\n#> 9 Gentoo (36.683, 41.267] 1 0.002924 220 0.643275\n#> 10 Gentoo (41.267, 45.85] 39 0.114035 259 0.757310\n#> 11 Gentoo (45.85, 50.433] 65 0.190058 324 0.947368\n#> 12 Gentoo (50.433, 55.017] 15 0.043860 339 0.991228\n#> 13 Gentoo (55.017, 59.6] 3 0.008772 342 1.000000\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "6  `py4stats.freq_table()`" + ] + }, + { + "objectID": "man/Pareto_plot.html", + "href": "man/Pareto_plot.html", + "title": "7  py4stats.Pareto_plot(): パレート図の作成", + "section": "", + "text": "7.1 概要\nデータフレームからパレート図を作図する関数です。", + "crumbs": [ + "eda_tools", + "7  `py4stats.Pareto_plot()`: パレート図の作成" + ] + }, + { + "objectID": "man/Pareto_plot.html#概要", + "href": "man/Pareto_plot.html#概要", + "title": "7  py4stats.Pareto_plot(): パレート図の作成", + "section": "", + "text": "Pareto_plot(\n data: IntoFrameT,\n group: str,\n values: Optional[str] = None,\n top_n: Optional[int] = None,\n aggfunc: Callable[..., Any] = np.mean,\n ax: Optional[Axes] = None,\n fontsize: int = 12,\n xlab_rotation: Union[int, float] = 0,\n palette: Sequence[str] = (\"#478FCE\", \"#252525\"),\n )\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\ngroup:str  集計に使用するデータフレームの列名(必須)。\nvalues:str  集計に使用するデータフレームの列名。values = None(初期設定)の場合、group 別の度数が表示され、values が指定された場合、group 別に values を aggfuncで集計した値がグラフに表示されます。\ntop_n:int  棒グラフを表示するカテゴリーの件数。top_n = None(初期設定)の場合、すべてのカテゴリーを表示し、整数値が指定された場合、上位 top_n 件が表示されます。\naggfunc:callable values が指定された際に、集計に使用する集計関数。np.mean など values 列を1次元配列として受け取って単一の数値を返す任意の関数が使用できるほか、nw.mean など narwhals.functions モジュールで実装された関数を使用できます。\nax 描画先となる matplotlib の Axes。複数のグラフを並べる場合などに使用します。デフォルトの None の場合は、新しい Figure と Axes が作成されます。\nfontsize:int  軸ラベルなどのフォントサイズ。\nxlab_rotation:int or float 横軸ラベルの角度。matplotlib の ax.xaxis.set_tick_params() に引数 rotation として渡されます。\npalette:list of str グラフの描画に使用する色コード。1つ目の要素が棒グラフの色に、2つ目の累積値を表す折線グラフの色に対応します。", + "crumbs": [ + "eda_tools", + "7  `py4stats.Pareto_plot()`: パレート図の作成" + ] + }, + { + "objectID": "man/Pareto_plot.html#使用例", + "href": "man/Pareto_plot.html#使用例", + "title": "7  py4stats.Pareto_plot(): パレート図の作成", + "section": "7.2 使用例", + "text": "7.2 使用例\nimport py4stats as py4st\nimport pandas as pd\nimport numpy as np\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込\n\npenguins['group'] = penguins['species'] + '\\n' + penguins['island']\n\npy4st.Pareto_plot(penguins, group = 'group')\n\n\n\nPareto_plot1\n\n\npy4st.Pareto_plot(\n penguins, group = 'group', \n values = 'bill_length_mm',\n aggfunc = np.mean,\n palette = ['#FF6F91', '#252525']\n )\n\n\n\nPareto_plot2\n\n\npy4st.Pareto_plot(\n penguins, \n values = 'bill_length_mm',\n group = 'group',\n aggfunc = lambda x: x.std()\n )\n\n\n\nPareto_plot3\n\n\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "7  `py4stats.Pareto_plot()`: パレート図の作成" + ] + }, + { + "objectID": "man/plot_category.html", + "href": "man/plot_category.html", + "title": "8  py4stats.plot_category()", + "section": "", + "text": "8.1 概要\nカテゴリ変数の回答分布を 100% 積み上げ横棒グラフとして描画します。\n本関数は、複数のカテゴリ変数について回答分布を集計し、各変数を1本の100%積み上げ横棒グラフとして可視化します。リッカート尺度による設問や、共通のカテゴリをもつ、アンケートの回答データの可視化を主な用途としています。", + "crumbs": [ + "eda_tools", + "8  `py4stats.plot_category()`" + ] + }, + { + "objectID": "man/plot_category.html#概要", + "href": "man/plot_category.html#概要", + "title": "8  py4stats.plot_category()", + "section": "", + "text": "plot_category(\n data: IntoFrameT,\n palette: Optional[sns.palettes._ColorPalette] = None,\n legend_type: Literal['horizontal', 'vertical', 'none'] = 'horizontal',\n show_vline: bool = True,\n ax: Optional[Axes] = None,\n):", + "crumbs": [ + "eda_tools", + "8  `py4stats.plot_category()`" + ] + }, + { + "objectID": "man/plot_category.html#引数-argument", + "href": "man/plot_category.html#引数-argument", + "title": "8  py4stats.plot_category()", + "section": "8.2 引数 Argument", + "text": "8.2 引数 Argument\n\ndata:IntoFrameT(必須) カテゴリ変数を含む入力データフレーム(1列につき1変数)。 narwhals がサポートする任意のデータフレーム型(例:pandas.DataFrame、polars.DataFrame)を指定できます。 すべての列は、同一のカテゴリ体系(共通のカテゴリラベル)を共有している必要があります。 注意:pyarrow.Table については、その仕様による機能制限があります。詳細は「注意 Notes」セクションを参照してください。\nsort_by: str 回答カテゴリの並び順を決定する基準。'values':カテゴリの値(ラベル)でソートします。'frequency':出現頻度の高い順にソートします。デフォルトは 'values' です。\npalette sns.palettes._ColorPalette: 回答カテゴリに使用するカラーパレット。 None の場合は、内部でデフォルトの発散型パレットを生成します。 指定する場合は、カテゴリ数と同じ長さの配列である必要があります。 デフォルトは None です。\nlegend_typestr: 凡例の配置方法。デフォルトは 'horizontal' です。\n\n'horizontal':凡例をグラフ下部に横並びで表示します。\n'vertical':凡例をグラフ右側に縦並びで表示します。\n'none':凡例を表示しません。\n\nshow_vline:bool True の場合、x = 0.5(50%)の位置に基準となる垂直線を描画します。 割合の中点を視覚的に示す目的で使用できます。デフォルトは True です。\nax: 描画先となる matplotlib の Axes。複数のグラフを並べる場合などに使用します。デフォルトの None の場合は、新しい Figure と Axes が作成されます。", + "crumbs": [ + "eda_tools", + "8  `py4stats.plot_category()`" + ] + }, + { + "objectID": "man/plot_category.html#使用例-example", + "href": "man/plot_category.html#使用例-example", + "title": "8  py4stats.plot_category()", + "section": "8.3 使用例 Example", + "text": "8.3 使用例 Example\nimport py4stats as py4st\nimport pandas as pd\nimport itertools\n\nQ1 = [70 * ['Strongly agree'], 200 * ['Agree'], 235 * ['Disagree'], 149 * ['Strongly disagree']]\nQ2 = [74 * ['Strongly agree'], 209 * ['Agree'], 238 * ['Disagree'], 133 * ['Strongly disagree']]\nQ3 = [59 * ['Strongly agree'], 235 * ['Agree'], 220 * ['Disagree'], 140 * ['Strongly disagree']]\nQ4 = [40 * ['Strongly agree'], 72 * ['Agree'], 266 * ['Disagree'], 276 * ['Strongly disagree']]\n\ndata = pd.DataFrame({\n 'I read only if I have to.':list(itertools.chain.from_iterable(Q1)),\n 'Reading is one of my favorite hobbies.':list(itertools.chain.from_iterable(Q2)),\n 'I like talking about books with other people.':list(itertools.chain.from_iterable(Q3)),\n 'For me, reading is a waste of time.':list(itertools.chain.from_iterable(Q4))\n})\ncateg_list = ['Strongly disagree', 'Disagree', 'Agree', 'Strongly agree']\n\ndata_pd = data.apply(pd.Categorical, categories = categ_list)\n\npy4st.plot_category(data_pd)\n\n\n\nplot_category1\n\n\nimport polars as pl\nimport textwrap\n\ndata_pl = pl.from_pandas(data)\ndata_pl = data_pl.with_columns(\n pl.all().cast(pl.Enum(categ_list))\n )\\\n .rename(lambda x: textwrap.fill(x, width = 25))\n\nfig, ax = plt.subplots()\n\npy4st.plot_category(\n data_pl, \n palette = sns.color_palette('RdBu', n_colors = 4),\n ax = ax\n )\n\nax.set_title('Survey on attitudes toward reading');\n\n\n\nplot_category2", + "crumbs": [ + "eda_tools", + "8  `py4stats.plot_category()`" + ] + }, + { + "objectID": "man/plot_category.html#注意-notes", + "href": "man/plot_category.html#注意-notes", + "title": "8  py4stats.plot_category()", + "section": "8.4 注意 Notes", + "text": "8.4 注意 Notes\n\nsort_by=\"values\" は、カテゴリの順序情報(例:pandas の ordered categorical、Polars の Enum で定義した順序)を前提に、カテゴリ順で描画します。\n推奨: sort_by=“values” を利用する場合は、入力として pandas.DataFrame(各列を pd.Categorical に設定)または polars.DataFrame(各列を Enum に設定)を推奨します。\npolars.Categorical の列では、カテゴリ順が期待通りに保持されず、辞書順(例:Agree, Disagree, …)で描画される場合があります。\npyarrow.Table を入力した場合、sort_by = 'values’ は dictionary 型の制約によりエラーとなる場合があります。その場合は sort_by=\"frequency\" を使用してください。", + "crumbs": [ + "eda_tools", + "8  `py4stats.plot_category()`" + ] + }, + { + "objectID": "man/diagnose_category.html", + "href": "man/diagnose_category.html", + "title": "9  カテゴリー変数の要約 py4stats.diagnose_category()", + "section": "", + "text": "9.1 概要\nデータフレームのカテゴリー変数を要約します。本関数は、カテゴリー情報を表す列(カテゴリ型・文字列型・ブール型)およびダミー変数(値が {0, 1} に制限された整数列)を対象として、欠損率、ユニーク値の数、最頻値、最頻値の頻度と割合、evenness などの指標を提供します。", + "crumbs": [ + "eda_tools", + "9  カテゴリー変数の要約 `py4stats.diagnose_category()`" + ] + }, + { + "objectID": "man/diagnose_category.html#概要", + "href": "man/diagnose_category.html#概要", + "title": "9  カテゴリー変数の要約 py4stats.diagnose_category()", + "section": "", + "text": "diagnose_category(\n data: IntoFrameT, \n dropna: bool = True, \n to_native: bool = True\n )", + "crumbs": [ + "eda_tools", + "9  カテゴリー変数の要約 `py4stats.diagnose_category()`" + ] + }, + { + "objectID": "man/diagnose_category.html#引数-argument", + "href": "man/diagnose_category.html#引数-argument", + "title": "9  カテゴリー変数の要約 py4stats.diagnose_category()", + "section": "9.2 引数 Argument", + "text": "9.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\ndropna:bool  欠測値(NaN, None など)を統計値の計算から除外するかどうかを表すブール値。初期設定は True です。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", + "crumbs": [ + "eda_tools", + "9  カテゴリー変数の要約 `py4stats.diagnose_category()`" + ] + }, + { + "objectID": "man/diagnose_category.html#返り値-value", + "href": "man/diagnose_category.html#返り値-value", + "title": "9  カテゴリー変数の要約 py4stats.diagnose_category()", + "section": "9.3 返り値 Value", + "text": "9.3 返り値 Value\nfreq_table()関数は、次の値をもつ DataFrame を出力します。\n\nvariables: 変数(列)名\ncount: 非欠損値の個数\nmiss_pct: 欠損率(null_count / N * 100) (* ここで N は data の行数)\nunique: ユニーク値の個数\nunique_pct: ユニーク値の割合(unique / N * 100)\nmode: 最頻値\nmode_freq: 最頻値の度数\nmode_pct: 最頻値の割合(mode_freq / N * 100)\nevenness: カテゴリー分布の均等度([0, 1] の範囲)", + "crumbs": [ + "eda_tools", + "9  カテゴリー変数の要約 `py4stats.diagnose_category()`" + ] + }, + { + "objectID": "man/diagnose_category.html#使用例-examples", + "href": "man/diagnose_category.html#使用例-examples", + "title": "9  カテゴリー変数の要約 py4stats.diagnose_category()", + "section": "9.4 使用例 Examples", + "text": "9.4 使用例 Examples\nimport pandas as pd\nimport py4stats as py4st\nfrom palmerpenguins import load_penguins\n\npenguins = load_penguins().drop('year', axis = 1) # サンプルデータの読み込み\npenguins2 = penguins.copy()\ns = penguins2['body_mass_g']\npenguins2['heavy'] = np.where(s >= s.quantile(0.75), True, False)\n\nprint(py4st.diagnose_category(penguins2).round(4))\n#> variables count miss_pct unique unique_pct mode mode_freq mode_pct evenness\n#> 0 species 344 0.0000 3 0.8721 Adelie 152 44.1860 0.9550\n#> 1 island 344 0.0000 3 0.8721 Biscoe 168 48.8372 0.9133\n#> 2 sex 333 3.1977 2 0.5814 male 168 50.4505 0.9999\n#> 3 heavy 344 0.0000 2 0.5814 False 254 73.8372 0.8292", + "crumbs": [ + "eda_tools", + "9  カテゴリー変数の要約 `py4stats.diagnose_category()`" + ] + }, + { + "objectID": "man/diagnose_category.html#note", + "href": "man/diagnose_category.html#note", + "title": "9  カテゴリー変数の要約 py4stats.diagnose_category()", + "section": "9.5 Note", + "text": "9.5 Note\nevenness は、各列ごとに情報エントロピーを \\([0, 1]\\) の範囲に正規化した指標です。本実装では、対数の底をカテゴリの個数(unique)に設定することで正規化を行っており、これは底を2とした情報エントロピーを log2(unique) で割ることと同値です。この指標は正規化エントロピー(normalized entropy)としても知られています。\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "9  カテゴリー変数の要約 `py4stats.diagnose_category()`" + ] + }, + { + "objectID": "man/point_range.html", + "href": "man/point_range.html", + "title": "10  数値変数の点推定と区間推定:py4stats.mean_qi() py4stats.median_qi() py4stats.mean_ci()", + "section": "", + "text": "10.1 概要\nR言語の ggdist::mean_qi() をオマージュした数値変数の点推定と区間推定を行う関数です。", + "crumbs": [ + "eda_tools", + "10  数値変数の点推定と区間推定:`py4stats.mean_qi()` `py4stats.median_qi()` `py4stats.mean_ci()`" + ] + }, + { + "objectID": "man/point_range.html#概要", + "href": "man/point_range.html#概要", + "title": "10  数値変数の点推定と区間推定:py4stats.mean_qi() py4stats.median_qi() py4stats.mean_ci()", + "section": "", + "text": "mean_qi(\n data: Union[IntoFrameT, SeriesT],\n width: float = 0.975,\n interpolation: str = 'midpoint',\n to_native: bool = True\n)\nmean_qi(\n data: Union[IntoFrameT, SeriesT],\n width: float = 0.975,\n interpolation: str = 'midpoint',\n to_native: bool = True\n)\n\nmedian_qi(\n data: Union[IntoFrameT, IntoSeriesT],\n width: float = 0.975,\n interpolation: str = 'midpoint',\n to_native: bool = True\n)\n\nmean_ci(\n data: Union[IntoFrameT, IntoSeriesT],\n width: float = 0.975,\n to_native: bool = True\n)", + "crumbs": [ + "eda_tools", + "10  数値変数の点推定と区間推定:`py4stats.mean_qi()` `py4stats.median_qi()` `py4stats.mean_ci()`" + ] + }, + { + "objectID": "man/point_range.html#引数-argument", + "href": "man/point_range.html#引数-argument", + "title": "10  数値変数の点推定と区間推定:py4stats.mean_qi() py4stats.median_qi() py4stats.mean_ci()", + "section": "10.2 引数 Argument", + "text": "10.2 引数 Argument\n\ndata:IntoFrameT or IntoSeriesT(必須) 入力データ。narwhals が受け入れ可能な DataFrame もしくは Series 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\nwidth:float  分位点区間の幅、もしくは信頼区間の計算に用いる信頼係数。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", + "crumbs": [ + "eda_tools", + "10  数値変数の点推定と区間推定:`py4stats.mean_qi()` `py4stats.median_qi()` `py4stats.mean_ci()`" + ] + }, + { + "objectID": "man/point_range.html#使用例-examples", + "href": "man/point_range.html#使用例-examples", + "title": "10  数値変数の点推定と区間推定:py4stats.mean_qi() py4stats.median_qi() py4stats.mean_ci()", + "section": "10.3 使用例 Examples", + "text": "10.3 使用例 Examples\nimport py4stats as py4st\nimport pandas as pd\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込み\n\nprint(py4st.mean_qi(penguins['bill_length_mm']).round(2))\n#> variable mean lower upper\n#> 0 bill_length_mm 43.92 34.8 53.1\n\n\nprint(py4st.median_qi(penguins['bill_length_mm']).round(2))\n#> variable median lower upper\n#> 0 bill_length_mm 44.45 34.8 53.1\n\nprint(py4st.mean_ci(penguins['bill_length_mm']).round(2))\n#> variable mean lower upper\n#> 0 bill_length_mm 43.92 43.26 44.58\n\nprint(py4st.mean_ci(penguins[['bill_length_mm', 'bill_depth_mm']]).round(2))\n#> variable mean lower upper\n#> 0 bill_length_mm 43.92 43.26 44.58\n#> 1 bill_depth_mm 17.15 16.91 17.39\n\nprint(penguins.groupby('species')[['bill_length_mm']].apply(py4st.median_qi).round(2))\n#> variable median lower upper\n#> species \n#> Adelie 0 bill_length_mm 38.80 34.05 44.10\n#> Chinstrap 0 bill_length_mm 49.55 42.45 55.00\n#> Gentoo 0 bill_length_mm 47.30 42.65 53.85\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "10  数値変数の点推定と区間推定:`py4stats.mean_qi()` `py4stats.median_qi()` `py4stats.mean_ci()`" + ] + }, + { + "objectID": "man/remove_empty_constant.html", + "href": "man/remove_empty_constant.html", + "title": "11  空白列, 定数列の削除:py4stats.remove_empty(), py4stats.remove_constant()", + "section": "", + "text": "11.1 概要\npy4stats.remove_empty()はR言語の janitor:remove_empty() をオマージュした関数で、全ての要素が NaN である列や行をデータフレームから除外します py4stats.remove_constant() はR言語の janitor:remove_constant() をオマージュした関数で、1種類だけの要素からなる列をデータフレームから除外します。", + "crumbs": [ + "eda_tools", + "11  空白列, 定数列の削除:`py4stats.remove_empty()`, `py4stats.remove_constant()`" + ] + }, + { + "objectID": "man/remove_empty_constant.html#概要", + "href": "man/remove_empty_constant.html#概要", + "title": "11  空白列, 定数列の削除:py4stats.remove_empty(), py4stats.remove_constant()", + "section": "", + "text": "remove_empty(\n data: IntoFrameT,\n cols: bool = True,\n rows: bool = True,\n cutoff: float = 1.0,\n quiet: bool = True,\n to_native: bool = True,\n **kwargs: Any\n) \n\nremove_constant(\n data: IntoFrameT,\n quiet: bool = True,\n to_native: bool = True,\n dropna = False,\n **kwargs: Any\n)", + "crumbs": [ + "eda_tools", + "11  空白列, 定数列の削除:`py4stats.remove_empty()`, `py4stats.remove_constant()`" + ] + }, + { + "objectID": "man/remove_empty_constant.html#引数-argument", + "href": "man/remove_empty_constant.html#引数-argument", + "title": "11  空白列, 定数列の削除:py4stats.remove_empty(), py4stats.remove_constant()", + "section": "11.2 引数 Argument", + "text": "11.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\ncols:bool  空白列を削除するかどうかを表すブール値(remove_empty() のみ)。True(初期設定) なら空白列を削除し、Falseなら全ての要素が NaN の列があっても削除しません。\nrows:bool  空白行を削除するかどうかを表すブール値(remove_empty() のみ)。True(初期設定) なら空白行を削除し、Falseなら全ての要素が NaN の行があっても削除しません。\ncutoff:float  列(行)の削除を行うかどうかを判定する欠測率の閾値(remove_empty() のみ)。ある列(行)における NaN の割合が >= cutoff のとき、その列(行)を削除します。初期設定は1で全ての要素が NaN の列(行)のみ削除しますが、例えば cutoff = 0.9 とすることで NaN の割合9が割以上の列(行)を削除できます。\nquiet:bool  削除した列(行)を報告するかどうかを表すブール値。quiet = True(初期設定) であれば何も報告せずに削除だけ行い、quiet = False なら、削除した列(行)の数と列名(行名)を報告します。\ndropna:bool  ユニーク値の数を計算する際に、NaN を除外するかどうかを表すブール値(remove_constant() のみ)。dropna = True だと NaN を除外し、dropna = False(初期設定)だと NaN を除外しません。データフレームに NaN と、 NaN ではない1種類の値からなる列がある場合、dropna = False だと削除されず、dropna = True だと削除されます。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", + "crumbs": [ + "eda_tools", + "11  空白列, 定数列の削除:`py4stats.remove_empty()`, `py4stats.remove_constant()`" + ] + }, + { + "objectID": "man/remove_empty_constant.html#使用例-example", + "href": "man/remove_empty_constant.html#使用例-example", + "title": "11  空白列, 定数列の削除:py4stats.remove_empty(), py4stats.remove_constant()", + "section": "11.3 使用例 Example", + "text": "11.3 使用例 Example\npy4stats.remove_empty() の使用例。\nimport py4stats as py4st\nimport pandas as pd\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込み\n\npenguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy()\n# 空白列を作成\npenguins2.loc[:, 'empty'] = np.nan\n# 空白行を作成\npenguins2.loc[344, :] = np.nan\n\nprint(penguins2.tail(3))\n#> species body_mass_g empty\n#> 342 Chinstrap 4100.0 NaN\n#> 343 Chinstrap 3775.0 NaN\n#> 344 NaN NaN NaN\n# 完全に空白な行と列を削除。\nprint(py4st.remove_empty(penguins2, quiet = False).tail(3))\n#> Removing 1 empty column(s) out of 3 columns(Removed: empty).\n#> Removing 1 empty row(s) out of 345 rows(Removed: 344).\n#> species body_mass_g\n#> 341 Chinstrap 3775.0\n#> 342 Chinstrap 4100.0\n#> 343 Chinstrap 3775.0\n\n# 完全に空白な列のみ削除。\nprint(py4st.remove_empty(penguins2, rows = False, quiet = False).tail(3))\n#> Removing 1 empty column(s) out of 3 columns(Removed: empty).\n#> species body_mass_g\n#> 342 Chinstrap 4100.0\n#> 343 Chinstrap 3775.0\n#> 344 NaN NaN\n\n# 完全に空白な行のみ削除。\nprint(py4st.remove_empty(penguins2, cols = False, quiet = False).tail(3))\n#> Removing 1 empty row(s) out of 345 rows(Removed: 344).\n#> species body_mass_g empty\n#> 341 Chinstrap 3775.0 NaN\n#> 342 Chinstrap 4100.0 NaN\n#> 343 Chinstrap 3775.0 NaN\n# quiet = True の場合\nprint(py4st.remove_empty(penguins2).tail(3))\n#> species body_mass_g\n#> 341 Chinstrap 3775.0\n#> 342 Chinstrap 4100.0\n#> 343 Chinstrap 3775.0\npy4stats.remove_constant() の使用例。\npenguins2 = penguins.loc[:, ['species', 'body_mass_g']].copy()\npenguins2.loc[:, 'constant'] = 'c'\n\nprint(penguins2.head(3))\n#> species body_mass_g constant\n#> 0 Adelie 3750.0 c\n#> 1 Adelie 3800.0 c\n#> 2 Adelie 3250.0 c\n\nprint(py4st.remove_constant(penguins2, quiet = False).head(3))\n#> Removing 1 constant column(s) out of 3 column(s)(Removed: constant).\n#> species body_mass_g\n#> 0 Adelie 3750.0\n#> 1 Adelie 3800.0\n#> 2 Adelie 3250.0\npenguins2.loc[:, 'almost_empty'] = pd.NA\npenguins2.loc[1, 'almost_empty'] = 'c'\n\n# dropna = False なら、almost_empty は削除されません。\nprint(py4st.remove_constant(penguins2).head(3))\n#> species body_mass_g almost_empty\n#> 0 Adelie 3750.0 <NA>\n#> 1 Adelie 3800.0 c\n#> 2 Adelie 3250.0 <NA>\n\nprint(py4st.remove_constant(penguins2, dropna = True).head(3))\n#> species body_mass_g\n#> 0 Adelie 3750.0\n#> 1 Adelie 3800.0\n#> 2 Adelie 3250.0\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "11  空白列, 定数列の削除:`py4stats.remove_empty()`, `py4stats.remove_constant()`" + ] + }, + { + "objectID": "man/filtering_out.html", + "href": "man/filtering_out.html", + "title": "12  py4stats.filtering_out()", + "section": "", + "text": "12.1 概要\npandas の DataFrame.filter() メソッドでは引数 like に文字列を指定することで、列名に特定の文字列を含む列を選択できますが、反対に py4st.filtering_out() では列名に特定の文字列を含む列を除外します。実装の一部はR言語の dplyr::select() を参考にしました。", + "crumbs": [ + "eda_tools", + "12  `py4stats.filtering_out()`" + ] + }, + { + "objectID": "man/filtering_out.html#概要", + "href": "man/filtering_out.html#概要", + "title": "12  py4stats.filtering_out()", + "section": "", + "text": "filtering_out(\n data: IntoFrameT,\n contains: Optional[str] = None,\n starts_with: Optional[str] = None,\n ends_with: Optional[str] = None,\n axis: Union[int, str] = 'columns',\n to_native: bool = True,\n)", + "crumbs": [ + "eda_tools", + "12  `py4stats.filtering_out()`" + ] + }, + { + "objectID": "man/filtering_out.html#引数-argument", + "href": "man/filtering_out.html#引数-argument", + "title": "12  py4stats.filtering_out()", + "section": "12.2 引数 Argument", + "text": "12.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\n*args(str / list[str] / narwhals.Expr / narwhals.Selector) 移動したい列を指定します。指定方法は次のとおりです。\n\n列名(例:\"x\")\n列名のリスト(例:[\"x\", \"y\"])\nnarwhals の式(Expr)(例:nw.col(\"x\")) *axis = 'columns' の場合のみ\nnarwhals の Selector (例:ncs.numeric())*axis = 'columns' の場合のみ\n\ncontains:str  列名(行名)の検索に使用する文字列。内部で使用している pandas.Series.str.contains に渡され、指定された文字列を列名(行名)に含む列(行)を除外します。\nstarts_with:str  列名(行名)の検索に使用する文字列。内部で使用している pandas.Series.str.startswith に渡され、指定された文字列で列名(行名)が始まる列(行)を除外します。\nends_with:str  列名(行名)の検索に使用する文字列。内部で使用している pandas.Series.str.endswith に渡され、指定された文字列で列名(行名)が終わる列(行)を除外します。\naxis:{0 or 'index', 1 or 'columns'} axis = 1 または axis = 'columns' なら列の削除を行い、axis = 0 または axis = 'index' なら行の削除を行います。 このオプションは、data がインデックス属性 (例: pandas.DataFrame) をもつ場合のみ有効です。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", + "crumbs": [ + "eda_tools", + "12  `py4stats.filtering_out()`" + ] + }, + { + "objectID": "man/filtering_out.html#使用例", + "href": "man/filtering_out.html#使用例", + "title": "12  py4stats.filtering_out()", + "section": "12.3 使用例", + "text": "12.3 使用例\nimport py4stats as py4st\nimport pandas as pd\nimport narwhals.selectors as ncs\nfrom palmerpenguins import load_penguins\n\npenguins = load_penguins().head(3) # サンプルデータの読み込み\n\nprint(penguins)\n#> species island bill_length_mm bill_depth_mm flipper_length_mm body_mass_g sex year female\n#> 0 Adelie Torgersen 39.1 18.7 181.0 3750.0 male 2007 0\n#> 1 Adelie Torgersen 39.5 17.4 186.0 3800.0 female 2007 1\n#> 2 Adelie Torgersen 40.3 18.0 195.0 3250.0 female 2007 1\n# *args で列名を直接指定\nprint(py4st.filtering_out(penguins, 'year', 'island', 'sex'))\n#> species bill_length_mm bill_depth_mm flipper_length_mm body_mass_g\n#> 0 Adelie 39.1 18.7 181.0 3750.0\n#> 1 Adelie 39.5 17.4 186.0 3800.0\n#> 2 Adelie 40.3 18.0 195.0 3250.0\n\n\n# narwhals.selector の使用例 文字列型の変数を除外\nprint(py4st.filtering_out(penguins, ncs.string()))\n#> bill_length_mm bill_depth_mm flipper_length_mm body_mass_g year\n#> 0 39.1 18.7 181.0 3750.0 2007\n#> 1 39.5 17.4 186.0 3800.0 2007\n#> 2 40.3 18.0 195.0 3250.0 2007\n\n# 列名に 'length' を含む列を除外\nprint(py4st.filtering_out(penguins, contains = 'length'))\n#> species island bill_depth_mm body_mass_g sex year female\n#> 0 Adelie Torgersen 18.7 3750.0 male 2007 0\n#> 1 Adelie Torgersen 17.4 3800.0 female 2007 1\n#> 2 Adelie Torgersen 18.0 3250.0 female 2007 1\n\n# 列名が 'bill' から始まる列を除外\nprint(py4st.filtering_out(penguins, starts_with = 'bill'))\n#> species island flipper_length_mm body_mass_g sex year female\n#> 0 Adelie Torgersen 181.0 3750.0 male 2007 0\n#> 1 Adelie Torgersen 186.0 3800.0 female 2007 1\n#> 2 Adelie Torgersen 195.0 3250.0 female 2007 1\n\n# 列名が '_mm' で終わる列を除外\nprint(py4st.filtering_out(penguins, ends_with = '_mm'))\n#> species island body_mass_g sex year female\n#> 0 Adelie Torgersen 3750.0 male 2007 0\n#> 1 Adelie Torgersen 3800.0 female 2007 1\n#> 2 Adelie Torgersen 3250.0 female 2007 1", + "crumbs": [ + "eda_tools", + "12  `py4stats.filtering_out()`" + ] + }, + { + "objectID": "man/filtering_out.html#notes", + "href": "man/filtering_out.html#notes", + "title": "12  py4stats.filtering_out()", + "section": "12.4 Notes", + "text": "12.4 Notes\naxis='index' による行を対象とするフィルタリングは、インデックスの存在に依存します。したがって、pd.DataFrame 以外の行ラベルをもたない DataFrame バックエンドでは、このオプションは利用できません。\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "12  `py4stats.filtering_out()`" + ] + }, + { + "objectID": "man/relocate.html", + "href": "man/relocate.html", + "title": "13  py4stats.relocate(): 列を削除せずに並び替える", + "section": "", + "text": "13.1 概要\nrelocate() 関数は、データフレームに含まれる列を削除することなく並び替えるための関数です。指定した列(1 列または複数列)を、先頭・特定の列の前・特定の列の後に移動させることができます。本関数は、R の dplyr:relocate() に近い操作感を Python で提供することを目的としています。列の指定には、列名(文字列)だけでなく、narwhals の式(Expr)や Selector を利用でき、柔軟な列選択", + "crumbs": [ + "eda_tools", + "13  `py4stats.relocate()`: 列を削除せずに並び替える" + ] + }, + { + "objectID": "man/relocate.html#概要", + "href": "man/relocate.html#概要", + "title": "13  py4stats.relocate(): 列を削除せずに並び替える", + "section": "", + "text": "relocate(\n data: IntoFrameT, \n *args: Union[str, List[str], narwhals.Expr, narwhals.selectors.Selector], \n before: Optional[str] = None,\n after: Optional[str] = None,\n place: Optional[Literal[\"first\", \"last\"]] = None,\n to_native: bool = True\n ):", + "crumbs": [ + "eda_tools", + "13  `py4stats.relocate()`: 列を削除せずに並び替える" + ] + }, + { + "objectID": "man/relocate.html#引数-argument", + "href": "man/relocate.html#引数-argument", + "title": "13  py4stats.relocate(): 列を削除せずに並び替える", + "section": "13.2 引数 Argument", + "text": "13.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\n*args(str / list[str] / narwhals.Expr / narwhals.Selector) 移動したい列を指定します。指定方法は次のとおりです。\n\n列名(例:\"x\")\n列名のリスト(例:[\"x\", \"y\"])\nnarwhals の式(Expr)(例:nw.col(\"x\"))\nnarwhals の Selector (例:ncs.numeric())\n\n指定した順序は、移動後の列順にもそのまま反映されます。\nbefore(str, optional) args で指定された列を、この列の直前に移動します。 after と同時に指定することはできません。デフォルトは None です。\nafter(str, optional) args で指定された列を、この列の直後に移動します。 before と同時に指定することはできません。デフォルトは None です。\nplace(str, optional) *args で指定された列の、配置場所を指定します。\n\n\"first\": 選択した列をデータフレームの先頭(最も左)に配置します。\n\"last\": 選択した列をデータフレームの末尾(最も右)に配置します。 place 引数は before または after と同時に指定することはできません。 未指定(None)の場合は \"first\" と同じ挙動になります。\n\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。\n\n\n13.2.1 返り値\n\nIntoFrameT 入力データフレームと同じ列を保持したまま、指定されたルールに従って並び替えられたデータフレームを返します。", + "crumbs": [ + "eda_tools", + "13  `py4stats.relocate()`: 列を削除せずに並び替える" + ] + }, + { + "objectID": "man/relocate.html#使用例-example", + "href": "man/relocate.html#使用例-example", + "title": "13  py4stats.relocate(): 列を削除せずに並び替える", + "section": "13.3 使用例 Example", + "text": "13.3 使用例 Example\nimport py4stats as py4st\nimport pandas as pd\nimport narwhals.selectors as ncs\nfrom palmerpenguins import load_penguins\n\npenguins_mini = py4st.filtering_out(penguins, starts_with = 'bill').head(3)\nprint(penguins_mini)\n#> species island flipper_length_mm body_mass_g sex year\n#> 0 Adelie Torgersen 181.0 3750.0 male 2007\n#> 1 Adelie Torgersen 186.0 3800.0 female 2007\n#> 2 Adelie Torgersen 195.0 3250.0 female 2007\n# *args に指定した列は最前列に移動します\nprint(py4st.relocate(penguins_mini, 'year', 'sex'))\n#> year sex species island flipper_length_mm body_mass_g\n#> 0 2007 male Adelie Torgersen 181.0 3750.0\n#> 1 2007 female Adelie Torgersen 186.0 3800.0\n#> 2 2007 female Adelie Torgersen 195.0 3250.0\n\n# ncs.numeric() を使うことで、数値変数を指定できます\nprint(py4st.relocate(penguins_mini, ncs.numeric()))\n#> flipper_length_mm body_mass_g year species island sex\n#> 0 181.0 3750.0 2007 Adelie Torgersen male\n#> 1 186.0 3800.0 2007 Adelie Torgersen female\n#> 2 195.0 3250.0 2007 Adelie Torgersen female\n\n# year 列を island 列の直前に移動\nprint(py4st.relocate(penguins_mini, 'year', before = 'island'))\n#> species year island flipper_length_mm body_mass_g sex\n#> 0 Adelie 2007 Torgersen 181.0 3750.0 male\n#> 1 Adelie 2007 Torgersen 186.0 3800.0 female\n#> 2 Adelie 2007 Torgersen 195.0 3250.0 female\n\n# year 列を island 列の直後に移動\nprint(py4st.relocate(penguins_mini, 'year', after = 'island'))\n#> species island year flipper_length_mm body_mass_g sex\n#> 0 Adelie Torgersen 2007 181.0 3750.0 male\n#> 1 Adelie Torgersen 2007 186.0 3800.0 female\n#> 2 Adelie Torgersen 2007 195.0 3250.0 female\n\n#. place = 'last' で最後列に移動\nprint(py4st.relocate(penguins_mini, 'year', place = 'last'))\n#> species island flipper_length_mm body_mass_g sex year\n#> 0 Adelie Torgersen 181.0 3750.0 male 2007\n#> 1 Adelie Torgersen 186.0 3800.0 female 2007\n#> 2 Adelie Torgersen 195.0 3250.0 female 2007\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "13  `py4stats.relocate()`: 列を削除せずに並び替える" + ] + }, + { + "objectID": "man/compare_df_cols.html", + "href": "man/compare_df_cols.html", + "title": "14  py4stats.compare_df_cols(), py4stats.compare_df_stats()", + "section": "", + "text": "14.1 概要\nR言語の janitor::compare_df_cols() をオマージュした関数で、compare_df_cols() は複数の pandas.DataFrame に含まれる同じ名前を持つ列同士のデータ型 dtype を比較し、compare_df_stats() は同じ名前を持つ列同士の記述統計量を比較します。", + "crumbs": [ + "eda_tools", + "14  `py4stats.compare_df_cols()`, `py4stats.compare_df_stats()`" + ] + }, + { + "objectID": "man/compare_df_cols.html#概要", + "href": "man/compare_df_cols.html#概要", + "title": "14  py4stats.compare_df_cols(), py4stats.compare_df_stats()", + "section": "", + "text": "compare_df_cols(\n df_list: Union[List[IntoFrameT], Mapping[str, IntoFrameT]],\n df_name: Optional[List[str]] = None,\n return_match: Literal[\"all\", \"match\", \"mismatch\"] = 'all',\n dropna:bool = False,\n to_native: bool = True\n)\n\ncompare_df_stats(\n df_list: List[IntoFrameT],\n df_name: Optional[List[str]] = None,\n return_match: Literal[\"all\", \"match\", \"mismatch\"] = \"all\",\n stats: Callable[..., Any] = np.mean,\n rtol: float = 1e-05,\n atol: float = 1e-08,\n to_native: bool = True,\n **kwargs: Any,\n)", + "crumbs": [ + "eda_tools", + "14  `py4stats.compare_df_cols()`, `py4stats.compare_df_stats()`" + ] + }, + { + "objectID": "man/compare_df_cols.html#引数-argument", + "href": "man/compare_df_cols.html#引数-argument", + "title": "14  py4stats.compare_df_cols(), py4stats.compare_df_stats()", + "section": "14.2 引数 Argument", + "text": "14.2 引数 Argument\n\ndf_list(必須) A list or dict of IntoFrameT  列を比較するデータフレームのリストもしくは辞書オブジェクト。辞書が df_name が未指定の場合、辞書の keys を df_name として使用します。\ndf_name list of str  表頭に表示するデータフレームの名前。['df1', 'df2'] のように文字列のリストを指定してください。初期設定では、自動的に df1, df2, df3 … と連番が割り当てられます。\nreturn_match str  出力に反映する変数の範囲を表す文字列。次の値から選択できます。\n\n'all'(初期設定): 全ての列を表示。\n'match':全てのデータフレームで dtype が一致している列のみを表示。\n'mismatch':少なくとも1つのデータフレームで dtype が一致していない列のみを表示。\n\ndropna bool (compare_df_cols() のみ)  データ型 dtype の一致判定に当たり、NaN を無視するかどうか。初期設定 False の場合、すべてのデータフレームが同名かつ同じデータ型の列を持たない限り、ミスマッチが発生したと判定されます。\nstats str or function  比較に用いる記述統計量を定義する関数。np.mean など values 列を1次元配列として受け取って単一の数値を返す任意の関数が使用できるほか、nw.mean など narwhals.functions モジュールで実装された関数を使用できます。初期設定は np.mean です。", + "crumbs": [ + "eda_tools", + "14  `py4stats.compare_df_cols()`, `py4stats.compare_df_stats()`" + ] + }, + { + "objectID": "man/compare_df_cols.html#使用例-examples", + "href": "man/compare_df_cols.html#使用例-examples", + "title": "14  py4stats.compare_df_cols(), py4stats.compare_df_stats()", + "section": "14.3 使用例 Examples", + "text": "14.3 使用例 Examples\nimport pandas as pd\nimport py4stats as py4st\n\ndf1 = pd.DataFrame({'x':[1, 2, 3], 'y':[5, 4, 2], 'z':[True, False, True]})\ndf2 = pd.DataFrame({'x':[1, 2, 3], 'y':[5.0, 4, 2], 'z':['True', 'False', 'True']})\n\nprint(py4st.compare_df_cols([df1, df2]))\n#> term df1 df2 match_dtype\n#> 0 x int64 int64 True\n#> 1 y int64 float64 False\n#> 2 z bool object False\nreturn_match = 'mismatch' を指定すると、データフレームの中で、dtype が一致していないものがある列を返します。\nprint(py4st.compare_df_cols(\n [df1, df2], return_match = 'mismatch'\n ))\n#> term df1 df2 match_dtype\n#> 1 y int64 float64 False\n#> 2 z bool object False\n py4st.compare_df_stats() は数値変数の記述統計量を比較するため、異なる経路で行われたデータ処理の結果が一致しているかを検証する場合に便利です。\nfrom palmerpenguins import load_penguins\npenguins = load_penguins()\npenguins2 = penguins.copy()\nvars = ['flipper_length_mm', 'body_mass_g']\npenguins2.loc[:, vars] = py4st.scale(penguins2.loc[:, vars])\n\nprint(\n py4st.compare_df_stats([penguins, penguins2]).round(2)\n)\n#> term df1 df2 match_stats\n#> 0 bill_depth_mm 17.15 17.15 True\n#> 1 bill_length_mm 43.92 43.92 True\n#> 2 body_mass_g 4201.75 0.00 False\n#> 3 flipper_length_mm 200.92 -0.00 False\n#> 4 year 2008.03 2008.03 True\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "14  `py4stats.compare_df_cols()`, `py4stats.compare_df_stats()`" + ] + }, + { + "objectID": "man/compare_group_stats.html", + "href": "man/compare_group_stats.html", + "title": "15  統計量に基づくグループ間比較", + "section": "", + "text": "15.1 概要\nこれら関数は、入力された2つのデータフレームについて、各数値変数の統計量に基づいた比較を提供します。", + "crumbs": [ + "eda_tools", + "15  統計量に基づくグループ間比較" + ] + }, + { + "objectID": "man/compare_group_stats.html#概要", + "href": "man/compare_group_stats.html#概要", + "title": "15  統計量に基づくグループ間比較", + "section": "", + "text": "compare_group_means(\n group1: IntoFrameT,\n group2: IntoFrameT,\n group_names: Sequence[str] = ('group1', 'group2'),\n columns: Literal['common', 'all'] = 'all',\n to_native: bool = True\n )\n\ncompare_group_median(\n group1: IntoFrameT,\n group2: IntoFrameT,\n group_names: Sequence[str] = ('group1', 'group2'),\n columns: Literal['common', 'all'] = 'all',\n to_native: bool = True\n )\n\nplot_mean_diff(\n group1: IntoFrameT,\n group2: IntoFrameT,\n stats_diff: Literal[\"norm_diff\", \"abs_diff\", \"rel_diff\"] = \"norm_diff\",\n ax: Optional[Axes] = None,\n )\n\nplot_median_diff(\n group1: IntoFrameT,\n group2: IntoFrameT,\n stats_diff: Literal[\"abs_diff\", \"rel_diff\"] = \"rel_diff\",\n ax: Optional[Axes] = None,\n )", + "crumbs": [ + "eda_tools", + "15  統計量に基づくグループ間比較" + ] + }, + { + "objectID": "man/compare_group_stats.html#引数-argument", + "href": "man/compare_group_stats.html#引数-argument", + "title": "15  統計量に基づくグループ間比較", + "section": "15.2 引数 Argument", + "text": "15.2 引数 Argument\n\ngroup1(必須)a pandas.DataFrame  数値変数を含む pandas.DataFrame で group2 との比較対象となるもの\ngroup2(必須)a pandas.DataFrame  数値変数を含む pandas.DataFrame で group1 との比較対象となるもの\ngroup_names list of str  表頭に表示するグループの名前。['group1', 'group2'] のように、2つの要素をもつ文字列のリストとして指定してください。\ncolumns str 2つのグループの結果を結合する際に含める変数を指定します。\n\n\"common\": 両方のグループに存在する変数のみが含まれます。\n\"all\": いずれかのグループに存在する全ての変数が含まれます。この場合、一方のグループにのみ存在する変数についての差分統計量は、欠損値(例:NaN または None)となります。\n\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。\nstats_diff: str (plot_mean_diff() および plot_median_diff() のみ)  グラフの描画に使用する差分統計量。'norm_diff'(plot_mean_diff() のみ)、'abs_diff', 'rel_diff' のいずれかから選ぶことができます。", + "crumbs": [ + "eda_tools", + "15  統計量に基づくグループ間比較" + ] + }, + { + "objectID": "man/compare_group_stats.html#返り値-value", + "href": "man/compare_group_stats.html#返り値-value", + "title": "15  統計量に基づくグループ間比較", + "section": "15.3 返り値 Value", + "text": "15.3 返り値 Value\n compare_group_means()関数および, compare_group_median() 関数では、次の値をもつ pandas.DataFrame が出力されます。\n\ngroup1, group2(初期設定の場合)  各グループにおける記述統計統計量の値\nnorm_diff(compare_group_means() のみ)  標準化された平均値の差で、2つのグループの平均値を \\(\\bar{X}_1\\), \\(\\bar{X}_2\\)、分散を \\(s^2_1, s^2_2\\) とし、サンプルサイズを \\(n_1, n_2\\) とするとき、次式のように定義されます。\n\n\\[\n\\delta = \\frac{\\bar{X}_1 - \\bar{X}_2}{s},~~~~~ s^2 = \\frac{(n_1-1)s_1^2 + (n_2-1)s_2^2}{n_1 + n_2 - 2}\n\\]\n\nabs_diff 2つのグループの記述統計量の絶対差\nrel_diff 2つのグループの記述統計量の相対差。2つのグループの記述統計量を \\(\\bar{X}_1\\), \\(\\bar{X}_2\\) とするとき、次式のように定義されます。\n\n\\[\n\\delta = \\cfrac{\\bar{X}_1 - \\bar{X}_2}{\\cfrac{\\bar{X}_1 + \\bar{X}_2}{2}}\n= 2 \\cdot \\frac{\\bar{X}_1 - \\bar{X}_2}{\\bar{X}_1 + \\bar{X}_2}\n\\]\nplot_mean_diff() 関数および, plot_median_diff() 関数では、グループ別の記述統計両の差をグラフとして可視化します。詳細は使用例を参照して下さい。", + "crumbs": [ + "eda_tools", + "15  統計量に基づくグループ間比較" + ] + }, + { + "objectID": "man/compare_group_stats.html#使用例-examples", + "href": "man/compare_group_stats.html#使用例-examples", + "title": "15  統計量に基づくグループ間比較", + "section": "15.4 使用例 Examples", + "text": "15.4 使用例 Examples\nimport pandas as pd\nimport py4stats as py4st\nfrom palmerpenguins import load_penguins\n\npenguins = load_penguins().drop('year', axis = 1) # サンプルデータの読み込み\nres1 = py4st.compare_group_means(\n penguins.query('species == \"Gentoo\"'),\n penguins.query('species == \"Adelie\"')\n)\nprint(res1.round(3))\n#> variable group1 group2 norm_diff abs_diff rel_diff\n#> 0 bill_depth_mm 14.982 18.346 -3.012 3.364 -0.202\n#> 1 bill_length_mm 47.505 38.791 3.048 8.713 0.202\n#> 2 body_mass_g 5076.016 3700.662 2.868 1375.354 0.313\n#> 3 flipper_length_mm 217.187 189.954 4.180 27.233 0.134\nres2 = py4st.compare_group_median(\n penguins.query('species == \"Gentoo\"'),\n penguins.query('species == \"Adelie\"'),\n group_names = ['Gentoo', 'Adelie']\n)\nprint(res2.round(3))\n#> variable Gentoo Adelie abs_diff rel_diff\n#> 0 bill_depth_mm 14.982 18.346 3.364 -0.202\n#> 1 bill_length_mm 47.505 38.791 8.713 0.202\n#> 2 body_mass_g 5076.016 3700.662 1375.354 0.313\n#> 3 flipper_length_mm 217.187 189.954 27.233 0.134\npy4st.plot_mean_diff(\n penguins.query('species == \"Gentoo\"'),\n penguins.query('species == \"Adelie\"'),\n stats_diff = 'norm_diff'\n)\n\n\n\nplot_mean_diff1\n\n\npy4st.plot_mean_diff(\n penguins.query('species == \"Gentoo\"'),\n penguins.query('species == \"Adelie\"'),\n stats_diff = 'abs_diff'\n)\n\n\n\nplot_mean_diff2\n\n\npy4st.plot_median_diff(\n penguins.query('species == \"Gentoo\"'),\n penguins.query('species == \"Adelie\"'),\n stats_diff = 'rel_diff'\n)\n\n\n\nplot_median_diff1\n\n\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "15  統計量に基づくグループ間比較" + ] + }, + { + "objectID": "man/plot_miss_var.html", + "href": "man/plot_miss_var.html", + "title": "16  py4stats.plot_miss_var()", + "section": "", + "text": "16.1 概要\nR言語の naniar::gg_miss_var() をオマージュした関数で、データフレームの各変数について欠測値の量を横棒グラフとして可視化します。欠損値統計の計算には py4stats.diagnose() を使用しています。", + "crumbs": [ + "eda_tools", + "16  `py4stats.plot_miss_var()`" + ] + }, + { + "objectID": "man/plot_miss_var.html#概要", + "href": "man/plot_miss_var.html#概要", + "title": "16  py4stats.plot_miss_var()", + "section": "", + "text": "plot_miss_var(\n data: IntoFrameT,\n values: Literal['missing_percent', 'missing_count'] = 'missing_percent', \n sort: bool = True, \n miss_only: bool = False, \n top_n: Optional[int] = None,\n fontsize: int = 12,\n ax: Optional[Axes] = None,\n color: str = '#478FCE',\n **kwargs: Any\n)", + "crumbs": [ + "eda_tools", + "16  `py4stats.plot_miss_var()`" + ] + }, + { + "objectID": "man/plot_miss_var.html#引数-argument", + "href": "man/plot_miss_var.html#引数-argument", + "title": "16  py4stats.plot_miss_var()", + "section": "16.2 引数 Argument", + "text": "16.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\nnormalize:str  グラフに表示する値の種類。\n\nmissing_percent 列毎の欠測率をパーセンテージで表示します。\ncolumns 列毎の欠測数を表示します。\n\nsort:bool プロット前に選択した指標で列をソートするかどうか。初期設定は True です。。\nmiss_only:bool 欠測値を含まない列を除外するかどうか。True だと欠測値を含まない列を除外し、False(初期設定)だと省略せずに全ての列を表示します。\ntop_n:int 棒グラフを表示するグラフの個数。top_n = None(初期設定)の場合、すべての棒グラフを表示し、整数値が指定された場合、欠測率(数)の上位 top_n 件が表示されます。\nax  matplotlib の ax オブジェクト。複数のグラフを並べる場合などに使用します。\nfontsize:int  軸ラベルなどのフォントサイズ。\npalette:list of str  グラフの描画に使用する色コード。棒グラフの色に対応します。", + "crumbs": [ + "eda_tools", + "16  `py4stats.plot_miss_var()`" + ] + }, + { + "objectID": "man/plot_miss_var.html#使用例-example", + "href": "man/plot_miss_var.html#使用例-example", + "title": "16  py4stats.plot_miss_var()", + "section": "16.3 使用例 Example", + "text": "16.3 使用例 Example\nimport py4stats as py4st\nimport pandas as pd\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込\n\npy4st.plot_miss_var(penguins)\n\n\n\nplot_miss_var1\n\n\npy4st.plot_miss_var(penguins, values = 'missing_count', miss_only = True)\n\n\n\nplot_miss_var2\n\n\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "16  `py4stats.plot_miss_var()`" + ] + }, + { + "objectID": "man/set_miss.html", + "href": "man/set_miss.html", + "title": "17  py4stats.set_miss()", + "section": "", + "text": "17.1 概要\nこの関数は、Series の非欠測要素のうち、指定された個数または割合を欠測値に置き換えます。narwhals を利用することで、複数の Series バックエンドに対応しています。主にテストデータの作成や、欠測データのシミュレーションを目的とした関数です。", + "crumbs": [ + "eda_tools", + "17  `py4stats.set_miss()`" + ] + }, + { + "objectID": "man/set_miss.html#概要", + "href": "man/set_miss.html#概要", + "title": "17  py4stats.set_miss()", + "section": "", + "text": "set_miss(\n x: IntoSeriesT, \n n: Optional[int] = None,\n prop: Optional[float] = None, \n method: Literal['random', 'first', 'last'] = 'random', \n random_state: Optional[int] = None, \n na_value: Any = None,\n to_native: bool = True\n )", + "crumbs": [ + "eda_tools", + "17  `py4stats.set_miss()`" + ] + }, + { + "objectID": "man/set_miss.html#引数-argument", + "href": "man/set_miss.html#引数-argument", + "title": "17  py4stats.set_miss()", + "section": "17.2 引数 Argument", + "text": "17.2 引数 Argument\n\ndata:IntoFrameT(必須) 入力データ。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\nn:int 処理後の Series に含まれる欠測値の目標個数。すでに n 個以上の欠測値が含まれている場合は、新たな欠測値は追加されず、警告が発せられます。\nprop:float 処理後の Series に含まれる欠測値の目標割合。0 から 1 の間で指定してください。すでに欠測値の割合が prop 以上である場合は、新たな欠測値は追加されず、警告が発せられます。\nmethod: str: 欠測値に置き換える要素の選択方法。\n\n'random': 非欠測要素の中からランダムに選択します。\n'first': Series の先頭から選択します。\n'last': Series の末尾から選択します。 デフォルトは 'random' です。\n\nrandom_state (int, optional): method = 'random' の場合に使用する乱数シード。再現性のある結果を得るために指定できます。 method が 'random' 以外の場合、random_state は無視されます。\nna_value: (Any) 欠測値として使用する値。デフォルトは None です。\nto_native(bool, optional) True の場合、入力と同じ型の Series(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.Series を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", + "crumbs": [ + "eda_tools", + "17  `py4stats.set_miss()`" + ] + }, + { + "objectID": "man/set_miss.html#使用例-example", + "href": "man/set_miss.html#使用例-example", + "title": "17  py4stats.set_miss()", + "section": "17.3 使用例 Example", + "text": "17.3 使用例 Example\nimport pandas as pd\nfrom py4stats import set_miss\ns = pd.Series([1, 2, 3, 4, 5])\npy4st.set_miss(s, n = 2, method='first')\n#> 0 NaN\n#> 1 NaN\n#> 2 3.0\n#> 3 4.0\n#> 4 5.0\n#> dtype: float64\n\ns_miss = py4st.set_miss(s, prop=0.4, method='random', random_state=0)\n#> 0 1.0\n#> 1 NaN\n#> 2 3.0\n#> 3 NaN\n#> 4 5.0\n#> dtype: float64\nx に代入された Series オブジェクトに、既に指定された以上の欠測値が含まれていた場合、次のように欠測値を追加せず UserWarning を出します。\npy4st.set_miss(s_miss, n = 2)\n#> UserWarning: Already contained 2(>= n) missing value(s) in `x`, \n#> no additional missing values were added.\n#> 0 1.0\n#> 1 NaN\n#> 2 3.0\n#> 3 NaN\n#> 4 5.0\n#> dtype: float64\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込\n\npenguins['island'] = py4st.set_miss(\n penguins['island'], \n n = 100, method='first'\n )\npy4st.plot_miss_var(penguins, values = 'missing_count')\n\n\n\nset_miss.png", + "crumbs": [ + "eda_tools", + "17  `py4stats.set_miss()`" + ] + }, + { + "objectID": "man/scale_wmean.html", + "href": "man/scale_wmean.html", + "title": "18  数値変換・正規化ユーティリティ: py4stats.weighted_mean(), py4stats.scale(), py4stats.min_max()", + "section": "", + "text": "18.1 概要\n本モジュールは、探索的データ解析(EDA)で頻繁に用いられる加重平均の計算および 数値データの正規化・標準化を行う関数群を提供します。\n内部では narwhals を利用することで、pandas・polars など複数のデータフレーム/シリーズ実装に対して共通の API を提供しています。\nweighted_mean(): 数値系列 x と対応する重み w を用いて、加重平均を計算します。欠損値の扱いを制御するためのオプションを備えています。\nscale(): 数値データを Z スコア標準化します。系列データを主な対象としますが、pandas.DataFrame に対しても専用実装により列単位での標準化をサポートしています。\nmin_max(): 数値データを Min-Max Normarization により \\([0, 1]\\) の範囲に変換します。scale() と同様に、Series を主対象としつつ pandas.DataFrame にも対応しています。", + "crumbs": [ + "eda_tools", + "18  数値変換・正規化ユーティリティ: `py4stats.weighted_mean()`, `py4stats.scale()`, `py4stats.min_max()`" + ] + }, + { + "objectID": "man/scale_wmean.html#概要", + "href": "man/scale_wmean.html#概要", + "title": "18  数値変換・正規化ユーティリティ: py4stats.weighted_mean(), py4stats.scale(), py4stats.min_max()", + "section": "", + "text": "weighted_mean(\n x: IntoSeriesT, \n w: IntoSeriesT, \n dropna:bool = False\n ) -> float:\n\nscale(\n x: Union[IntoSeriesT, pd.DataFrame], \n ddof: int = 1, to_native: bool = True\n ) -> IntoSeriesT:\n\nmin_max(\n x: Union[IntoSeriesT, pd.DataFrame], \n to_native: bool = True\n ) -> IntoSeriesT:", + "crumbs": [ + "eda_tools", + "18  数値変換・正規化ユーティリティ: `py4stats.weighted_mean()`, `py4stats.scale()`, `py4stats.min_max()`" + ] + }, + { + "objectID": "man/scale_wmean.html#引数-argument", + "href": "man/scale_wmean.html#引数-argument", + "title": "18  数値変換・正規化ユーティリティ: py4stats.weighted_mean(), py4stats.scale(), py4stats.min_max()", + "section": "18.2 引数 Argument", + "text": "18.2 引数 Argument\n\nx:IntoSeriesT or pd.DataFrame(必須)\n\nnarwhals が受け入れ可能な Series 互換オブジェクト(例:pandas.Series、polars.Series)を指定できます。scale()関数と min_max()関数のみ pandas.DataFrame を指定することができ、この場合、各列ごとに変換が適用されます。\n\nw:IntoSeriesT(必須) x に対応する重みを表す数値系列。x と同じ長さである必要があります。narwhals が受け入れ可能な Series 互換オブジェクト(例:pandas.Series、polars.Series)を指定できます。\nddof(int, optional)scale(), min_max() のみ 標準偏差の計算に用いる自由度調整量(delta degrees of freedom)。デフォルトは 1 です。\ndropna(bool, optional)scale(), min_max() のみ True の場合、x または w のいずれかが欠損値(NaN)である観測を計算前に除外します。デフォルトは False です。\nto_native(bool, optional)scale(), min_max() のみ True の場合、入力と同じ型の Series(e.g. pandas / polars / pyarrow)を返します。 False の場合、Series を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", + "crumbs": [ + "eda_tools", + "18  数値変換・正規化ユーティリティ: `py4stats.weighted_mean()`, `py4stats.scale()`, `py4stats.min_max()`" + ] + }, + { + "objectID": "man/scale_wmean.html#返り値-value", + "href": "man/scale_wmean.html#返り値-value", + "title": "18  数値変換・正規化ユーティリティ: py4stats.weighted_mean(), py4stats.scale(), py4stats.min_max()", + "section": "18.3 返り値 Value", + "text": "18.3 返り値 Value\n\nweighted_mean\n\nfloat\n加重平均\n\nscale\n\nIntoSeriesT\n平均 0、標準偏差 1 に標準化された値を返します。\n\nmin_max\n\nIntoSeriesT\n最小値が 0、最大値が 1 となるよう正規化された値を返します。", + "crumbs": [ + "eda_tools", + "18  数値変換・正規化ユーティリティ: `py4stats.weighted_mean()`, `py4stats.scale()`, `py4stats.min_max()`" + ] + }, + { + "objectID": "man/scale_wmean.html#使用例-example", + "href": "man/scale_wmean.html#使用例-example", + "title": "18  数値変換・正規化ユーティリティ: py4stats.weighted_mean(), py4stats.scale(), py4stats.min_max()", + "section": "18.4 使用例 Example", + "text": "18.4 使用例 Example\nimport py4stats as py4st\nimport pandas as pd\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込\n\nx1 = penguins.groupby('species')['bill_length_mm'].mean()\nw = penguins.groupby('species')['bill_length_mm'].count()\n\nprint(\n f\"{py4st.weighted_mean(x1, w) :.2f}, \"\n f\"{penguins['bill_length_mm'].mean() :.2f}\"\n)\n#> 43.92, 43.92\n\nx2 = penguins['bill_length_mm']\nz1 = py4st.scale(x2)\nprint(f\"{z1.mean():.2f}, {z1.std():.2f}\")\n#> 0.00, 1.00\n\nz2 = py4st.min_max(x2)\nprint(f\"{z2.min():.2f}, {z2.max():.2f}\")\n#> 0.00, 1.00", + "crumbs": [ + "eda_tools", + "18  数値変換・正規化ユーティリティ: `py4stats.weighted_mean()`, `py4stats.scale()`, `py4stats.min_max()`" + ] + }, + { + "objectID": "man/predicate_str.html", + "href": "man/predicate_str.html", + "title": "19  文字列のフォーマットについての論理関数 py4stats.is_number(), py4stats.is_ymd(), py4stats.is_ymd_like()", + "section": "", + "text": "19.1 概要\nSeries の要素が、特定のフォーマットにそった文字列かどうかを判定する関数です。", + "crumbs": [ + "eda_tools", + "19  文字列のフォーマットについての論理関数
`py4stats.is_number()`, `py4stats.is_ymd()`, `py4stats.is_ymd_like()`
" + ] + }, + { + "objectID": "man/predicate_str.html#概要", + "href": "man/predicate_str.html#概要", + "title": "19  文字列のフォーマットについての論理関数 py4stats.is_number(), py4stats.is_ymd(), py4stats.is_ymd_like()", + "section": "", + "text": "is_number(\n data:IntoSeriesT, \n na_default:bool = True, \n to_native: bool = True\n )\n\nis_ymd(\n data:IntoSeriesT, \n na_default:bool = True, \n to_native: bool = True\n )\n\nis_ymd_like(\n data:IntoSeriesT, \n na_default:bool = True, \n to_native: bool = True\n )\n\npy4stats.is_number():与えられた文字列が数字かどうかを判定します。\npy4stats.is_ymd():与えられた文字列が yyyy-mm-dd フォーマットにそった値かどうかを判定します。\npy4stats.is_ymd_like():与えられた文字列が’2024年3月3日’ のような yyyy-mm-dd に近いフォーマットの値かどうかを判定します。", + "crumbs": [ + "eda_tools", + "19  文字列のフォーマットについての論理関数
`py4stats.is_number()`, `py4stats.is_ymd()`, `py4stats.is_ymd_like()`
" + ] + }, + { + "objectID": "man/predicate_str.html#引数-argument", + "href": "man/predicate_str.html#引数-argument", + "title": "19  文字列のフォーマットについての論理関数 py4stats.is_number(), py4stats.is_ymd(), py4stats.is_ymd_like()", + "section": "19.2 引数 Argument", + "text": "19.2 引数 Argument\n\ndata:IntoSeriesT(必須)\n入力データ。narwhals が受け入れ可能な Series 互換オブジェクト (例:pandas.Series、polars.DataFrame、pyarrow.Table)を指定できます。\nna_default:bool  NA値に対して関数が返す値。na_default = True (初期設定)であれば None や NaN には True を返し、na_default = False であれば False が返します。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。", + "crumbs": [ + "eda_tools", + "19  文字列のフォーマットについての論理関数
`py4stats.is_number()`, `py4stats.is_ymd()`, `py4stats.is_ymd_like()`
" + ] + }, + { + "objectID": "man/predicate_str.html#使用例", + "href": "man/predicate_str.html#使用例", + "title": "19  文字列のフォーマットについての論理関数 py4stats.is_number(), py4stats.is_ymd(), py4stats.is_ymd_like()", + "section": "19.3 使用例", + "text": "19.3 使用例\nimport py4stats as py4st\nimport pandas as pd\nimport numpy as np\n\ns = pd.Series([\n '123', \"0.12\", \"1e+07\", '-31', '2個', '1A',\n \"2024-03-03\", \"2024年3月3日\", \"24年3月3日\", '令和6年3月3日',\n '0120-123-456', \"apple\", \"不明\", None, np.nan\n ])\n\nprint(s[py4st.is_number(s)])\n#> 0 123\n#> 1 0.12\n#> 2 1e+07\n#> 3 -31\n#> 13 None\n#> 14 NaN\n#> dtype: object\n\nprint(s[py4st.is_ymd(s)])\n#> 6 2024-03-03\n#> 13 None\n#> 14 NaN\n#> dtype: object\n\nprint(s[py4st.is_ymd_like(s)])\n#> 6 2024-03-03\n#> 7 2024年3月3日\n#> 8 24年3月3日\n#> 9 令和6年3月3日\n#> 13 None\n#> 14 NaN\n#> dtype: object\n 実践的な使用例として「厚生労働省 4.食中毒統計資料」のうち、2020年の食中毒事件一覧を考えます。東京都のデータを取り出て'摂食者数'の列を見ると、数字が並んでいるものの dtype は object となっており、数字ではない値が含まれていることが疑われます。\n# 厚生労働省:食中毒統計資料より\ndata = pd.read_excel('https://www.mhlw.go.jp/content/R2itiran.xlsx', header = 1)\\\n .query('都道府県名等.str.contains(\"東京\")')\n\nprint(data['摂食者数'])\n#> 280 41\n#> 281 86\n#> 282 3\n#> 283 10\n#> 284 3\n#> ..\n#> 381 2\n#> 382 2\n#> 383 4\n#> 384 6\n#> 385 4\n#> Name: 摂食者数, Length: 106, dtype: object\neda.is_number() を使うと数字以外にどのような値が含まれているかを確認できるため、これをもとに「不明」となっている部分は NaN に置き換えるなどの対処法が考えられます。\nprint(data.loc[~py4st.is_number(data['摂食者数']), '摂食者数'])\n#> 285 不明\n#> 315 不明\n#> 374 不明\n#> 375 不明\n#> 377 不明\n#> 378 不明\n#> 379 不明\n#> 380 不明\n#> Name: 摂食者数, dtype: object\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "19  文字列のフォーマットについての論理関数
`py4stats.is_number()`, `py4stats.is_ymd()`, `py4stats.is_ymd_like()`
" + ] + }, + { + "objectID": "man/is_dummy.html", + "href": "man/is_dummy.html", + "title": "20  ダミー変数の判定: py4stats.is_dummy()", + "section": "", + "text": "20.1 概要\nリストや Series の要素が、指定されたダミーコードのみで構成されたダミー変数かどうかを判定します。", + "crumbs": [ + "eda_tools", + "20  ダミー変数の判定: `py4stats.is_dummy()`" + ] + }, + { + "objectID": "man/is_dummy.html#概要", + "href": "man/is_dummy.html#概要", + "title": "20  ダミー変数の判定: py4stats.is_dummy()", + "section": "", + "text": "is_dummy(\n data: Union[IntoFrameT, IntoSeriesT],\n cording: Sequence[Any] = (0, 1),\n dropna: bool = True,\n to_pd_series: bool = False,\n **kwargs\n )", + "crumbs": [ + "eda_tools", + "20  ダミー変数の判定: `py4stats.is_dummy()`" + ] + }, + { + "objectID": "man/is_dummy.html#引数-argument", + "href": "man/is_dummy.html#引数-argument", + "title": "20  ダミー変数の判定: py4stats.is_dummy()", + "section": "20.2 引数 Argument", + "text": "20.2 引数 Argument\n\ndata: list, IntoFrameT or IntoSeriesT 入力データ。list あるいは、narwhals が受け入れ可能な DataFrame もしくは Series 互換オブジェクト\ncording: list ダミーコードとして許容される値の集合。入力データに含まれる値の集合が、この集合と完全に一致する場合にダミー変数であると判定されます。デフォルトは (0, 1) です。\ndropna:bool  欠測値(NaN)をコーディングの判定から除外するかどうかを表すブール値。初期設定は True です。\nto_pd_series: bool data が DataFrame 場合の戻り値の形式を制御します。\n\nTrue の場合:列名をインデックスにもつ pandas.Series を返します\nFalse の場合:各列の判定結果を要素とする list を返します\n\n**kwargs: 将来の拡張のために予約されたキーワード引数です。", + "crumbs": [ + "eda_tools", + "20  ダミー変数の判定: `py4stats.is_dummy()`" + ] + }, + { + "objectID": "man/is_dummy.html#返り値-value", + "href": "man/is_dummy.html#返り値-value", + "title": "20  ダミー変数の判定: py4stats.is_dummy()", + "section": "20.3 返り値 Value", + "text": "20.3 返り値 Value\n\ndata が Series-like の場合\n\n-指定されたダミーコードのみで構成されていれば True、それ以外の場合は False\n\ndata が DataFrame-like の場合 \n\nto_pd_Series = False のとき:各列ごとの判定結果を要素とする list[bool]\nto_pd_Series = True のとき:列名をインデックスにもつ pd.Series", + "crumbs": [ + "eda_tools", + "20  ダミー変数の判定: `py4stats.is_dummy()`" + ] + }, + { + "objectID": "man/is_dummy.html#使用例-examples", + "href": "man/is_dummy.html#使用例-examples", + "title": "20  ダミー変数の判定: py4stats.is_dummy()", + "section": "20.4 使用例 Examples", + "text": "20.4 使用例 Examples\nimport py4stats as py4st\nimport pandas as pd\nfrom palmerpenguins import load_penguins\n\npenguins = load_penguins() # サンプルデータの読み込み\n\n# ダミー変数の作成\npenguins2 = pd.get_dummies(\n penguins.loc[:, 'species':'bill_length_mm'], \n columns = ['species']\n )\npenguins2['Intercept'] = 1 # 定数列の作成\npenguins2['female'] = penguins['sex'] == 'female' # bool 型の変数を作成\n\nprint(py4st.is_dummy(penguins2['species_Adelie']))\n#> True\nなお、初期設定では bool 型の変数についても True が出力されます。\nprint(py4st.is_dummy(penguins2))\n#> island False\n#> bill_length_mm False\n#> species_Adelie True\n#> species_Chinstrap True\n#> species_Gentoo True\n#> Intercept False\n#> female True\n#> Name: 0, dtype: bool\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "20  ダミー変数の判定: `py4stats.is_dummy()`" + ] + }, + { + "objectID": "man/varidate.html", + "href": "man/varidate.html", + "title": "21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate()", + "section": "", + "text": "21.1 概要\nR言語の varidateパッケージの check_that() 関数などをオマージュした、ごく簡易なデータ検証関数です。", + "crumbs": [ + "eda_tools", + "21  簡易なルールベースのデータ検証ツール `py4stats.check_that()` `py4stats.check_viorate()`" + ] + }, + { + "objectID": "man/varidate.html#概要", + "href": "man/varidate.html#概要", + "title": "21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate()", + "section": "", + "text": "check_that(\n data: IntoFrameT,\n rule_dict: Union[Mapping[str, str], pd.Series],\n **kwargs: Any,\n)\n\ncheck_viorate(data, rule_dict, **kwargs)", + "crumbs": [ + "eda_tools", + "21  簡易なルールベースのデータ検証ツール `py4stats.check_that()` `py4stats.check_viorate()`" + ] + }, + { + "objectID": "man/varidate.html#引数-argument", + "href": "man/varidate.html#引数-argument", + "title": "21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate()", + "section": "21.2 引数 Argument", + "text": "21.2 引数 Argument\n\ndata:IntoFrameT(必須)  ルールに基づくデータ検証を行うデータセット。narwhals が受け入れ可能な DataFrame 互換オブジェクト (例:pandas.DataFrame、polars.DataFrame、pyarrow.Table)を指定できます。\nrule_dictdict or pd.Series of str(必須)  pandas.eval() メソッドで実行した結果が論理値となるような expression の文字列を値とする辞書オブジェクト。詳細は使用例も参照してください。\nto_native(bool, optional) True の場合、入力と同じ型のデータフレーム(e.g. pandas / polars / pyarrow)を返します。 False の場合、narwhals.DataFrame を返します。デフォルトは True で、to_native = False は、主にライブラリ内部での利用や、backend に依存しない後続処理を行う場合を想定したオプションです。\n**kwargs  pandas.eval() に渡す追加の引数。", + "crumbs": [ + "eda_tools", + "21  簡易なルールベースのデータ検証ツール `py4stats.check_that()` `py4stats.check_viorate()`" + ] + }, + { + "objectID": "man/varidate.html#返り値-value", + "href": "man/varidate.html#返り値-value", + "title": "21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate()", + "section": "21.3 返り値 Value", + "text": "21.3 返り値 Value\n\n21.3.1 check_that(): データセット単位の検証結果の集計\n次の列を含む、引数 data に代入されたデータフレームと同じ型の DataFrame が出力されます。\n\nrule: 検証ルールの名前\nitem: ルールが検証対象とした項目の数。レコード(行)を検証単位とするルールの場合、item は data の行数(rows)になります。一方、データセット全体を検証単位とするルール(例:集計量に基づく条件)の場合、item は 1 になります。\npasses: 検証の結果、ルールを満たすと判定されたレコードの数。\nfails: 検証の結果、ルールを満たさないと判定されたレコードの数。\ncountna: 欠測値によって、ルールの検証が行えなかったレコードの数。行(レコード)を検証単位とするルールでは、ルールの評価に使用された変数のいずれかに欠測値が含まれる場合、そのレコードは検証不能として NA 扱いされます。countna は、このように検証を正しく実施できなかったレコードの件数を表します。\nexpression: 検証ルールを表す文字列(expression)。\n\n\n\n21.3.2 check_viorate(): レコード単位の検証結果\nルール名を列名として、レコード毎の違反を示す論理変数をもつ DataFrame が出力されます。\n各列の要素の True は検証のルールへの違反、もしくは欠測値によって評価に失敗したことを表します。rule_dict で設定された各ルールに対応する列の他に、次の列が追加で出力されます。\n\nany: 行内のいずれかのルールが違反または評価に失敗した場合に True となるブール値。\nall: 行内の全ルールが違反または評価に失敗した場合に True となるブール値。", + "crumbs": [ + "eda_tools", + "21  簡易なルールベースのデータ検証ツール `py4stats.check_that()` `py4stats.check_viorate()`" + ] + }, + { + "objectID": "man/varidate.html#使用例-examples", + "href": "man/varidate.html#使用例-examples", + "title": "21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate()", + "section": "21.4 使用例 Examples", + "text": "21.4 使用例 Examples\n ここでは py4st.check_that() 関数を使って Loo, Jonge(2022, p. 136)の結果を再現します。まずはR言語の validate パッケージに付属する retailers データを利用します。retailers は60件の小売業者の経営状況についてのデータで、従業員数、売上高とその他の収入、人件費、総費用、および利益がユーロ導入前の通貨単位である1000ギルダー単位で収録されています。\nimport py4stats as py4st\nimport pandas as pd\n\nURL = 'https://raw.githubusercontent.com/data-cleaning/validate/master/pkg/data/retailers.csv'\nretailers = pd.read_csv(URL, sep = ';')\nretailers.columns = retailers.columns.to_series().str.replace('.', '_', regex = False)\n py4st.check_that() 関数は、第1引数にデータセットを、第2引数に検証ルールの辞書オブジェクトを代入して使用します。\n まずは、検証ルールの辞書オブジェクトを定義します。辞書オブジェクトの値には pandas.eval() メソッドで実行可能な expression の文字列を指定し、key に検証ルールの名前を指定します。検証ルールの名前は任意の値で構いませんが、 expression は結果が論理値となるものでなければなりません。\nrule_dict = {\n 'to':'turnover > 0', # 売上高は厳密に正である\n 'sc':'staff_costs / staff < 50', # 従業員1人当たりの人件費は50,000ギルダー未満である\n 'cd1':'staff_costs > 0 | ~(staff > 0)', # 従業員がいる場合、人件費は厳密に正である\n 'cd2':py4st.implies_exper('staff > 0', 'staff_costs > 0'), # cd1 の別表現\n 'bs':'turnover + other_rev == total_rev', # 売上高とその他の収入の合計は総収入に等しい\n 'mn':'profit.mean() > 0' # セクター全体の平均的な利益はゼロよりも大きい\n }\npd.Series(rule_dict)\n#> to turnover > 0\n#> sc staff_costs / staff < 50\n#> cd1 staff_costs > 0 | ~(staff > 0)\n#> cd2 staff_costs > 0 | ~(staff > 0)\n#> bs turnover + other_rev == total_rev\n#> mn profit.mean() > 0\n#> dtype: object\nretailers と rule_dict を py4st.check_that() に代入すると、rule_dict に指定したルールに基づいた検証が実行されます。item 列はその検証ルールで生成された論理値の個数(通常はデータセットの列数と一致します)を表し、passes 列は検証結果が True となったレコードの数を、fails は False となったレコードの数を表します。また、coutna はルールの検証に使用した変数(データセットの列)のいずれかが欠測値であったレコードの数です。\nprint(py4st.check_that(retailers, rule_dict))\n#> rule item passes fails coutna expression\n#> 0 to 60 56 0 4 turnover > 0\n#> 1 sc 60 39 5 16 staff_costs / staff < 50\n#> 2 cd1 60 44 0 16 staff_costs > 0 | ~(staff > 0)\n#> 3 cd2 60 44 0 16 staff_costs > 0 | ~(staff > 0)\n#> 4 bs 60 19 4 37 turnover + other_rev == total_rev\n#> 5 mn 1 1 0 0 profit.mean() > 0\n前述の通り、py4st.check_that() 関数ではルール検証を pandas.eval() メソッドで実行しているため、検証ルールに自作関数や外部のモジュールからインポート関数を使うには、関数名の前に @ をつけて @func(…) と記述し、また **kwargs 引数に local_dict = locals() と指定してください。\n 次のコードで定義している is_complete() 関数は、代入された pd.Series が全て欠測値ではなく、指定された変数に関して完全ケースであることを判定する関数です。turnover.notna() & total_rev.notna() & other_rev.notna() と記述しても同じ結果が得られますが、自作関数を使うことで若干簡潔に記述できます。\nfrom pandas.api.types import is_numeric_dtype\ndef is_complete(*arg): return pd.concat(arg, axis = 'columns').notna().all(axis = 'columns')\n\npd.set_option('display.expand_frame_repr', False)\n\nrule_dict2 = {\n 'to_num':'@is_numeric_dtype(turnover)', # 売上高は数値変数である\n 'rev_complete':'@is_complete(turnover, total_rev, other_rev)', # 売上高と収入が全て観測されている\n }\n\nprint(py4st.check_that(\n retailers, rule_dict2, local_dict = locals()\n ))\n#> rule item passes fails coutna expression\n#> 0 to_num 1 1 0 0 @is_numeric_dtype(turnover)\n#> 1 rev_complete 60 23 0 37 @is_complete(turnover, total_rev, other_rev)\npy4st.check_viorate() の使い方も py4st.check_that() と同様ですが、py4st.check_that() がデータセット全体での検証結果を出力するのに対し、py4st.check_viorate() ではレコード別の検証結果を表示します。py4st.check_viorate() から出力されるデータフレームでは、各列が検証ルールに、各行が元データの観測値に対応し、当該ルールが満たされていない場合、True と表示されます。また、any 列は複数あるルールのいずれか1つでも満たされていないことを、all 列は全てのルールが満たされていないことを示します。\nrule_dict3 = {\n 'to':'turnover > 0', # 売上高は厳密に正である\n 'sc':'staff_costs / staff < 50', # 従業員1人当たりの人件費は50,000ギルダー未満である\n 'rev_complete':'@is_complete(turnover, total_rev, other_rev)',# 売上高と収入が全て観測されている\n }\n \ndf_viorate = py4st.check_viorate(retailers, rule_dict3)\nprint(df_viorate.head())\n#> to sc rev_complete any all\n#> 0 True True True True True\n#> 1 False False True True False\n#> 2 False True False True False\n#> 3 False True False True False\n#> 4 True True True True True\ndf_viorate データフレームの各列は論理値であるため、次のように検証ルールを満たさない観測値を抽出することができます。\nprint(retailers.loc[df_viorate['to'], 'size':'turnover'])\n#> size incl_prob staff turnover\n#> 0 sc0 0.02 75.0 NaN\n#> 4 sc3 0.14 NaN NaN\n#> 6 sc3 0.14 5.0 NaN", + "crumbs": [ + "eda_tools", + "21  簡易なルールベースのデータ検証ツール `py4stats.check_that()` `py4stats.check_viorate()`" + ] + }, + { + "objectID": "man/varidate.html#notes", + "href": "man/varidate.html#notes", + "title": "21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate()", + "section": "21.5 Notes", + "text": "21.5 Notes\n本関数の内部実装は、 pd.DataFrame.eval() メソッドに依存しているため、実行時間の面で必ずしも最適化されていません。", + "crumbs": [ + "eda_tools", + "21  簡易なルールベースのデータ検証ツール `py4stats.check_that()` `py4stats.check_viorate()`" + ] + }, + { + "objectID": "man/varidate.html#参考文献", + "href": "man/varidate.html#参考文献", + "title": "21  簡易なルールベースのデータ検証ツール py4stats.check_that() py4stats.check_viorate()", + "section": "21.6 参考文献", + "text": "21.6 参考文献\n\nLoo, Mark van der, and Edwin de Jonge. (2022). 『統計的データクリーニングの理論と実践: Rによるデータ編集/欠測補完システム』. 共立出版. 地道 正行, 髙橋 雅夫, 藤野 友和, 安川 武彦〔訳〕\n\n\nReturn to Function reference.", + "crumbs": [ + "eda_tools", + "21  簡易なルールベースのデータ検証ツール `py4stats.check_that()` `py4stats.check_viorate()`" + ] + }, + { + "objectID": "man/compare_ols.html", + "href": "man/compare_ols.html", + "title": "22  回帰分析の比較:py4stats.compare_ols()", + "section": "", + "text": "22.1 概要\nsm.ols() や smf.glm() で作成された回帰分析の結果から、推定結果を縦方向に並べて比較する表を作成します。表のフォーマットについてはR言語の texreg::screenreg()やmodelsummary::modelsummary()を参考にしています。", + "crumbs": [ + "regression_tools", + "22  回帰分析の比較:`py4stats.compare_ols()`" + ] + }, + { + "objectID": "man/compare_ols.html#概要", + "href": "man/compare_ols.html#概要", + "title": "22  回帰分析の比較:py4stats.compare_ols()", + "section": "", + "text": "compare_ols(\n list_models: Sequence[RegressionResultsWrapper],\n model_name: Optional[Sequence[str]] = None,\n subset: Optional[Sequence[str]] = None,\n stats: Literal[\"std_err\", \"statistics\", \"p_value\", \"conf_int\"] = \"std_err\",\n add_stars: bool = True,\n stars: Optional[Mapping[str, float]] = None,\n stats_glance: Optional[Sequence[str]] = (\"rsquared_adj\", \"nobs\", \"df\"),\n digits: int = 4,\n table_style: Literal[\"two_line\", \"one_line\"] = \"two_line\",\n line_break: str = \"\\n\",\n **kwargs: Any\n)", + "crumbs": [ + "regression_tools", + "22  回帰分析の比較:`py4stats.compare_ols()`" + ] + }, + { + "objectID": "man/compare_ols.html#引数-argument", + "href": "man/compare_ols.html#引数-argument", + "title": "22  回帰分析の比較:py4stats.compare_ols()", + "section": "22.2 引数 Argument", + "text": "22.2 引数 Argument\n\nlist_models:Sequence[RegressionResultsWrapper] 推定結果を表示する分析結果のリスト(必須)。sm.ols() や smf.ols() で作成された回帰分析の結果を list_models = [fit1, fit2] のようにリストとして指定してください。\nmodel_name:list of str 表頭に表示するモデルの名前。['モデル1', 'モデル2'] のように文字列のリストを指定してください。初期設定では、自動的に model 1, model 2, model 3 … と連番が割り当てられます。\nsubset:list of str 表示する回帰係数のリスト。指定しない場合(初期設定)、モデルに含まれる全ての回帰係数が表示されます。内部ではpandas.DataFrame.locメソッドを用いて処理を行っているため、['変数1', '変数2', ...] のような文字列のリスト、[True, False, True, ...] のようなブール値のリストに対応しています。文字列のリストが指定された場合、リストの並び順に合わせて回帰係数が表示されます。\nstats:str 表中の丸括弧 ( ) 内に表示する統計値の設定。次の値が指定できます。\n\n'std_err' 標準誤差(初期設定)\n'p_value' p-値\n'statistics' t統計量\n\nadd_stars:bool 回帰係数の統計的有意性を表すアスタリスク * を表示するかどうかを表すブール値。add_stars = True(初期-設定)なら表示、add_stars = Falseなら非表示となります。table_style に 'two_line' を指定した場合はアスタリスクは回帰係数の直後に表示され、'one_line' を指定した場合は stats で指定した統計値の後に表示されます。アスタリスクはp-値の値に応じて次のように表示されます。\nstars:dict(p_stars() のみ)  有意性を示す記号を key に、表示を切り替える閾値を値(value)にもつ辞書オブジェクト。初期設定の stars = None の場合、下記の方式で表示されます。\n\np ≤ 0.1 *\np ≤ 0.05 **\np ≤ 0.01 ***\np > 0.1 表示なし 詳細はbuilding_block.style_pvalue() を参照してください。\n\nstats_glance:list of str\n表の下部に追加する当てはまりの尺度の種類を表す文字列のリスト。リストの値には次の値を指定できます。なお、None もしくは空のリスト [ ] が指定された場合には非表示となります。\n\n'rsquared':決定係数\n'rsquared_adj':自由度調整済み決定係数\n'nobs':サインプルサイズ\n'df':モデルの自由度(説明変数の数)\n'sigma':回帰式の標準誤差\n'F_values':全ての回帰係数がゼロであることを帰無仮説とするF検定の統計量\n'p_values':F検定のP-値\n'AIC':赤池情報量基準\n'BIC':ベイズ情報量基準\n\ndigits: int 回帰係数と統計値について表示する小数点以下の桁数。初期設定は4です。\ntable_style: str 表の書式を表す文字列。次の値から選択できます(部分一致可)。\n\n'two_line'回帰係数と統計値を2行に分ける(初期設定)\n'one_line'回帰係数と統計値を1行で表示する\n\nline_break: str table_style = 'two_line' とした場合に使用される改行記号。table_style = 'one_line' とした場合、この引数は無視されます。", + "crumbs": [ + "regression_tools", + "22  回帰分析の比較:`py4stats.compare_ols()`" + ] + }, + { + "objectID": "man/compare_ols.html#使用例-examples", + "href": "man/compare_ols.html#使用例-examples", + "title": "22  回帰分析の比較:py4stats.compare_ols()", + "section": "22.3 使用例 Examples", + "text": "22.3 使用例 Examples\nimport py4stats as py4st\nimport statsmodels.formula.api as smf\n\nimport pandas as pd\nimport numpy as np\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込み\n\n# 回帰分析の実行\nfit1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()\nfit2 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species', data = penguins).fit()\nfit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()\n\ncompare_tab1 = py4st.compare_ols(list_models = [fit1, fit2, fit3]) # 表の作成\ncompare_tab1\n\n\n\n\n\n\n\n\n\nterm\nmodel 1\nmodel 2\nmodel 3\n\n\n\n\nIntercept\n153.7397\n-1,742.7202 ***\n843.9812 **\n\n\n\n(268.9012)\n(313.7697)\n(403.5956)\n\n\nspecies[T.Chinstrap]\n-885.8121 ***\n-539.6864 ***\n-245.1516 ***\n\n\n\n(88.2502)\n(86.9425)\n(84.5952)\n\n\nspecies[T.Gentoo]\n578.6292 ***\n1,492.8283 ***\n1,443.3525 ***\n\n\n\n(75.3623)\n(118.4442)\n(107.7844)\n\n\nbill_length_mm\n91.4358 ***\n55.6461 ***\n26.5366 ***\n\n\n\n(6.8871)\n(7.2326)\n(7.2436)\n\n\nbill_depth_mm\n\n179.0434 ***\n87.9328 ***\n\n\n\n\n(19.0997)\n(20.2192)\n\n\nsex[T.male]\n\n\n437.2007 ***\n\n\n\n\n\n(49.1098)\n\n\nrsquared_adj\n0.7810\n0.8258\n0.8613\n\n\nnobs\n342\n342\n333\n\n\ndf\n3\n4\n5\n\n\n\npy4st.compare_ols() の実行結果は Pandas の DataFrame として出力されるため、.xlsx. ファイルなどに変換することができます。また、用途に応じて表の体裁を調整できるようにしています。\ncompare_tab2 = py4st.compare_ols(\n list_models = [fit1, fit2, fit3],\n model_name = ['基本モデル', '嘴の高さ追加', '性別追加'], # モデル名を変更\n stats = 'p_value', # () 内の値をP-値に変更する\n add_stars = False, # 有意性のアスタリスクなし\n table_style = 'one_line', # 表スタイルを1行表示に設定 'one' でも可能\n digits = 3 # 小数点以下の桁数を3に設定\n )\ncompare_tab2\n\n\n\n\n\n\n\n\n\nterm\n基本モデル\n嘴の高さ追加\n性別追加\n\n\n\n\nIntercept\n153.740(0.568)\n-1,742.720(0.000)\n843.981(0.037)\n\n\nspecies[T.Chinstrap]\n-885.812(0.000)\n-539.686(0.000)\n-245.152(0.004)\n\n\nspecies[T.Gentoo]\n578.629(0.000)\n1,492.828(0.000)\n1,443.353(0.000)\n\n\nbill_length_mm\n91.436(0.000)\n55.646(0.000)\n26.537(0.000)\n\n\nbill_depth_mm\n\n179.043(0.000)\n87.933(0.000)\n\n\nsex[T.male]\n\n\n437.201(0.000)\n\n\nrsquared_adj\n0.781\n0.826\n0.861\n\n\nnobs\n342\n342\n333\n\n\ndf\n3\n4\n5\n\n\n\ntable_style = 'two_line' のときに使用される改行記号は line_break で指定できます。great_tables モジュールの GT() 関数と併用する場合など、html 形式で出力する場合には line_break = '<br>' を指定します。\nfrom great_tables import GT, md, html\n\ncompare_tab3 = py4st.compare_ols(\n list_models = [fit1, fit2, fit3],\n model_name = ['基本モデル', '嘴の高さ追加', '性別追加'], # モデル名を変更\n line_break = '<br>' # 改行文字の変更\n )\n\nGT(compare_tab3.reset_index())\\\n .tab_header(title = 'Palmer penguin データを使った回帰分析の結果')\\\n .tab_source_note(\n source_note= \"Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’\"\n )\\\n .tab_source_note(source_note = '( ) の値は標準誤差')\n\n\n22.3.0.1 有意性の表示規則の変更\npy4stats の v0.2.0 以降は、stars 引数で有意性の表示規則を変更できるようになりました。\nstars_dict = {'★★★':0.001, '★★':0.01, '★': 0.05, '.':0.1}\n\nreg.compare_ols(\n list_models = [fit3],\n model_name = ['model 3'],\n stars = stars_dict\n )\n\n\n\nterm\nmodel 3\n\n\n\n\nIntercept\n843.9812 ★\n\n\n\n(403.5956)\n\n\nspecies[T.Chinstrap]\n-245.1516 ★★\n\n\n\n(84.5952)\n\n\nspecies[T.Gentoo]\n1,443.3525 ★★★\n\n\n\n(107.7844)\n\n\nsex[T.male]\n437.2007 ★★★\n\n\n\n(49.1098)\n\n\nbill_length_mm\n26.5366 ★★★\n\n\n\n(7.2436)\n\n\nbill_depth_mm\n87.9328 ★★★\n\n\n\n(20.2192)\n\n\nrsquared_adj\n0.8613\n\n\nnobs\n333\n\n\ndf\n5\n\n\n\n\n\n22.3.0.2 回帰係数の sbusetting\n引数 subset を使って表示したい回帰係数を指定することで、一部の回帰係数を省略して表記することもできます。\n# 説明変数に island を追加したモデルを推定\nfit4 = smf.ols(\n 'body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex + island',\n data = penguins).fit()\n\nvar_list = [\n 'species[T.Chinstrap]', 'species[T.Gentoo]',\n 'bill_length_mm', 'bill_depth_mm', 'sex[T.male]'\n ]\n\n# 全ての回帰係数を表示すると表が長すぎるので、一部を省略します\ncompare_tab4 = py4st.compare_ols(\n list_models = [fit2, fit3, fit4],\n subset = var_list\n )\n\ncompare_tab4.loc['島ダミー', :] = ['No', 'No', 'Yes']\n\ncompare_tab4\n\n\n\n\n\n\n\n\n\nterm\nmodel 1\nmodel 2\nmodel 3\n\n\n\n\nspecies[T.Chinstrap]\n-539.6864 ***\n-245.1516 ***\n-255.2732 ***\n\n\n\n(86.9425)\n(84.5952)\n(92.4796)\n\n\nspecies[T.Gentoo]\n1,492.8283 ***\n1,443.3525 ***\n1,446.1574 ***\n\n\n\n(118.4442)\n(107.7844)\n(114.1676)\n\n\nbill_length_mm\n55.6461 ***\n26.5366 ***\n26.6643 ***\n\n\n\n(7.2326)\n(7.2436)\n(7.2792)\n\n\nbill_depth_mm\n179.0434 ***\n87.9328 ***\n88.3284 ***\n\n\n\n(19.0997)\n(20.2192)\n(20.3267)\n\n\nsex[T.male]\n\n437.2007 ***\n436.0334 ***\n\n\n\n\n(49.1098)\n(49.4227)\n\n\nrsquared_adj\n0.8258\n0.8613\n0.8605\n\n\nnobs\n342\n333\n333\n\n\ndf\n4\n5\n7\n\n\n島ダミー\nNo\nNo\nYes\n\n\n\npandas の pandas.DataFrame.query メソッドを使って、次のように説明変数を除外することもできます。\ncompare_tab4 = py4st.compare_ols(\n list_models = [fit2, fit3, fit4]\n )\n\ncompare_tab4 = compare_tab4\\\n .query('~term.str.contains(\"Intercept|island\")').copy()\n\ncompare_tab4.loc['島ダミー', :] = ['No', 'No', 'Yes']\n\ncompare_tab4 # 上記のコードと同じ結果", + "crumbs": [ + "regression_tools", + "22  回帰分析の比較:`py4stats.compare_ols()`" + ] + }, + { + "objectID": "man/compare_ols.html#補足", + "href": "man/compare_ols.html#補足", + "title": "22  回帰分析の比較:py4stats.compare_ols()", + "section": "22.4 補足", + "text": "22.4 補足\n  table_style = 'two_line' としたとき、初期設定ではの回帰係数とp-値の間に改行記号 '\\n'が挿入されます。そのため、print() 関数や display() 関数を使った出力では、改行記号 '\\n' がそのまま表示されます。この場合でも、pd.DataFrame.to_excel() や pd.DataFrame.to_markdown() を使って Excel ファイルや markdown の表に変換していただくと、改行として反映されます。", + "crumbs": [ + "regression_tools", + "22  回帰分析の比較:`py4stats.compare_ols()`" + ] + }, + { + "objectID": "man/compare_ols.html#参照-see-also", + "href": "man/compare_ols.html#参照-see-also", + "title": "22  回帰分析の比較:py4stats.compare_ols()", + "section": "22.5 参照 see also", + "text": "22.5 参照 see also\n 一般化線形モデルの限界効果を比較する場合は py4stats.compare_mfx()をご利用ください。\n\nReturn to Function reference.", + "crumbs": [ + "regression_tools", + "22  回帰分析の比較:`py4stats.compare_ols()`" + ] + }, + { + "objectID": "man/compare_mfx.html", + "href": "man/compare_mfx.html", + "title": "23  限界効果の比較:py4stats.compare_mfx()", + "section": "", + "text": "23.1 概要\nsm.glm()の推定結果を計量経済学の実証論文でよく用いられる、回帰分析の結果を縦方向に並べて比較する表を作成します。表のフォーマットについてはR言語の texreg::screenreg()やmodelsummary::modelsummary()を参考にしています。", + "crumbs": [ + "regression_tools", + "23  限界効果の比較:`py4stats.compare_mfx()`" + ] + }, + { + "objectID": "man/compare_mfx.html#概要", + "href": "man/compare_mfx.html#概要", + "title": "23  限界効果の比較:py4stats.compare_mfx()", + "section": "", + "text": "compare_mfx(\n list_models, \n model_name = None,\n subset = None,\n stats = 'std_err',\n add_stars = True,\n stats_glance = ['prsquared', 'nobs', 'df'],\n at = 'overall',\n method = 'dydx',\n dummy = False,\n digits = 4, \n table_style = 'two_line',\n line_break = '\\n',\n **kwargs\n)", + "crumbs": [ + "regression_tools", + "23  限界効果の比較:`py4stats.compare_mfx()`" + ] + }, + { + "objectID": "man/compare_mfx.html#引数-argument", + "href": "man/compare_mfx.html#引数-argument", + "title": "23  限界効果の比較:py4stats.compare_mfx()", + "section": "23.2 引数 Argument", + "text": "23.2 引数 Argument\n\nlist_models: 推定結果を表示する分析結果のリスト(必須)。sm.glm()で作成された一般化線形モデルの結果を list_models = [fit1, fit2] のようにリストとして指定してください。\nmodel_name:list of str 表頭に表示するモデルの名前。['モデル1', 'モデル2'] のように文字列のリストを指定してください。初期設定では、自動的に model 1, model 2, model 3 … と連番が割り当てられます。\nsubset:list of str 表示する回帰係数のリスト。指定しない場合(初期設定)、モデルに含まれる全ての回帰係数が表示されます。内部ではpandas.DataFrame.locメソッドを用いて処理を行っているため、['変数1', '変数2', ...] のような文字列のリスト、[True, False, True, ...] のようなブール値のリストに対応しています。文字列のリストが指定された場合、リストの並び順に合わせて回帰係数が表示されます。\nstats:str 表中の丸括弧 ( ) 内に表示する統計値の設定。次の値が指定できます。\n\n'std_err' 標準誤差(初期設定)\n'p_value' p-値\n'statistics' t統計量\n\nadd_stars:bool 回帰係数の統計的有意性を表すアスタリスク * を表示するかどうかを表すブール値。add_stars = True(初期-設定)なら表示、add_stars = Falseなら非表示となります。table_style に 'two_line' を指定した場合はアスタリスクは回帰係数の直後に表示され、'one_line' を指定した場合は stats で指定した統計値の後に表示されます。アスタリスクはp-値の値に応じて次のように表示されます。\nstars:dict(p_stars() のみ)  有意性を示す記号を key に、表示を切り替える閾値を値(value)にもつ辞書オブジェクト。初期設定の stars = None の場合、下記の方式で表示されます。\n\np ≤ 0.1 *\np ≤ 0.05 **\np ≤ 0.01 ***\np > 0.1 表示なし 詳細はbuilding_block.style_pvalue() を参照してください。\n\nstats_glance:list of str\n表の下部に追加する当てはまりの尺度の種類を表す文字列のリスト。リストの値には次の値を指定できます。なお、None もしくは空のリスト [ ] が指定された場合には非表示となります。\n\n'rsquared':決定係数\n'rsquared_adj':自由度調整済み決定係数\n'nobs':サインプルサイズ\n'df':モデルの自由度(説明変数の数)\n'sigma':回帰式の標準誤差\n'F_values':全ての回帰係数がゼロであることを帰無仮説とするF検定の統計量\n'p_values':F検定のP-値\n'AIC':赤池情報量基準\n'BIC':ベイズ情報量基準\n\ndigits: int 回帰係数と統計値について表示する小数点以下の桁数。初期設定は4です。\ntable_style: str 表の書式を表す文字列。次の値から選択できます(部分一致可)。\n\n'two_line'回帰係数と統計値を2行に分ける(初期設定)\n'one_line'回帰係数と統計値を1行で表示する\n\nline_break: str table_style = 'two_line' とした場合に使用される改行記号。table_style = 'one_line' とした場合、この引数は無視されます。\nat: str 限界効果の集計方法。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 at として渡されます。method = 'coef' を指定した場合、この引数は無視されます。\n\n'overall':各観測値の限界効果の平均値を表示(初期設定)\n'mean':各説明変数の平均値における限界効果を表示\n'median':各説明変数の中央値における限界効果を表示\n'zero':各説明変数の値がゼロであるときの限界効果を表示\n\nmethod: str 推定する限界効果の種類。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 method として渡されます。ただし、method = 'coef' を指定した場合には限界効果を推定せずに回帰係数をそのまま表示します。\n\n'coef':回帰係数の推定値を表示\n'dydx':限界効果の値を変換なしでそのまま表。(初期設定)\n'eyex':弾力性 d(lny)/d(lnx) の推定値を表示\n'dyex':準弾力性 dy /d(lnx) の推定値を表示\n'eydx':準弾力性 d(lny)/dx の推定値を表示\n\ndummy: bool ダミー変数の限界効果の推定方法を制御するブール値。もし False (初期設定)であれば、ダミー変数を連続な数値変数として扱います。もし、True であればダミー変数が0から1へと変化したときの予測値の変化を推定します。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 dummy として渡されます。", + "crumbs": [ + "regression_tools", + "23  限界効果の比較:`py4stats.compare_mfx()`" + ] + }, + { + "objectID": "man/compare_mfx.html#使用例", + "href": "man/compare_mfx.html#使用例", + "title": "23  限界効果の比較:py4stats.compare_mfx()", + "section": "23.3 使用例", + "text": "23.3 使用例\nimport py4stats as py4st\nimport statsmodels.formula.api as smf\n\nimport pandas as pd\nimport numpy as np\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込み\n py4st.compare_mfx() は py4st.compare_ols() の一般化線型モデルバージョンで、初期設定では statsmodels ライブラリの.get_margeff() メソッドから得られた限界効果の推定値を表示します。\npenguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)\n\n# ロジスティック回帰の実行\nfit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()\nfit_logit2 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm + species', data = penguins).fit()\n\npy4st.compare_mfx([fit_logit1, fit_logit2])\n\n\n\nterm\nmodel 1\nmodel 2\n\n\n\n\nbody_mass_g\n-0.0004 ***\n-0.0003 ***\n\n\n\n(0.0000)\n(0.0000)\n\n\nbill_length_mm\n-0.0053\n-0.0357 ***\n\n\n\n(0.0036)\n(0.0070)\n\n\nbill_depth_mm\n-0.1490 ***\n-0.1098 ***\n\n\n\n(0.0051)\n(0.0175)\n\n\nspecies[T.Chinstrap]\n\n0.4172 ***\n\n\n\n\n(0.0848)\n\n\nspecies[T.Gentoo]\n\n0.3527 ***\n\n\n\n\n(0.1308)\n\n\nprsquared\n0.5647\n0.6187\n\n\nnobs\n342\n342\n\n\ndf\n3\n5\n\n\n\nfrom great_tables import GT, md, html\ncompare_tab = py4st.compare_mfx(\n [fit_logit1, fit_logit2],\n model_name = ['ベースモデル', 'species 追加'], # モデル名を変更\n line_break = '<br>' # 改行文字の変更\n)\n\nGT(compare_tab.reset_index())\\\n .tab_header(title = 'ロジットモデルの限界効果')\\\n .tab_source_note(\n source_note= \"Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’\"\n )\\\n .tab_source_note(source_note = '丸括弧 ( ) の値は標準誤差')", + "crumbs": [ + "regression_tools", + "23  限界効果の比較:`py4stats.compare_mfx()`" + ] + }, + { + "objectID": "man/compare_mfx.html#補足", + "href": "man/compare_mfx.html#補足", + "title": "23  限界効果の比較:py4stats.compare_mfx()", + "section": "23.4 補足", + "text": "23.4 補足\n  table_style = 'two_line' としたとき、初期設定ではの回帰係数とp-値の間に改行記号 '\\n'が挿入されます。そのため、print() 関数や display() 関数を使った出力では、改行記号 '\\n' がそのまま表示されます。この場合でも、pd.DataFrame.to_excel() や pd.DataFrame.to_markdown() を使って Excel ファイルや markdown の表に変換していただくと、改行として反映されます。\n\nReturn to Function reference.", + "crumbs": [ + "regression_tools", + "23  限界効果の比較:`py4stats.compare_mfx()`" + ] + }, + { + "objectID": "man/coefplot.html", + "href": "man/coefplot.html", + "title": "24  回帰分析による推定値の視覚化:py4stats.coefplot(), py4stats.mfxplot()", + "section": "", + "text": "24.1 概要\nグラフ上の縦軸が説明変数、横軸回帰係数の値です。点が回帰係数の推定値を、エラーバー(横棒)が信頼区間を表します。", + "crumbs": [ + "regression_tools", + "24  回帰分析による推定値の視覚化:`py4stats.coefplot()`, `py4stats.mfxplot()`" + ] + }, + { + "objectID": "man/coefplot.html#概要", + "href": "man/coefplot.html#概要", + "title": "24  回帰分析による推定値の視覚化:py4stats.coefplot(), py4stats.mfxplot()", + "section": "", + "text": "coefplot(\n mod, \n subset = None, \n conf_level = [0.95, 0.99], \n palette = ['#1b69af', '#629CE7'], \n show_Intercept = False,\n show_vline = True,\n ax = None,\n **kwargs\n)\n\nmfxplot(\n mod, \n subset = None, \n conf_level = [0.95, 0.99], \n at = 'overall',\n method = 'dydx',\n dummy = False,\n palette = ['#1b69af', '#629CE7'], \n show_Intercept = False,\n show_vline = True,\n ax = None,\n **kwargs\n)", + "crumbs": [ + "regression_tools", + "24  回帰分析による推定値の視覚化:`py4stats.coefplot()`, `py4stats.mfxplot()`" + ] + }, + { + "objectID": "man/coefplot.html#引数-argument", + "href": "man/coefplot.html#引数-argument", + "title": "24  回帰分析による推定値の視覚化:py4stats.coefplot(), py4stats.mfxplot()", + "section": "24.2 引数 Argument", + "text": "24.2 引数 Argument\n\nmod:statsmodels で作成した回帰分析の結果(必須)。\nsubset:グラフに回帰係数を表示する説明変数のリスト。指定しなければモデルに含まれる全ての説明変数を使用します。また subset に指定された順番に合わせてグラフ内での回帰係数の並び順が変更されます。\nconf.level:信頼区間の計算に用いる信頼係数。1つ目の要素が太い方のエラーバーの幅に、2つ目の要素が細い方のエラーバーの幅に対応します。初期設定は [0.95, 0.99] です。\npalette:グラフの描画に使用する色コード。1つ目の要素が太い方のエラーバーの色に、2つ目の要素が細い方のエラーバーの色に対応します。\nshow_Intercept:切片の係数を表示するかどうか。True だと切片の係数を表示し、False(初期設定)だと表示しません。\nshow_vline:回帰係数 = 0 の垂直線を表示するかどうか。True (初期設定)を指定すると垂直線を表示し、False を指定すると表示されません。\nax:matplotlib の ax オブジェクト。複数のグラフを並べる場合などに使用します。\nat:限界効果の集計方法(mfxplot() のみ)。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 at として渡されます。method = 'coef' を指定した場合、この引数は無視されます。\n\n'overall':各観測値の限界効果の平均値を表示(初期設定)\n'mean':各説明変数の平均値における限界効果を表示\n'median':各説明変数の中央値における限界効果を表示\n'zero':各説明変数の値がゼロであるときの限界効果を表示\n\nmethod:推定する限界効果の種類(mfxplot() のみ)。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 method として渡されます。ただし、method = 'coef' を指定した場合には限界効果を推定せずに回帰係数をそのまま表示します。\n\n'coef':回帰係数の推定値を表示\n'dydx':限界効果の値を変換なしでそのまま表。(初期設定)\n'eyex':弾力性 d(lny)/d(lnx) の推定値を表示\n'dyex':準弾力性 dy /d(lnx) の推定値を表示\n'eydx':準弾力性 d(lny)/dx の推定値を表示\n\ndummy:ダミー変数の限界効果の推定方法(mfxplot() のみ)。もし False (初期設定)であれば、ダミー変数を連続な数値変数として扱います。もし、True であればダミー変数が0から1へと変化したときの予測値の変化を推定します。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 dummy として渡されます。", + "crumbs": [ + "regression_tools", + "24  回帰分析による推定値の視覚化:`py4stats.coefplot()`, `py4stats.mfxplot()`" + ] + }, + { + "objectID": "man/coefplot.html#使用例", + "href": "man/coefplot.html#使用例", + "title": "24  回帰分析による推定値の視覚化:py4stats.coefplot(), py4stats.mfxplot()", + "section": "24.3 使用例", + "text": "24.3 使用例\nimport py4stats as py4st\nimport statsmodels.formula.api as smf\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\n\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込み\n\n\n# 回帰分析の実行\nfit2 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species', data = penguins).fit()\nfit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()\n\npy4st.coefplot(fit3)\n\n\n\ncoefplot1\n\n\nplt.rcParams[\"figure.autolayout\"] = True\n\nfig, ax = plt.subplots(1, 2, figsize = (2.2 * 5, 5), dpi = 100)\n\npy4st.coefplot(fit2, ax = ax[0])\nax[0].set_xlim(-900, 1800)\n\npy4st.coefplot(fit3, ax = ax[1], palette = ['#FF6F91', '#F2E5EB'])\nax[1].set_xlim(-900, 1800);\n\n\n\ncoefplot2\n\n\npenguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)\n\n# ロジスティック回帰の実行\nfit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()\nfit_logit2 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm + species', data = penguins).fit()\nplt.rcParams[\"figure.autolayout\"] = True\n\nfig, ax = plt.subplots(1, 2, figsize = (2.2 * 5, 5), dpi = 100)\n\npy4st.mfxplot(fit_logit1, ax = ax[0])\nax[0].set_xlim(-0.2, 0.85)\n\npy4st.mfxplot(fit_logit2, ax = ax[1], palette = ['#FF6F91', '#F2E5EB'])\nax[1].set_xlim(-0.2, 0.85);\n *** Return to Function reference.", + "crumbs": [ + "regression_tools", + "24  回帰分析による推定値の視覚化:`py4stats.coefplot()`, `py4stats.mfxplot()`" + ] + }, + { + "objectID": "man/tidy.html", + "href": "man/tidy.html", + "title": "25  py4stats.tidy(), py4stats.tidy_mfx()", + "section": "", + "text": "25.1 概要\nR言語の broom::tidy() をオマージュした関数で、sm.ols() や smf.logit() などの推定結果を pands.DataFrame に変換します。py4stats.tidy() は回帰係数と関連する検定結果を表示し、 py4stats.tidy_mfx() は限界効果と関連する検定結果を表示します。", + "crumbs": [ + "regression_tools", + "25  `py4stats.tidy()`, `py4stats.tidy_mfx()`" + ] + }, + { + "objectID": "man/tidy.html#概要", + "href": "man/tidy.html#概要", + "title": "25  py4stats.tidy(), py4stats.tidy_mfx()", + "section": "", + "text": "tidy(\n x, \n name_of_term = None,\n conf_level = 0.95,\n **kwargs\n )\n\ntidy_mfx(\n x, \n at = 'overall', \n method = 'dydx', \n dummy = False, \n conf_level = 0.95, \n **kwargs\n )", + "crumbs": [ + "regression_tools", + "25  `py4stats.tidy()`, `py4stats.tidy_mfx()`" + ] + }, + { + "objectID": "man/tidy.html#引数-argument", + "href": "man/tidy.html#引数-argument", + "title": "25  py4stats.tidy(), py4stats.tidy_mfx()", + "section": "25.2 引数 Argument", + "text": "25.2 引数 Argument\n\nx(必須)  sm.ols()もしくは smf.logit() などで作成された分析結果のオブジェクト。\nname_of_term:list of str  term 列(index) として表示する説明変数の名前のリスト。指定しない場合(初期設定)、モデルの推定に使用された説明変数の名前がそのまま表示されます。\nconf_level:float  信頼区間の計算に用いる信頼係数。\nat:限界効果の集計方法(tidy_mfx() のみ)。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 at として渡されます。method = 'coef' を指定した場合、この引数は無視されます。\n\n'overall':各観測値の限界効果の平均値を表示(初期設定)\n'mean':各説明変数の平均値における限界効果を表示\n'median':各説明変数の中央値における限界効果を表示\n'zero':各説明変数の値がゼロであるときの限界効果を表示\n\nmethod:推定する限界効果の種類(tidy_mfx() のみ)。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 method として渡されます。ただし、method = 'coef' を指定した場合には限界効果を推定せずに回帰係数をそのまま表示します。\n\n'coef':回帰係数の推定値を表示\n'dydx':限界効果の値を変換なしでそのまま表。(初期設定)\n'eyex':弾力性 d(lny)/d(lnx) の推定値を表示\n'dyex':準弾力性 dy /d(lnx) の推定値を表示\n'eydx':準弾力性 d(lny)/dx の推定値を表示\n\ndummy:ダミー変数の限界効果の推定方法(tidy_mfx() のみ)。もし False (初期設定)であれば、ダミー変数を連続な数値変数として扱います。もし、True であればダミー変数が0から1へと変化したときの予測値の変化を推定します。内部で使用しているstatsmodels.discrete.discrete_model.DiscreteResults.get_margeff() メソッドに引数 dummy として渡されます。", + "crumbs": [ + "regression_tools", + "25  `py4stats.tidy()`, `py4stats.tidy_mfx()`" + ] + }, + { + "objectID": "man/tidy.html#返り値-value", + "href": "man/tidy.html#返り値-value", + "title": "25  py4stats.tidy(), py4stats.tidy_mfx()", + "section": "25.3 返り値 Value", + "text": "25.3 返り値 Value\n 次の列を含む pands.DataFrame が出力されます。\n\nterm(index)  説明変数の名称\nestimate  回帰係数(tidy()の場合)、もしくは限界効果(tidy_mfx()の場合)の推定値\nstd_err 推定値 estimate の標準誤差\nstatistics estimate = 0 を帰無仮説とする仮説検定の標本検定統計量。x に代入されたモデルが sm.ols() によって作成されたものであれば \\(t\\) 統計量が表示され、sm.glm() によって作成されたものであれば \\(z\\) 統計量が表示されます。\np_value estimate = 0 を帰無仮説とする両側検定の標本p-値\nconf_lower  信頼区間の下側信頼限界\nconf_higher  信頼区間の上側信頼限界", + "crumbs": [ + "regression_tools", + "25  `py4stats.tidy()`, `py4stats.tidy_mfx()`" + ] + }, + { + "objectID": "man/tidy.html#使用例-examples", + "href": "man/tidy.html#使用例-examples", + "title": "25  py4stats.tidy(), py4stats.tidy_mfx()", + "section": "25.4 使用例 Examples", + "text": "25.4 使用例 Examples\nimport pandas as pd\nimport numpy as np\nfrom palmerpenguins import load_penguins\nimport statsmodels.formula.api as smf\n\nfrom py4stats import regression_tools as reg # 回帰分析の要約\npenguins = load_penguins() # サンプルデータの読み込み\n# 回帰分析の実行\nfit1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()\n\nprint(py4st.tidy(fit1).round(4))\n#> estimate std_err statistics p_value conf_lower conf_higher\n#> term \n#> Intercept 153.7397 268.9012 0.5717 0.5679 -375.1910 682.6704\n#> species[T.Chinstrap] -885.8121 88.2502 -10.0375 0.0000 -1059.4008 -712.2234\n#> species[T.Gentoo] 578.6292 75.3623 7.6780 0.0000 430.3909 726.8674\n#> bill_length_mm 91.4358 6.8871 13.2764 0.0000 77.8888 104.9828\npenguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)\n\n# ロジスティック回帰の実行\nfit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()\n\nprint(py4st.tidy_mfx(fit_logit1).round(4))\n#> estimate std_err statistics p_value conf_lower conf_higher\n#> body_mass_g -0.0004 0.0000 -17.6561 0.0000 -0.0004 -0.0003\n#> bill_length_mm -0.0053 0.0036 -1.4628 0.1435 -0.0123 0.0018\n#> bill_depth_mm -0.1490 0.0051 -29.1681 0.0000 -0.1591 -0.1390", + "crumbs": [ + "regression_tools", + "25  `py4stats.tidy()`, `py4stats.tidy_mfx()`" + ] + }, + { + "objectID": "man/tidy.html#注意点", + "href": "man/tidy.html#注意点", + "title": "25  py4stats.tidy(), py4stats.tidy_mfx()", + "section": "25.5 注意点", + "text": "25.5 注意点\n 参考にしたR言語の broom::tidy() は様々な種類のモデルに対応したジェネリック関数として定義されていますが、py4stats.tidy() と py4stats.tidy_mfx() では対応しているモデルは限定的であることにご注意ださい。py4st.tidy() のメソッドが定義されているオブジェクトのクラスを確認するには次のコードを実行して下さい。\nlist(py4st.tidy.registry.keys())\npy4stats.tidy() は functools.singledispatch を用いたジェネリック関数として実装しています。 Py4Etrics モジュールの py4etrics.heckit.Heckit() で作成された HeckitResults クラスのオブジェクト用のメソッドについては heckit_helper.tidy_heckit() を参照してください。\n\nReturn to Function reference.", + "crumbs": [ + "regression_tools", + "25  `py4stats.tidy()`, `py4stats.tidy_mfx()`" + ] + }, + { + "objectID": "man/tidy_test.html", + "href": "man/tidy_test.html", + "title": "26  py4stats.tidy_test()", + "section": "", + "text": "26.1 概要\nR言語の broom::tidy() をオマージュした py4stats.tidy() 関数のうち、statsmodels ライブラリのメソッド RegressionResults.t_test() もしくは RegressionResults.f_test() で作成された statsmodels.stats.contrast.ContrastResults クラスのオブジェクト専用のメソッドです。py4stats.tidy()はジェネリック関数として実装されているため、py4st.tidy(x) としてご利用いただけます。", + "crumbs": [ + "regression_tools", + "26  `py4stats.tidy_test()`" + ] + }, + { + "objectID": "man/tidy_test.html#概要", + "href": "man/tidy_test.html#概要", + "title": "26  py4stats.tidy_test()", + "section": "", + "text": "tidy_test(x, conf_level = 0.95, **kwargs)", + "crumbs": [ + "regression_tools", + "26  `py4stats.tidy_test()`" + ] + }, + { + "objectID": "man/tidy_test.html#引数-argument", + "href": "man/tidy_test.html#引数-argument", + "title": "26  py4stats.tidy_test()", + "section": "26.2 引数 Argument", + "text": "26.2 引数 Argument\n\nx(必須)  statsmodels ライブラリのメソッド RegressionResults.t_test() もしくはRegressionResults.f_test() で作成された statsmodels.stats.contrast.ContrastResults クラスのオブジェクト。\nconf_level:float  信頼区間の計算に用いる信頼係数。ただし、x に代入されたオブジェクトが f_test() の結果である場合は、この引数は無視されます。", + "crumbs": [ + "regression_tools", + "26  `py4stats.tidy_test()`" + ] + }, + { + "objectID": "man/tidy_test.html#返り値-value", + "href": "man/tidy_test.html#返り値-value", + "title": "26  py4stats.tidy_test()", + "section": "26.3 返り値 Value", + "text": "26.3 返り値 Value\n 引数 x に代入されたオブジェクトが t_test() の結果である場合、次の列を含む pands.DataFrame が出力されます。\n\nestimate  帰無仮説のもとでの回帰係数(の線型結合)の推定値\nstd_err 推定値 estimate の標準誤差\nstatistics  仮説検定の標本検定統計量。\np_value 両側検定の標本p-値\nconf_lower  信頼区間の下側信頼限界\nconf_higher  信頼区間の上側信頼限界\n\n 一方で引数 x に代入されたオブジェクトが f_test() の結果である場合、次の列を含む pands.DataFrame が出力されます。\n\nstatistics  仮説検定の標本検定統計量。\np_value  F検定の標本p-値\ndf_denom  モデルの残差自由度\ndf_denom  帰無仮説のもとでの制約数", + "crumbs": [ + "regression_tools", + "26  `py4stats.tidy_test()`" + ] + }, + { + "objectID": "man/tidy_test.html#使用例-examples", + "href": "man/tidy_test.html#使用例-examples", + "title": "26  py4stats.tidy_test()", + "section": "26.4 使用例 Examples", + "text": "26.4 使用例 Examples\nimport py4stats as py4st\n\nimport pandas as pd\nimport numpy as np\nfrom palmerpenguins import load_penguins\nimport statsmodels.formula.api as smf\n\npenguins = load_penguins() # サンプルデータの読み込み\n\nfit3 = smf.ols('body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex', data = penguins).fit()\nhypotheses = 'bill_length_mm = 20'\nprint(py4st.tidy(fit3.t_test(hypotheses)).round(4))\n#> estimate std_err statistics p_value conf_lower conf_higher\n#> term \n#> c0 26.5366 7.2436 0.9024 0.3675 12.2867 40.7866\nhypotheses = 'species[T.Chinstrap] = 0, species[T.Gentoo] = 0'\nprint(py4st.tidy(fit3.f_test(hypotheses)).round(4))\n#> statistics p_value df_denom df_num\n#> term \n#> contrast 210.9432 0.0 327 2\n\nReturn to Function reference.", + "crumbs": [ + "regression_tools", + "26  `py4stats.tidy_test()`" + ] + }, + { + "objectID": "man/glance.html", + "href": "man/glance.html", + "title": "27  py4stats.glance()", + "section": "", + "text": "27.1 概要\nR言語の bloom::glance() をオマージュした関数で、sm.ols() や smf.logit() などで推定されたモデルを pands.DataFrame に変換します。", + "crumbs": [ + "regression_tools", + "27  `py4stats.glance()`" + ] + }, + { + "objectID": "man/glance.html#概要", + "href": "man/glance.html#概要", + "title": "27  py4stats.glance()", + "section": "", + "text": "glance(x)", + "crumbs": [ + "regression_tools", + "27  `py4stats.glance()`" + ] + }, + { + "objectID": "man/glance.html#引数-argument", + "href": "man/glance.html#引数-argument", + "title": "27  py4stats.glance()", + "section": "27.2 引数 Argument", + "text": "27.2 引数 Argument\n\nx(必須)  sm.ols() もしくは smf.logit() などで作成された分析結果のオブジェクト。", + "crumbs": [ + "regression_tools", + "27  `py4stats.glance()`" + ] + }, + { + "objectID": "man/glance.html#返り値-value", + "href": "man/glance.html#返り値-value", + "title": "27  py4stats.glance()", + "section": "27.3 返り値 Value", + "text": "27.3 返り値 Value\n モデルの当てはまり(goodness of fit)の尺度を各列に持つ pands.DataFrame が出力されます。表示される指標はモデルの種類によって異なります。", + "crumbs": [ + "regression_tools", + "27  `py4stats.glance()`" + ] + }, + { + "objectID": "man/glance.html#使用例-examples", + "href": "man/glance.html#使用例-examples", + "title": "27  py4stats.glance()", + "section": "27.4 使用例 Examples", + "text": "27.4 使用例 Examples\nimport pandas as pd\nimport numpy as np\nfrom palmerpenguins import load_penguins\nimport statsmodels.formula.api as smf\n\nimport py4stats as py4st\npenguins = load_penguins() # サンプルデータの読み込み\n# 線形回帰の場合\nfit_lm1 = smf.ols('body_mass_g ~ bill_length_mm + species', data = penguins).fit()\n\npd.set_option('display.expand_frame_repr', False)\nprint(py4st.glance(fit_lm1).round(4))\n#> rsquared rsquared_adj nobs df sigma F_values p_values AIC BIC\n#> 0 0.7829 0.781 342 3 375.3251 406.2735 0.0 5029.1406 5044.4798\n# ロジスティック回帰の場合\npenguins['female'] = np.where(penguins['sex'] == 'female', 1, 0)\nfit_logit1 = smf.logit('female ~ body_mass_g + bill_length_mm + bill_depth_mm', data = penguins).fit()\n\nprint(py4st.glance(fit_logit1).round(4))\n#> prsquared LL-Null df_null logLik AIC BIC deviance df_resid df_model nobs\n#> 0 0.5647 -236.8458 341 -103.1079 214.2157 229.555 206.2157 338 3 342", + "crumbs": [ + "regression_tools", + "27  `py4stats.glance()`" + ] + }, + { + "objectID": "man/glance.html#注意点", + "href": "man/glance.html#注意点", + "title": "27  py4stats.glance()", + "section": "27.5 注意点", + "text": "27.5 注意点\n 参考にしたR言語の bloom::glance() は様々な種類のモデルに対応したジェネリック関数として定義されていますが、py4st.glance() は現段階では限られたモデルにしか対応していません。py4st.glance() のメソッドが定義されているオブジェクトのクラスを確認するには次のコードを実行して下さい。\nlist(py4st.glance.registry.keys())\n\nReturn to Function reference.", + "crumbs": [ + "regression_tools", + "27  `py4stats.glance()`" + ] + }, + { + "objectID": "man/Blinder_Oaxaca.html", + "href": "man/Blinder_Oaxaca.html", + "title": "28  py4stats.Blinder_Oaxaca(), py4stats.plot_Blinder_Oaxaca()", + "section": "", + "text": "28.1 概要\n2つのサブサンプルを用いた回帰分析の推定結果に対して、Blinder-Oaxaca分解を行います。\nいま、ある変数 \\(s\\) を用いて \\(s = m\\) と \\(s = f\\) の2つのサブグループからなるデータセットがあるとし、次のような回帰式を仮定します。\n\\[\n\\begin{aligned}\nY_{i}^s = \\boldsymbol{X}_i^s\\boldsymbol{\\beta}^s + \\epsilon_i^s, &&\ns = m, f\n\\end{aligned}\n\\tag{1}\n\\]\nここで、\\(\\boldsymbol{X}_i^s\\) サブグループ \\(s\\) に属する個人 \\(i\\) についての説明変数からなる行列で、\\(\\boldsymbol{\\beta}^s\\) はサブグループ \\(s\\) のについての回帰係数、\\(\\epsilon_i^s\\) は誤差項です。  さらに、サブグループ \\(s\\) の被説明変数の平均値を \\(\\bar{Y}^s\\) とし、説明変数の平均値を \\(\\bar{\\boldsymbol{X}}^s\\) とするとき、Blinder-Oaxaca分解は2つのグループにおける被説明変数の平均値の差 \\(\\bar{Y}^m - \\bar{Y}^f\\) を次のように分解します。\n\\[\n\\begin{aligned}\n\\bar{Y}^m - \\bar{Y}^f = (\\bar{\\boldsymbol{X}}^m - \\bar{\\boldsymbol{X}}^f)\\boldsymbol{\\beta}^m + \\bar{\\boldsymbol{X}}^f(\\boldsymbol{\\beta}^m - \\boldsymbol{\\beta}^f)\n\\end{aligned}\n\\tag{2}\n\\]\nこのとき、式(2)右辺の各項は、それぞれ次のような意味を持ちます。\n式(1)および式(2)については朝井(2014, p.9)を参照しました。", + "crumbs": [ + "regression_tools", + "28  `py4stats.Blinder_Oaxaca()`, `py4stats.plot_Blinder_Oaxaca()`" + ] + }, + { + "objectID": "man/Blinder_Oaxaca.html#概要", + "href": "man/Blinder_Oaxaca.html#概要", + "title": "28  py4stats.Blinder_Oaxaca(), py4stats.plot_Blinder_Oaxaca()", + "section": "", + "text": "Blinder_Oaxaca(model1, model2)\n\nplot_Blinder_Oaxaca(\n model1, model2,\n diff_type = ['observed_diff', 'unobserved_diff'],\n ax = None, \n)\n\n\n\n\n\n\n\\((\\bar{\\boldsymbol{X}}^m - \\bar{\\boldsymbol{X}}^f)\\boldsymbol{\\beta}^m\\):2つのグループの観測可能な属性の差に起因する被説明変数の差 observed_diff\n\\(\\bar{\\boldsymbol{X}}^f(\\boldsymbol{\\beta}^m - \\boldsymbol{\\beta}^f)\\):2つのグループの観測できない要因の違いに起因する被説明変数の差 unobserved_diff", + "crumbs": [ + "regression_tools", + "28  `py4stats.Blinder_Oaxaca()`, `py4stats.plot_Blinder_Oaxaca()`" + ] + }, + { + "objectID": "man/Blinder_Oaxaca.html#引数-argument", + "href": "man/Blinder_Oaxaca.html#引数-argument", + "title": "28  py4stats.Blinder_Oaxaca(), py4stats.plot_Blinder_Oaxaca()", + "section": "28.2 引数 Argument", + "text": "28.2 引数 Argument\n\nmodel1:statsmodels で作成した回帰分析の結果(必須)。\nmodel2:statsmodels で作成した回帰分析の結果(必須)。\ndiff_type (plot_Blinder_Oaxaca()のみ)list of str or str  グラフの描画に使用する要約統計量の種類。初期設定では observed_diff と unobserved_diff の両方を表示します。\nax:matplotlib の ax オブジェクト。複数のグラフを並べる場合などに使用します。   ## 使用例 Examples\n\nimport pandas as pd\nimport statsmodels.formula.api as smf\nimport py4stats as py4st\n\nwage1 = wooldridge.data('wage1')\n\nfit_female = smf.ols(\n 'lwage ~ educ + exper + expersq + tenure + tenursq + married', \n data = wage1.query('female == 1')\n ).fit()\n\nfit_male = smf.ols(\n 'lwage ~ educ + exper + expersq + tenure + tenursq + married', \n data = wage1.query('female == 0')\n ).fit()\npy4st.compare_ols(\n list_models = [fit_female, fit_male],\n model_name = ['female', 'male']\n )\n\n\n\nterm\nfemale\nmale\n\n\n\n\nIntercept\n0.3159 **(0.1401)\n0.2255 *(0.1302)\n\n\neduc\n0.0737 ***(0.0104)\n0.0830 ***(0.0089)\n\n\nexper\n0.0200 ***(0.0072)\n0.0329 ***(0.0076)\n\n\nexpersq\n-0.0004 ***(0.0002)\n-0.0006 ***(0.0002)\n\n\ntenure\n0.0391 ***(0.0117)\n0.0301 ***(0.0089)\n\n\ntenursq\n-0.0014 ***(0.0005)\n-0.0005 *(0.0003)\n\n\nmarried\n-0.0548 (0.0539)\n0.1718 ***(0.0595)\n\n\nrsquared_adj\n0.2446\n0.4509\n\n\nnobs\n252\n274\n\n\ndf\n6\n6\n\n\n\nwage_decomp = py4st.Blinder_Oaxaca(\n model1 = fit_female,\n model2 = fit_male\n)\nwage_decomp\n\n\n\nterms\nobserved_diff\nunobserved_diff\n\n\n\n\nIntercept\n0\n-0.0903337\n\n\neduc\n0.0390661\n0.114713\n\n\nexper\n0.0371577\n0.211177\n\n\nexpersq\n-0.0216026\n-0.0962631\n\n\ntenure\n0.0859831\n-0.0327949\n\n\ntenursq\n-0.0342727\n0.0378497\n\n\nmarried\n0.0278806\n0.118657\n\n\n\npy4st.plot_Blinder_Oaxaca(\n model1 = fit_female,\n model2 = fit_male\n)\n\n\n\nplot_Blinder_Oaxaca1.png\n\n\ndiff_type を指定することで、一方の統計量だけを表示することもできます。\npy4st.plot_Blinder_Oaxaca(\n model1 = fit_female,\n model2 = fit_male,\n diff_type = 'unobserved_diff'\n)\n\n\n\nplot_Blinder_Oaxaca2.png\n\n\nグラフのサイズや解像度を指定するには、次のように行います。\nfig, ax = plt.subplots(1, 2, figsize = (1.1 * 2 * 4, 4), sharey = True, dpi = 200)\n\npy4st.plot_Blinder_Oaxaca(\n model1 = fit_female,\n model2 = fit_male,\n ax = ax\n)\nfig.tight_layout()", + "crumbs": [ + "regression_tools", + "28  `py4stats.Blinder_Oaxaca()`, `py4stats.plot_Blinder_Oaxaca()`" + ] + }, + { + "objectID": "man/Blinder_Oaxaca.html#参考文献", + "href": "man/Blinder_Oaxaca.html#参考文献", + "title": "28  py4stats.Blinder_Oaxaca(), py4stats.plot_Blinder_Oaxaca()", + "section": "28.3 参考文献", + "text": "28.3 参考文献\n\n朝井 友紀子 (2014) 「労働市場における男女差の30年― 就業のサンプルセレクションと男女間賃金格差」『日本労働研究雑誌』, No.648, pp.6–16\n\n\nReturn to Function reference.", + "crumbs": [ + "regression_tools", + "28  `py4stats.Blinder_Oaxaca()`, `py4stats.plot_Blinder_Oaxaca()`" + ] + }, + { + "objectID": "man/tidy_heckit.html", + "href": "man/tidy_heckit.html", + "title": "29  heckit_helper.tidy_heckit()", + "section": "", + "text": "29.1 概要\nR言語の broom::tidy() をオマージュした regression_tools.tidy() 関数の、py4etrics.heckit.HeckitResults クラス専用のメソッドです。regression_tools.tidy()はジェネリック関数として実装されているため、py4st.tidy(x) としてご利用いただけます。", + "crumbs": [ + "heckit_helper", + "29  `heckit_helper.tidy_heckit()`" + ] + }, + { + "objectID": "man/tidy_heckit.html#概要", + "href": "man/tidy_heckit.html#概要", + "title": "29  heckit_helper.tidy_heckit()", + "section": "", + "text": "tidy_heckit(\n model, \n name_selection = None, \n name_outcome = None, \n conf_level = 0.95\n )", + "crumbs": [ + "heckit_helper", + "29  `heckit_helper.tidy_heckit()`" + ] + }, + { + "objectID": "man/tidy_heckit.html#引数-argument", + "href": "man/tidy_heckit.html#引数-argument", + "title": "29  heckit_helper.tidy_heckit()", + "section": "29.2 引数 Argument", + "text": "29.2 引数 Argument\n\nx(必須)   Py4Etrics モジュールの py4etrics.heckit.Heckit() で作成された HeckitResults クラスのオブジェクト\nname_selection:list of str  term 列(index) のうち、第1段階の説明変数の名称として表示する文字列のリスト。指定しない場合(初期設定)、モデルの推定に使用された説明変数の名前がそのまま表示されます。\nname_outcome:list of str  term 列(index) のうち、第2段階の説明変数の名称として表示する文字列のリスト。指定しない場合(初期設定)、モデルの推定に使用された説明変数の名前がそのまま表示されます。\nconf_level:float  信頼区間の計算に用いる信頼係数。", + "crumbs": [ + "heckit_helper", + "29  `heckit_helper.tidy_heckit()`" + ] + }, + { + "objectID": "man/tidy_heckit.html#返り値-value", + "href": "man/tidy_heckit.html#返り値-value", + "title": "29  heckit_helper.tidy_heckit()", + "section": "29.3 返り値 Value", + "text": "29.3 返り値 Value\n 次の列を含む pands.DataFrame が出力されます。\n\nterm(index)  説明変数の名称\nestimate)  回帰係数の推定値\nstd_err 推定値 estimate の標準誤差\nstatistics estimate = 0 を帰無仮説とする仮説検定の標本検定統計量。x に代入されたモデルが sm.ols() によって作成されたものであれば \\(t\\) 統計量が表示され、sm.glm() によって作成されたものであれば \\(z\\) 統計量が表示されます。\np_value estimate = 0 を帰無仮説とする両側検定の標本p-値\nconf_lower  信頼区間の下側信頼限界\nconf_higher  信頼区間の上側信頼限界", + "crumbs": [ + "heckit_helper", + "29  `heckit_helper.tidy_heckit()`" + ] + }, + { + "objectID": "man/tidy_heckit.html#使用例-examples", + "href": "man/tidy_heckit.html#使用例-examples", + "title": "29  heckit_helper.tidy_heckit()", + "section": "29.4 使用例 Examples", + "text": "29.4 使用例 Examples\n heckit_helper モジュールはヘックマンの2段階推定(Heckit)を実行を Py4Etrics モジュールの py4etrics.heckit.Heckit() に依存しているため、事前のインストールをお願いします。\npip install git+https://github.com/Py4Etrics/py4etrics.git\nここでは wooldridge モジュールの mroz データを使い、春山(2023, Chap.24)のモデルを再現します。\nimport pandas as pd\nimport wooldridge\nimport py4stats as py4st\nfrom py4stats import heckit_helper\n\nmroz = wooldridge.data('mroz') # サンプルデータの読み込み\n\nmod_heckit, exog_outcome, exog_select = heckit_helper.Heckit_from_formula(\n selection = 'lwage ~ educ + exper + expersq + nwifeinc + age + kidslt6 + kidsge6',\n outcome = 'lwage ~ educ + exper + expersq',\n data = mroz\n)\n\nres_heckit = mod_heckit.fit(cov_type_2 = 'HC1')\n内部で functools.singledispatch を使用して定義しているため、heckit_helper モジュールの読み込み後は、py4st.tidy() 関数を呼び出すことで tidy_heckit() を実行することができます。\n# 初期設定で使用した場合\nprint(py4st.tidy(res_heckit).round(4))\n#> estimate std_err statistics p_value conf_lower conf_higher\n#> term \n#> O: Intercept -0.5781 0.3050 -1.8954 0.0580 -1.1759 0.0197\n#> O: educ 0.1091 0.0155 7.0261 0.0000 0.0786 0.1395\n#> O: exper 0.0439 0.0163 2.6989 0.0070 0.0120 0.0758\n#> O: expersq -0.0009 0.0004 -1.9574 0.0503 -0.0017 0.0000\n#> S: const 0.2701 0.5086 0.5310 0.5954 -0.7267 1.2669\n#> S: x1 0.1309 0.0253 5.1835 0.0000 0.0814 0.1804\n#> S: x2 0.1233 0.0187 6.5903 0.0000 0.0867 0.1600\n#> S: x3 -0.0019 0.0006 -3.1452 0.0017 -0.0031 -0.0007\n#> S: x4 -0.0120 0.0048 -2.4843 0.0130 -0.0215 -0.0025\n#> S: x5 -0.0529 0.0085 -6.2347 0.0000 -0.0695 -0.0362\n#> S: x6 -0.8683 0.1185 -7.3263 0.0000 -1.1006 -0.6360\n#> S: x7 0.0360 0.0435 0.8281 0.4076 -0.0492 0.1212\n 注意:内部で使用している statsmodels.iolib.summary.summary_params_frame() の仕様上、初期設定では第1段階の説明変数の名前が反映されません。説明変数の名前を反映するには name_selection 引数で指定してください。\nprint(py4st.tidy(res_heckit, name_selection = exog_select.columns).round(4))\n#> estimate std_err statistics p_value conf_lower conf_higher\n#> term \n#> O: Intercept -0.5781 0.3050 -1.8954 0.0580 -1.1759 0.0197\n#> O: educ 0.1091 0.0155 7.0261 0.0000 0.0786 0.1395\n#> O: exper 0.0439 0.0163 2.6989 0.0070 0.0120 0.0758\n#> O: expersq -0.0009 0.0004 -1.9574 0.0503 -0.0017 0.0000\n#> S: Intercept 0.2701 0.5086 0.5310 0.5954 -0.7267 1.2669\n#> S: educ 0.1309 0.0253 5.1835 0.0000 0.0814 0.1804\n#> S: exper 0.1233 0.0187 6.5903 0.0000 0.0867 0.1600\n#> S: expersq -0.0019 0.0006 -3.1452 0.0017 -0.0031 -0.0007\n#> S: nwifeinc -0.0120 0.0048 -2.4843 0.0130 -0.0215 -0.0025\n#> S: age -0.0529 0.0085 -6.2347 0.0000 -0.0695 -0.0362\n#> S: kidslt6 -0.8683 0.1185 -7.3263 0.0000 -1.1006 -0.6360\n#> S: kidsge6 0.0360 0.0435 0.8281 0.4076 -0.0492 0.1212\n\nReturn to Function reference.", + "crumbs": [ + "heckit_helper", + "29  `heckit_helper.tidy_heckit()`" + ] + }, + { + "objectID": "man/Heckit_from_formula.html", + "href": "man/Heckit_from_formula.html", + "title": "30  heckit_helper.Heckit_from_formula()", + "section": "", + "text": "30.1 概要", + "crumbs": [ + "heckit_helper", + "30  `heckit_helper.Heckit_from_formula()`" + ] + }, + { + "objectID": "man/Heckit_from_formula.html#概要", + "href": "man/Heckit_from_formula.html#概要", + "title": "30  heckit_helper.Heckit_from_formula()", + "section": "", + "text": "Heckit_from_formula(\n selection, \n outcome, \n data, \n **kwargs\n )", + "crumbs": [ + "heckit_helper", + "30  `heckit_helper.Heckit_from_formula()`" + ] + }, + { + "objectID": "man/Heckit_from_formula.html#引数-argument", + "href": "man/Heckit_from_formula.html#引数-argument", + "title": "30  heckit_helper.Heckit_from_formula()", + "section": "30.2 引数 Argument", + "text": "30.2 引数 Argument\n\nselectionstr(必須)  Type2トービットモデルのうち第1段階の selection equation(選択関数, 就業決定関数)の回帰式\noutcomestr(必須)  Type2トービットモデルのうち第2段階の regression equation(賃金関数)の回帰式\ndata:pandas.DataFrame(必須)\n**kwargs py4etrics.heckit.Heckit() に渡すその他の引数", + "crumbs": [ + "heckit_helper", + "30  `heckit_helper.Heckit_from_formula()`" + ] + }, + { + "objectID": "man/Heckit_from_formula.html#返り値-value", + "href": "man/Heckit_from_formula.html#返り値-value", + "title": "30  heckit_helper.Heckit_from_formula()", + "section": "30.3 返り値 Value", + "text": "30.3 返り値 Value\n 3つの要素を持つ tuple。左から順に次の3つのオブジェクトが出力されます。\n\npy4etrics.heckit.Heckit() から出力されたモデルの推定結果\n第2段階の regression equation(賃金関数)の説明変数からなる pd.DataFrame\n第1段階のselection equation(選択関数, 就業決定関数)の説明変数からなる pd.DataFrame", + "crumbs": [ + "heckit_helper", + "30  `heckit_helper.Heckit_from_formula()`" + ] + }, + { + "objectID": "man/Heckit_from_formula.html#使用例-examples", + "href": "man/Heckit_from_formula.html#使用例-examples", + "title": "30  heckit_helper.Heckit_from_formula()", + "section": "30.4 使用例 Examples", + "text": "30.4 使用例 Examples\n heckit_helper モジュールはヘックマンの2段階推定(Heckit)を実行を Py4Etrics モジュールの py4etrics.heckit.Heckit() に依存しているため、事前のインストールをお願いします。\npip install git+https://github.com/Py4Etrics/py4etrics.git\nここでは春山(2023, Chap.24)のモデルを再現するため、wooldridge モジュールから mroz データを読み込みます。\nimport pandas as pd\nimport wooldridge\nfrom py4stats import heckit_helper\n\nmroz = wooldridge.data('mroz') # サンプルデータの読み込み\nHeckit_from_formula() 関数を使い、モデルを推定します。なお、Type2トービットモデルを推定する場合、第2段階の回帰式 outcome で使用される説明変数は全て第1段階の回帰式 selection に含まれ、なおかつ selection に含まれるものの、outcome には含まれない説明変数が少なくとも1つは必要であることに注意してください(末石, 2015, p.117)。\nmod_heckit, exog_outcome, exog_select = \\\n heckit_helper.Heckit_from_formula(\n selection = 'lwage ~ educ + exper + expersq + nwifeinc + age + kidslt6 + kidsge6',\n outcome = 'lwage ~ educ + exper + expersq',\n data = mroz\n)\n\nres_heckit = mod_heckit.fit(cov_type_2 = 'HC1')\n\nprint(res_heckit.summary())\n#> Heckit Regression Results \n#> ================================================================================\n#> Dep. Variable: lwage R-squared: 0.156\n#> Model: Heckit Adj. R-squared: 0.150\n#> Method: Heckman Two-Step F-statistics: 26.148\n#> Date: Mon, 11 Mar 2024 Prob (F-statistic): 0.000\n#> Time: 08:40:39 Cov in 1st Stage: nonrobust\n#> No. Total Obs.: 753 Cov in 2nd Stage: HC1\n#> No. Censored Obs.: 325 \n#> No. Uncensored Obs.: 428 \n#> ==============================================================================\n#> coef std err z P>|z| [0.025 0.975]\n#> ------------------------------------------------------------------------------\n#> Intercept -0.5781 0.305 -1.895 0.058 -1.176 0.020\n#> educ 0.1091 0.016 7.026 0.000 0.079 0.139\n#> exper 0.0439 0.016 2.699 0.007 0.012 0.076\n#> expersq -0.0009 0.000 -1.957 0.050 -0.002 1.15e-06\n#> ==============================================================================\n#> coef std err z P>|z| [0.025 0.975]\n#> ------------------------------------------------------------------------------\n#> Intercept 0.2701 0.509 0.531 0.595 -0.727 1.267\n#> educ 0.1309 0.025 5.183 0.000 0.081 0.180\n#> exper 0.1233 0.019 6.590 0.000 0.087 0.160\n#> expersq -0.0019 0.001 -3.145 0.002 -0.003 -0.001\n#> nwifeinc -0.0120 0.005 -2.484 0.013 -0.022 -0.003\n#> age -0.0529 0.008 -6.235 0.000 -0.069 -0.036\n#> kidslt6 -0.8683 0.119 -7.326 0.000 -1.101 -0.636\n#> kidsge6 0.0360 0.043 0.828 0.408 -0.049 0.121\n#> ================================================================================\n#> coef std err z P>|z| [0.025 0.975]\n#> --------------------------------------------------------------------------------\n#> IMR (Lambda) 0.0323 0.134 0.241 0.809 -0.230 0.294\n#> =====================================\n#> rho: 0.049\n#> sigma: 0.664\n#> =====================================\n#> \n#> First table are the estimates for the regression (response) equation.\n#> Second table are the estimates for the selection equation.\n#> Third table is the estimate for the coef of the inverse Mills ratio (Heckman's Lambda).", + "crumbs": [ + "heckit_helper", + "30  `heckit_helper.Heckit_from_formula()`" + ] + }, + { + "objectID": "man/Heckit_from_formula.html#参考文献", + "href": "man/Heckit_from_formula.html#参考文献", + "title": "30  heckit_helper.Heckit_from_formula()", + "section": "30.5 参考文献", + "text": "30.5 参考文献\n\n末石直也(2015)『計量経済学:ミクロデータ分析へのいざない』 日本評論社.\n春山鉄源(2023) 『Pythonで学ぶ入門計量経済学』 https://py4etrics.github.io/index.html\n\n\nReturn to Function reference.", + "crumbs": [ + "heckit_helper", + "30  `heckit_helper.Heckit_from_formula()`" + ] + }, + { + "objectID": "man/heckitmfx_compute.html", + "href": "man/heckitmfx_compute.html", + "title": "31  heckit_helper.heckitmfx_compute()", + "section": "", + "text": "31.1 概要\nType2トービットモデルの限界効果を推定します。推定方法についてはダハナ, 勝又(2023, p.136)および Hoffmann, Kassouf(2005)を参照し、関数の実装についてはR言語の heckitmfx::heckitmfx_log() 関数を参考にしています。", + "crumbs": [ + "heckit_helper", + "31  `heckit_helper.heckitmfx_compute()`" + ] + }, + { + "objectID": "man/heckitmfx_compute.html#概要", + "href": "man/heckitmfx_compute.html#概要", + "title": "31  heckit_helper.heckitmfx_compute()", + "section": "", + "text": "heckitmfx_compute(\n model, \n exog_select, \n exog_outcome, \n exponentiate = False\n)", + "crumbs": [ + "heckit_helper", + "31  `heckit_helper.heckitmfx_compute()`" + ] + }, + { + "objectID": "man/heckitmfx_compute.html#引数-argument", + "href": "man/heckitmfx_compute.html#引数-argument", + "title": "31  heckit_helper.heckitmfx_compute()", + "section": "31.2 引数 Argument", + "text": "31.2 引数 Argument\n\nmodel(必須)   Py4Etrics モジュールの py4etrics.heckit.Heckit() で作成された HeckitResults クラスのオブジェクト\nexog_selectpd.DataFrame(必須)  Type2トービットモデルのうち第1段階の selection equation(選択関数, 就業決定関数)の説明変数からなる pd.DataFrame\nexog_outcomepd.DataFrame(必須)  Type2トービットモデルのうち第2段階の regression equation(賃金関数)の説明変数からなる pd.DataFrame\n\nこれらの引数は heckit_helper.Heckit_from_formula() の出力を使用することを想定しています(使用例を参照)。\n\nexponentiatebool  推定結果に指数関数を用いた変換を行うかどうかを表す論理値。もし False (初期設定)であれば限界効果と回帰係数の推定値をそのまま出力し、もし True であれば出力されるデータフレームのうち unconditional、conditional、selection、beta の列について指数関数 \\(100[\\exp(x - 1)]\\) を用いた変換を行います。例えば被説明変数は対数賃金であれば、変換後の限界効果はパーセンテージで表された賃金の変化率として解釈できます。", + "crumbs": [ + "heckit_helper", + "31  `heckit_helper.heckitmfx_compute()`" + ] + }, + { + "objectID": "man/heckitmfx_compute.html#返り値-value", + "href": "man/heckitmfx_compute.html#返り値-value", + "title": "31  heckit_helper.heckitmfx_compute()", + "section": "31.3 返り値 Value", + "text": "31.3 返り値 Value\n 次の列を含む pands.DataFrame が出力されます。\n\nterm(index)  説明変数の名称\nunconditional  Hoffmann, Kassouf(2005, p.6)の(14)式および(15)式に基づく条件付なしの平均限界効果(unconditional marginal effect)\nconditional  Hoffmann, Kassouf(2005, pp.4-5)の(8)式および(9)式に基づく条件付平均限界効果(conditional marginal effect)\nselection  Hoffmann, Kassouf(2005, p.6)の(14)式および(15)式の第3項に当たる間接効果\nbeta  第2段階の regression equation の回帰係数\ngamma  第1段階の selection equation の回帰係数", + "crumbs": [ + "heckit_helper", + "31  `heckit_helper.heckitmfx_compute()`" + ] + }, + { + "objectID": "man/heckitmfx_compute.html#使用例-examples", + "href": "man/heckitmfx_compute.html#使用例-examples", + "title": "31  heckit_helper.heckitmfx_compute()", + "section": "31.4 使用例 Examples", + "text": "31.4 使用例 Examples\n heckit_helper モジュールはヘックマンの2段階推定(Heckit)を実行を Py4Etrics モジュールの py4etrics.heckit.Heckit() に依存しているため、事前のインストールをお願いします。\npip install git+https://github.com/Py4Etrics/py4etrics.git\nここでは wooldridge モジュールの mroz データを使い、春山(2023, Chap.24)のモデルを再現します。\nimport pandas as pd\nimport wooldridge\nfrom py4stats import heckit_helper\n\nmroz = wooldridge.data('mroz') # サンプルデータの読み込み\n\nmod_heckit, exog_outcome, exog_select = \\\n heckit_helper.Heckit_from_formula(\n selection = 'lwage ~ educ + exper + expersq + nwifeinc + age + kidslt6 + kidsge6',\n outcome = 'lwage ~ educ + exper + expersq',\n data = mroz\n)\n\nres_heckit = mod_heckit.fit(cov_type_2 = 'HC1')\nprint(heckit_helper.heckitmfx_compute(\n res_heckit,\n exog_select = exog_select,\n exog_outcome = exog_outcome\n ).round(4))\n#> unconditional conditional selection beta gamma\n#> term \n#> age -0.0385 0.0010 -0.0395 0.0000 -0.0529\n#> educ 0.2045 0.1067 0.0978 0.1091 0.1309\n#> exper 0.1338 0.0417 0.0922 0.0439 0.1233\n#> expersq -0.0022 -0.0008 -0.0014 -0.0009 -0.0019\n#> kidsge6 0.0263 -0.0006 0.0269 0.0000 0.0360\n#> kidslt6 -0.6332 0.0157 -0.6489 0.0000 -0.8683\n#> nwifeinc -0.0088 0.0002 -0.0090 0.0000 -0.0120\n被説明変数の lwage は対数賃金であるため、exponentiate = True として指数関数 \\(100[\\exp(x - 1)]\\) を使った変換を行うことで、限界効果を賃金の変化率として解釈できるようになります。\nprint(heckit_helper.heckitmfx_compute(\n res_heckit,\n exog_select = exog_select,\n exog_outcome = exog_outcome,\n exponentiate = True\n ).round(4))\n#> unconditional conditional selection beta gamma\n#> term \n#> age -3.7809 0.0954 -3.8725 0.0000 -0.0529\n#> educ 22.6943 11.2606 10.2765 11.5235 0.1309\n#> exper 14.3206 4.2543 9.6555 4.4865 0.1233\n#> expersq -0.2233 -0.0825 -0.1409 -0.0859 -0.0019\n#> kidsge6 2.6604 -0.0649 2.7271 0.0000 0.0360\n#> kidslt6 -46.9117 1.5782 -47.7365 0.0000 -0.8683\n#> nwifeinc -0.8730 0.0217 -0.8945 0.0000 -0.0120", + "crumbs": [ + "heckit_helper", + "31  `heckit_helper.heckitmfx_compute()`" + ] + }, + { + "objectID": "man/heckitmfx_compute.html#注意", + "href": "man/heckitmfx_compute.html#注意", + "title": "31  heckit_helper.heckitmfx_compute()", + "section": "31.5 注意", + "text": "31.5 注意\n heckitmfx_compute() の実装は実験的なものであり、 Stata における margins コマンドなどの既存の手法とは計算結果が一致しない可能性があります。", + "crumbs": [ + "heckit_helper", + "31  `heckit_helper.heckitmfx_compute()`" + ] + }, + { + "objectID": "man/heckitmfx_compute.html#参考文献", + "href": "man/heckitmfx_compute.html#参考文献", + "title": "31  heckit_helper.heckitmfx_compute()", + "section": "31.6 参考文献", + "text": "31.6 参考文献\n\nダハナ・ウィラワン ドニ, 勝又壮太郎(2023) 『Rによるマーケティング・データ分析: 基礎から応用まで (ライブラリ データ分析への招待 4)』新世社.\n春山鉄源 (2023) 『Pythonで学ぶ入門計量経済学』. https://py4etrics.github.io/index.html\nHoffmann, Rodolfo, and Ana Lucia Kassouf. (2005). Deriving conditional and unconditional marginal effects in log earnings equations estimated by heckman’s procedure. Applied Economics, 37(11), 1303–1311. *** Return to Function reference.", + "crumbs": [ + "heckit_helper", + "31  `heckit_helper.heckitmfx_compute()`" + ] + }, + { + "objectID": "man/arg_match.html", + "href": "man/arg_match.html", + "title": "32  引数のアサーション building_block.arg_match()", + "section": "", + "text": "32.1 概要\nR言語の rlang::arg_match() をオマージュした関数で、文字列で与えられた引数のアサーションを行います。", + "crumbs": [ + "building_block", + "32  引数のアサーション `building_block.arg_match()`" + ] + }, + { + "objectID": "man/arg_match.html#概要", + "href": "man/arg_match.html#概要", + "title": "32  引数のアサーション building_block.arg_match()", + "section": "", + "text": "arg_match(\n arg: Union[str, Sequence[str], pd.Series, np.ndarray],\n values: Sequence[str],\n arg_name: Optional[str] = None,\n multiple: bool = False,\n any_missing: bool = False,\n all_missing: bool = False,\n nullable: bool = False\n )", + "crumbs": [ + "building_block", + "32  引数のアサーション `building_block.arg_match()`" + ] + }, + { + "objectID": "man/arg_match.html#引数-argument", + "href": "man/arg_match.html#引数-argument", + "title": "32  引数のアサーション building_block.arg_match()", + "section": "32.2 引数 Argument", + "text": "32.2 引数 Argument\n\narg(必須)str or list of str  適正かどうかを判断したい引数の値\nvalues(必須):list of str  引数 arg の適正な値のリスト\narg_name:str  エラーメッセージに表示する引数の名前。指定されなかった場合(初期設定)、引数 arg に代入されたオブジェクトの名称を表示します。なお、この機能は varname.argname()関数を使って実装されています。\nmultiple:bool  引数の値として複数の値を許容するかどうかを示すブール値。arg にリストが代入された場合、multiple = False(初期設定)であれば最初の値のみを出力し、multiple = True であればリストの値を全て出力します。\nany_missing:bool True の場合、欠測値(例:None、NaN、pd.NA など)が引数 arg の一部に含まれていても許容されます。\nall_missing: bool True の場合、すべての要素が欠測値であることを許容します。\nnullable: bool True の場合、引数そのものが None であることを許容します。", + "crumbs": [ + "building_block", + "32  引数のアサーション `building_block.arg_match()`" + ] + }, + { + "objectID": "man/arg_match.html#返り値-value", + "href": "man/arg_match.html#返り値-value", + "title": "32  引数のアサーション building_block.arg_match()", + "section": "32.3 返り値 Value", + "text": "32.3 返り値 Value\n 引数 arg に代入された値が、values に代入されたリストに含まれていればその値を返し、そうでなければエラーメッセージを出力します。エラーメッセージでは values に代入されたリストの値を arg の適正な値の候補として提示します。", + "crumbs": [ + "building_block", + "32  引数のアサーション `building_block.arg_match()`" + ] + }, + { + "objectID": "man/arg_match.html#使用例-examples", + "href": "man/arg_match.html#使用例-examples", + "title": "32  引数のアサーション building_block.arg_match()", + "section": "32.4 使用例 Examples", + "text": "32.4 使用例 Examples\nfrom py4stats import building_block as build\n\ndef my_faivarit(fruits):\n fruits = build.arg_match(\n fruits, arg_name = 'fruits',\n values = ['apple', 'orange', 'grape'], \n multiple = False\n )\n return fruits\n\nmy_faivarit('apple')\n#> 'apple'\n\nmy_faivarit('orang')\n#> ValueError: `fruits` must be one of 'apple', 'orange' or 'grape', not 'orang'.\n#> Did you mean 'orange'?\n\nmy_faivarit('ap')\n#> ValueError: `fruits` must be one of 'apple', 'orange' or 'grape', not 'ap'.\n#> Did you mean 'apple' or 'grape'?\n# arg に list を指定した場合\n# 初期設定では1つ目の要素だけ使用されます。\nmy_faivarit(['apple', 'orange'])\n#> 'apple'\n\n# multiple = True として再度関数を定義\ndef my_faivarit2(fruits):\n fruits = build.arg_match(\n fruits, arg_name = 'fruits',\n values = ['apple', 'orange', 'grape'], \n multiple = True\n )\n return fruits\n\nmy_faivarit2(['apple', 'orange'])\n#> ['apple', 'orange']\n\nmy_faivarit2(['apple', 'orang'])\n#> ValueError: `fruits` must be one of 'apple', 'orange' or 'grape', not 'orang'.\n#> Did you mean 'orange'?\n Py4Stats では eda_tools.tabyl()や regression_tools.compare_ols() など、文字列で指定する引数をもつ関数で、引数のアサーションに build.arg_match() を使用しています。\nimport py4stats as py4st\nimport pandas as pd\nfrom palmerpenguins import load_penguins\npenguins = load_penguins() # サンプルデータの読み込\n\npy4st.tabyl(penguins, 'island', 'species', normalize = 'ind')\n#> ValueError: `normalize` must be one of 'index', 'columns' or 'all', not 'ind'.\n#> Did you mean 'index'?\n\nReturn to Function reference.", + "crumbs": [ + "building_block", + "32  引数のアサーション `building_block.arg_match()`" + ] + }, + { + "objectID": "man/assert_dtype.html", + "href": "man/assert_dtype.html", + "title": "33  データ型による引数のアサーション", + "section": "", + "text": "33.1 概要\nR言語の checkmate パッケージの関数群をオマージュした、引数に代入された値が想定されたデータ型ではないときにエラーを出力する関数です。\nそれぞれの関数は第一引数 arg に代入された array-like オブジェクトの要素が、次の型ではない場合にエラーを出力します。", + "crumbs": [ + "building_block", + "33  データ型による引数のアサーション" + ] + }, + { + "objectID": "man/assert_dtype.html#概要", + "href": "man/assert_dtype.html#概要", + "title": "33  データ型による引数のアサーション", + "section": "", + "text": "assert_character(\n arg: Any, \n arg_name: Optional[str] = None,\n len_arg: Optional[int] = None,\n len_min: int = 1,\n len_max: Optional[int] = None,\n any_missing: bool = False,\n all_missing: bool = False,\n nullable: bool = False,\n scalar_only: bool = False\n )\n\nassert_logical(\n arg: Any, \n arg_name: Optional[str] = None,\n len_arg: Optional[int] = None,\n len_min: int = 1,\n len_max: Optional[int] = None,\n any_missing: bool = False,\n all_missing: bool = False,\n nullable: bool = False,\n scalar_only: bool = False\n )\n\nassert_numeric(\n arg: Any,\n arg_name: Optional[str] = None,\n lower = -float('inf'), \n upper = float('inf'), \n inclusive: Literal[\"both\", \"neither\", \"left\", \"right\"] = \"both\",\n len_arg: Optional[int] = None,\n len_min: int = 1,\n len_max: Optional[int] = None,\n any_missing: bool = False,\n all_missing: bool = False,\n nullable: bool = False,\n scalar_only: bool = False\n )\n\nassert_integer(\n arg: Any,\n arg_name: Optional[str] = None,\n lower = -float('inf'), \n upper = float('inf'), \n inclusive: Literal[\"both\", \"neither\", \"left\", \"right\"] = \"both\",\n len_arg: Optional[int] = None,\n len_min: int = 1,\n len_max: Optional[int] = None,\n any_missing: bool = False,\n all_missing: bool = False,\n nullable: bool = False,\n scalar_only: bool = False\n )\n\nassert_count(\n arg: Any,\n arg_name: Optional[str] = None,\n lower = 0, \n upper = float('inf'), \n inclusive: Literal[\"both\", \"neither\", \"left\", \"right\"] = \"both\",\n len_arg: Optional[int] = None,\n len_min: int = 1,\n len_max: Optional[int] = None,\n any_missing: bool = False,\n all_missing: bool = False,\n nullable: bool = False,\n scalar_only: bool = False\n )\n\nassert_float(\n arg: Any,\n arg_name: Optional[str] = None,\n lower = -float('inf'), \n upper = float('inf'), \n inclusive: Literal[\"both\", \"neither\", \"left\", \"right\"] = \"both\",\n len_arg: Optional[int] = None,\n len_min: int = 1,\n len_max: Optional[int] = None,\n any_missing: bool = False,\n all_missing: bool = False,\n nullable: bool = False,\n scalar_only: bool = False\n )\n\n\nassert_character():str\nassert_numeric():int or float\nassert_integer():int\nassert_count():int\nassert_float():float", + "crumbs": [ + "building_block", + "33  データ型による引数のアサーション" + ] + }, + { + "objectID": "man/assert_dtype.html#引数-argument", + "href": "man/assert_dtype.html#引数-argument", + "title": "33  データ型による引数のアサーション", + "section": "33.2 引数 Argument", + "text": "33.2 引数 Argument\n\narg(必須)array-like  適正かどうかを判断したい引数。検証対象となる引数。スカラー値、または array-like オブジェクト(例:list、NumPy 配列、pandas Series)を指定できます。\narg_name:str  エラーメッセージに表示する引数の名前。None の場合、可能であれば arg に渡された変数名が自動的に推定されます。なお、この機能は varname.argname()関数を使って実装されています。\nlower, upper:int or float  arg に代入されたオブジェクトの要素が取るべき値の最大値と最小値。\ninclusive:str  値の範囲チェックにおいて、境界値を含めるかどうかを表す文字列。 'both', 'neither', 'left', 'right' から選択できます。\n\n'both':lower <= x <= upper\n'neither':lower < x < upper\n'left':lower <= x < upper\n'right':lower < x <= upper\n\nlen_arg: int 引数の要素数を表す自然数:要素数をこの値と正確に一致させたい場合に指定します。len_arg を指定した場合、引数はちょうどこの個数の要素をもつ必要があります。  引数の長さは、None や np.nan などの欠測値を含む要素数をもとに判定されます。例えば引数の要素が arg = [1, None, 3] のとき、len_arg = 3なら正常として判定され、len_arg = 2 ならエラーが出されます。\nlen_min, len_max:: int 許容される最小の要素数と最大の要素数。len_max = None の場合、上限は設けられません。\nany_missing:bool True の場合、欠測値(例:None、NaN、pd.NA など)が引数 arg の一部に含まれていても許容されます。\nall_missing: bool True の場合、すべての要素が欠測値であることを許容します。\nnullable: bool True の場合、引数そのものが None であることを許容します。\nscalar_only: bool True の場合、スカラー値のみを許容します。この場合、1要素であっても、list や配列などの array-like オブジェクトは受け付けません。", + "crumbs": [ + "building_block", + "33  データ型による引数のアサーション" + ] + }, + { + "objectID": "man/assert_dtype.html#返り値-value", + "href": "man/assert_dtype.html#返り値-value", + "title": "33  データ型による引数のアサーション", + "section": "33.3 返り値 Value", + "text": "33.3 返り値 Value\n引数 arg に代入されたオブジェクトの全ての要素が、アサーションの条件を満たしていれば何も返さず、そうでなければエラーメッセージを出力します。", + "crumbs": [ + "building_block", + "33  データ型による引数のアサーション" + ] + }, + { + "objectID": "man/assert_dtype.html#使用例-examples", + "href": "man/assert_dtype.html#使用例-examples", + "title": "33  データ型による引数のアサーション", + "section": "33.4 使用例 Examples", + "text": "33.4 使用例 Examples\nfrom py4stats import building_block as build\nx = [1, 2, 3]\ny = ['A', 'B', 'C']\n\nbuild.assert_character(x, arg_name = 'x')\n#> TypeError: Argument `x` must be of type 'str'.\n\nbuild.assert_character(y, arg_name = 'y')\nbuild.assert_numeric(x, arg_name = 'x')\n\nbuild.assert_numeric(y, arg_name = 'y')\n#> TypeError: Argument `y` must be of type 'int' or 'float' with value(s) -inf <= x <= inf.\n\nz = [0.1, 0.3, 0.6]\nbuild.assert_numeric(z, arg_name = 'z', lower = 0, upper = 1)\n\nz.extend([2, 3])\nbuild.assert_numeric(z, arg_name = 'z', lower = 0, upper = 1)\n#> ValueError: Argument `z` must have value 0 <= x <= 1\n#> element '3' and '4' of 'z' not sutisfy the condtion.\n\nz = 1\nbuild.assert_numeric(\n z, arg_name = 'z', \n lower = 0, upper = 1, \n inclusive = 'left'\n )\n#> ValueError: Argument `z` must have value 0 <= x < 1.", + "crumbs": [ + "building_block", + "33  データ型による引数のアサーション" + ] + }, + { + "objectID": "man/assert_dtype.html#参照", + "href": "man/assert_dtype.html#参照", + "title": "33  データ型による引数のアサーション", + "section": "33.5 参照", + "text": "33.5 参照\n データ型の判定にはこちらの関数を使用しています。\n\nReturn to Function reference.", + "crumbs": [ + "building_block", + "33  データ型による引数のアサーション" + ] + }, + { + "objectID": "man/is_dtype.html", + "href": "man/is_dtype.html", + "title": "34  データ型を判定する論理関数", + "section": "", + "text": "34.1 building_block.is_character() building_block.is_logical() building_block.is_numeric() building_block.is_integer() building_block.is_float()", + "crumbs": [ + "building_block", + "34  データ型を判定する論理関数" + ] + }, + { + "objectID": "man/is_dtype.html#概要", + "href": "man/is_dtype.html#概要", + "title": "34  データ型を判定する論理関数", + "section": "34.2 概要", + "text": "34.2 概要\n 代入された値、あるいはリストの要素が特定のデータ型であるかどうかを判定する関数です。基本的には pandas.api.types.is_*() 関数のラッパー関数で、命名規則はR言語の同種の関数に基づいています。\nis_character(x)\n\nis_logical(x)\n\nis_numeric(x)\n\nis_integer(x)\n\nis_float(x)", + "crumbs": [ + "building_block", + "34  データ型を判定する論理関数" + ] + }, + { + "objectID": "man/is_dtype.html#引数-argument", + "href": "man/is_dtype.html#引数-argument", + "title": "34  データ型を判定する論理関数", + "section": "34.3 引数 Argument", + "text": "34.3 引数 Argument\n\nx(必須)array, list, or pd.Series", + "crumbs": [ + "building_block", + "34  データ型を判定する論理関数" + ] + }, + { + "objectID": "man/is_dtype.html#返り値-value", + "href": "man/is_dtype.html#返り値-value", + "title": "34  データ型を判定する論理関数", + "section": "34.4 返り値 Value", + "text": "34.4 返り値 Value\n引数 x が次の型であるときに、True を返します。\n\nis_character():str\nis_logical():bool\nis_numeric():int, float or bool\nis_integer():int or bool\nis_float():float", + "crumbs": [ + "building_block", + "34  データ型を判定する論理関数" + ] + }, + { + "objectID": "man/is_dtype.html#使用例-examples", + "href": "man/is_dtype.html#使用例-examples", + "title": "34  データ型を判定する論理関数", + "section": "34.5 使用例 Examples", + "text": "34.5 使用例 Examples\nfrom py4stats import building_block as build\nx_str = ['A', 'B']\nx_bool = [True, False, True]\nx_int = [1, 2, 3]\nx_float = [0, 1, 2.1, 0.5]\nx_list = [x_str, x_bool, x_int, x_float]\n\nprint([build.is_character(x) for x in x_list])\n#> [True, False, False, False]\n\nprint([build.is_logical(x) for x in x_list])\n#> [False, True, False, False]\n\nprint([build.is_numeric(x) for x in x_list])\n#> [False, True, True, True]\n\nprint([build.is_integer(x) for x in x_list])\n#> [False, False, True, False]\n\nprint([build.is_float(x) for x in x_list])\n#> [False, False, False, True]\n\nReturn to Function reference.", + "crumbs": [ + "building_block", + "34  データ型を判定する論理関数" + ] + }, + { + "objectID": "man/miscellaneous.html", + "href": "man/miscellaneous.html", + "title": "35  数字のフォーマットを変更する関数", + "section": "", + "text": "35.1 概要", + "crumbs": [ + "building_block", + "35  数字のフォーマットを変更する関数" + ] + }, + { + "objectID": "man/miscellaneous.html#概要", + "href": "man/miscellaneous.html#概要", + "title": "35  数字のフォーマットを変更する関数", + "section": "", + "text": "style_number(x, digits = 2, big_mark = ',')\n\nstyle_currency(x, symbol = '$', digits = 0, big_mark = ',')\n\nstyle_percent(x, digits = 2, unit = 100, symbol = '%')", + "crumbs": [ + "building_block", + "35  数字のフォーマットを変更する関数" + ] + }, + { + "objectID": "man/miscellaneous.html#引数-argument", + "href": "man/miscellaneous.html#引数-argument", + "title": "35  数字のフォーマットを変更する関数", + "section": "35.2 引数 Argument", + "text": "35.2 引数 Argument\n\nx:scalar or array-like of int or float\np_value:scalar or array-like of int or float\ndigits:int 小数点以下の桁数\nbig_mark:int 3桁毎の桁区切りに使用する記号。カンマ ',', アンダーバー '_', もしくは 非表示 '' から選ぶことができます。\nsymbol:str  貨幣記号を表す文字列", + "crumbs": [ + "building_block", + "35  数字のフォーマットを変更する関数" + ] + }, + { + "objectID": "man/miscellaneous.html#返り値-value", + "href": "man/miscellaneous.html#返り値-value", + "title": "35  数字のフォーマットを変更する関数", + "section": "35.3 返り値 Value", + "text": "35.3 返り値 Value\n 以下の値をもつ pd.Series を返します。\n\nbuilding_block.style_number(): 任意の数値に対して、小数点以下を桁数 digits に丸め、3桁区切り記号を通過した値を文字列として返します。f-string によるフォーマット f'{x:{big_mark}.{digits}f}' を用いて実装されています。\nbuilding_block.style_currency(): build.style_number() と同じく任意の数値に対して、小数点以下を桁数 digits に丸め、3桁区切り記号を通過した値を文字列として返しますが、さらに貨幣記号を追加します。f-string によるフォーマット f'{symbol}{x:{big_mark}.{digits}f}' を用いて実装されています。\nbuilding_block.style_percent(): 任意の数値をパーセンテージ表示に変換した値を文字列として返します。f-string によるフォーマット f'{x:,.{digits}%}' を用いて実装されています。", + "crumbs": [ + "building_block", + "35  数字のフォーマットを変更する関数" + ] + }, + { + "objectID": "man/miscellaneous.html#使用例-examples", + "href": "man/miscellaneous.html#使用例-examples", + "title": "35  数字のフォーマットを変更する関数", + "section": "35.4 使用例 Examples", + "text": "35.4 使用例 Examples\nimport numpy as np\nfrom py4stats import building_block as build\n\nx = [2000, 1000, 0.5, 0.11, 0.123]\n\nprint(build.style_number(x).to_list())\n#> ['2,000.00', '1,000.00', '0.50', '0.11', '0.12']\n\nprint(build.style_number(x, big_mark = '').to_list())\n#> ['2000.00', '1000.00', '0.50', '0.11', '0.12']\n\nprint(build.style_currency(x).to_list())\n#> ['$2,000', '$1,000', '$0', '$0', '$0']\npct = [0.11, 0.06, 0.05, 0.01, 0.00234]\n\nprint(build.style_percent(pct).to_list())\n#> ['11.00%', '6.00%', '5.00%', '1.00%', '0.23%']\n\nprint(build.style_percent(pct, unit = 1).to_list())\n#> ['0.11%', '0.06%', '0.05%', '0.01%', '0.00%']\n\nprint(build.style_percent(pct, unit = 1000, symbol = '‰').to_list())\n#> ['110.00‰', '60.00‰', '50.00‰', '10.00‰', '2.34‰']\n\nReturn to Function reference.", + "crumbs": [ + "building_block", + "35  数字のフォーマットを変更する関数" + ] + }, + { + "objectID": "man/style_pvalue.html", + "href": "man/style_pvalue.html", + "title": "36  p-値のフォーマットを変更する関数", + "section": "", + "text": "36.1 概要\nR言語の style_pvalue() と gtools::stars.pval() をオマージュした関数でp-値を見やすい形のフォーマットに変換します。", + "crumbs": [ + "building_block", + "36  p-値のフォーマットを変更する関数" + ] + }, + { + "objectID": "man/style_pvalue.html#概要", + "href": "man/style_pvalue.html#概要", + "title": "36  p-値のフォーマットを変更する関数", + "section": "", + "text": "style_pvalue(\n p_value: ArrayLike,\n digits: int = 3,\n prepend_p: bool = False,\n p_min: float = 0.001,\n p_max: float = 0.9\n )\n\np_stars(\n p_value, \n stars = {'***':0.01, '**':0.05, '*':0.1}\n )", + "crumbs": [ + "building_block", + "36  p-値のフォーマットを変更する関数" + ] + }, + { + "objectID": "man/style_pvalue.html#引数-argument", + "href": "man/style_pvalue.html#引数-argument", + "title": "36  p-値のフォーマットを変更する関数", + "section": "36.2 引数 Argument", + "text": "36.2 引数 Argument\n\np_value:scalar or array-like of int or float\ndigits:int(style_pvalue() のみ)  小数点以下の桁数\nprepend_p:bool(style_pvalue() のみ)  出区力に接頭辞 ’p’ を追加するかどうかを表す論理値。False であれば追加されず、True であれば追加されます。\np_min:int(style_pvalue() のみ)  p-値を実数値で表示する最小値。p_value がこの値を下回る場合、’<p_min’ もしくは ’p<p_min’ の形で表示されます。\np_max:int(style_pvalue() のみ)  p-値を実数値で表示する最大値。p_value がこの値を下回る場合、’>p_max’ もしくは ’p>p_max’ の形で表示されます。\nstars:dict(p_stars() のみ)  有意性を示す記号を key に、表示を切り替える閾値を値(value)にもつ辞書オブジェクト。初期設定の stars = None の場合、{'***': 0.01, '**': 0.05, '*': 0.1} が使用されます。詳細は下記を参照して下さい。", + "crumbs": [ + "building_block", + "36  p-値のフォーマットを変更する関数" + ] + }, + { + "objectID": "man/style_pvalue.html#返り値-value", + "href": "man/style_pvalue.html#返り値-value", + "title": "36  p-値のフォーマットを変更する関数", + "section": "36.3 返り値 Value", + "text": "36.3 返り値 Value\n フォーマットされたp-値を表す pd.Series を出力します。building_block.style_pvalue() では引数 p_value に与えられた数値を指定された桁数に丸めた値を表示し、指定された範囲を外れる値については ’<p_min’ や ’>p_max’の書式にへんかんします。  building_block.p_stars()では仮説検定の有意性を示すアスタリスク*` に変換します。初期設定ではアスタリスクはp-値の値に応じて次のように表示されます。\n\np ≤ 0.1 *\np ≤ 0.05 **\np ≤ 0.01 ***\np > 0.1 表示なし", + "crumbs": [ + "building_block", + "36  p-値のフォーマットを変更する関数" + ] + }, + { + "objectID": "man/style_pvalue.html#使用例-examples", + "href": "man/style_pvalue.html#使用例-examples", + "title": "36  p-値のフォーマットを変更する関数", + "section": "36.4 使用例 Examples", + "text": "36.4 使用例 Examples\n\nfrom py4stats import building_block as build\np_value = [\n 0.999, 0.5028, 0.2514, 0.197, 0.10, \n 0.0999, 0.06, 0.03, 0.002, 0.0002\n ]\n\nprint(build.style_pvalue(p_value).to_list())\n#> ['>0.9', '0.503', '0.251', '0.197', '0.1', '0.1', '0.06', '0.03', '0.002', '<0.001']\n\nprint(build.style_pvalue(p_value, prepend_p = True).to_list())\n#> ['p>0.9', 'p=0.503', 'p=0.251', 'p=0.197', 'p=0.1', 'p=0.1', 'p=0.06', 'p=0.03', 'p=0.002', 'p<0.001']\n\nprint(build.p_stars(p_value).to_list())\n#> ['', '', '', '', '*', '*', '*', '**', '***', '***']\n\n# R言語の stats::summary.lm() や gtools::stars.pval() を再現する場合。\nstars_dict = {'***':0.001, '**':0.01, '*': 0.05, '.':0.1}\nprint(build.p_stars(p_value, stars = stars_dict).to_list())\n#> ['', '', '', '', '.', '.', '.', '*', '**', '***']\n\nReturn to Function reference.", + "crumbs": [ + "building_block", + "36  p-値のフォーマットを変更する関数" + ] + }, + { + "objectID": "man/oxford_comma.html", + "href": "man/oxford_comma.html", + "title": "37  並列文の作成 oxford_comma()", + "section": "", + "text": "37.1 概要\n文字列のリストを与えると、リストの要素を英文における並列文の形に変換する関数です。表記法については Wikipedia Serial comma を参照し、コードについては stack overflow:Grammatical List Join in Python [duplicate] を参照しました。", + "crumbs": [ + "building_block", + "37  並列文の作成 `oxford_comma()`" + ] + }, + { + "objectID": "man/oxford_comma.html#概要", + "href": "man/oxford_comma.html#概要", + "title": "37  並列文の作成 oxford_comma()", + "section": "", + "text": "oxford_comma(x, sep_last = 'and', quotation = True)\n\noxford_comma_and(x, quotation = True)\n\noxford_comma_or(x, quotation = True)", + "crumbs": [ + "building_block", + "37  並列文の作成 `oxford_comma()`" + ] + }, + { + "objectID": "man/oxford_comma.html#引数", + "href": "man/oxford_comma.html#引数", + "title": "37  並列文の作成 oxford_comma()", + "section": "37.2 引数", + "text": "37.2 引数\n\nx:str or list of str\nquotation: bool  リストの各要素にクオーテーションマーク ’’ を追加するかどうかを表す論理値。True(初期設定)であればクオーテーションマークを追加し、False であれば追加しません。\nsep_last: str oxford_comma() のみ  リストの最後の要素の直前に付加する単語を表す文字列。\n\nなお、oxford_comma_and(x) は oxford_comma(x, 'and') と、oxford_comma_or(x) は oxford_comma(x, 'or') と同等です。", + "crumbs": [ + "building_block", + "37  並列文の作成 `oxford_comma()`" + ] + }, + { + "objectID": "man/oxford_comma.html#使用例", + "href": "man/oxford_comma.html#使用例", + "title": "37  並列文の作成 oxford_comma()", + "section": "37.3 使用例", + "text": "37.3 使用例\nfrom py4stats import building_block as build\nx = ['A', 'B', 'C']\n\nprint(build.oxford_comma_and(x))\n#> 'A', 'B' and 'C'\n\nprint(build.oxford_comma_and(x, quotation = False))\n#> A, B and C\n\nprint(build.oxford_comma_or(x))\n#> 'A', 'B' or 'C'\nリストの要素が1つの場合、あるいは x に文字列が指定された場合はカンマなどを追加せずにそのまま出力します。\nprint(build.oxford_comma_or(['A']))\n#> 'A'\n\nprint(build.oxford_comma_or('A'))\n#> 'A'\n\nReturn to Function reference.", + "crumbs": [ + "building_block", + "37  並列文の作成 `oxford_comma()`" + ] + }, + { + "objectID": "articles/narwhals_in_py4stats.html", + "href": "articles/narwhals_in_py4stats.html", + "title": "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装", + "section": "", + "text": "38.1 概要\npy4stats.eda_tools モジュールは、複数の DataFrame バックエンドに対して共通の API を提供することを目的として、narwhals ライブラリを用いて実装されています。\n本ドキュメントでは、本モジュールの内部実装に関する前提条件や、バックエンドの違いに起因する挙動上の注意点について説明します。\n通常の利用にあたって本ドキュメントを読む必要はありませんが、実装の詳細や挙動の違いが気になる場合には参考にしてください。", + "crumbs": [ + "articles", + "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装" + ] + }, + { + "objectID": "articles/narwhals_in_py4stats.html#対応している-dataframe-バックエンドについて", + "href": "articles/narwhals_in_py4stats.html#対応している-dataframe-バックエンドについて", + "title": "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装", + "section": "38.2 対応している DataFrame バックエンドについて", + "text": "38.2 対応している DataFrame バックエンドについて\n py4stats.eda_tools モジュールの関数は、第一引数として narwhals.from_native() によって nw.DataFrame 型へ変換可能な DataFrame オブジェクトを受け取ります。\n具体的には、以下のようなバックエンドを想定しています。\n\npandas.DataFrame(主に動作検証を行っているバックエンド)\npolars.DataFrame(簡易的な動作確認のみ)\npyarrow.Table(簡易的な動作確認のみ)\n\n本ライブラリの動作確認は、基本的に pandas.DataFrame を用いて実施しています。そのため、polars や pyarrow を使用した場合には、バックエンド固有の仕様差や未検証の挙動により、一部の関数でエラーが発生する可能性があります。そのような挙動が確認された場合は、Issue 等での報告を歓迎します。\n また、バックエンド別の実装状況については eda_tools開発状況 も参照して下さい。", + "crumbs": [ + "articles", + "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装" + ] + }, + { + "objectID": "articles/narwhals_in_py4stats.html#narwhals-を用いた関数の返り値の型について", + "href": "articles/narwhals_in_py4stats.html#narwhals-を用いた関数の返り値の型について", + "title": "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装", + "section": "38.3 narwhals を用いた関数の返り値の型について", + "text": "38.3 narwhals を用いた関数の返り値の型について\npy4stats.eda_tools モジュールの関数のうち、py4stats.diagnose() など、第一引数にデータフレームを取る関数の返り値の型は、to_native 引数の値によって変化します。  初期設定である to_nativ = True の場合には、第一引数に入力されたデータフレームと同じ型のデータフレームが出力され、to_nativ = False の場合には narwhals.DataFrame 型のデータフレームが出力されます。to_nativ = False のオプションは、主にライブラリ内部での利用や、データフレームのバックエンドに依存しない後続処理を行いたい場合を想定したオプションです。\nimport py4stats as py4st\nimport pandas as pd\nimport polars as pl\nimport pyarrow as pa\nimport wooldridge\nmroz_pd = wooldridge.data('mroz') # pd.DataFrame\nmroz_pl = pl.from_pandas(mroz_pd) # pl.DataFrame\nmroz_pa = pa.Table.from_pandas(mroz_pd) # pyarrow.lib.Table\n# to_nativ = True の場合(初期設定): 入力されたデータフレームと同じ型\n\nprint(type(py4st.diagnose(mroz_pd, to_native = True)))\n#> <class 'pandas.core.frame.DataFrame'>\n\nprint(type(py4st.diagnose(mroz_pl, to_native = True)))\n#> <class 'polars.dataframe.frame.DataFrame'>\n\nprint(type(py4st.diagnose(mroz_pa, to_native = True)))\n#> <class 'pyarrow.lib.Table'>\n# to_nativ = False の場合: narwhals.DataFrame 型\n\nprint(type(py4st.diagnose(mroz_pd, to_native = False)))\n#> <class 'narwhals.dataframe.DataFrame'>\n\nprint(type(py4st.diagnose(mroz_pl, to_native = False)))\n#> <class 'narwhals.dataframe.DataFrame'>\n\nprint(type(py4st.diagnose(mroz_pa, to_native = False)))\n#> <class 'narwhals.dataframe.DataFrame'>", + "crumbs": [ + "articles", + "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装" + ] + }, + { + "objectID": "articles/narwhals_in_py4stats.html#narwhals-を用いた実装方針について", + "href": "articles/narwhals_in_py4stats.html#narwhals-を用いた実装方針について", + "title": "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装", + "section": "38.4 narwhals を用いた実装方針について", + "text": "38.4 narwhals を用いた実装方針について\n 内部実装では、関数の冒頭で\nnw.from_native(data)\nを用いて入力データを nw.DataFrame に変換し、以降の処理を narwhals の抽象 API 上で行っています。\nこの設計により、DataFrame バックエンドごとの差異を最小限に抑えつつ、将来的な拡張性を確保することを目的としています。\n一方で、narwhals は各バックエンドの完全な互換性を保証するものではないため、特定の操作や型変換についてはバックエンドごとに挙動が異なる場合があります。", + "crumbs": [ + "articles", + "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装" + ] + }, + { + "objectID": "articles/narwhals_in_py4stats.html#pandas_flavor-を用いた-dataframe-メソッド登録について", + "href": "articles/narwhals_in_py4stats.html#pandas_flavor-を用いた-dataframe-メソッド登録について", + "title": "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装", + "section": "38.5  pandas_flavor を用いた DataFrame メソッド登録について", + "text": "38.5  pandas_flavor を用いた DataFrame メソッド登録について\npy4stats.eda_tools の関数のうち、単一の DataFrame オブジェクトを引数として受け取る関数については、pandas_flavor.register_dataframe_method を用いて DataFrame メソッドとして登録されています。その結果、以下のような使い方が可能です。\ndf.diagnose()\nただし、pandas_flavor は pandas の拡張を前提とした仕組みであるため、このメソッド形式の呼び出しは、pandas.DataFrame を対象としています。  polars.DataFrame や pyarrow ベースのオブジェクトを使用する場合には、関数として直接呼び出す形での利用を推奨します。\nimport py4stats as py4st\n\npy4st.diagnose(df)", + "crumbs": [ + "articles", + "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装" + ] + }, + { + "objectID": "articles/narwhals_in_py4stats.html#今後について", + "href": "articles/narwhals_in_py4stats.html#今後について", + "title": "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装", + "section": "38.6 今後について", + "text": "38.6 今後について\n py4stats.eda_tools モジュールは、今後も narwhals ベースの実装を主軸として改良・拡張を行っていく予定です。一方で、従来の pandas ベースの実装については、互換性のために当面は保持される予定ですが、機能追加は行わない予定です。バックエンドごとの挙動差や制限事項については、必要に応じて本ドキュメントを更新していきます。", + "crumbs": [ + "articles", + "38  Technical Notes: py4stats.eda_tools における narwhals ベースの実装" + ] + }, + { + "objectID": "articles/eda_tools_development_status.html", + "href": "articles/eda_tools_development_status.html", + "title": "39  eda_toolsの開発状況", + "section": "", + "text": "39.1 凡例\n2026年1月22日\neda_toolsの開発状況", + "crumbs": [ + "articles", + "39  eda_toolsの開発状況" + ] + }, + { + "objectID": "articles/eda_tools_development_status.html#凡例", + "href": "articles/eda_tools_development_status.html#凡例", + "title": "39  eda_toolsの開発状況", + "section": "", + "text": "✅ 実装済/テスト済\n⭕️ 実装済/テスト済(異なるバックエンドに依存)\n🔼 実装済/テスト未\n❌ 未実装", + "crumbs": [ + "articles", + "39  eda_toolsの開発状況" + ] + }, + { + "objectID": "articles/narwhalsについての考察.html", + "href": "articles/narwhalsについての考察.html", + "title": "40  narwhals についての考察", + "section": "", + "text": "40.1 narwhals での再現が難しい Pandas の機能", + "crumbs": [ + "articles", + "40  narwhals についての考察" + ] + }, + { + "objectID": "articles/narwhalsについての考察.html#narwhals-での再現が難しい-pandas-の機能", + "href": "articles/narwhalsについての考察.html#narwhals-での再現が難しい-pandas-の機能", + "title": "40  narwhals についての考察", + "section": "", + "text": "40.1.1 異なるデータフレーム間の二項演算\nPandas の場合、2つのデータフレーム df1 と df2 が共通の columns と index をもつ限り、df3 = df1 + df2 によって二項演算を行うことができ、このとき、columns と index をもつ要素同士が加算されます。しかし、narwhals には Pandas のような index が存在しないため、この計算は再現が困難です。\n\n\n40.1.2 データフレームへの値の代入\nPandas の場合、df.loc[i, j] = x という形でデータフレーム df の i, j 要素に値 x を代入することができますが、narwhals ではこれに相当する演算 df[i, j] = x は禁止されています。\n異なるデータフレーム間の二項演算に制約があること、そしてデータフレームへの値の代入が難しいことから、tabyl() 関数では、集計後の作表処理の一部を Pandas に依存しています。\n\n\n40.1.3 任意の関数でグループ別集計を行う\n自作関数を使ってグループ別集計を行いたい場合、Pandas であれば df.groupby(group)[x].agg(my_func) で行うことができます。同じく narwhals でも\ndata_nw.group_by(nw.col(group)).agg(nw.col('x').mean())\nという形でグループ別の集計がサポートされているものの、ここで使用できる集計関数は narwhals で実装されているものに限定されるようで、次のような方法で自作関数を使用することはできません。\ndata_nw.group_by(nw.col(group)).agg(nw.col('x').my_func())\ndata_nw.group_by(nw.col(group)).agg(my_func(nw.col('x')))\n例えば Py4Stats では、Pareto_plot() 関数の内部実装に使用している make_rank_table() 関数において、任意の aggfunc() 関数をグループ別集計に使うために、サブセッティングを使って group_by() メソッドの使用を回避するという変則的(かつ、おそらく非効率な)な実装を行なっています。\nstat_values = [\n aggfunc(\n data_nw.filter(nw.col(group) == g)[values]\n .drop_nulls().to_native()\n ) \n for g in group_value\n ]\nまた、上記の回避策のもう1つの問題として、data_nw.filter(nw.col(group) == g) では、複数の変数に基づくグループ化に対応できないことも挙げられます。make_rank_table() 関数については、Pareto_plot() 関数でパレート図を作図するときに横軸になる group が多変数だと対応できないので、group が1変数(= 引数として1つの文字列だけを受け付ける)とすることで妥協しています。\nただ、現時点で narwhals.GroupBy クラスに実装されているメソッドは .agg() しかなく、開発が進めばより柔軟な関数適用が可能になるのではないかと期待しています。", + "crumbs": [ + "articles", + "40  narwhals についての考察" + ] + }, + { + "objectID": "articles/narwhalsについての考察.html#narwhals-におけるバックエンドとその書き換え", + "href": "articles/narwhalsについての考察.html#narwhals-におけるバックエンドとその書き換え", + "title": "40  narwhals についての考察", + "section": "40.2 narwhals におけるバックエンドとその書き換え", + "text": "40.2 narwhals におけるバックエンドとその書き換え\n\n40.2.1 バックエンドの基本的な理解\nnarwhals におけるバックエンドによる型変換の基本的な理解として(不正確かもしれませんが)、nw.from_native(data) の実行時に data の型に応じて backend が記録され、.to_native() メソッドを呼び出すと、記録された backend に応じて元の型に変換されます。\nbackend の情報は .select() .filter() などのメソッドを使って data_nw を加工しても保持され、これによって入力された input_pd と同じ型のデータフレームを返すことが可能になっています。\ndata_nw = nw.from_native(input_pd) # ここで backend が記録される\ndata_nw.implementation # -> Pandas\nresult = data_nw.to_native() # -> pd.DataFrame が出力される\n一方で、処理の途中で pd.DataFrame や pl.DataFrame などの native オブジェクトを経由した場合、改めて nw.from_native() を使って nw.DataFrame に変換し直したとしても、その時点で backend が上書きされるので、.to_native() メソッドを使用しても引数として入力された input_pd と同じ型に復元される保証はありません。\ndata_nw = nw.from_native(input_pd) # ここで backend が記録される\ndata_nw2 = nw.from_native(data_nw.to_polars()) # ここで backend が上書きされる\ndata_nw2.implementation # -> polars\nresult = data_nw2.to_native() # -> pl.DataFrame が出力される\n従って、result が input_pd と同じ型をもつことを保証するには、data_nw を nw.DataFrame クラスのまま維持する(≒ narwhals ベースのメソッドだけで処理を書く)必要があり、これが narwhals ベースの実装としてのあるべき姿だと思われます。\n一方で、一部の処理が特定のバックエンド(e.g. Pandas)に依存している場合にはどうするべきでしょうか。これには次のような2つの選択肢があると考えています。\n\n処理が依存しているバックエンドのオブジェクト(e.g. pd.DataFrame)として出力する〔推奨〕\nnarwhals の仕様を迂回してバックエンドを書き換える〔非推奨ですが次節で考察〕\n\nこれら2つの可能性の間での選択は、技術的な問題であると同時にユーザーとのコミュニケーションの問題です。入力と同型のデータフレームを返す関数の中に pd.DataFrame を返す関数が混ざっていることをユーザーにどう説明するのか。あるいは、narwhals の仕様を迂回をしたことで非効率性やカラムレベルでデータ型(dtype)の一貫性が失われる問題が生じたとして、それをユーザーにどう説明するのか、という問いです。\n\n\n40.2.2 バックエンドの書き換え (非推奨)\nいま、some_computation() として実装された処理の一部が Pandas に依存しており、結果が result_pd という pd.DataFrame 型のオブジェクトとして得られているとします。このとき、result_pd をもとのデータフレーム data_pl と同型にする方法の1つとして、result_pd を pd.Series.to_dict() などを使って辞書のリスト(list of dict)に変換したのち、nw.from_dicts() を使って data_pl と同じバックエンドをもつ nw.DataFrame に変換するという方法があります。\n以上の変換の実例を見てみましょう。まずは、data_pl\ndata_pl = pl.from_pandas(load_penguins())[:10, :2]\n\ndata_pl = data_pl.with_columns(\n pl.all().cast(pl.Categorical)\n )\nprint(type(data_pl))\n#> <class 'polars.dataframe.frame.DataFrame'>\nprint(data_pl.schema)\n#> Schema({'species': Categorical, 'island': Categorical})\n\ndata_nw_pl = nw.from_native(data_pl) # ここでバックエンドを記録、後ほど復元に使います。\n\n# 何かしらの処理の結果 pd.DataFrame に変換されたとする\nresult_pd = data_nw_pl.to_pandas()\nprint(type(result_pd))\n#> <class 'pandas.core.frame.DataFrame'>\n次に、pl.DataFrame 型をもつ result_pd を pl.DataFrame に変換します。\nここでポイントとなるのが、nw.from_dicts() 関数の引数の (1)schema 引数と、(2)backend引数に、それぞれ data_nw_pl から取得した値を入力することで、result_pl の列が data_pl と同じく Categorical 型になるようにしています(指定しないと String 型として解釈されてしまいます)。\n# Pandas -> polars の変換\ndict_list = [result_pd.loc[i, :].to_dict() for i in result_pd.index]\n\nresult_nw_pl = nw.from_dicts(\n dict_list, \n schema = data_nw_pl.schema, # (1)\n backend = data_nw_pl.implementation # (2)\n )\nresult_pl = result_nw_pl.to_native()\n\nprint(type(result_pl))\n#> <class 'polars.dataframe.frame.DataFrame'>\n\nprint(result_pl.schema)\n#> Schema({'species': Categorical, 'island': Categorical})\nまた、Series については、nw.Series.from_iterable() 関数を使うことで、次のようにバックエンドを書き換えることができます。\nx_pl = data_pl['island']\nprint(type(x_pl))\n#> <class 'polars.series.series.Series'>\nprint(x_pl.dtype)\n#> Categorical\n\nx_nw = nw.from_native(x_pl, allow_series = True)\nx_pd = x_nw.to_pandas()\nprint(type(x_pd))\n#> <class 'pandas.core.series.Series'>\nx_pl2 = nw.Series.from_iterable(\n name = x_pd.name,\n values = x_pd.to_list(),\n backend = x_nw.implementation,\n dtype = x_nw.dtype\n).to_native()\n\nprint(type(x_pl2))\n#> <class 'polars.series.series.Series'>\nprint(x_pl2.dtype)\n#> Categorical\nnarwhals の仕様を迂回してバックエンドを書き換えることは可能ですが、この方法には次のような問題があります。 ただし、以上のような方法でバックエンドの書き換えは可能ですが、\n\n小さいデータフレームでない限り時間がかかる\n\n恐らく、dict_list を作成するための for ループによるもの\n\n上記の (1) に代入する正しい schema が用意できないと、カラムレベルでデータ型の一貫性保証できない。\n\n特に2番目の問題点については、集計処理によって列名が変わった場合には正しい schema(≒ {列名:dtype} の辞書オブジェクト)を用意することが難しくなります。そして、schema を指定できないと、pd.Categorical、pl.Categorical あるいは pl.Enum といったカテゴリー変数は文字列型に変換されてしまい、データ型の一貫性が失われます。\nカラムレベルで型の一貫性が失われると、返り値が入力値とは異なる型になるよりも把握しづらく、また挙動の予測が難しいため、上記のような処理は採用するとしても、他に方法がないときの最終手段として扱うべきでしょう。", + "crumbs": [ + "articles", + "40  narwhals についての考察" + ] + } +] \ No newline at end of file diff --git a/docs/site_libs/bootstrap/bootstrap-322e28c2ea576fd4147837fb8c5b7a3d.min.css b/docs/site_libs/bootstrap/bootstrap-322e28c2ea576fd4147837fb8c5b7a3d.min.css new file mode 100644 index 0000000..cd9146c --- /dev/null +++ b/docs/site_libs/bootstrap/bootstrap-322e28c2ea576fd4147837fb8c5b7a3d.min.css @@ -0,0 +1,12 @@ +/*! + * Bootstrap v5.3.1 (https://getbootstrap.com/) + * Copyright 2011-2023 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */@import"https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@300;400;700&display=swap";:root,[data-bs-theme=light]{--bs-blue: #2780e3;--bs-indigo: #6610f2;--bs-purple: #613d7c;--bs-pink: #e83e8c;--bs-red: #ff0039;--bs-orange: #f0ad4e;--bs-yellow: #ff7518;--bs-green: #3fb618;--bs-teal: #20c997;--bs-cyan: #9954bb;--bs-black: #000;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-default: #343a40;--bs-primary: #2780e3;--bs-secondary: #343a40;--bs-success: #3fb618;--bs-info: #9954bb;--bs-warning: #ff7518;--bs-danger: #ff0039;--bs-light: #f8f9fa;--bs-dark: #343a40;--bs-default-rgb: 52, 58, 64;--bs-primary-rgb: 39, 128, 227;--bs-secondary-rgb: 52, 58, 64;--bs-success-rgb: 63, 182, 24;--bs-info-rgb: 153, 84, 187;--bs-warning-rgb: 255, 117, 24;--bs-danger-rgb: 255, 0, 57;--bs-light-rgb: 248, 249, 250;--bs-dark-rgb: 52, 58, 64;--bs-primary-text-emphasis: rgb(15.6, 51.2, 90.8);--bs-secondary-text-emphasis: rgb(20.8, 23.2, 25.6);--bs-success-text-emphasis: rgb(25.2, 72.8, 9.6);--bs-info-text-emphasis: rgb(61.2, 33.6, 74.8);--bs-warning-text-emphasis: rgb(102, 46.8, 9.6);--bs-danger-text-emphasis: rgb(102, 0, 22.8);--bs-light-text-emphasis: #495057;--bs-dark-text-emphasis: #495057;--bs-primary-bg-subtle: rgb(211.8, 229.6, 249.4);--bs-secondary-bg-subtle: rgb(214.4, 215.6, 216.8);--bs-success-bg-subtle: rgb(216.6, 240.4, 208.8);--bs-info-bg-subtle: rgb(234.6, 220.8, 241.4);--bs-warning-bg-subtle: rgb(255, 227.4, 208.8);--bs-danger-bg-subtle: rgb(255, 204, 215.4);--bs-light-bg-subtle: rgb(251.5, 252, 252.5);--bs-dark-bg-subtle: #ced4da;--bs-primary-border-subtle: rgb(168.6, 204.2, 243.8);--bs-secondary-border-subtle: rgb(173.8, 176.2, 178.6);--bs-success-border-subtle: rgb(178.2, 225.8, 162.6);--bs-info-border-subtle: rgb(214.2, 186.6, 227.8);--bs-warning-border-subtle: rgb(255, 199.8, 162.6);--bs-danger-border-subtle: rgb(255, 153, 175.8);--bs-light-border-subtle: #e9ecef;--bs-dark-border-subtle: #adb5bd;--bs-white-rgb: 255, 255, 255;--bs-black-rgb: 0, 0, 0;--bs-font-sans-serif: "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));--bs-root-font-size: 17px;--bs-body-font-family: "Source Sans Pro", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";--bs-body-font-size:1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #343a40;--bs-body-color-rgb: 52, 58, 64;--bs-body-bg: #fff;--bs-body-bg-rgb: 255, 255, 255;--bs-emphasis-color: #000;--bs-emphasis-color-rgb: 0, 0, 0;--bs-secondary-color: rgba(52, 58, 64, 0.75);--bs-secondary-color-rgb: 52, 58, 64;--bs-secondary-bg: #e9ecef;--bs-secondary-bg-rgb: 233, 236, 239;--bs-tertiary-color: rgba(52, 58, 64, 0.5);--bs-tertiary-color-rgb: 52, 58, 64;--bs-tertiary-bg: #f8f9fa;--bs-tertiary-bg-rgb: 248, 249, 250;--bs-heading-color: inherit;--bs-link-color: #2761e3;--bs-link-color-rgb: 39, 97, 227;--bs-link-decoration: underline;--bs-link-hover-color: rgb(31.2, 77.6, 181.6);--bs-link-hover-color-rgb: 31, 78, 182;--bs-code-color: #7d12ba;--bs-highlight-bg: rgb(255, 227.4, 208.8);--bs-border-width: 1px;--bs-border-style: solid;--bs-border-color: #dee2e6;--bs-border-color-translucent: rgba(0, 0, 0, 0.175);--bs-border-radius: 0.25rem;--bs-border-radius-sm: 0.2em;--bs-border-radius-lg: 0.5rem;--bs-border-radius-xl: 1rem;--bs-border-radius-xxl: 2rem;--bs-border-radius-2xl: var(--bs-border-radius-xxl);--bs-border-radius-pill: 50rem;--bs-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-box-shadow-sm: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-box-shadow-lg: 0 1rem 3rem rgba(0, 0, 0, 0.175);--bs-box-shadow-inset: inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-focus-ring-width: 0.25rem;--bs-focus-ring-opacity: 0.25;--bs-focus-ring-color: rgba(39, 128, 227, 0.25);--bs-form-valid-color: #3fb618;--bs-form-valid-border-color: #3fb618;--bs-form-invalid-color: #ff0039;--bs-form-invalid-border-color: #ff0039}[data-bs-theme=dark]{color-scheme:dark;--bs-body-color: #dee2e6;--bs-body-color-rgb: 222, 226, 230;--bs-body-bg: #212529;--bs-body-bg-rgb: 33, 37, 41;--bs-emphasis-color: #fff;--bs-emphasis-color-rgb: 255, 255, 255;--bs-secondary-color: rgba(222, 226, 230, 0.75);--bs-secondary-color-rgb: 222, 226, 230;--bs-secondary-bg: #343a40;--bs-secondary-bg-rgb: 52, 58, 64;--bs-tertiary-color: rgba(222, 226, 230, 0.5);--bs-tertiary-color-rgb: 222, 226, 230;--bs-tertiary-bg: rgb(42.5, 47.5, 52.5);--bs-tertiary-bg-rgb: 43, 48, 53;--bs-primary-text-emphasis: rgb(125.4, 178.8, 238.2);--bs-secondary-text-emphasis: rgb(133.2, 136.8, 140.4);--bs-success-text-emphasis: rgb(139.8, 211.2, 116.4);--bs-info-text-emphasis: rgb(193.8, 152.4, 214.2);--bs-warning-text-emphasis: rgb(255, 172.2, 116.4);--bs-danger-text-emphasis: rgb(255, 102, 136.2);--bs-light-text-emphasis: #f8f9fa;--bs-dark-text-emphasis: #dee2e6;--bs-primary-bg-subtle: rgb(7.8, 25.6, 45.4);--bs-secondary-bg-subtle: rgb(10.4, 11.6, 12.8);--bs-success-bg-subtle: rgb(12.6, 36.4, 4.8);--bs-info-bg-subtle: rgb(30.6, 16.8, 37.4);--bs-warning-bg-subtle: rgb(51, 23.4, 4.8);--bs-danger-bg-subtle: rgb(51, 0, 11.4);--bs-light-bg-subtle: #343a40;--bs-dark-bg-subtle: #1a1d20;--bs-primary-border-subtle: rgb(23.4, 76.8, 136.2);--bs-secondary-border-subtle: rgb(31.2, 34.8, 38.4);--bs-success-border-subtle: rgb(37.8, 109.2, 14.4);--bs-info-border-subtle: rgb(91.8, 50.4, 112.2);--bs-warning-border-subtle: rgb(153, 70.2, 14.4);--bs-danger-border-subtle: rgb(153, 0, 34.2);--bs-light-border-subtle: #495057;--bs-dark-border-subtle: #343a40;--bs-heading-color: inherit;--bs-link-color: rgb(125.4, 178.8, 238.2);--bs-link-hover-color: rgb(151.32, 194.04, 241.56);--bs-link-color-rgb: 125, 179, 238;--bs-link-hover-color-rgb: 151, 194, 242;--bs-code-color: white;--bs-border-color: #495057;--bs-border-color-translucent: rgba(255, 255, 255, 0.15);--bs-form-valid-color: rgb(139.8, 211.2, 116.4);--bs-form-valid-border-color: rgb(139.8, 211.2, 116.4);--bs-form-invalid-color: rgb(255, 102, 136.2);--bs-form-invalid-border-color: rgb(255, 102, 136.2)}*,*::before,*::after{box-sizing:border-box}:root{font-size:var(--bs-root-font-size)}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:1px solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2;color:var(--bs-heading-color)}h1,.h1{font-size:calc(1.325rem + 0.9vw)}@media(min-width: 1200px){h1,.h1{font-size:2rem}}h2,.h2{font-size:calc(1.29rem + 0.48vw)}@media(min-width: 1200px){h2,.h2{font-size:1.65rem}}h3,.h3{font-size:calc(1.27rem + 0.24vw)}@media(min-width: 1200px){h3,.h3{font-size:1.45rem}}h4,.h4{font-size:1.25rem}h5,.h5{font-size:1.1rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;-ms-text-decoration:underline dotted;-o-text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem;padding:.625rem 1.25rem;border-left:.25rem solid #e9ecef}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}b,strong{font-weight:bolder}small,.small{font-size:0.875em}mark,.mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:0.75em;line-height:0;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}a{color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 1));text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}a:hover{--bs-link-color-rgb: var(--bs-link-hover-color-rgb)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:0.875em;color:#000;background-color:#f8f9fa;line-height:1.5;padding:.5rem;border:1px solid var(--bs-border-color, #dee2e6)}pre code{background-color:rgba(0,0,0,0);font-size:inherit;color:inherit;word-break:normal}code{font-size:0.875em;color:var(--bs-code-color);background-color:#f8f9fa;padding:.125rem .25rem;word-wrap:break-word}a>code{color:inherit}kbd{padding:.4rem .4rem;font-size:0.875em;color:#fff;background-color:#343a40}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:rgba(52,58,64,.75);text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role=button]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type=date]):not([type=datetime-local]):not([type=month]):not([type=week]):not([type=time])::-webkit-calendar-picker-indicator{display:none !important}button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}button:not(:disabled),[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + 0.3vw);line-height:inherit}@media(min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media(min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:0.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:0.875em;color:#6c757d}.blockquote-footer::before{content:"— "}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:0.875em;color:rgba(52,58,64,.75)}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;width:100%;padding-right:calc(var(--bs-gutter-x)*.5);padding-left:calc(var(--bs-gutter-x)*.5);margin-right:auto;margin-left:auto}@media(min-width: 576px){.container-sm,.container{max-width:540px}}@media(min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media(min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media(min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media(min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}body.quarto-light .dark-content{display:none !important}body.quarto-dark .light-content{display:none !important}:root{--bs-breakpoint-xs: 0;--bs-breakpoint-sm: 576px;--bs-breakpoint-md: 768px;--bs-breakpoint-lg: 992px;--bs-breakpoint-xl: 1200px;--bs-breakpoint-xxl: 1400px}.grid{display:grid;grid-template-rows:repeat(var(--bs-rows, 1), 1fr);grid-template-columns:repeat(var(--bs-columns, 12), 1fr);gap:var(--bs-gap, 1.5rem)}.grid .g-col-1{grid-column:auto/span 1}.grid .g-col-2{grid-column:auto/span 2}.grid .g-col-3{grid-column:auto/span 3}.grid .g-col-4{grid-column:auto/span 4}.grid .g-col-5{grid-column:auto/span 5}.grid .g-col-6{grid-column:auto/span 6}.grid .g-col-7{grid-column:auto/span 7}.grid .g-col-8{grid-column:auto/span 8}.grid .g-col-9{grid-column:auto/span 9}.grid .g-col-10{grid-column:auto/span 10}.grid .g-col-11{grid-column:auto/span 11}.grid .g-col-12{grid-column:auto/span 12}.grid .g-start-1{grid-column-start:1}.grid .g-start-2{grid-column-start:2}.grid .g-start-3{grid-column-start:3}.grid .g-start-4{grid-column-start:4}.grid .g-start-5{grid-column-start:5}.grid .g-start-6{grid-column-start:6}.grid .g-start-7{grid-column-start:7}.grid .g-start-8{grid-column-start:8}.grid .g-start-9{grid-column-start:9}.grid .g-start-10{grid-column-start:10}.grid .g-start-11{grid-column-start:11}@media(min-width: 576px){.grid .g-col-sm-1{grid-column:auto/span 1}.grid .g-col-sm-2{grid-column:auto/span 2}.grid .g-col-sm-3{grid-column:auto/span 3}.grid .g-col-sm-4{grid-column:auto/span 4}.grid .g-col-sm-5{grid-column:auto/span 5}.grid .g-col-sm-6{grid-column:auto/span 6}.grid .g-col-sm-7{grid-column:auto/span 7}.grid .g-col-sm-8{grid-column:auto/span 8}.grid .g-col-sm-9{grid-column:auto/span 9}.grid .g-col-sm-10{grid-column:auto/span 10}.grid .g-col-sm-11{grid-column:auto/span 11}.grid .g-col-sm-12{grid-column:auto/span 12}.grid .g-start-sm-1{grid-column-start:1}.grid .g-start-sm-2{grid-column-start:2}.grid .g-start-sm-3{grid-column-start:3}.grid .g-start-sm-4{grid-column-start:4}.grid .g-start-sm-5{grid-column-start:5}.grid .g-start-sm-6{grid-column-start:6}.grid .g-start-sm-7{grid-column-start:7}.grid .g-start-sm-8{grid-column-start:8}.grid .g-start-sm-9{grid-column-start:9}.grid .g-start-sm-10{grid-column-start:10}.grid .g-start-sm-11{grid-column-start:11}}@media(min-width: 768px){.grid .g-col-md-1{grid-column:auto/span 1}.grid .g-col-md-2{grid-column:auto/span 2}.grid .g-col-md-3{grid-column:auto/span 3}.grid .g-col-md-4{grid-column:auto/span 4}.grid .g-col-md-5{grid-column:auto/span 5}.grid .g-col-md-6{grid-column:auto/span 6}.grid .g-col-md-7{grid-column:auto/span 7}.grid .g-col-md-8{grid-column:auto/span 8}.grid .g-col-md-9{grid-column:auto/span 9}.grid .g-col-md-10{grid-column:auto/span 10}.grid .g-col-md-11{grid-column:auto/span 11}.grid .g-col-md-12{grid-column:auto/span 12}.grid .g-start-md-1{grid-column-start:1}.grid .g-start-md-2{grid-column-start:2}.grid .g-start-md-3{grid-column-start:3}.grid .g-start-md-4{grid-column-start:4}.grid .g-start-md-5{grid-column-start:5}.grid .g-start-md-6{grid-column-start:6}.grid .g-start-md-7{grid-column-start:7}.grid .g-start-md-8{grid-column-start:8}.grid .g-start-md-9{grid-column-start:9}.grid .g-start-md-10{grid-column-start:10}.grid .g-start-md-11{grid-column-start:11}}@media(min-width: 992px){.grid .g-col-lg-1{grid-column:auto/span 1}.grid .g-col-lg-2{grid-column:auto/span 2}.grid .g-col-lg-3{grid-column:auto/span 3}.grid .g-col-lg-4{grid-column:auto/span 4}.grid .g-col-lg-5{grid-column:auto/span 5}.grid .g-col-lg-6{grid-column:auto/span 6}.grid .g-col-lg-7{grid-column:auto/span 7}.grid .g-col-lg-8{grid-column:auto/span 8}.grid .g-col-lg-9{grid-column:auto/span 9}.grid .g-col-lg-10{grid-column:auto/span 10}.grid .g-col-lg-11{grid-column:auto/span 11}.grid .g-col-lg-12{grid-column:auto/span 12}.grid .g-start-lg-1{grid-column-start:1}.grid .g-start-lg-2{grid-column-start:2}.grid .g-start-lg-3{grid-column-start:3}.grid .g-start-lg-4{grid-column-start:4}.grid .g-start-lg-5{grid-column-start:5}.grid .g-start-lg-6{grid-column-start:6}.grid .g-start-lg-7{grid-column-start:7}.grid .g-start-lg-8{grid-column-start:8}.grid .g-start-lg-9{grid-column-start:9}.grid .g-start-lg-10{grid-column-start:10}.grid .g-start-lg-11{grid-column-start:11}}@media(min-width: 1200px){.grid .g-col-xl-1{grid-column:auto/span 1}.grid .g-col-xl-2{grid-column:auto/span 2}.grid .g-col-xl-3{grid-column:auto/span 3}.grid .g-col-xl-4{grid-column:auto/span 4}.grid .g-col-xl-5{grid-column:auto/span 5}.grid .g-col-xl-6{grid-column:auto/span 6}.grid .g-col-xl-7{grid-column:auto/span 7}.grid .g-col-xl-8{grid-column:auto/span 8}.grid .g-col-xl-9{grid-column:auto/span 9}.grid .g-col-xl-10{grid-column:auto/span 10}.grid .g-col-xl-11{grid-column:auto/span 11}.grid .g-col-xl-12{grid-column:auto/span 12}.grid .g-start-xl-1{grid-column-start:1}.grid .g-start-xl-2{grid-column-start:2}.grid .g-start-xl-3{grid-column-start:3}.grid .g-start-xl-4{grid-column-start:4}.grid .g-start-xl-5{grid-column-start:5}.grid .g-start-xl-6{grid-column-start:6}.grid .g-start-xl-7{grid-column-start:7}.grid .g-start-xl-8{grid-column-start:8}.grid .g-start-xl-9{grid-column-start:9}.grid .g-start-xl-10{grid-column-start:10}.grid .g-start-xl-11{grid-column-start:11}}@media(min-width: 1400px){.grid .g-col-xxl-1{grid-column:auto/span 1}.grid .g-col-xxl-2{grid-column:auto/span 2}.grid .g-col-xxl-3{grid-column:auto/span 3}.grid .g-col-xxl-4{grid-column:auto/span 4}.grid .g-col-xxl-5{grid-column:auto/span 5}.grid .g-col-xxl-6{grid-column:auto/span 6}.grid .g-col-xxl-7{grid-column:auto/span 7}.grid .g-col-xxl-8{grid-column:auto/span 8}.grid .g-col-xxl-9{grid-column:auto/span 9}.grid .g-col-xxl-10{grid-column:auto/span 10}.grid .g-col-xxl-11{grid-column:auto/span 11}.grid .g-col-xxl-12{grid-column:auto/span 12}.grid .g-start-xxl-1{grid-column-start:1}.grid .g-start-xxl-2{grid-column-start:2}.grid .g-start-xxl-3{grid-column-start:3}.grid .g-start-xxl-4{grid-column-start:4}.grid .g-start-xxl-5{grid-column-start:5}.grid .g-start-xxl-6{grid-column-start:6}.grid .g-start-xxl-7{grid-column-start:7}.grid .g-start-xxl-8{grid-column-start:8}.grid .g-start-xxl-9{grid-column-start:9}.grid .g-start-xxl-10{grid-column-start:10}.grid .g-start-xxl-11{grid-column-start:11}}.table{--bs-table-color-type: initial;--bs-table-bg-type: initial;--bs-table-color-state: initial;--bs-table-bg-state: initial;--bs-table-color: #343a40;--bs-table-bg: #fff;--bs-table-border-color: #dee2e6;--bs-table-accent-bg: transparent;--bs-table-striped-color: #343a40;--bs-table-striped-bg: rgba(0, 0, 0, 0.05);--bs-table-active-color: #343a40;--bs-table-active-bg: rgba(0, 0, 0, 0.1);--bs-table-hover-color: #343a40;--bs-table-hover-bg: rgba(0, 0, 0, 0.075);width:100%;margin-bottom:1rem;vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;color:var(--bs-table-color-state, var(--bs-table-color-type, var(--bs-table-color)));background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-bg-state, var(--bs-table-bg-type, var(--bs-table-accent-bg)))}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:calc(1px*2) solid rgb(153.5,156.5,159.5)}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--bs-table-color-type: var(--bs-table-striped-color);--bs-table-bg-type: var(--bs-table-striped-bg)}.table-active{--bs-table-color-state: var(--bs-table-active-color);--bs-table-bg-state: var(--bs-table-active-bg)}.table-hover>tbody>tr:hover>*{--bs-table-color-state: var(--bs-table-hover-color);--bs-table-bg-state: var(--bs-table-hover-bg)}.table-primary{--bs-table-color: #000;--bs-table-bg: rgb(211.8, 229.6, 249.4);--bs-table-border-color: rgb(190.62, 206.64, 224.46);--bs-table-striped-bg: rgb(201.21, 218.12, 236.93);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(190.62, 206.64, 224.46);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(195.915, 212.38, 230.695);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color: #000;--bs-table-bg: rgb(214.4, 215.6, 216.8);--bs-table-border-color: rgb(192.96, 194.04, 195.12);--bs-table-striped-bg: rgb(203.68, 204.82, 205.96);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(192.96, 194.04, 195.12);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(198.32, 199.43, 200.54);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color: #000;--bs-table-bg: rgb(216.6, 240.4, 208.8);--bs-table-border-color: rgb(194.94, 216.36, 187.92);--bs-table-striped-bg: rgb(205.77, 228.38, 198.36);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(194.94, 216.36, 187.92);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(200.355, 222.37, 193.14);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color: #000;--bs-table-bg: rgb(234.6, 220.8, 241.4);--bs-table-border-color: rgb(211.14, 198.72, 217.26);--bs-table-striped-bg: rgb(222.87, 209.76, 229.33);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(211.14, 198.72, 217.26);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(217.005, 204.24, 223.295);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color: #000;--bs-table-bg: rgb(255, 227.4, 208.8);--bs-table-border-color: rgb(229.5, 204.66, 187.92);--bs-table-striped-bg: rgb(242.25, 216.03, 198.36);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(229.5, 204.66, 187.92);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(235.875, 210.345, 193.14);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color: #000;--bs-table-bg: rgb(255, 204, 215.4);--bs-table-border-color: rgb(229.5, 183.6, 193.86);--bs-table-striped-bg: rgb(242.25, 193.8, 204.63);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(229.5, 183.6, 193.86);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(235.875, 188.7, 199.245);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color: #000;--bs-table-bg: #f8f9fa;--bs-table-border-color: rgb(223.2, 224.1, 225);--bs-table-striped-bg: rgb(235.6, 236.55, 237.5);--bs-table-striped-color: #000;--bs-table-active-bg: rgb(223.2, 224.1, 225);--bs-table-active-color: #000;--bs-table-hover-bg: rgb(229.4, 230.325, 231.25);--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #fff;--bs-table-bg: #343a40;--bs-table-border-color: rgb(72.3, 77.7, 83.1);--bs-table-striped-bg: rgb(62.15, 67.85, 73.55);--bs-table-striped-color: #fff;--bs-table-active-bg: rgb(72.3, 77.7, 83.1);--bs-table-active-color: #fff;--bs-table-hover-bg: rgb(67.225, 72.775, 78.325);--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media(max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media(max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label,.shiny-input-container .control-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(0.375rem + 1px);padding-bottom:calc(0.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(0.5rem + 1px);padding-bottom:calc(0.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(0.25rem + 1px);padding-bottom:calc(0.25rem + 1px);font-size:0.875rem}.form-text{margin-top:.25rem;font-size:0.875em;color:rgba(52,58,64,.75)}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#343a40;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#fff;background-clip:padding-box;border:1px solid #dee2e6;border-radius:0;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type=file]{overflow:hidden}.form-control[type=file]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#343a40;background-color:#fff;border-color:rgb(147,191.5,241);outline:0;box-shadow:0 0 0 .25rem rgba(39,128,227,.25)}.form-control::-webkit-date-and-time-value{min-width:85px;height:1.5em;margin:0}.form-control::-webkit-datetime-edit{display:block;padding:0}.form-control::placeholder{color:rgba(52,58,64,.75);opacity:1}.form-control:disabled{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-0.375rem -0.75rem;margin-inline-end:.75rem;color:#343a40;background-color:#f8f9fa;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#e9ecef}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#343a40;background-color:rgba(0,0,0,0);border:solid rgba(0,0,0,0);border-width:1px 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(1px * 2));padding:.25rem .5rem;font-size:0.875rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-0.25rem -0.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + calc(1px * 2));padding:.5rem 1rem;font-size:1.25rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-0.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + 0.75rem + calc(1px * 2))}textarea.form-control-sm{min-height:calc(1.5em + 0.5rem + calc(1px * 2))}textarea.form-control-lg{min-height:calc(1.5em + 1rem + calc(1px * 2))}.form-control-color{width:3rem;height:calc(1.5em + 0.75rem + calc(1px * 2));padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important}.form-control-color::-webkit-color-swatch{border:0 !important}.form-control-color.form-control-sm{height:calc(1.5em + 0.5rem + calc(1px * 2))}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + calc(1px * 2))}.form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#343a40;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#fff;background-image:var(--bs-form-select-bg-img),var(--bs-form-select-bg-icon, none);background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #dee2e6;border-radius:0;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:rgb(147,191.5,241);outline:0;box-shadow:0 0 0 .25rem rgba(39,128,227,.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:rgba(0,0,0,0);text-shadow:0 0 0 #343a40}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:0.875rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}[data-bs-theme=dark] .form-select{--bs-form-select-bg-img: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23dee2e6' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e")}.form-check,.shiny-input-container .checkbox,.shiny-input-container .radio{display:block;min-height:1.5rem;padding-left:0;margin-bottom:.125rem}.form-check .form-check-input,.form-check .shiny-input-container .checkbox input,.form-check .shiny-input-container .radio input,.shiny-input-container .checkbox .form-check-input,.shiny-input-container .checkbox .shiny-input-container .checkbox input,.shiny-input-container .checkbox .shiny-input-container .radio input,.shiny-input-container .radio .form-check-input,.shiny-input-container .radio .shiny-input-container .checkbox input,.shiny-input-container .radio .shiny-input-container .radio input{float:left;margin-left:0}.form-check-reverse{padding-right:0;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:0;margin-left:0}.form-check-input,.shiny-input-container .checkbox input,.shiny-input-container .checkbox-inline input,.shiny-input-container .radio input,.shiny-input-container .radio-inline input{--bs-form-check-bg: #fff;width:1em;height:1em;margin-top:.25em;vertical-align:top;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:var(--bs-form-check-bg);background-image:var(--bs-form-check-bg-image);background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid #dee2e6;print-color-adjust:exact}.form-check-input[type=radio],.shiny-input-container .checkbox input[type=radio],.shiny-input-container .checkbox-inline input[type=radio],.shiny-input-container .radio input[type=radio],.shiny-input-container .radio-inline input[type=radio]{border-radius:50%}.form-check-input:active,.shiny-input-container .checkbox input:active,.shiny-input-container .checkbox-inline input:active,.shiny-input-container .radio input:active,.shiny-input-container .radio-inline input:active{filter:brightness(90%)}.form-check-input:focus,.shiny-input-container .checkbox input:focus,.shiny-input-container .checkbox-inline input:focus,.shiny-input-container .radio input:focus,.shiny-input-container .radio-inline input:focus{border-color:rgb(147,191.5,241);outline:0;box-shadow:0 0 0 .25rem rgba(39,128,227,.25)}.form-check-input:checked,.shiny-input-container .checkbox input:checked,.shiny-input-container .checkbox-inline input:checked,.shiny-input-container .radio input:checked,.shiny-input-container .radio-inline input:checked{background-color:#2780e3;border-color:#2780e3}.form-check-input:checked[type=checkbox],.shiny-input-container .checkbox input:checked[type=checkbox],.shiny-input-container .checkbox-inline input:checked[type=checkbox],.shiny-input-container .radio input:checked[type=checkbox],.shiny-input-container .radio-inline input:checked[type=checkbox]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type=radio],.shiny-input-container .checkbox input:checked[type=radio],.shiny-input-container .checkbox-inline input:checked[type=radio],.shiny-input-container .radio input:checked[type=radio],.shiny-input-container .radio-inline input:checked[type=radio]{--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type=checkbox]:indeterminate,.shiny-input-container .checkbox input[type=checkbox]:indeterminate,.shiny-input-container .checkbox-inline input[type=checkbox]:indeterminate,.shiny-input-container .radio input[type=checkbox]:indeterminate,.shiny-input-container .radio-inline input[type=checkbox]:indeterminate{background-color:#2780e3;border-color:#2780e3;--bs-form-check-bg-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled,.shiny-input-container .checkbox input:disabled,.shiny-input-container .checkbox-inline input:disabled,.shiny-input-container .radio input:disabled,.shiny-input-container .radio-inline input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input[disabled]~span,.form-check-input:disabled~.form-check-label,.form-check-input:disabled~span,.shiny-input-container .checkbox input[disabled]~.form-check-label,.shiny-input-container .checkbox input[disabled]~span,.shiny-input-container .checkbox input:disabled~.form-check-label,.shiny-input-container .checkbox input:disabled~span,.shiny-input-container .checkbox-inline input[disabled]~.form-check-label,.shiny-input-container .checkbox-inline input[disabled]~span,.shiny-input-container .checkbox-inline input:disabled~.form-check-label,.shiny-input-container .checkbox-inline input:disabled~span,.shiny-input-container .radio input[disabled]~.form-check-label,.shiny-input-container .radio input[disabled]~span,.shiny-input-container .radio input:disabled~.form-check-label,.shiny-input-container .radio input:disabled~span,.shiny-input-container .radio-inline input[disabled]~.form-check-label,.shiny-input-container .radio-inline input[disabled]~span,.shiny-input-container .radio-inline input:disabled~.form-check-label,.shiny-input-container .radio-inline input:disabled~span{cursor:default;opacity:.5}.form-check-label,.shiny-input-container .checkbox label,.shiny-input-container .checkbox-inline label,.shiny-input-container .radio label,.shiny-input-container .radio-inline label{cursor:pointer}.form-switch{padding-left:2.5em}.form-switch .form-check-input{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e");width:2em;margin-left:-2.5em;background-image:var(--bs-form-switch-bg);background-position:left center;transition:background-position .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgb%28147, 191.5, 241%29'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}[data-bs-theme=dark] .form-switch .form-check-input:not(:checked):not(:focus){--bs-form-switch-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%28255, 255, 255, 0.25%29'/%3e%3c/svg%3e")}.form-range{width:100%;height:1.5rem;padding:0;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:rgba(0,0,0,0)}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(39,128,227,.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(39,128,227,.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-0.25rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#2780e3;border:0;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:rgb(190.2,216.9,246.6)}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#f8f9fa;border-color:rgba(0,0,0,0)}.form-range::-moz-range-thumb{width:1rem;height:1rem;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;background-color:#2780e3;border:0;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:rgb(190.2,216.9,246.6)}.form-range::-moz-range-track{width:100%;height:.5rem;color:rgba(0,0,0,0);cursor:pointer;background-color:#f8f9fa;border-color:rgba(0,0,0,0)}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:rgba(52,58,64,.75)}.form-range:disabled::-moz-range-thumb{background-color:rgba(52,58,64,.75)}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + calc(1px * 2));min-height:calc(3.5rem + calc(1px * 2));line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;z-index:2;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:1px solid rgba(0,0,0,0);transform-origin:0 0;transition:opacity .1s ease-in-out,transform .1s ease-in-out}@media(prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:rgba(0,0,0,0)}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{color:rgba(var(--bs-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:focus~label::after,.form-floating>.form-control:not(:placeholder-shown)~label::after,.form-floating>.form-control-plaintext~label::after,.form-floating>.form-select~label::after{position:absolute;inset:1rem .375rem;z-index:-1;height:1.5em;content:"";background-color:#fff}.form-floating>.form-control:-webkit-autofill~label{color:rgba(var(--bs-body-color-rgb), 0.65);transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control-plaintext~label{border-width:1px 0}.form-floating>:disabled~label,.form-floating>.form-control:disabled~label{color:#6c757d}.form-floating>:disabled~label::after,.form-floating>.form-control:disabled~label::after{background-color:#e9ecef}.input-group{position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:stretch;-webkit-align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#343a40;text-align:center;white-space:nowrap;background-color:#f8f9fa;border:1px solid #dee2e6}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:0.875rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:calc(1px*-1)}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#3fb618}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:#3fb618}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#3fb618;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%233fb618' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#3fb618;box-shadow:0 0 0 .25rem rgba(63,182,24,.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:#3fb618}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%233fb618' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:#3fb618;box-shadow:0 0 0 .25rem rgba(63,182,24,.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:#3fb618}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#3fb618}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(63,182,24,.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#3fb618}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:0.875em;color:#ff0039}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:0.875rem;color:#fff;background-color:#ff0039}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#ff0039;padding-right:calc(1.5em + 0.75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ff0039'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ff0039' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(0.375em + 0.1875rem) center;background-size:calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#ff0039;box-shadow:0 0 0 .25rem rgba(255,0,57,.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + 0.75rem);background-position:top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:#ff0039}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{--bs-form-select-bg-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23ff0039'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23ff0039' stroke='none'/%3e%3c/svg%3e");padding-right:4.125rem;background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(0.75em + 0.375rem) calc(0.75em + 0.375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:#ff0039;box-shadow:0 0 0 .25rem rgba(255,0,57,.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3rem + calc(1.5em + 0.75rem))}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:#ff0039}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#ff0039}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(255,0,57,.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#ff0039}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--bs-btn-padding-x: 0.75rem;--bs-btn-padding-y: 0.375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: #343a40;--bs-btn-bg: transparent;--bs-btn-border-width: 1px;--bs-btn-border-color: transparent;--bs-btn-border-radius: 0.25rem;--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075);--bs-btn-disabled-opacity: 0.65;--bs-btn-focus-box-shadow: 0 0 0 0.25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);background-color:var(--bs-btn-bg);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-default{--bs-btn-color: #fff;--bs-btn-bg: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(44.2, 49.3, 54.4);--bs-btn-hover-border-color: rgb(41.6, 46.4, 51.2);--bs-btn-focus-shadow-rgb: 82, 88, 93;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(41.6, 46.4, 51.2);--bs-btn-active-border-color: rgb(39, 43.5, 48);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #343a40;--bs-btn-disabled-border-color: #343a40}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #2780e3;--bs-btn-border-color: #2780e3;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(33.15, 108.8, 192.95);--bs-btn-hover-border-color: rgb(31.2, 102.4, 181.6);--bs-btn-focus-shadow-rgb: 71, 147, 231;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(31.2, 102.4, 181.6);--bs-btn-active-border-color: rgb(29.25, 96, 170.25);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #2780e3;--bs-btn-disabled-border-color: #2780e3}.btn-secondary{--bs-btn-color: #fff;--bs-btn-bg: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(44.2, 49.3, 54.4);--bs-btn-hover-border-color: rgb(41.6, 46.4, 51.2);--bs-btn-focus-shadow-rgb: 82, 88, 93;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(41.6, 46.4, 51.2);--bs-btn-active-border-color: rgb(39, 43.5, 48);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #343a40;--bs-btn-disabled-border-color: #343a40}.btn-success{--bs-btn-color: #fff;--bs-btn-bg: #3fb618;--bs-btn-border-color: #3fb618;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(53.55, 154.7, 20.4);--bs-btn-hover-border-color: rgb(50.4, 145.6, 19.2);--bs-btn-focus-shadow-rgb: 92, 193, 59;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(50.4, 145.6, 19.2);--bs-btn-active-border-color: rgb(47.25, 136.5, 18);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #3fb618;--bs-btn-disabled-border-color: #3fb618}.btn-info{--bs-btn-color: #fff;--bs-btn-bg: #9954bb;--bs-btn-border-color: #9954bb;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(130.05, 71.4, 158.95);--bs-btn-hover-border-color: rgb(122.4, 67.2, 149.6);--bs-btn-focus-shadow-rgb: 168, 110, 197;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(122.4, 67.2, 149.6);--bs-btn-active-border-color: rgb(114.75, 63, 140.25);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #9954bb;--bs-btn-disabled-border-color: #9954bb}.btn-warning{--bs-btn-color: #fff;--bs-btn-bg: #ff7518;--bs-btn-border-color: #ff7518;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(216.75, 99.45, 20.4);--bs-btn-hover-border-color: rgb(204, 93.6, 19.2);--bs-btn-focus-shadow-rgb: 255, 138, 59;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(204, 93.6, 19.2);--bs-btn-active-border-color: rgb(191.25, 87.75, 18);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #ff7518;--bs-btn-disabled-border-color: #ff7518}.btn-danger{--bs-btn-color: #fff;--bs-btn-bg: #ff0039;--bs-btn-border-color: #ff0039;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(216.75, 0, 48.45);--bs-btn-hover-border-color: rgb(204, 0, 45.6);--bs-btn-focus-shadow-rgb: 255, 38, 87;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(204, 0, 45.6);--bs-btn-active-border-color: rgb(191.25, 0, 42.75);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #ff0039;--bs-btn-disabled-border-color: #ff0039}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: rgb(210.8, 211.65, 212.5);--bs-btn-hover-border-color: rgb(198.4, 199.2, 200);--bs-btn-focus-shadow-rgb: 211, 212, 213;--bs-btn-active-color: #000;--bs-btn-active-bg: rgb(198.4, 199.2, 200);--bs-btn-active-border-color: rgb(186, 186.75, 187.5);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-dark{--bs-btn-color: #fff;--bs-btn-bg: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: rgb(82.45, 87.55, 92.65);--bs-btn-hover-border-color: rgb(72.3, 77.7, 83.1);--bs-btn-focus-shadow-rgb: 82, 88, 93;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(92.6, 97.4, 102.2);--bs-btn-active-border-color: rgb(72.3, 77.7, 83.1);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #343a40;--bs-btn-disabled-border-color: #343a40}.btn-outline-default{--bs-btn-color: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #343a40;--bs-btn-hover-border-color: #343a40;--bs-btn-focus-shadow-rgb: 52, 58, 64;--bs-btn-active-color: #fff;--bs-btn-active-bg: #343a40;--bs-btn-active-border-color: #343a40;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #343a40;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #343a40;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-primary{--bs-btn-color: #2780e3;--bs-btn-border-color: #2780e3;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #2780e3;--bs-btn-hover-border-color: #2780e3;--bs-btn-focus-shadow-rgb: 39, 128, 227;--bs-btn-active-color: #fff;--bs-btn-active-bg: #2780e3;--bs-btn-active-border-color: #2780e3;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #2780e3;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #2780e3;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-secondary{--bs-btn-color: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #343a40;--bs-btn-hover-border-color: #343a40;--bs-btn-focus-shadow-rgb: 52, 58, 64;--bs-btn-active-color: #fff;--bs-btn-active-bg: #343a40;--bs-btn-active-border-color: #343a40;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #343a40;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #343a40;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-success{--bs-btn-color: #3fb618;--bs-btn-border-color: #3fb618;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #3fb618;--bs-btn-hover-border-color: #3fb618;--bs-btn-focus-shadow-rgb: 63, 182, 24;--bs-btn-active-color: #fff;--bs-btn-active-bg: #3fb618;--bs-btn-active-border-color: #3fb618;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #3fb618;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #3fb618;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-info{--bs-btn-color: #9954bb;--bs-btn-border-color: #9954bb;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #9954bb;--bs-btn-hover-border-color: #9954bb;--bs-btn-focus-shadow-rgb: 153, 84, 187;--bs-btn-active-color: #fff;--bs-btn-active-bg: #9954bb;--bs-btn-active-border-color: #9954bb;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #9954bb;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #9954bb;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-warning{--bs-btn-color: #ff7518;--bs-btn-border-color: #ff7518;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #ff7518;--bs-btn-hover-border-color: #ff7518;--bs-btn-focus-shadow-rgb: 255, 117, 24;--bs-btn-active-color: #fff;--bs-btn-active-bg: #ff7518;--bs-btn-active-border-color: #ff7518;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ff7518;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ff7518;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-danger{--bs-btn-color: #ff0039;--bs-btn-border-color: #ff0039;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #ff0039;--bs-btn-hover-border-color: #ff0039;--bs-btn-focus-shadow-rgb: 255, 0, 57;--bs-btn-active-color: #fff;--bs-btn-active-bg: #ff0039;--bs-btn-active-border-color: #ff0039;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #ff0039;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ff0039;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-light{--bs-btn-color: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #f8f9fa;--bs-btn-hover-border-color: #f8f9fa;--bs-btn-focus-shadow-rgb: 248, 249, 250;--bs-btn-active-color: #000;--bs-btn-active-bg: #f8f9fa;--bs-btn-active-border-color: #f8f9fa;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #f8f9fa;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #f8f9fa;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-dark{--bs-btn-color: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #343a40;--bs-btn-hover-border-color: #343a40;--bs-btn-focus-shadow-rgb: 52, 58, 64;--bs-btn-active-color: #fff;--bs-btn-active-bg: #343a40;--bs-btn-active-border-color: #343a40;--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #343a40;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #343a40;--bs-btn-bg: transparent;--bs-gradient: none}.btn-link{--bs-btn-font-weight: 400;--bs-btn-color: #2761e3;--bs-btn-bg: transparent;--bs-btn-border-color: transparent;--bs-btn-hover-color: rgb(31.2, 77.6, 181.6);--bs-btn-hover-border-color: transparent;--bs-btn-active-color: rgb(31.2, 77.6, 181.6);--bs-btn-active-border-color: transparent;--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-border-color: transparent;--bs-btn-box-shadow: 0 0 0 #000;--bs-btn-focus-shadow-rgb: 71, 121, 231;text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y: 0.5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius: 0.5rem}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: 0.25rem;--bs-btn-padding-x: 0.5rem;--bs-btn-font-size:0.875rem;--bs-btn-border-radius: 0.2em}.fade{transition:opacity .15s linear}@media(prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height .2s ease}@media(prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width .35s ease}@media(prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart,.dropup-center,.dropdown-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid rgba(0,0,0,0);border-bottom:0;border-left:.3em solid rgba(0,0,0,0)}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex: 1000;--bs-dropdown-min-width: 10rem;--bs-dropdown-padding-x: 0;--bs-dropdown-padding-y: 0.5rem;--bs-dropdown-spacer: 0.125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color: #343a40;--bs-dropdown-bg: #fff;--bs-dropdown-border-color: rgba(0, 0, 0, 0.175);--bs-dropdown-border-radius: 0.25rem;--bs-dropdown-border-width: 1px;--bs-dropdown-inner-border-radius: calc(0.25rem - 1px);--bs-dropdown-divider-bg: rgba(0, 0, 0, 0.175);--bs-dropdown-divider-margin-y: 0.5rem;--bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-dropdown-link-color: #343a40;--bs-dropdown-link-hover-color: #343a40;--bs-dropdown-link-hover-bg: #f8f9fa;--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #2780e3;--bs-dropdown-link-disabled-color: rgba(52, 58, 64, 0.5);--bs-dropdown-item-padding-x: 1rem;--bs-dropdown-item-padding-y: 0.25rem;--bs-dropdown-header-color: #6c757d;--bs-dropdown-header-padding-x: 1rem;--bs-dropdown-header-padding-y: 0.5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media(min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media(min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid rgba(0,0,0,0);border-bottom:.3em solid;border-left:.3em solid rgba(0,0,0,0)}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:0;border-bottom:.3em solid rgba(0,0,0,0);border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid rgba(0,0,0,0);border-right:.3em solid;border-bottom:.3em solid rgba(0,0,0,0)}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap;background-color:rgba(0,0,0,0);border:0}.dropdown-item:hover,.dropdown-item:focus{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:rgba(0,0,0,0)}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:0.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color: #dee2e6;--bs-dropdown-bg: #343a40;--bs-dropdown-border-color: rgba(0, 0, 0, 0.175);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color: #dee2e6;--bs-dropdown-link-hover-color: #fff;--bs-dropdown-divider-bg: rgba(0, 0, 0, 0.175);--bs-dropdown-link-hover-bg: rgba(255, 255, 255, 0.15);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #2780e3;--bs-dropdown-link-disabled-color: #adb5bd;--bs-dropdown-header-color: #adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;justify-content:flex-start;-webkit-justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:calc(1px*-1)}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;-webkit-flex-direction:column;align-items:flex-start;-webkit-align-items:flex-start;justify-content:center;-webkit-justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:calc(1px*-1)}.nav{--bs-nav-link-padding-x: 1rem;--bs-nav-link-padding-y: 0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: #2761e3;--bs-nav-link-hover-color: rgb(31.2, 77.6, 181.6);--bs-nav-link-disabled-color: rgba(52, 58, 64, 0.75);display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background:none;border:0;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out}@media(prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--bs-nav-link-hover-color)}.nav-link:focus-visible{outline:0;box-shadow:0 0 0 .25rem rgba(39,128,227,.25)}.nav-link.disabled,.nav-link:disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width: 1px;--bs-nav-tabs-border-color: #dee2e6;--bs-nav-tabs-border-radius: 0.25rem;--bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;--bs-nav-tabs-link-active-color: #000;--bs-nav-tabs-link-active-bg: #fff;--bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff;border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1*var(--bs-nav-tabs-border-width));border:var(--bs-nav-tabs-border-width) solid rgba(0,0,0,0)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1*var(--bs-nav-tabs-border-width))}.nav-pills{--bs-nav-pills-border-radius: 0.25rem;--bs-nav-pills-link-active-color: #fff;--bs-nav-pills-link-active-bg: #2780e3}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-underline{--bs-nav-underline-gap: 1rem;--bs-nav-underline-border-width: 0.125rem;--bs-nav-underline-link-active-color: #000;gap:var(--bs-nav-underline-gap)}.nav-underline .nav-link{padding-right:0;padding-left:0;border-bottom:var(--bs-nav-underline-border-width) solid rgba(0,0,0,0)}.nav-underline .nav-link:hover,.nav-underline .nav-link:focus{border-bottom-color:currentcolor}.nav-underline .nav-link.active,.nav-underline .show>.nav-link{font-weight:700;color:var(--bs-nav-underline-link-active-color);border-bottom-color:currentcolor}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;-webkit-flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;-webkit-flex-basis:0;flex-grow:1;-webkit-flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x: 0;--bs-navbar-padding-y: 0.5rem;--bs-navbar-color: rgb(84.32, 84.66, 85);--bs-navbar-hover-color: rgba(31.2, 77.6, 181.6, 0.8);--bs-navbar-disabled-color: rgba(84.32, 84.66, 85, 0.75);--bs-navbar-active-color: rgb(31.2, 77.6, 181.6);--bs-navbar-brand-padding-y: 0.3125rem;--bs-navbar-brand-margin-end: 1rem;--bs-navbar-brand-font-size: 1.25rem;--bs-navbar-brand-color: rgb(84.32, 84.66, 85);--bs-navbar-brand-hover-color: rgb(31.2, 77.6, 181.6);--bs-navbar-nav-link-padding-x: 0.5rem;--bs-navbar-toggler-padding-y: 0.25;--bs-navbar-toggler-padding-x: 0;--bs-navbar-toggler-font-size: 1.25rem;--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgb%2884.32, 84.66, 85%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color: rgba(84.32, 84.66, 85, 0);--bs-navbar-toggler-border-radius: 0.25rem;--bs-navbar-toggler-focus-width: 0.25rem;--bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;display:-webkit-flex;flex-wrap:inherit;-webkit-flex-wrap:inherit;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x: 0;--bs-nav-link-padding-y: 0.5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-navbar-color);--bs-nav-link-hover-color: var(--bs-navbar-hover-color);--bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link.active,.navbar-nav .nav-link.show{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;-webkit-flex-basis:100%;flex-grow:1;-webkit-flex-grow:1;align-items:center;-webkit-align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:rgba(0,0,0,0);border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);transition:var(--bs-navbar-toggler-transition)}@media(prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media(min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media(min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:rgba(0,0,0,0) !important;border:0 !important;transform:none !important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}.navbar-dark,.navbar[data-bs-theme=dark]{--bs-navbar-color: rgb(84.32, 84.66, 85);--bs-navbar-hover-color: rgba(31.2, 77.6, 181.6, 0.8);--bs-navbar-disabled-color: rgba(84.32, 84.66, 85, 0.75);--bs-navbar-active-color: rgb(31.2, 77.6, 181.6);--bs-navbar-brand-color: rgb(84.32, 84.66, 85);--bs-navbar-brand-hover-color: rgb(31.2, 77.6, 181.6);--bs-navbar-toggler-border-color: rgba(84.32, 84.66, 85, 0);--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgb%2884.32, 84.66, 85%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}[data-bs-theme=dark] .navbar-toggler-icon{--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgb%2884.32, 84.66, 85%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: 0.5rem;--bs-card-title-color: ;--bs-card-subtitle-color: ;--bs-card-border-width: 1px;--bs-card-border-color: rgba(0, 0, 0, 0.175);--bs-card-border-radius: 0.25rem;--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(0.25rem - 1px);--bs-card-cap-padding-y: 0.5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(52, 58, 64, 0.25);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: #fff;--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: 0.75rem;position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;min-width:0;height:var(--bs-card-height);color:var(--bs-body-color);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0}.card>.list-group:last-child{border-bottom-width:0}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;-webkit-flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y);color:var(--bs-card-title-color)}.card-subtitle{margin-top:calc(-0.5*var(--bs-card-title-spacer-y));margin-bottom:0;color:var(--bs-card-subtitle-color)}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header-tabs{margin-right:calc(-0.5*var(--bs-card-cap-padding-x));margin-bottom:calc(-1*var(--bs-card-cap-padding-y));margin-left:calc(-0.5*var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-0.5*var(--bs-card-cap-padding-x));margin-left:calc(-0.5*var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media(min-width: 576px){.card-group{display:flex;display:-webkit-flex;flex-flow:row wrap;-webkit-flex-flow:row wrap}.card-group>.card{flex:1 0 0%;-webkit-flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}}.accordion{--bs-accordion-color: #343a40;--bs-accordion-bg: #fff;--bs-accordion-transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease;--bs-accordion-border-color: #dee2e6;--bs-accordion-border-width: 1px;--bs-accordion-border-radius: 0.25rem;--bs-accordion-inner-border-radius: calc(0.25rem - 1px);--bs-accordion-btn-padding-x: 1.25rem;--bs-accordion-btn-padding-y: 1rem;--bs-accordion-btn-color: #343a40;--bs-accordion-btn-bg: #fff;--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23343a40'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width: 1.25rem;--bs-accordion-btn-icon-transform: rotate(-180deg);--bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='rgb%2815.6, 51.2, 90.8%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-focus-border-color: rgb(147, 191.5, 241);--bs-accordion-btn-focus-box-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.25);--bs-accordion-body-padding-x: 1.25rem;--bs-accordion-body-padding-y: 1rem;--bs-accordion-active-color: rgb(15.6, 51.2, 90.8);--bs-accordion-active-bg: rgb(211.8, 229.6, 249.4)}.accordion-button{position:relative;display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media(prefers-reduced-motion: reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1*var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;-webkit-flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media(prefers-reduced-motion: reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:var(--bs-accordion-btn-focus-border-color);outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:not(:first-of-type){border-top:0}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}[data-bs-theme=dark] .accordion-button::after{--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='rgb%28125.4, 178.8, 238.2%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='rgb%28125.4, 178.8, 238.2%29'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.breadcrumb{--bs-breadcrumb-padding-x: 0;--bs-breadcrumb-padding-y: 0;--bs-breadcrumb-margin-bottom: 1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color: rgba(52, 58, 64, 0.75);--bs-breadcrumb-item-padding-x: 0.5rem;--bs-breadcrumb-item-active-color: rgba(52, 58, 64, 0.75);display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, ">") /* rtl: var(--bs-breadcrumb-divider, ">") */}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x: 0.75rem;--bs-pagination-padding-y: 0.375rem;--bs-pagination-font-size:1rem;--bs-pagination-color: #2761e3;--bs-pagination-bg: #fff;--bs-pagination-border-width: 1px;--bs-pagination-border-color: #dee2e6;--bs-pagination-border-radius: 0.25rem;--bs-pagination-hover-color: rgb(31.2, 77.6, 181.6);--bs-pagination-hover-bg: #f8f9fa;--bs-pagination-hover-border-color: #dee2e6;--bs-pagination-focus-color: rgb(31.2, 77.6, 181.6);--bs-pagination-focus-bg: #e9ecef;--bs-pagination-focus-box-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.25);--bs-pagination-active-color: #fff;--bs-pagination-active-bg: #2780e3;--bs-pagination-active-border-color: #2780e3;--bs-pagination-disabled-color: rgba(52, 58, 64, 0.75);--bs-pagination-disabled-bg: #e9ecef;--bs-pagination-disabled-border-color: #dee2e6;display:flex;display:-webkit-flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media(prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.page-link.active,.active>.page-link{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.page-link.disabled,.disabled>.page-link{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:calc(1px*-1)}.pagination-lg{--bs-pagination-padding-x: 1.5rem;--bs-pagination-padding-y: 0.75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius: 0.5rem}.pagination-sm{--bs-pagination-padding-x: 0.5rem;--bs-pagination-padding-y: 0.25rem;--bs-pagination-font-size:0.875rem;--bs-pagination-border-radius: 0.2em}.badge{--bs-badge-padding-x: 0.65em;--bs-badge-padding-y: 0.35em;--bs-badge-font-size:0.75em;--bs-badge-font-weight: 700;--bs-badge-color: #fff;--bs-badge-border-radius: 0.25rem;display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg: transparent;--bs-alert-padding-x: 1rem;--bs-alert-padding-y: 1rem;--bs-alert-margin-bottom: 1rem;--bs-alert-color: inherit;--bs-alert-border-color: transparent;--bs-alert-border: 0 solid var(--bs-alert-border-color);--bs-alert-border-radius: 0.25rem;--bs-alert-link-color: inherit;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border)}.alert-heading{color:inherit}.alert-link{font-weight:700;color:var(--bs-alert-link-color)}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-default{--bs-alert-color: var(--bs-default-text-emphasis);--bs-alert-bg: var(--bs-default-bg-subtle);--bs-alert-border-color: var(--bs-default-border-subtle);--bs-alert-link-color: var(--bs-default-text-emphasis)}.alert-primary{--bs-alert-color: var(--bs-primary-text-emphasis);--bs-alert-bg: var(--bs-primary-bg-subtle);--bs-alert-border-color: var(--bs-primary-border-subtle);--bs-alert-link-color: var(--bs-primary-text-emphasis)}.alert-secondary{--bs-alert-color: var(--bs-secondary-text-emphasis);--bs-alert-bg: var(--bs-secondary-bg-subtle);--bs-alert-border-color: var(--bs-secondary-border-subtle);--bs-alert-link-color: var(--bs-secondary-text-emphasis)}.alert-success{--bs-alert-color: var(--bs-success-text-emphasis);--bs-alert-bg: var(--bs-success-bg-subtle);--bs-alert-border-color: var(--bs-success-border-subtle);--bs-alert-link-color: var(--bs-success-text-emphasis)}.alert-info{--bs-alert-color: var(--bs-info-text-emphasis);--bs-alert-bg: var(--bs-info-bg-subtle);--bs-alert-border-color: var(--bs-info-border-subtle);--bs-alert-link-color: var(--bs-info-text-emphasis)}.alert-warning{--bs-alert-color: var(--bs-warning-text-emphasis);--bs-alert-bg: var(--bs-warning-bg-subtle);--bs-alert-border-color: var(--bs-warning-border-subtle);--bs-alert-link-color: var(--bs-warning-text-emphasis)}.alert-danger{--bs-alert-color: var(--bs-danger-text-emphasis);--bs-alert-bg: var(--bs-danger-bg-subtle);--bs-alert-border-color: var(--bs-danger-border-subtle);--bs-alert-link-color: var(--bs-danger-text-emphasis)}.alert-light{--bs-alert-color: var(--bs-light-text-emphasis);--bs-alert-bg: var(--bs-light-bg-subtle);--bs-alert-border-color: var(--bs-light-border-subtle);--bs-alert-link-color: var(--bs-light-text-emphasis)}.alert-dark{--bs-alert-color: var(--bs-dark-text-emphasis);--bs-alert-bg: var(--bs-dark-bg-subtle);--bs-alert-border-color: var(--bs-dark-border-subtle);--bs-alert-link-color: var(--bs-dark-text-emphasis)}@keyframes progress-bar-stripes{0%{background-position-x:.5rem}}.progress,.progress-stacked{--bs-progress-height: 0.5rem;--bs-progress-font-size:0.75rem;--bs-progress-bg: #e9ecef;--bs-progress-border-radius: 0.25rem;--bs-progress-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075);--bs-progress-bar-color: #fff;--bs-progress-bar-bg: #2780e3;--bs-progress-bar-transition: width 0.6s ease;display:flex;display:-webkit-flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg)}.progress-bar{display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;justify-content:center;-webkit-justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media(prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-stacked>.progress{overflow:visible}.progress-stacked>.progress>.progress-bar{width:100%}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media(prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color: #343a40;--bs-list-group-bg: #fff;--bs-list-group-border-color: #dee2e6;--bs-list-group-border-width: 1px;--bs-list-group-border-radius: 0.25rem;--bs-list-group-item-padding-x: 1rem;--bs-list-group-item-padding-y: 0.5rem;--bs-list-group-action-color: rgba(52, 58, 64, 0.75);--bs-list-group-action-hover-color: #000;--bs-list-group-action-hover-bg: #f8f9fa;--bs-list-group-action-active-color: #343a40;--bs-list-group-action-active-bg: #e9ecef;--bs-list-group-disabled-color: rgba(52, 58, 64, 0.75);--bs-list-group-disabled-bg: #fff;--bs-list-group-active-color: #fff;--bs-list-group-active-bg: #2780e3;--bs-list-group-active-border-color: #2780e3;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1*var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media(min-width: 576px){.list-group-horizontal-sm{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 768px){.list-group-horizontal-md{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 992px){.list-group-horizontal-lg{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 1200px){.list-group-horizontal-xl{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media(min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1*var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-default{--bs-list-group-color: var(--bs-default-text-emphasis);--bs-list-group-bg: var(--bs-default-bg-subtle);--bs-list-group-border-color: var(--bs-default-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-default-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-default-border-subtle);--bs-list-group-active-color: var(--bs-default-bg-subtle);--bs-list-group-active-bg: var(--bs-default-text-emphasis);--bs-list-group-active-border-color: var(--bs-default-text-emphasis)}.list-group-item-primary{--bs-list-group-color: var(--bs-primary-text-emphasis);--bs-list-group-bg: var(--bs-primary-bg-subtle);--bs-list-group-border-color: var(--bs-primary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-primary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-primary-border-subtle);--bs-list-group-active-color: var(--bs-primary-bg-subtle);--bs-list-group-active-bg: var(--bs-primary-text-emphasis);--bs-list-group-active-border-color: var(--bs-primary-text-emphasis)}.list-group-item-secondary{--bs-list-group-color: var(--bs-secondary-text-emphasis);--bs-list-group-bg: var(--bs-secondary-bg-subtle);--bs-list-group-border-color: var(--bs-secondary-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-secondary-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-secondary-border-subtle);--bs-list-group-active-color: var(--bs-secondary-bg-subtle);--bs-list-group-active-bg: var(--bs-secondary-text-emphasis);--bs-list-group-active-border-color: var(--bs-secondary-text-emphasis)}.list-group-item-success{--bs-list-group-color: var(--bs-success-text-emphasis);--bs-list-group-bg: var(--bs-success-bg-subtle);--bs-list-group-border-color: var(--bs-success-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-success-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-success-border-subtle);--bs-list-group-active-color: var(--bs-success-bg-subtle);--bs-list-group-active-bg: var(--bs-success-text-emphasis);--bs-list-group-active-border-color: var(--bs-success-text-emphasis)}.list-group-item-info{--bs-list-group-color: var(--bs-info-text-emphasis);--bs-list-group-bg: var(--bs-info-bg-subtle);--bs-list-group-border-color: var(--bs-info-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-info-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-info-border-subtle);--bs-list-group-active-color: var(--bs-info-bg-subtle);--bs-list-group-active-bg: var(--bs-info-text-emphasis);--bs-list-group-active-border-color: var(--bs-info-text-emphasis)}.list-group-item-warning{--bs-list-group-color: var(--bs-warning-text-emphasis);--bs-list-group-bg: var(--bs-warning-bg-subtle);--bs-list-group-border-color: var(--bs-warning-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-warning-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-warning-border-subtle);--bs-list-group-active-color: var(--bs-warning-bg-subtle);--bs-list-group-active-bg: var(--bs-warning-text-emphasis);--bs-list-group-active-border-color: var(--bs-warning-text-emphasis)}.list-group-item-danger{--bs-list-group-color: var(--bs-danger-text-emphasis);--bs-list-group-bg: var(--bs-danger-bg-subtle);--bs-list-group-border-color: var(--bs-danger-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-danger-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-danger-border-subtle);--bs-list-group-active-color: var(--bs-danger-bg-subtle);--bs-list-group-active-bg: var(--bs-danger-text-emphasis);--bs-list-group-active-border-color: var(--bs-danger-text-emphasis)}.list-group-item-light{--bs-list-group-color: var(--bs-light-text-emphasis);--bs-list-group-bg: var(--bs-light-bg-subtle);--bs-list-group-border-color: var(--bs-light-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-light-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-light-border-subtle);--bs-list-group-active-color: var(--bs-light-bg-subtle);--bs-list-group-active-bg: var(--bs-light-text-emphasis);--bs-list-group-active-border-color: var(--bs-light-text-emphasis)}.list-group-item-dark{--bs-list-group-color: var(--bs-dark-text-emphasis);--bs-list-group-bg: var(--bs-dark-bg-subtle);--bs-list-group-border-color: var(--bs-dark-border-subtle);--bs-list-group-action-hover-color: var(--bs-emphasis-color);--bs-list-group-action-hover-bg: var(--bs-dark-border-subtle);--bs-list-group-action-active-color: var(--bs-emphasis-color);--bs-list-group-action-active-bg: var(--bs-dark-border-subtle);--bs-list-group-active-color: var(--bs-dark-bg-subtle);--bs-list-group-active-bg: var(--bs-dark-text-emphasis);--bs-list-group-active-border-color: var(--bs-dark-text-emphasis)}.btn-close{--bs-btn-close-color: #000;--bs-btn-close-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e");--bs-btn-close-opacity: 0.5;--bs-btn-close-hover-opacity: 0.75;--bs-btn-close-focus-shadow: 0 0 0 0.25rem rgba(39, 128, 227, 0.25);--bs-btn-close-focus-opacity: 1;--bs-btn-close-disabled-opacity: 0.25;--bs-btn-close-white-filter: invert(1) grayscale(100%) brightness(200%);box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:var(--bs-btn-close-color);background:rgba(0,0,0,0) var(--bs-btn-close-bg) center/1em auto no-repeat;border:0;opacity:var(--bs-btn-close-opacity)}.btn-close:hover{color:var(--bs-btn-close-color);text-decoration:none;opacity:var(--bs-btn-close-hover-opacity)}.btn-close:focus{outline:0;box-shadow:var(--bs-btn-close-focus-shadow);opacity:var(--bs-btn-close-focus-opacity)}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;opacity:var(--bs-btn-close-disabled-opacity)}.btn-close-white{filter:var(--bs-btn-close-white-filter)}[data-bs-theme=dark] .btn-close{filter:var(--bs-btn-close-white-filter)}.toast{--bs-toast-zindex: 1090;--bs-toast-padding-x: 0.75rem;--bs-toast-padding-y: 0.5rem;--bs-toast-spacing: 1.5rem;--bs-toast-max-width: 350px;--bs-toast-font-size:0.875rem;--bs-toast-color: ;--bs-toast-bg: rgba(255, 255, 255, 0.85);--bs-toast-border-width: 1px;--bs-toast-border-color: rgba(0, 0, 0, 0.175);--bs-toast-border-radius: 0.25rem;--bs-toast-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-toast-header-color: rgba(52, 58, 64, 0.75);--bs-toast-header-bg: rgba(255, 255, 255, 0.85);--bs-toast-header-border-color: rgba(0, 0, 0, 0.175);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex: 1090;position:absolute;z-index:var(--bs-toast-zindex);width:max-content;width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:-o-max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color)}.toast-header .btn-close{margin-right:calc(-0.5*var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex: 1055;--bs-modal-width: 500px;--bs-modal-padding: 1rem;--bs-modal-margin: 0.5rem;--bs-modal-color: ;--bs-modal-bg: #fff;--bs-modal-border-color: rgba(0, 0, 0, 0.175);--bs-modal-border-width: 1px;--bs-modal-border-radius: 0.5rem;--bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-modal-inner-border-radius: calc(0.5rem - 1px);--bs-modal-header-padding-x: 1rem;--bs-modal-header-padding-y: 1rem;--bs-modal-header-padding: 1rem 1rem;--bs-modal-header-border-color: #dee2e6;--bs-modal-header-border-width: 1px;--bs-modal-title-line-height: 1.5;--bs-modal-footer-gap: 0.5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color: #dee2e6;--bs-modal-footer-border-width: 1px;position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform .3s ease-out;transform:translate(0, -50px)}@media(prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin)*2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;min-height:calc(100% - var(--bs-modal-margin)*2)}.modal-content{position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);outline:0}.modal-backdrop{--bs-backdrop-zindex: 1050;--bs-backdrop-bg: #000;--bs-backdrop-opacity: 0.5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y)*.5) calc(var(--bs-modal-header-padding-x)*.5);margin:calc(-0.5*var(--bs-modal-header-padding-y)) calc(-0.5*var(--bs-modal-header-padding-x)) calc(-0.5*var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:flex-end;-webkit-justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap)*.5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap)*.5)}@media(min-width: 576px){.modal{--bs-modal-margin: 1.75rem;--bs-modal-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width: 300px}}@media(min-width: 992px){.modal-lg,.modal-xl{--bs-modal-width: 800px}}@media(min-width: 1200px){.modal-xl{--bs-modal-width: 1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0}.modal-fullscreen .modal-body{overflow-y:auto}@media(max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media(max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media(max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media(max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media(max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex: 1080;--bs-tooltip-max-width: 200px;--bs-tooltip-padding-x: 0.5rem;--bs-tooltip-padding-y: 0.25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:0.875rem;--bs-tooltip-color: #fff;--bs-tooltip-bg: #000;--bs-tooltip-border-radius: 0.25rem;--bs-tooltip-opacity: 0.9;--bs-tooltip-arrow-width: 0.8rem;--bs-tooltip-arrow-height: 0.4rem;z-index:var(--bs-tooltip-zindex);display:block;margin:var(--bs-tooltip-margin);font-family:"Source Sans Pro",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:rgba(0,0,0,0);border-style:solid}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow{bottom:calc(-1*var(--bs-tooltip-arrow-height))}.bs-tooltip-top .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=top] .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow{left:calc(-1*var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-end .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=right] .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width)*.5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow{top:calc(-1*var(--bs-tooltip-arrow-height))}.bs-tooltip-bottom .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=bottom] .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow{right:calc(-1*var(--bs-tooltip-arrow-height));width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-start .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^=left] .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width)*.5) 0 calc(var(--bs-tooltip-arrow-width)*.5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg)}.popover{--bs-popover-zindex: 1070;--bs-popover-max-width: 276px;--bs-popover-font-size:0.875rem;--bs-popover-bg: #fff;--bs-popover-border-width: 1px;--bs-popover-border-color: rgba(0, 0, 0, 0.175);--bs-popover-border-radius: 0.5rem;--bs-popover-inner-border-radius: calc(0.5rem - 1px);--bs-popover-box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);--bs-popover-header-padding-x: 1rem;--bs-popover-header-padding-y: 0.5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color: inherit;--bs-popover-header-bg: #e9ecef;--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: 1rem;--bs-popover-body-color: #343a40;--bs-popover-arrow-width: 1rem;--bs-popover-arrow-height: 0.5rem;--bs-popover-arrow-border: var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:"Source Sans Pro",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::before,.popover .popover-arrow::after{position:absolute;display:block;content:"";border-color:rgba(0,0,0,0);border-style:solid;border-width:0}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow{bottom:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=top]>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow{left:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width)*.5) 0}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=right]>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow{top:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after{border-width:0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=bottom]>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-bottom .popover-header::before,.bs-popover-auto[data-popper-placement^=bottom] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-0.5*var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow{right:calc(-1*(var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width)*.5) 0 calc(var(--bs-popover-arrow-width)*.5) var(--bs-popover-arrow-height)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^=left]>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y;-webkit-touch-action:pan-y;-moz-touch-action:pan-y;-ms-touch-action:pan-y;-o-touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;transition:transform .6s ease-in-out}@media(prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-start),.active.carousel-item-end{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media(prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:center;-webkit-justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity .15s ease}@media(prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;display:-webkit-flex;justify-content:center;-webkit-justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;-webkit-flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid rgba(0,0,0,0);border-bottom:10px solid rgba(0,0,0,0);opacity:.5;transition:opacity .6s ease}@media(prefers-reduced-motion: reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-prev-icon,.carousel-dark .carousel-control-next-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}[data-bs-theme=dark] .carousel .carousel-control-prev-icon,[data-bs-theme=dark] .carousel .carousel-control-next-icon,[data-bs-theme=dark].carousel .carousel-control-prev-icon,[data-bs-theme=dark].carousel .carousel-control-next-icon{filter:invert(1) grayscale(100)}[data-bs-theme=dark] .carousel .carousel-indicators [data-bs-target],[data-bs-theme=dark].carousel .carousel-indicators [data-bs-target]{background-color:#000}[data-bs-theme=dark] .carousel .carousel-caption,[data-bs-theme=dark].carousel .carousel-caption{color:#000}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -0.125em;--bs-spinner-border-width: 0.25em;--bs-spinner-animation-speed: 0.75s;--bs-spinner-animation-name: spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:rgba(0,0,0,0)}.spinner-border-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem;--bs-spinner-border-width: 0.2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -0.125em;--bs-spinner-animation-speed: 0.75s;--bs-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem}@media(prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed: 1.5s}}.offcanvas,.offcanvas-xxl,.offcanvas-xl,.offcanvas-lg,.offcanvas-md,.offcanvas-sm{--bs-offcanvas-zindex: 1045;--bs-offcanvas-width: 400px;--bs-offcanvas-height: 30vh;--bs-offcanvas-padding-x: 1rem;--bs-offcanvas-padding-y: 1rem;--bs-offcanvas-color: #343a40;--bs-offcanvas-bg: #fff;--bs-offcanvas-border-width: 1px;--bs-offcanvas-border-color: rgba(0, 0, 0, 0.175);--bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075);--bs-offcanvas-transition: transform 0.3s ease-in-out;--bs-offcanvas-title-line-height: 1.5}@media(max-width: 575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 575.98px)and (prefers-reduced-motion: reduce){.offcanvas-sm{transition:none}}@media(max-width: 575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.showing,.offcanvas-sm.show:not(.hiding){transform:none}.offcanvas-sm.showing,.offcanvas-sm.hiding,.offcanvas-sm.show{visibility:visible}}@media(min-width: 576px){.offcanvas-sm{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 767.98px)and (prefers-reduced-motion: reduce){.offcanvas-md{transition:none}}@media(max-width: 767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.showing,.offcanvas-md.show:not(.hiding){transform:none}.offcanvas-md.showing,.offcanvas-md.hiding,.offcanvas-md.show{visibility:visible}}@media(min-width: 768px){.offcanvas-md{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 991.98px)and (prefers-reduced-motion: reduce){.offcanvas-lg{transition:none}}@media(max-width: 991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.showing,.offcanvas-lg.show:not(.hiding){transform:none}.offcanvas-lg.showing,.offcanvas-lg.hiding,.offcanvas-lg.show{visibility:visible}}@media(min-width: 992px){.offcanvas-lg{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 1199.98px)and (prefers-reduced-motion: reduce){.offcanvas-xl{transition:none}}@media(max-width: 1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.showing,.offcanvas-xl.show:not(.hiding){transform:none}.offcanvas-xl.showing,.offcanvas-xl.hiding,.offcanvas-xl.show{visibility:visible}}@media(min-width: 1200px){.offcanvas-xl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}@media(max-width: 1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}}@media(max-width: 1399.98px)and (prefers-reduced-motion: reduce){.offcanvas-xxl{transition:none}}@media(max-width: 1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.showing,.offcanvas-xxl.show:not(.hiding){transform:none}.offcanvas-xxl.showing,.offcanvas-xxl.hiding,.offcanvas-xxl.show{visibility:visible}}@media(min-width: 1400px){.offcanvas-xxl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:rgba(0,0,0,0) !important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:rgba(0,0,0,0) !important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:var(--bs-offcanvas-transition)}@media(prefers-reduced-motion: reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.showing,.offcanvas.show:not(.hiding){transform:none}.offcanvas.showing,.offcanvas.hiding,.offcanvas.show{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y)*.5) calc(var(--bs-offcanvas-padding-x)*.5);margin-top:calc(-0.5*var(--bs-offcanvas-padding-y));margin-right:calc(-0.5*var(--bs-offcanvas-padding-x));margin-bottom:calc(-0.5*var(--bs-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height:var(--bs-offcanvas-title-line-height)}.offcanvas-body{flex-grow:1;-webkit-flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{mask-image:linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);-webkit-mask-image:linear-gradient(130deg, #000 55%, rgba(0, 0, 0, 0.8) 75%, #000 95%);mask-size:200% 100%;-webkit-mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{mask-position:-200% 0%;-webkit-mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-default{color:#fff !important;background-color:RGBA(var(--bs-default-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-primary{color:#fff !important;background-color:RGBA(var(--bs-primary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-secondary{color:#fff !important;background-color:RGBA(var(--bs-secondary-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-success{color:#fff !important;background-color:RGBA(var(--bs-success-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-info{color:#fff !important;background-color:RGBA(var(--bs-info-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-warning{color:#fff !important;background-color:RGBA(var(--bs-warning-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-danger{color:#fff !important;background-color:RGBA(var(--bs-danger-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-light{color:#000 !important;background-color:RGBA(var(--bs-light-rgb), var(--bs-bg-opacity, 1)) !important}.text-bg-dark{color:#fff !important;background-color:RGBA(var(--bs-dark-rgb), var(--bs-bg-opacity, 1)) !important}.link-default{color:RGBA(var(--bs-default-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-default-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-default:hover,.link-default:focus{color:RGBA(42, 46, 51, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(42, 46, 51, var(--bs-link-underline-opacity, 1)) !important}.link-primary{color:RGBA(var(--bs-primary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-primary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-primary:hover,.link-primary:focus{color:RGBA(31, 102, 182, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(31, 102, 182, var(--bs-link-underline-opacity, 1)) !important}.link-secondary{color:RGBA(var(--bs-secondary-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-secondary-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-secondary:hover,.link-secondary:focus{color:RGBA(42, 46, 51, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(42, 46, 51, var(--bs-link-underline-opacity, 1)) !important}.link-success{color:RGBA(var(--bs-success-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-success-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-success:hover,.link-success:focus{color:RGBA(50, 146, 19, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(50, 146, 19, var(--bs-link-underline-opacity, 1)) !important}.link-info{color:RGBA(var(--bs-info-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-info-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-info:hover,.link-info:focus{color:RGBA(122, 67, 150, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(122, 67, 150, var(--bs-link-underline-opacity, 1)) !important}.link-warning{color:RGBA(var(--bs-warning-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-warning-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-warning:hover,.link-warning:focus{color:RGBA(204, 94, 19, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(204, 94, 19, var(--bs-link-underline-opacity, 1)) !important}.link-danger{color:RGBA(var(--bs-danger-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-danger-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-danger:hover,.link-danger:focus{color:RGBA(204, 0, 46, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(204, 0, 46, var(--bs-link-underline-opacity, 1)) !important}.link-light{color:RGBA(var(--bs-light-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-light-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-light:hover,.link-light:focus{color:RGBA(249, 250, 251, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(249, 250, 251, var(--bs-link-underline-opacity, 1)) !important}.link-dark{color:RGBA(var(--bs-dark-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-dark-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-dark:hover,.link-dark:focus{color:RGBA(42, 46, 51, var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(42, 46, 51, var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 1)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-body-emphasis:hover,.link-body-emphasis:focus{color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-opacity, 0.75)) !important;text-decoration-color:RGBA(var(--bs-emphasis-color-rgb), var(--bs-link-underline-opacity, 0.75)) !important}.focus-ring:focus{outline:0;box-shadow:var(--bs-focus-ring-x, 0) var(--bs-focus-ring-y, 0) var(--bs-focus-ring-blur, 0) var(--bs-focus-ring-width) var(--bs-focus-ring-color)}.icon-link{display:inline-flex;gap:.375rem;align-items:center;-webkit-align-items:center;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-opacity, 0.5));text-underline-offset:.25em;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden}.icon-link>.bi{flex-shrink:0;-webkit-flex-shrink:0;width:1em;height:1em;fill:currentcolor;transition:.2s ease-in-out transform}@media(prefers-reduced-motion: reduce){.icon-link>.bi{transition:none}}.icon-link-hover:hover>.bi,.icon-link-hover:focus-visible>.bi{transform:var(--bs-icon-link-transform, translate3d(0.25em, 0, 0))}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: 75%}.ratio-16x9{--bs-aspect-ratio: 56.25%}.ratio-21x9{--bs-aspect-ratio: 42.8571428571%}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media(min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media(min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;display:-webkit-flex;flex-direction:row;-webkit-flex-direction:row;align-items:center;-webkit-align-items:center;align-self:stretch;-webkit-align-self:stretch}.vstack{display:flex;display:-webkit-flex;flex:1 1 auto;-webkit-flex:1 1 auto;flex-direction:column;-webkit-flex-direction:column;align-self:stretch;-webkit-align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.visually-hidden:not(caption),.visually-hidden-focusable:not(:focus):not(:focus-within):not(caption){position:absolute !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;-webkit-align-self:stretch;width:1px;min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.object-fit-contain{object-fit:contain !important}.object-fit-cover{object-fit:cover !important}.object-fit-fill{object-fit:fill !important}.object-fit-scale{object-fit:scale-down !important}.object-fit-none{object-fit:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.overflow-x-auto{overflow-x:auto !important}.overflow-x-hidden{overflow-x:hidden !important}.overflow-x-visible{overflow-x:visible !important}.overflow-x-scroll{overflow-x:scroll !important}.overflow-y-auto{overflow-y:auto !important}.overflow-y-hidden{overflow-y:hidden !important}.overflow-y-visible{overflow-y:visible !important}.overflow-y-scroll{overflow-y:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-inline-grid{display:inline-grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15) !important}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175) !important}.shadow-none{box-shadow:none !important}.focus-ring-default{--bs-focus-ring-color: rgba(var(--bs-default-rgb), var(--bs-focus-ring-opacity))}.focus-ring-primary{--bs-focus-ring-color: rgba(var(--bs-primary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-secondary{--bs-focus-ring-color: rgba(var(--bs-secondary-rgb), var(--bs-focus-ring-opacity))}.focus-ring-success{--bs-focus-ring-color: rgba(var(--bs-success-rgb), var(--bs-focus-ring-opacity))}.focus-ring-info{--bs-focus-ring-color: rgba(var(--bs-info-rgb), var(--bs-focus-ring-opacity))}.focus-ring-warning{--bs-focus-ring-color: rgba(var(--bs-warning-rgb), var(--bs-focus-ring-opacity))}.focus-ring-danger{--bs-focus-ring-color: rgba(var(--bs-danger-rgb), var(--bs-focus-ring-opacity))}.focus-ring-light{--bs-focus-ring-color: rgba(var(--bs-light-rgb), var(--bs-focus-ring-opacity))}.focus-ring-dark{--bs-focus-ring-color: rgba(var(--bs-dark-rgb), var(--bs-focus-ring-opacity))}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-0{border:0 !important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-top-0{border-top:0 !important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-start-0{border-left:0 !important}.border-default{--bs-border-opacity: 1;border-color:rgba(var(--bs-default-rgb), var(--bs-border-opacity)) !important}.border-primary{--bs-border-opacity: 1;border-color:rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important}.border-secondary{--bs-border-opacity: 1;border-color:rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important}.border-success{--bs-border-opacity: 1;border-color:rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important}.border-info{--bs-border-opacity: 1;border-color:rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important}.border-warning{--bs-border-opacity: 1;border-color:rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important}.border-danger{--bs-border-opacity: 1;border-color:rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important}.border-light{--bs-border-opacity: 1;border-color:rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important}.border-dark{--bs-border-opacity: 1;border-color:rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important}.border-black{--bs-border-opacity: 1;border-color:rgba(var(--bs-black-rgb), var(--bs-border-opacity)) !important}.border-white{--bs-border-opacity: 1;border-color:rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important}.border-primary-subtle{border-color:var(--bs-primary-border-subtle) !important}.border-secondary-subtle{border-color:var(--bs-secondary-border-subtle) !important}.border-success-subtle{border-color:var(--bs-success-border-subtle) !important}.border-info-subtle{border-color:var(--bs-info-border-subtle) !important}.border-warning-subtle{border-color:var(--bs-warning-border-subtle) !important}.border-danger-subtle{border-color:var(--bs-danger-border-subtle) !important}.border-light-subtle{border-color:var(--bs-light-border-subtle) !important}.border-dark-subtle{border-color:var(--bs-dark-border-subtle) !important}.border-1{border-width:1px !important}.border-2{border-width:2px !important}.border-3{border-width:3px !important}.border-4{border-width:4px !important}.border-5{border-width:5px !important}.border-opacity-10{--bs-border-opacity: 0.1}.border-opacity-25{--bs-border-opacity: 0.25}.border-opacity-50{--bs-border-opacity: 0.5}.border-opacity-75{--bs-border-opacity: 0.75}.border-opacity-100{--bs-border-opacity: 1}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.row-gap-0{row-gap:0 !important}.row-gap-1{row-gap:.25rem !important}.row-gap-2{row-gap:.5rem !important}.row-gap-3{row-gap:1rem !important}.row-gap-4{row-gap:1.5rem !important}.row-gap-5{row-gap:3rem !important}.column-gap-0{column-gap:0 !important}.column-gap-1{column-gap:.25rem !important}.column-gap-2{column-gap:.5rem !important}.column-gap-3{column-gap:1rem !important}.column-gap-4{column-gap:1.5rem !important}.column-gap-5{column-gap:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.325rem + 0.9vw) !important}.fs-2{font-size:calc(1.29rem + 0.48vw) !important}.fs-3{font-size:calc(1.27rem + 0.24vw) !important}.fs-4{font-size:1.25rem !important}.fs-5{font-size:1.1rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-lighter{font-weight:lighter !important}.fw-light{font-weight:300 !important}.fw-normal{font-weight:400 !important}.fw-medium{font-weight:500 !important}.fw-semibold{font-weight:600 !important}.fw-bold{font-weight:700 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-default{--bs-text-opacity: 1;color:rgba(var(--bs-default-rgb), var(--bs-text-opacity)) !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,.5) !important}.text-white-50{--bs-text-opacity: 1;color:hsla(0,0%,100%,.5) !important}.text-body-secondary{--bs-text-opacity: 1;color:var(--bs-secondary-color) !important}.text-body-tertiary{--bs-text-opacity: 1;color:var(--bs-tertiary-color) !important}.text-body-emphasis{--bs-text-opacity: 1;color:var(--bs-emphasis-color) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: 0.25}.text-opacity-50{--bs-text-opacity: 0.5}.text-opacity-75{--bs-text-opacity: 0.75}.text-opacity-100{--bs-text-opacity: 1}.text-primary-emphasis{color:var(--bs-primary-text-emphasis) !important}.text-secondary-emphasis{color:var(--bs-secondary-text-emphasis) !important}.text-success-emphasis{color:var(--bs-success-text-emphasis) !important}.text-info-emphasis{color:var(--bs-info-text-emphasis) !important}.text-warning-emphasis{color:var(--bs-warning-text-emphasis) !important}.text-danger-emphasis{color:var(--bs-danger-text-emphasis) !important}.text-light-emphasis{color:var(--bs-light-text-emphasis) !important}.text-dark-emphasis{color:var(--bs-dark-text-emphasis) !important}.link-opacity-10{--bs-link-opacity: 0.1}.link-opacity-10-hover:hover{--bs-link-opacity: 0.1}.link-opacity-25{--bs-link-opacity: 0.25}.link-opacity-25-hover:hover{--bs-link-opacity: 0.25}.link-opacity-50{--bs-link-opacity: 0.5}.link-opacity-50-hover:hover{--bs-link-opacity: 0.5}.link-opacity-75{--bs-link-opacity: 0.75}.link-opacity-75-hover:hover{--bs-link-opacity: 0.75}.link-opacity-100{--bs-link-opacity: 1}.link-opacity-100-hover:hover{--bs-link-opacity: 1}.link-offset-1{text-underline-offset:.125em !important}.link-offset-1-hover:hover{text-underline-offset:.125em !important}.link-offset-2{text-underline-offset:.25em !important}.link-offset-2-hover:hover{text-underline-offset:.25em !important}.link-offset-3{text-underline-offset:.375em !important}.link-offset-3-hover:hover{text-underline-offset:.375em !important}.link-underline-default{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-default-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-primary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-primary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-secondary{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-secondary-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-success{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-success-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-info{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-info-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-warning{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-warning-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-danger{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-danger-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-light{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-light-rgb), var(--bs-link-underline-opacity)) !important}.link-underline-dark{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-dark-rgb), var(--bs-link-underline-opacity)) !important}.link-underline{--bs-link-underline-opacity: 1;text-decoration-color:rgba(var(--bs-link-color-rgb), var(--bs-link-underline-opacity, 1)) !important}.link-underline-opacity-0{--bs-link-underline-opacity: 0}.link-underline-opacity-0-hover:hover{--bs-link-underline-opacity: 0}.link-underline-opacity-10{--bs-link-underline-opacity: 0.1}.link-underline-opacity-10-hover:hover{--bs-link-underline-opacity: 0.1}.link-underline-opacity-25{--bs-link-underline-opacity: 0.25}.link-underline-opacity-25-hover:hover{--bs-link-underline-opacity: 0.25}.link-underline-opacity-50{--bs-link-underline-opacity: 0.5}.link-underline-opacity-50-hover:hover{--bs-link-underline-opacity: 0.5}.link-underline-opacity-75{--bs-link-underline-opacity: 0.75}.link-underline-opacity-75-hover:hover{--bs-link-underline-opacity: 0.75}.link-underline-opacity-100{--bs-link-underline-opacity: 1}.link-underline-opacity-100-hover:hover{--bs-link-underline-opacity: 1}.bg-default{--bs-bg-opacity: 1;background-color:rgba(var(--bs-default-rgb), var(--bs-bg-opacity)) !important}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-body-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-body-tertiary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-tertiary-bg-rgb), var(--bs-bg-opacity)) !important}.bg-opacity-10{--bs-bg-opacity: 0.1}.bg-opacity-25{--bs-bg-opacity: 0.25}.bg-opacity-50{--bs-bg-opacity: 0.5}.bg-opacity-75{--bs-bg-opacity: 0.75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-primary-subtle{background-color:var(--bs-primary-bg-subtle) !important}.bg-secondary-subtle{background-color:var(--bs-secondary-bg-subtle) !important}.bg-success-subtle{background-color:var(--bs-success-bg-subtle) !important}.bg-info-subtle{background-color:var(--bs-info-bg-subtle) !important}.bg-warning-subtle{background-color:var(--bs-warning-bg-subtle) !important}.bg-danger-subtle{background-color:var(--bs-danger-bg-subtle) !important}.bg-light-subtle{background-color:var(--bs-light-bg-subtle) !important}.bg-dark-subtle{background-color:var(--bs-dark-bg-subtle) !important}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:var(--bs-border-radius) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--bs-border-radius-sm) !important}.rounded-2{border-radius:var(--bs-border-radius) !important}.rounded-3{border-radius:var(--bs-border-radius-lg) !important}.rounded-4{border-radius:var(--bs-border-radius-xl) !important}.rounded-5{border-radius:var(--bs-border-radius-xxl) !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:var(--bs-border-radius-pill) !important}.rounded-top{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-0{border-top-left-radius:0 !important;border-top-right-radius:0 !important}.rounded-top-1{border-top-left-radius:var(--bs-border-radius-sm) !important;border-top-right-radius:var(--bs-border-radius-sm) !important}.rounded-top-2{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-top-3{border-top-left-radius:var(--bs-border-radius-lg) !important;border-top-right-radius:var(--bs-border-radius-lg) !important}.rounded-top-4{border-top-left-radius:var(--bs-border-radius-xl) !important;border-top-right-radius:var(--bs-border-radius-xl) !important}.rounded-top-5{border-top-left-radius:var(--bs-border-radius-xxl) !important;border-top-right-radius:var(--bs-border-radius-xxl) !important}.rounded-top-circle{border-top-left-radius:50% !important;border-top-right-radius:50% !important}.rounded-top-pill{border-top-left-radius:var(--bs-border-radius-pill) !important;border-top-right-radius:var(--bs-border-radius-pill) !important}.rounded-end{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-0{border-top-right-radius:0 !important;border-bottom-right-radius:0 !important}.rounded-end-1{border-top-right-radius:var(--bs-border-radius-sm) !important;border-bottom-right-radius:var(--bs-border-radius-sm) !important}.rounded-end-2{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-end-3{border-top-right-radius:var(--bs-border-radius-lg) !important;border-bottom-right-radius:var(--bs-border-radius-lg) !important}.rounded-end-4{border-top-right-radius:var(--bs-border-radius-xl) !important;border-bottom-right-radius:var(--bs-border-radius-xl) !important}.rounded-end-5{border-top-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-right-radius:var(--bs-border-radius-xxl) !important}.rounded-end-circle{border-top-right-radius:50% !important;border-bottom-right-radius:50% !important}.rounded-end-pill{border-top-right-radius:var(--bs-border-radius-pill) !important;border-bottom-right-radius:var(--bs-border-radius-pill) !important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-0{border-bottom-right-radius:0 !important;border-bottom-left-radius:0 !important}.rounded-bottom-1{border-bottom-right-radius:var(--bs-border-radius-sm) !important;border-bottom-left-radius:var(--bs-border-radius-sm) !important}.rounded-bottom-2{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-bottom-3{border-bottom-right-radius:var(--bs-border-radius-lg) !important;border-bottom-left-radius:var(--bs-border-radius-lg) !important}.rounded-bottom-4{border-bottom-right-radius:var(--bs-border-radius-xl) !important;border-bottom-left-radius:var(--bs-border-radius-xl) !important}.rounded-bottom-5{border-bottom-right-radius:var(--bs-border-radius-xxl) !important;border-bottom-left-radius:var(--bs-border-radius-xxl) !important}.rounded-bottom-circle{border-bottom-right-radius:50% !important;border-bottom-left-radius:50% !important}.rounded-bottom-pill{border-bottom-right-radius:var(--bs-border-radius-pill) !important;border-bottom-left-radius:var(--bs-border-radius-pill) !important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-0{border-bottom-left-radius:0 !important;border-top-left-radius:0 !important}.rounded-start-1{border-bottom-left-radius:var(--bs-border-radius-sm) !important;border-top-left-radius:var(--bs-border-radius-sm) !important}.rounded-start-2{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.rounded-start-3{border-bottom-left-radius:var(--bs-border-radius-lg) !important;border-top-left-radius:var(--bs-border-radius-lg) !important}.rounded-start-4{border-bottom-left-radius:var(--bs-border-radius-xl) !important;border-top-left-radius:var(--bs-border-radius-xl) !important}.rounded-start-5{border-bottom-left-radius:var(--bs-border-radius-xxl) !important;border-top-left-radius:var(--bs-border-radius-xxl) !important}.rounded-start-circle{border-bottom-left-radius:50% !important;border-top-left-radius:50% !important}.rounded-start-pill{border-bottom-left-radius:var(--bs-border-radius-pill) !important;border-top-left-radius:var(--bs-border-radius-pill) !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}.z-n1{z-index:-1 !important}.z-0{z-index:0 !important}.z-1{z-index:1 !important}.z-2{z-index:2 !important}.z-3{z-index:3 !important}@media(min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.object-fit-sm-contain{object-fit:contain !important}.object-fit-sm-cover{object-fit:cover !important}.object-fit-sm-fill{object-fit:fill !important}.object-fit-sm-scale{object-fit:scale-down !important}.object-fit-sm-none{object-fit:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-inline-grid{display:inline-grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.row-gap-sm-0{row-gap:0 !important}.row-gap-sm-1{row-gap:.25rem !important}.row-gap-sm-2{row-gap:.5rem !important}.row-gap-sm-3{row-gap:1rem !important}.row-gap-sm-4{row-gap:1.5rem !important}.row-gap-sm-5{row-gap:3rem !important}.column-gap-sm-0{column-gap:0 !important}.column-gap-sm-1{column-gap:.25rem !important}.column-gap-sm-2{column-gap:.5rem !important}.column-gap-sm-3{column-gap:1rem !important}.column-gap-sm-4{column-gap:1.5rem !important}.column-gap-sm-5{column-gap:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media(min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.object-fit-md-contain{object-fit:contain !important}.object-fit-md-cover{object-fit:cover !important}.object-fit-md-fill{object-fit:fill !important}.object-fit-md-scale{object-fit:scale-down !important}.object-fit-md-none{object-fit:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-inline-grid{display:inline-grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.row-gap-md-0{row-gap:0 !important}.row-gap-md-1{row-gap:.25rem !important}.row-gap-md-2{row-gap:.5rem !important}.row-gap-md-3{row-gap:1rem !important}.row-gap-md-4{row-gap:1.5rem !important}.row-gap-md-5{row-gap:3rem !important}.column-gap-md-0{column-gap:0 !important}.column-gap-md-1{column-gap:.25rem !important}.column-gap-md-2{column-gap:.5rem !important}.column-gap-md-3{column-gap:1rem !important}.column-gap-md-4{column-gap:1.5rem !important}.column-gap-md-5{column-gap:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media(min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.object-fit-lg-contain{object-fit:contain !important}.object-fit-lg-cover{object-fit:cover !important}.object-fit-lg-fill{object-fit:fill !important}.object-fit-lg-scale{object-fit:scale-down !important}.object-fit-lg-none{object-fit:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-inline-grid{display:inline-grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.row-gap-lg-0{row-gap:0 !important}.row-gap-lg-1{row-gap:.25rem !important}.row-gap-lg-2{row-gap:.5rem !important}.row-gap-lg-3{row-gap:1rem !important}.row-gap-lg-4{row-gap:1.5rem !important}.row-gap-lg-5{row-gap:3rem !important}.column-gap-lg-0{column-gap:0 !important}.column-gap-lg-1{column-gap:.25rem !important}.column-gap-lg-2{column-gap:.5rem !important}.column-gap-lg-3{column-gap:1rem !important}.column-gap-lg-4{column-gap:1.5rem !important}.column-gap-lg-5{column-gap:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media(min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.object-fit-xl-contain{object-fit:contain !important}.object-fit-xl-cover{object-fit:cover !important}.object-fit-xl-fill{object-fit:fill !important}.object-fit-xl-scale{object-fit:scale-down !important}.object-fit-xl-none{object-fit:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-inline-grid{display:inline-grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.row-gap-xl-0{row-gap:0 !important}.row-gap-xl-1{row-gap:.25rem !important}.row-gap-xl-2{row-gap:.5rem !important}.row-gap-xl-3{row-gap:1rem !important}.row-gap-xl-4{row-gap:1.5rem !important}.row-gap-xl-5{row-gap:3rem !important}.column-gap-xl-0{column-gap:0 !important}.column-gap-xl-1{column-gap:.25rem !important}.column-gap-xl-2{column-gap:.5rem !important}.column-gap-xl-3{column-gap:1rem !important}.column-gap-xl-4{column-gap:1.5rem !important}.column-gap-xl-5{column-gap:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media(min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.object-fit-xxl-contain{object-fit:contain !important}.object-fit-xxl-cover{object-fit:cover !important}.object-fit-xxl-fill{object-fit:fill !important}.object-fit-xxl-scale{object-fit:scale-down !important}.object-fit-xxl-none{object-fit:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-inline-grid{display:inline-grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.row-gap-xxl-0{row-gap:0 !important}.row-gap-xxl-1{row-gap:.25rem !important}.row-gap-xxl-2{row-gap:.5rem !important}.row-gap-xxl-3{row-gap:1rem !important}.row-gap-xxl-4{row-gap:1.5rem !important}.row-gap-xxl-5{row-gap:3rem !important}.column-gap-xxl-0{column-gap:0 !important}.column-gap-xxl-1{column-gap:.25rem !important}.column-gap-xxl-2{column-gap:.5rem !important}.column-gap-xxl-3{column-gap:1rem !important}.column-gap-xxl-4{column-gap:1.5rem !important}.column-gap-xxl-5{column-gap:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}.bg-default{color:#fff}.bg-primary{color:#fff}.bg-secondary{color:#fff}.bg-success{color:#fff}.bg-info{color:#fff}.bg-warning{color:#fff}.bg-danger{color:#fff}.bg-light{color:#000}.bg-dark{color:#fff}@media(min-width: 1200px){.fs-1{font-size:2rem !important}.fs-2{font-size:1.65rem !important}.fs-3{font-size:1.45rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-inline-grid{display:inline-grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}:root{--bslib-spacer: 1rem;--bslib-mb-spacer: var(--bslib-spacer, 1rem)}.bslib-mb-spacing{margin-bottom:var(--bslib-mb-spacer)}.bslib-gap-spacing{gap:var(--bslib-mb-spacer)}.bslib-gap-spacing>.bslib-mb-spacing,.bslib-gap-spacing>.form-group,.bslib-gap-spacing>p,.bslib-gap-spacing>pre{margin-bottom:0}.html-fill-container>.html-fill-item.bslib-mb-spacing{margin-bottom:0}.tab-content>.tab-pane.html-fill-container{display:none}.tab-content>.active.html-fill-container{display:flex}.tab-content.html-fill-container{padding:0}.bg-blue{--bslib-color-bg: #2780e3;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-blue{--bslib-color-fg: #2780e3;color:var(--bslib-color-fg)}.bg-indigo{--bslib-color-bg: #6610f2;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-indigo{--bslib-color-fg: #6610f2;color:var(--bslib-color-fg)}.bg-purple{--bslib-color-bg: #613d7c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-purple{--bslib-color-fg: #613d7c;color:var(--bslib-color-fg)}.bg-pink{--bslib-color-bg: #e83e8c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-pink{--bslib-color-fg: #e83e8c;color:var(--bslib-color-fg)}.bg-red{--bslib-color-bg: #ff0039;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-red{--bslib-color-fg: #ff0039;color:var(--bslib-color-fg)}.bg-orange{--bslib-color-bg: #f0ad4e;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-orange{--bslib-color-fg: #f0ad4e;color:var(--bslib-color-fg)}.bg-yellow{--bslib-color-bg: #ff7518;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-yellow{--bslib-color-fg: #ff7518;color:var(--bslib-color-fg)}.bg-green{--bslib-color-bg: #3fb618;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-green{--bslib-color-fg: #3fb618;color:var(--bslib-color-fg)}.bg-teal{--bslib-color-bg: #20c997;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-teal{--bslib-color-fg: #20c997;color:var(--bslib-color-fg)}.bg-cyan{--bslib-color-bg: #9954bb;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-cyan{--bslib-color-fg: #9954bb;color:var(--bslib-color-fg)}.text-default{--bslib-color-fg: #343a40}.bg-default{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.text-primary{--bslib-color-fg: #2780e3}.bg-primary{--bslib-color-bg: #2780e3;--bslib-color-fg: #fff}.text-secondary{--bslib-color-fg: #343a40}.bg-secondary{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.text-success{--bslib-color-fg: #3fb618}.bg-success{--bslib-color-bg: #3fb618;--bslib-color-fg: #fff}.text-info{--bslib-color-fg: #9954bb}.bg-info{--bslib-color-bg: #9954bb;--bslib-color-fg: #fff}.text-warning{--bslib-color-fg: #ff7518}.bg-warning{--bslib-color-bg: #ff7518;--bslib-color-fg: #fff}.text-danger{--bslib-color-fg: #ff0039}.bg-danger{--bslib-color-bg: #ff0039;--bslib-color-fg: #fff}.text-light{--bslib-color-fg: #f8f9fa}.bg-light{--bslib-color-bg: #f8f9fa;--bslib-color-fg: #000}.text-dark{--bslib-color-fg: #343a40}.bg-dark{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.bg-gradient-blue-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(64.2, 83.2, 233);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(64.2,83.2,233);color:#fff}.bg-gradient-blue-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(62.2, 101.2, 185.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(62.2,101.2,185.8);color:#fff}.bg-gradient-blue-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(116.2, 101.6, 192.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(116.2,101.6,192.2);color:#fff}.bg-gradient-blue-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(125.4, 76.8, 159);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(125.4,76.8,159);color:#fff}.bg-gradient-blue-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(119.4, 146, 167.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(119.4,146,167.4);color:#fff}.bg-gradient-blue-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(125.4, 123.6, 145.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(125.4,123.6,145.8);color:#fff}.bg-gradient-blue-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(48.6, 149.6, 145.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(48.6,149.6,145.8);color:#fff}.bg-gradient-blue-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(36.2, 157.2, 196.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(36.2,157.2,196.6);color:#fff}.bg-gradient-blue-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(84.6, 110.4, 211);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(84.6,110.4,211);color:#fff}.bg-gradient-indigo-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(76.8, 60.8, 236);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(76.8,60.8,236);color:#fff}.bg-gradient-indigo-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(100, 34, 194.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(100,34,194.8);color:#fff}.bg-gradient-indigo-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(154, 34.4, 201.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(154,34.4,201.2);color:#fff}.bg-gradient-indigo-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(163.2, 9.6, 168);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(163.2,9.6,168);color:#fff}.bg-gradient-indigo-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(157.2, 78.8, 176.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(157.2,78.8,176.4);color:#fff}.bg-gradient-indigo-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(163.2, 56.4, 154.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(163.2,56.4,154.8);color:#fff}.bg-gradient-indigo-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(86.4, 82.4, 154.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(86.4,82.4,154.8);color:#fff}.bg-gradient-indigo-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(74, 90, 205.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(74,90,205.6);color:#fff}.bg-gradient-indigo-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(122.4, 43.2, 220);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(122.4,43.2,220);color:#fff}.bg-gradient-purple-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(73.8, 87.8, 165.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(73.8,87.8,165.2);color:#fff}.bg-gradient-purple-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(99, 43, 171.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(99,43,171.2);color:#fff}.bg-gradient-purple-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(151, 61.4, 130.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(151,61.4,130.4);color:#fff}.bg-gradient-purple-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(160.2, 36.6, 97.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(160.2,36.6,97.2);color:#fff}.bg-gradient-purple-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(154.2, 105.8, 105.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(154.2,105.8,105.6);color:#fff}.bg-gradient-purple-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(160.2, 83.4, 84);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(160.2,83.4,84);color:#fff}.bg-gradient-purple-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(83.4, 109.4, 84);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(83.4,109.4,84);color:#fff}.bg-gradient-purple-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(71, 117, 134.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(71,117,134.8);color:#fff}.bg-gradient-purple-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(119.4, 70.2, 149.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(119.4,70.2,149.2);color:#fff}.bg-gradient-pink-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(154.8, 88.4, 174.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(154.8,88.4,174.8);color:#fff}.bg-gradient-pink-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(180, 43.6, 180.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(180,43.6,180.8);color:#fff}.bg-gradient-pink-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(178, 61.6, 133.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(178,61.6,133.6);color:#fff}.bg-gradient-pink-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(241.2, 37.2, 106.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(241.2,37.2,106.8);color:#fff}.bg-gradient-pink-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(235.2, 106.4, 115.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(235.2,106.4,115.2);color:#fff}.bg-gradient-pink-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(241.2, 84, 93.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(241.2,84,93.6);color:#fff}.bg-gradient-pink-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(164.4, 110, 93.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(164.4,110,93.6);color:#fff}.bg-gradient-pink-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(152, 117.6, 144.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(152,117.6,144.4);color:#fff}.bg-gradient-pink-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(200.4, 70.8, 158.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(200.4,70.8,158.8);color:#fff}.bg-gradient-red-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(168.6, 51.2, 125);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(168.6,51.2,125);color:#fff}.bg-gradient-red-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 6.4, 131);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(193.8,6.4,131);color:#fff}.bg-gradient-red-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(191.8, 24.4, 83.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(191.8,24.4,83.8);color:#fff}.bg-gradient-red-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(245.8, 24.8, 90.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(245.8,24.8,90.2);color:#fff}.bg-gradient-red-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(249, 69.2, 65.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(249,69.2,65.4);color:#fff}.bg-gradient-red-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(255, 46.8, 43.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(255,46.8,43.8);color:#fff}.bg-gradient-red-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(178.2, 72.8, 43.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(178.2,72.8,43.8);color:#fff}.bg-gradient-red-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(165.8, 80.4, 94.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(165.8,80.4,94.6);color:#fff}.bg-gradient-red-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(214.2, 33.6, 109);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(214.2,33.6,109);color:#fff}.bg-gradient-orange-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(159.6, 155, 137.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(159.6,155,137.6);color:#fff}.bg-gradient-orange-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(184.8, 110.2, 143.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(184.8,110.2,143.6);color:#fff}.bg-gradient-orange-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(182.8, 128.2, 96.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(182.8,128.2,96.4);color:#fff}.bg-gradient-orange-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(236.8, 128.6, 102.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(236.8,128.6,102.8);color:#fff}.bg-gradient-orange-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(246, 103.8, 69.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(246,103.8,69.6);color:#fff}.bg-gradient-orange-yellow{--bslib-color-fg: #000;--bslib-color-bg: rgb(246, 150.6, 56.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(246,150.6,56.4);color:#000}.bg-gradient-orange-green{--bslib-color-fg: #000;--bslib-color-bg: rgb(169.2, 176.6, 56.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(169.2,176.6,56.4);color:#000}.bg-gradient-orange-teal{--bslib-color-fg: #000;--bslib-color-bg: rgb(156.8, 184.2, 107.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(156.8,184.2,107.2);color:#000}.bg-gradient-orange-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(205.2, 137.4, 121.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(205.2,137.4,121.6);color:#fff}.bg-gradient-yellow-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(168.6, 121.4, 105.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(168.6,121.4,105.2);color:#fff}.bg-gradient-yellow-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 76.6, 111.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(193.8,76.6,111.2);color:#fff}.bg-gradient-yellow-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(191.8, 94.6, 64);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(191.8,94.6,64);color:#fff}.bg-gradient-yellow-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(245.8, 95, 70.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(245.8,95,70.4);color:#fff}.bg-gradient-yellow-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(255, 70.2, 37.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(255,70.2,37.2);color:#fff}.bg-gradient-yellow-orange{--bslib-color-fg: #000;--bslib-color-bg: rgb(249, 139.4, 45.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(249,139.4,45.6);color:#000}.bg-gradient-yellow-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(178.2, 143, 24);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(178.2,143,24);color:#fff}.bg-gradient-yellow-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(165.8, 150.6, 74.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(165.8,150.6,74.8);color:#fff}.bg-gradient-yellow-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(214.2, 103.8, 89.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(214.2,103.8,89.2);color:#fff}.bg-gradient-green-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(53.4, 160.4, 105.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(53.4,160.4,105.2);color:#fff}.bg-gradient-green-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(78.6, 115.6, 111.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(78.6,115.6,111.2);color:#fff}.bg-gradient-green-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(76.6, 133.6, 64);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(76.6,133.6,64);color:#fff}.bg-gradient-green-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(130.6, 134, 70.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(130.6,134,70.4);color:#fff}.bg-gradient-green-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(139.8, 109.2, 37.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(139.8,109.2,37.2);color:#fff}.bg-gradient-green-orange{--bslib-color-fg: #000;--bslib-color-bg: rgb(133.8, 178.4, 45.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(133.8,178.4,45.6);color:#000}.bg-gradient-green-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(139.8, 156, 24);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(139.8,156,24);color:#fff}.bg-gradient-green-teal{--bslib-color-fg: #000;--bslib-color-bg: rgb(50.6, 189.6, 74.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(50.6,189.6,74.8);color:#000}.bg-gradient-green-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(99, 142.8, 89.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(99,142.8,89.2);color:#fff}.bg-gradient-teal-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(34.8, 171.8, 181.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(34.8,171.8,181.4);color:#fff}.bg-gradient-teal-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(60, 127, 187.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(60,127,187.4);color:#fff}.bg-gradient-teal-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(58, 145, 140.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(58,145,140.2);color:#fff}.bg-gradient-teal-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(112, 145.4, 146.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(112,145.4,146.6);color:#fff}.bg-gradient-teal-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(121.2, 120.6, 113.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(121.2,120.6,113.4);color:#fff}.bg-gradient-teal-orange{--bslib-color-fg: #000;--bslib-color-bg: rgb(115.2, 189.8, 121.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(115.2,189.8,121.8);color:#000}.bg-gradient-teal-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(121.2, 167.4, 100.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(121.2,167.4,100.2);color:#fff}.bg-gradient-teal-green{--bslib-color-fg: #000;--bslib-color-bg: rgb(44.4, 193.4, 100.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(44.4,193.4,100.2);color:#000}.bg-gradient-teal-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(80.4, 154.2, 165.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(80.4,154.2,165.4);color:#fff}.bg-gradient-cyan-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(107.4, 101.6, 203);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(107.4,101.6,203);color:#fff}.bg-gradient-cyan-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(132.6, 56.8, 209);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(132.6,56.8,209);color:#fff}.bg-gradient-cyan-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(130.6, 74.8, 161.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(130.6,74.8,161.8);color:#fff}.bg-gradient-cyan-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(184.6, 75.2, 168.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(184.6,75.2,168.2);color:#fff}.bg-gradient-cyan-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 50.4, 135);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(193.8,50.4,135);color:#fff}.bg-gradient-cyan-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(187.8, 119.6, 143.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(187.8,119.6,143.4);color:#fff}.bg-gradient-cyan-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 97.2, 121.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(193.8,97.2,121.8);color:#fff}.bg-gradient-cyan-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(117, 123.2, 121.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(117,123.2,121.8);color:#fff}.bg-gradient-cyan-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(104.6, 130.8, 172.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(104.6,130.8,172.6);color:#fff}.tab-content>.tab-pane.html-fill-container{display:none}.tab-content>.active.html-fill-container{display:flex}.tab-content.html-fill-container{padding:0}:root{--bslib-spacer: 1rem;--bslib-mb-spacer: var(--bslib-spacer, 1rem)}.bslib-mb-spacing{margin-bottom:var(--bslib-mb-spacer)}.bslib-gap-spacing{gap:var(--bslib-mb-spacer)}.bslib-gap-spacing>.bslib-mb-spacing,.bslib-gap-spacing>.form-group,.bslib-gap-spacing>p,.bslib-gap-spacing>pre{margin-bottom:0}.html-fill-container>.html-fill-item.bslib-mb-spacing{margin-bottom:0}.bg-blue{--bslib-color-bg: #2780e3;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-blue{--bslib-color-fg: #2780e3;color:var(--bslib-color-fg)}.bg-indigo{--bslib-color-bg: #6610f2;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-indigo{--bslib-color-fg: #6610f2;color:var(--bslib-color-fg)}.bg-purple{--bslib-color-bg: #613d7c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-purple{--bslib-color-fg: #613d7c;color:var(--bslib-color-fg)}.bg-pink{--bslib-color-bg: #e83e8c;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-pink{--bslib-color-fg: #e83e8c;color:var(--bslib-color-fg)}.bg-red{--bslib-color-bg: #ff0039;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-red{--bslib-color-fg: #ff0039;color:var(--bslib-color-fg)}.bg-orange{--bslib-color-bg: #f0ad4e;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-orange{--bslib-color-fg: #f0ad4e;color:var(--bslib-color-fg)}.bg-yellow{--bslib-color-bg: #ff7518;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-yellow{--bslib-color-fg: #ff7518;color:var(--bslib-color-fg)}.bg-green{--bslib-color-bg: #3fb618;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-green{--bslib-color-fg: #3fb618;color:var(--bslib-color-fg)}.bg-teal{--bslib-color-bg: #20c997;--bslib-color-fg: #000;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-teal{--bslib-color-fg: #20c997;color:var(--bslib-color-fg)}.bg-cyan{--bslib-color-bg: #9954bb;--bslib-color-fg: #fff;background-color:var(--bslib-color-bg);color:var(--bslib-color-fg)}.text-cyan{--bslib-color-fg: #9954bb;color:var(--bslib-color-fg)}.text-default{--bslib-color-fg: #343a40}.bg-default{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.text-primary{--bslib-color-fg: #2780e3}.bg-primary{--bslib-color-bg: #2780e3;--bslib-color-fg: #fff}.text-secondary{--bslib-color-fg: #343a40}.bg-secondary{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.text-success{--bslib-color-fg: #3fb618}.bg-success{--bslib-color-bg: #3fb618;--bslib-color-fg: #fff}.text-info{--bslib-color-fg: #9954bb}.bg-info{--bslib-color-bg: #9954bb;--bslib-color-fg: #fff}.text-warning{--bslib-color-fg: #ff7518}.bg-warning{--bslib-color-bg: #ff7518;--bslib-color-fg: #fff}.text-danger{--bslib-color-fg: #ff0039}.bg-danger{--bslib-color-bg: #ff0039;--bslib-color-fg: #fff}.text-light{--bslib-color-fg: #f8f9fa}.bg-light{--bslib-color-bg: #f8f9fa;--bslib-color-fg: #000}.text-dark{--bslib-color-fg: #343a40}.bg-dark{--bslib-color-bg: #343a40;--bslib-color-fg: #fff}.bg-gradient-blue-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(64.2, 83.2, 233);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(64.2,83.2,233);color:#fff}.bg-gradient-blue-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(62.2, 101.2, 185.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(62.2,101.2,185.8);color:#fff}.bg-gradient-blue-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(116.2, 101.6, 192.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(116.2,101.6,192.2);color:#fff}.bg-gradient-blue-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(125.4, 76.8, 159);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(125.4,76.8,159);color:#fff}.bg-gradient-blue-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(119.4, 146, 167.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(119.4,146,167.4);color:#fff}.bg-gradient-blue-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(125.4, 123.6, 145.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(125.4,123.6,145.8);color:#fff}.bg-gradient-blue-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(48.6, 149.6, 145.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(48.6,149.6,145.8);color:#fff}.bg-gradient-blue-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(36.2, 157.2, 196.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(36.2,157.2,196.6);color:#fff}.bg-gradient-blue-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(84.6, 110.4, 211);background:linear-gradient(var(--bg-gradient-deg, 140deg), #2780e3 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(84.6,110.4,211);color:#fff}.bg-gradient-indigo-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(76.8, 60.8, 236);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(76.8,60.8,236);color:#fff}.bg-gradient-indigo-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(100, 34, 194.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(100,34,194.8);color:#fff}.bg-gradient-indigo-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(154, 34.4, 201.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(154,34.4,201.2);color:#fff}.bg-gradient-indigo-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(163.2, 9.6, 168);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(163.2,9.6,168);color:#fff}.bg-gradient-indigo-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(157.2, 78.8, 176.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(157.2,78.8,176.4);color:#fff}.bg-gradient-indigo-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(163.2, 56.4, 154.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(163.2,56.4,154.8);color:#fff}.bg-gradient-indigo-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(86.4, 82.4, 154.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(86.4,82.4,154.8);color:#fff}.bg-gradient-indigo-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(74, 90, 205.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(74,90,205.6);color:#fff}.bg-gradient-indigo-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(122.4, 43.2, 220);background:linear-gradient(var(--bg-gradient-deg, 140deg), #6610f2 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(122.4,43.2,220);color:#fff}.bg-gradient-purple-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(73.8, 87.8, 165.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(73.8,87.8,165.2);color:#fff}.bg-gradient-purple-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(99, 43, 171.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(99,43,171.2);color:#fff}.bg-gradient-purple-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(151, 61.4, 130.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(151,61.4,130.4);color:#fff}.bg-gradient-purple-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(160.2, 36.6, 97.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(160.2,36.6,97.2);color:#fff}.bg-gradient-purple-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(154.2, 105.8, 105.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(154.2,105.8,105.6);color:#fff}.bg-gradient-purple-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(160.2, 83.4, 84);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(160.2,83.4,84);color:#fff}.bg-gradient-purple-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(83.4, 109.4, 84);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(83.4,109.4,84);color:#fff}.bg-gradient-purple-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(71, 117, 134.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(71,117,134.8);color:#fff}.bg-gradient-purple-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(119.4, 70.2, 149.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #613d7c var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(119.4,70.2,149.2);color:#fff}.bg-gradient-pink-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(154.8, 88.4, 174.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(154.8,88.4,174.8);color:#fff}.bg-gradient-pink-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(180, 43.6, 180.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(180,43.6,180.8);color:#fff}.bg-gradient-pink-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(178, 61.6, 133.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(178,61.6,133.6);color:#fff}.bg-gradient-pink-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(241.2, 37.2, 106.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(241.2,37.2,106.8);color:#fff}.bg-gradient-pink-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(235.2, 106.4, 115.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(235.2,106.4,115.2);color:#fff}.bg-gradient-pink-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(241.2, 84, 93.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(241.2,84,93.6);color:#fff}.bg-gradient-pink-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(164.4, 110, 93.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(164.4,110,93.6);color:#fff}.bg-gradient-pink-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(152, 117.6, 144.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(152,117.6,144.4);color:#fff}.bg-gradient-pink-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(200.4, 70.8, 158.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #e83e8c var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(200.4,70.8,158.8);color:#fff}.bg-gradient-red-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(168.6, 51.2, 125);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(168.6,51.2,125);color:#fff}.bg-gradient-red-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 6.4, 131);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(193.8,6.4,131);color:#fff}.bg-gradient-red-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(191.8, 24.4, 83.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(191.8,24.4,83.8);color:#fff}.bg-gradient-red-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(245.8, 24.8, 90.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(245.8,24.8,90.2);color:#fff}.bg-gradient-red-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(249, 69.2, 65.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(249,69.2,65.4);color:#fff}.bg-gradient-red-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(255, 46.8, 43.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(255,46.8,43.8);color:#fff}.bg-gradient-red-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(178.2, 72.8, 43.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(178.2,72.8,43.8);color:#fff}.bg-gradient-red-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(165.8, 80.4, 94.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(165.8,80.4,94.6);color:#fff}.bg-gradient-red-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(214.2, 33.6, 109);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff0039 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(214.2,33.6,109);color:#fff}.bg-gradient-orange-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(159.6, 155, 137.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(159.6,155,137.6);color:#fff}.bg-gradient-orange-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(184.8, 110.2, 143.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(184.8,110.2,143.6);color:#fff}.bg-gradient-orange-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(182.8, 128.2, 96.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(182.8,128.2,96.4);color:#fff}.bg-gradient-orange-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(236.8, 128.6, 102.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(236.8,128.6,102.8);color:#fff}.bg-gradient-orange-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(246, 103.8, 69.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(246,103.8,69.6);color:#fff}.bg-gradient-orange-yellow{--bslib-color-fg: #000;--bslib-color-bg: rgb(246, 150.6, 56.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(246,150.6,56.4);color:#000}.bg-gradient-orange-green{--bslib-color-fg: #000;--bslib-color-bg: rgb(169.2, 176.6, 56.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(169.2,176.6,56.4);color:#000}.bg-gradient-orange-teal{--bslib-color-fg: #000;--bslib-color-bg: rgb(156.8, 184.2, 107.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(156.8,184.2,107.2);color:#000}.bg-gradient-orange-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(205.2, 137.4, 121.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #f0ad4e var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(205.2,137.4,121.6);color:#fff}.bg-gradient-yellow-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(168.6, 121.4, 105.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(168.6,121.4,105.2);color:#fff}.bg-gradient-yellow-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 76.6, 111.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(193.8,76.6,111.2);color:#fff}.bg-gradient-yellow-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(191.8, 94.6, 64);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(191.8,94.6,64);color:#fff}.bg-gradient-yellow-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(245.8, 95, 70.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(245.8,95,70.4);color:#fff}.bg-gradient-yellow-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(255, 70.2, 37.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(255,70.2,37.2);color:#fff}.bg-gradient-yellow-orange{--bslib-color-fg: #000;--bslib-color-bg: rgb(249, 139.4, 45.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(249,139.4,45.6);color:#000}.bg-gradient-yellow-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(178.2, 143, 24);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(178.2,143,24);color:#fff}.bg-gradient-yellow-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(165.8, 150.6, 74.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(165.8,150.6,74.8);color:#fff}.bg-gradient-yellow-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(214.2, 103.8, 89.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #ff7518 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(214.2,103.8,89.2);color:#fff}.bg-gradient-green-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(53.4, 160.4, 105.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(53.4,160.4,105.2);color:#fff}.bg-gradient-green-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(78.6, 115.6, 111.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(78.6,115.6,111.2);color:#fff}.bg-gradient-green-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(76.6, 133.6, 64);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(76.6,133.6,64);color:#fff}.bg-gradient-green-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(130.6, 134, 70.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(130.6,134,70.4);color:#fff}.bg-gradient-green-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(139.8, 109.2, 37.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(139.8,109.2,37.2);color:#fff}.bg-gradient-green-orange{--bslib-color-fg: #000;--bslib-color-bg: rgb(133.8, 178.4, 45.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(133.8,178.4,45.6);color:#000}.bg-gradient-green-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(139.8, 156, 24);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(139.8,156,24);color:#fff}.bg-gradient-green-teal{--bslib-color-fg: #000;--bslib-color-bg: rgb(50.6, 189.6, 74.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(50.6,189.6,74.8);color:#000}.bg-gradient-green-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(99, 142.8, 89.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #3fb618 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(99,142.8,89.2);color:#fff}.bg-gradient-teal-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(34.8, 171.8, 181.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(34.8,171.8,181.4);color:#fff}.bg-gradient-teal-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(60, 127, 187.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(60,127,187.4);color:#fff}.bg-gradient-teal-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(58, 145, 140.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(58,145,140.2);color:#fff}.bg-gradient-teal-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(112, 145.4, 146.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(112,145.4,146.6);color:#fff}.bg-gradient-teal-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(121.2, 120.6, 113.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(121.2,120.6,113.4);color:#fff}.bg-gradient-teal-orange{--bslib-color-fg: #000;--bslib-color-bg: rgb(115.2, 189.8, 121.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(115.2,189.8,121.8);color:#000}.bg-gradient-teal-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(121.2, 167.4, 100.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(121.2,167.4,100.2);color:#fff}.bg-gradient-teal-green{--bslib-color-fg: #000;--bslib-color-bg: rgb(44.4, 193.4, 100.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(44.4,193.4,100.2);color:#000}.bg-gradient-teal-cyan{--bslib-color-fg: #fff;--bslib-color-bg: rgb(80.4, 154.2, 165.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #20c997 var(--bg-gradient-start, 36%), #9954bb var(--bg-gradient-end, 180%)) rgb(80.4,154.2,165.4);color:#fff}.bg-gradient-cyan-blue{--bslib-color-fg: #fff;--bslib-color-bg: rgb(107.4, 101.6, 203);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #2780e3 var(--bg-gradient-end, 180%)) rgb(107.4,101.6,203);color:#fff}.bg-gradient-cyan-indigo{--bslib-color-fg: #fff;--bslib-color-bg: rgb(132.6, 56.8, 209);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #6610f2 var(--bg-gradient-end, 180%)) rgb(132.6,56.8,209);color:#fff}.bg-gradient-cyan-purple{--bslib-color-fg: #fff;--bslib-color-bg: rgb(130.6, 74.8, 161.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #613d7c var(--bg-gradient-end, 180%)) rgb(130.6,74.8,161.8);color:#fff}.bg-gradient-cyan-pink{--bslib-color-fg: #fff;--bslib-color-bg: rgb(184.6, 75.2, 168.2);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #e83e8c var(--bg-gradient-end, 180%)) rgb(184.6,75.2,168.2);color:#fff}.bg-gradient-cyan-red{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 50.4, 135);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #ff0039 var(--bg-gradient-end, 180%)) rgb(193.8,50.4,135);color:#fff}.bg-gradient-cyan-orange{--bslib-color-fg: #fff;--bslib-color-bg: rgb(187.8, 119.6, 143.4);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #f0ad4e var(--bg-gradient-end, 180%)) rgb(187.8,119.6,143.4);color:#fff}.bg-gradient-cyan-yellow{--bslib-color-fg: #fff;--bslib-color-bg: rgb(193.8, 97.2, 121.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #ff7518 var(--bg-gradient-end, 180%)) rgb(193.8,97.2,121.8);color:#fff}.bg-gradient-cyan-green{--bslib-color-fg: #fff;--bslib-color-bg: rgb(117, 123.2, 121.8);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #3fb618 var(--bg-gradient-end, 180%)) rgb(117,123.2,121.8);color:#fff}.bg-gradient-cyan-teal{--bslib-color-fg: #fff;--bslib-color-bg: rgb(104.6, 130.8, 172.6);background:linear-gradient(var(--bg-gradient-deg, 140deg), #9954bb var(--bg-gradient-start, 36%), #20c997 var(--bg-gradient-end, 180%)) rgb(104.6,130.8,172.6);color:#fff}:root{--bslib-value-box-shadow: none;--bslib-value-box-border-width-auto-yes: var(--bslib-value-box-border-width-baseline);--bslib-value-box-border-width-auto-no: 0;--bslib-value-box-border-width-baseline: 1px}.bslib-value-box{border-width:var(--bslib-value-box-border-width-auto-no, var(--bslib-value-box-border-width-baseline));container-name:bslib-value-box;container-type:inline-size}.bslib-value-box.card{box-shadow:var(--bslib-value-box-shadow)}.bslib-value-box.border-auto{border-width:var(--bslib-value-box-border-width-auto-yes, var(--bslib-value-box-border-width-baseline))}.bslib-value-box.default{--bslib-value-box-bg-default: var(--bs-card-bg, #fff);--bslib-value-box-border-color-default: var(--bs-card-border-color, rgba(0, 0, 0, 0.175));color:var(--bslib-value-box-color);background-color:var(--bslib-value-box-bg, var(--bslib-value-box-bg-default));border-color:var(--bslib-value-box-border-color, var(--bslib-value-box-border-color-default))}.bslib-value-box .value-box-grid{display:grid;grid-template-areas:"left right";align-items:center;overflow:hidden}.bslib-value-box .value-box-showcase{height:100%;max-height:var(---bslib-value-box-showcase-max-h, 100%)}.bslib-value-box .value-box-showcase,.bslib-value-box .value-box-showcase>.html-fill-item{width:100%}.bslib-value-box[data-full-screen=true] .value-box-showcase{max-height:var(---bslib-value-box-showcase-max-h-fs, 100%)}@media screen and (min-width: 575.98px){@container bslib-value-box (max-width: 300px){.bslib-value-box:not(.showcase-bottom) .value-box-grid{grid-template-columns:1fr !important;grid-template-rows:auto auto;grid-template-areas:"top" "bottom"}.bslib-value-box:not(.showcase-bottom) .value-box-grid .value-box-showcase{grid-area:top !important}.bslib-value-box:not(.showcase-bottom) .value-box-grid .value-box-area{grid-area:bottom !important;justify-content:end}}}.bslib-value-box .value-box-area{justify-content:center;padding:1.5rem 1rem;font-size:.9rem;font-weight:500}.bslib-value-box .value-box-area *{margin-bottom:0;margin-top:0}.bslib-value-box .value-box-title{font-size:1rem;margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2}.bslib-value-box .value-box-title:empty::after{content:" "}.bslib-value-box .value-box-value{font-size:calc(1.29rem + 0.48vw);margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2}@media(min-width: 1200px){.bslib-value-box .value-box-value{font-size:1.65rem}}.bslib-value-box .value-box-value:empty::after{content:" "}.bslib-value-box .value-box-showcase{align-items:center;justify-content:center;margin-top:auto;margin-bottom:auto;padding:1rem}.bslib-value-box .value-box-showcase .bi,.bslib-value-box .value-box-showcase .fa,.bslib-value-box .value-box-showcase .fab,.bslib-value-box .value-box-showcase .fas,.bslib-value-box .value-box-showcase .far{opacity:.85;min-width:50px;max-width:125%}.bslib-value-box .value-box-showcase .bi,.bslib-value-box .value-box-showcase .fa,.bslib-value-box .value-box-showcase .fab,.bslib-value-box .value-box-showcase .fas,.bslib-value-box .value-box-showcase .far{font-size:4rem}.bslib-value-box.showcase-top-right .value-box-grid{grid-template-columns:1fr var(---bslib-value-box-showcase-w, 50%)}.bslib-value-box.showcase-top-right .value-box-grid .value-box-showcase{grid-area:right;margin-left:auto;align-self:start;align-items:end;padding-left:0;padding-bottom:0}.bslib-value-box.showcase-top-right .value-box-grid .value-box-area{grid-area:left;align-self:end}.bslib-value-box.showcase-top-right[data-full-screen=true] .value-box-grid{grid-template-columns:auto var(---bslib-value-box-showcase-w-fs, 1fr)}.bslib-value-box.showcase-top-right[data-full-screen=true] .value-box-grid>div{align-self:center}.bslib-value-box.showcase-top-right:not([data-full-screen=true]) .value-box-showcase{margin-top:0}@container bslib-value-box (max-width: 300px){.bslib-value-box.showcase-top-right:not([data-full-screen=true]) .value-box-grid .value-box-showcase{padding-left:1rem}}.bslib-value-box.showcase-left-center .value-box-grid{grid-template-columns:var(---bslib-value-box-showcase-w, 30%) auto}.bslib-value-box.showcase-left-center[data-full-screen=true] .value-box-grid{grid-template-columns:var(---bslib-value-box-showcase-w-fs, 1fr) auto}.bslib-value-box.showcase-left-center:not([data-fill-screen=true]) .value-box-grid .value-box-showcase{grid-area:left}.bslib-value-box.showcase-left-center:not([data-fill-screen=true]) .value-box-grid .value-box-area{grid-area:right}.bslib-value-box.showcase-bottom .value-box-grid{grid-template-columns:1fr;grid-template-rows:1fr var(---bslib-value-box-showcase-h, auto);grid-template-areas:"top" "bottom";overflow:hidden}.bslib-value-box.showcase-bottom .value-box-grid .value-box-showcase{grid-area:bottom;padding:0;margin:0}.bslib-value-box.showcase-bottom .value-box-grid .value-box-area{grid-area:top}.bslib-value-box.showcase-bottom[data-full-screen=true] .value-box-grid{grid-template-rows:1fr var(---bslib-value-box-showcase-h-fs, 2fr)}.bslib-value-box.showcase-bottom[data-full-screen=true] .value-box-grid .value-box-showcase{padding:1rem}[data-bs-theme=dark] .bslib-value-box{--bslib-value-box-shadow: 0 0.5rem 1rem rgb(0 0 0 / 50%)}@media(min-width: 576px){.nav:not(.nav-hidden){display:flex !important;display:-webkit-flex !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column){float:none !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column)>.bslib-nav-spacer{margin-left:auto !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column)>.form-inline{margin-top:auto;margin-bottom:auto}.nav:not(.nav-hidden).nav-stacked{flex-direction:column;-webkit-flex-direction:column;height:100%}.nav:not(.nav-hidden).nav-stacked>.bslib-nav-spacer{margin-top:auto !important}}.bslib-card{overflow:auto}.bslib-card .card-body+.card-body{padding-top:0}.bslib-card .card-body{overflow:auto}.bslib-card .card-body p{margin-top:0}.bslib-card .card-body p:last-child{margin-bottom:0}.bslib-card .card-body{max-height:var(--bslib-card-body-max-height, none)}.bslib-card[data-full-screen=true]>.card-body{max-height:var(--bslib-card-body-max-height-full-screen, none)}.bslib-card .card-header .form-group{margin-bottom:0}.bslib-card .card-header .selectize-control{margin-bottom:0}.bslib-card .card-header .selectize-control .item{margin-right:1.15rem}.bslib-card .card-footer{margin-top:auto}.bslib-card .bslib-navs-card-title{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}.bslib-card .bslib-navs-card-title .nav{margin-left:auto}.bslib-card .bslib-sidebar-layout:not([data-bslib-sidebar-border=true]){border:none}.bslib-card .bslib-sidebar-layout:not([data-bslib-sidebar-border-radius=true]){border-top-left-radius:0;border-top-right-radius:0}[data-full-screen=true]{position:fixed;inset:3.5rem 1rem 1rem;height:auto !important;max-height:none !important;width:auto !important;z-index:1070}.bslib-full-screen-enter{display:none;position:absolute;bottom:var(--bslib-full-screen-enter-bottom, 0.2rem);right:var(--bslib-full-screen-enter-right, 0);top:var(--bslib-full-screen-enter-top);left:var(--bslib-full-screen-enter-left);color:var(--bslib-color-fg, var(--bs-card-color));background-color:var(--bslib-color-bg, var(--bs-card-bg, var(--bs-body-bg)));border:var(--bs-card-border-width) solid var(--bslib-color-fg, var(--bs-card-border-color));box-shadow:0 2px 4px rgba(0,0,0,.15);margin:.2rem .4rem;padding:.55rem !important;font-size:.8rem;cursor:pointer;opacity:.7;z-index:1070}.bslib-full-screen-enter:hover{opacity:1}.card[data-full-screen=false]:hover>*>.bslib-full-screen-enter{display:block}.bslib-has-full-screen .card:hover>*>.bslib-full-screen-enter{display:none}@media(max-width: 575.98px){.bslib-full-screen-enter{display:none !important}}.bslib-full-screen-exit{position:relative;top:1.35rem;font-size:.9rem;cursor:pointer;text-decoration:none;display:flex;float:right;margin-right:2.15rem;align-items:center;color:rgba(var(--bs-body-bg-rgb), 0.8)}.bslib-full-screen-exit:hover{color:rgba(var(--bs-body-bg-rgb), 1)}.bslib-full-screen-exit svg{margin-left:.5rem;font-size:1.5rem}#bslib-full-screen-overlay{position:fixed;inset:0;background-color:rgba(var(--bs-body-color-rgb), 0.6);backdrop-filter:blur(2px);-webkit-backdrop-filter:blur(2px);z-index:1069;animation:bslib-full-screen-overlay-enter 400ms cubic-bezier(0.6, 0.02, 0.65, 1) forwards}@keyframes bslib-full-screen-overlay-enter{0%{opacity:0}100%{opacity:1}}.bslib-grid{display:grid !important;gap:var(--bslib-spacer, 1rem);height:var(--bslib-grid-height)}.bslib-grid.grid{grid-template-columns:repeat(var(--bs-columns, 12), minmax(0, 1fr));grid-template-rows:unset;grid-auto-rows:var(--bslib-grid--row-heights);--bslib-grid--row-heights--xs: unset;--bslib-grid--row-heights--sm: unset;--bslib-grid--row-heights--md: unset;--bslib-grid--row-heights--lg: unset;--bslib-grid--row-heights--xl: unset;--bslib-grid--row-heights--xxl: unset}.bslib-grid.grid.bslib-grid--row-heights--xs{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xs)}@media(min-width: 576px){.bslib-grid.grid.bslib-grid--row-heights--sm{--bslib-grid--row-heights: var(--bslib-grid--row-heights--sm)}}@media(min-width: 768px){.bslib-grid.grid.bslib-grid--row-heights--md{--bslib-grid--row-heights: var(--bslib-grid--row-heights--md)}}@media(min-width: 992px){.bslib-grid.grid.bslib-grid--row-heights--lg{--bslib-grid--row-heights: var(--bslib-grid--row-heights--lg)}}@media(min-width: 1200px){.bslib-grid.grid.bslib-grid--row-heights--xl{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xl)}}@media(min-width: 1400px){.bslib-grid.grid.bslib-grid--row-heights--xxl{--bslib-grid--row-heights: var(--bslib-grid--row-heights--xxl)}}.bslib-grid>*>.shiny-input-container{width:100%}.bslib-grid-item{grid-column:auto/span 1}@media(max-width: 767.98px){.bslib-grid-item{grid-column:1/-1}}@media(max-width: 575.98px){.bslib-grid{grid-template-columns:1fr !important;height:var(--bslib-grid-height-mobile)}.bslib-grid.grid{height:unset !important;grid-auto-rows:var(--bslib-grid--row-heights--xs, auto)}}.accordion .accordion-header{font-size:calc(1.29rem + 0.48vw);margin-top:0;margin-bottom:.5rem;font-weight:400;line-height:1.2;color:var(--bs-heading-color);margin-bottom:0}@media(min-width: 1200px){.accordion .accordion-header{font-size:1.65rem}}.accordion .accordion-icon:not(:empty){margin-right:.75rem;display:flex}.accordion .accordion-button:not(.collapsed){box-shadow:none}.accordion .accordion-button:not(.collapsed):focus{box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.navbar+.container-fluid:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-sm:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-md:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-lg:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-xl:has(>.tab-content>.tab-pane.active.html-fill-container),.navbar+.container-xxl:has(>.tab-content>.tab-pane.active.html-fill-container){padding-left:0;padding-right:0}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container,.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container{padding:var(--bslib-spacer, 1rem);gap:var(--bslib-spacer, 1rem)}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container:has(>.bslib-sidebar-layout:only-child){padding:0}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border=true]){border-left:none;border-right:none;border-bottom:none}.navbar+.container-fluid>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-sm>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-md>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-lg>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-xl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]),.navbar+.container-xxl>.tab-content>.tab-pane.active.html-fill-container>.bslib-sidebar-layout:only-child:not([data-bslib-sidebar-border-radius=true]){border-radius:0}.navbar+div>.bslib-sidebar-layout{border-top:var(--bslib-sidebar-border)}html{height:100%}.bslib-page-fill{width:100%;height:100%;margin:0;padding:var(--bslib-spacer, 1rem);gap:var(--bslib-spacer, 1rem)}@media(max-width: 575.98px){.bslib-page-fill{height:var(--bslib-page-fill-mobile-height, auto)}}:root{--bslib-page-sidebar-title-bg: #f8f9fa;--bslib-page-sidebar-title-color: #000}.bslib-page-title{background-color:var(--bslib-page-sidebar-title-bg);color:var(--bslib-page-sidebar-title-color);font-size:1.25rem;font-weight:300;padding:var(--bslib-spacer, 1rem);padding-left:1.5rem;margin-bottom:0;border-bottom:1px solid #dee2e6}.bslib-sidebar-layout{--bslib-sidebar-transition-duration: 500ms;--bslib-sidebar-transition-easing-x: cubic-bezier(0.8, 0.78, 0.22, 1.07);--bslib-sidebar-border: var(--bs-card-border-width, 1px) solid var(--bs-card-border-color, rgba(0, 0, 0, 0.175));--bslib-sidebar-border-radius: var(--bs-border-radius);--bslib-sidebar-vert-border: var(--bs-card-border-width, 1px) solid var(--bs-card-border-color, rgba(0, 0, 0, 0.175));--bslib-sidebar-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.05);--bslib-sidebar-fg: var(--bs-emphasis-color, black);--bslib-sidebar-main-fg: var(--bs-card-color, var(--bs-body-color));--bslib-sidebar-main-bg: var(--bs-card-bg, var(--bs-body-bg));--bslib-sidebar-toggle-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.1);--bslib-sidebar-padding: calc(var(--bslib-spacer) * 1.5);--bslib-sidebar-icon-size: var(--bslib-spacer, 1rem);--bslib-sidebar-icon-button-size: calc(var(--bslib-sidebar-icon-size, 1rem) * 2);--bslib-sidebar-padding-icon: calc(var(--bslib-sidebar-icon-button-size, 2rem) * 1.5);--bslib-collapse-toggle-border-radius: var(--bs-border-radius, 0.25rem);--bslib-collapse-toggle-transform: 0deg;--bslib-sidebar-toggle-transition-easing: cubic-bezier(1, 0, 0, 1);--bslib-collapse-toggle-right-transform: 180deg;--bslib-sidebar-column-main: minmax(0, 1fr);display:grid !important;grid-template-columns:min(100% - var(--bslib-sidebar-icon-size),var(--bslib-sidebar-width, 250px)) var(--bslib-sidebar-column-main);position:relative;transition:grid-template-columns ease-in-out var(--bslib-sidebar-transition-duration);border:var(--bslib-sidebar-border);border-radius:var(--bslib-sidebar-border-radius)}@media(prefers-reduced-motion: reduce){.bslib-sidebar-layout{transition:none}}.bslib-sidebar-layout[data-bslib-sidebar-border=false]{border:none}.bslib-sidebar-layout[data-bslib-sidebar-border-radius=false]{border-radius:initial}.bslib-sidebar-layout>.main,.bslib-sidebar-layout>.sidebar{grid-row:1/2;border-radius:inherit;overflow:auto}.bslib-sidebar-layout>.main{grid-column:2/3;border-top-left-radius:0;border-bottom-left-radius:0;padding:var(--bslib-sidebar-padding);transition:padding var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration);color:var(--bslib-sidebar-main-fg);background-color:var(--bslib-sidebar-main-bg)}.bslib-sidebar-layout>.sidebar{grid-column:1/2;width:100%;height:100%;border-right:var(--bslib-sidebar-vert-border);border-top-right-radius:0;border-bottom-right-radius:0;color:var(--bslib-sidebar-fg);background-color:var(--bslib-sidebar-bg);backdrop-filter:blur(5px)}.bslib-sidebar-layout>.sidebar>.sidebar-content{display:flex;flex-direction:column;gap:var(--bslib-spacer, 1rem);padding:var(--bslib-sidebar-padding);padding-top:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout>.sidebar>.sidebar-content>:last-child:not(.sidebar-title){margin-bottom:0}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion{margin-left:calc(-1*var(--bslib-sidebar-padding));margin-right:calc(-1*var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:last-child{margin-bottom:calc(-1*var(--bslib-sidebar-padding))}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:last-child){margin-bottom:1rem}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion .accordion-body{display:flex;flex-direction:column}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:first-child) .accordion-item:first-child{border-top:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.bslib-sidebar-layout>.sidebar>.sidebar-content>.accordion:not(:last-child) .accordion-item:last-child{border-bottom:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.bslib-sidebar-layout>.sidebar>.sidebar-content.has-accordion>.sidebar-title{border-bottom:none;padding-bottom:0}.bslib-sidebar-layout>.sidebar .shiny-input-container{width:100%}.bslib-sidebar-layout[data-bslib-sidebar-open=always]>.sidebar>.sidebar-content{padding-top:var(--bslib-sidebar-padding)}.bslib-sidebar-layout>.collapse-toggle{grid-row:1/2;grid-column:1/2;display:inline-flex;align-items:center;position:absolute;right:calc(var(--bslib-sidebar-icon-size));top:calc(var(--bslib-sidebar-icon-size, 1rem)/2);border:none;border-radius:var(--bslib-collapse-toggle-border-radius);height:var(--bslib-sidebar-icon-button-size, 2rem);width:var(--bslib-sidebar-icon-button-size, 2rem);display:flex;align-items:center;justify-content:center;padding:0;color:var(--bslib-sidebar-fg);background-color:unset;transition:color var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),top var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),right var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration),left var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover{background-color:var(--bslib-sidebar-toggle-bg)}.bslib-sidebar-layout>.collapse-toggle>.collapse-icon{opacity:.8;width:var(--bslib-sidebar-icon-size);height:var(--bslib-sidebar-icon-size);transform:rotateY(var(--bslib-collapse-toggle-transform));transition:transform var(--bslib-sidebar-toggle-transition-easing) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout>.collapse-toggle:hover>.collapse-icon{opacity:1}.bslib-sidebar-layout .sidebar-title{font-size:1.25rem;line-height:1.25;margin-top:0;margin-bottom:1rem;padding-bottom:1rem;border-bottom:var(--bslib-sidebar-border)}.bslib-sidebar-layout.sidebar-right{grid-template-columns:var(--bslib-sidebar-column-main) min(100% - var(--bslib-sidebar-icon-size),var(--bslib-sidebar-width, 250px))}.bslib-sidebar-layout.sidebar-right>.main{grid-column:1/2;border-top-right-radius:0;border-bottom-right-radius:0;border-top-left-radius:inherit;border-bottom-left-radius:inherit}.bslib-sidebar-layout.sidebar-right>.sidebar{grid-column:2/3;border-right:none;border-left:var(--bslib-sidebar-vert-border);border-top-left-radius:0;border-bottom-left-radius:0}.bslib-sidebar-layout.sidebar-right>.collapse-toggle{grid-column:2/3;left:var(--bslib-sidebar-icon-size);right:unset;border:var(--bslib-collapse-toggle-border)}.bslib-sidebar-layout.sidebar-right>.collapse-toggle>.collapse-icon{transform:rotateY(var(--bslib-collapse-toggle-right-transform))}.bslib-sidebar-layout.sidebar-collapsed{--bslib-collapse-toggle-transform: 180deg;--bslib-collapse-toggle-right-transform: 0deg;--bslib-sidebar-vert-border: none;grid-template-columns:0 minmax(0, 1fr)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right{grid-template-columns:minmax(0, 1fr) 0}.bslib-sidebar-layout.sidebar-collapsed:not(.transitioning)>.sidebar>*{display:none}.bslib-sidebar-layout.sidebar-collapsed>.main{border-radius:inherit}.bslib-sidebar-layout.sidebar-collapsed:not(.sidebar-right)>.main{padding-left:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.main{padding-right:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout.sidebar-collapsed>.collapse-toggle{color:var(--bslib-sidebar-main-fg);top:calc(var(--bslib-sidebar-overlap-counter, 0)*(var(--bslib-sidebar-icon-size) + var(--bslib-sidebar-padding)) + var(--bslib-sidebar-icon-size, 1rem)/2);right:calc(-2.5*var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px))}.bslib-sidebar-layout.sidebar-collapsed.sidebar-right>.collapse-toggle{left:calc(-2.5*var(--bslib-sidebar-icon-size) - var(--bs-card-border-width, 1px));right:unset}@media(min-width: 576px){.bslib-sidebar-layout.transitioning>.sidebar>.sidebar-content{display:none}}@media(max-width: 575.98px){.bslib-sidebar-layout[data-bslib-sidebar-open=desktop]{--bslib-sidebar-js-init-collapsed: true}.bslib-sidebar-layout>.sidebar,.bslib-sidebar-layout.sidebar-right>.sidebar{border:none}.bslib-sidebar-layout>.main,.bslib-sidebar-layout.sidebar-right>.main{grid-column:1/3}.bslib-sidebar-layout[data-bslib-sidebar-open=always]{display:block !important}.bslib-sidebar-layout[data-bslib-sidebar-open=always]>.sidebar{max-height:var(--bslib-sidebar-max-height-mobile);overflow-y:auto;border-top:var(--bslib-sidebar-vert-border)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]){grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-collapsed)>.sidebar{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-collapsed)>.collapse-toggle{z-index:1}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-right{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed{grid-template-columns:0 100%}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed.sidebar-right{grid-template-columns:100% 0}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]):not(.sidebar-right)>.main{padding-left:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-right>.main{padding-right:var(--bslib-sidebar-padding-icon)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always])>.main{opacity:0;transition:opacity var(--bslib-sidebar-transition-easing-x) var(--bslib-sidebar-transition-duration)}.bslib-sidebar-layout:not([data-bslib-sidebar-open=always]).sidebar-collapsed>.main{opacity:1}}.html-fill-container{display:flex;flex-direction:column;min-height:0;min-width:0}.html-fill-container>.html-fill-item{flex:1 1 auto;min-height:0;min-width:0}.html-fill-container>:not(.html-fill-item){flex:0 0 auto}.sidebar-item .chapter-number{color:#343a40}.quarto-container{min-height:calc(100vh - 132px)}body.hypothesis-enabled #quarto-header{margin-right:16px}footer.footer .nav-footer,#quarto-header>nav{padding-left:1em;padding-right:1em}footer.footer div.nav-footer p:first-child{margin-top:0}footer.footer div.nav-footer p:last-child{margin-bottom:0}#quarto-content>*{padding-top:14px}#quarto-content>#quarto-sidebar-glass{padding-top:0px}@media(max-width: 991.98px){#quarto-content>*{padding-top:0}#quarto-content .subtitle{padding-top:14px}#quarto-content section:first-of-type h2:first-of-type,#quarto-content section:first-of-type .h2:first-of-type{margin-top:1rem}}.headroom-target,header.headroom{will-change:transform;transition:position 200ms linear;transition:all 200ms linear}header.headroom--pinned{transform:translateY(0%)}header.headroom--unpinned{transform:translateY(-100%)}.navbar-container{width:100%}.navbar-brand{overflow:hidden;text-overflow:ellipsis}.navbar-brand-container{max-width:calc(100% - 115px);min-width:0;display:flex;align-items:center}@media(min-width: 992px){.navbar-brand-container{margin-right:1em}}.navbar-brand.navbar-brand-logo{margin-right:4px;display:inline-flex}.navbar-toggler{flex-basis:content;flex-shrink:0}.navbar .navbar-brand-container{order:2}.navbar .navbar-toggler{order:1}.navbar .navbar-container>.navbar-nav{order:20}.navbar .navbar-container>.navbar-brand-container{margin-left:0 !important;margin-right:0 !important}.navbar .navbar-collapse{order:20}.navbar #quarto-search{order:4;margin-left:auto}.navbar .navbar-toggler{margin-right:.5em}.navbar-collapse .quarto-navbar-tools{margin-left:.5em}.navbar-logo{max-height:24px;width:auto;padding-right:4px}nav .nav-item:not(.compact){padding-top:1px}nav .nav-link i,nav .dropdown-item i{padding-right:1px}.navbar-expand-lg .navbar-nav .nav-link{padding-left:.6rem;padding-right:.6rem}nav .nav-item.compact .nav-link{padding-left:.5rem;padding-right:.5rem;font-size:1.1rem}.navbar .quarto-navbar-tools{order:3}.navbar .quarto-navbar-tools div.dropdown{display:inline-block}.navbar .quarto-navbar-tools .quarto-navigation-tool{color:rgb(84.32,84.66,85)}.navbar .quarto-navbar-tools .quarto-navigation-tool:hover{color:rgb(31.2,77.6,181.6)}.navbar-nav .dropdown-menu{min-width:220px;font-size:.9rem}.navbar .navbar-nav .nav-link.dropdown-toggle::after{opacity:.75;vertical-align:.175em}.navbar ul.dropdown-menu{padding-top:0;padding-bottom:0}.navbar .dropdown-header{text-transform:uppercase;font-size:.8rem;padding:0 .5rem}.navbar .dropdown-item{padding:.4rem .5rem}.navbar .dropdown-item>i.bi{margin-left:.1rem;margin-right:.25em}.sidebar #quarto-search{margin-top:-1px}.sidebar #quarto-search svg.aa-SubmitIcon{width:16px;height:16px}.sidebar-navigation a{color:inherit}.sidebar-title{margin-top:.25rem;padding-bottom:.5rem;font-size:1.3rem;line-height:1.6rem;visibility:visible}.sidebar-title>a{font-size:inherit;text-decoration:none}.sidebar-title .sidebar-tools-main{margin-top:-6px}@media(max-width: 991.98px){#quarto-sidebar div.sidebar-header{padding-top:.2em}}.sidebar-header-stacked .sidebar-title{margin-top:.6rem}.sidebar-logo{max-width:90%;padding-bottom:.5rem}.sidebar-logo-link{text-decoration:none}.sidebar-navigation li a{text-decoration:none}.sidebar-navigation .quarto-navigation-tool{opacity:.7;font-size:.875rem}#quarto-sidebar>nav>.sidebar-tools-main{margin-left:14px}.sidebar-tools-main{display:inline-flex;margin-left:0px;order:2}.sidebar-tools-main:not(.tools-wide){vertical-align:middle}.sidebar-navigation .quarto-navigation-tool.dropdown-toggle::after{display:none}.sidebar.sidebar-navigation>*{padding-top:1em}.sidebar-item{margin-bottom:.2em;line-height:1rem;margin-top:.4rem}.sidebar-section{padding-left:.5em;padding-bottom:.2em}.sidebar-item .sidebar-item-container{display:flex;justify-content:space-between;cursor:pointer}.sidebar-item-toggle:hover{cursor:pointer}.sidebar-item .sidebar-item-toggle .bi{font-size:.7rem;text-align:center}.sidebar-item .sidebar-item-toggle .bi-chevron-right::before{transition:transform 200ms ease}.sidebar-item .sidebar-item-toggle[aria-expanded=false] .bi-chevron-right::before{transform:none}.sidebar-item .sidebar-item-toggle[aria-expanded=true] .bi-chevron-right::before{transform:rotate(90deg)}.sidebar-item-text{width:100%}.sidebar-navigation .sidebar-divider{margin-left:0;margin-right:0;margin-top:.5rem;margin-bottom:.5rem}@media(max-width: 991.98px){.quarto-secondary-nav{display:block}.quarto-secondary-nav button.quarto-search-button{padding-right:0em;padding-left:2em}.quarto-secondary-nav button.quarto-btn-toggle{margin-left:-0.75rem;margin-right:.15rem}.quarto-secondary-nav nav.quarto-title-breadcrumbs{display:none}.quarto-secondary-nav nav.quarto-page-breadcrumbs{display:flex;align-items:center;padding-right:1em;margin-left:-0.25em}.quarto-secondary-nav nav.quarto-page-breadcrumbs a{text-decoration:none}.quarto-secondary-nav nav.quarto-page-breadcrumbs ol.breadcrumb{margin-bottom:0}}@media(min-width: 992px){.quarto-secondary-nav{display:none}}.quarto-title-breadcrumbs .breadcrumb{margin-bottom:.5em;font-size:.9rem}.quarto-title-breadcrumbs .breadcrumb li:last-of-type a{color:#6c757d}.quarto-secondary-nav .quarto-btn-toggle{color:hsl(0,0%,35%)}.quarto-secondary-nav[aria-expanded=false] .quarto-btn-toggle .bi-chevron-right::before{transform:none}.quarto-secondary-nav[aria-expanded=true] .quarto-btn-toggle .bi-chevron-right::before{transform:rotate(90deg)}.quarto-secondary-nav .quarto-btn-toggle .bi-chevron-right::before{transition:transform 200ms ease}.quarto-secondary-nav{cursor:pointer}.no-decor{text-decoration:none}.quarto-secondary-nav-title{margin-top:.3em;color:hsl(0,0%,35%);padding-top:4px}.quarto-secondary-nav nav.quarto-page-breadcrumbs{color:hsl(0,0%,35%)}.quarto-secondary-nav nav.quarto-page-breadcrumbs a{color:hsl(0,0%,35%)}.quarto-secondary-nav nav.quarto-page-breadcrumbs a:hover{color:rgba(32.76,81.48,190.68,.8)}.quarto-secondary-nav nav.quarto-page-breadcrumbs .breadcrumb-item::before{color:hsl(0,0%,55%)}.breadcrumb-item{line-height:1.2rem}div.sidebar-item-container{color:hsl(0,0%,35%)}div.sidebar-item-container:hover,div.sidebar-item-container:focus{color:rgba(32.76,81.48,190.68,.8)}div.sidebar-item-container.disabled{color:hsla(0,0%,35%,.75)}div.sidebar-item-container .active,div.sidebar-item-container .show>.nav-link,div.sidebar-item-container .sidebar-link>code{color:rgb(32.76,81.48,190.68)}div.sidebar.sidebar-navigation.rollup.quarto-sidebar-toggle-contents,nav.sidebar.sidebar-navigation:not(.rollup){background-color:#fff}@media(max-width: 991.98px){.sidebar-navigation .sidebar-item a,.nav-page .nav-page-text,.sidebar-navigation{font-size:1rem}.sidebar-navigation ul.sidebar-section.depth1 .sidebar-section-item{font-size:1.1rem}.sidebar-logo{display:none}.sidebar.sidebar-navigation{position:static;border-bottom:1px solid #dee2e6}.sidebar.sidebar-navigation.collapsing{position:fixed;z-index:1000}.sidebar.sidebar-navigation.show{position:fixed;z-index:1000}.sidebar.sidebar-navigation{min-height:100%}nav.quarto-secondary-nav{background-color:#fff;border-bottom:1px solid #dee2e6}.quarto-banner nav.quarto-secondary-nav{background-color:#f8f9fa;color:rgb(84.32,84.66,85);border-top:1px solid #dee2e6}.sidebar .sidebar-footer{visibility:visible;padding-top:1rem;position:inherit}.sidebar-tools-collapse{display:block}}#quarto-sidebar{transition:width .15s ease-in}#quarto-sidebar>*{padding-right:1em}@media(max-width: 991.98px){#quarto-sidebar .sidebar-menu-container{white-space:nowrap;min-width:225px}#quarto-sidebar.show{transition:width .15s ease-out}}@media(min-width: 992px){#quarto-sidebar{display:flex;flex-direction:column}.nav-page .nav-page-text,.sidebar-navigation .sidebar-section .sidebar-item{font-size:.875rem}.sidebar-navigation .sidebar-item{font-size:.925rem}.sidebar.sidebar-navigation{display:block;position:sticky}.sidebar-search{width:100%}.sidebar .sidebar-footer{visibility:visible}}@media(min-width: 992px){#quarto-sidebar-glass{display:none}}@media(max-width: 991.98px){#quarto-sidebar-glass{position:fixed;top:0;bottom:0;left:0;right:0;background-color:hsla(0,0%,100%,0);transition:background-color .15s ease-in;z-index:-1}#quarto-sidebar-glass.collapsing{z-index:1000}#quarto-sidebar-glass.show{transition:background-color .15s ease-out;background-color:hsla(0,0%,40%,.4);z-index:1000}}.sidebar .sidebar-footer{padding:.5rem 1rem;align-self:flex-end;color:#6c757d;width:100%}.quarto-page-breadcrumbs .breadcrumb-item+.breadcrumb-item,.quarto-page-breadcrumbs .breadcrumb-item{padding-right:.33em;padding-left:0}.quarto-page-breadcrumbs .breadcrumb-item::before{padding-right:.33em}.quarto-sidebar-footer{font-size:.875em}.sidebar-section .bi-chevron-right{vertical-align:middle}.sidebar-section .bi-chevron-right::before{font-size:.9em}.notransition{-webkit-transition:none !important;-moz-transition:none !important;-o-transition:none !important;transition:none !important}.btn:focus:not(:focus-visible){box-shadow:none}.page-navigation{display:flex;justify-content:space-between}.nav-page{padding-bottom:.75em}.nav-page .bi{font-size:1.8rem;vertical-align:middle}.nav-page .nav-page-text{padding-left:.25em;padding-right:.25em}.nav-page a{color:#6c757d;text-decoration:none;display:flex;align-items:center}.nav-page a:hover{color:rgb(31.2,77.6,181.6)}.nav-footer .toc-actions{padding-bottom:.5em;padding-top:.5em}.nav-footer .toc-actions a,.nav-footer .toc-actions a:hover{text-decoration:none}.nav-footer .toc-actions ul{display:flex;list-style:none}.nav-footer .toc-actions ul :first-child{margin-left:auto}.nav-footer .toc-actions ul :last-child{margin-right:auto}.nav-footer .toc-actions ul li{padding-right:1.5em}.nav-footer .toc-actions ul li i.bi{padding-right:.4em}.nav-footer .toc-actions ul li:last-of-type{padding-right:0}.nav-footer{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:space-between;align-items:baseline;text-align:center;padding-top:.5rem;padding-bottom:.5rem;background-color:#fff}body.nav-fixed{padding-top:64px}.nav-footer-contents{color:#6c757d;margin-top:.25rem}.nav-footer{min-height:3.5em;color:hsl(0,0%,46%)}.nav-footer a{color:hsl(0,0%,46%)}.nav-footer .nav-footer-left{font-size:.825em}.nav-footer .nav-footer-center{font-size:.825em}.nav-footer .nav-footer-right{font-size:.825em}.nav-footer-left .footer-items,.nav-footer-center .footer-items,.nav-footer-right .footer-items{display:inline-flex;padding-top:.3em;padding-bottom:.3em;margin-bottom:0em}.nav-footer-left .footer-items .nav-link,.nav-footer-center .footer-items .nav-link,.nav-footer-right .footer-items .nav-link{padding-left:.6em;padding-right:.6em}@media(min-width: 768px){.nav-footer-left{flex:1 1 0px;text-align:left}}@media(max-width: 575.98px){.nav-footer-left{margin-bottom:1em;flex:100%}}@media(min-width: 768px){.nav-footer-right{flex:1 1 0px;text-align:right}}@media(max-width: 575.98px){.nav-footer-right{margin-bottom:1em;flex:100%}}.nav-footer-center{text-align:center;min-height:3em}@media(min-width: 768px){.nav-footer-center{flex:1 1 0px}}.nav-footer-center .footer-items{justify-content:center}@media(max-width: 767.98px){.nav-footer-center{margin-bottom:1em;flex:100%}}@media(max-width: 767.98px){.nav-footer-center{margin-top:3em;order:10}}.navbar .quarto-reader-toggle.reader .quarto-reader-toggle-btn{background-color:rgb(84.32,84.66,85);border-radius:3px}@media(max-width: 991.98px){.quarto-reader-toggle{display:none}}.quarto-reader-toggle.reader.quarto-navigation-tool .quarto-reader-toggle-btn{background-color:hsl(0,0%,35%);border-radius:3px}.quarto-reader-toggle .quarto-reader-toggle-btn{display:inline-flex;padding-left:.2em;padding-right:.2em;margin-left:-0.2em;margin-right:-0.2em;text-align:center}.navbar .quarto-reader-toggle:not(.reader) .bi::before{background-image:url('data:image/svg+xml,')}.navbar .quarto-reader-toggle.reader .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-reader-toggle:not(.reader) .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-reader-toggle.reader .bi::before{background-image:url('data:image/svg+xml,')}#quarto-back-to-top{display:none;position:fixed;bottom:50px;background-color:#fff;border-radius:.25rem;box-shadow:0 .2rem .5rem #6c757d,0 0 .05rem #6c757d;color:#6c757d;text-decoration:none;font-size:.9em;text-align:center;left:50%;padding:.4rem .8rem;transform:translate(-50%, 0)}#quarto-announcement{padding:.5em;display:flex;justify-content:space-between;margin-bottom:0;font-size:.9em}#quarto-announcement .quarto-announcement-content{margin-right:auto}#quarto-announcement .quarto-announcement-content p{margin-bottom:0}#quarto-announcement .quarto-announcement-icon{margin-right:.5em;font-size:1.2em;margin-top:-0.15em}#quarto-announcement .quarto-announcement-action{cursor:pointer}.aa-DetachedSearchButtonQuery{display:none}.aa-DetachedOverlay ul.aa-List,#quarto-search-results ul.aa-List{list-style:none;padding-left:0}.aa-DetachedOverlay .aa-Panel,#quarto-search-results .aa-Panel{background-color:#fff;position:absolute;z-index:2000}#quarto-search-results .aa-Panel{max-width:400px}#quarto-search input{font-size:.925rem}@media(min-width: 992px){.navbar #quarto-search{margin-left:.25rem;order:999}}.navbar.navbar-expand-sm #quarto-search,.navbar.navbar-expand-md #quarto-search{order:999}@media(min-width: 992px){.navbar .quarto-navbar-tools{order:900}}@media(min-width: 992px){.navbar .quarto-navbar-tools.tools-end{margin-left:auto !important}}@media(max-width: 991.98px){#quarto-sidebar .sidebar-search{display:none}}#quarto-sidebar .sidebar-search .aa-Autocomplete{width:100%}.navbar .aa-Autocomplete .aa-Form{width:180px}.navbar #quarto-search.type-overlay .aa-Autocomplete{width:40px}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form{background-color:inherit;border:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form:focus-within{box-shadow:none;outline:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-InputWrapper{display:none}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-InputWrapper:focus-within{display:inherit}.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-Label svg,.navbar #quarto-search.type-overlay .aa-Autocomplete .aa-Form .aa-LoadingIndicator svg{width:26px;height:26px;color:rgb(84.32,84.66,85);opacity:1}.navbar #quarto-search.type-overlay .aa-Autocomplete svg.aa-SubmitIcon{width:26px;height:26px;color:rgb(84.32,84.66,85);opacity:1}.aa-Autocomplete .aa-Form,.aa-DetachedFormContainer .aa-Form{align-items:center;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;color:#343a40;display:flex;line-height:1em;margin:0;position:relative;width:100%}.aa-Autocomplete .aa-Form:focus-within,.aa-DetachedFormContainer .aa-Form:focus-within{box-shadow:rgba(39,128,227,.6) 0 0 0 1px;outline:currentColor none medium}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix{align-items:center;display:flex;flex-shrink:0;order:1}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-Label,.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-Label,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator{cursor:initial;flex-shrink:0;padding:0;text-align:left}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-Label svg,.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-Label svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator svg{color:#343a40;opacity:.5}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-SubmitButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-SubmitButton{appearance:none;background:none;border:0;margin:0}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator{align-items:center;display:flex;justify-content:center}.aa-Autocomplete .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperPrefix .aa-LoadingIndicator[hidden]{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapper,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper{order:3;position:relative;width:100%}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input{appearance:none;background:none;border:0;color:#343a40;font:inherit;height:calc(1.5em + .1rem + 2px);padding:0;width:100%}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::placeholder,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::placeholder{color:#343a40;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input:focus{border-color:none;box-shadow:none;outline:none}.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-decoration,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-cancel-button,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-button,.aa-Autocomplete .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-decoration,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-decoration,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-cancel-button,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-button,.aa-DetachedFormContainer .aa-Form .aa-InputWrapper .aa-Input::-webkit-search-results-decoration{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix{align-items:center;display:flex;order:4}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton{align-items:center;background:none;border:0;color:#343a40;opacity:.8;cursor:pointer;display:flex;margin:0;width:calc(1.5em + .1rem + 2px)}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:hover,.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:hover,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton:focus{color:#343a40;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton[hidden]{display:none}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-ClearButton svg,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-ClearButton svg{width:calc(1.5em + 0.75rem + calc(1px * 2))}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton{border:none;align-items:center;background:none;color:#343a40;opacity:.4;font-size:.7rem;cursor:pointer;display:none;margin:0;width:calc(1em + .1rem + 2px)}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:hover,.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:focus,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:hover,.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton:focus{color:#343a40;opacity:.8}.aa-Autocomplete .aa-Form .aa-InputWrapperSuffix .aa-CopyButton[hidden],.aa-DetachedFormContainer .aa-Form .aa-InputWrapperSuffix .aa-CopyButton[hidden]{display:none}.aa-PanelLayout:empty{display:none}.quarto-search-no-results.no-query{display:none}.aa-Source:has(.no-query){display:none}#quarto-search-results .aa-Panel{border:solid #dee2e6 1px}#quarto-search-results .aa-SourceNoResults{width:398px}.aa-DetachedOverlay .aa-Panel,#quarto-search-results .aa-Panel{max-height:65vh;overflow-y:auto;font-size:.925rem}.aa-DetachedOverlay .aa-SourceNoResults,#quarto-search-results .aa-SourceNoResults{height:60px;display:flex;justify-content:center;align-items:center}.aa-DetachedOverlay .search-error,#quarto-search-results .search-error{padding-top:10px;padding-left:20px;padding-right:20px;cursor:default}.aa-DetachedOverlay .search-error .search-error-title,#quarto-search-results .search-error .search-error-title{font-size:1.1rem;margin-bottom:.5rem}.aa-DetachedOverlay .search-error .search-error-title .search-error-icon,#quarto-search-results .search-error .search-error-title .search-error-icon{margin-right:8px}.aa-DetachedOverlay .search-error .search-error-text,#quarto-search-results .search-error .search-error-text{font-weight:300}.aa-DetachedOverlay .search-result-text,#quarto-search-results .search-result-text{font-weight:300;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.2rem;max-height:2.4rem}.aa-DetachedOverlay .aa-SourceHeader .search-result-header,#quarto-search-results .aa-SourceHeader .search-result-header{font-size:.875rem;background-color:hsl(0,0%,95%);padding-left:14px;padding-bottom:4px;padding-top:4px}.aa-DetachedOverlay .aa-SourceHeader .search-result-header-no-results,#quarto-search-results .aa-SourceHeader .search-result-header-no-results{display:none}.aa-DetachedOverlay .aa-SourceFooter .algolia-search-logo,#quarto-search-results .aa-SourceFooter .algolia-search-logo{width:110px;opacity:.85;margin:8px;float:right}.aa-DetachedOverlay .search-result-section,#quarto-search-results .search-result-section{font-size:.925em}.aa-DetachedOverlay a.search-result-link,#quarto-search-results a.search-result-link{color:inherit;text-decoration:none}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item,#quarto-search-results li.aa-Item[aria-selected=true] .search-item{background-color:#2780e3}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item.search-result-more,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-section,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-text,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-title-container,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-result-text-container,#quarto-search-results li.aa-Item[aria-selected=true] .search-item.search-result-more,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-section,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-text,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-title-container,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-result-text-container{color:#fff;background-color:#2780e3}.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item mark.search-match,.aa-DetachedOverlay li.aa-Item[aria-selected=true] .search-item .search-match.mark,#quarto-search-results li.aa-Item[aria-selected=true] .search-item mark.search-match,#quarto-search-results li.aa-Item[aria-selected=true] .search-item .search-match.mark{color:#fff;background-color:rgb(75.1180327869,149.2360655738,231.6819672131)}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item,#quarto-search-results li.aa-Item[aria-selected=false] .search-item{background-color:#fff}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item.search-result-more,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-section,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-text,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-title-container,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-result-text-container,#quarto-search-results li.aa-Item[aria-selected=false] .search-item.search-result-more,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-section,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-text,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-title-container,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-result-text-container{color:#343a40}.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item mark.search-match,.aa-DetachedOverlay li.aa-Item[aria-selected=false] .search-item .search-match.mark,#quarto-search-results li.aa-Item[aria-selected=false] .search-item mark.search-match,#quarto-search-results li.aa-Item[aria-selected=false] .search-item .search-match.mark{color:inherit;background-color:rgb(228.6196721311,239.4893442623,251.5803278689)}.aa-DetachedOverlay .aa-Item .search-result-doc:not(.document-selectable) .search-result-title-container,#quarto-search-results .aa-Item .search-result-doc:not(.document-selectable) .search-result-title-container{background-color:#fff;color:#343a40}.aa-DetachedOverlay .aa-Item .search-result-doc:not(.document-selectable) .search-result-text-container,#quarto-search-results .aa-Item .search-result-doc:not(.document-selectable) .search-result-text-container{padding-top:0px}.aa-DetachedOverlay li.aa-Item .search-result-doc.document-selectable .search-result-text-container,#quarto-search-results li.aa-Item .search-result-doc.document-selectable .search-result-text-container{margin-top:-4px}.aa-DetachedOverlay .aa-Item,#quarto-search-results .aa-Item{cursor:pointer}.aa-DetachedOverlay .aa-Item .search-item,#quarto-search-results .aa-Item .search-item{border-left:none;border-right:none;border-top:none;background-color:#fff;border-color:#dee2e6;color:#343a40}.aa-DetachedOverlay .aa-Item .search-item p,#quarto-search-results .aa-Item .search-item p{margin-top:0;margin-bottom:0}.aa-DetachedOverlay .aa-Item .search-item i.bi,#quarto-search-results .aa-Item .search-item i.bi{padding-left:8px;padding-right:8px;font-size:1.3em}.aa-DetachedOverlay .aa-Item .search-item .search-result-title,#quarto-search-results .aa-Item .search-item .search-result-title{margin-top:.3em;margin-bottom:0em}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs,#quarto-search-results .aa-Item .search-item .search-result-crumbs{white-space:nowrap;text-overflow:ellipsis;font-size:.8em;font-weight:300;margin-right:1em}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs:not(.search-result-crumbs-wrap),#quarto-search-results .aa-Item .search-item .search-result-crumbs:not(.search-result-crumbs-wrap){max-width:30%;margin-left:auto;margin-top:.5em;margin-bottom:.1rem}.aa-DetachedOverlay .aa-Item .search-item .search-result-crumbs.search-result-crumbs-wrap,#quarto-search-results .aa-Item .search-item .search-result-crumbs.search-result-crumbs-wrap{flex-basis:100%;margin-top:0em;margin-bottom:.2em;margin-left:37px}.aa-DetachedOverlay .aa-Item .search-result-title-container,#quarto-search-results .aa-Item .search-result-title-container{font-size:1em;display:flex;flex-wrap:wrap;padding:6px 4px 6px 4px}.aa-DetachedOverlay .aa-Item .search-result-text-container,#quarto-search-results .aa-Item .search-result-text-container{padding-bottom:8px;padding-right:8px;margin-left:42px}.aa-DetachedOverlay .aa-Item .search-result-doc-section,.aa-DetachedOverlay .aa-Item .search-result-more,#quarto-search-results .aa-Item .search-result-doc-section,#quarto-search-results .aa-Item .search-result-more{padding-top:8px;padding-bottom:8px;padding-left:44px}.aa-DetachedOverlay .aa-Item .search-result-more,#quarto-search-results .aa-Item .search-result-more{font-size:.8em;font-weight:400}.aa-DetachedOverlay .aa-Item .search-result-doc,#quarto-search-results .aa-Item .search-result-doc{border-top:1px solid #dee2e6}.aa-DetachedSearchButton{background:none;border:none}.aa-DetachedSearchButton .aa-DetachedSearchButtonPlaceholder{display:none}.navbar .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon{color:rgb(84.32,84.66,85)}.sidebar-tools-collapse #quarto-search,.sidebar-tools-main #quarto-search{display:inline}.sidebar-tools-collapse #quarto-search .aa-Autocomplete,.sidebar-tools-main #quarto-search .aa-Autocomplete{display:inline}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton{padding-left:4px;padding-right:4px}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon{color:hsl(0,0%,35%)}.sidebar-tools-collapse #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon .aa-SubmitIcon,.sidebar-tools-main #quarto-search .aa-DetachedSearchButton .aa-DetachedSearchButtonIcon .aa-SubmitIcon{margin-top:-3px}.aa-DetachedContainer{background:hsla(0,0%,100%,.65);width:90%;bottom:0;box-shadow:rgba(222,226,230,.6) 0 0 0 1px;outline:currentColor none medium;display:flex;flex-direction:column;left:0;margin:0;overflow:hidden;padding:0;position:fixed;right:0;top:0;z-index:1101}.aa-DetachedContainer::after{height:32px}.aa-DetachedContainer .aa-SourceHeader{margin:var(--aa-spacing-half) 0 var(--aa-spacing-half) 2px}.aa-DetachedContainer .aa-Panel{background-color:#fff;border-radius:0;box-shadow:none;flex-grow:1;margin:0;padding:0;position:relative}.aa-DetachedContainer .aa-PanelLayout{bottom:0;box-shadow:none;left:0;margin:0;max-height:none;overflow-y:auto;position:absolute;right:0;top:0;width:100%}.aa-DetachedFormContainer{background-color:#fff;border-bottom:1px solid #dee2e6;display:flex;flex-direction:row;justify-content:space-between;margin:0;padding:.5em}.aa-DetachedCancelButton{background:none;font-size:.8em;border:0;border-radius:3px;color:#343a40;cursor:pointer;margin:0 0 0 .5em;padding:0 .5em}.aa-DetachedCancelButton:hover,.aa-DetachedCancelButton:focus{box-shadow:rgba(39,128,227,.6) 0 0 0 1px;outline:currentColor none medium}.aa-DetachedContainer--modal{bottom:inherit;height:auto;margin:0 auto;position:absolute;top:100px;border-radius:6px;max-width:850px}@media(max-width: 575.98px){.aa-DetachedContainer--modal{width:100%;top:0px;border-radius:0px;border:none}}.aa-DetachedContainer--modal .aa-PanelLayout{max-height:var(--aa-detached-modal-max-height);padding-bottom:var(--aa-spacing-half);position:static}.aa-Detached{height:100vh;overflow:hidden}.aa-DetachedOverlay{background-color:rgba(52,58,64,.4);position:fixed;left:0;right:0;top:0;margin:0;padding:0;height:100vh;z-index:1100}.quarto-dashboard.nav-fixed.dashboard-sidebar #quarto-content.quarto-dashboard-content{padding:0em}.quarto-dashboard #quarto-content.quarto-dashboard-content{padding:1em}.quarto-dashboard #quarto-content.quarto-dashboard-content>*{padding-top:0}@media(min-width: 576px){.quarto-dashboard{height:100%}}.quarto-dashboard .card.valuebox.bslib-card.bg-primary{background-color:#5397e9 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-secondary{background-color:#343a40 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-success{background-color:#3aa716 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-info{background-color:rgba(153,84,187,.7019607843) !important}.quarto-dashboard .card.valuebox.bslib-card.bg-warning{background-color:#fa6400 !important}.quarto-dashboard .card.valuebox.bslib-card.bg-danger{background-color:rgba(255,0,57,.7019607843) !important}.quarto-dashboard .card.valuebox.bslib-card.bg-light{background-color:#f8f9fa !important}.quarto-dashboard .card.valuebox.bslib-card.bg-dark{background-color:#343a40 !important}.quarto-dashboard.dashboard-fill{display:flex;flex-direction:column}.quarto-dashboard #quarto-appendix{display:none}.quarto-dashboard #quarto-header #quarto-dashboard-header{border-top:solid 1px rgb(218.25,223.5,228.75);border-bottom:solid 1px rgb(218.25,223.5,228.75)}.quarto-dashboard #quarto-header #quarto-dashboard-header>nav{padding-left:1em;padding-right:1em}.quarto-dashboard #quarto-header #quarto-dashboard-header>nav .navbar-brand-container{padding-left:0}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-toggler{margin-right:0}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-toggler-icon{height:1em;width:1em;background-image:url('data:image/svg+xml,')}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-brand-container{padding-right:1em}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-title{font-size:1.1em}.quarto-dashboard #quarto-header #quarto-dashboard-header .navbar-nav{font-size:.9em}.quarto-dashboard #quarto-dashboard-header .navbar{padding:0}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-container{padding-left:1em}.quarto-dashboard #quarto-dashboard-header .navbar.slim .navbar-brand-container .nav-link,.quarto-dashboard #quarto-dashboard-header .navbar.slim .navbar-nav .nav-link{padding:.7em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-color-scheme-toggle{order:9}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-toggler{margin-left:.5em;order:10}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-nav .nav-link{padding:.5em;height:100%;display:flex;align-items:center}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-nav .active{background-color:rgb(224.2,228.6,233)}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-brand-container{padding:.5em .5em .5em 0;display:flex;flex-direction:row;margin-right:2em;align-items:center}@media(max-width: 767.98px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-brand-container{margin-right:auto}}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{align-self:stretch}@media(min-width: 768px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{order:8}}@media(max-width: 767.98px){.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse{order:1000;padding-bottom:.5em}}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-collapse .navbar-nav{align-self:stretch}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title{font-size:1.25em;line-height:1.1em;display:flex;flex-direction:row;flex-wrap:wrap;align-items:baseline}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title .navbar-title-text{margin-right:.4em}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-title a{text-decoration:none;color:inherit}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-subtitle,.quarto-dashboard #quarto-dashboard-header .navbar .navbar-author{font-size:.9rem;margin-right:.5em}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-author{margin-left:auto}.quarto-dashboard #quarto-dashboard-header .navbar .navbar-logo{max-height:48px;min-height:30px;object-fit:cover;margin-right:1em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-links{order:9;padding-right:1em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-link-text{margin-left:.25em}.quarto-dashboard #quarto-dashboard-header .navbar .quarto-dashboard-link{padding-right:0em;padding-left:.7em;text-decoration:none;color:rgb(84.32,84.66,85)}.quarto-dashboard .page-layout-custom .tab-content{padding:0;border:none}.quarto-dashboard-img-contain{height:100%;width:100%;object-fit:contain}@media(max-width: 575.98px){.quarto-dashboard .bslib-grid{grid-template-rows:minmax(1em, max-content) !important}.quarto-dashboard .sidebar-content{height:inherit}.quarto-dashboard .page-layout-custom{min-height:100vh}}.quarto-dashboard.dashboard-toolbar>.page-layout-custom,.quarto-dashboard.dashboard-sidebar>.page-layout-custom{padding:0}.quarto-dashboard .quarto-dashboard-content.quarto-dashboard-pages{padding:0}.quarto-dashboard .callout{margin-bottom:0;margin-top:0}.quarto-dashboard .html-fill-container figure{overflow:hidden}.quarto-dashboard bslib-tooltip .rounded-pill{border:solid #6c757d 1px}.quarto-dashboard bslib-tooltip .rounded-pill .svg{fill:#343a40}.quarto-dashboard .tabset .dashboard-card-no-title .nav-tabs{margin-left:0;margin-right:auto}.quarto-dashboard .tabset .tab-content{border:none}.quarto-dashboard .tabset .card-header .nav-link[role=tab]{margin-top:-6px;padding-top:6px;padding-bottom:6px}.quarto-dashboard .card.valuebox,.quarto-dashboard .card.bslib-value-box{min-height:3rem}.quarto-dashboard .card.valuebox .card-body,.quarto-dashboard .card.bslib-value-box .card-body{padding:0}.quarto-dashboard .bslib-value-box .value-box-value{font-size:clamp(.1em,15cqw,5em)}.quarto-dashboard .bslib-value-box .value-box-showcase .bi{font-size:clamp(.1em,max(18cqw,5.2cqh),5em);text-align:center;height:1em}.quarto-dashboard .bslib-value-box .value-box-showcase .bi::before{vertical-align:1em}.quarto-dashboard .bslib-value-box .value-box-area{margin-top:auto;margin-bottom:auto}.quarto-dashboard .card figure.quarto-float{display:flex;flex-direction:column;align-items:center}.quarto-dashboard .dashboard-scrolling{padding:1em}.quarto-dashboard .full-height{height:100%}.quarto-dashboard .showcase-bottom .value-box-grid{display:grid;grid-template-columns:1fr;grid-template-rows:1fr auto;grid-template-areas:"top" "bottom"}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-showcase{grid-area:bottom;padding:0;margin:0}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-showcase i.bi{font-size:4rem}.quarto-dashboard .showcase-bottom .value-box-grid .value-box-area{grid-area:top}.quarto-dashboard .tab-content{margin-bottom:0}.quarto-dashboard .bslib-card .bslib-navs-card-title{justify-content:stretch;align-items:end}.quarto-dashboard .card-header{display:flex;flex-wrap:wrap;justify-content:space-between}.quarto-dashboard .card-header .card-title{display:flex;flex-direction:column;justify-content:center;margin-bottom:0}.quarto-dashboard .tabset .card-toolbar{margin-bottom:1em}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout{border:none;gap:var(--bslib-spacer, 1rem)}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.main{padding:0}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.sidebar{border-radius:.25rem;border:1px solid rgba(0,0,0,.175)}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.collapse-toggle{display:none}@media(max-width: 767.98px){.quarto-dashboard .bslib-grid>.bslib-sidebar-layout{grid-template-columns:1fr;grid-template-rows:max-content 1fr}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout>.main{grid-column:1;grid-row:2}.quarto-dashboard .bslib-grid>.bslib-sidebar-layout .sidebar{grid-column:1;grid-row:1}}.quarto-dashboard .sidebar-right .sidebar{padding-left:2.5em}.quarto-dashboard .sidebar-right .collapse-toggle{left:2px}.quarto-dashboard .quarto-dashboard .sidebar-right button.collapse-toggle:not(.transitioning){left:unset}.quarto-dashboard aside.sidebar{padding-left:1em;padding-right:1em;background-color:rgba(52,58,64,.25);color:#343a40}.quarto-dashboard .bslib-sidebar-layout>div.main{padding:.7em}.quarto-dashboard .bslib-sidebar-layout button.collapse-toggle{margin-top:.3em}.quarto-dashboard .bslib-sidebar-layout .collapse-toggle{top:0}.quarto-dashboard .bslib-sidebar-layout.sidebar-collapsed:not(.transitioning):not(.sidebar-right) .collapse-toggle{left:2px}.quarto-dashboard .sidebar>section>.h3:first-of-type{margin-top:0em}.quarto-dashboard .sidebar .h3,.quarto-dashboard .sidebar .h4,.quarto-dashboard .sidebar .h5,.quarto-dashboard .sidebar .h6{margin-top:.5em}.quarto-dashboard .sidebar form{flex-direction:column;align-items:start;margin-bottom:1em}.quarto-dashboard .sidebar form div[class*=oi-][class$=-input]{flex-direction:column}.quarto-dashboard .sidebar form[class*=oi-][class$=-toggle]{flex-direction:row-reverse;align-items:center;justify-content:start}.quarto-dashboard .sidebar form input[type=range]{margin-top:.5em;margin-right:.8em;margin-left:1em}.quarto-dashboard .sidebar label{width:fit-content}.quarto-dashboard .sidebar .card-body{margin-bottom:2em}.quarto-dashboard .sidebar .shiny-input-container{margin-bottom:1em}.quarto-dashboard .sidebar .shiny-options-group{margin-top:0}.quarto-dashboard .sidebar .control-label{margin-bottom:.3em}.quarto-dashboard .card .card-body .quarto-layout-row{align-items:stretch}.quarto-dashboard .toolbar{font-size:.9em;display:flex;flex-direction:row;border-top:solid 1px hsl(210,3.0456852792%,74.5490196078%);padding:1em;flex-wrap:wrap;background-color:rgba(52,58,64,.25)}.quarto-dashboard .toolbar .cell-output-display{display:flex}.quarto-dashboard .toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .toolbar>*:last-child{margin-right:0}.quarto-dashboard .toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .toolbar .shiny-input-container{padding-bottom:0;margin-bottom:0}.quarto-dashboard .toolbar .shiny-input-container>*{flex-shrink:0;flex-grow:0}.quarto-dashboard .toolbar .form-group.shiny-input-container:not([role=group])>label{margin-bottom:0}.quarto-dashboard .toolbar .shiny-input-container.no-baseline{align-items:start;padding-top:6px}.quarto-dashboard .toolbar .shiny-input-container{display:flex;align-items:baseline}.quarto-dashboard .toolbar .shiny-input-container label{padding-right:.4em}.quarto-dashboard .toolbar .shiny-input-container .bslib-input-switch{margin-top:6px}.quarto-dashboard .toolbar input[type=text]{line-height:1;width:inherit}.quarto-dashboard .toolbar .input-daterange{width:inherit}.quarto-dashboard .toolbar .input-daterange input[type=text]{height:2.4em;width:10em}.quarto-dashboard .toolbar .input-daterange .input-group-addon{height:auto;padding:0;margin-left:-5px !important;margin-right:-5px}.quarto-dashboard .toolbar .input-daterange .input-group-addon .input-group-text{padding-top:0;padding-bottom:0;height:100%}.quarto-dashboard .toolbar span.irs.irs--shiny{width:10em}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-line{top:9px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-min,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-max,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-from,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-to,.quarto-dashboard .toolbar span.irs.irs--shiny .irs-single{top:20px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-bar{top:8px}.quarto-dashboard .toolbar span.irs.irs--shiny .irs-handle{top:0px}.quarto-dashboard .toolbar .shiny-input-checkboxgroup>label{margin-top:6px}.quarto-dashboard .toolbar .shiny-input-checkboxgroup>.shiny-options-group{margin-top:0;align-items:baseline}.quarto-dashboard .toolbar .shiny-input-radiogroup>label{margin-top:6px}.quarto-dashboard .toolbar .shiny-input-radiogroup>.shiny-options-group{align-items:baseline;margin-top:0}.quarto-dashboard .toolbar .shiny-input-radiogroup>.shiny-options-group>.radio{margin-right:.3em}.quarto-dashboard .toolbar .form-select{padding-top:.2em;padding-bottom:.2em}.quarto-dashboard .toolbar .shiny-input-select{min-width:6em}.quarto-dashboard .toolbar div.checkbox{margin-bottom:0px}.quarto-dashboard .toolbar>.checkbox:first-child{margin-top:6px}.quarto-dashboard .toolbar form{width:fit-content}.quarto-dashboard .toolbar form label{padding-top:.2em;padding-bottom:.2em;width:fit-content}.quarto-dashboard .toolbar form input[type=date]{width:fit-content}.quarto-dashboard .toolbar form input[type=color]{width:3em}.quarto-dashboard .toolbar form button{padding:.4em}.quarto-dashboard .toolbar form select{width:fit-content}.quarto-dashboard .toolbar>*{font-size:.9em;flex-grow:0}.quarto-dashboard .toolbar .shiny-input-container label{margin-bottom:1px}.quarto-dashboard .toolbar-bottom{margin-top:1em;margin-bottom:0 !important;order:2}.quarto-dashboard .quarto-dashboard-content>.dashboard-toolbar-container>.toolbar-content>.tab-content>.tab-pane>*:not(.bslib-sidebar-layout){padding:1em}.quarto-dashboard .quarto-dashboard-content>.dashboard-toolbar-container>.toolbar-content>*:not(.tab-content){padding:1em}.quarto-dashboard .quarto-dashboard-content>.tab-content>.dashboard-page>.dashboard-toolbar-container>.toolbar-content,.quarto-dashboard .quarto-dashboard-content>.tab-content>.dashboard-page:not(.dashboard-sidebar-container)>*:not(.dashboard-toolbar-container){padding:1em}.quarto-dashboard .toolbar-content{padding:0}.quarto-dashboard .quarto-dashboard-content.quarto-dashboard-pages .tab-pane>.dashboard-toolbar-container .toolbar{border-radius:0;margin-bottom:0}.quarto-dashboard .dashboard-toolbar-container.toolbar-toplevel .toolbar{border-bottom:1px solid rgba(0,0,0,.175)}.quarto-dashboard .dashboard-toolbar-container.toolbar-toplevel .toolbar-bottom{margin-top:0}.quarto-dashboard .dashboard-toolbar-container:not(.toolbar-toplevel) .toolbar{margin-bottom:1em;border-top:none;border-radius:.25rem;border:1px solid rgba(0,0,0,.175)}.quarto-dashboard .vega-embed.has-actions details{width:1.7em;height:2em;position:absolute !important;top:0;right:0}.quarto-dashboard .dashboard-toolbar-container{padding:0}.quarto-dashboard .card .card-header p:last-child,.quarto-dashboard .card .card-footer p:last-child{margin-bottom:0}.quarto-dashboard .card .card-body>.h4:first-child{margin-top:0}.quarto-dashboard .card .card-body{z-index:4}@media(max-width: 767.98px){.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_length,.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_info,.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_paginate{text-align:initial}.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_filter{text-align:right}.quarto-dashboard .card .card-body .itables div.dataTables_wrapper div.dataTables_paginate ul.pagination{justify-content:initial}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;padding-top:0}.quarto-dashboard .card .card-body .itables .dataTables_wrapper table{flex-shrink:0}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons{margin-bottom:.5em;margin-left:auto;width:fit-content;float:right}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons.btn-group{background:#fff;border:none}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons .btn-secondary{background-color:#fff;background-image:none;border:solid #dee2e6 1px;padding:.2em .7em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dt-buttons .btn span{font-size:.8em;color:#343a40}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{margin-left:.5em;margin-bottom:.5em;padding-top:0}@media(min-width: 768px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{font-size:.875em}}@media(max-width: 767.98px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_info{font-size:.8em}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_filter{margin-bottom:.5em;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_filter input[type=search]{padding:1px 5px 1px 5px;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_length{flex-basis:1 1 50%;margin-bottom:.5em;font-size:.875em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_length select{padding:.4em 3em .4em .5em;font-size:.875em;margin-left:.2em;margin-right:.2em}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate{flex-shrink:0}@media(min-width: 768px){.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate{margin-left:auto}}.quarto-dashboard .card .card-body .itables .dataTables_wrapper .dataTables_paginate ul.pagination .paginate_button .page-link{font-size:.8em}.quarto-dashboard .card .card-footer{font-size:.9em}.quarto-dashboard .card .card-toolbar{display:flex;flex-grow:1;flex-direction:row;width:100%;flex-wrap:wrap}.quarto-dashboard .card .card-toolbar>*{font-size:.8em;flex-grow:0}.quarto-dashboard .card .card-toolbar>.card-title{font-size:1em;flex-grow:1;align-self:flex-start;margin-top:.1em}.quarto-dashboard .card .card-toolbar .cell-output-display{display:flex}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .card .card-toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card .card-toolbar>*:last-child{margin-right:0}.quarto-dashboard .card .card-toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .card .card-toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .card .card-toolbar form{width:fit-content}.quarto-dashboard .card .card-toolbar form label{padding-top:.2em;padding-bottom:.2em;width:fit-content}.quarto-dashboard .card .card-toolbar form input[type=date]{width:fit-content}.quarto-dashboard .card .card-toolbar form input[type=color]{width:3em}.quarto-dashboard .card .card-toolbar form button{padding:.4em}.quarto-dashboard .card .card-toolbar form select{width:fit-content}.quarto-dashboard .card .card-toolbar .cell-output-display{display:flex}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:.5em;margin-bottom:.5em;width:inherit}.quarto-dashboard .card .card-toolbar .shiny-input-container>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card .card-toolbar>*:last-child{margin-right:0}.quarto-dashboard .card .card-toolbar>*>*{margin-right:1em;align-items:baseline}.quarto-dashboard .card .card-toolbar>*>*>a{text-decoration:none;margin-top:auto;margin-bottom:auto}.quarto-dashboard .card .card-toolbar .shiny-input-container{padding-bottom:0;margin-bottom:0}.quarto-dashboard .card .card-toolbar .shiny-input-container>*{flex-shrink:0;flex-grow:0}.quarto-dashboard .card .card-toolbar .form-group.shiny-input-container:not([role=group])>label{margin-bottom:0}.quarto-dashboard .card .card-toolbar .shiny-input-container.no-baseline{align-items:start;padding-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-container{display:flex;align-items:baseline}.quarto-dashboard .card .card-toolbar .shiny-input-container label{padding-right:.4em}.quarto-dashboard .card .card-toolbar .shiny-input-container .bslib-input-switch{margin-top:6px}.quarto-dashboard .card .card-toolbar input[type=text]{line-height:1;width:inherit}.quarto-dashboard .card .card-toolbar .input-daterange{width:inherit}.quarto-dashboard .card .card-toolbar .input-daterange input[type=text]{height:2.4em;width:10em}.quarto-dashboard .card .card-toolbar .input-daterange .input-group-addon{height:auto;padding:0;margin-left:-5px !important;margin-right:-5px}.quarto-dashboard .card .card-toolbar .input-daterange .input-group-addon .input-group-text{padding-top:0;padding-bottom:0;height:100%}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny{width:10em}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-line{top:9px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-min,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-max,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-from,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-to,.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-single{top:20px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-bar{top:8px}.quarto-dashboard .card .card-toolbar span.irs.irs--shiny .irs-handle{top:0px}.quarto-dashboard .card .card-toolbar .shiny-input-checkboxgroup>label{margin-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-checkboxgroup>.shiny-options-group{margin-top:0;align-items:baseline}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>label{margin-top:6px}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>.shiny-options-group{align-items:baseline;margin-top:0}.quarto-dashboard .card .card-toolbar .shiny-input-radiogroup>.shiny-options-group>.radio{margin-right:.3em}.quarto-dashboard .card .card-toolbar .form-select{padding-top:.2em;padding-bottom:.2em}.quarto-dashboard .card .card-toolbar .shiny-input-select{min-width:6em}.quarto-dashboard .card .card-toolbar div.checkbox{margin-bottom:0px}.quarto-dashboard .card .card-toolbar>.checkbox:first-child{margin-top:6px}.quarto-dashboard .card-body>table>thead{border-top:none}.quarto-dashboard .card-body>.table>:not(caption)>*>*{background-color:#fff}.tableFloatingHeaderOriginal{background-color:#fff;position:sticky !important;top:0 !important}.dashboard-data-table{margin-top:-1px}div.value-box-area span.observablehq--number{font-size:calc(clamp(.1em,15cqw,5em)*1.25);line-height:1.2;color:inherit;font-family:var(--bs-body-font-family)}.quarto-listing{padding-bottom:1em}.listing-pagination{padding-top:.5em}ul.pagination{float:right;padding-left:8px;padding-top:.5em}ul.pagination li{padding-right:.75em}ul.pagination li.disabled a,ul.pagination li.active a{color:#fff;text-decoration:none}ul.pagination li:last-of-type{padding-right:0}.listing-actions-group{display:flex}.quarto-listing-filter{margin-bottom:1em;width:200px;margin-left:auto}.quarto-listing-sort{margin-bottom:1em;margin-right:auto;width:auto}.quarto-listing-sort .input-group-text{font-size:.8em}.input-group-text{border-right:none}.quarto-listing-sort select.form-select{font-size:.8em}.listing-no-matching{text-align:center;padding-top:2em;padding-bottom:3em;font-size:1em}#quarto-margin-sidebar .quarto-listing-category{padding-top:0;font-size:1rem}#quarto-margin-sidebar .quarto-listing-category-title{cursor:pointer;font-weight:600;font-size:1rem}.quarto-listing-category .category{cursor:pointer}.quarto-listing-category .category.active{font-weight:600}.quarto-listing-category.category-cloud{display:flex;flex-wrap:wrap;align-items:baseline}.quarto-listing-category.category-cloud .category{padding-right:5px}.quarto-listing-category.category-cloud .category-cloud-1{font-size:.75em}.quarto-listing-category.category-cloud .category-cloud-2{font-size:.95em}.quarto-listing-category.category-cloud .category-cloud-3{font-size:1.15em}.quarto-listing-category.category-cloud .category-cloud-4{font-size:1.35em}.quarto-listing-category.category-cloud .category-cloud-5{font-size:1.55em}.quarto-listing-category.category-cloud .category-cloud-6{font-size:1.75em}.quarto-listing-category.category-cloud .category-cloud-7{font-size:1.95em}.quarto-listing-category.category-cloud .category-cloud-8{font-size:2.15em}.quarto-listing-category.category-cloud .category-cloud-9{font-size:2.35em}.quarto-listing-category.category-cloud .category-cloud-10{font-size:2.55em}.quarto-listing-cols-1{grid-template-columns:repeat(1, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-1{grid-template-columns:repeat(1, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-1{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-2{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-3{grid-template-columns:repeat(3, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-3{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-3{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-4{grid-template-columns:repeat(4, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-4{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-4{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-5{grid-template-columns:repeat(5, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-5{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-5{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-6{grid-template-columns:repeat(6, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-6{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-6{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-7{grid-template-columns:repeat(7, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-7{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-7{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-8{grid-template-columns:repeat(8, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-8{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-8{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-9{grid-template-columns:repeat(9, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-9{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-9{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-10{grid-template-columns:repeat(10, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-10{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-10{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-11{grid-template-columns:repeat(11, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-11{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-11{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-cols-12{grid-template-columns:repeat(12, minmax(0, 1fr));gap:1.5em}@media(max-width: 767.98px){.quarto-listing-cols-12{grid-template-columns:repeat(2, minmax(0, 1fr));gap:1.5em}}@media(max-width: 575.98px){.quarto-listing-cols-12{grid-template-columns:minmax(0, 1fr);gap:1.5em}}.quarto-listing-grid{gap:1.5em}.quarto-grid-item.borderless{border:none}.quarto-grid-item.borderless .listing-categories .listing-category:last-of-type,.quarto-grid-item.borderless .listing-categories .listing-category:first-of-type{padding-left:0}.quarto-grid-item.borderless .listing-categories .listing-category{border:0}.quarto-grid-link{text-decoration:none;color:inherit}.quarto-grid-link:hover{text-decoration:none;color:inherit}.quarto-grid-item h5.title,.quarto-grid-item .title.h5{margin-top:0;margin-bottom:0}.quarto-grid-item .card-footer{display:flex;justify-content:space-between;font-size:.8em}.quarto-grid-item .card-footer p{margin-bottom:0}.quarto-grid-item p.card-img-top{margin-bottom:0}.quarto-grid-item p.card-img-top>img{object-fit:cover}.quarto-grid-item .card-other-values{margin-top:.5em;font-size:.8em}.quarto-grid-item .card-other-values tr{margin-bottom:.5em}.quarto-grid-item .card-other-values tr>td:first-of-type{font-weight:600;padding-right:1em;padding-left:1em;vertical-align:top}.quarto-grid-item div.post-contents{display:flex;flex-direction:column;text-decoration:none;height:100%}.quarto-grid-item .listing-item-img-placeholder{background-color:rgba(52,58,64,.25);flex-shrink:0}.quarto-grid-item .card-attribution{padding-top:1em;display:flex;gap:1em;text-transform:uppercase;color:#6c757d;font-weight:500;flex-grow:10;align-items:flex-end}.quarto-grid-item .description{padding-bottom:1em}.quarto-grid-item .card-attribution .date{align-self:flex-end}.quarto-grid-item .card-attribution.justify{justify-content:space-between}.quarto-grid-item .card-attribution.start{justify-content:flex-start}.quarto-grid-item .card-attribution.end{justify-content:flex-end}.quarto-grid-item .card-title{margin-bottom:.1em}.quarto-grid-item .card-subtitle{padding-top:.25em}.quarto-grid-item .card-text{font-size:.9em}.quarto-grid-item .listing-reading-time{padding-bottom:.25em}.quarto-grid-item .card-text-small{font-size:.8em}.quarto-grid-item .card-subtitle.subtitle{font-size:.9em;font-weight:600;padding-bottom:.5em}.quarto-grid-item .listing-categories{display:flex;flex-wrap:wrap;padding-bottom:5px}.quarto-grid-item .listing-categories .listing-category{color:#6c757d;border:solid 1px #dee2e6;border-radius:.25rem;text-transform:uppercase;font-size:.65em;padding-left:.5em;padding-right:.5em;padding-top:.15em;padding-bottom:.15em;cursor:pointer;margin-right:4px;margin-bottom:4px}.quarto-grid-item.card-right{text-align:right}.quarto-grid-item.card-right .listing-categories{justify-content:flex-end}.quarto-grid-item.card-left{text-align:left}.quarto-grid-item.card-center{text-align:center}.quarto-grid-item.card-center .listing-description{text-align:justify}.quarto-grid-item.card-center .listing-categories{justify-content:center}table.quarto-listing-table td.image{padding:0px}table.quarto-listing-table td.image img{width:100%;max-width:50px;object-fit:contain}table.quarto-listing-table a{text-decoration:none;word-break:keep-all}table.quarto-listing-table th a{color:inherit}table.quarto-listing-table th a.asc:after{margin-bottom:-2px;margin-left:5px;display:inline-block;height:1rem;width:1rem;background-repeat:no-repeat;background-size:1rem 1rem;background-image:url('data:image/svg+xml,');content:""}table.quarto-listing-table th a.desc:after{margin-bottom:-2px;margin-left:5px;display:inline-block;height:1rem;width:1rem;background-repeat:no-repeat;background-size:1rem 1rem;background-image:url('data:image/svg+xml,');content:""}table.quarto-listing-table.table-hover td{cursor:pointer}.quarto-post.image-left{flex-direction:row}.quarto-post.image-right{flex-direction:row-reverse}@media(max-width: 767.98px){.quarto-post.image-right,.quarto-post.image-left{gap:0em;flex-direction:column}.quarto-post .metadata{padding-bottom:1em;order:2}.quarto-post .body{order:1}.quarto-post .thumbnail{order:3}}.list.quarto-listing-default div:last-of-type{border-bottom:none}@media(min-width: 992px){.quarto-listing-container-default{margin-right:2em}}div.quarto-post{display:flex;gap:2em;margin-bottom:1.5em;border-bottom:1px solid #dee2e6}@media(max-width: 767.98px){div.quarto-post{padding-bottom:1em}}div.quarto-post .metadata{flex-basis:20%;flex-grow:0;margin-top:.2em;flex-shrink:10}div.quarto-post .thumbnail{flex-basis:30%;flex-grow:0;flex-shrink:0}div.quarto-post .thumbnail img{margin-top:.4em;width:100%;object-fit:cover}div.quarto-post .body{flex-basis:45%;flex-grow:1;flex-shrink:0}div.quarto-post .body h3.listing-title,div.quarto-post .body .listing-title.h3{margin-top:0px;margin-bottom:0px;border-bottom:none}div.quarto-post .body .listing-subtitle{font-size:.875em;margin-bottom:.5em;margin-top:.2em}div.quarto-post .body .description{font-size:.9em}div.quarto-post .body pre code{white-space:pre-wrap}div.quarto-post a{color:#343a40;text-decoration:none}div.quarto-post .metadata{display:flex;flex-direction:column;font-size:.8em;font-family:"Source Sans Pro",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";flex-basis:33%}div.quarto-post .listing-categories{display:flex;flex-wrap:wrap;padding-bottom:5px}div.quarto-post .listing-categories .listing-category{color:#6c757d;border:solid 1px #dee2e6;border-radius:.25rem;text-transform:uppercase;font-size:.65em;padding-left:.5em;padding-right:.5em;padding-top:.15em;padding-bottom:.15em;cursor:pointer;margin-right:4px;margin-bottom:4px}div.quarto-post .listing-description{margin-bottom:.5em}div.quarto-about-jolla{display:flex !important;flex-direction:column;align-items:center;margin-top:10%;padding-bottom:1em}div.quarto-about-jolla .about-image{object-fit:cover;margin-left:auto;margin-right:auto;margin-bottom:1.5em}div.quarto-about-jolla img.round{border-radius:50%}div.quarto-about-jolla img.rounded{border-radius:10px}div.quarto-about-jolla .quarto-title h1.title,div.quarto-about-jolla .quarto-title .title.h1{text-align:center}div.quarto-about-jolla .quarto-title .description{text-align:center}div.quarto-about-jolla h2,div.quarto-about-jolla .h2{border-bottom:none}div.quarto-about-jolla .about-sep{width:60%}div.quarto-about-jolla main{text-align:center}div.quarto-about-jolla .about-links{display:flex}@media(min-width: 992px){div.quarto-about-jolla .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-jolla .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-jolla .about-link{color:rgb(97.724137931,109,120.275862069);text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-jolla .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-jolla .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-jolla .about-link:hover{color:#2761e3}div.quarto-about-jolla .about-link i.bi{margin-right:.15em}div.quarto-about-solana{display:flex !important;flex-direction:column;padding-top:3em !important;padding-bottom:1em}div.quarto-about-solana .about-entity{display:flex !important;align-items:start;justify-content:space-between}@media(min-width: 992px){div.quarto-about-solana .about-entity{flex-direction:row}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity{flex-direction:column-reverse;align-items:center;text-align:center}}div.quarto-about-solana .about-entity .entity-contents{display:flex;flex-direction:column}@media(max-width: 767.98px){div.quarto-about-solana .about-entity .entity-contents{width:100%}}div.quarto-about-solana .about-entity .about-image{object-fit:cover}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-image{margin-bottom:1.5em}}div.quarto-about-solana .about-entity img.round{border-radius:50%}div.quarto-about-solana .about-entity img.rounded{border-radius:10px}div.quarto-about-solana .about-entity .about-links{display:flex;justify-content:left;padding-bottom:1.2em}@media(min-width: 992px){div.quarto-about-solana .about-entity .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-solana .about-entity .about-link{color:rgb(97.724137931,109,120.275862069);text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-solana .about-entity .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-solana .about-entity .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-solana .about-entity .about-link:hover{color:#2761e3}div.quarto-about-solana .about-entity .about-link i.bi{margin-right:.15em}div.quarto-about-solana .about-contents{padding-right:1.5em;flex-basis:0;flex-grow:1}div.quarto-about-solana .about-contents main.content{margin-top:0}div.quarto-about-solana .about-contents h2,div.quarto-about-solana .about-contents .h2{border-bottom:none}div.quarto-about-trestles{display:flex !important;flex-direction:row;padding-top:3em !important;padding-bottom:1em}@media(max-width: 991.98px){div.quarto-about-trestles{flex-direction:column;padding-top:0em !important}}div.quarto-about-trestles .about-entity{display:flex !important;flex-direction:column;align-items:center;text-align:center;padding-right:1em}@media(min-width: 992px){div.quarto-about-trestles .about-entity{flex:0 0 42%}}div.quarto-about-trestles .about-entity .about-image{object-fit:cover;margin-bottom:1.5em}div.quarto-about-trestles .about-entity img.round{border-radius:50%}div.quarto-about-trestles .about-entity img.rounded{border-radius:10px}div.quarto-about-trestles .about-entity .about-links{display:flex;justify-content:center}@media(min-width: 992px){div.quarto-about-trestles .about-entity .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-trestles .about-entity .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-trestles .about-entity .about-link{color:rgb(97.724137931,109,120.275862069);text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-trestles .about-entity .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-trestles .about-entity .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-trestles .about-entity .about-link:hover{color:#2761e3}div.quarto-about-trestles .about-entity .about-link i.bi{margin-right:.15em}div.quarto-about-trestles .about-contents{flex-basis:0;flex-grow:1}div.quarto-about-trestles .about-contents h2,div.quarto-about-trestles .about-contents .h2{border-bottom:none}@media(min-width: 992px){div.quarto-about-trestles .about-contents{border-left:solid 1px #dee2e6;padding-left:1.5em}}div.quarto-about-trestles .about-contents main.content{margin-top:0}div.quarto-about-marquee{padding-bottom:1em}div.quarto-about-marquee .about-contents{display:flex;flex-direction:column}div.quarto-about-marquee .about-image{max-height:550px;margin-bottom:1.5em;object-fit:cover}div.quarto-about-marquee img.round{border-radius:50%}div.quarto-about-marquee img.rounded{border-radius:10px}div.quarto-about-marquee h2,div.quarto-about-marquee .h2{border-bottom:none}div.quarto-about-marquee .about-links{display:flex;justify-content:center;padding-top:1.5em}@media(min-width: 992px){div.quarto-about-marquee .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-marquee .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-marquee .about-link{color:rgb(97.724137931,109,120.275862069);text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-marquee .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-marquee .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-marquee .about-link:hover{color:#2761e3}div.quarto-about-marquee .about-link i.bi{margin-right:.15em}@media(min-width: 992px){div.quarto-about-marquee .about-link{border:none}}div.quarto-about-broadside{display:flex;flex-direction:column;padding-bottom:1em}div.quarto-about-broadside .about-main{display:flex !important;padding-top:0 !important}@media(min-width: 992px){div.quarto-about-broadside .about-main{flex-direction:row;align-items:flex-start}}@media(max-width: 991.98px){div.quarto-about-broadside .about-main{flex-direction:column}}@media(max-width: 991.98px){div.quarto-about-broadside .about-main .about-entity{flex-shrink:0;width:100%;height:450px;margin-bottom:1.5em;background-size:cover;background-repeat:no-repeat}}@media(min-width: 992px){div.quarto-about-broadside .about-main .about-entity{flex:0 10 50%;margin-right:1.5em;width:100%;height:100%;background-size:100%;background-repeat:no-repeat}}div.quarto-about-broadside .about-main .about-contents{padding-top:14px;flex:0 0 50%}div.quarto-about-broadside h2,div.quarto-about-broadside .h2{border-bottom:none}div.quarto-about-broadside .about-sep{margin-top:1.5em;width:60%;align-self:center}div.quarto-about-broadside .about-links{display:flex;justify-content:center;column-gap:20px;padding-top:1.5em}@media(min-width: 992px){div.quarto-about-broadside .about-links{flex-direction:row;column-gap:.8em;row-gap:15px;flex-wrap:wrap}}@media(max-width: 991.98px){div.quarto-about-broadside .about-links{flex-direction:column;row-gap:1em;width:100%;padding-bottom:1.5em}}div.quarto-about-broadside .about-link{color:rgb(97.724137931,109,120.275862069);text-decoration:none;border:solid 1px}@media(min-width: 992px){div.quarto-about-broadside .about-link{font-size:.8em;padding:.25em .5em;border-radius:4px}}@media(max-width: 991.98px){div.quarto-about-broadside .about-link{font-size:1.1em;padding:.5em .5em;text-align:center;border-radius:6px}}div.quarto-about-broadside .about-link:hover{color:#2761e3}div.quarto-about-broadside .about-link i.bi{margin-right:.15em}@media(min-width: 992px){div.quarto-about-broadside .about-link{border:none}}.tippy-box[data-theme~=quarto]{background-color:#fff;border:solid 1px #dee2e6;border-radius:.25rem;color:#343a40;font-size:.875rem}.tippy-box[data-theme~=quarto]>.tippy-backdrop{background-color:#fff}.tippy-box[data-theme~=quarto]>.tippy-arrow:after,.tippy-box[data-theme~=quarto]>.tippy-svg-arrow:after{content:"";position:absolute;z-index:-1}.tippy-box[data-theme~=quarto]>.tippy-arrow:after{border-color:rgba(0,0,0,0);border-style:solid}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-6px}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-6px}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-6px}.tippy-box[data-placement^=left]>.tippy-arrow:before{right:-6px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-arrow:before{border-top-color:#fff}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-arrow:after{border-top-color:#dee2e6;border-width:7px 7px 0;top:17px;left:1px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-svg-arrow>svg{top:16px}.tippy-box[data-theme~=quarto][data-placement^=top]>.tippy-svg-arrow:after{top:17px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-arrow:before{border-bottom-color:#fff;bottom:16px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-arrow:after{border-bottom-color:#dee2e6;border-width:0 7px 7px;bottom:17px;left:1px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-svg-arrow>svg{bottom:15px}.tippy-box[data-theme~=quarto][data-placement^=bottom]>.tippy-svg-arrow:after{bottom:17px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-arrow:before{border-left-color:#fff}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-arrow:after{border-left-color:#dee2e6;border-width:7px 0 7px 7px;left:17px;top:1px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-svg-arrow>svg{left:11px}.tippy-box[data-theme~=quarto][data-placement^=left]>.tippy-svg-arrow:after{left:12px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-arrow:before{border-right-color:#fff;right:16px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-arrow:after{border-width:7px 7px 7px 0;right:17px;top:1px;border-right-color:#dee2e6}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-svg-arrow>svg{right:11px}.tippy-box[data-theme~=quarto][data-placement^=right]>.tippy-svg-arrow:after{right:12px}.tippy-box[data-theme~=quarto]>.tippy-svg-arrow{fill:#343a40}.tippy-box[data-theme~=quarto]>.tippy-svg-arrow:after{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMCA2czEuNzk2LS4wMTMgNC42Ny0zLjYxNUM1Ljg1MS45IDYuOTMuMDA2IDggMGMxLjA3LS4wMDYgMi4xNDguODg3IDMuMzQzIDIuMzg1QzE0LjIzMyA2LjAwNSAxNiA2IDE2IDZIMHoiIGZpbGw9InJnYmEoMCwgOCwgMTYsIDAuMikiLz48L3N2Zz4=);background-size:16px 6px;width:16px;height:6px}.top-right{position:absolute;top:1em;right:1em}.visually-hidden{border:0;clip:rect(0 0 0 0);height:auto;margin:0;overflow:hidden;padding:0;position:absolute;width:1px;white-space:nowrap}.hidden{display:none !important}.zindex-bottom{z-index:-1 !important}figure.figure{display:block}.quarto-layout-panel{margin-bottom:1em}.quarto-layout-panel>figure{width:100%}.quarto-layout-panel>figure>figcaption,.quarto-layout-panel>.panel-caption{margin-top:10pt}.quarto-layout-panel>.table-caption{margin-top:0px}.table-caption p{margin-bottom:.5em}.quarto-layout-row{display:flex;flex-direction:row;align-items:flex-start}.quarto-layout-valign-top{align-items:flex-start}.quarto-layout-valign-bottom{align-items:flex-end}.quarto-layout-valign-center{align-items:center}.quarto-layout-cell{position:relative;margin-right:20px}.quarto-layout-cell:last-child{margin-right:0}.quarto-layout-cell figure,.quarto-layout-cell>p{margin:.2em}.quarto-layout-cell img{max-width:100%}.quarto-layout-cell .html-widget{width:100% !important}.quarto-layout-cell div figure p{margin:0}.quarto-layout-cell figure{display:block;margin-inline-start:0;margin-inline-end:0}.quarto-layout-cell table{display:inline-table}.quarto-layout-cell-subref figcaption,figure .quarto-layout-row figure figcaption{text-align:center;font-style:italic}.quarto-figure{position:relative;margin-bottom:1em}.quarto-figure>figure{width:100%;margin-bottom:0}.quarto-figure-left>figure>p,.quarto-figure-left>figure>div{text-align:left}.quarto-figure-center>figure>p,.quarto-figure-center>figure>div{text-align:center}.quarto-figure-right>figure>p,.quarto-figure-right>figure>div{text-align:right}.quarto-figure>figure>div.cell-annotation,.quarto-figure>figure>div code{text-align:left}figure>p:empty{display:none}figure>p:first-child{margin-top:0;margin-bottom:0}figure>figcaption.quarto-float-caption-bottom{margin-bottom:.5em}figure>figcaption.quarto-float-caption-top{margin-top:.5em}div[id^=tbl-]{position:relative}.quarto-figure>.anchorjs-link{position:absolute;top:.6em;right:.5em}div[id^=tbl-]>.anchorjs-link{position:absolute;top:.7em;right:.3em}.quarto-figure:hover>.anchorjs-link,div[id^=tbl-]:hover>.anchorjs-link,h2:hover>.anchorjs-link,.h2:hover>.anchorjs-link,h3:hover>.anchorjs-link,.h3:hover>.anchorjs-link,h4:hover>.anchorjs-link,.h4:hover>.anchorjs-link,h5:hover>.anchorjs-link,.h5:hover>.anchorjs-link,h6:hover>.anchorjs-link,.h6:hover>.anchorjs-link,.reveal-anchorjs-link>.anchorjs-link{opacity:1}#title-block-header{margin-block-end:1rem;position:relative;margin-top:-1px}#title-block-header .abstract{margin-block-start:1rem}#title-block-header .abstract .abstract-title{font-weight:600}#title-block-header a{text-decoration:none}#title-block-header .author,#title-block-header .date,#title-block-header .doi{margin-block-end:.2rem}#title-block-header .quarto-title-block>div{display:flex}#title-block-header .quarto-title-block>div>h1,#title-block-header .quarto-title-block>div>.h1{flex-grow:1}#title-block-header .quarto-title-block>div>button{flex-shrink:0;height:2.25rem;margin-top:0}@media(min-width: 992px){#title-block-header .quarto-title-block>div>button{margin-top:5px}}tr.header>th>p:last-of-type{margin-bottom:0px}table,table.table{margin-top:.5rem;margin-bottom:.5rem}caption,.table-caption{padding-top:.5rem;padding-bottom:.5rem;text-align:center}figure.quarto-float-tbl figcaption.quarto-float-caption-top{margin-top:.5rem;margin-bottom:.25rem;text-align:center}figure.quarto-float-tbl figcaption.quarto-float-caption-bottom{padding-top:.25rem;margin-bottom:.5rem;text-align:center}.utterances{max-width:none;margin-left:-8px}iframe{margin-bottom:1em}details{margin-bottom:1em}details[show]{margin-bottom:0}details>summary{color:#6c757d}details>summary>p:only-child{display:inline}div.code-copy-outer-scaffold{position:relative}dd code:not(.sourceCode),p code:not(.sourceCode){white-space:pre-wrap}code{white-space:pre}@media print{code{white-space:pre-wrap}}pre>code{display:block}pre>code.sourceCode{white-space:pre}pre>code.sourceCode>span>a:first-child::before{text-decoration:none}pre.code-overflow-wrap>code.sourceCode{white-space:pre-wrap}pre.code-overflow-scroll>code.sourceCode{white-space:pre}code a:any-link{color:inherit;text-decoration:none}code a:hover{color:inherit;text-decoration:underline}ul.task-list{padding-left:1em}[data-tippy-root]{display:inline-block}.tippy-content .footnote-back{display:none}.footnote-back{margin-left:.2em}.tippy-content{overflow-x:auto}.quarto-embedded-source-code{display:none}.quarto-unresolved-ref{font-weight:600}.quarto-cover-image{max-width:35%;float:right;margin-left:30px}.cell-output-display .widget-subarea{margin-bottom:1em}.cell-output-display:not(.no-overflow-x),.knitsql-table:not(.no-overflow-x){overflow-x:auto}.panel-input{margin-bottom:1em}.panel-input>div,.panel-input>div>div{display:inline-block;vertical-align:top;padding-right:12px}.panel-input>p:last-child{margin-bottom:0}.layout-sidebar{margin-bottom:1em}.layout-sidebar .tab-content{border:none}.tab-content>.page-columns.active{display:grid}div.sourceCode>iframe{width:100%;height:300px;margin-bottom:-0.5em}a{text-underline-offset:3px}.callout pre.sourceCode{padding-left:0}div.ansi-escaped-output{font-family:monospace;display:block}/*! +* +* ansi colors from IPython notebook's +* +* we also add `bright-[color]-` synonyms for the `-[color]-intense` classes since +* that seems to be what ansi_up emits +* +*/.ansi-black-fg{color:#3e424d}.ansi-black-bg{background-color:#3e424d}.ansi-black-intense-black,.ansi-bright-black-fg{color:#282c36}.ansi-black-intense-black,.ansi-bright-black-bg{background-color:#282c36}.ansi-red-fg{color:#e75c58}.ansi-red-bg{background-color:#e75c58}.ansi-red-intense-red,.ansi-bright-red-fg{color:#b22b31}.ansi-red-intense-red,.ansi-bright-red-bg{background-color:#b22b31}.ansi-green-fg{color:#00a250}.ansi-green-bg{background-color:#00a250}.ansi-green-intense-green,.ansi-bright-green-fg{color:#007427}.ansi-green-intense-green,.ansi-bright-green-bg{background-color:#007427}.ansi-yellow-fg{color:#ddb62b}.ansi-yellow-bg{background-color:#ddb62b}.ansi-yellow-intense-yellow,.ansi-bright-yellow-fg{color:#b27d12}.ansi-yellow-intense-yellow,.ansi-bright-yellow-bg{background-color:#b27d12}.ansi-blue-fg{color:#208ffb}.ansi-blue-bg{background-color:#208ffb}.ansi-blue-intense-blue,.ansi-bright-blue-fg{color:#0065ca}.ansi-blue-intense-blue,.ansi-bright-blue-bg{background-color:#0065ca}.ansi-magenta-fg{color:#d160c4}.ansi-magenta-bg{background-color:#d160c4}.ansi-magenta-intense-magenta,.ansi-bright-magenta-fg{color:#a03196}.ansi-magenta-intense-magenta,.ansi-bright-magenta-bg{background-color:#a03196}.ansi-cyan-fg{color:#60c6c8}.ansi-cyan-bg{background-color:#60c6c8}.ansi-cyan-intense-cyan,.ansi-bright-cyan-fg{color:#258f8f}.ansi-cyan-intense-cyan,.ansi-bright-cyan-bg{background-color:#258f8f}.ansi-white-fg{color:#c5c1b4}.ansi-white-bg{background-color:#c5c1b4}.ansi-white-intense-white,.ansi-bright-white-fg{color:#a1a6b2}.ansi-white-intense-white,.ansi-bright-white-bg{background-color:#a1a6b2}.ansi-default-inverse-fg{color:#fff}.ansi-default-inverse-bg{background-color:#000}.ansi-bold{font-weight:bold}.ansi-underline{text-decoration:underline}:root{--quarto-body-bg: #fff;--quarto-body-color: #343a40;--quarto-text-muted: #6c757d;--quarto-border-color: #dee2e6;--quarto-border-width: 1px}table.gt_table{color:var(--quarto-body-color);font-size:1em;width:100%;background-color:rgba(0,0,0,0);border-top-width:inherit;border-bottom-width:inherit;border-color:var(--quarto-border-color)}table.gt_table th.gt_column_spanner_outer{color:var(--quarto-body-color);background-color:rgba(0,0,0,0);border-top-width:inherit;border-bottom-width:inherit;border-color:var(--quarto-border-color)}table.gt_table th.gt_col_heading{color:var(--quarto-body-color);font-weight:bold;background-color:rgba(0,0,0,0)}table.gt_table thead.gt_col_headings{border-bottom:1px solid currentColor;border-top-width:inherit;border-top-color:var(--quarto-border-color)}table.gt_table thead.gt_col_headings:not(:first-child){border-top-width:1px;border-top-color:var(--quarto-border-color)}table.gt_table td.gt_row{border-bottom-width:1px;border-bottom-color:var(--quarto-border-color);border-top-width:0px}table.gt_table tbody.gt_table_body{border-top-width:1px;border-bottom-width:1px;border-bottom-color:var(--quarto-border-color);border-top-color:currentColor}div.columns{display:initial;gap:initial}div.column{display:inline-block;overflow-x:initial;vertical-align:top;width:50%}.code-annotation-tip-content{word-wrap:break-word}.code-annotation-container-hidden{display:none !important}dl.code-annotation-container-grid{display:grid;grid-template-columns:min-content auto}dl.code-annotation-container-grid dt{grid-column:1}dl.code-annotation-container-grid dd{grid-column:2}pre.sourceCode.code-annotation-code{padding-right:0}code.sourceCode .code-annotation-anchor{z-index:100;position:relative;float:right;background-color:rgba(0,0,0,0)}input[type=checkbox]{margin-right:.5ch}:root{--mermaid-bg-color: #fff;--mermaid-edge-color: #343a40;--mermaid-node-fg-color: #343a40;--mermaid-fg-color: #343a40;--mermaid-fg-color--lighter: rgb(74.8620689655, 83.5, 92.1379310345);--mermaid-fg-color--lightest: rgb(97.724137931, 109, 120.275862069);--mermaid-font-family: Source Sans Pro, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol;--mermaid-label-bg-color: #fff;--mermaid-label-fg-color: #2780e3;--mermaid-node-bg-color: rgba(39, 128, 227, 0.1);--mermaid-node-fg-color: #343a40}@media print{:root{font-size:11pt}#quarto-sidebar,#TOC,.nav-page{display:none}.page-columns .content{grid-column-start:page-start}.fixed-top{position:relative}.panel-caption,.figure-caption,figcaption{color:#666}}.code-copy-button{position:absolute;top:0;right:0;border:0;margin-top:5px;margin-right:5px;background-color:rgba(0,0,0,0);z-index:3}.code-copy-button-tooltip{font-size:.75em}div.code-copy-outer-scaffold:hover>.code-copy-button>.bi::before{display:inline-block;height:1rem;width:1rem;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:1rem 1rem}div.code-copy-outer-scaffold:hover>.code-copy-button-checked>.bi::before{background-image:url('data:image/svg+xml,')}div.code-copy-outer-scaffold:hover>.code-copy-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}div.code-copy-outer-scaffold:hover>.code-copy-button-checked:hover>.bi::before{background-image:url('data:image/svg+xml,')}main ol ol,main ul ul,main ol ul,main ul ol{margin-bottom:1em}ul>li:not(:has(>p))>ul,ol>li:not(:has(>p))>ul,ul>li:not(:has(>p))>ol,ol>li:not(:has(>p))>ol{margin-bottom:0}ul>li:not(:has(>p))>ul>li:has(>p),ol>li:not(:has(>p))>ul>li:has(>p),ul>li:not(:has(>p))>ol>li:has(>p),ol>li:not(:has(>p))>ol>li:has(>p){margin-top:1rem}body{margin:0}main.page-columns>header>h1.title,main.page-columns>header>.title.h1{margin-bottom:0}@media(min-width: 992px){body .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(1050px - 3em)) [body-content-end] 1.5em [body-end] 21px [body-end-outset] minmax(45px, 87px) [page-end-inset] 21px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.fullcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(1050px - 3em)) [body-content-end] 1.5em [body-end] 21px [body-end-outset] 21px [page-end-inset page-end] 5fr [screen-end-inset] 1.5em}body.slimcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset] 35px [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(500px, calc(1050px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(0px, 120px) [page-end-inset] 35px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.listing:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1050px - 3em)) [body-content-end] 3em [body-end] 50px [body-end-outset] minmax(0px, 150px) [page-end-inset] minmax(50px, 100px) [page-end] 1fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 175px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(0px, 120px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 175px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(0px, 120px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] minmax(25px, 50px) [page-start-inset] minmax(50px, 150px) [body-start-outset] minmax(25px, 50px) [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] minmax(15px, 30px) [body-end-outset] minmax(30px, 90px) [page-end-inset] minmax(15px, 30px) [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1200px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(30px, 60px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1200px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 50px [page-start-inset] minmax(50px, 150px) [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(450px, calc(950px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(0px, 120px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start] minmax(50px, 100px) [page-start-inset] 50px [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(500px, calc(1200px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(0px, 120px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 50px [page-start-inset] minmax(50px, 150px) [body-start-outset] 50px [body-start] 1.5em [body-content-start] minmax(450px, calc(950px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(30px, 90px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] minmax(25px, 50px) [page-start-inset] minmax(50px, 150px) [body-start-outset] minmax(25px, 50px) [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] minmax(15px, 30px) [body-end-outset] minmax(30px, 90px) [page-end-inset] minmax(15px, 30px) [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}}@media(max-width: 991.98px){body .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] 21px [body-end-outset] minmax(45px, 87px) [page-end-inset] 21px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.fullcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.slimcontent:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end] 21px [body-end-outset] minmax(45px, 87px) [page-end-inset] 21px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.listing:not(.floating):not(.docked) .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset] 5fr [body-start] 1.5em [body-content-start] minmax(500px, calc(1450px - 3em)) [body-content-end body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 145px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start] 35px [page-start-inset] minmax(0px, 145px) [body-start-outset] 35px [body-start] 1.5em [body-content-start] minmax(450px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1.5em [body-content-start] minmax(500px, calc(950px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(45px, 90px) [page-end-inset] 15px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(950px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(15px, 30px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(1200px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(1000px - 3em)) [body-content-end] 1.5em [body-end body-end-outset page-end-inset page-end] 4fr [screen-end-inset] 1.5em [screen-end]}body.docked.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(950px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(15px, 30px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.docked.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(500px, calc(950px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(15px, 30px) [page-end-inset] 30px [page-end] 5fr [screen-end-inset] 1.5em [screen-end]}body.floating.slimcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(950px - 3em)) [body-content-end] 1.5em [body-end] 21px [body-end-outset] minmax(45px, 87px) [page-end-inset] 21px [page-end] 4fr [screen-end-inset] 1.5em [screen-end]}body.floating.listing .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset] 5fr [page-start page-start-inset body-start-outset body-start] 1em [body-content-start] minmax(500px, calc(950px - 3em)) [body-content-end] 1.5em [body-end] 30px [body-end-outset] minmax(45px, 90px) [page-end-inset] 15px [page-end] 4fr [screen-end-inset] 1.5em [screen-end]}}@media(max-width: 767.98px){body .page-columns,body.fullcontent:not(.floating):not(.docked) .page-columns,body.slimcontent:not(.floating):not(.docked) .page-columns,body.docked .page-columns,body.docked.slimcontent .page-columns,body.docked.fullcontent .page-columns,body.floating .page-columns,body.floating.slimcontent .page-columns,body.floating.fullcontent .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}body:not(.floating):not(.docked) .page-columns.toc-left .page-columns{display:grid;gap:0;grid-template-columns:[screen-start] 1.5em [screen-start-inset page-start page-start-inset body-start-outset body-start body-content-start] minmax(0px, 1fr) [body-content-end body-end body-end-outset page-end-inset page-end screen-end-inset] 1.5em [screen-end]}nav[role=doc-toc]{display:none}}body,.page-row-navigation{grid-template-rows:[page-top] max-content [contents-top] max-content [contents-bottom] max-content [page-bottom]}.page-rows-contents{grid-template-rows:[content-top] minmax(max-content, 1fr) [content-bottom] minmax(60px, max-content) [page-bottom]}.page-full{grid-column:screen-start/screen-end !important}.page-columns>*{grid-column:body-content-start/body-content-end}.page-columns.column-page>*{grid-column:page-start/page-end}.page-columns.column-page-left .page-columns.page-full>*,.page-columns.column-page-left>*{grid-column:page-start/body-content-end}.page-columns.column-page-right .page-columns.page-full>*,.page-columns.column-page-right>*{grid-column:body-content-start/page-end}.page-rows{grid-auto-rows:auto}.header{grid-column:screen-start/screen-end;grid-row:page-top/contents-top}#quarto-content{padding:0;grid-column:screen-start/screen-end;grid-row:contents-top/contents-bottom}body.floating .sidebar.sidebar-navigation{grid-column:page-start/body-start;grid-row:content-top/page-bottom}body.docked .sidebar.sidebar-navigation{grid-column:screen-start/body-start;grid-row:content-top/page-bottom}.sidebar.toc-left{grid-column:page-start/body-start;grid-row:content-top/page-bottom}.sidebar.margin-sidebar{grid-column:body-end/page-end;grid-row:content-top/page-bottom}.page-columns .content{grid-column:body-content-start/body-content-end;grid-row:content-top/content-bottom;align-content:flex-start}.page-columns .page-navigation{grid-column:body-content-start/body-content-end;grid-row:content-bottom/page-bottom}.page-columns .footer{grid-column:screen-start/screen-end;grid-row:contents-bottom/page-bottom}.page-columns .column-body{grid-column:body-content-start/body-content-end}.page-columns .column-body-fullbleed{grid-column:body-start/body-end}.page-columns .column-body-outset{grid-column:body-start-outset/body-end-outset;z-index:998;opacity:.999}.page-columns .column-body-outset table{background:#fff}.page-columns .column-body-outset-left{grid-column:body-start-outset/body-content-end;z-index:998;opacity:.999}.page-columns .column-body-outset-left table{background:#fff}.page-columns .column-body-outset-right{grid-column:body-content-start/body-end-outset;z-index:998;opacity:.999}.page-columns .column-body-outset-right table{background:#fff}.page-columns .column-page{grid-column:page-start/page-end;z-index:998;opacity:.999}.page-columns .column-page table{background:#fff}.page-columns .column-page-inset{grid-column:page-start-inset/page-end-inset;z-index:998;opacity:.999}.page-columns .column-page-inset table{background:#fff}.page-columns .column-page-inset-left{grid-column:page-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-page-inset-left table{background:#fff}.page-columns .column-page-inset-right{grid-column:body-content-start/page-end-inset;z-index:998;opacity:.999}.page-columns .column-page-inset-right figcaption table{background:#fff}.page-columns .column-page-left{grid-column:page-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-page-left table{background:#fff}.page-columns .column-page-right{grid-column:body-content-start/page-end;z-index:998;opacity:.999}.page-columns .column-page-right figcaption table{background:#fff}#quarto-content.page-columns #quarto-margin-sidebar,#quarto-content.page-columns #quarto-sidebar{z-index:1}@media(max-width: 991.98px){#quarto-content.page-columns #quarto-margin-sidebar.collapse,#quarto-content.page-columns #quarto-sidebar.collapse,#quarto-content.page-columns #quarto-margin-sidebar.collapsing,#quarto-content.page-columns #quarto-sidebar.collapsing{z-index:1055}}#quarto-content.page-columns main.column-page,#quarto-content.page-columns main.column-page-right,#quarto-content.page-columns main.column-page-left{z-index:0}.page-columns .column-screen-inset{grid-column:screen-start-inset/screen-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset table{background:#fff}.page-columns .column-screen-inset-left{grid-column:screen-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-inset-left table{background:#fff}.page-columns .column-screen-inset-right{grid-column:body-content-start/screen-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset-right table{background:#fff}.page-columns .column-screen{grid-column:screen-start/screen-end;z-index:998;opacity:.999}.page-columns .column-screen table{background:#fff}.page-columns .column-screen-left{grid-column:screen-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-left table{background:#fff}.page-columns .column-screen-right{grid-column:body-content-start/screen-end;z-index:998;opacity:.999}.page-columns .column-screen-right table{background:#fff}.page-columns .column-screen-inset-shaded{grid-column:screen-start/screen-end;padding:1em;background:#f8f9fa;z-index:998;opacity:.999;margin-bottom:1em}.zindex-content{z-index:998;opacity:.999}.zindex-modal{z-index:1055;opacity:.999}.zindex-over-content{z-index:999;opacity:.999}img.img-fluid.column-screen,img.img-fluid.column-screen-inset-shaded,img.img-fluid.column-screen-inset,img.img-fluid.column-screen-inset-left,img.img-fluid.column-screen-inset-right,img.img-fluid.column-screen-left,img.img-fluid.column-screen-right{width:100%}@media(min-width: 992px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-end/page-end !important;z-index:998}.column-sidebar{grid-column:page-start/body-start !important;z-index:998}.column-leftmargin{grid-column:screen-start-inset/body-start !important;z-index:998}.no-row-height{height:1em;overflow:visible}}@media(max-width: 991.98px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-end/page-end !important;z-index:998}.no-row-height{height:1em;overflow:visible}.page-columns.page-full{overflow:visible}.page-columns.toc-left .margin-caption,.page-columns.toc-left div.aside,.page-columns.toc-left aside:not(.footnotes):not(.sidebar),.page-columns.toc-left .column-margin{grid-column:body-content-start/body-content-end !important;z-index:998;opacity:.999}.page-columns.toc-left .no-row-height{height:initial;overflow:initial}}@media(max-width: 767.98px){.margin-caption,div.aside,aside:not(.footnotes):not(.sidebar),.column-margin{grid-column:body-content-start/body-content-end !important;z-index:998;opacity:.999}.no-row-height{height:initial;overflow:initial}#quarto-margin-sidebar{display:none}#quarto-sidebar-toc-left{display:none}.hidden-sm{display:none}}.panel-grid{display:grid;grid-template-rows:repeat(1, 1fr);grid-template-columns:repeat(24, 1fr);gap:1em}.panel-grid .g-col-1{grid-column:auto/span 1}.panel-grid .g-col-2{grid-column:auto/span 2}.panel-grid .g-col-3{grid-column:auto/span 3}.panel-grid .g-col-4{grid-column:auto/span 4}.panel-grid .g-col-5{grid-column:auto/span 5}.panel-grid .g-col-6{grid-column:auto/span 6}.panel-grid .g-col-7{grid-column:auto/span 7}.panel-grid .g-col-8{grid-column:auto/span 8}.panel-grid .g-col-9{grid-column:auto/span 9}.panel-grid .g-col-10{grid-column:auto/span 10}.panel-grid .g-col-11{grid-column:auto/span 11}.panel-grid .g-col-12{grid-column:auto/span 12}.panel-grid .g-col-13{grid-column:auto/span 13}.panel-grid .g-col-14{grid-column:auto/span 14}.panel-grid .g-col-15{grid-column:auto/span 15}.panel-grid .g-col-16{grid-column:auto/span 16}.panel-grid .g-col-17{grid-column:auto/span 17}.panel-grid .g-col-18{grid-column:auto/span 18}.panel-grid .g-col-19{grid-column:auto/span 19}.panel-grid .g-col-20{grid-column:auto/span 20}.panel-grid .g-col-21{grid-column:auto/span 21}.panel-grid .g-col-22{grid-column:auto/span 22}.panel-grid .g-col-23{grid-column:auto/span 23}.panel-grid .g-col-24{grid-column:auto/span 24}.panel-grid .g-start-1{grid-column-start:1}.panel-grid .g-start-2{grid-column-start:2}.panel-grid .g-start-3{grid-column-start:3}.panel-grid .g-start-4{grid-column-start:4}.panel-grid .g-start-5{grid-column-start:5}.panel-grid .g-start-6{grid-column-start:6}.panel-grid .g-start-7{grid-column-start:7}.panel-grid .g-start-8{grid-column-start:8}.panel-grid .g-start-9{grid-column-start:9}.panel-grid .g-start-10{grid-column-start:10}.panel-grid .g-start-11{grid-column-start:11}.panel-grid .g-start-12{grid-column-start:12}.panel-grid .g-start-13{grid-column-start:13}.panel-grid .g-start-14{grid-column-start:14}.panel-grid .g-start-15{grid-column-start:15}.panel-grid .g-start-16{grid-column-start:16}.panel-grid .g-start-17{grid-column-start:17}.panel-grid .g-start-18{grid-column-start:18}.panel-grid .g-start-19{grid-column-start:19}.panel-grid .g-start-20{grid-column-start:20}.panel-grid .g-start-21{grid-column-start:21}.panel-grid .g-start-22{grid-column-start:22}.panel-grid .g-start-23{grid-column-start:23}@media(min-width: 576px){.panel-grid .g-col-sm-1{grid-column:auto/span 1}.panel-grid .g-col-sm-2{grid-column:auto/span 2}.panel-grid .g-col-sm-3{grid-column:auto/span 3}.panel-grid .g-col-sm-4{grid-column:auto/span 4}.panel-grid .g-col-sm-5{grid-column:auto/span 5}.panel-grid .g-col-sm-6{grid-column:auto/span 6}.panel-grid .g-col-sm-7{grid-column:auto/span 7}.panel-grid .g-col-sm-8{grid-column:auto/span 8}.panel-grid .g-col-sm-9{grid-column:auto/span 9}.panel-grid .g-col-sm-10{grid-column:auto/span 10}.panel-grid .g-col-sm-11{grid-column:auto/span 11}.panel-grid .g-col-sm-12{grid-column:auto/span 12}.panel-grid .g-col-sm-13{grid-column:auto/span 13}.panel-grid .g-col-sm-14{grid-column:auto/span 14}.panel-grid .g-col-sm-15{grid-column:auto/span 15}.panel-grid .g-col-sm-16{grid-column:auto/span 16}.panel-grid .g-col-sm-17{grid-column:auto/span 17}.panel-grid .g-col-sm-18{grid-column:auto/span 18}.panel-grid .g-col-sm-19{grid-column:auto/span 19}.panel-grid .g-col-sm-20{grid-column:auto/span 20}.panel-grid .g-col-sm-21{grid-column:auto/span 21}.panel-grid .g-col-sm-22{grid-column:auto/span 22}.panel-grid .g-col-sm-23{grid-column:auto/span 23}.panel-grid .g-col-sm-24{grid-column:auto/span 24}.panel-grid .g-start-sm-1{grid-column-start:1}.panel-grid .g-start-sm-2{grid-column-start:2}.panel-grid .g-start-sm-3{grid-column-start:3}.panel-grid .g-start-sm-4{grid-column-start:4}.panel-grid .g-start-sm-5{grid-column-start:5}.panel-grid .g-start-sm-6{grid-column-start:6}.panel-grid .g-start-sm-7{grid-column-start:7}.panel-grid .g-start-sm-8{grid-column-start:8}.panel-grid .g-start-sm-9{grid-column-start:9}.panel-grid .g-start-sm-10{grid-column-start:10}.panel-grid .g-start-sm-11{grid-column-start:11}.panel-grid .g-start-sm-12{grid-column-start:12}.panel-grid .g-start-sm-13{grid-column-start:13}.panel-grid .g-start-sm-14{grid-column-start:14}.panel-grid .g-start-sm-15{grid-column-start:15}.panel-grid .g-start-sm-16{grid-column-start:16}.panel-grid .g-start-sm-17{grid-column-start:17}.panel-grid .g-start-sm-18{grid-column-start:18}.panel-grid .g-start-sm-19{grid-column-start:19}.panel-grid .g-start-sm-20{grid-column-start:20}.panel-grid .g-start-sm-21{grid-column-start:21}.panel-grid .g-start-sm-22{grid-column-start:22}.panel-grid .g-start-sm-23{grid-column-start:23}}@media(min-width: 768px){.panel-grid .g-col-md-1{grid-column:auto/span 1}.panel-grid .g-col-md-2{grid-column:auto/span 2}.panel-grid .g-col-md-3{grid-column:auto/span 3}.panel-grid .g-col-md-4{grid-column:auto/span 4}.panel-grid .g-col-md-5{grid-column:auto/span 5}.panel-grid .g-col-md-6{grid-column:auto/span 6}.panel-grid .g-col-md-7{grid-column:auto/span 7}.panel-grid .g-col-md-8{grid-column:auto/span 8}.panel-grid .g-col-md-9{grid-column:auto/span 9}.panel-grid .g-col-md-10{grid-column:auto/span 10}.panel-grid .g-col-md-11{grid-column:auto/span 11}.panel-grid .g-col-md-12{grid-column:auto/span 12}.panel-grid .g-col-md-13{grid-column:auto/span 13}.panel-grid .g-col-md-14{grid-column:auto/span 14}.panel-grid .g-col-md-15{grid-column:auto/span 15}.panel-grid .g-col-md-16{grid-column:auto/span 16}.panel-grid .g-col-md-17{grid-column:auto/span 17}.panel-grid .g-col-md-18{grid-column:auto/span 18}.panel-grid .g-col-md-19{grid-column:auto/span 19}.panel-grid .g-col-md-20{grid-column:auto/span 20}.panel-grid .g-col-md-21{grid-column:auto/span 21}.panel-grid .g-col-md-22{grid-column:auto/span 22}.panel-grid .g-col-md-23{grid-column:auto/span 23}.panel-grid .g-col-md-24{grid-column:auto/span 24}.panel-grid .g-start-md-1{grid-column-start:1}.panel-grid .g-start-md-2{grid-column-start:2}.panel-grid .g-start-md-3{grid-column-start:3}.panel-grid .g-start-md-4{grid-column-start:4}.panel-grid .g-start-md-5{grid-column-start:5}.panel-grid .g-start-md-6{grid-column-start:6}.panel-grid .g-start-md-7{grid-column-start:7}.panel-grid .g-start-md-8{grid-column-start:8}.panel-grid .g-start-md-9{grid-column-start:9}.panel-grid .g-start-md-10{grid-column-start:10}.panel-grid .g-start-md-11{grid-column-start:11}.panel-grid .g-start-md-12{grid-column-start:12}.panel-grid .g-start-md-13{grid-column-start:13}.panel-grid .g-start-md-14{grid-column-start:14}.panel-grid .g-start-md-15{grid-column-start:15}.panel-grid .g-start-md-16{grid-column-start:16}.panel-grid .g-start-md-17{grid-column-start:17}.panel-grid .g-start-md-18{grid-column-start:18}.panel-grid .g-start-md-19{grid-column-start:19}.panel-grid .g-start-md-20{grid-column-start:20}.panel-grid .g-start-md-21{grid-column-start:21}.panel-grid .g-start-md-22{grid-column-start:22}.panel-grid .g-start-md-23{grid-column-start:23}}@media(min-width: 992px){.panel-grid .g-col-lg-1{grid-column:auto/span 1}.panel-grid .g-col-lg-2{grid-column:auto/span 2}.panel-grid .g-col-lg-3{grid-column:auto/span 3}.panel-grid .g-col-lg-4{grid-column:auto/span 4}.panel-grid .g-col-lg-5{grid-column:auto/span 5}.panel-grid .g-col-lg-6{grid-column:auto/span 6}.panel-grid .g-col-lg-7{grid-column:auto/span 7}.panel-grid .g-col-lg-8{grid-column:auto/span 8}.panel-grid .g-col-lg-9{grid-column:auto/span 9}.panel-grid .g-col-lg-10{grid-column:auto/span 10}.panel-grid .g-col-lg-11{grid-column:auto/span 11}.panel-grid .g-col-lg-12{grid-column:auto/span 12}.panel-grid .g-col-lg-13{grid-column:auto/span 13}.panel-grid .g-col-lg-14{grid-column:auto/span 14}.panel-grid .g-col-lg-15{grid-column:auto/span 15}.panel-grid .g-col-lg-16{grid-column:auto/span 16}.panel-grid .g-col-lg-17{grid-column:auto/span 17}.panel-grid .g-col-lg-18{grid-column:auto/span 18}.panel-grid .g-col-lg-19{grid-column:auto/span 19}.panel-grid .g-col-lg-20{grid-column:auto/span 20}.panel-grid .g-col-lg-21{grid-column:auto/span 21}.panel-grid .g-col-lg-22{grid-column:auto/span 22}.panel-grid .g-col-lg-23{grid-column:auto/span 23}.panel-grid .g-col-lg-24{grid-column:auto/span 24}.panel-grid .g-start-lg-1{grid-column-start:1}.panel-grid .g-start-lg-2{grid-column-start:2}.panel-grid .g-start-lg-3{grid-column-start:3}.panel-grid .g-start-lg-4{grid-column-start:4}.panel-grid .g-start-lg-5{grid-column-start:5}.panel-grid .g-start-lg-6{grid-column-start:6}.panel-grid .g-start-lg-7{grid-column-start:7}.panel-grid .g-start-lg-8{grid-column-start:8}.panel-grid .g-start-lg-9{grid-column-start:9}.panel-grid .g-start-lg-10{grid-column-start:10}.panel-grid .g-start-lg-11{grid-column-start:11}.panel-grid .g-start-lg-12{grid-column-start:12}.panel-grid .g-start-lg-13{grid-column-start:13}.panel-grid .g-start-lg-14{grid-column-start:14}.panel-grid .g-start-lg-15{grid-column-start:15}.panel-grid .g-start-lg-16{grid-column-start:16}.panel-grid .g-start-lg-17{grid-column-start:17}.panel-grid .g-start-lg-18{grid-column-start:18}.panel-grid .g-start-lg-19{grid-column-start:19}.panel-grid .g-start-lg-20{grid-column-start:20}.panel-grid .g-start-lg-21{grid-column-start:21}.panel-grid .g-start-lg-22{grid-column-start:22}.panel-grid .g-start-lg-23{grid-column-start:23}}@media(min-width: 1200px){.panel-grid .g-col-xl-1{grid-column:auto/span 1}.panel-grid .g-col-xl-2{grid-column:auto/span 2}.panel-grid .g-col-xl-3{grid-column:auto/span 3}.panel-grid .g-col-xl-4{grid-column:auto/span 4}.panel-grid .g-col-xl-5{grid-column:auto/span 5}.panel-grid .g-col-xl-6{grid-column:auto/span 6}.panel-grid .g-col-xl-7{grid-column:auto/span 7}.panel-grid .g-col-xl-8{grid-column:auto/span 8}.panel-grid .g-col-xl-9{grid-column:auto/span 9}.panel-grid .g-col-xl-10{grid-column:auto/span 10}.panel-grid .g-col-xl-11{grid-column:auto/span 11}.panel-grid .g-col-xl-12{grid-column:auto/span 12}.panel-grid .g-col-xl-13{grid-column:auto/span 13}.panel-grid .g-col-xl-14{grid-column:auto/span 14}.panel-grid .g-col-xl-15{grid-column:auto/span 15}.panel-grid .g-col-xl-16{grid-column:auto/span 16}.panel-grid .g-col-xl-17{grid-column:auto/span 17}.panel-grid .g-col-xl-18{grid-column:auto/span 18}.panel-grid .g-col-xl-19{grid-column:auto/span 19}.panel-grid .g-col-xl-20{grid-column:auto/span 20}.panel-grid .g-col-xl-21{grid-column:auto/span 21}.panel-grid .g-col-xl-22{grid-column:auto/span 22}.panel-grid .g-col-xl-23{grid-column:auto/span 23}.panel-grid .g-col-xl-24{grid-column:auto/span 24}.panel-grid .g-start-xl-1{grid-column-start:1}.panel-grid .g-start-xl-2{grid-column-start:2}.panel-grid .g-start-xl-3{grid-column-start:3}.panel-grid .g-start-xl-4{grid-column-start:4}.panel-grid .g-start-xl-5{grid-column-start:5}.panel-grid .g-start-xl-6{grid-column-start:6}.panel-grid .g-start-xl-7{grid-column-start:7}.panel-grid .g-start-xl-8{grid-column-start:8}.panel-grid .g-start-xl-9{grid-column-start:9}.panel-grid .g-start-xl-10{grid-column-start:10}.panel-grid .g-start-xl-11{grid-column-start:11}.panel-grid .g-start-xl-12{grid-column-start:12}.panel-grid .g-start-xl-13{grid-column-start:13}.panel-grid .g-start-xl-14{grid-column-start:14}.panel-grid .g-start-xl-15{grid-column-start:15}.panel-grid .g-start-xl-16{grid-column-start:16}.panel-grid .g-start-xl-17{grid-column-start:17}.panel-grid .g-start-xl-18{grid-column-start:18}.panel-grid .g-start-xl-19{grid-column-start:19}.panel-grid .g-start-xl-20{grid-column-start:20}.panel-grid .g-start-xl-21{grid-column-start:21}.panel-grid .g-start-xl-22{grid-column-start:22}.panel-grid .g-start-xl-23{grid-column-start:23}}@media(min-width: 1400px){.panel-grid .g-col-xxl-1{grid-column:auto/span 1}.panel-grid .g-col-xxl-2{grid-column:auto/span 2}.panel-grid .g-col-xxl-3{grid-column:auto/span 3}.panel-grid .g-col-xxl-4{grid-column:auto/span 4}.panel-grid .g-col-xxl-5{grid-column:auto/span 5}.panel-grid .g-col-xxl-6{grid-column:auto/span 6}.panel-grid .g-col-xxl-7{grid-column:auto/span 7}.panel-grid .g-col-xxl-8{grid-column:auto/span 8}.panel-grid .g-col-xxl-9{grid-column:auto/span 9}.panel-grid .g-col-xxl-10{grid-column:auto/span 10}.panel-grid .g-col-xxl-11{grid-column:auto/span 11}.panel-grid .g-col-xxl-12{grid-column:auto/span 12}.panel-grid .g-col-xxl-13{grid-column:auto/span 13}.panel-grid .g-col-xxl-14{grid-column:auto/span 14}.panel-grid .g-col-xxl-15{grid-column:auto/span 15}.panel-grid .g-col-xxl-16{grid-column:auto/span 16}.panel-grid .g-col-xxl-17{grid-column:auto/span 17}.panel-grid .g-col-xxl-18{grid-column:auto/span 18}.panel-grid .g-col-xxl-19{grid-column:auto/span 19}.panel-grid .g-col-xxl-20{grid-column:auto/span 20}.panel-grid .g-col-xxl-21{grid-column:auto/span 21}.panel-grid .g-col-xxl-22{grid-column:auto/span 22}.panel-grid .g-col-xxl-23{grid-column:auto/span 23}.panel-grid .g-col-xxl-24{grid-column:auto/span 24}.panel-grid .g-start-xxl-1{grid-column-start:1}.panel-grid .g-start-xxl-2{grid-column-start:2}.panel-grid .g-start-xxl-3{grid-column-start:3}.panel-grid .g-start-xxl-4{grid-column-start:4}.panel-grid .g-start-xxl-5{grid-column-start:5}.panel-grid .g-start-xxl-6{grid-column-start:6}.panel-grid .g-start-xxl-7{grid-column-start:7}.panel-grid .g-start-xxl-8{grid-column-start:8}.panel-grid .g-start-xxl-9{grid-column-start:9}.panel-grid .g-start-xxl-10{grid-column-start:10}.panel-grid .g-start-xxl-11{grid-column-start:11}.panel-grid .g-start-xxl-12{grid-column-start:12}.panel-grid .g-start-xxl-13{grid-column-start:13}.panel-grid .g-start-xxl-14{grid-column-start:14}.panel-grid .g-start-xxl-15{grid-column-start:15}.panel-grid .g-start-xxl-16{grid-column-start:16}.panel-grid .g-start-xxl-17{grid-column-start:17}.panel-grid .g-start-xxl-18{grid-column-start:18}.panel-grid .g-start-xxl-19{grid-column-start:19}.panel-grid .g-start-xxl-20{grid-column-start:20}.panel-grid .g-start-xxl-21{grid-column-start:21}.panel-grid .g-start-xxl-22{grid-column-start:22}.panel-grid .g-start-xxl-23{grid-column-start:23}}main{margin-top:1em;margin-bottom:1em}h1,.h1,h2,.h2{color:inherit;margin-top:2rem;margin-bottom:1rem;font-weight:600}h1.title,.title.h1{margin-top:0}main.content>p:has(+section){margin-bottom:2rem}main.content>section:first-of-type>h2:nth-child(1),main.content>section:first-of-type>.h2:nth-child(1){margin-top:0}h2,.h2{border-bottom:1px solid #dee2e6;padding-bottom:.5rem}h3,.h3{font-weight:600}h3,.h3,h4,.h4{opacity:.9;margin-top:1.5rem}h5,.h5,h6,.h6{opacity:.9}.header-section-number{color:hsl(210,10.3448275862%,47.7450980392%)}.nav-link.active .header-section-number{color:inherit}mark,.mark{padding:0em}.panel-caption,.figure-caption,.subfigure-caption,.table-caption,figcaption,caption{font-size:.9rem;color:hsl(210,10.3448275862%,47.7450980392%)}.quarto-layout-cell[data-ref-parent] caption{color:hsl(210,10.3448275862%,47.7450980392%)}.column-margin figcaption,.margin-caption,div.aside,aside,.column-margin{color:hsl(210,10.3448275862%,47.7450980392%);font-size:.825rem}.panel-caption.margin-caption{text-align:inherit}.column-margin.column-container p{margin-bottom:0}.column-margin.column-container>*:not(.collapse):first-child{padding-bottom:.5em;display:block}.column-margin.column-container>*:not(.collapse):not(:first-child){padding-top:.5em;padding-bottom:.5em;display:block}.column-margin.column-container>*.collapse:not(.show){display:none}@media(min-width: 768px){.column-margin.column-container .callout-margin-content:first-child{margin-top:4.5em}.column-margin.column-container .callout-margin-content-simple:first-child{margin-top:3.5em}}.margin-caption>*{padding-top:.5em;padding-bottom:.5em}@media(max-width: 767.98px){.quarto-layout-row{flex-direction:column}}.nav-tabs .nav-item{margin-top:1px;cursor:pointer}.tab-content{margin-top:0px;border-left:#dee2e6 1px solid;border-right:#dee2e6 1px solid;border-bottom:#dee2e6 1px solid;margin-left:0;padding:1em;margin-bottom:1em}@media(max-width: 767.98px){.layout-sidebar{margin-left:0;margin-right:0}}.panel-sidebar,.panel-sidebar .form-control,.panel-input,.panel-input .form-control,.selectize-dropdown{font-size:.9rem}.panel-sidebar .form-control,.panel-input .form-control{padding-top:.1rem}.tab-pane div.sourceCode{margin-top:0px}.tab-pane>p{padding-top:0}.tab-pane>p:nth-child(1){padding-top:0}.tab-pane>p:last-child{margin-bottom:0}.tab-pane>pre:last-child{margin-bottom:0}.tab-content>.tab-pane:not(.active){display:none !important}div.sourceCode{background-color:rgba(233,236,239,.65);border:1px solid rgba(233,236,239,.65)}pre.sourceCode{background-color:rgba(0,0,0,0)}pre.sourceCode{border:none;font-size:.875em;overflow-y:visible !important;padding:.4em}div.sourceCode{overflow-y:hidden}.callout div.sourceCode{margin-left:initial}.blockquote{font-size:inherit;padding-left:1rem;padding-right:1.5rem;color:hsl(210,10.3448275862%,47.7450980392%)}.blockquote h1:first-child,.blockquote .h1:first-child,.blockquote h2:first-child,.blockquote .h2:first-child,.blockquote h3:first-child,.blockquote .h3:first-child,.blockquote h4:first-child,.blockquote .h4:first-child,.blockquote h5:first-child,.blockquote .h5:first-child{margin-top:0}pre{background-color:initial;padding:initial;border:initial}p code.sourceCode,li code.sourceCode,td code.sourceCode{background-color:rgba(233,236,239,.65)}p pre code:not(.sourceCode),li pre code:not(.sourceCode),pre code:not(.sourceCode){background-color:initial}p code:not(.sourceCode),li code:not(.sourceCode),td code:not(.sourceCode){background-color:rgba(233,236,239,.65);padding:.2em}nav p code:not(.sourceCode),nav li code:not(.sourceCode),nav td code:not(.sourceCode){background-color:rgba(0,0,0,0);padding:0}td code:not(.sourceCode){white-space:pre-wrap}#quarto-embedded-source-code-modal>.modal-dialog{max-width:1000px;padding-left:1.75rem;padding-right:1.75rem}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-body{padding:0}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-body div.sourceCode{margin:0;padding:.2rem .2rem;border-radius:0px;border:none}#quarto-embedded-source-code-modal>.modal-dialog>.modal-content>.modal-header{padding:.7rem}.code-tools-button{font-size:1rem;padding:.15rem .15rem;margin-left:5px;color:#6c757d;background-color:rgba(0,0,0,0);transition:initial;cursor:pointer}.code-tools-button>.bi::before{display:inline-block;height:1rem;width:1rem;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:1rem 1rem}.code-tools-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}#quarto-embedded-source-code-modal .code-copy-button>.bi::before{background-image:url('data:image/svg+xml,')}#quarto-embedded-source-code-modal .code-copy-button-checked>.bi::before{background-image:url('data:image/svg+xml,')}.sidebar{will-change:top;transition:top 200ms linear;position:sticky;overflow-y:auto;padding-top:1.2em;max-height:100vh}.sidebar.toc-left,.sidebar.margin-sidebar{top:0px;padding-top:1em}.sidebar.quarto-banner-title-block-sidebar>*{padding-top:1.65em}figure .quarto-notebook-link{margin-top:.5em}.quarto-notebook-link{font-size:.75em;color:#6c757d;margin-bottom:1em;text-decoration:none;display:block}.quarto-notebook-link:hover{text-decoration:underline;color:#2761e3}.quarto-notebook-link::before{display:inline-block;height:.75rem;width:.75rem;margin-bottom:0em;margin-right:.25em;content:"";vertical-align:-0.125em;background-image:url('data:image/svg+xml,');background-repeat:no-repeat;background-size:.75rem .75rem}.toc-actions i.bi,.quarto-code-links i.bi,.quarto-other-links i.bi,.quarto-alternate-notebooks i.bi,.quarto-alternate-formats i.bi{margin-right:.4em;font-size:.8rem}.quarto-other-links-text-target .quarto-code-links i.bi,.quarto-other-links-text-target .quarto-other-links i.bi{margin-right:.2em}.quarto-other-formats-text-target .quarto-alternate-formats i.bi{margin-right:.1em}.toc-actions i.bi.empty,.quarto-code-links i.bi.empty,.quarto-other-links i.bi.empty,.quarto-alternate-notebooks i.bi.empty,.quarto-alternate-formats i.bi.empty{padding-left:1em}.quarto-notebook h2,.quarto-notebook .h2{border-bottom:none}.quarto-notebook .cell-container{display:flex}.quarto-notebook .cell-container .cell{flex-grow:4}.quarto-notebook .cell-container .cell-decorator{padding-top:1.5em;padding-right:1em;text-align:right}.quarto-notebook .cell-container.code-fold .cell-decorator{padding-top:3em}.quarto-notebook .cell-code code{white-space:pre-wrap}.quarto-notebook .cell .cell-output-stderr pre code,.quarto-notebook .cell .cell-output-stdout pre code{white-space:pre-wrap;overflow-wrap:anywhere}.toc-actions,.quarto-alternate-formats,.quarto-other-links,.quarto-code-links,.quarto-alternate-notebooks{padding-left:0em}.sidebar .toc-actions a,.sidebar .quarto-alternate-formats a,.sidebar .quarto-other-links a,.sidebar .quarto-code-links a,.sidebar .quarto-alternate-notebooks a,.sidebar nav[role=doc-toc] a{text-decoration:none}.sidebar .toc-actions a:hover,.sidebar .quarto-other-links a:hover,.sidebar .quarto-code-links a:hover,.sidebar .quarto-alternate-formats a:hover,.sidebar .quarto-alternate-notebooks a:hover{color:#2761e3}.sidebar .toc-actions h2,.sidebar .toc-actions .h2,.sidebar .quarto-code-links h2,.sidebar .quarto-code-links .h2,.sidebar .quarto-other-links h2,.sidebar .quarto-other-links .h2,.sidebar .quarto-alternate-notebooks h2,.sidebar .quarto-alternate-notebooks .h2,.sidebar .quarto-alternate-formats h2,.sidebar .quarto-alternate-formats .h2,.sidebar nav[role=doc-toc]>h2,.sidebar nav[role=doc-toc]>.h2{font-weight:500;margin-bottom:.2rem;margin-top:.3rem;font-family:inherit;border-bottom:0;padding-bottom:0;padding-top:0px}.sidebar .toc-actions>h2,.sidebar .toc-actions>.h2,.sidebar .quarto-code-links>h2,.sidebar .quarto-code-links>.h2,.sidebar .quarto-other-links>h2,.sidebar .quarto-other-links>.h2,.sidebar .quarto-alternate-notebooks>h2,.sidebar .quarto-alternate-notebooks>.h2,.sidebar .quarto-alternate-formats>h2,.sidebar .quarto-alternate-formats>.h2{font-size:.8rem}.sidebar nav[role=doc-toc]>h2,.sidebar nav[role=doc-toc]>.h2{font-size:.875rem}.sidebar nav[role=doc-toc]>ul a{border-left:1px solid #e9ecef;padding-left:.6rem}.sidebar .toc-actions h2>ul a,.sidebar .toc-actions .h2>ul a,.sidebar .quarto-code-links h2>ul a,.sidebar .quarto-code-links .h2>ul a,.sidebar .quarto-other-links h2>ul a,.sidebar .quarto-other-links .h2>ul a,.sidebar .quarto-alternate-notebooks h2>ul a,.sidebar .quarto-alternate-notebooks .h2>ul a,.sidebar .quarto-alternate-formats h2>ul a,.sidebar .quarto-alternate-formats .h2>ul a{border-left:none;padding-left:.6rem}.sidebar .toc-actions ul a:empty,.sidebar .quarto-code-links ul a:empty,.sidebar .quarto-other-links ul a:empty,.sidebar .quarto-alternate-notebooks ul a:empty,.sidebar .quarto-alternate-formats ul a:empty,.sidebar nav[role=doc-toc]>ul a:empty{display:none}.sidebar .toc-actions ul,.sidebar .quarto-code-links ul,.sidebar .quarto-other-links ul,.sidebar .quarto-alternate-notebooks ul,.sidebar .quarto-alternate-formats ul{padding-left:0;list-style:none}.sidebar nav[role=doc-toc] ul{list-style:none;padding-left:0;list-style:none}.sidebar nav[role=doc-toc]>ul{margin-left:.45em}.quarto-margin-sidebar nav[role=doc-toc]{padding-left:.5em}.sidebar .toc-actions>ul,.sidebar .quarto-code-links>ul,.sidebar .quarto-other-links>ul,.sidebar .quarto-alternate-notebooks>ul,.sidebar .quarto-alternate-formats>ul{font-size:.8rem}.sidebar nav[role=doc-toc]>ul{font-size:.875rem}.sidebar .toc-actions ul li a,.sidebar .quarto-code-links ul li a,.sidebar .quarto-other-links ul li a,.sidebar .quarto-alternate-notebooks ul li a,.sidebar .quarto-alternate-formats ul li a,.sidebar nav[role=doc-toc]>ul li a{line-height:1.1rem;padding-bottom:.2rem;padding-top:.2rem;color:inherit}.sidebar nav[role=doc-toc] ul>li>ul>li>a{padding-left:1.2em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>a{padding-left:2.4em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>a{padding-left:3.6em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>ul>li>a{padding-left:4.8em}.sidebar nav[role=doc-toc] ul>li>ul>li>ul>li>ul>li>ul>li>ul>li>a{padding-left:6em}.sidebar nav[role=doc-toc] ul>li>a.active,.sidebar nav[role=doc-toc] ul>li>ul>li>a.active{border-left:1px solid #2761e3;color:#2761e3 !important}.sidebar nav[role=doc-toc] ul>li>a:hover,.sidebar nav[role=doc-toc] ul>li>ul>li>a:hover{color:#2761e3 !important}kbd,.kbd{color:#343a40;background-color:#f8f9fa;border:1px solid;border-radius:5px;border-color:#dee2e6}.quarto-appendix-contents div.hanging-indent{margin-left:0em}.quarto-appendix-contents div.hanging-indent div.csl-entry{margin-left:1em;text-indent:-1em}.citation a,.footnote-ref{text-decoration:none}.footnotes ol{padding-left:1em}.tippy-content>*{margin-bottom:.7em}.tippy-content>*:last-child{margin-bottom:0}.callout{margin-top:1.25rem;margin-bottom:1.25rem;border-radius:.25rem;overflow-wrap:break-word}.callout .callout-title-container{overflow-wrap:anywhere}.callout.callout-style-simple{padding:.4em .7em;border-left:5px solid;border-right:1px solid #dee2e6;border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}.callout.callout-style-default{border-left:5px solid;border-right:1px solid #dee2e6;border-top:1px solid #dee2e6;border-bottom:1px solid #dee2e6}.callout .callout-body-container{flex-grow:1}.callout.callout-style-simple .callout-body{font-size:.9rem;font-weight:400;margin-bottom:-0.4em;margin-top:.5em}.callout.callout-style-default .callout-body{font-size:.9rem;font-weight:400}.callout:not(.no-icon).callout-titled.callout-style-simple .callout-body{padding-left:1.6em}.callout.callout-titled>.callout-header{padding-top:.2em;margin-bottom:-0.2em}.callout.callout-empty-content>.callout-header{margin-bottom:0em;border-bottom-right-radius:calc(0.25rem + -1px)}.callout>.callout-header.collapsed{border-bottom-right-radius:calc(0.25rem + -1px)}.callout.callout-style-simple>div.callout-header{border-bottom:none;font-size:.9rem;font-weight:600;opacity:75%}.callout.callout-style-default>div.callout-header{border-bottom:none;font-weight:600;opacity:85%;font-size:.9rem;padding-left:.5em;padding-right:.5em;border-top-right-radius:calc(0.25rem + -1px)}.callout.callout-style-default .callout-body{padding-left:.5em;padding-right:.5em}.callout.callout-style-default .callout-body>:first-child{padding-top:.5rem;margin-top:0}.callout>div.callout-header[data-bs-toggle=collapse]{cursor:pointer}.callout.callout-style-default .callout-header[aria-expanded=false],.callout.callout-style-default .callout-header[aria-expanded=true]{padding-top:0px;margin-bottom:0px;align-items:center}.callout.callout-titled .callout-body>:last-child:not(.sourceCode),.callout.callout-titled .callout-body>div>:last-child:not(.sourceCode){padding-bottom:.5rem;margin-bottom:0}.callout:not(.callout-titled) .callout-body>:first-child,.callout:not(.callout-titled) .callout-body>div>:first-child{margin-top:.25rem}.callout:not(.callout-titled) .callout-body>:last-child,.callout:not(.callout-titled) .callout-body>div>:last-child{margin-bottom:.2rem}.callout.callout-style-simple .callout-icon::before,.callout.callout-style-simple .callout-toggle::before{height:1rem;width:1rem;display:inline-block;content:"";background-repeat:no-repeat;background-size:1rem 1rem}.callout.callout-style-default .callout-icon::before,.callout.callout-style-default .callout-toggle::before{height:.9rem;width:.9rem;display:inline-block;content:"";background-repeat:no-repeat;background-size:.9rem .9rem}.callout.callout-style-default .callout-toggle::before{margin-top:5px}.callout .callout-btn-toggle .callout-toggle::before{transition:transform .2s linear}.callout .callout-header[aria-expanded=false] .callout-toggle::before{transform:rotate(-90deg)}.callout .callout-header[aria-expanded=true] .callout-toggle::before{transform:none}.callout.callout-style-simple:not(.no-icon) div.callout-icon-container{padding-top:.2em;padding-right:.55em}.callout.callout-style-default:not(.no-icon) div.callout-icon-container{padding-top:.1em;padding-right:.35em}.callout.callout-style-default:not(.no-icon) div.callout-title-container{margin-top:-1px}.callout.callout-style-default.callout-caution:not(.no-icon) div.callout-icon-container{padding-top:.3em;padding-right:.35em}.callout>.callout-body>.callout-icon-container>.no-icon,.callout>.callout-header>.callout-icon-container>.no-icon{display:none}div.callout.callout{border-left-color:#6c757d}div.callout.callout-style-default>.callout-header{background-color:#6c757d}div.callout-note.callout{border-left-color:#2780e3}div.callout-note.callout-style-default>.callout-header{background-color:rgb(233.4,242.3,252.2)}div.callout-note:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-note.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-note .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-tip.callout{border-left-color:#3fb618}div.callout-tip.callout-style-default>.callout-header{background-color:rgb(235.8,247.7,231.9)}div.callout-tip:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-tip.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-tip .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-warning.callout{border-left-color:#ff7518}div.callout-warning.callout-style-default>.callout-header{background-color:rgb(255,241.2,231.9)}div.callout-warning:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-warning.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-warning .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-caution.callout{border-left-color:#f0ad4e}div.callout-caution.callout-style-default>.callout-header{background-color:rgb(253.5,246.8,237.3)}div.callout-caution:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-caution.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-caution .callout-toggle::before{background-image:url('data:image/svg+xml,')}div.callout-important.callout{border-left-color:#ff0039}div.callout-important.callout-style-default>.callout-header{background-color:rgb(255,229.5,235.2)}div.callout-important:not(.callout-titled) .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-important.callout-titled .callout-icon::before{background-image:url('data:image/svg+xml,');}div.callout-important .callout-toggle::before{background-image:url('data:image/svg+xml,')}.quarto-toggle-container{display:flex;align-items:center}.quarto-reader-toggle .bi::before,.quarto-color-scheme-toggle .bi::before{display:inline-block;height:1rem;width:1rem;content:"";background-repeat:no-repeat;background-size:1rem 1rem}.sidebar-navigation{padding-left:20px}.navbar{background-color:#f8f9fa;color:rgb(84.32,84.66,85)}.navbar .quarto-color-scheme-toggle:not(.alternate) .bi::before{background-image:url('data:image/svg+xml,')}.navbar .quarto-color-scheme-toggle.alternate .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-color-scheme-toggle:not(.alternate) .bi::before{background-image:url('data:image/svg+xml,')}.sidebar-navigation .quarto-color-scheme-toggle.alternate .bi::before{background-image:url('data:image/svg+xml,')}.quarto-sidebar-toggle{border-color:#dee2e6;border-bottom-left-radius:.25rem;border-bottom-right-radius:.25rem;border-style:solid;border-width:1px;overflow:hidden;border-top-width:0px;padding-top:0px !important}.quarto-sidebar-toggle-title{cursor:pointer;padding-bottom:2px;margin-left:.25em;text-align:center;font-weight:400;font-size:.775em}#quarto-content .quarto-sidebar-toggle{background:hsl(0,0%,98%)}#quarto-content .quarto-sidebar-toggle-title{color:#343a40}.quarto-sidebar-toggle-icon{color:#dee2e6;margin-right:.5em;float:right;transition:transform .2s ease}.quarto-sidebar-toggle-icon::before{padding-top:5px}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-icon{transform:rotate(-180deg)}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-title{border-bottom:solid #dee2e6 1px}.quarto-sidebar-toggle-contents{background-color:#fff;padding-right:10px;padding-left:10px;margin-top:0px !important;transition:max-height .5s ease}.quarto-sidebar-toggle.expanded .quarto-sidebar-toggle-contents{padding-top:1em;padding-bottom:10px}@media(max-width: 767.98px){.sidebar-menu-container{padding-bottom:5em}}.quarto-sidebar-toggle:not(.expanded) .quarto-sidebar-toggle-contents{padding-top:0px !important;padding-bottom:0px}nav[role=doc-toc]{z-index:1020}#quarto-sidebar>*,nav[role=doc-toc]>*{transition:opacity .1s ease,border .1s ease}#quarto-sidebar.slow>*,nav[role=doc-toc].slow>*{transition:opacity .4s ease,border .4s ease}.quarto-color-scheme-toggle:not(.alternate).top-right .bi::before{background-image:url('data:image/svg+xml,')}.quarto-color-scheme-toggle.alternate.top-right .bi::before{background-image:url('data:image/svg+xml,')}#quarto-appendix.default{border-top:1px solid #dee2e6}#quarto-appendix.default{background-color:#fff;padding-top:1.5em;margin-top:2em;z-index:998}#quarto-appendix.default .quarto-appendix-heading{margin-top:0;line-height:1.4em;font-weight:600;opacity:.9;border-bottom:none;margin-bottom:0}#quarto-appendix.default .footnotes ol,#quarto-appendix.default .footnotes ol li>p:last-of-type,#quarto-appendix.default .quarto-appendix-contents>p:last-of-type{margin-bottom:0}#quarto-appendix.default .footnotes ol{margin-left:.5em}#quarto-appendix.default .quarto-appendix-secondary-label{margin-bottom:.4em}#quarto-appendix.default .quarto-appendix-bibtex{font-size:.7em;padding:1em;border:solid 1px #dee2e6;margin-bottom:1em}#quarto-appendix.default .quarto-appendix-bibtex code.sourceCode{white-space:pre-wrap}#quarto-appendix.default .quarto-appendix-citeas{font-size:.9em;padding:1em;border:solid 1px #dee2e6;margin-bottom:1em}#quarto-appendix.default .quarto-appendix-heading{font-size:1em !important}#quarto-appendix.default *[role=doc-endnotes]>ol,#quarto-appendix.default .quarto-appendix-contents>*:not(h2):not(.h2){font-size:.9em}#quarto-appendix.default section{padding-bottom:1.5em}#quarto-appendix.default section *[role=doc-endnotes],#quarto-appendix.default section>*:not(a){opacity:.9;word-wrap:break-word}.btn.btn-quarto,div.cell-output-display .btn-quarto{--bs-btn-color: rgb(202.22, 203.78, 205.34);--bs-btn-bg: #343a40;--bs-btn-border-color: #343a40;--bs-btn-hover-color: rgb(202.22, 203.78, 205.34);--bs-btn-hover-bg: rgb(82.45, 87.55, 92.65);--bs-btn-hover-border-color: rgb(72.3, 77.7, 83.1);--bs-btn-focus-shadow-rgb: 75, 80, 85;--bs-btn-active-color: #fff;--bs-btn-active-bg: rgb(92.6, 97.4, 102.2);--bs-btn-active-border-color: rgb(72.3, 77.7, 83.1);--bs-btn-active-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #343a40;--bs-btn-disabled-border-color: #343a40}nav.quarto-secondary-nav.color-navbar{background-color:#f8f9fa;color:rgb(84.32,84.66,85)}nav.quarto-secondary-nav.color-navbar h1,nav.quarto-secondary-nav.color-navbar .h1,nav.quarto-secondary-nav.color-navbar .quarto-btn-toggle{color:rgb(84.32,84.66,85)}@media(max-width: 991.98px){body.nav-sidebar .quarto-title-banner{margin-bottom:0;padding-bottom:1em}body.nav-sidebar #title-block-header{margin-block-end:0}}p.subtitle{margin-top:.25em;margin-bottom:.5em}code a:any-link{color:inherit;text-decoration-color:#6c757d}/*! light */div.observablehq table thead tr th{background-color:var(--bs-body-bg)}input,button,select,optgroup,textarea{background-color:var(--bs-body-bg)}.code-annotated .code-copy-button{margin-right:1.25em;margin-top:0;padding-bottom:0;padding-top:3px}.code-annotation-gutter-bg{background-color:#fff}.code-annotation-gutter{background-color:rgba(233,236,239,.65)}.code-annotation-gutter,.code-annotation-gutter-bg{height:100%;width:calc(20px + .5em);position:absolute;top:0;right:0}dl.code-annotation-container-grid dt{margin-right:1em;margin-top:.25rem}dl.code-annotation-container-grid dt{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;color:rgb(74.8620689655,83.5,92.1379310345);border:solid rgb(74.8620689655,83.5,92.1379310345) 1px;border-radius:50%;height:22px;width:22px;line-height:22px;font-size:11px;text-align:center;vertical-align:middle;text-decoration:none}dl.code-annotation-container-grid dt[data-target-cell]{cursor:pointer}dl.code-annotation-container-grid dt[data-target-cell].code-annotation-active{color:#fff;border:solid #aaa 1px;background-color:#aaa}pre.code-annotation-code{padding-top:0;padding-bottom:0}pre.code-annotation-code code{z-index:3}#code-annotation-line-highlight-gutter{width:100%;border-top:solid rgba(170,170,170,.2666666667) 1px;border-bottom:solid rgba(170,170,170,.2666666667) 1px;z-index:2;background-color:rgba(170,170,170,.1333333333)}#code-annotation-line-highlight{margin-left:-4em;width:calc(100% + 4em);border-top:solid rgba(170,170,170,.2666666667) 1px;border-bottom:solid rgba(170,170,170,.2666666667) 1px;z-index:2;background-color:rgba(170,170,170,.1333333333)}code.sourceCode .code-annotation-anchor.code-annotation-active{background-color:var(--quarto-hl-normal-color, #aaaaaa);border:solid var(--quarto-hl-normal-color, #aaaaaa) 1px;color:#e9ecef;font-weight:bolder}code.sourceCode .code-annotation-anchor{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;color:var(--quarto-hl-co-color);border:solid var(--quarto-hl-co-color) 1px;border-radius:50%;height:18px;width:18px;font-size:9px;margin-top:2px}code.sourceCode button.code-annotation-anchor{padding:2px;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none}code.sourceCode a.code-annotation-anchor{line-height:18px;text-align:center;vertical-align:middle;cursor:default;text-decoration:none}@media print{.page-columns .column-screen-inset{grid-column:page-start-inset/page-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset table{background:#fff}.page-columns .column-screen-inset-left{grid-column:page-start-inset/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-inset-left table{background:#fff}.page-columns .column-screen-inset-right{grid-column:body-content-start/page-end-inset;z-index:998;opacity:.999}.page-columns .column-screen-inset-right table{background:#fff}.page-columns .column-screen{grid-column:page-start/page-end;z-index:998;opacity:.999}.page-columns .column-screen table{background:#fff}.page-columns .column-screen-left{grid-column:page-start/body-content-end;z-index:998;opacity:.999}.page-columns .column-screen-left table{background:#fff}.page-columns .column-screen-right{grid-column:body-content-start/page-end;z-index:998;opacity:.999}.page-columns .column-screen-right table{background:#fff}.page-columns .column-screen-inset-shaded{grid-column:page-start-inset/page-end-inset;padding:1em;background:#f8f9fa;z-index:998;opacity:.999;margin-bottom:1em}}.quarto-video{margin-bottom:1em}.table{border-top:1px solid rgb(214.4,215.6,216.8);border-bottom:1px solid rgb(214.4,215.6,216.8)}.table>thead{border-top-width:0;border-bottom:1px solid rgb(153.5,156.5,159.5)}.table a{word-break:break-word}.table>:not(caption)>*>*{background-color:unset;color:unset}#quarto-document-content .crosstalk-input .checkbox input[type=checkbox],#quarto-document-content .crosstalk-input .checkbox-inline input[type=checkbox]{position:unset;margin-top:unset;margin-left:unset}#quarto-document-content .row{margin-left:unset;margin-right:unset}.quarto-xref{white-space:nowrap}#quarto-draft-alert{margin-top:0px;margin-bottom:0px;padding:.3em;text-align:center;font-size:.9em}#quarto-draft-alert i{margin-right:.3em}#quarto-back-to-top{z-index:1000}pre{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:0.875em;font-weight:400}pre code{font-family:inherit;font-size:inherit;font-weight:inherit}code{font-family:SFMono-Regular,Menlo,Monaco,Consolas,"Liberation Mono","Courier New",monospace;font-size:0.875em;font-weight:400}a{background-color:rgba(0,0,0,0);font-weight:400;text-decoration:underline}.screen-reader-only{position:absolute;clip:rect(0 0 0 0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;width:1px}a.external:after{content:"";background-image:url('data:image/svg+xml,');background-size:contain;background-repeat:no-repeat;background-position:center center;margin-left:.2em;padding-right:.75em}div.sourceCode code a.external:after{content:none}a.external:after:hover{cursor:pointer}.quarto-ext-icon{display:inline-block;font-size:.75em;padding-left:.3em}.code-with-filename .code-with-filename-file{margin-bottom:0;padding-bottom:2px;padding-top:2px;padding-left:.7em;border:var(--quarto-border-width) solid var(--quarto-border-color);border-radius:var(--quarto-border-radius);border-bottom:0;border-bottom-left-radius:0%;border-bottom-right-radius:0%}.code-with-filename div.sourceCode,.reveal .code-with-filename div.sourceCode{margin-top:0;border-top-left-radius:0%;border-top-right-radius:0%}.code-with-filename .code-with-filename-file pre{margin-bottom:0}.code-with-filename .code-with-filename-file{background-color:rgba(219,219,219,.8)}.quarto-dark .code-with-filename .code-with-filename-file{background-color:#555}.code-with-filename .code-with-filename-file strong{font-weight:400}.quarto-title-banner{margin-bottom:1em;color:rgb(84.32,84.66,85);background:#f8f9fa}.quarto-title-banner a{color:rgb(84.32,84.66,85)}.quarto-title-banner h1,.quarto-title-banner .h1,.quarto-title-banner h2,.quarto-title-banner .h2{color:rgb(84.32,84.66,85)}.quarto-title-banner .code-tools-button{color:hsl(210,.4016064257%,53.2%)}.quarto-title-banner .code-tools-button:hover{color:rgb(84.32,84.66,85)}.quarto-title-banner .code-tools-button>.bi::before{background-image:url('data:image/svg+xml,')}.quarto-title-banner .code-tools-button:hover>.bi::before{background-image:url('data:image/svg+xml,')}.quarto-title-banner .quarto-title .title{font-weight:600}.quarto-title-banner .quarto-categories{margin-top:.75em}@media(min-width: 992px){.quarto-title-banner{padding-top:2.5em;padding-bottom:2.5em}}@media(max-width: 991.98px){.quarto-title-banner{padding-top:1em;padding-bottom:1em}}@media(max-width: 767.98px){body.hypothesis-enabled #title-block-header>*{padding-right:20px}}main.quarto-banner-title-block>section:first-child>h2,main.quarto-banner-title-block>section:first-child>.h2,main.quarto-banner-title-block>section:first-child>h3,main.quarto-banner-title-block>section:first-child>.h3,main.quarto-banner-title-block>section:first-child>h4,main.quarto-banner-title-block>section:first-child>.h4{margin-top:0}.quarto-title .quarto-categories{display:flex;flex-wrap:wrap;row-gap:.5em;column-gap:.4em;padding-bottom:.5em;margin-top:.75em}.quarto-title .quarto-categories .quarto-category{padding:.25em .75em;font-size:.65em;text-transform:uppercase;border:solid 1px;border-radius:.25rem;opacity:.6}.quarto-title .quarto-categories .quarto-category a{color:inherit}.quarto-title-meta-container{display:grid;grid-template-columns:1fr auto}.quarto-title-meta-column-end{display:flex;flex-direction:column;padding-left:1em}.quarto-title-meta-column-end a .bi{margin-right:.3em}#title-block-header.quarto-title-block.default .quarto-title-meta{display:grid;grid-template-columns:repeat(2, 1fr);grid-column-gap:1em}#title-block-header.quarto-title-block.default .quarto-title .title{margin-bottom:0}#title-block-header.quarto-title-block.default .quarto-title-author-orcid img{margin-top:-0.2em;height:.8em;width:.8em}#title-block-header.quarto-title-block.default .quarto-title-author-email{opacity:.7}#title-block-header.quarto-title-block.default .quarto-description p:last-of-type{margin-bottom:0}#title-block-header.quarto-title-block.default .quarto-title-meta-contents p,#title-block-header.quarto-title-block.default .quarto-title-authors p,#title-block-header.quarto-title-block.default .quarto-title-affiliations p{margin-bottom:.1em}#title-block-header.quarto-title-block.default .quarto-title-meta-heading{text-transform:uppercase;margin-top:1em;font-size:.8em;opacity:.8;font-weight:400}#title-block-header.quarto-title-block.default .quarto-title-meta-contents{font-size:.9em}#title-block-header.quarto-title-block.default .quarto-title-meta-contents p.affiliation:last-of-type{margin-bottom:.1em}#title-block-header.quarto-title-block.default p.affiliation{margin-bottom:.1em}#title-block-header.quarto-title-block.default .keywords,#title-block-header.quarto-title-block.default .description,#title-block-header.quarto-title-block.default .abstract{margin-top:0}#title-block-header.quarto-title-block.default .keywords>p,#title-block-header.quarto-title-block.default .description>p,#title-block-header.quarto-title-block.default .abstract>p{font-size:.9em}#title-block-header.quarto-title-block.default .keywords>p:last-of-type,#title-block-header.quarto-title-block.default .description>p:last-of-type,#title-block-header.quarto-title-block.default .abstract>p:last-of-type{margin-bottom:0}#title-block-header.quarto-title-block.default .keywords .block-title,#title-block-header.quarto-title-block.default .description .block-title,#title-block-header.quarto-title-block.default .abstract .block-title{margin-top:1em;text-transform:uppercase;font-size:.8em;opacity:.8;font-weight:400}#title-block-header.quarto-title-block.default .quarto-title-meta-author{display:grid;grid-template-columns:minmax(max-content, 1fr) 1fr;grid-column-gap:1em}.quarto-title-tools-only{display:flex;justify-content:right}body{-webkit-font-smoothing:antialiased}.badge.bg-light{color:#343a40}.progress .progress-bar{font-size:8px;line-height:8px}:root{--quarto-scss-export-gray-300: #dee2e6;--quarto-scss-export-gray-500: #adb5bd;--quarto-scss-export-gray-600: #6c757d;--quarto-scss-export-gray-800: #343a40;--quarto-scss-export-card-cap-bg: rgba(52, 58, 64, 0.25);--quarto-scss-export-border-color: #dee2e6;--quarto-scss-export-text-muted: #6c757d;--quarto-scss-export-white: #fff;--quarto-scss-export-gray-100: #f8f9fa;--quarto-scss-export-gray-200: #e9ecef;--quarto-scss-export-gray-400: #ced4da;--quarto-scss-export-gray-700: #495057;--quarto-scss-export-gray-900: #212529;--quarto-scss-export-black: #000;--quarto-scss-export-blue: #2780e3;--quarto-scss-export-indigo: #6610f2;--quarto-scss-export-purple: #613d7c;--quarto-scss-export-pink: #e83e8c;--quarto-scss-export-red: #ff0039;--quarto-scss-export-orange: #f0ad4e;--quarto-scss-export-yellow: #ff7518;--quarto-scss-export-green: #3fb618;--quarto-scss-export-teal: #20c997;--quarto-scss-export-cyan: #9954bb;--quarto-scss-export-primary: #2780e3;--quarto-scss-export-secondary: #343a40;--quarto-scss-export-success: #3fb618;--quarto-scss-export-info: #9954bb;--quarto-scss-export-warning: #ff7518;--quarto-scss-export-danger: #ff0039;--quarto-scss-export-light: #f8f9fa;--quarto-scss-export-dark: #343a40;--quarto-scss-export-body-color: #343a40;--quarto-scss-export-title-banner-color: ;--quarto-scss-export-title-banner-bg: ;--quarto-scss-export-btn-code-copy-color: #5E5E5E;--quarto-scss-export-btn-code-copy-color-active: #4758AB;--quarto-scss-export-sidebar-bg: #fff;--quarto-scss-export-link-color: #2761e3;--quarto-scss-export-link-color-bg: transparent;--quarto-scss-export-code-color: #7d12ba;--quarto-scss-export-code-bg: #f8f9fa;--quarto-scss-export-toc-color: #2761e3;--quarto-scss-export-toc-active-border: #2761e3;--quarto-scss-export-toc-inactive-border: #e9ecef;--quarto-scss-export-navbar-default: #2780e3;--quarto-scss-export-navbar-hl-override: false;--quarto-scss-export-navbar-bg: #f8f9fa;--quarto-scss-export-btn-bg: #343a40;--quarto-scss-export-btn-fg: rgb(202.22, 203.78, 205.34);--quarto-scss-export-body-contrast-bg: #fff;--quarto-scss-export-body-contrast-color: #343a40;--quarto-scss-export-navbar-fg: rgb(84.32, 84.66, 85);--quarto-scss-export-navbar-hl: rgb(31.2, 77.6, 181.6);--quarto-scss-export-navbar-brand: rgb(84.32, 84.66, 85);--quarto-scss-export-navbar-brand-hl: rgb(31.2, 77.6, 181.6);--quarto-scss-export-navbar-toggler-border-color: rgba(84.32, 84.66, 85, 0);--quarto-scss-export-navbar-hover-color: rgba(31.2, 77.6, 181.6, 0.8);--quarto-scss-export-navbar-disabled-color: rgba(84.32, 84.66, 85, 0.75);--quarto-scss-export-sidebar-fg: rgb(89.25, 89.25, 89.25);--quarto-scss-export-title-block-color: #343a40;--quarto-scss-export-title-block-contast-color: #fff;--quarto-scss-export-footer-bg: #fff;--quarto-scss-export-footer-fg: rgb(117.3, 117.3, 117.3);--quarto-scss-export-popover-bg: #fff;--quarto-scss-export-input-bg: #fff;--quarto-scss-export-input-border-color: #dee2e6;--quarto-scss-export-code-annotation-higlight-color: rgba(170, 170, 170, 0.2666666667);--quarto-scss-export-code-annotation-higlight-bg: rgba(170, 170, 170, 0.1333333333);--quarto-scss-export-table-group-separator-color: rgb(153.5, 156.5, 159.5);--quarto-scss-export-table-group-separator-color-lighter: rgb(214.4, 215.6, 216.8);--quarto-scss-export-link-decoration: underline;--quarto-scss-export-table-border-color: #dee2e6;--quarto-scss-export-sidebar-glass-bg: rgba(102, 102, 102, 0.4);--quarto-scss-export-color-contrast-dark: #000;--quarto-scss-export-color-contrast-light: #fff;--quarto-scss-export-blue-100: rgb(211.8, 229.6, 249.4);--quarto-scss-export-blue-200: rgb(168.6, 204.2, 243.8);--quarto-scss-export-blue-300: rgb(125.4, 178.8, 238.2);--quarto-scss-export-blue-400: rgb(82.2, 153.4, 232.6);--quarto-scss-export-blue-500: #2780e3;--quarto-scss-export-blue-600: rgb(31.2, 102.4, 181.6);--quarto-scss-export-blue-700: rgb(23.4, 76.8, 136.2);--quarto-scss-export-blue-800: rgb(15.6, 51.2, 90.8);--quarto-scss-export-blue-900: rgb(7.8, 25.6, 45.4);--quarto-scss-export-indigo-100: rgb(224.4, 207.2, 252.4);--quarto-scss-export-indigo-200: rgb(193.8, 159.4, 249.8);--quarto-scss-export-indigo-300: rgb(163.2, 111.6, 247.2);--quarto-scss-export-indigo-400: rgb(132.6, 63.8, 244.6);--quarto-scss-export-indigo-500: #6610f2;--quarto-scss-export-indigo-600: rgb(81.6, 12.8, 193.6);--quarto-scss-export-indigo-700: rgb(61.2, 9.6, 145.2);--quarto-scss-export-indigo-800: rgb(40.8, 6.4, 96.8);--quarto-scss-export-indigo-900: rgb(20.4, 3.2, 48.4);--quarto-scss-export-purple-100: rgb(223.4, 216.2, 228.8);--quarto-scss-export-purple-200: rgb(191.8, 177.4, 202.6);--quarto-scss-export-purple-300: rgb(160.2, 138.6, 176.4);--quarto-scss-export-purple-400: rgb(128.6, 99.8, 150.2);--quarto-scss-export-purple-500: #613d7c;--quarto-scss-export-purple-600: rgb(77.6, 48.8, 99.2);--quarto-scss-export-purple-700: rgb(58.2, 36.6, 74.4);--quarto-scss-export-purple-800: rgb(38.8, 24.4, 49.6);--quarto-scss-export-purple-900: rgb(19.4, 12.2, 24.8);--quarto-scss-export-pink-100: rgb(250.4, 216.4, 232);--quarto-scss-export-pink-200: rgb(245.8, 177.8, 209);--quarto-scss-export-pink-300: rgb(241.2, 139.2, 186);--quarto-scss-export-pink-400: rgb(236.6, 100.6, 163);--quarto-scss-export-pink-500: #e83e8c;--quarto-scss-export-pink-600: rgb(185.6, 49.6, 112);--quarto-scss-export-pink-700: rgb(139.2, 37.2, 84);--quarto-scss-export-pink-800: rgb(92.8, 24.8, 56);--quarto-scss-export-pink-900: rgb(46.4, 12.4, 28);--quarto-scss-export-red-100: rgb(255, 204, 215.4);--quarto-scss-export-red-200: rgb(255, 153, 175.8);--quarto-scss-export-red-300: rgb(255, 102, 136.2);--quarto-scss-export-red-400: rgb(255, 51, 96.6);--quarto-scss-export-red-500: #ff0039;--quarto-scss-export-red-600: rgb(204, 0, 45.6);--quarto-scss-export-red-700: rgb(153, 0, 34.2);--quarto-scss-export-red-800: rgb(102, 0, 22.8);--quarto-scss-export-red-900: rgb(51, 0, 11.4);--quarto-scss-export-orange-100: rgb(252, 238.6, 219.6);--quarto-scss-export-orange-200: rgb(249, 222.2, 184.2);--quarto-scss-export-orange-300: rgb(246, 205.8, 148.8);--quarto-scss-export-orange-400: rgb(243, 189.4, 113.4);--quarto-scss-export-orange-500: #f0ad4e;--quarto-scss-export-orange-600: rgb(192, 138.4, 62.4);--quarto-scss-export-orange-700: rgb(144, 103.8, 46.8);--quarto-scss-export-orange-800: rgb(96, 69.2, 31.2);--quarto-scss-export-orange-900: rgb(48, 34.6, 15.6);--quarto-scss-export-yellow-100: rgb(255, 227.4, 208.8);--quarto-scss-export-yellow-200: rgb(255, 199.8, 162.6);--quarto-scss-export-yellow-300: rgb(255, 172.2, 116.4);--quarto-scss-export-yellow-400: rgb(255, 144.6, 70.2);--quarto-scss-export-yellow-500: #ff7518;--quarto-scss-export-yellow-600: rgb(204, 93.6, 19.2);--quarto-scss-export-yellow-700: rgb(153, 70.2, 14.4);--quarto-scss-export-yellow-800: rgb(102, 46.8, 9.6);--quarto-scss-export-yellow-900: rgb(51, 23.4, 4.8);--quarto-scss-export-green-100: rgb(216.6, 240.4, 208.8);--quarto-scss-export-green-200: rgb(178.2, 225.8, 162.6);--quarto-scss-export-green-300: rgb(139.8, 211.2, 116.4);--quarto-scss-export-green-400: rgb(101.4, 196.6, 70.2);--quarto-scss-export-green-500: #3fb618;--quarto-scss-export-green-600: rgb(50.4, 145.6, 19.2);--quarto-scss-export-green-700: rgb(37.8, 109.2, 14.4);--quarto-scss-export-green-800: rgb(25.2, 72.8, 9.6);--quarto-scss-export-green-900: rgb(12.6, 36.4, 4.8);--quarto-scss-export-teal-100: rgb(210.4, 244.2, 234.2);--quarto-scss-export-teal-200: rgb(165.8, 233.4, 213.4);--quarto-scss-export-teal-300: rgb(121.2, 222.6, 192.6);--quarto-scss-export-teal-400: rgb(76.6, 211.8, 171.8);--quarto-scss-export-teal-500: #20c997;--quarto-scss-export-teal-600: rgb(25.6, 160.8, 120.8);--quarto-scss-export-teal-700: rgb(19.2, 120.6, 90.6);--quarto-scss-export-teal-800: rgb(12.8, 80.4, 60.4);--quarto-scss-export-teal-900: rgb(6.4, 40.2, 30.2);--quarto-scss-export-cyan-100: rgb(234.6, 220.8, 241.4);--quarto-scss-export-cyan-200: rgb(214.2, 186.6, 227.8);--quarto-scss-export-cyan-300: rgb(193.8, 152.4, 214.2);--quarto-scss-export-cyan-400: rgb(173.4, 118.2, 200.6);--quarto-scss-export-cyan-500: #9954bb;--quarto-scss-export-cyan-600: rgb(122.4, 67.2, 149.6);--quarto-scss-export-cyan-700: rgb(91.8, 50.4, 112.2);--quarto-scss-export-cyan-800: rgb(61.2, 33.6, 74.8);--quarto-scss-export-cyan-900: rgb(30.6, 16.8, 37.4);--quarto-scss-export-default: #343a40;--quarto-scss-export-primary-text-emphasis: rgb(15.6, 51.2, 90.8);--quarto-scss-export-secondary-text-emphasis: rgb(20.8, 23.2, 25.6);--quarto-scss-export-success-text-emphasis: rgb(25.2, 72.8, 9.6);--quarto-scss-export-info-text-emphasis: rgb(61.2, 33.6, 74.8);--quarto-scss-export-warning-text-emphasis: rgb(102, 46.8, 9.6);--quarto-scss-export-danger-text-emphasis: rgb(102, 0, 22.8);--quarto-scss-export-light-text-emphasis: #495057;--quarto-scss-export-dark-text-emphasis: #495057;--quarto-scss-export-primary-bg-subtle: rgb(211.8, 229.6, 249.4);--quarto-scss-export-secondary-bg-subtle: rgb(214.4, 215.6, 216.8);--quarto-scss-export-success-bg-subtle: rgb(216.6, 240.4, 208.8);--quarto-scss-export-info-bg-subtle: rgb(234.6, 220.8, 241.4);--quarto-scss-export-warning-bg-subtle: rgb(255, 227.4, 208.8);--quarto-scss-export-danger-bg-subtle: rgb(255, 204, 215.4);--quarto-scss-export-light-bg-subtle: rgb(251.5, 252, 252.5);--quarto-scss-export-dark-bg-subtle: #ced4da;--quarto-scss-export-primary-border-subtle: rgb(168.6, 204.2, 243.8);--quarto-scss-export-secondary-border-subtle: rgb(173.8, 176.2, 178.6);--quarto-scss-export-success-border-subtle: rgb(178.2, 225.8, 162.6);--quarto-scss-export-info-border-subtle: rgb(214.2, 186.6, 227.8);--quarto-scss-export-warning-border-subtle: rgb(255, 199.8, 162.6);--quarto-scss-export-danger-border-subtle: rgb(255, 153, 175.8);--quarto-scss-export-light-border-subtle: #e9ecef;--quarto-scss-export-dark-border-subtle: #adb5bd;--quarto-scss-export-body-text-align: ;--quarto-scss-export-body-bg: #fff;--quarto-scss-export-body-secondary-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-body-secondary-bg: #e9ecef;--quarto-scss-export-body-tertiary-color: rgba(52, 58, 64, 0.5);--quarto-scss-export-body-tertiary-bg: #f8f9fa;--quarto-scss-export-body-emphasis-color: #000;--quarto-scss-export-link-hover-color: rgb(31.2, 77.6, 181.6);--quarto-scss-export-link-hover-decoration: ;--quarto-scss-export-border-color-translucent: rgba(0, 0, 0, 0.175);--quarto-scss-export-component-active-bg: #2780e3;--quarto-scss-export-component-active-color: #fff;--quarto-scss-export-focus-ring-color: rgba(39, 128, 227, 0.25);--quarto-scss-export-headings-font-family: ;--quarto-scss-export-headings-font-style: ;--quarto-scss-export-display-font-family: ;--quarto-scss-export-display-font-style: ;--quarto-scss-export-blockquote-footer-color: #6c757d;--quarto-scss-export-blockquote-border-color: #e9ecef;--quarto-scss-export-hr-bg-color: ;--quarto-scss-export-hr-height: ;--quarto-scss-export-hr-border-color: ;--quarto-scss-export-legend-font-weight: ;--quarto-scss-export-mark-bg: rgb(255, 227.4, 208.8);--quarto-scss-export-table-color: #343a40;--quarto-scss-export-table-bg: #fff;--quarto-scss-export-table-accent-bg: transparent;--quarto-scss-export-table-th-font-weight: ;--quarto-scss-export-table-striped-color: #343a40;--quarto-scss-export-table-striped-bg: rgba(0, 0, 0, 0.05);--quarto-scss-export-table-active-color: #343a40;--quarto-scss-export-table-active-bg: rgba(0, 0, 0, 0.1);--quarto-scss-export-table-hover-color: #343a40;--quarto-scss-export-table-hover-bg: rgba(0, 0, 0, 0.075);--quarto-scss-export-table-caption-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-input-btn-font-family: ;--quarto-scss-export-input-btn-focus-color: rgba(39, 128, 227, 0.25);--quarto-scss-export-btn-color: #343a40;--quarto-scss-export-btn-font-family: ;--quarto-scss-export-btn-white-space: ;--quarto-scss-export-btn-link-color: #2761e3;--quarto-scss-export-btn-link-hover-color: rgb(31.2, 77.6, 181.6);--quarto-scss-export-btn-link-disabled-color: #6c757d;--quarto-scss-export-form-text-font-style: ;--quarto-scss-export-form-text-font-weight: ;--quarto-scss-export-form-text-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-form-label-font-size: ;--quarto-scss-export-form-label-font-style: ;--quarto-scss-export-form-label-font-weight: ;--quarto-scss-export-form-label-color: ;--quarto-scss-export-input-font-family: ;--quarto-scss-export-input-disabled-color: ;--quarto-scss-export-input-disabled-bg: #e9ecef;--quarto-scss-export-input-disabled-border-color: ;--quarto-scss-export-input-color: #343a40;--quarto-scss-export-input-focus-bg: #fff;--quarto-scss-export-input-focus-border-color: rgb(147, 191.5, 241);--quarto-scss-export-input-focus-color: #343a40;--quarto-scss-export-input-placeholder-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-input-plaintext-color: #343a40;--quarto-scss-export-form-check-label-color: ;--quarto-scss-export-form-check-transition: ;--quarto-scss-export-form-check-input-bg: #fff;--quarto-scss-export-form-check-input-focus-border: rgb(147, 191.5, 241);--quarto-scss-export-form-check-input-checked-color: #fff;--quarto-scss-export-form-check-input-checked-bg-color: #2780e3;--quarto-scss-export-form-check-input-checked-border-color: #2780e3;--quarto-scss-export-form-check-input-indeterminate-color: #fff;--quarto-scss-export-form-check-input-indeterminate-bg-color: #2780e3;--quarto-scss-export-form-check-input-indeterminate-border-color: #2780e3;--quarto-scss-export-form-switch-color: rgba(0, 0, 0, 0.25);--quarto-scss-export-form-switch-focus-color: rgb(147, 191.5, 241);--quarto-scss-export-form-switch-checked-color: #fff;--quarto-scss-export-input-group-addon-color: #343a40;--quarto-scss-export-input-group-addon-bg: #f8f9fa;--quarto-scss-export-input-group-addon-border-color: #dee2e6;--quarto-scss-export-form-select-font-family: ;--quarto-scss-export-form-select-color: #343a40;--quarto-scss-export-form-select-bg: #fff;--quarto-scss-export-form-select-disabled-color: ;--quarto-scss-export-form-select-disabled-bg: #e9ecef;--quarto-scss-export-form-select-disabled-border-color: ;--quarto-scss-export-form-select-indicator-color: #343a40;--quarto-scss-export-form-select-border-color: #dee2e6;--quarto-scss-export-form-select-focus-border-color: rgb(147, 191.5, 241);--quarto-scss-export-form-range-track-bg: #f8f9fa;--quarto-scss-export-form-range-thumb-bg: #2780e3;--quarto-scss-export-form-range-thumb-active-bg: rgb(190.2, 216.9, 246.6);--quarto-scss-export-form-range-thumb-disabled-bg: rgba(52, 58, 64, 0.75);--quarto-scss-export-form-file-button-color: #343a40;--quarto-scss-export-form-file-button-bg: #f8f9fa;--quarto-scss-export-form-file-button-hover-bg: #e9ecef;--quarto-scss-export-form-floating-label-disabled-color: #6c757d;--quarto-scss-export-form-feedback-font-style: ;--quarto-scss-export-form-feedback-valid-color: #3fb618;--quarto-scss-export-form-feedback-invalid-color: #ff0039;--quarto-scss-export-form-feedback-icon-valid-color: #3fb618;--quarto-scss-export-form-feedback-icon-invalid-color: #ff0039;--quarto-scss-export-form-valid-color: #3fb618;--quarto-scss-export-form-valid-border-color: #3fb618;--quarto-scss-export-form-invalid-color: #ff0039;--quarto-scss-export-form-invalid-border-color: #ff0039;--quarto-scss-export-nav-link-font-size: ;--quarto-scss-export-nav-link-font-weight: ;--quarto-scss-export-nav-link-color: #2761e3;--quarto-scss-export-nav-link-hover-color: rgb(31.2, 77.6, 181.6);--quarto-scss-export-nav-link-disabled-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-nav-tabs-border-color: #dee2e6;--quarto-scss-export-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;--quarto-scss-export-nav-tabs-link-active-color: #000;--quarto-scss-export-nav-tabs-link-active-bg: #fff;--quarto-scss-export-nav-pills-link-active-bg: #2780e3;--quarto-scss-export-nav-pills-link-active-color: #fff;--quarto-scss-export-nav-underline-link-active-color: #000;--quarto-scss-export-navbar-padding-x: ;--quarto-scss-export-navbar-light-contrast: #000;--quarto-scss-export-navbar-dark-contrast: #000;--quarto-scss-export-navbar-light-icon-color: rgba(0, 0, 0, 0.75);--quarto-scss-export-navbar-dark-icon-color: rgba(0, 0, 0, 0.75);--quarto-scss-export-dropdown-color: #343a40;--quarto-scss-export-dropdown-bg: #fff;--quarto-scss-export-dropdown-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-dropdown-divider-bg: rgba(0, 0, 0, 0.175);--quarto-scss-export-dropdown-link-color: #343a40;--quarto-scss-export-dropdown-link-hover-color: #343a40;--quarto-scss-export-dropdown-link-hover-bg: #f8f9fa;--quarto-scss-export-dropdown-link-active-bg: #2780e3;--quarto-scss-export-dropdown-link-active-color: #fff;--quarto-scss-export-dropdown-link-disabled-color: rgba(52, 58, 64, 0.5);--quarto-scss-export-dropdown-header-color: #6c757d;--quarto-scss-export-dropdown-dark-color: #dee2e6;--quarto-scss-export-dropdown-dark-bg: #343a40;--quarto-scss-export-dropdown-dark-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-dropdown-dark-divider-bg: rgba(0, 0, 0, 0.175);--quarto-scss-export-dropdown-dark-box-shadow: ;--quarto-scss-export-dropdown-dark-link-color: #dee2e6;--quarto-scss-export-dropdown-dark-link-hover-color: #fff;--quarto-scss-export-dropdown-dark-link-hover-bg: rgba(255, 255, 255, 0.15);--quarto-scss-export-dropdown-dark-link-active-color: #fff;--quarto-scss-export-dropdown-dark-link-active-bg: #2780e3;--quarto-scss-export-dropdown-dark-link-disabled-color: #adb5bd;--quarto-scss-export-dropdown-dark-header-color: #adb5bd;--quarto-scss-export-pagination-color: #2761e3;--quarto-scss-export-pagination-bg: #fff;--quarto-scss-export-pagination-border-color: #dee2e6;--quarto-scss-export-pagination-focus-color: rgb(31.2, 77.6, 181.6);--quarto-scss-export-pagination-focus-bg: #e9ecef;--quarto-scss-export-pagination-hover-color: rgb(31.2, 77.6, 181.6);--quarto-scss-export-pagination-hover-bg: #f8f9fa;--quarto-scss-export-pagination-hover-border-color: #dee2e6;--quarto-scss-export-pagination-active-color: #fff;--quarto-scss-export-pagination-active-bg: #2780e3;--quarto-scss-export-pagination-active-border-color: #2780e3;--quarto-scss-export-pagination-disabled-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-pagination-disabled-bg: #e9ecef;--quarto-scss-export-pagination-disabled-border-color: #dee2e6;--quarto-scss-export-card-title-color: ;--quarto-scss-export-card-subtitle-color: ;--quarto-scss-export-card-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-card-box-shadow: ;--quarto-scss-export-card-cap-color: ;--quarto-scss-export-card-height: ;--quarto-scss-export-card-color: ;--quarto-scss-export-card-bg: #fff;--quarto-scss-export-accordion-color: #343a40;--quarto-scss-export-accordion-bg: #fff;--quarto-scss-export-accordion-border-color: #dee2e6;--quarto-scss-export-accordion-button-color: #343a40;--quarto-scss-export-accordion-button-bg: #fff;--quarto-scss-export-accordion-button-active-bg: rgb(211.8, 229.6, 249.4);--quarto-scss-export-accordion-button-active-color: rgb(15.6, 51.2, 90.8);--quarto-scss-export-accordion-button-focus-border-color: rgb(147, 191.5, 241);--quarto-scss-export-accordion-icon-color: #343a40;--quarto-scss-export-accordion-icon-active-color: rgb(15.6, 51.2, 90.8);--quarto-scss-export-tooltip-color: #fff;--quarto-scss-export-tooltip-bg: #000;--quarto-scss-export-tooltip-margin: ;--quarto-scss-export-tooltip-arrow-color: ;--quarto-scss-export-form-feedback-tooltip-line-height: ;--quarto-scss-export-popover-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-popover-header-bg: #e9ecef;--quarto-scss-export-popover-body-color: #343a40;--quarto-scss-export-popover-arrow-color: #fff;--quarto-scss-export-popover-arrow-outer-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-toast-color: ;--quarto-scss-export-toast-background-color: rgba(255, 255, 255, 0.85);--quarto-scss-export-toast-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-toast-header-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-toast-header-background-color: rgba(255, 255, 255, 0.85);--quarto-scss-export-toast-header-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-badge-color: #fff;--quarto-scss-export-modal-content-color: ;--quarto-scss-export-modal-content-bg: #fff;--quarto-scss-export-modal-content-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-modal-backdrop-bg: #000;--quarto-scss-export-modal-header-border-color: #dee2e6;--quarto-scss-export-modal-footer-bg: ;--quarto-scss-export-modal-footer-border-color: #dee2e6;--quarto-scss-export-progress-bg: #e9ecef;--quarto-scss-export-progress-bar-color: #fff;--quarto-scss-export-progress-bar-bg: #2780e3;--quarto-scss-export-list-group-color: #343a40;--quarto-scss-export-list-group-bg: #fff;--quarto-scss-export-list-group-border-color: #dee2e6;--quarto-scss-export-list-group-hover-bg: #f8f9fa;--quarto-scss-export-list-group-active-bg: #2780e3;--quarto-scss-export-list-group-active-color: #fff;--quarto-scss-export-list-group-active-border-color: #2780e3;--quarto-scss-export-list-group-disabled-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-list-group-disabled-bg: #fff;--quarto-scss-export-list-group-action-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-list-group-action-hover-color: #000;--quarto-scss-export-list-group-action-active-color: #343a40;--quarto-scss-export-list-group-action-active-bg: #e9ecef;--quarto-scss-export-thumbnail-bg: #fff;--quarto-scss-export-thumbnail-border-color: #dee2e6;--quarto-scss-export-figure-caption-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-breadcrumb-font-size: ;--quarto-scss-export-breadcrumb-bg: ;--quarto-scss-export-breadcrumb-divider-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-breadcrumb-active-color: rgba(52, 58, 64, 0.75);--quarto-scss-export-breadcrumb-border-radius: ;--quarto-scss-export-carousel-control-color: #fff;--quarto-scss-export-carousel-indicator-active-bg: #fff;--quarto-scss-export-carousel-caption-color: #fff;--quarto-scss-export-carousel-dark-indicator-active-bg: #000;--quarto-scss-export-carousel-dark-caption-color: #000;--quarto-scss-export-btn-close-color: #000;--quarto-scss-export-offcanvas-border-color: rgba(0, 0, 0, 0.175);--quarto-scss-export-offcanvas-bg-color: #fff;--quarto-scss-export-offcanvas-color: #343a40;--quarto-scss-export-offcanvas-backdrop-bg: #000;--quarto-scss-export-code-color-dark: white;--quarto-scss-export-kbd-color: #fff;--quarto-scss-export-kbd-bg: #343a40;--quarto-scss-export-nested-kbd-font-weight: ;--quarto-scss-export-pre-bg: #f8f9fa;--quarto-scss-export-pre-color: #000;--quarto-scss-export-bslib-page-sidebar-title-bg: #f8f9fa;--quarto-scss-export-bslib-page-sidebar-title-color: #000;--quarto-scss-export-bslib-sidebar-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.05);--quarto-scss-export-bslib-sidebar-toggle-bg: rgba(var(--bs-emphasis-color-rgb, 0, 0, 0), 0.1);--quarto-scss-export-sidebar-color: rgb(89.25, 89.25, 89.25);--quarto-scss-export-sidebar-hover-color: rgba(32.76, 81.48, 190.68, 0.8);--quarto-scss-export-sidebar-disabled-color: rgba(89.25, 89.25, 89.25, 0.75);--quarto-scss-export-valuebox-bg-primary: #5397e9;--quarto-scss-export-valuebox-bg-secondary: #343a40;--quarto-scss-export-valuebox-bg-success: #3aa716;--quarto-scss-export-valuebox-bg-info: rgba(153, 84, 187, 0.7019607843);--quarto-scss-export-valuebox-bg-warning: #fa6400;--quarto-scss-export-valuebox-bg-danger: rgba(255, 0, 57, 0.7019607843);--quarto-scss-export-valuebox-bg-light: #f8f9fa;--quarto-scss-export-valuebox-bg-dark: #343a40;--quarto-scss-export-mermaid-bg-color: #fff;--quarto-scss-export-mermaid-edge-color: #343a40;--quarto-scss-export-mermaid-node-fg-color: #343a40;--quarto-scss-export-mermaid-fg-color: #343a40;--quarto-scss-export-mermaid-fg-color--lighter: rgb(74.8620689655, 83.5, 92.1379310345);--quarto-scss-export-mermaid-fg-color--lightest: rgb(97.724137931, 109, 120.275862069);--quarto-scss-export-mermaid-label-bg-color: #fff;--quarto-scss-export-mermaid-label-fg-color: #2780e3;--quarto-scss-export-mermaid-node-bg-color: rgba(39, 128, 227, 0.1);--quarto-scss-export-code-block-border-left-color: #dee2e6;--quarto-scss-export-callout-color-note: #2780e3;--quarto-scss-export-callout-color-tip: #3fb618;--quarto-scss-export-callout-color-important: #ff0039;--quarto-scss-export-callout-color-caution: #f0ad4e;--quarto-scss-export-callout-color-warning: #ff7518} \ No newline at end of file diff --git a/docs/site_libs/bootstrap/bootstrap-icons.css b/docs/site_libs/bootstrap/bootstrap-icons.css new file mode 100644 index 0000000..82b40f5 --- /dev/null +++ b/docs/site_libs/bootstrap/bootstrap-icons.css @@ -0,0 +1,2106 @@ +/*! + * Bootstrap Icons v1.13.1 (https://icons.getbootstrap.com/) + * Copyright 2019-2024 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/icons/blob/main/LICENSE) + */ + +@font-face { + font-display: block; + font-family: "bootstrap-icons"; + src: +url("./bootstrap-icons.woff?e34853135f9e39acf64315236852cd5a") format("woff"); +} + +.bi::before, +[class^="bi-"]::before, +[class*=" bi-"]::before { + display: inline-block; + font-family: bootstrap-icons !important; + font-style: normal; + font-weight: normal !important; + font-variant: normal; + text-transform: none; + line-height: 1; + vertical-align: -.125em; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.bi-123::before { content: "\f67f"; } +.bi-alarm-fill::before { content: "\f101"; } +.bi-alarm::before { content: "\f102"; } +.bi-align-bottom::before { content: "\f103"; } +.bi-align-center::before { content: "\f104"; } +.bi-align-end::before { content: "\f105"; } +.bi-align-middle::before { content: "\f106"; } +.bi-align-start::before { content: "\f107"; } +.bi-align-top::before { content: "\f108"; } +.bi-alt::before { content: "\f109"; } +.bi-app-indicator::before { content: "\f10a"; } +.bi-app::before { content: "\f10b"; } +.bi-archive-fill::before { content: "\f10c"; } +.bi-archive::before { content: "\f10d"; } +.bi-arrow-90deg-down::before { content: "\f10e"; } +.bi-arrow-90deg-left::before { content: "\f10f"; } +.bi-arrow-90deg-right::before { content: "\f110"; } +.bi-arrow-90deg-up::before { content: "\f111"; } +.bi-arrow-bar-down::before { content: "\f112"; } +.bi-arrow-bar-left::before { content: "\f113"; } +.bi-arrow-bar-right::before { content: "\f114"; } +.bi-arrow-bar-up::before { content: "\f115"; } +.bi-arrow-clockwise::before { content: "\f116"; } +.bi-arrow-counterclockwise::before { content: "\f117"; } +.bi-arrow-down-circle-fill::before { content: "\f118"; } +.bi-arrow-down-circle::before { content: "\f119"; } +.bi-arrow-down-left-circle-fill::before { content: "\f11a"; } +.bi-arrow-down-left-circle::before { content: "\f11b"; } +.bi-arrow-down-left-square-fill::before { content: "\f11c"; } +.bi-arrow-down-left-square::before { content: "\f11d"; } +.bi-arrow-down-left::before { content: "\f11e"; } +.bi-arrow-down-right-circle-fill::before { content: "\f11f"; } +.bi-arrow-down-right-circle::before { content: "\f120"; } +.bi-arrow-down-right-square-fill::before { content: "\f121"; } +.bi-arrow-down-right-square::before { content: "\f122"; } +.bi-arrow-down-right::before { content: "\f123"; } +.bi-arrow-down-short::before { content: "\f124"; } +.bi-arrow-down-square-fill::before { content: "\f125"; } +.bi-arrow-down-square::before { content: "\f126"; } +.bi-arrow-down-up::before { content: "\f127"; } +.bi-arrow-down::before { content: "\f128"; } +.bi-arrow-left-circle-fill::before { content: "\f129"; } +.bi-arrow-left-circle::before { content: "\f12a"; } +.bi-arrow-left-right::before { content: "\f12b"; } +.bi-arrow-left-short::before { content: "\f12c"; } +.bi-arrow-left-square-fill::before { content: "\f12d"; } +.bi-arrow-left-square::before { content: "\f12e"; } +.bi-arrow-left::before { content: "\f12f"; } +.bi-arrow-repeat::before { content: "\f130"; } +.bi-arrow-return-left::before { content: "\f131"; } +.bi-arrow-return-right::before { content: "\f132"; } +.bi-arrow-right-circle-fill::before { content: "\f133"; } +.bi-arrow-right-circle::before { content: "\f134"; } +.bi-arrow-right-short::before { content: "\f135"; } +.bi-arrow-right-square-fill::before { content: "\f136"; } +.bi-arrow-right-square::before { content: "\f137"; } +.bi-arrow-right::before { content: "\f138"; } +.bi-arrow-up-circle-fill::before { content: "\f139"; } +.bi-arrow-up-circle::before { content: "\f13a"; } +.bi-arrow-up-left-circle-fill::before { content: "\f13b"; } +.bi-arrow-up-left-circle::before { content: "\f13c"; } +.bi-arrow-up-left-square-fill::before { content: "\f13d"; } +.bi-arrow-up-left-square::before { content: "\f13e"; } +.bi-arrow-up-left::before { content: "\f13f"; } +.bi-arrow-up-right-circle-fill::before { content: "\f140"; } +.bi-arrow-up-right-circle::before { content: "\f141"; } +.bi-arrow-up-right-square-fill::before { content: "\f142"; } +.bi-arrow-up-right-square::before { content: "\f143"; } +.bi-arrow-up-right::before { content: "\f144"; } +.bi-arrow-up-short::before { content: "\f145"; } +.bi-arrow-up-square-fill::before { content: "\f146"; } +.bi-arrow-up-square::before { content: "\f147"; } +.bi-arrow-up::before { content: "\f148"; } +.bi-arrows-angle-contract::before { content: "\f149"; } +.bi-arrows-angle-expand::before { content: "\f14a"; } +.bi-arrows-collapse::before { content: "\f14b"; } +.bi-arrows-expand::before { content: "\f14c"; } +.bi-arrows-fullscreen::before { content: "\f14d"; } +.bi-arrows-move::before { content: "\f14e"; } +.bi-aspect-ratio-fill::before { content: "\f14f"; } +.bi-aspect-ratio::before { content: "\f150"; } +.bi-asterisk::before { content: "\f151"; } +.bi-at::before { content: "\f152"; } +.bi-award-fill::before { content: "\f153"; } +.bi-award::before { content: "\f154"; } +.bi-back::before { content: "\f155"; } +.bi-backspace-fill::before { content: "\f156"; } +.bi-backspace-reverse-fill::before { content: "\f157"; } +.bi-backspace-reverse::before { content: "\f158"; } +.bi-backspace::before { content: "\f159"; } +.bi-badge-3d-fill::before { content: "\f15a"; } +.bi-badge-3d::before { content: "\f15b"; } +.bi-badge-4k-fill::before { content: "\f15c"; } +.bi-badge-4k::before { content: "\f15d"; } +.bi-badge-8k-fill::before { content: "\f15e"; } +.bi-badge-8k::before { content: "\f15f"; } +.bi-badge-ad-fill::before { content: "\f160"; } +.bi-badge-ad::before { content: "\f161"; } +.bi-badge-ar-fill::before { content: "\f162"; } +.bi-badge-ar::before { content: "\f163"; } +.bi-badge-cc-fill::before { content: "\f164"; } +.bi-badge-cc::before { content: "\f165"; } +.bi-badge-hd-fill::before { content: "\f166"; } +.bi-badge-hd::before { content: "\f167"; } +.bi-badge-tm-fill::before { content: "\f168"; } +.bi-badge-tm::before { content: "\f169"; } +.bi-badge-vo-fill::before { content: "\f16a"; } +.bi-badge-vo::before { content: "\f16b"; } +.bi-badge-vr-fill::before { content: "\f16c"; } +.bi-badge-vr::before { content: "\f16d"; } +.bi-badge-wc-fill::before { content: "\f16e"; } +.bi-badge-wc::before { content: "\f16f"; } +.bi-bag-check-fill::before { content: "\f170"; } +.bi-bag-check::before { content: "\f171"; } +.bi-bag-dash-fill::before { content: "\f172"; } +.bi-bag-dash::before { content: "\f173"; } +.bi-bag-fill::before { content: "\f174"; } +.bi-bag-plus-fill::before { content: "\f175"; } +.bi-bag-plus::before { content: "\f176"; } +.bi-bag-x-fill::before { content: "\f177"; } +.bi-bag-x::before { content: "\f178"; } +.bi-bag::before { content: "\f179"; } +.bi-bar-chart-fill::before { content: "\f17a"; } +.bi-bar-chart-line-fill::before { content: "\f17b"; } +.bi-bar-chart-line::before { content: "\f17c"; } +.bi-bar-chart-steps::before { content: "\f17d"; } +.bi-bar-chart::before { content: "\f17e"; } +.bi-basket-fill::before { content: "\f17f"; } +.bi-basket::before { content: "\f180"; } +.bi-basket2-fill::before { content: "\f181"; } +.bi-basket2::before { content: "\f182"; } +.bi-basket3-fill::before { content: "\f183"; } +.bi-basket3::before { content: "\f184"; } +.bi-battery-charging::before { content: "\f185"; } +.bi-battery-full::before { content: "\f186"; } +.bi-battery-half::before { content: "\f187"; } +.bi-battery::before { content: "\f188"; } +.bi-bell-fill::before { content: "\f189"; } +.bi-bell::before { content: "\f18a"; } +.bi-bezier::before { content: "\f18b"; } +.bi-bezier2::before { content: "\f18c"; } +.bi-bicycle::before { content: "\f18d"; } +.bi-binoculars-fill::before { content: "\f18e"; } +.bi-binoculars::before { content: "\f18f"; } +.bi-blockquote-left::before { content: "\f190"; } +.bi-blockquote-right::before { content: "\f191"; } +.bi-book-fill::before { content: "\f192"; } +.bi-book-half::before { content: "\f193"; } +.bi-book::before { content: "\f194"; } +.bi-bookmark-check-fill::before { content: "\f195"; } +.bi-bookmark-check::before { content: "\f196"; } +.bi-bookmark-dash-fill::before { content: "\f197"; } +.bi-bookmark-dash::before { content: "\f198"; } +.bi-bookmark-fill::before { content: "\f199"; } +.bi-bookmark-heart-fill::before { content: "\f19a"; } +.bi-bookmark-heart::before { content: "\f19b"; } +.bi-bookmark-plus-fill::before { content: "\f19c"; } +.bi-bookmark-plus::before { content: "\f19d"; } +.bi-bookmark-star-fill::before { content: "\f19e"; } +.bi-bookmark-star::before { content: "\f19f"; } +.bi-bookmark-x-fill::before { content: "\f1a0"; } +.bi-bookmark-x::before { content: "\f1a1"; } +.bi-bookmark::before { content: "\f1a2"; } +.bi-bookmarks-fill::before { content: "\f1a3"; } +.bi-bookmarks::before { content: "\f1a4"; } +.bi-bookshelf::before { content: "\f1a5"; } +.bi-bootstrap-fill::before { content: "\f1a6"; } +.bi-bootstrap-reboot::before { content: "\f1a7"; } +.bi-bootstrap::before { content: "\f1a8"; } +.bi-border-all::before { content: "\f1a9"; } +.bi-border-bottom::before { content: "\f1aa"; } +.bi-border-center::before { content: "\f1ab"; } +.bi-border-inner::before { content: "\f1ac"; } +.bi-border-left::before { content: "\f1ad"; } +.bi-border-middle::before { content: "\f1ae"; } +.bi-border-outer::before { content: "\f1af"; } +.bi-border-right::before { content: "\f1b0"; } +.bi-border-style::before { content: "\f1b1"; } +.bi-border-top::before { content: "\f1b2"; } +.bi-border-width::before { content: "\f1b3"; } +.bi-border::before { content: "\f1b4"; } +.bi-bounding-box-circles::before { content: "\f1b5"; } +.bi-bounding-box::before { content: "\f1b6"; } +.bi-box-arrow-down-left::before { content: "\f1b7"; } +.bi-box-arrow-down-right::before { content: "\f1b8"; } +.bi-box-arrow-down::before { content: "\f1b9"; } +.bi-box-arrow-in-down-left::before { content: "\f1ba"; } +.bi-box-arrow-in-down-right::before { content: "\f1bb"; } +.bi-box-arrow-in-down::before { content: "\f1bc"; } +.bi-box-arrow-in-left::before { content: "\f1bd"; } +.bi-box-arrow-in-right::before { content: "\f1be"; } +.bi-box-arrow-in-up-left::before { content: "\f1bf"; } +.bi-box-arrow-in-up-right::before { content: "\f1c0"; } +.bi-box-arrow-in-up::before { content: "\f1c1"; } +.bi-box-arrow-left::before { content: "\f1c2"; } +.bi-box-arrow-right::before { content: "\f1c3"; } +.bi-box-arrow-up-left::before { content: "\f1c4"; } +.bi-box-arrow-up-right::before { content: "\f1c5"; } +.bi-box-arrow-up::before { content: "\f1c6"; } +.bi-box-seam::before { content: "\f1c7"; } +.bi-box::before { content: "\f1c8"; } +.bi-braces::before { content: "\f1c9"; } +.bi-bricks::before { content: "\f1ca"; } +.bi-briefcase-fill::before { content: "\f1cb"; } +.bi-briefcase::before { content: "\f1cc"; } +.bi-brightness-alt-high-fill::before { content: "\f1cd"; } +.bi-brightness-alt-high::before { content: "\f1ce"; } +.bi-brightness-alt-low-fill::before { content: "\f1cf"; } +.bi-brightness-alt-low::before { content: "\f1d0"; } +.bi-brightness-high-fill::before { content: "\f1d1"; } +.bi-brightness-high::before { content: "\f1d2"; } +.bi-brightness-low-fill::before { content: "\f1d3"; } +.bi-brightness-low::before { content: "\f1d4"; } +.bi-broadcast-pin::before { content: "\f1d5"; } +.bi-broadcast::before { content: "\f1d6"; } +.bi-brush-fill::before { content: "\f1d7"; } +.bi-brush::before { content: "\f1d8"; } +.bi-bucket-fill::before { content: "\f1d9"; } +.bi-bucket::before { content: "\f1da"; } +.bi-bug-fill::before { content: "\f1db"; } +.bi-bug::before { content: "\f1dc"; } +.bi-building::before { content: "\f1dd"; } +.bi-bullseye::before { content: "\f1de"; } +.bi-calculator-fill::before { content: "\f1df"; } +.bi-calculator::before { content: "\f1e0"; } +.bi-calendar-check-fill::before { content: "\f1e1"; } +.bi-calendar-check::before { content: "\f1e2"; } +.bi-calendar-date-fill::before { content: "\f1e3"; } +.bi-calendar-date::before { content: "\f1e4"; } +.bi-calendar-day-fill::before { content: "\f1e5"; } +.bi-calendar-day::before { content: "\f1e6"; } +.bi-calendar-event-fill::before { content: "\f1e7"; } +.bi-calendar-event::before { content: "\f1e8"; } +.bi-calendar-fill::before { content: "\f1e9"; } +.bi-calendar-minus-fill::before { content: "\f1ea"; } +.bi-calendar-minus::before { content: "\f1eb"; } +.bi-calendar-month-fill::before { content: "\f1ec"; } +.bi-calendar-month::before { content: "\f1ed"; } +.bi-calendar-plus-fill::before { content: "\f1ee"; } +.bi-calendar-plus::before { content: "\f1ef"; } +.bi-calendar-range-fill::before { content: "\f1f0"; } +.bi-calendar-range::before { content: "\f1f1"; } +.bi-calendar-week-fill::before { content: "\f1f2"; } +.bi-calendar-week::before { content: "\f1f3"; } +.bi-calendar-x-fill::before { content: "\f1f4"; } +.bi-calendar-x::before { content: "\f1f5"; } +.bi-calendar::before { content: "\f1f6"; } +.bi-calendar2-check-fill::before { content: "\f1f7"; } +.bi-calendar2-check::before { content: "\f1f8"; } +.bi-calendar2-date-fill::before { content: "\f1f9"; } +.bi-calendar2-date::before { content: "\f1fa"; } +.bi-calendar2-day-fill::before { content: "\f1fb"; } +.bi-calendar2-day::before { content: "\f1fc"; } +.bi-calendar2-event-fill::before { content: "\f1fd"; } +.bi-calendar2-event::before { content: "\f1fe"; } +.bi-calendar2-fill::before { content: "\f1ff"; } +.bi-calendar2-minus-fill::before { content: "\f200"; } +.bi-calendar2-minus::before { content: "\f201"; } +.bi-calendar2-month-fill::before { content: "\f202"; } +.bi-calendar2-month::before { content: "\f203"; } +.bi-calendar2-plus-fill::before { content: "\f204"; } +.bi-calendar2-plus::before { content: "\f205"; } +.bi-calendar2-range-fill::before { content: "\f206"; } +.bi-calendar2-range::before { content: "\f207"; } +.bi-calendar2-week-fill::before { content: "\f208"; } +.bi-calendar2-week::before { content: "\f209"; } +.bi-calendar2-x-fill::before { content: "\f20a"; } +.bi-calendar2-x::before { content: "\f20b"; } +.bi-calendar2::before { content: "\f20c"; } +.bi-calendar3-event-fill::before { content: "\f20d"; } +.bi-calendar3-event::before { content: "\f20e"; } +.bi-calendar3-fill::before { content: "\f20f"; } +.bi-calendar3-range-fill::before { content: "\f210"; } +.bi-calendar3-range::before { content: "\f211"; } +.bi-calendar3-week-fill::before { content: "\f212"; } +.bi-calendar3-week::before { content: "\f213"; } +.bi-calendar3::before { content: "\f214"; } +.bi-calendar4-event::before { content: "\f215"; } +.bi-calendar4-range::before { content: "\f216"; } +.bi-calendar4-week::before { content: "\f217"; } +.bi-calendar4::before { content: "\f218"; } +.bi-camera-fill::before { content: "\f219"; } +.bi-camera-reels-fill::before { content: "\f21a"; } +.bi-camera-reels::before { content: "\f21b"; } +.bi-camera-video-fill::before { content: "\f21c"; } +.bi-camera-video-off-fill::before { content: "\f21d"; } +.bi-camera-video-off::before { content: "\f21e"; } +.bi-camera-video::before { content: "\f21f"; } +.bi-camera::before { content: "\f220"; } +.bi-camera2::before { content: "\f221"; } +.bi-capslock-fill::before { content: "\f222"; } +.bi-capslock::before { content: "\f223"; } +.bi-card-checklist::before { content: "\f224"; } +.bi-card-heading::before { content: "\f225"; } +.bi-card-image::before { content: "\f226"; } +.bi-card-list::before { content: "\f227"; } +.bi-card-text::before { content: "\f228"; } +.bi-caret-down-fill::before { content: "\f229"; } +.bi-caret-down-square-fill::before { content: "\f22a"; } +.bi-caret-down-square::before { content: "\f22b"; } +.bi-caret-down::before { content: "\f22c"; } +.bi-caret-left-fill::before { content: "\f22d"; } +.bi-caret-left-square-fill::before { content: "\f22e"; } +.bi-caret-left-square::before { content: "\f22f"; } +.bi-caret-left::before { content: "\f230"; } +.bi-caret-right-fill::before { content: "\f231"; } +.bi-caret-right-square-fill::before { content: "\f232"; } +.bi-caret-right-square::before { content: "\f233"; } +.bi-caret-right::before { content: "\f234"; } +.bi-caret-up-fill::before { content: "\f235"; } +.bi-caret-up-square-fill::before { content: "\f236"; } +.bi-caret-up-square::before { content: "\f237"; } +.bi-caret-up::before { content: "\f238"; } +.bi-cart-check-fill::before { content: "\f239"; } +.bi-cart-check::before { content: "\f23a"; } +.bi-cart-dash-fill::before { content: "\f23b"; } +.bi-cart-dash::before { content: "\f23c"; } +.bi-cart-fill::before { content: "\f23d"; } +.bi-cart-plus-fill::before { content: "\f23e"; } +.bi-cart-plus::before { content: "\f23f"; } +.bi-cart-x-fill::before { content: "\f240"; } +.bi-cart-x::before { content: "\f241"; } +.bi-cart::before { content: "\f242"; } +.bi-cart2::before { content: "\f243"; } +.bi-cart3::before { content: "\f244"; } +.bi-cart4::before { content: "\f245"; } +.bi-cash-stack::before { content: "\f246"; } +.bi-cash::before { content: "\f247"; } +.bi-cast::before { content: "\f248"; } +.bi-chat-dots-fill::before { content: "\f249"; } +.bi-chat-dots::before { content: "\f24a"; } +.bi-chat-fill::before { content: "\f24b"; } +.bi-chat-left-dots-fill::before { content: "\f24c"; } +.bi-chat-left-dots::before { content: "\f24d"; } +.bi-chat-left-fill::before { content: "\f24e"; } +.bi-chat-left-quote-fill::before { content: "\f24f"; } +.bi-chat-left-quote::before { content: "\f250"; } +.bi-chat-left-text-fill::before { content: "\f251"; } +.bi-chat-left-text::before { content: "\f252"; } +.bi-chat-left::before { content: "\f253"; } +.bi-chat-quote-fill::before { content: "\f254"; } +.bi-chat-quote::before { content: "\f255"; } +.bi-chat-right-dots-fill::before { content: "\f256"; } +.bi-chat-right-dots::before { content: "\f257"; } +.bi-chat-right-fill::before { content: "\f258"; } +.bi-chat-right-quote-fill::before { content: "\f259"; } +.bi-chat-right-quote::before { content: "\f25a"; } +.bi-chat-right-text-fill::before { content: "\f25b"; } +.bi-chat-right-text::before { content: "\f25c"; } +.bi-chat-right::before { content: "\f25d"; } +.bi-chat-square-dots-fill::before { content: "\f25e"; } +.bi-chat-square-dots::before { content: "\f25f"; } +.bi-chat-square-fill::before { content: "\f260"; } +.bi-chat-square-quote-fill::before { content: "\f261"; } +.bi-chat-square-quote::before { content: "\f262"; } +.bi-chat-square-text-fill::before { content: "\f263"; } +.bi-chat-square-text::before { content: "\f264"; } +.bi-chat-square::before { content: "\f265"; } +.bi-chat-text-fill::before { content: "\f266"; } +.bi-chat-text::before { content: "\f267"; } +.bi-chat::before { content: "\f268"; } +.bi-check-all::before { content: "\f269"; } +.bi-check-circle-fill::before { content: "\f26a"; } +.bi-check-circle::before { content: "\f26b"; } +.bi-check-square-fill::before { content: "\f26c"; } +.bi-check-square::before { content: "\f26d"; } +.bi-check::before { content: "\f26e"; } +.bi-check2-all::before { content: "\f26f"; } +.bi-check2-circle::before { content: "\f270"; } +.bi-check2-square::before { content: "\f271"; } +.bi-check2::before { content: "\f272"; } +.bi-chevron-bar-contract::before { content: "\f273"; } +.bi-chevron-bar-down::before { content: "\f274"; } +.bi-chevron-bar-expand::before { content: "\f275"; } +.bi-chevron-bar-left::before { content: "\f276"; } +.bi-chevron-bar-right::before { content: "\f277"; } +.bi-chevron-bar-up::before { content: "\f278"; } +.bi-chevron-compact-down::before { content: "\f279"; } +.bi-chevron-compact-left::before { content: "\f27a"; } +.bi-chevron-compact-right::before { content: "\f27b"; } +.bi-chevron-compact-up::before { content: "\f27c"; } +.bi-chevron-contract::before { content: "\f27d"; } +.bi-chevron-double-down::before { content: "\f27e"; } +.bi-chevron-double-left::before { content: "\f27f"; } +.bi-chevron-double-right::before { content: "\f280"; } +.bi-chevron-double-up::before { content: "\f281"; } +.bi-chevron-down::before { content: "\f282"; } +.bi-chevron-expand::before { content: "\f283"; } +.bi-chevron-left::before { content: "\f284"; } +.bi-chevron-right::before { content: "\f285"; } +.bi-chevron-up::before { content: "\f286"; } +.bi-circle-fill::before { content: "\f287"; } +.bi-circle-half::before { content: "\f288"; } +.bi-circle-square::before { content: "\f289"; } +.bi-circle::before { content: "\f28a"; } +.bi-clipboard-check::before { content: "\f28b"; } +.bi-clipboard-data::before { content: "\f28c"; } +.bi-clipboard-minus::before { content: "\f28d"; } +.bi-clipboard-plus::before { content: "\f28e"; } +.bi-clipboard-x::before { content: "\f28f"; } +.bi-clipboard::before { content: "\f290"; } +.bi-clock-fill::before { content: "\f291"; } +.bi-clock-history::before { content: "\f292"; } +.bi-clock::before { content: "\f293"; } +.bi-cloud-arrow-down-fill::before { content: "\f294"; } +.bi-cloud-arrow-down::before { content: "\f295"; } +.bi-cloud-arrow-up-fill::before { content: "\f296"; } +.bi-cloud-arrow-up::before { content: "\f297"; } +.bi-cloud-check-fill::before { content: "\f298"; } +.bi-cloud-check::before { content: "\f299"; } +.bi-cloud-download-fill::before { content: "\f29a"; } +.bi-cloud-download::before { content: "\f29b"; } +.bi-cloud-drizzle-fill::before { content: "\f29c"; } +.bi-cloud-drizzle::before { content: "\f29d"; } +.bi-cloud-fill::before { content: "\f29e"; } +.bi-cloud-fog-fill::before { content: "\f29f"; } +.bi-cloud-fog::before { content: "\f2a0"; } +.bi-cloud-fog2-fill::before { content: "\f2a1"; } +.bi-cloud-fog2::before { content: "\f2a2"; } +.bi-cloud-hail-fill::before { content: "\f2a3"; } +.bi-cloud-hail::before { content: "\f2a4"; } +.bi-cloud-haze-fill::before { content: "\f2a6"; } +.bi-cloud-haze::before { content: "\f2a7"; } +.bi-cloud-haze2-fill::before { content: "\f2a8"; } +.bi-cloud-lightning-fill::before { content: "\f2a9"; } +.bi-cloud-lightning-rain-fill::before { content: "\f2aa"; } +.bi-cloud-lightning-rain::before { content: "\f2ab"; } +.bi-cloud-lightning::before { content: "\f2ac"; } +.bi-cloud-minus-fill::before { content: "\f2ad"; } +.bi-cloud-minus::before { content: "\f2ae"; } +.bi-cloud-moon-fill::before { content: "\f2af"; } +.bi-cloud-moon::before { content: "\f2b0"; } +.bi-cloud-plus-fill::before { content: "\f2b1"; } +.bi-cloud-plus::before { content: "\f2b2"; } +.bi-cloud-rain-fill::before { content: "\f2b3"; } +.bi-cloud-rain-heavy-fill::before { content: "\f2b4"; } +.bi-cloud-rain-heavy::before { content: "\f2b5"; } +.bi-cloud-rain::before { content: "\f2b6"; } +.bi-cloud-slash-fill::before { content: "\f2b7"; } +.bi-cloud-slash::before { content: "\f2b8"; } +.bi-cloud-sleet-fill::before { content: "\f2b9"; } +.bi-cloud-sleet::before { content: "\f2ba"; } +.bi-cloud-snow-fill::before { content: "\f2bb"; } +.bi-cloud-snow::before { content: "\f2bc"; } +.bi-cloud-sun-fill::before { content: "\f2bd"; } +.bi-cloud-sun::before { content: "\f2be"; } +.bi-cloud-upload-fill::before { content: "\f2bf"; } +.bi-cloud-upload::before { content: "\f2c0"; } +.bi-cloud::before { content: "\f2c1"; } +.bi-clouds-fill::before { content: "\f2c2"; } +.bi-clouds::before { content: "\f2c3"; } +.bi-cloudy-fill::before { content: "\f2c4"; } +.bi-cloudy::before { content: "\f2c5"; } +.bi-code-slash::before { content: "\f2c6"; } +.bi-code-square::before { content: "\f2c7"; } +.bi-code::before { content: "\f2c8"; } +.bi-collection-fill::before { content: "\f2c9"; } +.bi-collection-play-fill::before { content: "\f2ca"; } +.bi-collection-play::before { content: "\f2cb"; } +.bi-collection::before { content: "\f2cc"; } +.bi-columns-gap::before { content: "\f2cd"; } +.bi-columns::before { content: "\f2ce"; } +.bi-command::before { content: "\f2cf"; } +.bi-compass-fill::before { content: "\f2d0"; } +.bi-compass::before { content: "\f2d1"; } +.bi-cone-striped::before { content: "\f2d2"; } +.bi-cone::before { content: "\f2d3"; } +.bi-controller::before { content: "\f2d4"; } +.bi-cpu-fill::before { content: "\f2d5"; } +.bi-cpu::before { content: "\f2d6"; } +.bi-credit-card-2-back-fill::before { content: "\f2d7"; } +.bi-credit-card-2-back::before { content: "\f2d8"; } +.bi-credit-card-2-front-fill::before { content: "\f2d9"; } +.bi-credit-card-2-front::before { content: "\f2da"; } +.bi-credit-card-fill::before { content: "\f2db"; } +.bi-credit-card::before { content: "\f2dc"; } +.bi-crop::before { content: "\f2dd"; } +.bi-cup-fill::before { content: "\f2de"; } +.bi-cup-straw::before { content: "\f2df"; } +.bi-cup::before { content: "\f2e0"; } +.bi-cursor-fill::before { content: "\f2e1"; } +.bi-cursor-text::before { content: "\f2e2"; } +.bi-cursor::before { content: "\f2e3"; } +.bi-dash-circle-dotted::before { content: "\f2e4"; } +.bi-dash-circle-fill::before { content: "\f2e5"; } +.bi-dash-circle::before { content: "\f2e6"; } +.bi-dash-square-dotted::before { content: "\f2e7"; } +.bi-dash-square-fill::before { content: "\f2e8"; } +.bi-dash-square::before { content: "\f2e9"; } +.bi-dash::before { content: "\f2ea"; } +.bi-diagram-2-fill::before { content: "\f2eb"; } +.bi-diagram-2::before { content: "\f2ec"; } +.bi-diagram-3-fill::before { content: "\f2ed"; } +.bi-diagram-3::before { content: "\f2ee"; } +.bi-diamond-fill::before { content: "\f2ef"; } +.bi-diamond-half::before { content: "\f2f0"; } +.bi-diamond::before { content: "\f2f1"; } +.bi-dice-1-fill::before { content: "\f2f2"; } +.bi-dice-1::before { content: "\f2f3"; } +.bi-dice-2-fill::before { content: "\f2f4"; } +.bi-dice-2::before { content: "\f2f5"; } +.bi-dice-3-fill::before { content: "\f2f6"; } +.bi-dice-3::before { content: "\f2f7"; } +.bi-dice-4-fill::before { content: "\f2f8"; } +.bi-dice-4::before { content: "\f2f9"; } +.bi-dice-5-fill::before { content: "\f2fa"; } +.bi-dice-5::before { content: "\f2fb"; } +.bi-dice-6-fill::before { content: "\f2fc"; } +.bi-dice-6::before { content: "\f2fd"; } +.bi-disc-fill::before { content: "\f2fe"; } +.bi-disc::before { content: "\f2ff"; } +.bi-discord::before { content: "\f300"; } +.bi-display-fill::before { content: "\f301"; } +.bi-display::before { content: "\f302"; } +.bi-distribute-horizontal::before { content: "\f303"; } +.bi-distribute-vertical::before { content: "\f304"; } +.bi-door-closed-fill::before { content: "\f305"; } +.bi-door-closed::before { content: "\f306"; } +.bi-door-open-fill::before { content: "\f307"; } +.bi-door-open::before { content: "\f308"; } +.bi-dot::before { content: "\f309"; } +.bi-download::before { content: "\f30a"; } +.bi-droplet-fill::before { content: "\f30b"; } +.bi-droplet-half::before { content: "\f30c"; } +.bi-droplet::before { content: "\f30d"; } +.bi-earbuds::before { content: "\f30e"; } +.bi-easel-fill::before { content: "\f30f"; } +.bi-easel::before { content: "\f310"; } +.bi-egg-fill::before { content: "\f311"; } +.bi-egg-fried::before { content: "\f312"; } +.bi-egg::before { content: "\f313"; } +.bi-eject-fill::before { content: "\f314"; } +.bi-eject::before { content: "\f315"; } +.bi-emoji-angry-fill::before { content: "\f316"; } +.bi-emoji-angry::before { content: "\f317"; } +.bi-emoji-dizzy-fill::before { content: "\f318"; } +.bi-emoji-dizzy::before { content: "\f319"; } +.bi-emoji-expressionless-fill::before { content: "\f31a"; } +.bi-emoji-expressionless::before { content: "\f31b"; } +.bi-emoji-frown-fill::before { content: "\f31c"; } +.bi-emoji-frown::before { content: "\f31d"; } +.bi-emoji-heart-eyes-fill::before { content: "\f31e"; } +.bi-emoji-heart-eyes::before { content: "\f31f"; } +.bi-emoji-laughing-fill::before { content: "\f320"; } +.bi-emoji-laughing::before { content: "\f321"; } +.bi-emoji-neutral-fill::before { content: "\f322"; } +.bi-emoji-neutral::before { content: "\f323"; } +.bi-emoji-smile-fill::before { content: "\f324"; } +.bi-emoji-smile-upside-down-fill::before { content: "\f325"; } +.bi-emoji-smile-upside-down::before { content: "\f326"; } +.bi-emoji-smile::before { content: "\f327"; } +.bi-emoji-sunglasses-fill::before { content: "\f328"; } +.bi-emoji-sunglasses::before { content: "\f329"; } +.bi-emoji-wink-fill::before { content: "\f32a"; } +.bi-emoji-wink::before { content: "\f32b"; } +.bi-envelope-fill::before { content: "\f32c"; } +.bi-envelope-open-fill::before { content: "\f32d"; } +.bi-envelope-open::before { content: "\f32e"; } +.bi-envelope::before { content: "\f32f"; } +.bi-eraser-fill::before { content: "\f330"; } +.bi-eraser::before { content: "\f331"; } +.bi-exclamation-circle-fill::before { content: "\f332"; } +.bi-exclamation-circle::before { content: "\f333"; } +.bi-exclamation-diamond-fill::before { content: "\f334"; } +.bi-exclamation-diamond::before { content: "\f335"; } +.bi-exclamation-octagon-fill::before { content: "\f336"; } +.bi-exclamation-octagon::before { content: "\f337"; } +.bi-exclamation-square-fill::before { content: "\f338"; } +.bi-exclamation-square::before { content: "\f339"; } +.bi-exclamation-triangle-fill::before { content: "\f33a"; } +.bi-exclamation-triangle::before { content: "\f33b"; } +.bi-exclamation::before { content: "\f33c"; } +.bi-exclude::before { content: "\f33d"; } +.bi-eye-fill::before { content: "\f33e"; } +.bi-eye-slash-fill::before { content: "\f33f"; } +.bi-eye-slash::before { content: "\f340"; } +.bi-eye::before { content: "\f341"; } +.bi-eyedropper::before { content: "\f342"; } +.bi-eyeglasses::before { content: "\f343"; } +.bi-facebook::before { content: "\f344"; } +.bi-file-arrow-down-fill::before { content: "\f345"; } +.bi-file-arrow-down::before { content: "\f346"; } +.bi-file-arrow-up-fill::before { content: "\f347"; } +.bi-file-arrow-up::before { content: "\f348"; } +.bi-file-bar-graph-fill::before { content: "\f349"; } +.bi-file-bar-graph::before { content: "\f34a"; } +.bi-file-binary-fill::before { content: "\f34b"; } +.bi-file-binary::before { content: "\f34c"; } +.bi-file-break-fill::before { content: "\f34d"; } +.bi-file-break::before { content: "\f34e"; } +.bi-file-check-fill::before { content: "\f34f"; } +.bi-file-check::before { content: "\f350"; } +.bi-file-code-fill::before { content: "\f351"; } +.bi-file-code::before { content: "\f352"; } +.bi-file-diff-fill::before { content: "\f353"; } +.bi-file-diff::before { content: "\f354"; } +.bi-file-earmark-arrow-down-fill::before { content: "\f355"; } +.bi-file-earmark-arrow-down::before { content: "\f356"; } +.bi-file-earmark-arrow-up-fill::before { content: "\f357"; } +.bi-file-earmark-arrow-up::before { content: "\f358"; } +.bi-file-earmark-bar-graph-fill::before { content: "\f359"; } +.bi-file-earmark-bar-graph::before { content: "\f35a"; } +.bi-file-earmark-binary-fill::before { content: "\f35b"; } +.bi-file-earmark-binary::before { content: "\f35c"; } +.bi-file-earmark-break-fill::before { content: "\f35d"; } +.bi-file-earmark-break::before { content: "\f35e"; } +.bi-file-earmark-check-fill::before { content: "\f35f"; } +.bi-file-earmark-check::before { content: "\f360"; } +.bi-file-earmark-code-fill::before { content: "\f361"; } +.bi-file-earmark-code::before { content: "\f362"; } +.bi-file-earmark-diff-fill::before { content: "\f363"; } +.bi-file-earmark-diff::before { content: "\f364"; } +.bi-file-earmark-easel-fill::before { content: "\f365"; } +.bi-file-earmark-easel::before { content: "\f366"; } +.bi-file-earmark-excel-fill::before { content: "\f367"; } +.bi-file-earmark-excel::before { content: "\f368"; } +.bi-file-earmark-fill::before { content: "\f369"; } +.bi-file-earmark-font-fill::before { content: "\f36a"; } +.bi-file-earmark-font::before { content: "\f36b"; } +.bi-file-earmark-image-fill::before { content: "\f36c"; } +.bi-file-earmark-image::before { content: "\f36d"; } +.bi-file-earmark-lock-fill::before { content: "\f36e"; } +.bi-file-earmark-lock::before { content: "\f36f"; } +.bi-file-earmark-lock2-fill::before { content: "\f370"; } +.bi-file-earmark-lock2::before { content: "\f371"; } +.bi-file-earmark-medical-fill::before { content: "\f372"; } +.bi-file-earmark-medical::before { content: "\f373"; } +.bi-file-earmark-minus-fill::before { content: "\f374"; } +.bi-file-earmark-minus::before { content: "\f375"; } +.bi-file-earmark-music-fill::before { content: "\f376"; } +.bi-file-earmark-music::before { content: "\f377"; } +.bi-file-earmark-person-fill::before { content: "\f378"; } +.bi-file-earmark-person::before { content: "\f379"; } +.bi-file-earmark-play-fill::before { content: "\f37a"; } +.bi-file-earmark-play::before { content: "\f37b"; } +.bi-file-earmark-plus-fill::before { content: "\f37c"; } +.bi-file-earmark-plus::before { content: "\f37d"; } +.bi-file-earmark-post-fill::before { content: "\f37e"; } +.bi-file-earmark-post::before { content: "\f37f"; } +.bi-file-earmark-ppt-fill::before { content: "\f380"; } +.bi-file-earmark-ppt::before { content: "\f381"; } +.bi-file-earmark-richtext-fill::before { content: "\f382"; } +.bi-file-earmark-richtext::before { content: "\f383"; } +.bi-file-earmark-ruled-fill::before { content: "\f384"; } +.bi-file-earmark-ruled::before { content: "\f385"; } +.bi-file-earmark-slides-fill::before { content: "\f386"; } +.bi-file-earmark-slides::before { content: "\f387"; } +.bi-file-earmark-spreadsheet-fill::before { content: "\f388"; } +.bi-file-earmark-spreadsheet::before { content: "\f389"; } +.bi-file-earmark-text-fill::before { content: "\f38a"; } +.bi-file-earmark-text::before { content: "\f38b"; } +.bi-file-earmark-word-fill::before { content: "\f38c"; } +.bi-file-earmark-word::before { content: "\f38d"; } +.bi-file-earmark-x-fill::before { content: "\f38e"; } +.bi-file-earmark-x::before { content: "\f38f"; } +.bi-file-earmark-zip-fill::before { content: "\f390"; } +.bi-file-earmark-zip::before { content: "\f391"; } +.bi-file-earmark::before { content: "\f392"; } +.bi-file-easel-fill::before { content: "\f393"; } +.bi-file-easel::before { content: "\f394"; } +.bi-file-excel-fill::before { content: "\f395"; } +.bi-file-excel::before { content: "\f396"; } +.bi-file-fill::before { content: "\f397"; } +.bi-file-font-fill::before { content: "\f398"; } +.bi-file-font::before { content: "\f399"; } +.bi-file-image-fill::before { content: "\f39a"; } +.bi-file-image::before { content: "\f39b"; } +.bi-file-lock-fill::before { content: "\f39c"; } +.bi-file-lock::before { content: "\f39d"; } +.bi-file-lock2-fill::before { content: "\f39e"; } +.bi-file-lock2::before { content: "\f39f"; } +.bi-file-medical-fill::before { content: "\f3a0"; } +.bi-file-medical::before { content: "\f3a1"; } +.bi-file-minus-fill::before { content: "\f3a2"; } +.bi-file-minus::before { content: "\f3a3"; } +.bi-file-music-fill::before { content: "\f3a4"; } +.bi-file-music::before { content: "\f3a5"; } +.bi-file-person-fill::before { content: "\f3a6"; } +.bi-file-person::before { content: "\f3a7"; } +.bi-file-play-fill::before { content: "\f3a8"; } +.bi-file-play::before { content: "\f3a9"; } +.bi-file-plus-fill::before { content: "\f3aa"; } +.bi-file-plus::before { content: "\f3ab"; } +.bi-file-post-fill::before { content: "\f3ac"; } +.bi-file-post::before { content: "\f3ad"; } +.bi-file-ppt-fill::before { content: "\f3ae"; } +.bi-file-ppt::before { content: "\f3af"; } +.bi-file-richtext-fill::before { content: "\f3b0"; } +.bi-file-richtext::before { content: "\f3b1"; } +.bi-file-ruled-fill::before { content: "\f3b2"; } +.bi-file-ruled::before { content: "\f3b3"; } +.bi-file-slides-fill::before { content: "\f3b4"; } +.bi-file-slides::before { content: "\f3b5"; } +.bi-file-spreadsheet-fill::before { content: "\f3b6"; } +.bi-file-spreadsheet::before { content: "\f3b7"; } +.bi-file-text-fill::before { content: "\f3b8"; } +.bi-file-text::before { content: "\f3b9"; } +.bi-file-word-fill::before { content: "\f3ba"; } +.bi-file-word::before { content: "\f3bb"; } +.bi-file-x-fill::before { content: "\f3bc"; } +.bi-file-x::before { content: "\f3bd"; } +.bi-file-zip-fill::before { content: "\f3be"; } +.bi-file-zip::before { content: "\f3bf"; } +.bi-file::before { content: "\f3c0"; } +.bi-files-alt::before { content: "\f3c1"; } +.bi-files::before { content: "\f3c2"; } +.bi-film::before { content: "\f3c3"; } +.bi-filter-circle-fill::before { content: "\f3c4"; } +.bi-filter-circle::before { content: "\f3c5"; } +.bi-filter-left::before { content: "\f3c6"; } +.bi-filter-right::before { content: "\f3c7"; } +.bi-filter-square-fill::before { content: "\f3c8"; } +.bi-filter-square::before { content: "\f3c9"; } +.bi-filter::before { content: "\f3ca"; } +.bi-flag-fill::before { content: "\f3cb"; } +.bi-flag::before { content: "\f3cc"; } +.bi-flower1::before { content: "\f3cd"; } +.bi-flower2::before { content: "\f3ce"; } +.bi-flower3::before { content: "\f3cf"; } +.bi-folder-check::before { content: "\f3d0"; } +.bi-folder-fill::before { content: "\f3d1"; } +.bi-folder-minus::before { content: "\f3d2"; } +.bi-folder-plus::before { content: "\f3d3"; } +.bi-folder-symlink-fill::before { content: "\f3d4"; } +.bi-folder-symlink::before { content: "\f3d5"; } +.bi-folder-x::before { content: "\f3d6"; } +.bi-folder::before { content: "\f3d7"; } +.bi-folder2-open::before { content: "\f3d8"; } +.bi-folder2::before { content: "\f3d9"; } +.bi-fonts::before { content: "\f3da"; } +.bi-forward-fill::before { content: "\f3db"; } +.bi-forward::before { content: "\f3dc"; } +.bi-front::before { content: "\f3dd"; } +.bi-fullscreen-exit::before { content: "\f3de"; } +.bi-fullscreen::before { content: "\f3df"; } +.bi-funnel-fill::before { content: "\f3e0"; } +.bi-funnel::before { content: "\f3e1"; } +.bi-gear-fill::before { content: "\f3e2"; } +.bi-gear-wide-connected::before { content: "\f3e3"; } +.bi-gear-wide::before { content: "\f3e4"; } +.bi-gear::before { content: "\f3e5"; } +.bi-gem::before { content: "\f3e6"; } +.bi-geo-alt-fill::before { content: "\f3e7"; } +.bi-geo-alt::before { content: "\f3e8"; } +.bi-geo-fill::before { content: "\f3e9"; } +.bi-geo::before { content: "\f3ea"; } +.bi-gift-fill::before { content: "\f3eb"; } +.bi-gift::before { content: "\f3ec"; } +.bi-github::before { content: "\f3ed"; } +.bi-globe::before { content: "\f3ee"; } +.bi-globe2::before { content: "\f3ef"; } +.bi-google::before { content: "\f3f0"; } +.bi-graph-down::before { content: "\f3f1"; } +.bi-graph-up::before { content: "\f3f2"; } +.bi-grid-1x2-fill::before { content: "\f3f3"; } +.bi-grid-1x2::before { content: "\f3f4"; } +.bi-grid-3x2-gap-fill::before { content: "\f3f5"; } +.bi-grid-3x2-gap::before { content: "\f3f6"; } +.bi-grid-3x2::before { content: "\f3f7"; } +.bi-grid-3x3-gap-fill::before { content: "\f3f8"; } +.bi-grid-3x3-gap::before { content: "\f3f9"; } +.bi-grid-3x3::before { content: "\f3fa"; } +.bi-grid-fill::before { content: "\f3fb"; } +.bi-grid::before { content: "\f3fc"; } +.bi-grip-horizontal::before { content: "\f3fd"; } +.bi-grip-vertical::before { content: "\f3fe"; } +.bi-hammer::before { content: "\f3ff"; } +.bi-hand-index-fill::before { content: "\f400"; } +.bi-hand-index-thumb-fill::before { content: "\f401"; } +.bi-hand-index-thumb::before { content: "\f402"; } +.bi-hand-index::before { content: "\f403"; } +.bi-hand-thumbs-down-fill::before { content: "\f404"; } +.bi-hand-thumbs-down::before { content: "\f405"; } +.bi-hand-thumbs-up-fill::before { content: "\f406"; } +.bi-hand-thumbs-up::before { content: "\f407"; } +.bi-handbag-fill::before { content: "\f408"; } +.bi-handbag::before { content: "\f409"; } +.bi-hash::before { content: "\f40a"; } +.bi-hdd-fill::before { content: "\f40b"; } +.bi-hdd-network-fill::before { content: "\f40c"; } +.bi-hdd-network::before { content: "\f40d"; } +.bi-hdd-rack-fill::before { content: "\f40e"; } +.bi-hdd-rack::before { content: "\f40f"; } +.bi-hdd-stack-fill::before { content: "\f410"; } +.bi-hdd-stack::before { content: "\f411"; } +.bi-hdd::before { content: "\f412"; } +.bi-headphones::before { content: "\f413"; } +.bi-headset::before { content: "\f414"; } +.bi-heart-fill::before { content: "\f415"; } +.bi-heart-half::before { content: "\f416"; } +.bi-heart::before { content: "\f417"; } +.bi-heptagon-fill::before { content: "\f418"; } +.bi-heptagon-half::before { content: "\f419"; } +.bi-heptagon::before { content: "\f41a"; } +.bi-hexagon-fill::before { content: "\f41b"; } +.bi-hexagon-half::before { content: "\f41c"; } +.bi-hexagon::before { content: "\f41d"; } +.bi-hourglass-bottom::before { content: "\f41e"; } +.bi-hourglass-split::before { content: "\f41f"; } +.bi-hourglass-top::before { content: "\f420"; } +.bi-hourglass::before { content: "\f421"; } +.bi-house-door-fill::before { content: "\f422"; } +.bi-house-door::before { content: "\f423"; } +.bi-house-fill::before { content: "\f424"; } +.bi-house::before { content: "\f425"; } +.bi-hr::before { content: "\f426"; } +.bi-hurricane::before { content: "\f427"; } +.bi-image-alt::before { content: "\f428"; } +.bi-image-fill::before { content: "\f429"; } +.bi-image::before { content: "\f42a"; } +.bi-images::before { content: "\f42b"; } +.bi-inbox-fill::before { content: "\f42c"; } +.bi-inbox::before { content: "\f42d"; } +.bi-inboxes-fill::before { content: "\f42e"; } +.bi-inboxes::before { content: "\f42f"; } +.bi-info-circle-fill::before { content: "\f430"; } +.bi-info-circle::before { content: "\f431"; } +.bi-info-square-fill::before { content: "\f432"; } +.bi-info-square::before { content: "\f433"; } +.bi-info::before { content: "\f434"; } +.bi-input-cursor-text::before { content: "\f435"; } +.bi-input-cursor::before { content: "\f436"; } +.bi-instagram::before { content: "\f437"; } +.bi-intersect::before { content: "\f438"; } +.bi-journal-album::before { content: "\f439"; } +.bi-journal-arrow-down::before { content: "\f43a"; } +.bi-journal-arrow-up::before { content: "\f43b"; } +.bi-journal-bookmark-fill::before { content: "\f43c"; } +.bi-journal-bookmark::before { content: "\f43d"; } +.bi-journal-check::before { content: "\f43e"; } +.bi-journal-code::before { content: "\f43f"; } +.bi-journal-medical::before { content: "\f440"; } +.bi-journal-minus::before { content: "\f441"; } +.bi-journal-plus::before { content: "\f442"; } +.bi-journal-richtext::before { content: "\f443"; } +.bi-journal-text::before { content: "\f444"; } +.bi-journal-x::before { content: "\f445"; } +.bi-journal::before { content: "\f446"; } +.bi-journals::before { content: "\f447"; } +.bi-joystick::before { content: "\f448"; } +.bi-justify-left::before { content: "\f449"; } +.bi-justify-right::before { content: "\f44a"; } +.bi-justify::before { content: "\f44b"; } +.bi-kanban-fill::before { content: "\f44c"; } +.bi-kanban::before { content: "\f44d"; } +.bi-key-fill::before { content: "\f44e"; } +.bi-key::before { content: "\f44f"; } +.bi-keyboard-fill::before { content: "\f450"; } +.bi-keyboard::before { content: "\f451"; } +.bi-ladder::before { content: "\f452"; } +.bi-lamp-fill::before { content: "\f453"; } +.bi-lamp::before { content: "\f454"; } +.bi-laptop-fill::before { content: "\f455"; } +.bi-laptop::before { content: "\f456"; } +.bi-layer-backward::before { content: "\f457"; } +.bi-layer-forward::before { content: "\f458"; } +.bi-layers-fill::before { content: "\f459"; } +.bi-layers-half::before { content: "\f45a"; } +.bi-layers::before { content: "\f45b"; } +.bi-layout-sidebar-inset-reverse::before { content: "\f45c"; } +.bi-layout-sidebar-inset::before { content: "\f45d"; } +.bi-layout-sidebar-reverse::before { content: "\f45e"; } +.bi-layout-sidebar::before { content: "\f45f"; } +.bi-layout-split::before { content: "\f460"; } +.bi-layout-text-sidebar-reverse::before { content: "\f461"; } +.bi-layout-text-sidebar::before { content: "\f462"; } +.bi-layout-text-window-reverse::before { content: "\f463"; } +.bi-layout-text-window::before { content: "\f464"; } +.bi-layout-three-columns::before { content: "\f465"; } +.bi-layout-wtf::before { content: "\f466"; } +.bi-life-preserver::before { content: "\f467"; } +.bi-lightbulb-fill::before { content: "\f468"; } +.bi-lightbulb-off-fill::before { content: "\f469"; } +.bi-lightbulb-off::before { content: "\f46a"; } +.bi-lightbulb::before { content: "\f46b"; } +.bi-lightning-charge-fill::before { content: "\f46c"; } +.bi-lightning-charge::before { content: "\f46d"; } +.bi-lightning-fill::before { content: "\f46e"; } +.bi-lightning::before { content: "\f46f"; } +.bi-link-45deg::before { content: "\f470"; } +.bi-link::before { content: "\f471"; } +.bi-linkedin::before { content: "\f472"; } +.bi-list-check::before { content: "\f473"; } +.bi-list-nested::before { content: "\f474"; } +.bi-list-ol::before { content: "\f475"; } +.bi-list-stars::before { content: "\f476"; } +.bi-list-task::before { content: "\f477"; } +.bi-list-ul::before { content: "\f478"; } +.bi-list::before { content: "\f479"; } +.bi-lock-fill::before { content: "\f47a"; } +.bi-lock::before { content: "\f47b"; } +.bi-mailbox::before { content: "\f47c"; } +.bi-mailbox2::before { content: "\f47d"; } +.bi-map-fill::before { content: "\f47e"; } +.bi-map::before { content: "\f47f"; } +.bi-markdown-fill::before { content: "\f480"; } +.bi-markdown::before { content: "\f481"; } +.bi-mask::before { content: "\f482"; } +.bi-megaphone-fill::before { content: "\f483"; } +.bi-megaphone::before { content: "\f484"; } +.bi-menu-app-fill::before { content: "\f485"; } +.bi-menu-app::before { content: "\f486"; } +.bi-menu-button-fill::before { content: "\f487"; } +.bi-menu-button-wide-fill::before { content: "\f488"; } +.bi-menu-button-wide::before { content: "\f489"; } +.bi-menu-button::before { content: "\f48a"; } +.bi-menu-down::before { content: "\f48b"; } +.bi-menu-up::before { content: "\f48c"; } +.bi-mic-fill::before { content: "\f48d"; } +.bi-mic-mute-fill::before { content: "\f48e"; } +.bi-mic-mute::before { content: "\f48f"; } +.bi-mic::before { content: "\f490"; } +.bi-minecart-loaded::before { content: "\f491"; } +.bi-minecart::before { content: "\f492"; } +.bi-moisture::before { content: "\f493"; } +.bi-moon-fill::before { content: "\f494"; } +.bi-moon-stars-fill::before { content: "\f495"; } +.bi-moon-stars::before { content: "\f496"; } +.bi-moon::before { content: "\f497"; } +.bi-mouse-fill::before { content: "\f498"; } +.bi-mouse::before { content: "\f499"; } +.bi-mouse2-fill::before { content: "\f49a"; } +.bi-mouse2::before { content: "\f49b"; } +.bi-mouse3-fill::before { content: "\f49c"; } +.bi-mouse3::before { content: "\f49d"; } +.bi-music-note-beamed::before { content: "\f49e"; } +.bi-music-note-list::before { content: "\f49f"; } +.bi-music-note::before { content: "\f4a0"; } +.bi-music-player-fill::before { content: "\f4a1"; } +.bi-music-player::before { content: "\f4a2"; } +.bi-newspaper::before { content: "\f4a3"; } +.bi-node-minus-fill::before { content: "\f4a4"; } +.bi-node-minus::before { content: "\f4a5"; } +.bi-node-plus-fill::before { content: "\f4a6"; } +.bi-node-plus::before { content: "\f4a7"; } +.bi-nut-fill::before { content: "\f4a8"; } +.bi-nut::before { content: "\f4a9"; } +.bi-octagon-fill::before { content: "\f4aa"; } +.bi-octagon-half::before { content: "\f4ab"; } +.bi-octagon::before { content: "\f4ac"; } +.bi-option::before { content: "\f4ad"; } +.bi-outlet::before { content: "\f4ae"; } +.bi-paint-bucket::before { content: "\f4af"; } +.bi-palette-fill::before { content: "\f4b0"; } +.bi-palette::before { content: "\f4b1"; } +.bi-palette2::before { content: "\f4b2"; } +.bi-paperclip::before { content: "\f4b3"; } +.bi-paragraph::before { content: "\f4b4"; } +.bi-patch-check-fill::before { content: "\f4b5"; } +.bi-patch-check::before { content: "\f4b6"; } +.bi-patch-exclamation-fill::before { content: "\f4b7"; } +.bi-patch-exclamation::before { content: "\f4b8"; } +.bi-patch-minus-fill::before { content: "\f4b9"; } +.bi-patch-minus::before { content: "\f4ba"; } +.bi-patch-plus-fill::before { content: "\f4bb"; } +.bi-patch-plus::before { content: "\f4bc"; } +.bi-patch-question-fill::before { content: "\f4bd"; } +.bi-patch-question::before { content: "\f4be"; } +.bi-pause-btn-fill::before { content: "\f4bf"; } +.bi-pause-btn::before { content: "\f4c0"; } +.bi-pause-circle-fill::before { content: "\f4c1"; } +.bi-pause-circle::before { content: "\f4c2"; } +.bi-pause-fill::before { content: "\f4c3"; } +.bi-pause::before { content: "\f4c4"; } +.bi-peace-fill::before { content: "\f4c5"; } +.bi-peace::before { content: "\f4c6"; } +.bi-pen-fill::before { content: "\f4c7"; } +.bi-pen::before { content: "\f4c8"; } +.bi-pencil-fill::before { content: "\f4c9"; } +.bi-pencil-square::before { content: "\f4ca"; } +.bi-pencil::before { content: "\f4cb"; } +.bi-pentagon-fill::before { content: "\f4cc"; } +.bi-pentagon-half::before { content: "\f4cd"; } +.bi-pentagon::before { content: "\f4ce"; } +.bi-people-fill::before { content: "\f4cf"; } +.bi-people::before { content: "\f4d0"; } +.bi-percent::before { content: "\f4d1"; } +.bi-person-badge-fill::before { content: "\f4d2"; } +.bi-person-badge::before { content: "\f4d3"; } +.bi-person-bounding-box::before { content: "\f4d4"; } +.bi-person-check-fill::before { content: "\f4d5"; } +.bi-person-check::before { content: "\f4d6"; } +.bi-person-circle::before { content: "\f4d7"; } +.bi-person-dash-fill::before { content: "\f4d8"; } +.bi-person-dash::before { content: "\f4d9"; } +.bi-person-fill::before { content: "\f4da"; } +.bi-person-lines-fill::before { content: "\f4db"; } +.bi-person-plus-fill::before { content: "\f4dc"; } +.bi-person-plus::before { content: "\f4dd"; } +.bi-person-square::before { content: "\f4de"; } +.bi-person-x-fill::before { content: "\f4df"; } +.bi-person-x::before { content: "\f4e0"; } +.bi-person::before { content: "\f4e1"; } +.bi-phone-fill::before { content: "\f4e2"; } +.bi-phone-landscape-fill::before { content: "\f4e3"; } +.bi-phone-landscape::before { content: "\f4e4"; } +.bi-phone-vibrate-fill::before { content: "\f4e5"; } +.bi-phone-vibrate::before { content: "\f4e6"; } +.bi-phone::before { content: "\f4e7"; } +.bi-pie-chart-fill::before { content: "\f4e8"; } +.bi-pie-chart::before { content: "\f4e9"; } +.bi-pin-angle-fill::before { content: "\f4ea"; } +.bi-pin-angle::before { content: "\f4eb"; } +.bi-pin-fill::before { content: "\f4ec"; } +.bi-pin::before { content: "\f4ed"; } +.bi-pip-fill::before { content: "\f4ee"; } +.bi-pip::before { content: "\f4ef"; } +.bi-play-btn-fill::before { content: "\f4f0"; } +.bi-play-btn::before { content: "\f4f1"; } +.bi-play-circle-fill::before { content: "\f4f2"; } +.bi-play-circle::before { content: "\f4f3"; } +.bi-play-fill::before { content: "\f4f4"; } +.bi-play::before { content: "\f4f5"; } +.bi-plug-fill::before { content: "\f4f6"; } +.bi-plug::before { content: "\f4f7"; } +.bi-plus-circle-dotted::before { content: "\f4f8"; } +.bi-plus-circle-fill::before { content: "\f4f9"; } +.bi-plus-circle::before { content: "\f4fa"; } +.bi-plus-square-dotted::before { content: "\f4fb"; } +.bi-plus-square-fill::before { content: "\f4fc"; } +.bi-plus-square::before { content: "\f4fd"; } +.bi-plus::before { content: "\f4fe"; } +.bi-power::before { content: "\f4ff"; } +.bi-printer-fill::before { content: "\f500"; } +.bi-printer::before { content: "\f501"; } +.bi-puzzle-fill::before { content: "\f502"; } +.bi-puzzle::before { content: "\f503"; } +.bi-question-circle-fill::before { content: "\f504"; } +.bi-question-circle::before { content: "\f505"; } +.bi-question-diamond-fill::before { content: "\f506"; } +.bi-question-diamond::before { content: "\f507"; } +.bi-question-octagon-fill::before { content: "\f508"; } +.bi-question-octagon::before { content: "\f509"; } +.bi-question-square-fill::before { content: "\f50a"; } +.bi-question-square::before { content: "\f50b"; } +.bi-question::before { content: "\f50c"; } +.bi-rainbow::before { content: "\f50d"; } +.bi-receipt-cutoff::before { content: "\f50e"; } +.bi-receipt::before { content: "\f50f"; } +.bi-reception-0::before { content: "\f510"; } +.bi-reception-1::before { content: "\f511"; } +.bi-reception-2::before { content: "\f512"; } +.bi-reception-3::before { content: "\f513"; } +.bi-reception-4::before { content: "\f514"; } +.bi-record-btn-fill::before { content: "\f515"; } +.bi-record-btn::before { content: "\f516"; } +.bi-record-circle-fill::before { content: "\f517"; } +.bi-record-circle::before { content: "\f518"; } +.bi-record-fill::before { content: "\f519"; } +.bi-record::before { content: "\f51a"; } +.bi-record2-fill::before { content: "\f51b"; } +.bi-record2::before { content: "\f51c"; } +.bi-reply-all-fill::before { content: "\f51d"; } +.bi-reply-all::before { content: "\f51e"; } +.bi-reply-fill::before { content: "\f51f"; } +.bi-reply::before { content: "\f520"; } +.bi-rss-fill::before { content: "\f521"; } +.bi-rss::before { content: "\f522"; } +.bi-rulers::before { content: "\f523"; } +.bi-save-fill::before { content: "\f524"; } +.bi-save::before { content: "\f525"; } +.bi-save2-fill::before { content: "\f526"; } +.bi-save2::before { content: "\f527"; } +.bi-scissors::before { content: "\f528"; } +.bi-screwdriver::before { content: "\f529"; } +.bi-search::before { content: "\f52a"; } +.bi-segmented-nav::before { content: "\f52b"; } +.bi-server::before { content: "\f52c"; } +.bi-share-fill::before { content: "\f52d"; } +.bi-share::before { content: "\f52e"; } +.bi-shield-check::before { content: "\f52f"; } +.bi-shield-exclamation::before { content: "\f530"; } +.bi-shield-fill-check::before { content: "\f531"; } +.bi-shield-fill-exclamation::before { content: "\f532"; } +.bi-shield-fill-minus::before { content: "\f533"; } +.bi-shield-fill-plus::before { content: "\f534"; } +.bi-shield-fill-x::before { content: "\f535"; } +.bi-shield-fill::before { content: "\f536"; } +.bi-shield-lock-fill::before { content: "\f537"; } +.bi-shield-lock::before { content: "\f538"; } +.bi-shield-minus::before { content: "\f539"; } +.bi-shield-plus::before { content: "\f53a"; } +.bi-shield-shaded::before { content: "\f53b"; } +.bi-shield-slash-fill::before { content: "\f53c"; } +.bi-shield-slash::before { content: "\f53d"; } +.bi-shield-x::before { content: "\f53e"; } +.bi-shield::before { content: "\f53f"; } +.bi-shift-fill::before { content: "\f540"; } +.bi-shift::before { content: "\f541"; } +.bi-shop-window::before { content: "\f542"; } +.bi-shop::before { content: "\f543"; } +.bi-shuffle::before { content: "\f544"; } +.bi-signpost-2-fill::before { content: "\f545"; } +.bi-signpost-2::before { content: "\f546"; } +.bi-signpost-fill::before { content: "\f547"; } +.bi-signpost-split-fill::before { content: "\f548"; } +.bi-signpost-split::before { content: "\f549"; } +.bi-signpost::before { content: "\f54a"; } +.bi-sim-fill::before { content: "\f54b"; } +.bi-sim::before { content: "\f54c"; } +.bi-skip-backward-btn-fill::before { content: "\f54d"; } +.bi-skip-backward-btn::before { content: "\f54e"; } +.bi-skip-backward-circle-fill::before { content: "\f54f"; } +.bi-skip-backward-circle::before { content: "\f550"; } +.bi-skip-backward-fill::before { content: "\f551"; } +.bi-skip-backward::before { content: "\f552"; } +.bi-skip-end-btn-fill::before { content: "\f553"; } +.bi-skip-end-btn::before { content: "\f554"; } +.bi-skip-end-circle-fill::before { content: "\f555"; } +.bi-skip-end-circle::before { content: "\f556"; } +.bi-skip-end-fill::before { content: "\f557"; } +.bi-skip-end::before { content: "\f558"; } +.bi-skip-forward-btn-fill::before { content: "\f559"; } +.bi-skip-forward-btn::before { content: "\f55a"; } +.bi-skip-forward-circle-fill::before { content: "\f55b"; } +.bi-skip-forward-circle::before { content: "\f55c"; } +.bi-skip-forward-fill::before { content: "\f55d"; } +.bi-skip-forward::before { content: "\f55e"; } +.bi-skip-start-btn-fill::before { content: "\f55f"; } +.bi-skip-start-btn::before { content: "\f560"; } +.bi-skip-start-circle-fill::before { content: "\f561"; } +.bi-skip-start-circle::before { content: "\f562"; } +.bi-skip-start-fill::before { content: "\f563"; } +.bi-skip-start::before { content: "\f564"; } +.bi-slack::before { content: "\f565"; } +.bi-slash-circle-fill::before { content: "\f566"; } +.bi-slash-circle::before { content: "\f567"; } +.bi-slash-square-fill::before { content: "\f568"; } +.bi-slash-square::before { content: "\f569"; } +.bi-slash::before { content: "\f56a"; } +.bi-sliders::before { content: "\f56b"; } +.bi-smartwatch::before { content: "\f56c"; } +.bi-snow::before { content: "\f56d"; } +.bi-snow2::before { content: "\f56e"; } +.bi-snow3::before { content: "\f56f"; } +.bi-sort-alpha-down-alt::before { content: "\f570"; } +.bi-sort-alpha-down::before { content: "\f571"; } +.bi-sort-alpha-up-alt::before { content: "\f572"; } +.bi-sort-alpha-up::before { content: "\f573"; } +.bi-sort-down-alt::before { content: "\f574"; } +.bi-sort-down::before { content: "\f575"; } +.bi-sort-numeric-down-alt::before { content: "\f576"; } +.bi-sort-numeric-down::before { content: "\f577"; } +.bi-sort-numeric-up-alt::before { content: "\f578"; } +.bi-sort-numeric-up::before { content: "\f579"; } +.bi-sort-up-alt::before { content: "\f57a"; } +.bi-sort-up::before { content: "\f57b"; } +.bi-soundwave::before { content: "\f57c"; } +.bi-speaker-fill::before { content: "\f57d"; } +.bi-speaker::before { content: "\f57e"; } +.bi-speedometer::before { content: "\f57f"; } +.bi-speedometer2::before { content: "\f580"; } +.bi-spellcheck::before { content: "\f581"; } +.bi-square-fill::before { content: "\f582"; } +.bi-square-half::before { content: "\f583"; } +.bi-square::before { content: "\f584"; } +.bi-stack::before { content: "\f585"; } +.bi-star-fill::before { content: "\f586"; } +.bi-star-half::before { content: "\f587"; } +.bi-star::before { content: "\f588"; } +.bi-stars::before { content: "\f589"; } +.bi-stickies-fill::before { content: "\f58a"; } +.bi-stickies::before { content: "\f58b"; } +.bi-sticky-fill::before { content: "\f58c"; } +.bi-sticky::before { content: "\f58d"; } +.bi-stop-btn-fill::before { content: "\f58e"; } +.bi-stop-btn::before { content: "\f58f"; } +.bi-stop-circle-fill::before { content: "\f590"; } +.bi-stop-circle::before { content: "\f591"; } +.bi-stop-fill::before { content: "\f592"; } +.bi-stop::before { content: "\f593"; } +.bi-stoplights-fill::before { content: "\f594"; } +.bi-stoplights::before { content: "\f595"; } +.bi-stopwatch-fill::before { content: "\f596"; } +.bi-stopwatch::before { content: "\f597"; } +.bi-subtract::before { content: "\f598"; } +.bi-suit-club-fill::before { content: "\f599"; } +.bi-suit-club::before { content: "\f59a"; } +.bi-suit-diamond-fill::before { content: "\f59b"; } +.bi-suit-diamond::before { content: "\f59c"; } +.bi-suit-heart-fill::before { content: "\f59d"; } +.bi-suit-heart::before { content: "\f59e"; } +.bi-suit-spade-fill::before { content: "\f59f"; } +.bi-suit-spade::before { content: "\f5a0"; } +.bi-sun-fill::before { content: "\f5a1"; } +.bi-sun::before { content: "\f5a2"; } +.bi-sunglasses::before { content: "\f5a3"; } +.bi-sunrise-fill::before { content: "\f5a4"; } +.bi-sunrise::before { content: "\f5a5"; } +.bi-sunset-fill::before { content: "\f5a6"; } +.bi-sunset::before { content: "\f5a7"; } +.bi-symmetry-horizontal::before { content: "\f5a8"; } +.bi-symmetry-vertical::before { content: "\f5a9"; } +.bi-table::before { content: "\f5aa"; } +.bi-tablet-fill::before { content: "\f5ab"; } +.bi-tablet-landscape-fill::before { content: "\f5ac"; } +.bi-tablet-landscape::before { content: "\f5ad"; } +.bi-tablet::before { content: "\f5ae"; } +.bi-tag-fill::before { content: "\f5af"; } +.bi-tag::before { content: "\f5b0"; } +.bi-tags-fill::before { content: "\f5b1"; } +.bi-tags::before { content: "\f5b2"; } +.bi-telegram::before { content: "\f5b3"; } +.bi-telephone-fill::before { content: "\f5b4"; } +.bi-telephone-forward-fill::before { content: "\f5b5"; } +.bi-telephone-forward::before { content: "\f5b6"; } +.bi-telephone-inbound-fill::before { content: "\f5b7"; } +.bi-telephone-inbound::before { content: "\f5b8"; } +.bi-telephone-minus-fill::before { content: "\f5b9"; } +.bi-telephone-minus::before { content: "\f5ba"; } +.bi-telephone-outbound-fill::before { content: "\f5bb"; } +.bi-telephone-outbound::before { content: "\f5bc"; } +.bi-telephone-plus-fill::before { content: "\f5bd"; } +.bi-telephone-plus::before { content: "\f5be"; } +.bi-telephone-x-fill::before { content: "\f5bf"; } +.bi-telephone-x::before { content: "\f5c0"; } +.bi-telephone::before { content: "\f5c1"; } +.bi-terminal-fill::before { content: "\f5c2"; } +.bi-terminal::before { content: "\f5c3"; } +.bi-text-center::before { content: "\f5c4"; } +.bi-text-indent-left::before { content: "\f5c5"; } +.bi-text-indent-right::before { content: "\f5c6"; } +.bi-text-left::before { content: "\f5c7"; } +.bi-text-paragraph::before { content: "\f5c8"; } +.bi-text-right::before { content: "\f5c9"; } +.bi-textarea-resize::before { content: "\f5ca"; } +.bi-textarea-t::before { content: "\f5cb"; } +.bi-textarea::before { content: "\f5cc"; } +.bi-thermometer-half::before { content: "\f5cd"; } +.bi-thermometer-high::before { content: "\f5ce"; } +.bi-thermometer-low::before { content: "\f5cf"; } +.bi-thermometer-snow::before { content: "\f5d0"; } +.bi-thermometer-sun::before { content: "\f5d1"; } +.bi-thermometer::before { content: "\f5d2"; } +.bi-three-dots-vertical::before { content: "\f5d3"; } +.bi-three-dots::before { content: "\f5d4"; } +.bi-toggle-off::before { content: "\f5d5"; } +.bi-toggle-on::before { content: "\f5d6"; } +.bi-toggle2-off::before { content: "\f5d7"; } +.bi-toggle2-on::before { content: "\f5d8"; } +.bi-toggles::before { content: "\f5d9"; } +.bi-toggles2::before { content: "\f5da"; } +.bi-tools::before { content: "\f5db"; } +.bi-tornado::before { content: "\f5dc"; } +.bi-trash-fill::before { content: "\f5dd"; } +.bi-trash::before { content: "\f5de"; } +.bi-trash2-fill::before { content: "\f5df"; } +.bi-trash2::before { content: "\f5e0"; } +.bi-tree-fill::before { content: "\f5e1"; } +.bi-tree::before { content: "\f5e2"; } +.bi-triangle-fill::before { content: "\f5e3"; } +.bi-triangle-half::before { content: "\f5e4"; } +.bi-triangle::before { content: "\f5e5"; } +.bi-trophy-fill::before { content: "\f5e6"; } +.bi-trophy::before { content: "\f5e7"; } +.bi-tropical-storm::before { content: "\f5e8"; } +.bi-truck-flatbed::before { content: "\f5e9"; } +.bi-truck::before { content: "\f5ea"; } +.bi-tsunami::before { content: "\f5eb"; } +.bi-tv-fill::before { content: "\f5ec"; } +.bi-tv::before { content: "\f5ed"; } +.bi-twitch::before { content: "\f5ee"; } +.bi-twitter::before { content: "\f5ef"; } +.bi-type-bold::before { content: "\f5f0"; } +.bi-type-h1::before { content: "\f5f1"; } +.bi-type-h2::before { content: "\f5f2"; } +.bi-type-h3::before { content: "\f5f3"; } +.bi-type-italic::before { content: "\f5f4"; } +.bi-type-strikethrough::before { content: "\f5f5"; } +.bi-type-underline::before { content: "\f5f6"; } +.bi-type::before { content: "\f5f7"; } +.bi-ui-checks-grid::before { content: "\f5f8"; } +.bi-ui-checks::before { content: "\f5f9"; } +.bi-ui-radios-grid::before { content: "\f5fa"; } +.bi-ui-radios::before { content: "\f5fb"; } +.bi-umbrella-fill::before { content: "\f5fc"; } +.bi-umbrella::before { content: "\f5fd"; } +.bi-union::before { content: "\f5fe"; } +.bi-unlock-fill::before { content: "\f5ff"; } +.bi-unlock::before { content: "\f600"; } +.bi-upc-scan::before { content: "\f601"; } +.bi-upc::before { content: "\f602"; } +.bi-upload::before { content: "\f603"; } +.bi-vector-pen::before { content: "\f604"; } +.bi-view-list::before { content: "\f605"; } +.bi-view-stacked::before { content: "\f606"; } +.bi-vinyl-fill::before { content: "\f607"; } +.bi-vinyl::before { content: "\f608"; } +.bi-voicemail::before { content: "\f609"; } +.bi-volume-down-fill::before { content: "\f60a"; } +.bi-volume-down::before { content: "\f60b"; } +.bi-volume-mute-fill::before { content: "\f60c"; } +.bi-volume-mute::before { content: "\f60d"; } +.bi-volume-off-fill::before { content: "\f60e"; } +.bi-volume-off::before { content: "\f60f"; } +.bi-volume-up-fill::before { content: "\f610"; } +.bi-volume-up::before { content: "\f611"; } +.bi-vr::before { content: "\f612"; } +.bi-wallet-fill::before { content: "\f613"; } +.bi-wallet::before { content: "\f614"; } +.bi-wallet2::before { content: "\f615"; } +.bi-watch::before { content: "\f616"; } +.bi-water::before { content: "\f617"; } +.bi-whatsapp::before { content: "\f618"; } +.bi-wifi-1::before { content: "\f619"; } +.bi-wifi-2::before { content: "\f61a"; } +.bi-wifi-off::before { content: "\f61b"; } +.bi-wifi::before { content: "\f61c"; } +.bi-wind::before { content: "\f61d"; } +.bi-window-dock::before { content: "\f61e"; } +.bi-window-sidebar::before { content: "\f61f"; } +.bi-window::before { content: "\f620"; } +.bi-wrench::before { content: "\f621"; } +.bi-x-circle-fill::before { content: "\f622"; } +.bi-x-circle::before { content: "\f623"; } +.bi-x-diamond-fill::before { content: "\f624"; } +.bi-x-diamond::before { content: "\f625"; } +.bi-x-octagon-fill::before { content: "\f626"; } +.bi-x-octagon::before { content: "\f627"; } +.bi-x-square-fill::before { content: "\f628"; } +.bi-x-square::before { content: "\f629"; } +.bi-x::before { content: "\f62a"; } +.bi-youtube::before { content: "\f62b"; } +.bi-zoom-in::before { content: "\f62c"; } +.bi-zoom-out::before { content: "\f62d"; } +.bi-bank::before { content: "\f62e"; } +.bi-bank2::before { content: "\f62f"; } +.bi-bell-slash-fill::before { content: "\f630"; } +.bi-bell-slash::before { content: "\f631"; } +.bi-cash-coin::before { content: "\f632"; } +.bi-check-lg::before { content: "\f633"; } +.bi-coin::before { content: "\f634"; } +.bi-currency-bitcoin::before { content: "\f635"; } +.bi-currency-dollar::before { content: "\f636"; } +.bi-currency-euro::before { content: "\f637"; } +.bi-currency-exchange::before { content: "\f638"; } +.bi-currency-pound::before { content: "\f639"; } +.bi-currency-yen::before { content: "\f63a"; } +.bi-dash-lg::before { content: "\f63b"; } +.bi-exclamation-lg::before { content: "\f63c"; } +.bi-file-earmark-pdf-fill::before { content: "\f63d"; } +.bi-file-earmark-pdf::before { content: "\f63e"; } +.bi-file-pdf-fill::before { content: "\f63f"; } +.bi-file-pdf::before { content: "\f640"; } +.bi-gender-ambiguous::before { content: "\f641"; } +.bi-gender-female::before { content: "\f642"; } +.bi-gender-male::before { content: "\f643"; } +.bi-gender-trans::before { content: "\f644"; } +.bi-headset-vr::before { content: "\f645"; } +.bi-info-lg::before { content: "\f646"; } +.bi-mastodon::before { content: "\f647"; } +.bi-messenger::before { content: "\f648"; } +.bi-piggy-bank-fill::before { content: "\f649"; } +.bi-piggy-bank::before { content: "\f64a"; } +.bi-pin-map-fill::before { content: "\f64b"; } +.bi-pin-map::before { content: "\f64c"; } +.bi-plus-lg::before { content: "\f64d"; } +.bi-question-lg::before { content: "\f64e"; } +.bi-recycle::before { content: "\f64f"; } +.bi-reddit::before { content: "\f650"; } +.bi-safe-fill::before { content: "\f651"; } +.bi-safe2-fill::before { content: "\f652"; } +.bi-safe2::before { content: "\f653"; } +.bi-sd-card-fill::before { content: "\f654"; } +.bi-sd-card::before { content: "\f655"; } +.bi-skype::before { content: "\f656"; } +.bi-slash-lg::before { content: "\f657"; } +.bi-translate::before { content: "\f658"; } +.bi-x-lg::before { content: "\f659"; } +.bi-safe::before { content: "\f65a"; } +.bi-apple::before { content: "\f65b"; } +.bi-microsoft::before { content: "\f65d"; } +.bi-windows::before { content: "\f65e"; } +.bi-behance::before { content: "\f65c"; } +.bi-dribbble::before { content: "\f65f"; } +.bi-line::before { content: "\f660"; } +.bi-medium::before { content: "\f661"; } +.bi-paypal::before { content: "\f662"; } +.bi-pinterest::before { content: "\f663"; } +.bi-signal::before { content: "\f664"; } +.bi-snapchat::before { content: "\f665"; } +.bi-spotify::before { content: "\f666"; } +.bi-stack-overflow::before { content: "\f667"; } +.bi-strava::before { content: "\f668"; } +.bi-wordpress::before { content: "\f669"; } +.bi-vimeo::before { content: "\f66a"; } +.bi-activity::before { content: "\f66b"; } +.bi-easel2-fill::before { content: "\f66c"; } +.bi-easel2::before { content: "\f66d"; } +.bi-easel3-fill::before { content: "\f66e"; } +.bi-easel3::before { content: "\f66f"; } +.bi-fan::before { content: "\f670"; } +.bi-fingerprint::before { content: "\f671"; } +.bi-graph-down-arrow::before { content: "\f672"; } +.bi-graph-up-arrow::before { content: "\f673"; } +.bi-hypnotize::before { content: "\f674"; } +.bi-magic::before { content: "\f675"; } +.bi-person-rolodex::before { content: "\f676"; } +.bi-person-video::before { content: "\f677"; } +.bi-person-video2::before { content: "\f678"; } +.bi-person-video3::before { content: "\f679"; } +.bi-person-workspace::before { content: "\f67a"; } +.bi-radioactive::before { content: "\f67b"; } +.bi-webcam-fill::before { content: "\f67c"; } +.bi-webcam::before { content: "\f67d"; } +.bi-yin-yang::before { content: "\f67e"; } +.bi-bandaid-fill::before { content: "\f680"; } +.bi-bandaid::before { content: "\f681"; } +.bi-bluetooth::before { content: "\f682"; } +.bi-body-text::before { content: "\f683"; } +.bi-boombox::before { content: "\f684"; } +.bi-boxes::before { content: "\f685"; } +.bi-dpad-fill::before { content: "\f686"; } +.bi-dpad::before { content: "\f687"; } +.bi-ear-fill::before { content: "\f688"; } +.bi-ear::before { content: "\f689"; } +.bi-envelope-check-fill::before { content: "\f68b"; } +.bi-envelope-check::before { content: "\f68c"; } +.bi-envelope-dash-fill::before { content: "\f68e"; } +.bi-envelope-dash::before { content: "\f68f"; } +.bi-envelope-exclamation-fill::before { content: "\f691"; } +.bi-envelope-exclamation::before { content: "\f692"; } +.bi-envelope-plus-fill::before { content: "\f693"; } +.bi-envelope-plus::before { content: "\f694"; } +.bi-envelope-slash-fill::before { content: "\f696"; } +.bi-envelope-slash::before { content: "\f697"; } +.bi-envelope-x-fill::before { content: "\f699"; } +.bi-envelope-x::before { content: "\f69a"; } +.bi-explicit-fill::before { content: "\f69b"; } +.bi-explicit::before { content: "\f69c"; } +.bi-git::before { content: "\f69d"; } +.bi-infinity::before { content: "\f69e"; } +.bi-list-columns-reverse::before { content: "\f69f"; } +.bi-list-columns::before { content: "\f6a0"; } +.bi-meta::before { content: "\f6a1"; } +.bi-nintendo-switch::before { content: "\f6a4"; } +.bi-pc-display-horizontal::before { content: "\f6a5"; } +.bi-pc-display::before { content: "\f6a6"; } +.bi-pc-horizontal::before { content: "\f6a7"; } +.bi-pc::before { content: "\f6a8"; } +.bi-playstation::before { content: "\f6a9"; } +.bi-plus-slash-minus::before { content: "\f6aa"; } +.bi-projector-fill::before { content: "\f6ab"; } +.bi-projector::before { content: "\f6ac"; } +.bi-qr-code-scan::before { content: "\f6ad"; } +.bi-qr-code::before { content: "\f6ae"; } +.bi-quora::before { content: "\f6af"; } +.bi-quote::before { content: "\f6b0"; } +.bi-robot::before { content: "\f6b1"; } +.bi-send-check-fill::before { content: "\f6b2"; } +.bi-send-check::before { content: "\f6b3"; } +.bi-send-dash-fill::before { content: "\f6b4"; } +.bi-send-dash::before { content: "\f6b5"; } +.bi-send-exclamation-fill::before { content: "\f6b7"; } +.bi-send-exclamation::before { content: "\f6b8"; } +.bi-send-fill::before { content: "\f6b9"; } +.bi-send-plus-fill::before { content: "\f6ba"; } +.bi-send-plus::before { content: "\f6bb"; } +.bi-send-slash-fill::before { content: "\f6bc"; } +.bi-send-slash::before { content: "\f6bd"; } +.bi-send-x-fill::before { content: "\f6be"; } +.bi-send-x::before { content: "\f6bf"; } +.bi-send::before { content: "\f6c0"; } +.bi-steam::before { content: "\f6c1"; } +.bi-terminal-dash::before { content: "\f6c3"; } +.bi-terminal-plus::before { content: "\f6c4"; } +.bi-terminal-split::before { content: "\f6c5"; } +.bi-ticket-detailed-fill::before { content: "\f6c6"; } +.bi-ticket-detailed::before { content: "\f6c7"; } +.bi-ticket-fill::before { content: "\f6c8"; } +.bi-ticket-perforated-fill::before { content: "\f6c9"; } +.bi-ticket-perforated::before { content: "\f6ca"; } +.bi-ticket::before { content: "\f6cb"; } +.bi-tiktok::before { content: "\f6cc"; } +.bi-window-dash::before { content: "\f6cd"; } +.bi-window-desktop::before { content: "\f6ce"; } +.bi-window-fullscreen::before { content: "\f6cf"; } +.bi-window-plus::before { content: "\f6d0"; } +.bi-window-split::before { content: "\f6d1"; } +.bi-window-stack::before { content: "\f6d2"; } +.bi-window-x::before { content: "\f6d3"; } +.bi-xbox::before { content: "\f6d4"; } +.bi-ethernet::before { content: "\f6d5"; } +.bi-hdmi-fill::before { content: "\f6d6"; } +.bi-hdmi::before { content: "\f6d7"; } +.bi-usb-c-fill::before { content: "\f6d8"; } +.bi-usb-c::before { content: "\f6d9"; } +.bi-usb-fill::before { content: "\f6da"; } +.bi-usb-plug-fill::before { content: "\f6db"; } +.bi-usb-plug::before { content: "\f6dc"; } +.bi-usb-symbol::before { content: "\f6dd"; } +.bi-usb::before { content: "\f6de"; } +.bi-boombox-fill::before { content: "\f6df"; } +.bi-displayport::before { content: "\f6e1"; } +.bi-gpu-card::before { content: "\f6e2"; } +.bi-memory::before { content: "\f6e3"; } +.bi-modem-fill::before { content: "\f6e4"; } +.bi-modem::before { content: "\f6e5"; } +.bi-motherboard-fill::before { content: "\f6e6"; } +.bi-motherboard::before { content: "\f6e7"; } +.bi-optical-audio-fill::before { content: "\f6e8"; } +.bi-optical-audio::before { content: "\f6e9"; } +.bi-pci-card::before { content: "\f6ea"; } +.bi-router-fill::before { content: "\f6eb"; } +.bi-router::before { content: "\f6ec"; } +.bi-thunderbolt-fill::before { content: "\f6ef"; } +.bi-thunderbolt::before { content: "\f6f0"; } +.bi-usb-drive-fill::before { content: "\f6f1"; } +.bi-usb-drive::before { content: "\f6f2"; } +.bi-usb-micro-fill::before { content: "\f6f3"; } +.bi-usb-micro::before { content: "\f6f4"; } +.bi-usb-mini-fill::before { content: "\f6f5"; } +.bi-usb-mini::before { content: "\f6f6"; } +.bi-cloud-haze2::before { content: "\f6f7"; } +.bi-device-hdd-fill::before { content: "\f6f8"; } +.bi-device-hdd::before { content: "\f6f9"; } +.bi-device-ssd-fill::before { content: "\f6fa"; } +.bi-device-ssd::before { content: "\f6fb"; } +.bi-displayport-fill::before { content: "\f6fc"; } +.bi-mortarboard-fill::before { content: "\f6fd"; } +.bi-mortarboard::before { content: "\f6fe"; } +.bi-terminal-x::before { content: "\f6ff"; } +.bi-arrow-through-heart-fill::before { content: "\f700"; } +.bi-arrow-through-heart::before { content: "\f701"; } +.bi-badge-sd-fill::before { content: "\f702"; } +.bi-badge-sd::before { content: "\f703"; } +.bi-bag-heart-fill::before { content: "\f704"; } +.bi-bag-heart::before { content: "\f705"; } +.bi-balloon-fill::before { content: "\f706"; } +.bi-balloon-heart-fill::before { content: "\f707"; } +.bi-balloon-heart::before { content: "\f708"; } +.bi-balloon::before { content: "\f709"; } +.bi-box2-fill::before { content: "\f70a"; } +.bi-box2-heart-fill::before { content: "\f70b"; } +.bi-box2-heart::before { content: "\f70c"; } +.bi-box2::before { content: "\f70d"; } +.bi-braces-asterisk::before { content: "\f70e"; } +.bi-calendar-heart-fill::before { content: "\f70f"; } +.bi-calendar-heart::before { content: "\f710"; } +.bi-calendar2-heart-fill::before { content: "\f711"; } +.bi-calendar2-heart::before { content: "\f712"; } +.bi-chat-heart-fill::before { content: "\f713"; } +.bi-chat-heart::before { content: "\f714"; } +.bi-chat-left-heart-fill::before { content: "\f715"; } +.bi-chat-left-heart::before { content: "\f716"; } +.bi-chat-right-heart-fill::before { content: "\f717"; } +.bi-chat-right-heart::before { content: "\f718"; } +.bi-chat-square-heart-fill::before { content: "\f719"; } +.bi-chat-square-heart::before { content: "\f71a"; } +.bi-clipboard-check-fill::before { content: "\f71b"; } +.bi-clipboard-data-fill::before { content: "\f71c"; } +.bi-clipboard-fill::before { content: "\f71d"; } +.bi-clipboard-heart-fill::before { content: "\f71e"; } +.bi-clipboard-heart::before { content: "\f71f"; } +.bi-clipboard-minus-fill::before { content: "\f720"; } +.bi-clipboard-plus-fill::before { content: "\f721"; } +.bi-clipboard-pulse::before { content: "\f722"; } +.bi-clipboard-x-fill::before { content: "\f723"; } +.bi-clipboard2-check-fill::before { content: "\f724"; } +.bi-clipboard2-check::before { content: "\f725"; } +.bi-clipboard2-data-fill::before { content: "\f726"; } +.bi-clipboard2-data::before { content: "\f727"; } +.bi-clipboard2-fill::before { content: "\f728"; } +.bi-clipboard2-heart-fill::before { content: "\f729"; } +.bi-clipboard2-heart::before { content: "\f72a"; } +.bi-clipboard2-minus-fill::before { content: "\f72b"; } +.bi-clipboard2-minus::before { content: "\f72c"; } +.bi-clipboard2-plus-fill::before { content: "\f72d"; } +.bi-clipboard2-plus::before { content: "\f72e"; } +.bi-clipboard2-pulse-fill::before { content: "\f72f"; } +.bi-clipboard2-pulse::before { content: "\f730"; } +.bi-clipboard2-x-fill::before { content: "\f731"; } +.bi-clipboard2-x::before { content: "\f732"; } +.bi-clipboard2::before { content: "\f733"; } +.bi-emoji-kiss-fill::before { content: "\f734"; } +.bi-emoji-kiss::before { content: "\f735"; } +.bi-envelope-heart-fill::before { content: "\f736"; } +.bi-envelope-heart::before { content: "\f737"; } +.bi-envelope-open-heart-fill::before { content: "\f738"; } +.bi-envelope-open-heart::before { content: "\f739"; } +.bi-envelope-paper-fill::before { content: "\f73a"; } +.bi-envelope-paper-heart-fill::before { content: "\f73b"; } +.bi-envelope-paper-heart::before { content: "\f73c"; } +.bi-envelope-paper::before { content: "\f73d"; } +.bi-filetype-aac::before { content: "\f73e"; } +.bi-filetype-ai::before { content: "\f73f"; } +.bi-filetype-bmp::before { content: "\f740"; } +.bi-filetype-cs::before { content: "\f741"; } +.bi-filetype-css::before { content: "\f742"; } +.bi-filetype-csv::before { content: "\f743"; } +.bi-filetype-doc::before { content: "\f744"; } +.bi-filetype-docx::before { content: "\f745"; } +.bi-filetype-exe::before { content: "\f746"; } +.bi-filetype-gif::before { content: "\f747"; } +.bi-filetype-heic::before { content: "\f748"; } +.bi-filetype-html::before { content: "\f749"; } +.bi-filetype-java::before { content: "\f74a"; } +.bi-filetype-jpg::before { content: "\f74b"; } +.bi-filetype-js::before { content: "\f74c"; } +.bi-filetype-jsx::before { content: "\f74d"; } +.bi-filetype-key::before { content: "\f74e"; } +.bi-filetype-m4p::before { content: "\f74f"; } +.bi-filetype-md::before { content: "\f750"; } +.bi-filetype-mdx::before { content: "\f751"; } +.bi-filetype-mov::before { content: "\f752"; } +.bi-filetype-mp3::before { content: "\f753"; } +.bi-filetype-mp4::before { content: "\f754"; } +.bi-filetype-otf::before { content: "\f755"; } +.bi-filetype-pdf::before { content: "\f756"; } +.bi-filetype-php::before { content: "\f757"; } +.bi-filetype-png::before { content: "\f758"; } +.bi-filetype-ppt::before { content: "\f75a"; } +.bi-filetype-psd::before { content: "\f75b"; } +.bi-filetype-py::before { content: "\f75c"; } +.bi-filetype-raw::before { content: "\f75d"; } +.bi-filetype-rb::before { content: "\f75e"; } +.bi-filetype-sass::before { content: "\f75f"; } +.bi-filetype-scss::before { content: "\f760"; } +.bi-filetype-sh::before { content: "\f761"; } +.bi-filetype-svg::before { content: "\f762"; } +.bi-filetype-tiff::before { content: "\f763"; } +.bi-filetype-tsx::before { content: "\f764"; } +.bi-filetype-ttf::before { content: "\f765"; } +.bi-filetype-txt::before { content: "\f766"; } +.bi-filetype-wav::before { content: "\f767"; } +.bi-filetype-woff::before { content: "\f768"; } +.bi-filetype-xls::before { content: "\f76a"; } +.bi-filetype-xml::before { content: "\f76b"; } +.bi-filetype-yml::before { content: "\f76c"; } +.bi-heart-arrow::before { content: "\f76d"; } +.bi-heart-pulse-fill::before { content: "\f76e"; } +.bi-heart-pulse::before { content: "\f76f"; } +.bi-heartbreak-fill::before { content: "\f770"; } +.bi-heartbreak::before { content: "\f771"; } +.bi-hearts::before { content: "\f772"; } +.bi-hospital-fill::before { content: "\f773"; } +.bi-hospital::before { content: "\f774"; } +.bi-house-heart-fill::before { content: "\f775"; } +.bi-house-heart::before { content: "\f776"; } +.bi-incognito::before { content: "\f777"; } +.bi-magnet-fill::before { content: "\f778"; } +.bi-magnet::before { content: "\f779"; } +.bi-person-heart::before { content: "\f77a"; } +.bi-person-hearts::before { content: "\f77b"; } +.bi-phone-flip::before { content: "\f77c"; } +.bi-plugin::before { content: "\f77d"; } +.bi-postage-fill::before { content: "\f77e"; } +.bi-postage-heart-fill::before { content: "\f77f"; } +.bi-postage-heart::before { content: "\f780"; } +.bi-postage::before { content: "\f781"; } +.bi-postcard-fill::before { content: "\f782"; } +.bi-postcard-heart-fill::before { content: "\f783"; } +.bi-postcard-heart::before { content: "\f784"; } +.bi-postcard::before { content: "\f785"; } +.bi-search-heart-fill::before { content: "\f786"; } +.bi-search-heart::before { content: "\f787"; } +.bi-sliders2-vertical::before { content: "\f788"; } +.bi-sliders2::before { content: "\f789"; } +.bi-trash3-fill::before { content: "\f78a"; } +.bi-trash3::before { content: "\f78b"; } +.bi-valentine::before { content: "\f78c"; } +.bi-valentine2::before { content: "\f78d"; } +.bi-wrench-adjustable-circle-fill::before { content: "\f78e"; } +.bi-wrench-adjustable-circle::before { content: "\f78f"; } +.bi-wrench-adjustable::before { content: "\f790"; } +.bi-filetype-json::before { content: "\f791"; } +.bi-filetype-pptx::before { content: "\f792"; } +.bi-filetype-xlsx::before { content: "\f793"; } +.bi-1-circle-fill::before { content: "\f796"; } +.bi-1-circle::before { content: "\f797"; } +.bi-1-square-fill::before { content: "\f798"; } +.bi-1-square::before { content: "\f799"; } +.bi-2-circle-fill::before { content: "\f79c"; } +.bi-2-circle::before { content: "\f79d"; } +.bi-2-square-fill::before { content: "\f79e"; } +.bi-2-square::before { content: "\f79f"; } +.bi-3-circle-fill::before { content: "\f7a2"; } +.bi-3-circle::before { content: "\f7a3"; } +.bi-3-square-fill::before { content: "\f7a4"; } +.bi-3-square::before { content: "\f7a5"; } +.bi-4-circle-fill::before { content: "\f7a8"; } +.bi-4-circle::before { content: "\f7a9"; } +.bi-4-square-fill::before { content: "\f7aa"; } +.bi-4-square::before { content: "\f7ab"; } +.bi-5-circle-fill::before { content: "\f7ae"; } +.bi-5-circle::before { content: "\f7af"; } +.bi-5-square-fill::before { content: "\f7b0"; } +.bi-5-square::before { content: "\f7b1"; } +.bi-6-circle-fill::before { content: "\f7b4"; } +.bi-6-circle::before { content: "\f7b5"; } +.bi-6-square-fill::before { content: "\f7b6"; } +.bi-6-square::before { content: "\f7b7"; } +.bi-7-circle-fill::before { content: "\f7ba"; } +.bi-7-circle::before { content: "\f7bb"; } +.bi-7-square-fill::before { content: "\f7bc"; } +.bi-7-square::before { content: "\f7bd"; } +.bi-8-circle-fill::before { content: "\f7c0"; } +.bi-8-circle::before { content: "\f7c1"; } +.bi-8-square-fill::before { content: "\f7c2"; } +.bi-8-square::before { content: "\f7c3"; } +.bi-9-circle-fill::before { content: "\f7c6"; } +.bi-9-circle::before { content: "\f7c7"; } +.bi-9-square-fill::before { content: "\f7c8"; } +.bi-9-square::before { content: "\f7c9"; } +.bi-airplane-engines-fill::before { content: "\f7ca"; } +.bi-airplane-engines::before { content: "\f7cb"; } +.bi-airplane-fill::before { content: "\f7cc"; } +.bi-airplane::before { content: "\f7cd"; } +.bi-alexa::before { content: "\f7ce"; } +.bi-alipay::before { content: "\f7cf"; } +.bi-android::before { content: "\f7d0"; } +.bi-android2::before { content: "\f7d1"; } +.bi-box-fill::before { content: "\f7d2"; } +.bi-box-seam-fill::before { content: "\f7d3"; } +.bi-browser-chrome::before { content: "\f7d4"; } +.bi-browser-edge::before { content: "\f7d5"; } +.bi-browser-firefox::before { content: "\f7d6"; } +.bi-browser-safari::before { content: "\f7d7"; } +.bi-c-circle-fill::before { content: "\f7da"; } +.bi-c-circle::before { content: "\f7db"; } +.bi-c-square-fill::before { content: "\f7dc"; } +.bi-c-square::before { content: "\f7dd"; } +.bi-capsule-pill::before { content: "\f7de"; } +.bi-capsule::before { content: "\f7df"; } +.bi-car-front-fill::before { content: "\f7e0"; } +.bi-car-front::before { content: "\f7e1"; } +.bi-cassette-fill::before { content: "\f7e2"; } +.bi-cassette::before { content: "\f7e3"; } +.bi-cc-circle-fill::before { content: "\f7e6"; } +.bi-cc-circle::before { content: "\f7e7"; } +.bi-cc-square-fill::before { content: "\f7e8"; } +.bi-cc-square::before { content: "\f7e9"; } +.bi-cup-hot-fill::before { content: "\f7ea"; } +.bi-cup-hot::before { content: "\f7eb"; } +.bi-currency-rupee::before { content: "\f7ec"; } +.bi-dropbox::before { content: "\f7ed"; } +.bi-escape::before { content: "\f7ee"; } +.bi-fast-forward-btn-fill::before { content: "\f7ef"; } +.bi-fast-forward-btn::before { content: "\f7f0"; } +.bi-fast-forward-circle-fill::before { content: "\f7f1"; } +.bi-fast-forward-circle::before { content: "\f7f2"; } +.bi-fast-forward-fill::before { content: "\f7f3"; } +.bi-fast-forward::before { content: "\f7f4"; } +.bi-filetype-sql::before { content: "\f7f5"; } +.bi-fire::before { content: "\f7f6"; } +.bi-google-play::before { content: "\f7f7"; } +.bi-h-circle-fill::before { content: "\f7fa"; } +.bi-h-circle::before { content: "\f7fb"; } +.bi-h-square-fill::before { content: "\f7fc"; } +.bi-h-square::before { content: "\f7fd"; } +.bi-indent::before { content: "\f7fe"; } +.bi-lungs-fill::before { content: "\f7ff"; } +.bi-lungs::before { content: "\f800"; } +.bi-microsoft-teams::before { content: "\f801"; } +.bi-p-circle-fill::before { content: "\f804"; } +.bi-p-circle::before { content: "\f805"; } +.bi-p-square-fill::before { content: "\f806"; } +.bi-p-square::before { content: "\f807"; } +.bi-pass-fill::before { content: "\f808"; } +.bi-pass::before { content: "\f809"; } +.bi-prescription::before { content: "\f80a"; } +.bi-prescription2::before { content: "\f80b"; } +.bi-r-circle-fill::before { content: "\f80e"; } +.bi-r-circle::before { content: "\f80f"; } +.bi-r-square-fill::before { content: "\f810"; } +.bi-r-square::before { content: "\f811"; } +.bi-repeat-1::before { content: "\f812"; } +.bi-repeat::before { content: "\f813"; } +.bi-rewind-btn-fill::before { content: "\f814"; } +.bi-rewind-btn::before { content: "\f815"; } +.bi-rewind-circle-fill::before { content: "\f816"; } +.bi-rewind-circle::before { content: "\f817"; } +.bi-rewind-fill::before { content: "\f818"; } +.bi-rewind::before { content: "\f819"; } +.bi-train-freight-front-fill::before { content: "\f81a"; } +.bi-train-freight-front::before { content: "\f81b"; } +.bi-train-front-fill::before { content: "\f81c"; } +.bi-train-front::before { content: "\f81d"; } +.bi-train-lightrail-front-fill::before { content: "\f81e"; } +.bi-train-lightrail-front::before { content: "\f81f"; } +.bi-truck-front-fill::before { content: "\f820"; } +.bi-truck-front::before { content: "\f821"; } +.bi-ubuntu::before { content: "\f822"; } +.bi-unindent::before { content: "\f823"; } +.bi-unity::before { content: "\f824"; } +.bi-universal-access-circle::before { content: "\f825"; } +.bi-universal-access::before { content: "\f826"; } +.bi-virus::before { content: "\f827"; } +.bi-virus2::before { content: "\f828"; } +.bi-wechat::before { content: "\f829"; } +.bi-yelp::before { content: "\f82a"; } +.bi-sign-stop-fill::before { content: "\f82b"; } +.bi-sign-stop-lights-fill::before { content: "\f82c"; } +.bi-sign-stop-lights::before { content: "\f82d"; } +.bi-sign-stop::before { content: "\f82e"; } +.bi-sign-turn-left-fill::before { content: "\f82f"; } +.bi-sign-turn-left::before { content: "\f830"; } +.bi-sign-turn-right-fill::before { content: "\f831"; } +.bi-sign-turn-right::before { content: "\f832"; } +.bi-sign-turn-slight-left-fill::before { content: "\f833"; } +.bi-sign-turn-slight-left::before { content: "\f834"; } +.bi-sign-turn-slight-right-fill::before { content: "\f835"; } +.bi-sign-turn-slight-right::before { content: "\f836"; } +.bi-sign-yield-fill::before { content: "\f837"; } +.bi-sign-yield::before { content: "\f838"; } +.bi-ev-station-fill::before { content: "\f839"; } +.bi-ev-station::before { content: "\f83a"; } +.bi-fuel-pump-diesel-fill::before { content: "\f83b"; } +.bi-fuel-pump-diesel::before { content: "\f83c"; } +.bi-fuel-pump-fill::before { content: "\f83d"; } +.bi-fuel-pump::before { content: "\f83e"; } +.bi-0-circle-fill::before { content: "\f83f"; } +.bi-0-circle::before { content: "\f840"; } +.bi-0-square-fill::before { content: "\f841"; } +.bi-0-square::before { content: "\f842"; } +.bi-rocket-fill::before { content: "\f843"; } +.bi-rocket-takeoff-fill::before { content: "\f844"; } +.bi-rocket-takeoff::before { content: "\f845"; } +.bi-rocket::before { content: "\f846"; } +.bi-stripe::before { content: "\f847"; } +.bi-subscript::before { content: "\f848"; } +.bi-superscript::before { content: "\f849"; } +.bi-trello::before { content: "\f84a"; } +.bi-envelope-at-fill::before { content: "\f84b"; } +.bi-envelope-at::before { content: "\f84c"; } +.bi-regex::before { content: "\f84d"; } +.bi-text-wrap::before { content: "\f84e"; } +.bi-sign-dead-end-fill::before { content: "\f84f"; } +.bi-sign-dead-end::before { content: "\f850"; } +.bi-sign-do-not-enter-fill::before { content: "\f851"; } +.bi-sign-do-not-enter::before { content: "\f852"; } +.bi-sign-intersection-fill::before { content: "\f853"; } +.bi-sign-intersection-side-fill::before { content: "\f854"; } +.bi-sign-intersection-side::before { content: "\f855"; } +.bi-sign-intersection-t-fill::before { content: "\f856"; } +.bi-sign-intersection-t::before { content: "\f857"; } +.bi-sign-intersection-y-fill::before { content: "\f858"; } +.bi-sign-intersection-y::before { content: "\f859"; } +.bi-sign-intersection::before { content: "\f85a"; } +.bi-sign-merge-left-fill::before { content: "\f85b"; } +.bi-sign-merge-left::before { content: "\f85c"; } +.bi-sign-merge-right-fill::before { content: "\f85d"; } +.bi-sign-merge-right::before { content: "\f85e"; } +.bi-sign-no-left-turn-fill::before { content: "\f85f"; } +.bi-sign-no-left-turn::before { content: "\f860"; } +.bi-sign-no-parking-fill::before { content: "\f861"; } +.bi-sign-no-parking::before { content: "\f862"; } +.bi-sign-no-right-turn-fill::before { content: "\f863"; } +.bi-sign-no-right-turn::before { content: "\f864"; } +.bi-sign-railroad-fill::before { content: "\f865"; } +.bi-sign-railroad::before { content: "\f866"; } +.bi-building-add::before { content: "\f867"; } +.bi-building-check::before { content: "\f868"; } +.bi-building-dash::before { content: "\f869"; } +.bi-building-down::before { content: "\f86a"; } +.bi-building-exclamation::before { content: "\f86b"; } +.bi-building-fill-add::before { content: "\f86c"; } +.bi-building-fill-check::before { content: "\f86d"; } +.bi-building-fill-dash::before { content: "\f86e"; } +.bi-building-fill-down::before { content: "\f86f"; } +.bi-building-fill-exclamation::before { content: "\f870"; } +.bi-building-fill-gear::before { content: "\f871"; } +.bi-building-fill-lock::before { content: "\f872"; } +.bi-building-fill-slash::before { content: "\f873"; } +.bi-building-fill-up::before { content: "\f874"; } +.bi-building-fill-x::before { content: "\f875"; } +.bi-building-fill::before { content: "\f876"; } +.bi-building-gear::before { content: "\f877"; } +.bi-building-lock::before { content: "\f878"; } +.bi-building-slash::before { content: "\f879"; } +.bi-building-up::before { content: "\f87a"; } +.bi-building-x::before { content: "\f87b"; } +.bi-buildings-fill::before { content: "\f87c"; } +.bi-buildings::before { content: "\f87d"; } +.bi-bus-front-fill::before { content: "\f87e"; } +.bi-bus-front::before { content: "\f87f"; } +.bi-ev-front-fill::before { content: "\f880"; } +.bi-ev-front::before { content: "\f881"; } +.bi-globe-americas::before { content: "\f882"; } +.bi-globe-asia-australia::before { content: "\f883"; } +.bi-globe-central-south-asia::before { content: "\f884"; } +.bi-globe-europe-africa::before { content: "\f885"; } +.bi-house-add-fill::before { content: "\f886"; } +.bi-house-add::before { content: "\f887"; } +.bi-house-check-fill::before { content: "\f888"; } +.bi-house-check::before { content: "\f889"; } +.bi-house-dash-fill::before { content: "\f88a"; } +.bi-house-dash::before { content: "\f88b"; } +.bi-house-down-fill::before { content: "\f88c"; } +.bi-house-down::before { content: "\f88d"; } +.bi-house-exclamation-fill::before { content: "\f88e"; } +.bi-house-exclamation::before { content: "\f88f"; } +.bi-house-gear-fill::before { content: "\f890"; } +.bi-house-gear::before { content: "\f891"; } +.bi-house-lock-fill::before { content: "\f892"; } +.bi-house-lock::before { content: "\f893"; } +.bi-house-slash-fill::before { content: "\f894"; } +.bi-house-slash::before { content: "\f895"; } +.bi-house-up-fill::before { content: "\f896"; } +.bi-house-up::before { content: "\f897"; } +.bi-house-x-fill::before { content: "\f898"; } +.bi-house-x::before { content: "\f899"; } +.bi-person-add::before { content: "\f89a"; } +.bi-person-down::before { content: "\f89b"; } +.bi-person-exclamation::before { content: "\f89c"; } +.bi-person-fill-add::before { content: "\f89d"; } +.bi-person-fill-check::before { content: "\f89e"; } +.bi-person-fill-dash::before { content: "\f89f"; } +.bi-person-fill-down::before { content: "\f8a0"; } +.bi-person-fill-exclamation::before { content: "\f8a1"; } +.bi-person-fill-gear::before { content: "\f8a2"; } +.bi-person-fill-lock::before { content: "\f8a3"; } +.bi-person-fill-slash::before { content: "\f8a4"; } +.bi-person-fill-up::before { content: "\f8a5"; } +.bi-person-fill-x::before { content: "\f8a6"; } +.bi-person-gear::before { content: "\f8a7"; } +.bi-person-lock::before { content: "\f8a8"; } +.bi-person-slash::before { content: "\f8a9"; } +.bi-person-up::before { content: "\f8aa"; } +.bi-scooter::before { content: "\f8ab"; } +.bi-taxi-front-fill::before { content: "\f8ac"; } +.bi-taxi-front::before { content: "\f8ad"; } +.bi-amd::before { content: "\f8ae"; } +.bi-database-add::before { content: "\f8af"; } +.bi-database-check::before { content: "\f8b0"; } +.bi-database-dash::before { content: "\f8b1"; } +.bi-database-down::before { content: "\f8b2"; } +.bi-database-exclamation::before { content: "\f8b3"; } +.bi-database-fill-add::before { content: "\f8b4"; } +.bi-database-fill-check::before { content: "\f8b5"; } +.bi-database-fill-dash::before { content: "\f8b6"; } +.bi-database-fill-down::before { content: "\f8b7"; } +.bi-database-fill-exclamation::before { content: "\f8b8"; } +.bi-database-fill-gear::before { content: "\f8b9"; } +.bi-database-fill-lock::before { content: "\f8ba"; } +.bi-database-fill-slash::before { content: "\f8bb"; } +.bi-database-fill-up::before { content: "\f8bc"; } +.bi-database-fill-x::before { content: "\f8bd"; } +.bi-database-fill::before { content: "\f8be"; } +.bi-database-gear::before { content: "\f8bf"; } +.bi-database-lock::before { content: "\f8c0"; } +.bi-database-slash::before { content: "\f8c1"; } +.bi-database-up::before { content: "\f8c2"; } +.bi-database-x::before { content: "\f8c3"; } +.bi-database::before { content: "\f8c4"; } +.bi-houses-fill::before { content: "\f8c5"; } +.bi-houses::before { content: "\f8c6"; } +.bi-nvidia::before { content: "\f8c7"; } +.bi-person-vcard-fill::before { content: "\f8c8"; } +.bi-person-vcard::before { content: "\f8c9"; } +.bi-sina-weibo::before { content: "\f8ca"; } +.bi-tencent-qq::before { content: "\f8cb"; } +.bi-wikipedia::before { content: "\f8cc"; } +.bi-alphabet-uppercase::before { content: "\f2a5"; } +.bi-alphabet::before { content: "\f68a"; } +.bi-amazon::before { content: "\f68d"; } +.bi-arrows-collapse-vertical::before { content: "\f690"; } +.bi-arrows-expand-vertical::before { content: "\f695"; } +.bi-arrows-vertical::before { content: "\f698"; } +.bi-arrows::before { content: "\f6a2"; } +.bi-ban-fill::before { content: "\f6a3"; } +.bi-ban::before { content: "\f6b6"; } +.bi-bing::before { content: "\f6c2"; } +.bi-cake::before { content: "\f6e0"; } +.bi-cake2::before { content: "\f6ed"; } +.bi-cookie::before { content: "\f6ee"; } +.bi-copy::before { content: "\f759"; } +.bi-crosshair::before { content: "\f769"; } +.bi-crosshair2::before { content: "\f794"; } +.bi-emoji-astonished-fill::before { content: "\f795"; } +.bi-emoji-astonished::before { content: "\f79a"; } +.bi-emoji-grimace-fill::before { content: "\f79b"; } +.bi-emoji-grimace::before { content: "\f7a0"; } +.bi-emoji-grin-fill::before { content: "\f7a1"; } +.bi-emoji-grin::before { content: "\f7a6"; } +.bi-emoji-surprise-fill::before { content: "\f7a7"; } +.bi-emoji-surprise::before { content: "\f7ac"; } +.bi-emoji-tear-fill::before { content: "\f7ad"; } +.bi-emoji-tear::before { content: "\f7b2"; } +.bi-envelope-arrow-down-fill::before { content: "\f7b3"; } +.bi-envelope-arrow-down::before { content: "\f7b8"; } +.bi-envelope-arrow-up-fill::before { content: "\f7b9"; } +.bi-envelope-arrow-up::before { content: "\f7be"; } +.bi-feather::before { content: "\f7bf"; } +.bi-feather2::before { content: "\f7c4"; } +.bi-floppy-fill::before { content: "\f7c5"; } +.bi-floppy::before { content: "\f7d8"; } +.bi-floppy2-fill::before { content: "\f7d9"; } +.bi-floppy2::before { content: "\f7e4"; } +.bi-gitlab::before { content: "\f7e5"; } +.bi-highlighter::before { content: "\f7f8"; } +.bi-marker-tip::before { content: "\f802"; } +.bi-nvme-fill::before { content: "\f803"; } +.bi-nvme::before { content: "\f80c"; } +.bi-opencollective::before { content: "\f80d"; } +.bi-pci-card-network::before { content: "\f8cd"; } +.bi-pci-card-sound::before { content: "\f8ce"; } +.bi-radar::before { content: "\f8cf"; } +.bi-send-arrow-down-fill::before { content: "\f8d0"; } +.bi-send-arrow-down::before { content: "\f8d1"; } +.bi-send-arrow-up-fill::before { content: "\f8d2"; } +.bi-send-arrow-up::before { content: "\f8d3"; } +.bi-sim-slash-fill::before { content: "\f8d4"; } +.bi-sim-slash::before { content: "\f8d5"; } +.bi-sourceforge::before { content: "\f8d6"; } +.bi-substack::before { content: "\f8d7"; } +.bi-threads-fill::before { content: "\f8d8"; } +.bi-threads::before { content: "\f8d9"; } +.bi-transparency::before { content: "\f8da"; } +.bi-twitter-x::before { content: "\f8db"; } +.bi-type-h4::before { content: "\f8dc"; } +.bi-type-h5::before { content: "\f8dd"; } +.bi-type-h6::before { content: "\f8de"; } +.bi-backpack-fill::before { content: "\f8df"; } +.bi-backpack::before { content: "\f8e0"; } +.bi-backpack2-fill::before { content: "\f8e1"; } +.bi-backpack2::before { content: "\f8e2"; } +.bi-backpack3-fill::before { content: "\f8e3"; } +.bi-backpack3::before { content: "\f8e4"; } +.bi-backpack4-fill::before { content: "\f8e5"; } +.bi-backpack4::before { content: "\f8e6"; } +.bi-brilliance::before { content: "\f8e7"; } +.bi-cake-fill::before { content: "\f8e8"; } +.bi-cake2-fill::before { content: "\f8e9"; } +.bi-duffle-fill::before { content: "\f8ea"; } +.bi-duffle::before { content: "\f8eb"; } +.bi-exposure::before { content: "\f8ec"; } +.bi-gender-neuter::before { content: "\f8ed"; } +.bi-highlights::before { content: "\f8ee"; } +.bi-luggage-fill::before { content: "\f8ef"; } +.bi-luggage::before { content: "\f8f0"; } +.bi-mailbox-flag::before { content: "\f8f1"; } +.bi-mailbox2-flag::before { content: "\f8f2"; } +.bi-noise-reduction::before { content: "\f8f3"; } +.bi-passport-fill::before { content: "\f8f4"; } +.bi-passport::before { content: "\f8f5"; } +.bi-person-arms-up::before { content: "\f8f6"; } +.bi-person-raised-hand::before { content: "\f8f7"; } +.bi-person-standing-dress::before { content: "\f8f8"; } +.bi-person-standing::before { content: "\f8f9"; } +.bi-person-walking::before { content: "\f8fa"; } +.bi-person-wheelchair::before { content: "\f8fb"; } +.bi-shadows::before { content: "\f8fc"; } +.bi-suitcase-fill::before { content: "\f8fd"; } +.bi-suitcase-lg-fill::before { content: "\f8fe"; } +.bi-suitcase-lg::before { content: "\f8ff"; } +.bi-suitcase::before { content: "\f900"; } +.bi-suitcase2-fill::before { content: "\f901"; } +.bi-suitcase2::before { content: "\f902"; } +.bi-vignette::before { content: "\f903"; } +.bi-bluesky::before { content: "\f7f9"; } +.bi-tux::before { content: "\f904"; } +.bi-beaker-fill::before { content: "\f905"; } +.bi-beaker::before { content: "\f906"; } +.bi-flask-fill::before { content: "\f907"; } +.bi-flask-florence-fill::before { content: "\f908"; } +.bi-flask-florence::before { content: "\f909"; } +.bi-flask::before { content: "\f90a"; } +.bi-leaf-fill::before { content: "\f90b"; } +.bi-leaf::before { content: "\f90c"; } +.bi-measuring-cup-fill::before { content: "\f90d"; } +.bi-measuring-cup::before { content: "\f90e"; } +.bi-unlock2-fill::before { content: "\f90f"; } +.bi-unlock2::before { content: "\f910"; } +.bi-battery-low::before { content: "\f911"; } +.bi-anthropic::before { content: "\f912"; } +.bi-apple-music::before { content: "\f913"; } +.bi-claude::before { content: "\f914"; } +.bi-openai::before { content: "\f915"; } +.bi-perplexity::before { content: "\f916"; } +.bi-css::before { content: "\f917"; } +.bi-javascript::before { content: "\f918"; } +.bi-typescript::before { content: "\f919"; } +.bi-fork-knife::before { content: "\f91a"; } +.bi-globe-americas-fill::before { content: "\f91b"; } +.bi-globe-asia-australia-fill::before { content: "\f91c"; } +.bi-globe-central-south-asia-fill::before { content: "\f91d"; } +.bi-globe-europe-africa-fill::before { content: "\f91e"; } diff --git a/docs/site_libs/bootstrap/bootstrap-icons.woff b/docs/site_libs/bootstrap/bootstrap-icons.woff new file mode 100644 index 0000000000000000000000000000000000000000..a4fa4f024c2171080ebaf3112fccbf90cdb98479 GIT binary patch literal 180288 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 DSDONf literal 0 HcmV?d00001 diff --git a/docs/site_libs/bootstrap/bootstrap.min.js b/docs/site_libs/bootstrap/bootstrap.min.js new file mode 100644 index 0000000..e8f21f7 --- /dev/null +++ b/docs/site_libs/bootstrap/bootstrap.min.js @@ -0,0 +1,7 @@ +/*! + * Bootstrap v5.3.1 (https://getbootstrap.com/) + * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):(t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use strict";const t=new Map,e={set(e,i,n){t.has(e)||t.set(e,new Map);const s=t.get(e);s.has(i)||0===s.size?s.set(i,n):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(s.keys())[0]}.`)},get:(e,i)=>t.has(e)&&t.get(e).get(i)||null,remove(e,i){if(!t.has(e))return;const n=t.get(e);n.delete(i),0===n.size&&t.delete(e)}},i="transitionend",n=t=>(t&&window.CSS&&window.CSS.escape&&(t=t.replace(/#([^\s"#']+)/g,((t,e)=>`#${CSS.escape(e)}`))),t),s=t=>{t.dispatchEvent(new Event(i))},o=t=>!(!t||"object"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:"string"==typeof t&&t.length>0?document.querySelector(n(t)):null,a=t=>{if(!o(t)||0===t.getClientRects().length)return!1;const e="visible"===getComputedStyle(t).getPropertyValue("visibility"),i=t.closest("details:not([open])");if(!i)return e;if(i!==t){const e=t.closest("summary");if(e&&e.parentNode!==i)return!1;if(null===e)return!1}return e},l=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains("disabled")||(void 0!==t.disabled?t.disabled:t.hasAttribute("disabled")&&"false"!==t.getAttribute("disabled")),c=t=>{if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?c(t.parentNode):null},h=()=>{},d=t=>{t.offsetHeight},u=()=>window.jQuery&&!document.body.hasAttribute("data-bs-no-jquery")?window.jQuery:null,f=[],p=()=>"rtl"===document.documentElement.dir,m=t=>{var e;e=()=>{const e=u();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},"loading"===document.readyState?(f.length||document.addEventListener("DOMContentLoaded",(()=>{for(const t of f)t()})),f.push(e)):e()},g=(t,e=[],i=t)=>"function"==typeof t?t(...e):i,_=(t,e,n=!0)=>{if(!n)return void g(t);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(",")[0],i=i.split(",")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(e)+5;let r=!1;const a=({target:n})=>{n===e&&(r=!0,e.removeEventListener(i,a),g(t))};e.addEventListener(i,a),setTimeout((()=>{r||s(e)}),o)},b=(t,e,i,n)=>{const s=t.length;let o=t.indexOf(e);return-1===o?!i&&n?t[s-1]:t[0]:(o+=i?1:-1,n&&(o=(o+s)%s),t[Math.max(0,Math.min(o,s-1))])},v=/[^.]*(?=\..*)\.|.*/,y=/\..*/,w=/::\d+$/,A={};let E=1;const T={mouseenter:"mouseover",mouseleave:"mouseout"},C=new Set(["click","dblclick","mouseup","mousedown","contextmenu","mousewheel","DOMMouseScroll","mouseover","mouseout","mousemove","selectstart","selectend","keydown","keypress","keyup","orientationchange","touchstart","touchmove","touchend","touchcancel","pointerdown","pointermove","pointerup","pointerleave","pointercancel","gesturestart","gesturechange","gestureend","focus","blur","change","reset","select","submit","focusin","focusout","load","unload","beforeunload","resize","move","DOMContentLoaded","readystatechange","error","abort","scroll"]);function O(t,e){return e&&`${e}::${E++}`||t.uidEvent||E++}function x(t){const e=O(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function k(t,e,i=null){return Object.values(t).find((t=>t.callable===e&&t.delegationSelector===i))}function L(t,e,i){const n="string"==typeof e,s=n?i:e||i;let o=I(t);return C.has(o)||(o=t),[n,s,o]}function S(t,e,i,n,s){if("string"!=typeof e||!t)return;let[o,r,a]=L(e,i,n);if(e in T){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};r=t(r)}const l=x(t),c=l[a]||(l[a]={}),h=k(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=O(r,e.replace(v,"")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(const a of o)if(a===r)return P(s,{delegateTarget:r}),n.oneOff&&N.off(t,s.type,e,i),i.apply(r,[s])}}(t,i,r):function(t,e){return function i(n){return P(n,{delegateTarget:t}),i.oneOff&&N.off(t,n.type,e),e.apply(t,[n])}}(t,r);u.delegationSelector=o?i:null,u.callable=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function D(t,e,i,n,s){const o=k(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function $(t,e,i,n){const s=e[i]||{};for(const[o,r]of Object.entries(s))o.includes(n)&&D(t,e,i,r.callable,r.delegationSelector)}function I(t){return t=t.replace(y,""),T[t]||t}const N={on(t,e,i,n){S(t,e,i,n,!1)},one(t,e,i,n){S(t,e,i,n,!0)},off(t,e,i,n){if("string"!=typeof e||!t)return;const[s,o,r]=L(e,i,n),a=r!==e,l=x(t),c=l[r]||{},h=e.startsWith(".");if(void 0===o){if(h)for(const i of Object.keys(l))$(t,l,i,e.slice(1));for(const[i,n]of Object.entries(c)){const s=i.replace(w,"");a&&!e.includes(s)||D(t,l,r,n.callable,n.delegationSelector)}}else{if(!Object.keys(c).length)return;D(t,l,r,o,s?i:null)}},trigger(t,e,i){if("string"!=typeof e||!t)return null;const n=u();let s=null,o=!0,r=!0,a=!1;e!==I(e)&&n&&(s=n.Event(e,i),n(t).trigger(s),o=!s.isPropagationStopped(),r=!s.isImmediatePropagationStopped(),a=s.isDefaultPrevented());const l=P(new Event(e,{bubbles:o,cancelable:!0}),i);return a&&l.preventDefault(),r&&t.dispatchEvent(l),l.defaultPrevented&&s&&s.preventDefault(),l}};function P(t,e={}){for(const[i,n]of Object.entries(e))try{t[i]=n}catch(e){Object.defineProperty(t,i,{configurable:!0,get:()=>n})}return t}function M(t){if("true"===t)return!0;if("false"===t)return!1;if(t===Number(t).toString())return Number(t);if(""===t||"null"===t)return null;if("string"!=typeof t)return t;try{return JSON.parse(decodeURIComponent(t))}catch(e){return t}}function j(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}const F={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${j(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${j(e)}`)},getDataAttributes(t){if(!t)return{};const e={},i=Object.keys(t.dataset).filter((t=>t.startsWith("bs")&&!t.startsWith("bsConfig")));for(const n of i){let i=n.replace(/^bs/,"");i=i.charAt(0).toLowerCase()+i.slice(1,i.length),e[i]=M(t.dataset[n])}return e},getDataAttribute:(t,e)=>M(t.getAttribute(`data-bs-${j(e)}`))};class H{static get Default(){return{}}static get DefaultType(){return{}}static get NAME(){throw new Error('You have to implement the static method "NAME", for each component!')}_getConfig(t){return t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t}_mergeConfigObj(t,e){const i=o(e)?F.getDataAttribute(e,"config"):{};return{...this.constructor.Default,..."object"==typeof i?i:{},...o(e)?F.getDataAttributes(e):{},..."object"==typeof t?t:{}}}_typeCheckConfig(t,e=this.constructor.DefaultType){for(const[n,s]of Object.entries(e)){const e=t[n],r=o(e)?"element":null==(i=e)?`${i}`:Object.prototype.toString.call(i).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(s).test(r))throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${n}" provided type "${r}" but expected type "${s}".`)}var i}}class W extends H{constructor(t,i){super(),(t=r(t))&&(this._element=t,this._config=this._getConfig(i),e.set(this._element,this.constructor.DATA_KEY,this))}dispose(){e.remove(this._element,this.constructor.DATA_KEY),N.off(this._element,this.constructor.EVENT_KEY);for(const t of Object.getOwnPropertyNames(this))this[t]=null}_queueCallback(t,e,i=!0){_(t,e,i)}_getConfig(t){return t=this._mergeConfigObj(t,this._element),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}static getInstance(t){return e.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,"object"==typeof e?e:null)}static get VERSION(){return"5.3.1"}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}static eventName(t){return`${t}${this.EVENT_KEY}`}}const B=t=>{let e=t.getAttribute("data-bs-target");if(!e||"#"===e){let i=t.getAttribute("href");if(!i||!i.includes("#")&&!i.startsWith("."))return null;i.includes("#")&&!i.startsWith("#")&&(i=`#${i.split("#")[1]}`),e=i&&"#"!==i?i.trim():null}return n(e)},z={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode.closest(e);for(;n;)i.push(n),n=n.parentNode.closest(e);return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=["a","button","input","textarea","select","details","[tabindex]",'[contenteditable="true"]'].map((t=>`${t}:not([tabindex^="-"])`)).join(",");return this.find(e,t).filter((t=>!l(t)&&a(t)))},getSelectorFromElement(t){const e=B(t);return e&&z.findOne(e)?e:null},getElementFromSelector(t){const e=B(t);return e?z.findOne(e):null},getMultipleElementsFromSelector(t){const e=B(t);return e?z.find(e):[]}},R=(t,e="hide")=>{const i=`click.dismiss${t.EVENT_KEY}`,n=t.NAME;N.on(document,i,`[data-bs-dismiss="${n}"]`,(function(i){if(["A","AREA"].includes(this.tagName)&&i.preventDefault(),l(this))return;const s=z.getElementFromSelector(this)||this.closest(`.${n}`);t.getOrCreateInstance(s)[e]()}))},q=".bs.alert",V=`close${q}`,K=`closed${q}`;class Q extends W{static get NAME(){return"alert"}close(){if(N.trigger(this._element,V).defaultPrevented)return;this._element.classList.remove("show");const t=this._element.classList.contains("fade");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),N.trigger(this._element,K),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=Q.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}R(Q,"close"),m(Q);const X='[data-bs-toggle="button"]';class Y extends W{static get NAME(){return"button"}toggle(){this._element.setAttribute("aria-pressed",this._element.classList.toggle("active"))}static jQueryInterface(t){return this.each((function(){const e=Y.getOrCreateInstance(this);"toggle"===t&&e[t]()}))}}N.on(document,"click.bs.button.data-api",X,(t=>{t.preventDefault();const e=t.target.closest(X);Y.getOrCreateInstance(e).toggle()})),m(Y);const U=".bs.swipe",G=`touchstart${U}`,J=`touchmove${U}`,Z=`touchend${U}`,tt=`pointerdown${U}`,et=`pointerup${U}`,it={endCallback:null,leftCallback:null,rightCallback:null},nt={endCallback:"(function|null)",leftCallback:"(function|null)",rightCallback:"(function|null)"};class st extends H{constructor(t,e){super(),this._element=t,t&&st.isSupported()&&(this._config=this._getConfig(e),this._deltaX=0,this._supportPointerEvents=Boolean(window.PointerEvent),this._initEvents())}static get Default(){return it}static get DefaultType(){return nt}static get NAME(){return"swipe"}dispose(){N.off(this._element,U)}_start(t){this._supportPointerEvents?this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX):this._deltaX=t.touches[0].clientX}_end(t){this._eventIsPointerPenTouch(t)&&(this._deltaX=t.clientX-this._deltaX),this._handleSwipe(),g(this._config.endCallback)}_move(t){this._deltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this._deltaX}_handleSwipe(){const t=Math.abs(this._deltaX);if(t<=40)return;const e=t/this._deltaX;this._deltaX=0,e&&g(e>0?this._config.rightCallback:this._config.leftCallback)}_initEvents(){this._supportPointerEvents?(N.on(this._element,tt,(t=>this._start(t))),N.on(this._element,et,(t=>this._end(t))),this._element.classList.add("pointer-event")):(N.on(this._element,G,(t=>this._start(t))),N.on(this._element,J,(t=>this._move(t))),N.on(this._element,Z,(t=>this._end(t))))}_eventIsPointerPenTouch(t){return this._supportPointerEvents&&("pen"===t.pointerType||"touch"===t.pointerType)}static isSupported(){return"ontouchstart"in document.documentElement||navigator.maxTouchPoints>0}}const ot=".bs.carousel",rt=".data-api",at="next",lt="prev",ct="left",ht="right",dt=`slide${ot}`,ut=`slid${ot}`,ft=`keydown${ot}`,pt=`mouseenter${ot}`,mt=`mouseleave${ot}`,gt=`dragstart${ot}`,_t=`load${ot}${rt}`,bt=`click${ot}${rt}`,vt="carousel",yt="active",wt=".active",At=".carousel-item",Et=wt+At,Tt={ArrowLeft:ht,ArrowRight:ct},Ct={interval:5e3,keyboard:!0,pause:"hover",ride:!1,touch:!0,wrap:!0},Ot={interval:"(number|boolean)",keyboard:"boolean",pause:"(string|boolean)",ride:"(boolean|string)",touch:"boolean",wrap:"boolean"};class xt extends W{constructor(t,e){super(t,e),this._interval=null,this._activeElement=null,this._isSliding=!1,this.touchTimeout=null,this._swipeHelper=null,this._indicatorsElement=z.findOne(".carousel-indicators",this._element),this._addEventListeners(),this._config.ride===vt&&this.cycle()}static get Default(){return Ct}static get DefaultType(){return Ot}static get NAME(){return"carousel"}next(){this._slide(at)}nextWhenVisible(){!document.hidden&&a(this._element)&&this.next()}prev(){this._slide(lt)}pause(){this._isSliding&&s(this._element),this._clearInterval()}cycle(){this._clearInterval(),this._updateInterval(),this._interval=setInterval((()=>this.nextWhenVisible()),this._config.interval)}_maybeEnableCycle(){this._config.ride&&(this._isSliding?N.one(this._element,ut,(()=>this.cycle())):this.cycle())}to(t){const e=this._getItems();if(t>e.length-1||t<0)return;if(this._isSliding)return void N.one(this._element,ut,(()=>this.to(t)));const i=this._getItemIndex(this._getActive());if(i===t)return;const n=t>i?at:lt;this._slide(n,e[t])}dispose(){this._swipeHelper&&this._swipeHelper.dispose(),super.dispose()}_configAfterMerge(t){return t.defaultInterval=t.interval,t}_addEventListeners(){this._config.keyboard&&N.on(this._element,ft,(t=>this._keydown(t))),"hover"===this._config.pause&&(N.on(this._element,pt,(()=>this.pause())),N.on(this._element,mt,(()=>this._maybeEnableCycle()))),this._config.touch&&st.isSupported()&&this._addTouchEventListeners()}_addTouchEventListeners(){for(const t of z.find(".carousel-item img",this._element))N.on(t,gt,(t=>t.preventDefault()));const t={leftCallback:()=>this._slide(this._directionToOrder(ct)),rightCallback:()=>this._slide(this._directionToOrder(ht)),endCallback:()=>{"hover"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((()=>this._maybeEnableCycle()),500+this._config.interval))}};this._swipeHelper=new st(this._element,t)}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=Tt[t.key];e&&(t.preventDefault(),this._slide(this._directionToOrder(e)))}_getItemIndex(t){return this._getItems().indexOf(t)}_setActiveIndicatorElement(t){if(!this._indicatorsElement)return;const e=z.findOne(wt,this._indicatorsElement);e.classList.remove(yt),e.removeAttribute("aria-current");const i=z.findOne(`[data-bs-slide-to="${t}"]`,this._indicatorsElement);i&&(i.classList.add(yt),i.setAttribute("aria-current","true"))}_updateInterval(){const t=this._activeElement||this._getActive();if(!t)return;const e=Number.parseInt(t.getAttribute("data-bs-interval"),10);this._config.interval=e||this._config.defaultInterval}_slide(t,e=null){if(this._isSliding)return;const i=this._getActive(),n=t===at,s=e||b(this._getItems(),i,n,this._config.wrap);if(s===i)return;const o=this._getItemIndex(s),r=e=>N.trigger(this._element,e,{relatedTarget:s,direction:this._orderToDirection(t),from:this._getItemIndex(i),to:o});if(r(dt).defaultPrevented)return;if(!i||!s)return;const a=Boolean(this._interval);this.pause(),this._isSliding=!0,this._setActiveIndicatorElement(o),this._activeElement=s;const l=n?"carousel-item-start":"carousel-item-end",c=n?"carousel-item-next":"carousel-item-prev";s.classList.add(c),d(s),i.classList.add(l),s.classList.add(l),this._queueCallback((()=>{s.classList.remove(l,c),s.classList.add(yt),i.classList.remove(yt,c,l),this._isSliding=!1,r(ut)}),i,this._isAnimated()),a&&this.cycle()}_isAnimated(){return this._element.classList.contains("slide")}_getActive(){return z.findOne(Et,this._element)}_getItems(){return z.find(At,this._element)}_clearInterval(){this._interval&&(clearInterval(this._interval),this._interval=null)}_directionToOrder(t){return p()?t===ct?lt:at:t===ct?at:lt}_orderToDirection(t){return p()?t===lt?ct:ht:t===lt?ht:ct}static jQueryInterface(t){return this.each((function(){const e=xt.getOrCreateInstance(this,t);if("number"!=typeof t){if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}else e.to(t)}))}}N.on(document,bt,"[data-bs-slide], [data-bs-slide-to]",(function(t){const e=z.getElementFromSelector(this);if(!e||!e.classList.contains(vt))return;t.preventDefault();const i=xt.getOrCreateInstance(e),n=this.getAttribute("data-bs-slide-to");return n?(i.to(n),void i._maybeEnableCycle()):"next"===F.getDataAttribute(this,"slide")?(i.next(),void i._maybeEnableCycle()):(i.prev(),void i._maybeEnableCycle())})),N.on(window,_t,(()=>{const t=z.find('[data-bs-ride="carousel"]');for(const e of t)xt.getOrCreateInstance(e)})),m(xt);const kt=".bs.collapse",Lt=`show${kt}`,St=`shown${kt}`,Dt=`hide${kt}`,$t=`hidden${kt}`,It=`click${kt}.data-api`,Nt="show",Pt="collapse",Mt="collapsing",jt=`:scope .${Pt} .${Pt}`,Ft='[data-bs-toggle="collapse"]',Ht={parent:null,toggle:!0},Wt={parent:"(null|element)",toggle:"boolean"};class Bt extends W{constructor(t,e){super(t,e),this._isTransitioning=!1,this._triggerArray=[];const i=z.find(Ft);for(const t of i){const e=z.getSelectorFromElement(t),i=z.find(e).filter((t=>t===this._element));null!==e&&i.length&&this._triggerArray.push(t)}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return Ht}static get DefaultType(){return Wt}static get NAME(){return"collapse"}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t=[];if(this._config.parent&&(t=this._getFirstLevelChildren(".collapse.show, .collapse.collapsing").filter((t=>t!==this._element)).map((t=>Bt.getOrCreateInstance(t,{toggle:!1})))),t.length&&t[0]._isTransitioning)return;if(N.trigger(this._element,Lt).defaultPrevented)return;for(const e of t)e.hide();const e=this._getDimension();this._element.classList.remove(Pt),this._element.classList.add(Mt),this._element.style[e]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const i=`scroll${e[0].toUpperCase()+e.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Mt),this._element.classList.add(Pt,Nt),this._element.style[e]="",N.trigger(this._element,St)}),this._element,!0),this._element.style[e]=`${this._element[i]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(N.trigger(this._element,Dt).defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,d(this._element),this._element.classList.add(Mt),this._element.classList.remove(Pt,Nt);for(const t of this._triggerArray){const e=z.getElementFromSelector(t);e&&!this._isShown(e)&&this._addAriaAndCollapsedClass([t],!1)}this._isTransitioning=!0,this._element.style[t]="",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(Mt),this._element.classList.add(Pt),N.trigger(this._element,$t)}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(Nt)}_configAfterMerge(t){return t.toggle=Boolean(t.toggle),t.parent=r(t.parent),t}_getDimension(){return this._element.classList.contains("collapse-horizontal")?"width":"height"}_initializeChildren(){if(!this._config.parent)return;const t=this._getFirstLevelChildren(Ft);for(const e of t){const t=z.getElementFromSelector(e);t&&this._addAriaAndCollapsedClass([e],this._isShown(t))}}_getFirstLevelChildren(t){const e=z.find(jt,this._config.parent);return z.find(t,this._config.parent).filter((t=>!e.includes(t)))}_addAriaAndCollapsedClass(t,e){if(t.length)for(const i of t)i.classList.toggle("collapsed",!e),i.setAttribute("aria-expanded",e)}static jQueryInterface(t){const e={};return"string"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1),this.each((function(){const i=Bt.getOrCreateInstance(this,e);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t]()}}))}}N.on(document,It,Ft,(function(t){("A"===t.target.tagName||t.delegateTarget&&"A"===t.delegateTarget.tagName)&&t.preventDefault();for(const t of z.getMultipleElementsFromSelector(this))Bt.getOrCreateInstance(t,{toggle:!1}).toggle()})),m(Bt);var zt="top",Rt="bottom",qt="right",Vt="left",Kt="auto",Qt=[zt,Rt,qt,Vt],Xt="start",Yt="end",Ut="clippingParents",Gt="viewport",Jt="popper",Zt="reference",te=Qt.reduce((function(t,e){return t.concat([e+"-"+Xt,e+"-"+Yt])}),[]),ee=[].concat(Qt,[Kt]).reduce((function(t,e){return t.concat([e,e+"-"+Xt,e+"-"+Yt])}),[]),ie="beforeRead",ne="read",se="afterRead",oe="beforeMain",re="main",ae="afterMain",le="beforeWrite",ce="write",he="afterWrite",de=[ie,ne,se,oe,re,ae,le,ce,he];function ue(t){return t?(t.nodeName||"").toLowerCase():null}function fe(t){if(null==t)return window;if("[object Window]"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function pe(t){return t instanceof fe(t).Element||t instanceof Element}function me(t){return t instanceof fe(t).HTMLElement||t instanceof HTMLElement}function ge(t){return"undefined"!=typeof ShadowRoot&&(t instanceof fe(t).ShadowRoot||t instanceof ShadowRoot)}const _e={name:"applyStyles",enabled:!0,phase:"write",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];me(s)&&ue(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?"":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]="",t}),{});me(n)&&ue(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:["computeStyles"]};function be(t){return t.split("-")[0]}var ve=Math.max,ye=Math.min,we=Math.round;function Ae(){var t=navigator.userAgentData;return null!=t&&t.brands&&Array.isArray(t.brands)?t.brands.map((function(t){return t.brand+"/"+t.version})).join(" "):navigator.userAgent}function Ee(){return!/^((?!chrome|android).)*safari/i.test(Ae())}function Te(t,e,i){void 0===e&&(e=!1),void 0===i&&(i=!1);var n=t.getBoundingClientRect(),s=1,o=1;e&&me(t)&&(s=t.offsetWidth>0&&we(n.width)/t.offsetWidth||1,o=t.offsetHeight>0&&we(n.height)/t.offsetHeight||1);var r=(pe(t)?fe(t):window).visualViewport,a=!Ee()&&i,l=(n.left+(a&&r?r.offsetLeft:0))/s,c=(n.top+(a&&r?r.offsetTop:0))/o,h=n.width/s,d=n.height/o;return{width:h,height:d,top:c,right:l+h,bottom:c+d,left:l,x:l,y:c}}function Ce(t){var e=Te(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Oe(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&ge(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function xe(t){return fe(t).getComputedStyle(t)}function ke(t){return["table","td","th"].indexOf(ue(t))>=0}function Le(t){return((pe(t)?t.ownerDocument:t.document)||window.document).documentElement}function Se(t){return"html"===ue(t)?t:t.assignedSlot||t.parentNode||(ge(t)?t.host:null)||Le(t)}function De(t){return me(t)&&"fixed"!==xe(t).position?t.offsetParent:null}function $e(t){for(var e=fe(t),i=De(t);i&&ke(i)&&"static"===xe(i).position;)i=De(i);return i&&("html"===ue(i)||"body"===ue(i)&&"static"===xe(i).position)?e:i||function(t){var e=/firefox/i.test(Ae());if(/Trident/i.test(Ae())&&me(t)&&"fixed"===xe(t).position)return null;var i=Se(t);for(ge(i)&&(i=i.host);me(i)&&["html","body"].indexOf(ue(i))<0;){var n=xe(i);if("none"!==n.transform||"none"!==n.perspective||"paint"===n.contain||-1!==["transform","perspective"].indexOf(n.willChange)||e&&"filter"===n.willChange||e&&n.filter&&"none"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function Ie(t){return["top","bottom"].indexOf(t)>=0?"x":"y"}function Ne(t,e,i){return ve(t,ye(e,i))}function Pe(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function Me(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const je={name:"arrow",enabled:!0,phase:"main",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=be(i.placement),l=Ie(a),c=[Vt,qt].indexOf(a)>=0?"height":"width";if(o&&r){var h=function(t,e){return Pe("number"!=typeof(t="function"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:Me(t,Qt))}(s.padding,i),d=Ce(o),u="y"===l?zt:Vt,f="y"===l?Rt:qt,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=$e(o),_=g?"y"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,A=Ne(v,w,y),E=l;i.modifiersData[n]=((e={})[E]=A,e.centerOffset=A-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?"[data-popper-arrow]":i;null!=n&&("string"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Oe(e.elements.popper,n)&&(e.elements.arrow=n)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function Fe(t){return t.split("-")[1]}var He={top:"auto",right:"auto",bottom:"auto",left:"auto"};function We(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=t.isFixed,u=r.x,f=void 0===u?0:u,p=r.y,m=void 0===p?0:p,g="function"==typeof h?h({x:f,y:m}):{x:f,y:m};f=g.x,m=g.y;var _=r.hasOwnProperty("x"),b=r.hasOwnProperty("y"),v=Vt,y=zt,w=window;if(c){var A=$e(i),E="clientHeight",T="clientWidth";A===fe(i)&&"static"!==xe(A=Le(i)).position&&"absolute"===a&&(E="scrollHeight",T="scrollWidth"),(s===zt||(s===Vt||s===qt)&&o===Yt)&&(y=Rt,m-=(d&&A===w&&w.visualViewport?w.visualViewport.height:A[E])-n.height,m*=l?1:-1),s!==Vt&&(s!==zt&&s!==Rt||o!==Yt)||(v=qt,f-=(d&&A===w&&w.visualViewport?w.visualViewport.width:A[T])-n.width,f*=l?1:-1)}var C,O=Object.assign({position:a},c&&He),x=!0===h?function(t,e){var i=t.x,n=t.y,s=e.devicePixelRatio||1;return{x:we(i*s)/s||0,y:we(n*s)/s||0}}({x:f,y:m},fe(i)):{x:f,y:m};return f=x.x,m=x.y,l?Object.assign({},O,((C={})[y]=b?"0":"",C[v]=_?"0":"",C.transform=(w.devicePixelRatio||1)<=1?"translate("+f+"px, "+m+"px)":"translate3d("+f+"px, "+m+"px, 0)",C)):Object.assign({},O,((e={})[y]=b?m+"px":"",e[v]=_?f+"px":"",e.transform="",e))}const Be={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:be(e.placement),variation:Fe(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s,isFixed:"fixed"===e.options.strategy};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,We(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,We(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement})},data:{}};var ze={passive:!0};const Re={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=fe(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener("scroll",i.update,ze)})),a&&l.addEventListener("resize",i.update,ze),function(){o&&c.forEach((function(t){t.removeEventListener("scroll",i.update,ze)})),a&&l.removeEventListener("resize",i.update,ze)}},data:{}};var qe={left:"right",right:"left",bottom:"top",top:"bottom"};function Ve(t){return t.replace(/left|right|bottom|top/g,(function(t){return qe[t]}))}var Ke={start:"end",end:"start"};function Qe(t){return t.replace(/start|end/g,(function(t){return Ke[t]}))}function Xe(t){var e=fe(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function Ye(t){return Te(Le(t)).left+Xe(t).scrollLeft}function Ue(t){var e=xe(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ge(t){return["html","body","#document"].indexOf(ue(t))>=0?t.ownerDocument.body:me(t)&&Ue(t)?t:Ge(Se(t))}function Je(t,e){var i;void 0===e&&(e=[]);var n=Ge(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=fe(n),r=s?[o].concat(o.visualViewport||[],Ue(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Je(Se(r)))}function Ze(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function ti(t,e,i){return e===Gt?Ze(function(t,e){var i=fe(t),n=Le(t),s=i.visualViewport,o=n.clientWidth,r=n.clientHeight,a=0,l=0;if(s){o=s.width,r=s.height;var c=Ee();(c||!c&&"fixed"===e)&&(a=s.offsetLeft,l=s.offsetTop)}return{width:o,height:r,x:a+Ye(t),y:l}}(t,i)):pe(e)?function(t,e){var i=Te(t,!1,"fixed"===e);return i.top=i.top+t.clientTop,i.left=i.left+t.clientLeft,i.bottom=i.top+t.clientHeight,i.right=i.left+t.clientWidth,i.width=t.clientWidth,i.height=t.clientHeight,i.x=i.left,i.y=i.top,i}(e,i):Ze(function(t){var e,i=Le(t),n=Xe(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=ve(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ve(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+Ye(t),l=-n.scrollTop;return"rtl"===xe(s||i).direction&&(a+=ve(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Le(t)))}function ei(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?be(s):null,r=s?Fe(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case zt:e={x:a,y:i.y-n.height};break;case Rt:e={x:a,y:i.y+i.height};break;case qt:e={x:i.x+i.width,y:l};break;case Vt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?Ie(o):null;if(null!=c){var h="y"===c?"height":"width";switch(r){case Xt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Yt:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ii(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.strategy,r=void 0===o?t.strategy:o,a=i.boundary,l=void 0===a?Ut:a,c=i.rootBoundary,h=void 0===c?Gt:c,d=i.elementContext,u=void 0===d?Jt:d,f=i.altBoundary,p=void 0!==f&&f,m=i.padding,g=void 0===m?0:m,_=Pe("number"!=typeof g?g:Me(g,Qt)),b=u===Jt?Zt:Jt,v=t.rects.popper,y=t.elements[p?b:u],w=function(t,e,i,n){var s="clippingParents"===e?function(t){var e=Je(Se(t)),i=["absolute","fixed"].indexOf(xe(t).position)>=0&&me(t)?$e(t):t;return pe(i)?e.filter((function(t){return pe(t)&&Oe(t,i)&&"body"!==ue(t)})):[]}(t):[].concat(e),o=[].concat(s,[i]),r=o[0],a=o.reduce((function(e,i){var s=ti(t,i,n);return e.top=ve(s.top,e.top),e.right=ye(s.right,e.right),e.bottom=ye(s.bottom,e.bottom),e.left=ve(s.left,e.left),e}),ti(t,r,n));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}(pe(y)?y:y.contextElement||Le(t.elements.popper),l,h,r),A=Te(t.elements.reference),E=ei({reference:A,element:v,strategy:"absolute",placement:s}),T=Ze(Object.assign({},v,E)),C=u===Jt?T:A,O={top:w.top-C.top+_.top,bottom:C.bottom-w.bottom+_.bottom,left:w.left-C.left+_.left,right:C.right-w.right+_.right},x=t.modifiersData.offset;if(u===Jt&&x){var k=x[s];Object.keys(O).forEach((function(t){var e=[qt,Rt].indexOf(t)>=0?1:-1,i=[zt,Rt].indexOf(t)>=0?"y":"x";O[t]+=k[i]*e}))}return O}function ni(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?ee:l,h=Fe(n),d=h?a?te:te.filter((function(t){return Fe(t)===h})):Qt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ii(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[be(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const si={name:"flip",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=be(g),b=l||(_!==g&&p?function(t){if(be(t)===Kt)return[];var e=Ve(t);return[Qe(t),e,Qe(e)]}(g):[Ve(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(be(i)===Kt?ni(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,A=new Map,E=!0,T=v[0],C=0;C=0,S=L?"width":"height",D=ii(e,{placement:O,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),$=L?k?qt:Vt:k?Rt:zt;y[S]>w[S]&&($=Ve($));var I=Ve($),N=[];if(o&&N.push(D[x]<=0),a&&N.push(D[$]<=0,D[I]<=0),N.every((function(t){return t}))){T=O,E=!1;break}A.set(O,N)}if(E)for(var P=function(t){var e=v.find((function(e){var i=A.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,"break"},M=p?3:1;M>0&&"break"!==P(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function oi(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function ri(t){return[zt,qt,Rt,Vt].some((function(e){return t[e]>=0}))}const ai={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ii(e,{elementContext:"reference"}),a=ii(e,{altBoundary:!0}),l=oi(r,n),c=oi(a,s,o),h=ri(l),d=ri(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":h,"data-popper-escaped":d})}},li={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=ee.reduce((function(t,i){return t[i]=function(t,e,i){var n=be(t),s=[Vt,zt].indexOf(n)>=0?-1:1,o="function"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[Vt,qt].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},ci={name:"popperOffsets",enabled:!0,phase:"read",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=ei({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement})},data:{}},hi={name:"preventOverflow",enabled:!0,phase:"main",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ii(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=be(e.placement),b=Fe(e.placement),v=!b,y=Ie(_),w="x"===y?"y":"x",A=e.modifiersData.popperOffsets,E=e.rects.reference,T=e.rects.popper,C="function"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,O="number"==typeof C?{mainAxis:C,altAxis:C}:Object.assign({mainAxis:0,altAxis:0},C),x=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,k={x:0,y:0};if(A){if(o){var L,S="y"===y?zt:Vt,D="y"===y?Rt:qt,$="y"===y?"height":"width",I=A[y],N=I+g[S],P=I-g[D],M=f?-T[$]/2:0,j=b===Xt?E[$]:T[$],F=b===Xt?-T[$]:-E[$],H=e.elements.arrow,W=f&&H?Ce(H):{width:0,height:0},B=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},z=B[S],R=B[D],q=Ne(0,E[$],W[$]),V=v?E[$]/2-M-q-z-O.mainAxis:j-q-z-O.mainAxis,K=v?-E[$]/2+M+q+R+O.mainAxis:F+q+R+O.mainAxis,Q=e.elements.arrow&&$e(e.elements.arrow),X=Q?"y"===y?Q.clientTop||0:Q.clientLeft||0:0,Y=null!=(L=null==x?void 0:x[y])?L:0,U=I+K-Y,G=Ne(f?ye(N,I+V-Y-X):N,I,f?ve(P,U):P);A[y]=G,k[y]=G-I}if(a){var J,Z="x"===y?zt:Vt,tt="x"===y?Rt:qt,et=A[w],it="y"===w?"height":"width",nt=et+g[Z],st=et-g[tt],ot=-1!==[zt,Vt].indexOf(_),rt=null!=(J=null==x?void 0:x[w])?J:0,at=ot?nt:et-E[it]-T[it]-rt+O.altAxis,lt=ot?et+E[it]+T[it]-rt-O.altAxis:st,ct=f&&ot?function(t,e,i){var n=Ne(t,e,i);return n>i?i:n}(at,et,lt):Ne(f?at:nt,et,f?lt:st);A[w]=ct,k[w]=ct-et}e.modifiersData[n]=k}},requiresIfExists:["offset"]};function di(t,e,i){void 0===i&&(i=!1);var n,s,o=me(e),r=me(e)&&function(t){var e=t.getBoundingClientRect(),i=we(e.width)/t.offsetWidth||1,n=we(e.height)/t.offsetHeight||1;return 1!==i||1!==n}(e),a=Le(e),l=Te(t,r,i),c={scrollLeft:0,scrollTop:0},h={x:0,y:0};return(o||!o&&!i)&&(("body"!==ue(e)||Ue(a))&&(c=(n=e)!==fe(n)&&me(n)?{scrollLeft:(s=n).scrollLeft,scrollTop:s.scrollTop}:Xe(n)),me(e)?((h=Te(e,!0)).x+=e.clientLeft,h.y+=e.clientTop):a&&(h.x=Ye(a))),{x:l.left+c.scrollLeft-h.x,y:l.top+c.scrollTop-h.y,width:l.width,height:l.height}}function ui(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var fi={placement:"bottom",modifiers:[],strategy:"absolute"};function pi(){for(var t=arguments.length,e=new Array(t),i=0;iNumber.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"offset",options:{offset:this._getOffset()}}]};return(this._inNavbar||"static"===this._config.display)&&(F.setDataAttribute(this._menu,"popper","static"),t.modifiers=[{name:"applyStyles",enabled:!1}]),{...t,...g(this._config.popperConfig,[t])}}_selectMenuItem({key:t,target:e}){const i=z.find(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",this._menu).filter((t=>a(t)));i.length&&b(i,e,t===Ti,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=qi.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}static clearMenus(t){if(2===t.button||"keyup"===t.type&&"Tab"!==t.key)return;const e=z.find(Ni);for(const i of e){const e=qi.getInstance(i);if(!e||!1===e._config.autoClose)continue;const n=t.composedPath(),s=n.includes(e._menu);if(n.includes(e._element)||"inside"===e._config.autoClose&&!s||"outside"===e._config.autoClose&&s)continue;if(e._menu.contains(t.target)&&("keyup"===t.type&&"Tab"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;const o={relatedTarget:e._element};"click"===t.type&&(o.clickEvent=t),e._completeHide(o)}}static dataApiKeydownHandler(t){const e=/input|textarea/i.test(t.target.tagName),i="Escape"===t.key,n=[Ei,Ti].includes(t.key);if(!n&&!i)return;if(e&&!i)return;t.preventDefault();const s=this.matches(Ii)?this:z.prev(this,Ii)[0]||z.next(this,Ii)[0]||z.findOne(Ii,t.delegateTarget.parentNode),o=qi.getOrCreateInstance(s);if(n)return t.stopPropagation(),o.show(),void o._selectMenuItem(t);o._isShown()&&(t.stopPropagation(),o.hide(),s.focus())}}N.on(document,Si,Ii,qi.dataApiKeydownHandler),N.on(document,Si,Pi,qi.dataApiKeydownHandler),N.on(document,Li,qi.clearMenus),N.on(document,Di,qi.clearMenus),N.on(document,Li,Ii,(function(t){t.preventDefault(),qi.getOrCreateInstance(this).toggle()})),m(qi);const Vi="backdrop",Ki="show",Qi=`mousedown.bs.${Vi}`,Xi={className:"modal-backdrop",clickCallback:null,isAnimated:!1,isVisible:!0,rootElement:"body"},Yi={className:"string",clickCallback:"(function|null)",isAnimated:"boolean",isVisible:"boolean",rootElement:"(element|string)"};class Ui extends H{constructor(t){super(),this._config=this._getConfig(t),this._isAppended=!1,this._element=null}static get Default(){return Xi}static get DefaultType(){return Yi}static get NAME(){return Vi}show(t){if(!this._config.isVisible)return void g(t);this._append();const e=this._getElement();this._config.isAnimated&&d(e),e.classList.add(Ki),this._emulateAnimation((()=>{g(t)}))}hide(t){this._config.isVisible?(this._getElement().classList.remove(Ki),this._emulateAnimation((()=>{this.dispose(),g(t)}))):g(t)}dispose(){this._isAppended&&(N.off(this._element,Qi),this._element.remove(),this._isAppended=!1)}_getElement(){if(!this._element){const t=document.createElement("div");t.className=this._config.className,this._config.isAnimated&&t.classList.add("fade"),this._element=t}return this._element}_configAfterMerge(t){return t.rootElement=r(t.rootElement),t}_append(){if(this._isAppended)return;const t=this._getElement();this._config.rootElement.append(t),N.on(t,Qi,(()=>{g(this._config.clickCallback)})),this._isAppended=!0}_emulateAnimation(t){_(t,this._getElement(),this._config.isAnimated)}}const Gi=".bs.focustrap",Ji=`focusin${Gi}`,Zi=`keydown.tab${Gi}`,tn="backward",en={autofocus:!0,trapElement:null},nn={autofocus:"boolean",trapElement:"element"};class sn extends H{constructor(t){super(),this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}static get Default(){return en}static get DefaultType(){return nn}static get NAME(){return"focustrap"}activate(){this._isActive||(this._config.autofocus&&this._config.trapElement.focus(),N.off(document,Gi),N.on(document,Ji,(t=>this._handleFocusin(t))),N.on(document,Zi,(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,N.off(document,Gi))}_handleFocusin(t){const{trapElement:e}=this._config;if(t.target===document||t.target===e||e.contains(t.target))return;const i=z.focusableChildren(e);0===i.length?e.focus():this._lastTabNavDirection===tn?i[i.length-1].focus():i[0].focus()}_handleKeydown(t){"Tab"===t.key&&(this._lastTabNavDirection=t.shiftKey?tn:"forward")}}const on=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",rn=".sticky-top",an="padding-right",ln="margin-right";class cn{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,an,(e=>e+t)),this._setElementAttributes(on,an,(e=>e+t)),this._setElementAttributes(rn,ln,(e=>e-t))}reset(){this._resetElementAttributes(this._element,"overflow"),this._resetElementAttributes(this._element,an),this._resetElementAttributes(on,an),this._resetElementAttributes(rn,ln)}isOverflowing(){return this.getWidth()>0}_disableOverFlow(){this._saveInitialAttribute(this._element,"overflow"),this._element.style.overflow="hidden"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t).getPropertyValue(e);t.style.setProperty(e,`${i(Number.parseFloat(s))}px`)}))}_saveInitialAttribute(t,e){const i=t.style.getPropertyValue(e);i&&F.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=F.getDataAttribute(t,e);null!==i?(F.removeDataAttribute(t,e),t.style.setProperty(e,i)):t.style.removeProperty(e)}))}_applyManipulationCallback(t,e){if(o(t))e(t);else for(const i of z.find(t,this._element))e(i)}}const hn=".bs.modal",dn=`hide${hn}`,un=`hidePrevented${hn}`,fn=`hidden${hn}`,pn=`show${hn}`,mn=`shown${hn}`,gn=`resize${hn}`,_n=`click.dismiss${hn}`,bn=`mousedown.dismiss${hn}`,vn=`keydown.dismiss${hn}`,yn=`click${hn}.data-api`,wn="modal-open",An="show",En="modal-static",Tn={backdrop:!0,focus:!0,keyboard:!0},Cn={backdrop:"(boolean|string)",focus:"boolean",keyboard:"boolean"};class On extends W{constructor(t,e){super(t,e),this._dialog=z.findOne(".modal-dialog",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._isTransitioning=!1,this._scrollBar=new cn,this._addEventListeners()}static get Default(){return Tn}static get DefaultType(){return Cn}static get NAME(){return"modal"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||N.trigger(this._element,pn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isTransitioning=!0,this._scrollBar.hide(),document.body.classList.add(wn),this._adjustDialog(),this._backdrop.show((()=>this._showElement(t))))}hide(){this._isShown&&!this._isTransitioning&&(N.trigger(this._element,dn).defaultPrevented||(this._isShown=!1,this._isTransitioning=!0,this._focustrap.deactivate(),this._element.classList.remove(An),this._queueCallback((()=>this._hideModal()),this._element,this._isAnimated())))}dispose(){N.off(window,hn),N.off(this._dialog,hn),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new Ui({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_showElement(t){document.body.contains(this._element)||document.body.append(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.scrollTop=0;const e=z.findOne(".modal-body",this._dialog);e&&(e.scrollTop=0),d(this._element),this._element.classList.add(An),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,N.trigger(this._element,mn,{relatedTarget:t})}),this._dialog,this._isAnimated())}_addEventListeners(){N.on(this._element,vn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():this._triggerBackdropTransition())})),N.on(window,gn,(()=>{this._isShown&&!this._isTransitioning&&this._adjustDialog()})),N.on(this._element,bn,(t=>{N.one(this._element,_n,(e=>{this._element===t.target&&this._element===e.target&&("static"!==this._config.backdrop?this._config.backdrop&&this.hide():this._triggerBackdropTransition())}))}))}_hideModal(){this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(wn),this._resetAdjustments(),this._scrollBar.reset(),N.trigger(this._element,fn)}))}_isAnimated(){return this._element.classList.contains("fade")}_triggerBackdropTransition(){if(N.trigger(this._element,un).defaultPrevented)return;const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._element.style.overflowY;"hidden"===e||this._element.classList.contains(En)||(t||(this._element.style.overflowY="hidden"),this._element.classList.add(En),this._queueCallback((()=>{this._element.classList.remove(En),this._queueCallback((()=>{this._element.style.overflowY=e}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;if(i&&!t){const t=p()?"paddingLeft":"paddingRight";this._element.style[t]=`${e}px`}if(!i&&t){const t=p()?"paddingRight":"paddingLeft";this._element.style[t]=`${e}px`}}_resetAdjustments(){this._element.style.paddingLeft="",this._element.style.paddingRight=""}static jQueryInterface(t,e){return this.each((function(){const i=On.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===i[t])throw new TypeError(`No method named "${t}"`);i[t](e)}}))}}N.on(document,yn,'[data-bs-toggle="modal"]',(function(t){const e=z.getElementFromSelector(this);["A","AREA"].includes(this.tagName)&&t.preventDefault(),N.one(e,pn,(t=>{t.defaultPrevented||N.one(e,fn,(()=>{a(this)&&this.focus()}))}));const i=z.findOne(".modal.show");i&&On.getInstance(i).hide(),On.getOrCreateInstance(e).toggle(this)})),R(On),m(On);const xn=".bs.offcanvas",kn=".data-api",Ln=`load${xn}${kn}`,Sn="show",Dn="showing",$n="hiding",In=".offcanvas.show",Nn=`show${xn}`,Pn=`shown${xn}`,Mn=`hide${xn}`,jn=`hidePrevented${xn}`,Fn=`hidden${xn}`,Hn=`resize${xn}`,Wn=`click${xn}${kn}`,Bn=`keydown.dismiss${xn}`,zn={backdrop:!0,keyboard:!0,scroll:!1},Rn={backdrop:"(boolean|string)",keyboard:"boolean",scroll:"boolean"};class qn extends W{constructor(t,e){super(t,e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get Default(){return zn}static get DefaultType(){return Rn}static get NAME(){return"offcanvas"}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||N.trigger(this._element,Nn,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._backdrop.show(),this._config.scroll||(new cn).hide(),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),this._element.classList.add(Dn),this._queueCallback((()=>{this._config.scroll&&!this._config.backdrop||this._focustrap.activate(),this._element.classList.add(Sn),this._element.classList.remove(Dn),N.trigger(this._element,Pn,{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(N.trigger(this._element,Mn).defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.add($n),this._backdrop.hide(),this._queueCallback((()=>{this._element.classList.remove(Sn,$n),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._config.scroll||(new cn).reset(),N.trigger(this._element,Fn)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_initializeBackDrop(){const t=Boolean(this._config.backdrop);return new Ui({className:"offcanvas-backdrop",isVisible:t,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:t?()=>{"static"!==this._config.backdrop?this.hide():N.trigger(this._element,jn)}:null})}_initializeFocusTrap(){return new sn({trapElement:this._element})}_addEventListeners(){N.on(this._element,Bn,(t=>{"Escape"===t.key&&(this._config.keyboard?this.hide():N.trigger(this._element,jn))}))}static jQueryInterface(t){return this.each((function(){const e=qn.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}N.on(document,Wn,'[data-bs-toggle="offcanvas"]',(function(t){const e=z.getElementFromSelector(this);if(["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this))return;N.one(e,Fn,(()=>{a(this)&&this.focus()}));const i=z.findOne(In);i&&i!==e&&qn.getInstance(i).hide(),qn.getOrCreateInstance(e).toggle(this)})),N.on(window,Ln,(()=>{for(const t of z.find(In))qn.getOrCreateInstance(t).show()})),N.on(window,Hn,(()=>{for(const t of z.find("[aria-modal][class*=show][class*=offcanvas-]"))"fixed"!==getComputedStyle(t).position&&qn.getOrCreateInstance(t).hide()})),R(qn),m(qn);const Vn={"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},Kn=new Set(["background","cite","href","itemtype","longdesc","poster","src","xlink:href"]),Qn=/^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i,Xn=(t,e)=>{const i=t.nodeName.toLowerCase();return e.includes(i)?!Kn.has(i)||Boolean(Qn.test(t.nodeValue)):e.filter((t=>t instanceof RegExp)).some((t=>t.test(i)))},Yn={allowList:Vn,content:{},extraClass:"",html:!1,sanitize:!0,sanitizeFn:null,template:"
"},Un={allowList:"object",content:"object",extraClass:"(string|function)",html:"boolean",sanitize:"boolean",sanitizeFn:"(null|function)",template:"string"},Gn={entry:"(string|element|function|null)",selector:"(string|element)"};class Jn extends H{constructor(t){super(),this._config=this._getConfig(t)}static get Default(){return Yn}static get DefaultType(){return Un}static get NAME(){return"TemplateFactory"}getContent(){return Object.values(this._config.content).map((t=>this._resolvePossibleFunction(t))).filter(Boolean)}hasContent(){return this.getContent().length>0}changeContent(t){return this._checkContent(t),this._config.content={...this._config.content,...t},this}toHtml(){const t=document.createElement("div");t.innerHTML=this._maybeSanitize(this._config.template);for(const[e,i]of Object.entries(this._config.content))this._setContent(t,i,e);const e=t.children[0],i=this._resolvePossibleFunction(this._config.extraClass);return i&&e.classList.add(...i.split(" ")),e}_typeCheckConfig(t){super._typeCheckConfig(t),this._checkContent(t.content)}_checkContent(t){for(const[e,i]of Object.entries(t))super._typeCheckConfig({selector:e,entry:i},Gn)}_setContent(t,e,i){const n=z.findOne(i,t);n&&((e=this._resolvePossibleFunction(e))?o(e)?this._putElementInTemplate(r(e),n):this._config.html?n.innerHTML=this._maybeSanitize(e):n.textContent=e:n.remove())}_maybeSanitize(t){return this._config.sanitize?function(t,e,i){if(!t.length)return t;if(i&&"function"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,"text/html"),s=[].concat(...n.body.querySelectorAll("*"));for(const t of s){const i=t.nodeName.toLowerCase();if(!Object.keys(e).includes(i)){t.remove();continue}const n=[].concat(...t.attributes),s=[].concat(e["*"]||[],e[i]||[]);for(const e of n)Xn(e,s)||t.removeAttribute(e.nodeName)}return n.body.innerHTML}(t,this._config.allowList,this._config.sanitizeFn):t}_resolvePossibleFunction(t){return g(t,[this])}_putElementInTemplate(t,e){if(this._config.html)return e.innerHTML="",void e.append(t);e.textContent=t.textContent}}const Zn=new Set(["sanitize","allowList","sanitizeFn"]),ts="fade",es="show",is=".modal",ns="hide.bs.modal",ss="hover",os="focus",rs={AUTO:"auto",TOP:"top",RIGHT:p()?"left":"right",BOTTOM:"bottom",LEFT:p()?"right":"left"},as={allowList:Vn,animation:!0,boundary:"clippingParents",container:!1,customClass:"",delay:0,fallbackPlacements:["top","right","bottom","left"],html:!1,offset:[0,6],placement:"top",popperConfig:null,sanitize:!0,sanitizeFn:null,selector:!1,template:'',title:"",trigger:"hover focus"},ls={allowList:"object",animation:"boolean",boundary:"(string|element)",container:"(string|element|boolean)",customClass:"(string|function)",delay:"(number|object)",fallbackPlacements:"array",html:"boolean",offset:"(array|string|function)",placement:"(string|function)",popperConfig:"(null|object|function)",sanitize:"boolean",sanitizeFn:"(null|function)",selector:"(string|boolean)",template:"string",title:"(string|element|function)",trigger:"string"};class cs extends W{constructor(t,e){if(void 0===vi)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");super(t,e),this._isEnabled=!0,this._timeout=0,this._isHovered=null,this._activeTrigger={},this._popper=null,this._templateFactory=null,this._newContent=null,this.tip=null,this._setListeners(),this._config.selector||this._fixTitle()}static get Default(){return as}static get DefaultType(){return ls}static get NAME(){return"tooltip"}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(){this._isEnabled&&(this._activeTrigger.click=!this._activeTrigger.click,this._isShown()?this._leave():this._enter())}dispose(){clearTimeout(this._timeout),N.off(this._element.closest(is),ns,this._hideModalHandler),this._element.getAttribute("data-bs-original-title")&&this._element.setAttribute("title",this._element.getAttribute("data-bs-original-title")),this._disposePopper(),super.dispose()}show(){if("none"===this._element.style.display)throw new Error("Please use show on visible elements");if(!this._isWithContent()||!this._isEnabled)return;const t=N.trigger(this._element,this.constructor.eventName("show")),e=(c(this._element)||this._element.ownerDocument.documentElement).contains(this._element);if(t.defaultPrevented||!e)return;this._disposePopper();const i=this._getTipElement();this._element.setAttribute("aria-describedby",i.getAttribute("id"));const{container:n}=this._config;if(this._element.ownerDocument.documentElement.contains(this.tip)||(n.append(i),N.trigger(this._element,this.constructor.eventName("inserted"))),this._popper=this._createPopper(i),i.classList.add(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.on(t,"mouseover",h);this._queueCallback((()=>{N.trigger(this._element,this.constructor.eventName("shown")),!1===this._isHovered&&this._leave(),this._isHovered=!1}),this.tip,this._isAnimated())}hide(){if(this._isShown()&&!N.trigger(this._element,this.constructor.eventName("hide")).defaultPrevented){if(this._getTipElement().classList.remove(es),"ontouchstart"in document.documentElement)for(const t of[].concat(...document.body.children))N.off(t,"mouseover",h);this._activeTrigger.click=!1,this._activeTrigger[os]=!1,this._activeTrigger[ss]=!1,this._isHovered=null,this._queueCallback((()=>{this._isWithActiveTrigger()||(this._isHovered||this._disposePopper(),this._element.removeAttribute("aria-describedby"),N.trigger(this._element,this.constructor.eventName("hidden")))}),this.tip,this._isAnimated())}}update(){this._popper&&this._popper.update()}_isWithContent(){return Boolean(this._getTitle())}_getTipElement(){return this.tip||(this.tip=this._createTipElement(this._newContent||this._getContentForTemplate())),this.tip}_createTipElement(t){const e=this._getTemplateFactory(t).toHtml();if(!e)return null;e.classList.remove(ts,es),e.classList.add(`bs-${this.constructor.NAME}-auto`);const i=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME).toString();return e.setAttribute("id",i),this._isAnimated()&&e.classList.add(ts),e}setContent(t){this._newContent=t,this._isShown()&&(this._disposePopper(),this.show())}_getTemplateFactory(t){return this._templateFactory?this._templateFactory.changeContent(t):this._templateFactory=new Jn({...this._config,content:t,extraClass:this._resolvePossibleFunction(this._config.customClass)}),this._templateFactory}_getContentForTemplate(){return{".tooltip-inner":this._getTitle()}}_getTitle(){return this._resolvePossibleFunction(this._config.title)||this._element.getAttribute("data-bs-original-title")}_initializeOnDelegatedTarget(t){return this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_isAnimated(){return this._config.animation||this.tip&&this.tip.classList.contains(ts)}_isShown(){return this.tip&&this.tip.classList.contains(es)}_createPopper(t){const e=g(this._config.placement,[this,t,this._element]),i=rs[e.toUpperCase()];return bi(this._element,t,this._getPopperConfig(i))}_getOffset(){const{offset:t}=this._config;return"string"==typeof t?t.split(",").map((t=>Number.parseInt(t,10))):"function"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return g(t,[this._element])}_getPopperConfig(t){const e={placement:t,modifiers:[{name:"flip",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:"offset",options:{offset:this._getOffset()}},{name:"preventOverflow",options:{boundary:this._config.boundary}},{name:"arrow",options:{element:`.${this.constructor.NAME}-arrow`}},{name:"preSetPlacement",enabled:!0,phase:"beforeMain",fn:t=>{this._getTipElement().setAttribute("data-popper-placement",t.state.placement)}}]};return{...e,...g(this._config.popperConfig,[e])}}_setListeners(){const t=this._config.trigger.split(" ");for(const e of t)if("click"===e)N.on(this._element,this.constructor.eventName("click"),this._config.selector,(t=>{this._initializeOnDelegatedTarget(t).toggle()}));else if("manual"!==e){const t=e===ss?this.constructor.eventName("mouseenter"):this.constructor.eventName("focusin"),i=e===ss?this.constructor.eventName("mouseleave"):this.constructor.eventName("focusout");N.on(this._element,t,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusin"===t.type?os:ss]=!0,e._enter()})),N.on(this._element,i,this._config.selector,(t=>{const e=this._initializeOnDelegatedTarget(t);e._activeTrigger["focusout"===t.type?os:ss]=e._element.contains(t.relatedTarget),e._leave()}))}this._hideModalHandler=()=>{this._element&&this.hide()},N.on(this._element.closest(is),ns,this._hideModalHandler)}_fixTitle(){const t=this._element.getAttribute("title");t&&(this._element.getAttribute("aria-label")||this._element.textContent.trim()||this._element.setAttribute("aria-label",t),this._element.setAttribute("data-bs-original-title",t),this._element.removeAttribute("title"))}_enter(){this._isShown()||this._isHovered?this._isHovered=!0:(this._isHovered=!0,this._setTimeout((()=>{this._isHovered&&this.show()}),this._config.delay.show))}_leave(){this._isWithActiveTrigger()||(this._isHovered=!1,this._setTimeout((()=>{this._isHovered||this.hide()}),this._config.delay.hide))}_setTimeout(t,e){clearTimeout(this._timeout),this._timeout=setTimeout(t,e)}_isWithActiveTrigger(){return Object.values(this._activeTrigger).includes(!0)}_getConfig(t){const e=F.getDataAttributes(this._element);for(const t of Object.keys(e))Zn.has(t)&&delete e[t];return t={...e,..."object"==typeof t&&t?t:{}},t=this._mergeConfigObj(t),t=this._configAfterMerge(t),this._typeCheckConfig(t),t}_configAfterMerge(t){return t.container=!1===t.container?document.body:r(t.container),"number"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),t}_getDelegateConfig(){const t={};for(const[e,i]of Object.entries(this._config))this.constructor.Default[e]!==i&&(t[e]=i);return t.selector=!1,t.trigger="manual",t}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null),this.tip&&(this.tip.remove(),this.tip=null)}static jQueryInterface(t){return this.each((function(){const e=cs.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(cs);const hs={...cs.Default,content:"",offset:[0,8],placement:"right",template:'',trigger:"click"},ds={...cs.DefaultType,content:"(null|string|element|function)"};class us extends cs{static get Default(){return hs}static get DefaultType(){return ds}static get NAME(){return"popover"}_isWithContent(){return this._getTitle()||this._getContent()}_getContentForTemplate(){return{".popover-header":this._getTitle(),".popover-body":this._getContent()}}_getContent(){return this._resolvePossibleFunction(this._config.content)}static jQueryInterface(t){return this.each((function(){const e=us.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t]()}}))}}m(us);const fs=".bs.scrollspy",ps=`activate${fs}`,ms=`click${fs}`,gs=`load${fs}.data-api`,_s="active",bs="[href]",vs=".nav-link",ys=`${vs}, .nav-item > ${vs}, .list-group-item`,ws={offset:null,rootMargin:"0px 0px -25%",smoothScroll:!1,target:null,threshold:[.1,.5,1]},As={offset:"(number|null)",rootMargin:"string",smoothScroll:"boolean",target:"element",threshold:"array"};class Es extends W{constructor(t,e){super(t,e),this._targetLinks=new Map,this._observableSections=new Map,this._rootElement="visible"===getComputedStyle(this._element).overflowY?null:this._element,this._activeTarget=null,this._observer=null,this._previousScrollData={visibleEntryTop:0,parentScrollTop:0},this.refresh()}static get Default(){return ws}static get DefaultType(){return As}static get NAME(){return"scrollspy"}refresh(){this._initializeTargetsAndObservables(),this._maybeEnableSmoothScroll(),this._observer?this._observer.disconnect():this._observer=this._getNewObserver();for(const t of this._observableSections.values())this._observer.observe(t)}dispose(){this._observer.disconnect(),super.dispose()}_configAfterMerge(t){return t.target=r(t.target)||document.body,t.rootMargin=t.offset?`${t.offset}px 0px -30%`:t.rootMargin,"string"==typeof t.threshold&&(t.threshold=t.threshold.split(",").map((t=>Number.parseFloat(t)))),t}_maybeEnableSmoothScroll(){this._config.smoothScroll&&(N.off(this._config.target,ms),N.on(this._config.target,ms,bs,(t=>{const e=this._observableSections.get(t.target.hash);if(e){t.preventDefault();const i=this._rootElement||window,n=e.offsetTop-this._element.offsetTop;if(i.scrollTo)return void i.scrollTo({top:n,behavior:"smooth"});i.scrollTop=n}})))}_getNewObserver(){const t={root:this._rootElement,threshold:this._config.threshold,rootMargin:this._config.rootMargin};return new IntersectionObserver((t=>this._observerCallback(t)),t)}_observerCallback(t){const e=t=>this._targetLinks.get(`#${t.target.id}`),i=t=>{this._previousScrollData.visibleEntryTop=t.target.offsetTop,this._process(e(t))},n=(this._rootElement||document.documentElement).scrollTop,s=n>=this._previousScrollData.parentScrollTop;this._previousScrollData.parentScrollTop=n;for(const o of t){if(!o.isIntersecting){this._activeTarget=null,this._clearActiveClass(e(o));continue}const t=o.target.offsetTop>=this._previousScrollData.visibleEntryTop;if(s&&t){if(i(o),!n)return}else s||t||i(o)}}_initializeTargetsAndObservables(){this._targetLinks=new Map,this._observableSections=new Map;const t=z.find(bs,this._config.target);for(const e of t){if(!e.hash||l(e))continue;const t=z.findOne(decodeURI(e.hash),this._element);a(t)&&(this._targetLinks.set(decodeURI(e.hash),e),this._observableSections.set(e.hash,t))}}_process(t){this._activeTarget!==t&&(this._clearActiveClass(this._config.target),this._activeTarget=t,t.classList.add(_s),this._activateParents(t),N.trigger(this._element,ps,{relatedTarget:t}))}_activateParents(t){if(t.classList.contains("dropdown-item"))z.findOne(".dropdown-toggle",t.closest(".dropdown")).classList.add(_s);else for(const e of z.parents(t,".nav, .list-group"))for(const t of z.prev(e,ys))t.classList.add(_s)}_clearActiveClass(t){t.classList.remove(_s);const e=z.find(`${bs}.${_s}`,t);for(const t of e)t.classList.remove(_s)}static jQueryInterface(t){return this.each((function(){const e=Es.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(window,gs,(()=>{for(const t of z.find('[data-bs-spy="scroll"]'))Es.getOrCreateInstance(t)})),m(Es);const Ts=".bs.tab",Cs=`hide${Ts}`,Os=`hidden${Ts}`,xs=`show${Ts}`,ks=`shown${Ts}`,Ls=`click${Ts}`,Ss=`keydown${Ts}`,Ds=`load${Ts}`,$s="ArrowLeft",Is="ArrowRight",Ns="ArrowUp",Ps="ArrowDown",Ms="Home",js="End",Fs="active",Hs="fade",Ws="show",Bs=":not(.dropdown-toggle)",zs='[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]',Rs=`.nav-link${Bs}, .list-group-item${Bs}, [role="tab"]${Bs}, ${zs}`,qs=`.${Fs}[data-bs-toggle="tab"], .${Fs}[data-bs-toggle="pill"], .${Fs}[data-bs-toggle="list"]`;class Vs extends W{constructor(t){super(t),this._parent=this._element.closest('.list-group, .nav, [role="tablist"]'),this._parent&&(this._setInitialAttributes(this._parent,this._getChildren()),N.on(this._element,Ss,(t=>this._keydown(t))))}static get NAME(){return"tab"}show(){const t=this._element;if(this._elemIsActive(t))return;const e=this._getActiveElem(),i=e?N.trigger(e,Cs,{relatedTarget:t}):null;N.trigger(t,xs,{relatedTarget:e}).defaultPrevented||i&&i.defaultPrevented||(this._deactivate(e,t),this._activate(t,e))}_activate(t,e){t&&(t.classList.add(Fs),this._activate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.removeAttribute("tabindex"),t.setAttribute("aria-selected",!0),this._toggleDropDown(t,!0),N.trigger(t,ks,{relatedTarget:e})):t.classList.add(Ws)}),t,t.classList.contains(Hs)))}_deactivate(t,e){t&&(t.classList.remove(Fs),t.blur(),this._deactivate(z.getElementFromSelector(t)),this._queueCallback((()=>{"tab"===t.getAttribute("role")?(t.setAttribute("aria-selected",!1),t.setAttribute("tabindex","-1"),this._toggleDropDown(t,!1),N.trigger(t,Os,{relatedTarget:e})):t.classList.remove(Ws)}),t,t.classList.contains(Hs)))}_keydown(t){if(![$s,Is,Ns,Ps,Ms,js].includes(t.key))return;t.stopPropagation(),t.preventDefault();const e=this._getChildren().filter((t=>!l(t)));let i;if([Ms,js].includes(t.key))i=e[t.key===Ms?0:e.length-1];else{const n=[Is,Ps].includes(t.key);i=b(e,t.target,n,!0)}i&&(i.focus({preventScroll:!0}),Vs.getOrCreateInstance(i).show())}_getChildren(){return z.find(Rs,this._parent)}_getActiveElem(){return this._getChildren().find((t=>this._elemIsActive(t)))||null}_setInitialAttributes(t,e){this._setAttributeIfNotExists(t,"role","tablist");for(const t of e)this._setInitialAttributesOnChild(t)}_setInitialAttributesOnChild(t){t=this._getInnerElement(t);const e=this._elemIsActive(t),i=this._getOuterElement(t);t.setAttribute("aria-selected",e),i!==t&&this._setAttributeIfNotExists(i,"role","presentation"),e||t.setAttribute("tabindex","-1"),this._setAttributeIfNotExists(t,"role","tab"),this._setInitialAttributesOnTargetPanel(t)}_setInitialAttributesOnTargetPanel(t){const e=z.getElementFromSelector(t);e&&(this._setAttributeIfNotExists(e,"role","tabpanel"),t.id&&this._setAttributeIfNotExists(e,"aria-labelledby",`${t.id}`))}_toggleDropDown(t,e){const i=this._getOuterElement(t);if(!i.classList.contains("dropdown"))return;const n=(t,n)=>{const s=z.findOne(t,i);s&&s.classList.toggle(n,e)};n(".dropdown-toggle",Fs),n(".dropdown-menu",Ws),i.setAttribute("aria-expanded",e)}_setAttributeIfNotExists(t,e,i){t.hasAttribute(e)||t.setAttribute(e,i)}_elemIsActive(t){return t.classList.contains(Fs)}_getInnerElement(t){return t.matches(Rs)?t:z.findOne(Rs,t)}_getOuterElement(t){return t.closest(".nav-item, .list-group-item")||t}static jQueryInterface(t){return this.each((function(){const e=Vs.getOrCreateInstance(this);if("string"==typeof t){if(void 0===e[t]||t.startsWith("_")||"constructor"===t)throw new TypeError(`No method named "${t}"`);e[t]()}}))}}N.on(document,Ls,zs,(function(t){["A","AREA"].includes(this.tagName)&&t.preventDefault(),l(this)||Vs.getOrCreateInstance(this).show()})),N.on(window,Ds,(()=>{for(const t of z.find(qs))Vs.getOrCreateInstance(t)})),m(Vs);const Ks=".bs.toast",Qs=`mouseover${Ks}`,Xs=`mouseout${Ks}`,Ys=`focusin${Ks}`,Us=`focusout${Ks}`,Gs=`hide${Ks}`,Js=`hidden${Ks}`,Zs=`show${Ks}`,to=`shown${Ks}`,eo="hide",io="show",no="showing",so={animation:"boolean",autohide:"boolean",delay:"number"},oo={animation:!0,autohide:!0,delay:5e3};class ro extends W{constructor(t,e){super(t,e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get Default(){return oo}static get DefaultType(){return so}static get NAME(){return"toast"}show(){N.trigger(this._element,Zs).defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add("fade"),this._element.classList.remove(eo),d(this._element),this._element.classList.add(io,no),this._queueCallback((()=>{this._element.classList.remove(no),N.trigger(this._element,to),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this.isShown()&&(N.trigger(this._element,Gs).defaultPrevented||(this._element.classList.add(no),this._queueCallback((()=>{this._element.classList.add(eo),this._element.classList.remove(no,io),N.trigger(this._element,Js)}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this.isShown()&&this._element.classList.remove(io),super.dispose()}isShown(){return this._element.classList.contains(io)}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case"mouseover":case"mouseout":this._hasMouseInteraction=e;break;case"focusin":case"focusout":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){N.on(this._element,Qs,(t=>this._onInteraction(t,!0))),N.on(this._element,Xs,(t=>this._onInteraction(t,!1))),N.on(this._element,Ys,(t=>this._onInteraction(t,!0))),N.on(this._element,Us,(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=ro.getOrCreateInstance(this,t);if("string"==typeof t){if(void 0===e[t])throw new TypeError(`No method named "${t}"`);e[t](this)}}))}}return R(ro),m(ro),{Alert:Q,Button:Y,Carousel:xt,Collapse:Bt,Dropdown:qi,Modal:On,Offcanvas:qn,Popover:us,ScrollSpy:Es,Tab:Vs,Toast:ro,Tooltip:cs}})); +//# sourceMappingURL=bootstrap.bundle.min.js.map \ No newline at end of file diff --git a/docs/site_libs/clipboard/clipboard.min.js b/docs/site_libs/clipboard/clipboard.min.js new file mode 100644 index 0000000..1103f81 --- /dev/null +++ b/docs/site_libs/clipboard/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return b}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),r=n.n(e);function c(t){try{return document.execCommand(t)}catch(t){return}}var a=function(t){t=r()(t);return c("cut"),t};function o(t,e){var n,o,t=(n=t,o="rtl"===document.documentElement.getAttribute("dir"),(t=document.createElement("textarea")).style.fontSize="12pt",t.style.border="0",t.style.padding="0",t.style.margin="0",t.style.position="absolute",t.style[o?"right":"left"]="-9999px",o=window.pageYOffset||document.documentElement.scrollTop,t.style.top="".concat(o,"px"),t.setAttribute("readonly",""),t.value=n,t);return e.container.appendChild(t),e=r()(t),c("copy"),t.remove(),e}var f=function(t){var e=1.anchorjs-link,.anchorjs-link:focus{opacity:1}",A.sheet.cssRules.length),A.sheet.insertRule("[data-anchorjs-icon]::after{content:attr(data-anchorjs-icon)}",A.sheet.cssRules.length),A.sheet.insertRule('@font-face{font-family:anchorjs-icons;src:url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype")}',A.sheet.cssRules.length)),h=document.querySelectorAll("[id]"),t=[].map.call(h,function(A){return A.id}),i=0;i\]./()*\\\n\t\b\v\u00A0]/g,"-").replace(/-{2,}/g,"-").substring(0,this.options.truncate).replace(/^-+|-+$/gm,"").toLowerCase()},this.hasAnchorJSLink=function(A){var e=A.firstChild&&-1<(" "+A.firstChild.className+" ").indexOf(" anchorjs-link "),A=A.lastChild&&-1<(" "+A.lastChild.className+" ").indexOf(" anchorjs-link ");return e||A||!1}}}); +// @license-end \ No newline at end of file diff --git a/docs/site_libs/quarto-html/axe/axe-check.js b/docs/site_libs/quarto-html/axe/axe-check.js new file mode 100644 index 0000000..8808085 --- /dev/null +++ b/docs/site_libs/quarto-html/axe/axe-check.js @@ -0,0 +1,145 @@ +class QuartoAxeReporter { + constructor(axeResult, options) { + this.axeResult = axeResult; + this.options = options; + } + + report() { + throw new Error("report() is an abstract method"); + } +} + +class QuartoAxeJsonReporter extends QuartoAxeReporter { + constructor(axeResult, options) { + super(axeResult, options); + } + + report() { + console.log(JSON.stringify(this.axeResult, null, 2)); + } +} + +class QuartoAxeConsoleReporter extends QuartoAxeReporter { + constructor(axeResult, options) { + super(axeResult, options); + } + + report() { + for (const violation of this.axeResult.violations) { + console.log(violation.description); + for (const node of violation.nodes) { + for (const target of node.target) { + console.log(target); + console.log(document.querySelector(target)); + } + } + } + } +} + +class QuartoAxeDocumentReporter extends QuartoAxeReporter { + constructor(axeResult, options) { + super(axeResult, options); + } + + createViolationElement(violation) { + const violationElement = document.createElement("div"); + + const descriptionElement = document.createElement("div"); + descriptionElement.className = "quarto-axe-violation-description"; + descriptionElement.innerText = `${violation.impact.replace(/^[a-z]/, match => match.toLocaleUpperCase())}: ${violation.description}`; + violationElement.appendChild(descriptionElement); + + const helpElement = document.createElement("div"); + helpElement.className = "quarto-axe-violation-help"; + helpElement.innerText = violation.help; + violationElement.appendChild(helpElement); + + const nodesElement = document.createElement("div"); + nodesElement.className = "quarto-axe-violation-nodes"; + violationElement.appendChild(nodesElement); + const nodeElement = document.createElement("div"); + nodeElement.className = "quarto-axe-violation-selector"; + for (const node of violation.nodes) { + for (const target of node.target) { + const targetElement = document.createElement("span"); + targetElement.className = "quarto-axe-violation-target"; + targetElement.innerText = target; + nodeElement.appendChild(targetElement); + nodeElement.addEventListener("mouseenter", () => { + const element = document.querySelector(target); + if (element) { + element.scrollIntoView({ behavior: "smooth", block: "center" }); + element.classList.add("quarto-axe-hover-highlight"); + setTimeout(() => { + element.style.border = ""; + }, 2000); + } + }); + nodeElement.addEventListener("mouseleave", () => { + const element = document.querySelector(target); + if (element) { + element.classList.remove("quarto-axe-hover-highlight"); + } + }); + nodeElement.addEventListener("click", () => { + console.log(document.querySelector(target)); + }); + nodeElement.appendChild(targetElement); + } + nodesElement.appendChild(nodeElement); + } + return violationElement; + } + + report() { + const violations = this.axeResult.violations; + const reportElement = document.createElement("div"); + reportElement.className = "quarto-axe-report"; + if (violations.length === 0) { + const noViolationsElement = document.createElement("div"); + noViolationsElement.className = "quarto-axe-no-violations"; + noViolationsElement.innerText = "No axe-core violations found."; + reportElement.appendChild(noViolationsElement); + } + violations.forEach((violation) => { + reportElement.appendChild(this.createViolationElement(violation)); + }); + document.querySelector("main").appendChild(reportElement); + } +} + +const reporters = { + json: QuartoAxeJsonReporter, + console: QuartoAxeConsoleReporter, + document: QuartoAxeDocumentReporter, +}; + +class QuartoAxeChecker { + constructor(opts) { + this.options = opts; + } + async init() { + const axe = (await import("https://cdn.skypack.dev/pin/axe-core@v4.10.3-aVOFXWsJaCpVrtv89pCa/mode=imports,min/optimized/axe-core.js")).default; + const result = await axe.run({ + exclude: [ + // https://github.com/microsoft/tabster/issues/288 + // MS has claimed they won't fix this, so we need to add an exclusion to + // all tabster elements + "[data-tabster-dummy]" + ], + preload: { assets: ['cssom'], timeout: 50000 } + }); + const reporter = this.options === true ? new QuartoAxeConsoleReporter(result) : new reporters[this.options.output](result, this.options); + reporter.report(); + } +} + +export async function init() { + const opts = document.querySelector("#quarto-axe-checker-options"); + if (opts) { + const jsonOptions = JSON.parse(atob(opts.textContent)); + const checker = new QuartoAxeChecker(jsonOptions); + await checker.init(); + } +} \ No newline at end of file diff --git a/docs/site_libs/quarto-html/popper.min.js b/docs/site_libs/quarto-html/popper.min.js new file mode 100644 index 0000000..e3726d7 --- /dev/null +++ b/docs/site_libs/quarto-html/popper.min.js @@ -0,0 +1,6 @@ +/** + * @popperjs/core v2.11.7 - MIT License + */ + +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).Popper={})}(this,(function(e){"use strict";function t(e){if(null==e)return window;if("[object Window]"!==e.toString()){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function n(e){return e instanceof t(e).Element||e instanceof Element}function r(e){return e instanceof t(e).HTMLElement||e instanceof HTMLElement}function o(e){return"undefined"!=typeof ShadowRoot&&(e instanceof t(e).ShadowRoot||e instanceof ShadowRoot)}var i=Math.max,a=Math.min,s=Math.round;function f(){var e=navigator.userAgentData;return null!=e&&e.brands&&Array.isArray(e.brands)?e.brands.map((function(e){return e.brand+"/"+e.version})).join(" "):navigator.userAgent}function c(){return!/^((?!chrome|android).)*safari/i.test(f())}function p(e,o,i){void 0===o&&(o=!1),void 0===i&&(i=!1);var a=e.getBoundingClientRect(),f=1,p=1;o&&r(e)&&(f=e.offsetWidth>0&&s(a.width)/e.offsetWidth||1,p=e.offsetHeight>0&&s(a.height)/e.offsetHeight||1);var u=(n(e)?t(e):window).visualViewport,l=!c()&&i,d=(a.left+(l&&u?u.offsetLeft:0))/f,h=(a.top+(l&&u?u.offsetTop:0))/p,m=a.width/f,v=a.height/p;return{width:m,height:v,top:h,right:d+m,bottom:h+v,left:d,x:d,y:h}}function u(e){var n=t(e);return{scrollLeft:n.pageXOffset,scrollTop:n.pageYOffset}}function l(e){return e?(e.nodeName||"").toLowerCase():null}function d(e){return((n(e)?e.ownerDocument:e.document)||window.document).documentElement}function h(e){return p(d(e)).left+u(e).scrollLeft}function m(e){return t(e).getComputedStyle(e)}function v(e){var t=m(e),n=t.overflow,r=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+r)}function y(e,n,o){void 0===o&&(o=!1);var i,a,f=r(n),c=r(n)&&function(e){var t=e.getBoundingClientRect(),n=s(t.width)/e.offsetWidth||1,r=s(t.height)/e.offsetHeight||1;return 1!==n||1!==r}(n),m=d(n),y=p(e,c,o),g={scrollLeft:0,scrollTop:0},b={x:0,y:0};return(f||!f&&!o)&&(("body"!==l(n)||v(m))&&(g=(i=n)!==t(i)&&r(i)?{scrollLeft:(a=i).scrollLeft,scrollTop:a.scrollTop}:u(i)),r(n)?((b=p(n,!0)).x+=n.clientLeft,b.y+=n.clientTop):m&&(b.x=h(m))),{x:y.left+g.scrollLeft-b.x,y:y.top+g.scrollTop-b.y,width:y.width,height:y.height}}function g(e){var t=p(e),n=e.offsetWidth,r=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-r)<=1&&(r=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:r}}function b(e){return"html"===l(e)?e:e.assignedSlot||e.parentNode||(o(e)?e.host:null)||d(e)}function x(e){return["html","body","#document"].indexOf(l(e))>=0?e.ownerDocument.body:r(e)&&v(e)?e:x(b(e))}function w(e,n){var r;void 0===n&&(n=[]);var o=x(e),i=o===(null==(r=e.ownerDocument)?void 0:r.body),a=t(o),s=i?[a].concat(a.visualViewport||[],v(o)?o:[]):o,f=n.concat(s);return i?f:f.concat(w(b(s)))}function O(e){return["table","td","th"].indexOf(l(e))>=0}function j(e){return r(e)&&"fixed"!==m(e).position?e.offsetParent:null}function E(e){for(var n=t(e),i=j(e);i&&O(i)&&"static"===m(i).position;)i=j(i);return i&&("html"===l(i)||"body"===l(i)&&"static"===m(i).position)?n:i||function(e){var t=/firefox/i.test(f());if(/Trident/i.test(f())&&r(e)&&"fixed"===m(e).position)return null;var n=b(e);for(o(n)&&(n=n.host);r(n)&&["html","body"].indexOf(l(n))<0;){var i=m(n);if("none"!==i.transform||"none"!==i.perspective||"paint"===i.contain||-1!==["transform","perspective"].indexOf(i.willChange)||t&&"filter"===i.willChange||t&&i.filter&&"none"!==i.filter)return n;n=n.parentNode}return null}(e)||n}var D="top",A="bottom",L="right",P="left",M="auto",k=[D,A,L,P],W="start",B="end",H="viewport",T="popper",R=k.reduce((function(e,t){return e.concat([t+"-"+W,t+"-"+B])}),[]),S=[].concat(k,[M]).reduce((function(e,t){return e.concat([t,t+"-"+W,t+"-"+B])}),[]),V=["beforeRead","read","afterRead","beforeMain","main","afterMain","beforeWrite","write","afterWrite"];function q(e){var t=new Map,n=new Set,r=[];function o(e){n.add(e.name),[].concat(e.requires||[],e.requiresIfExists||[]).forEach((function(e){if(!n.has(e)){var r=t.get(e);r&&o(r)}})),r.push(e)}return e.forEach((function(e){t.set(e.name,e)})),e.forEach((function(e){n.has(e.name)||o(e)})),r}function C(e){return e.split("-")[0]}function N(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&o(n)){var r=t;do{if(r&&e.isSameNode(r))return!0;r=r.parentNode||r.host}while(r)}return!1}function I(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function _(e,r,o){return r===H?I(function(e,n){var r=t(e),o=d(e),i=r.visualViewport,a=o.clientWidth,s=o.clientHeight,f=0,p=0;if(i){a=i.width,s=i.height;var u=c();(u||!u&&"fixed"===n)&&(f=i.offsetLeft,p=i.offsetTop)}return{width:a,height:s,x:f+h(e),y:p}}(e,o)):n(r)?function(e,t){var n=p(e,!1,"fixed"===t);return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}(r,o):I(function(e){var t,n=d(e),r=u(e),o=null==(t=e.ownerDocument)?void 0:t.body,a=i(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),s=i(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),f=-r.scrollLeft+h(e),c=-r.scrollTop;return"rtl"===m(o||n).direction&&(f+=i(n.clientWidth,o?o.clientWidth:0)-a),{width:a,height:s,x:f,y:c}}(d(e)))}function F(e,t,o,s){var f="clippingParents"===t?function(e){var t=w(b(e)),o=["absolute","fixed"].indexOf(m(e).position)>=0&&r(e)?E(e):e;return n(o)?t.filter((function(e){return n(e)&&N(e,o)&&"body"!==l(e)})):[]}(e):[].concat(t),c=[].concat(f,[o]),p=c[0],u=c.reduce((function(t,n){var r=_(e,n,s);return t.top=i(r.top,t.top),t.right=a(r.right,t.right),t.bottom=a(r.bottom,t.bottom),t.left=i(r.left,t.left),t}),_(e,p,s));return u.width=u.right-u.left,u.height=u.bottom-u.top,u.x=u.left,u.y=u.top,u}function U(e){return e.split("-")[1]}function z(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function X(e){var t,n=e.reference,r=e.element,o=e.placement,i=o?C(o):null,a=o?U(o):null,s=n.x+n.width/2-r.width/2,f=n.y+n.height/2-r.height/2;switch(i){case D:t={x:s,y:n.y-r.height};break;case A:t={x:s,y:n.y+n.height};break;case L:t={x:n.x+n.width,y:f};break;case P:t={x:n.x-r.width,y:f};break;default:t={x:n.x,y:n.y}}var c=i?z(i):null;if(null!=c){var p="y"===c?"height":"width";switch(a){case W:t[c]=t[c]-(n[p]/2-r[p]/2);break;case B:t[c]=t[c]+(n[p]/2-r[p]/2)}}return t}function Y(e){return Object.assign({},{top:0,right:0,bottom:0,left:0},e)}function G(e,t){return t.reduce((function(t,n){return t[n]=e,t}),{})}function J(e,t){void 0===t&&(t={});var r=t,o=r.placement,i=void 0===o?e.placement:o,a=r.strategy,s=void 0===a?e.strategy:a,f=r.boundary,c=void 0===f?"clippingParents":f,u=r.rootBoundary,l=void 0===u?H:u,h=r.elementContext,m=void 0===h?T:h,v=r.altBoundary,y=void 0!==v&&v,g=r.padding,b=void 0===g?0:g,x=Y("number"!=typeof b?b:G(b,k)),w=m===T?"reference":T,O=e.rects.popper,j=e.elements[y?w:m],E=F(n(j)?j:j.contextElement||d(e.elements.popper),c,l,s),P=p(e.elements.reference),M=X({reference:P,element:O,strategy:"absolute",placement:i}),W=I(Object.assign({},O,M)),B=m===T?W:P,R={top:E.top-B.top+x.top,bottom:B.bottom-E.bottom+x.bottom,left:E.left-B.left+x.left,right:B.right-E.right+x.right},S=e.modifiersData.offset;if(m===T&&S){var V=S[i];Object.keys(R).forEach((function(e){var t=[L,A].indexOf(e)>=0?1:-1,n=[D,A].indexOf(e)>=0?"y":"x";R[e]+=V[n]*t}))}return R}var K={placement:"bottom",modifiers:[],strategy:"absolute"};function Q(){for(var e=arguments.length,t=new Array(e),n=0;n=0?-1:1,i="function"==typeof n?n(Object.assign({},t,{placement:e})):n,a=i[0],s=i[1];return a=a||0,s=(s||0)*o,[P,L].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}(n,t.rects,i),e}),{}),s=a[t.placement],f=s.x,c=s.y;null!=t.modifiersData.popperOffsets&&(t.modifiersData.popperOffsets.x+=f,t.modifiersData.popperOffsets.y+=c),t.modifiersData[r]=a}},se={left:"right",right:"left",bottom:"top",top:"bottom"};function fe(e){return e.replace(/left|right|bottom|top/g,(function(e){return se[e]}))}var ce={start:"end",end:"start"};function pe(e){return e.replace(/start|end/g,(function(e){return ce[e]}))}function ue(e,t){void 0===t&&(t={});var n=t,r=n.placement,o=n.boundary,i=n.rootBoundary,a=n.padding,s=n.flipVariations,f=n.allowedAutoPlacements,c=void 0===f?S:f,p=U(r),u=p?s?R:R.filter((function(e){return U(e)===p})):k,l=u.filter((function(e){return c.indexOf(e)>=0}));0===l.length&&(l=u);var d=l.reduce((function(t,n){return t[n]=J(e,{placement:n,boundary:o,rootBoundary:i,padding:a})[C(n)],t}),{});return Object.keys(d).sort((function(e,t){return d[e]-d[t]}))}var le={name:"flip",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name;if(!t.modifiersData[r]._skip){for(var o=n.mainAxis,i=void 0===o||o,a=n.altAxis,s=void 0===a||a,f=n.fallbackPlacements,c=n.padding,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.flipVariations,h=void 0===d||d,m=n.allowedAutoPlacements,v=t.options.placement,y=C(v),g=f||(y===v||!h?[fe(v)]:function(e){if(C(e)===M)return[];var t=fe(e);return[pe(e),t,pe(t)]}(v)),b=[v].concat(g).reduce((function(e,n){return e.concat(C(n)===M?ue(t,{placement:n,boundary:p,rootBoundary:u,padding:c,flipVariations:h,allowedAutoPlacements:m}):n)}),[]),x=t.rects.reference,w=t.rects.popper,O=new Map,j=!0,E=b[0],k=0;k=0,S=R?"width":"height",V=J(t,{placement:B,boundary:p,rootBoundary:u,altBoundary:l,padding:c}),q=R?T?L:P:T?A:D;x[S]>w[S]&&(q=fe(q));var N=fe(q),I=[];if(i&&I.push(V[H]<=0),s&&I.push(V[q]<=0,V[N]<=0),I.every((function(e){return e}))){E=B,j=!1;break}O.set(B,I)}if(j)for(var _=function(e){var t=b.find((function(t){var n=O.get(t);if(n)return n.slice(0,e).every((function(e){return e}))}));if(t)return E=t,"break"},F=h?3:1;F>0;F--){if("break"===_(F))break}t.placement!==E&&(t.modifiersData[r]._skip=!0,t.placement=E,t.reset=!0)}},requiresIfExists:["offset"],data:{_skip:!1}};function de(e,t,n){return i(e,a(t,n))}var he={name:"preventOverflow",enabled:!0,phase:"main",fn:function(e){var t=e.state,n=e.options,r=e.name,o=n.mainAxis,s=void 0===o||o,f=n.altAxis,c=void 0!==f&&f,p=n.boundary,u=n.rootBoundary,l=n.altBoundary,d=n.padding,h=n.tether,m=void 0===h||h,v=n.tetherOffset,y=void 0===v?0:v,b=J(t,{boundary:p,rootBoundary:u,padding:d,altBoundary:l}),x=C(t.placement),w=U(t.placement),O=!w,j=z(x),M="x"===j?"y":"x",k=t.modifiersData.popperOffsets,B=t.rects.reference,H=t.rects.popper,T="function"==typeof y?y(Object.assign({},t.rects,{placement:t.placement})):y,R="number"==typeof T?{mainAxis:T,altAxis:T}:Object.assign({mainAxis:0,altAxis:0},T),S=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,V={x:0,y:0};if(k){if(s){var q,N="y"===j?D:P,I="y"===j?A:L,_="y"===j?"height":"width",F=k[j],X=F+b[N],Y=F-b[I],G=m?-H[_]/2:0,K=w===W?B[_]:H[_],Q=w===W?-H[_]:-B[_],Z=t.elements.arrow,$=m&&Z?g(Z):{width:0,height:0},ee=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:{top:0,right:0,bottom:0,left:0},te=ee[N],ne=ee[I],re=de(0,B[_],$[_]),oe=O?B[_]/2-G-re-te-R.mainAxis:K-re-te-R.mainAxis,ie=O?-B[_]/2+G+re+ne+R.mainAxis:Q+re+ne+R.mainAxis,ae=t.elements.arrow&&E(t.elements.arrow),se=ae?"y"===j?ae.clientTop||0:ae.clientLeft||0:0,fe=null!=(q=null==S?void 0:S[j])?q:0,ce=F+ie-fe,pe=de(m?a(X,F+oe-fe-se):X,F,m?i(Y,ce):Y);k[j]=pe,V[j]=pe-F}if(c){var ue,le="x"===j?D:P,he="x"===j?A:L,me=k[M],ve="y"===M?"height":"width",ye=me+b[le],ge=me-b[he],be=-1!==[D,P].indexOf(x),xe=null!=(ue=null==S?void 0:S[M])?ue:0,we=be?ye:me-B[ve]-H[ve]-xe+R.altAxis,Oe=be?me+B[ve]+H[ve]-xe-R.altAxis:ge,je=m&&be?function(e,t,n){var r=de(e,t,n);return r>n?n:r}(we,me,Oe):de(m?we:ye,me,m?Oe:ge);k[M]=je,V[M]=je-me}t.modifiersData[r]=V}},requiresIfExists:["offset"]};var me={name:"arrow",enabled:!0,phase:"main",fn:function(e){var t,n=e.state,r=e.name,o=e.options,i=n.elements.arrow,a=n.modifiersData.popperOffsets,s=C(n.placement),f=z(s),c=[P,L].indexOf(s)>=0?"height":"width";if(i&&a){var p=function(e,t){return Y("number"!=typeof(e="function"==typeof e?e(Object.assign({},t.rects,{placement:t.placement})):e)?e:G(e,k))}(o.padding,n),u=g(i),l="y"===f?D:P,d="y"===f?A:L,h=n.rects.reference[c]+n.rects.reference[f]-a[f]-n.rects.popper[c],m=a[f]-n.rects.reference[f],v=E(i),y=v?"y"===f?v.clientHeight||0:v.clientWidth||0:0,b=h/2-m/2,x=p[l],w=y-u[c]-p[d],O=y/2-u[c]/2+b,j=de(x,O,w),M=f;n.modifiersData[r]=((t={})[M]=j,t.centerOffset=j-O,t)}},effect:function(e){var t=e.state,n=e.options.element,r=void 0===n?"[data-popper-arrow]":n;null!=r&&("string"!=typeof r||(r=t.elements.popper.querySelector(r)))&&N(t.elements.popper,r)&&(t.elements.arrow=r)},requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function ve(e,t,n){return void 0===n&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function ye(e){return[D,L,A,P].some((function(t){return e[t]>=0}))}var ge={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:function(e){var t=e.state,n=e.name,r=t.rects.reference,o=t.rects.popper,i=t.modifiersData.preventOverflow,a=J(t,{elementContext:"reference"}),s=J(t,{altBoundary:!0}),f=ve(a,r),c=ve(s,o,i),p=ye(f),u=ye(c);t.modifiersData[n]={referenceClippingOffsets:f,popperEscapeOffsets:c,isReferenceHidden:p,hasPopperEscaped:u},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":p,"data-popper-escaped":u})}},be=Z({defaultModifiers:[ee,te,oe,ie]}),xe=[ee,te,oe,ie,ae,le,he,me,ge],we=Z({defaultModifiers:xe});e.applyStyles=ie,e.arrow=me,e.computeStyles=oe,e.createPopper=we,e.createPopperLite=be,e.defaultModifiers=xe,e.detectOverflow=J,e.eventListeners=ee,e.flip=le,e.hide=ge,e.offset=ae,e.popperGenerator=Z,e.popperOffsets=te,e.preventOverflow=he,Object.defineProperty(e,"__esModule",{value:!0})})); + diff --git a/docs/site_libs/quarto-html/quarto-syntax-highlighting-ed96de9b727972fe78a7b5d16c58bf87.css b/docs/site_libs/quarto-html/quarto-syntax-highlighting-ed96de9b727972fe78a7b5d16c58bf87.css new file mode 100644 index 0000000..7bb4f73 --- /dev/null +++ b/docs/site_libs/quarto-html/quarto-syntax-highlighting-ed96de9b727972fe78a7b5d16c58bf87.css @@ -0,0 +1,236 @@ +/* quarto syntax highlight colors */ +:root { + --quarto-hl-ot-color: #003B4F; + --quarto-hl-at-color: #657422; + --quarto-hl-ss-color: #20794D; + --quarto-hl-an-color: #5E5E5E; + --quarto-hl-fu-color: #4758AB; + --quarto-hl-st-color: #20794D; + --quarto-hl-cf-color: #003B4F; + --quarto-hl-op-color: #5E5E5E; + --quarto-hl-er-color: #AD0000; + --quarto-hl-bn-color: #AD0000; + --quarto-hl-al-color: #AD0000; + --quarto-hl-va-color: #111111; + --quarto-hl-bu-color: inherit; + --quarto-hl-ex-color: inherit; + --quarto-hl-pp-color: #AD0000; + --quarto-hl-in-color: #5E5E5E; + --quarto-hl-vs-color: #20794D; + --quarto-hl-wa-color: #5E5E5E; + --quarto-hl-do-color: #5E5E5E; + --quarto-hl-im-color: #00769E; + --quarto-hl-ch-color: #20794D; + --quarto-hl-dt-color: #AD0000; + --quarto-hl-fl-color: #AD0000; + --quarto-hl-co-color: #5E5E5E; + --quarto-hl-cv-color: #5E5E5E; + --quarto-hl-cn-color: #8f5902; + --quarto-hl-sc-color: #5E5E5E; + --quarto-hl-dv-color: #AD0000; + --quarto-hl-kw-color: #003B4F; +} + +/* other quarto variables */ +:root { + --quarto-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +/* syntax highlight based on Pandoc's rules */ +pre > code.sourceCode > span { + color: #003B4F; +} + +code.sourceCode > span { + color: #003B4F; +} + +div.sourceCode, +div.sourceCode pre.sourceCode { + color: #003B4F; +} + +/* Normal */ +code span { + color: #003B4F; +} + +/* Alert */ +code span.al { + color: #AD0000; + font-style: inherit; +} + +/* Annotation */ +code span.an { + color: #5E5E5E; + font-style: inherit; +} + +/* Attribute */ +code span.at { + color: #657422; + font-style: inherit; +} + +/* BaseN */ +code span.bn { + color: #AD0000; + font-style: inherit; +} + +/* BuiltIn */ +code span.bu { + font-style: inherit; +} + +/* ControlFlow */ +code span.cf { + color: #003B4F; + font-weight: bold; + font-style: inherit; +} + +/* Char */ +code span.ch { + color: #20794D; + font-style: inherit; +} + +/* Constant */ +code span.cn { + color: #8f5902; + font-style: inherit; +} + +/* Comment */ +code span.co { + color: #5E5E5E; + font-style: inherit; +} + +/* CommentVar */ +code span.cv { + color: #5E5E5E; + font-style: italic; +} + +/* Documentation */ +code span.do { + color: #5E5E5E; + font-style: italic; +} + +/* DataType */ +code span.dt { + color: #AD0000; + font-style: inherit; +} + +/* DecVal */ +code span.dv { + color: #AD0000; + font-style: inherit; +} + +/* Error */ +code span.er { + color: #AD0000; + font-style: inherit; +} + +/* Extension */ +code span.ex { + font-style: inherit; +} + +/* Float */ +code span.fl { + color: #AD0000; + font-style: inherit; +} + +/* Function */ +code span.fu { + color: #4758AB; + font-style: inherit; +} + +/* Import */ +code span.im { + color: #00769E; + font-style: inherit; +} + +/* Information */ +code span.in { + color: #5E5E5E; + font-style: inherit; +} + +/* Keyword */ +code span.kw { + color: #003B4F; + font-weight: bold; + font-style: inherit; +} + +/* Operator */ +code span.op { + color: #5E5E5E; + font-style: inherit; +} + +/* Other */ +code span.ot { + color: #003B4F; + font-style: inherit; +} + +/* Preprocessor */ +code span.pp { + color: #AD0000; + font-style: inherit; +} + +/* SpecialChar */ +code span.sc { + color: #5E5E5E; + font-style: inherit; +} + +/* SpecialString */ +code span.ss { + color: #20794D; + font-style: inherit; +} + +/* String */ +code span.st { + color: #20794D; + font-style: inherit; +} + +/* Variable */ +code span.va { + color: #111111; + font-style: inherit; +} + +/* VerbatimString */ +code span.vs { + color: #20794D; + font-style: inherit; +} + +/* Warning */ +code span.wa { + color: #5E5E5E; + font-style: italic; +} + +.prevent-inlining { + content: " { + // Find any conflicting margin elements and add margins to the + // top to prevent overlap + const marginChildren = window.document.querySelectorAll( + ".column-margin.column-container > *, .margin-caption, .aside" + ); + + let lastBottom = 0; + for (const marginChild of marginChildren) { + if (marginChild.offsetParent !== null) { + // clear the top margin so we recompute it + marginChild.style.marginTop = null; + const top = marginChild.getBoundingClientRect().top + window.scrollY; + if (top < lastBottom) { + const marginChildStyle = window.getComputedStyle(marginChild); + const marginBottom = parseFloat(marginChildStyle["marginBottom"]); + const margin = lastBottom - top + marginBottom; + marginChild.style.marginTop = `${margin}px`; + } + const styles = window.getComputedStyle(marginChild); + const marginTop = parseFloat(styles["marginTop"]); + lastBottom = top + marginChild.getBoundingClientRect().height + marginTop; + } + } +}; + +window.document.addEventListener("DOMContentLoaded", function (_event) { + // Recompute the position of margin elements anytime the body size changes + if (window.ResizeObserver) { + const resizeObserver = new window.ResizeObserver( + throttle(() => { + layoutMarginEls(); + if ( + window.document.body.getBoundingClientRect().width < 990 && + isReaderMode() + ) { + quartoToggleReader(); + } + }, 50) + ); + resizeObserver.observe(window.document.body); + } + + const tocEl = window.document.querySelector('nav.toc-active[role="doc-toc"]'); + const sidebarEl = window.document.getElementById("quarto-sidebar"); + const leftTocEl = window.document.getElementById("quarto-sidebar-toc-left"); + const marginSidebarEl = window.document.getElementById( + "quarto-margin-sidebar" + ); + // function to determine whether the element has a previous sibling that is active + const prevSiblingIsActiveLink = (el) => { + const sibling = el.previousElementSibling; + if (sibling && sibling.tagName === "A") { + return sibling.classList.contains("active"); + } else { + return false; + } + }; + + // dispatch for htmlwidgets + // they use slideenter event to trigger resize + function fireSlideEnter() { + const event = window.document.createEvent("Event"); + event.initEvent("slideenter", true, true); + window.document.dispatchEvent(event); + } + + const tabs = window.document.querySelectorAll('a[data-bs-toggle="tab"]'); + tabs.forEach((tab) => { + tab.addEventListener("shown.bs.tab", fireSlideEnter); + }); + + // dispatch for shiny + // they use BS shown and hidden events to trigger rendering + function distpatchShinyEvents(previous, current) { + if (window.jQuery) { + if (previous) { + window.jQuery(previous).trigger("hidden"); + } + if (current) { + window.jQuery(current).trigger("shown"); + } + } + } + + // tabby.js listener: Trigger event for htmlwidget and shiny + document.addEventListener( + "tabby", + function (event) { + fireSlideEnter(); + distpatchShinyEvents(event.detail.previousTab, event.detail.tab); + }, + false + ); + + // Track scrolling and mark TOC links as active + // get table of contents and sidebar (bail if we don't have at least one) + const tocLinks = tocEl + ? [...tocEl.querySelectorAll("a[data-scroll-target]")] + : []; + const makeActive = (link) => tocLinks[link].classList.add("active"); + const removeActive = (link) => tocLinks[link].classList.remove("active"); + const removeAllActive = () => + [...Array(tocLinks.length).keys()].forEach((link) => removeActive(link)); + + // activate the anchor for a section associated with this TOC entry + tocLinks.forEach((link) => { + link.addEventListener("click", () => { + if (link.href.indexOf("#") !== -1) { + const anchor = link.href.split("#")[1]; + const heading = window.document.querySelector( + `[data-anchor-id="${anchor}"]` + ); + if (heading) { + // Add the class + heading.classList.add("reveal-anchorjs-link"); + + // function to show the anchor + const handleMouseout = () => { + heading.classList.remove("reveal-anchorjs-link"); + heading.removeEventListener("mouseout", handleMouseout); + }; + + // add a function to clear the anchor when the user mouses out of it + heading.addEventListener("mouseout", handleMouseout); + } + } + }); + }); + + const sections = tocLinks.map((link) => { + const target = link.getAttribute("data-scroll-target"); + if (target.startsWith("#")) { + return window.document.getElementById(decodeURI(`${target.slice(1)}`)); + } else { + return window.document.querySelector(decodeURI(`${target}`)); + } + }); + + const sectionMargin = 200; + let currentActive = 0; + // track whether we've initialized state the first time + let init = false; + + const updateActiveLink = () => { + // The index from bottom to top (e.g. reversed list) + let sectionIndex = -1; + if ( + window.innerHeight + window.pageYOffset >= + window.document.body.offsetHeight + ) { + // This is the no-scroll case where last section should be the active one + sectionIndex = 0; + } else { + // This finds the last section visible on screen that should be made active + sectionIndex = [...sections].reverse().findIndex((section) => { + if (section) { + return window.pageYOffset >= section.offsetTop - sectionMargin; + } else { + return false; + } + }); + } + if (sectionIndex > -1) { + const current = sections.length - sectionIndex - 1; + if (current !== currentActive) { + removeAllActive(); + currentActive = current; + makeActive(current); + if (init) { + window.dispatchEvent(sectionChanged); + } + init = true; + } + } + }; + + const inHiddenRegion = (top, bottom, hiddenRegions) => { + for (const region of hiddenRegions) { + if (top <= region.bottom && bottom >= region.top) { + return true; + } + } + return false; + }; + + const categorySelector = "header.quarto-title-block .quarto-category"; + const activateCategories = (href) => { + // Find any categories + // Surround them with a link pointing back to: + // #category=Authoring + try { + const categoryEls = window.document.querySelectorAll(categorySelector); + for (const categoryEl of categoryEls) { + const categoryText = categoryEl.textContent; + if (categoryText) { + const link = `${href}#category=${encodeURIComponent(categoryText)}`; + const linkEl = window.document.createElement("a"); + linkEl.setAttribute("href", link); + for (const child of categoryEl.childNodes) { + linkEl.append(child); + } + categoryEl.appendChild(linkEl); + } + } + } catch { + // Ignore errors + } + }; + function hasTitleCategories() { + return window.document.querySelector(categorySelector) !== null; + } + + function offsetRelativeUrl(url) { + const offset = getMeta("quarto:offset"); + return offset ? offset + url : url; + } + + function offsetAbsoluteUrl(url) { + const offset = getMeta("quarto:offset"); + const baseUrl = new URL(offset, window.location); + + const projRelativeUrl = url.replace(baseUrl, ""); + if (projRelativeUrl.startsWith("/")) { + return projRelativeUrl; + } else { + return "/" + projRelativeUrl; + } + } + + // read a meta tag value + function getMeta(metaName) { + const metas = window.document.getElementsByTagName("meta"); + for (let i = 0; i < metas.length; i++) { + if (metas[i].getAttribute("name") === metaName) { + return metas[i].getAttribute("content"); + } + } + return ""; + } + + async function findAndActivateCategories() { + // Categories search with listing only use path without query + const currentPagePath = offsetAbsoluteUrl( + window.location.origin + window.location.pathname + ); + const response = await fetch(offsetRelativeUrl("listings.json")); + if (response.status == 200) { + return response.json().then(function (listingPaths) { + const listingHrefs = []; + for (const listingPath of listingPaths) { + const pathWithoutLeadingSlash = listingPath.listing.substring(1); + for (const item of listingPath.items) { + const encodedItem = encodeURI(item); + if ( + encodedItem === currentPagePath || + encodedItem === currentPagePath + "index.html" + ) { + // Resolve this path against the offset to be sure + // we already are using the correct path to the listing + // (this adjusts the listing urls to be rooted against + // whatever root the page is actually running against) + const relative = offsetRelativeUrl(pathWithoutLeadingSlash); + const baseUrl = window.location; + const resolvedPath = new URL(relative, baseUrl); + listingHrefs.push(resolvedPath.pathname); + break; + } + } + } + + // Look up the tree for a nearby linting and use that if we find one + const nearestListing = findNearestParentListing( + offsetAbsoluteUrl(window.location.pathname), + listingHrefs + ); + if (nearestListing) { + activateCategories(nearestListing); + } else { + // See if the referrer is a listing page for this item + const referredRelativePath = offsetAbsoluteUrl(document.referrer); + const referrerListing = listingHrefs.find((listingHref) => { + const isListingReferrer = + listingHref === referredRelativePath || + listingHref === referredRelativePath + "index.html"; + return isListingReferrer; + }); + + if (referrerListing) { + // Try to use the referrer if possible + activateCategories(referrerListing); + } else if (listingHrefs.length > 0) { + // Otherwise, just fall back to the first listing + activateCategories(listingHrefs[0]); + } + } + }); + } + } + if (hasTitleCategories()) { + findAndActivateCategories(); + } + + const findNearestParentListing = (href, listingHrefs) => { + if (!href || !listingHrefs) { + return undefined; + } + // Look up the tree for a nearby linting and use that if we find one + const relativeParts = href.substring(1).split("/"); + while (relativeParts.length > 0) { + const path = relativeParts.join("/"); + for (const listingHref of listingHrefs) { + if (listingHref.startsWith(path)) { + return listingHref; + } + } + relativeParts.pop(); + } + + return undefined; + }; + + const manageSidebarVisiblity = (el, placeholderDescriptor) => { + let isVisible = true; + let elRect; + + return (hiddenRegions) => { + if (el === null) { + return; + } + + // Find the last element of the TOC + const lastChildEl = el.lastElementChild; + + if (lastChildEl) { + // Converts the sidebar to a menu + const convertToMenu = () => { + for (const child of el.children) { + child.style.opacity = 0; + child.style.overflow = "hidden"; + child.style.pointerEvents = "none"; + } + + nexttick(() => { + const toggleContainer = window.document.createElement("div"); + toggleContainer.style.width = "100%"; + toggleContainer.classList.add("zindex-over-content"); + toggleContainer.classList.add("quarto-sidebar-toggle"); + toggleContainer.classList.add("headroom-target"); // Marks this to be managed by headeroom + toggleContainer.id = placeholderDescriptor.id; + toggleContainer.style.position = "fixed"; + + const toggleIcon = window.document.createElement("i"); + toggleIcon.classList.add("quarto-sidebar-toggle-icon"); + toggleIcon.classList.add("bi"); + toggleIcon.classList.add("bi-caret-down-fill"); + + const toggleTitle = window.document.createElement("div"); + const titleEl = window.document.body.querySelector( + placeholderDescriptor.titleSelector + ); + if (titleEl) { + toggleTitle.append( + titleEl.textContent || titleEl.innerText, + toggleIcon + ); + } + toggleTitle.classList.add("zindex-over-content"); + toggleTitle.classList.add("quarto-sidebar-toggle-title"); + toggleContainer.append(toggleTitle); + + const toggleContents = window.document.createElement("div"); + toggleContents.classList = el.classList; + toggleContents.classList.add("zindex-over-content"); + toggleContents.classList.add("quarto-sidebar-toggle-contents"); + for (const child of el.children) { + if (child.id === "toc-title") { + continue; + } + + const clone = child.cloneNode(true); + clone.style.opacity = 1; + clone.style.pointerEvents = null; + clone.style.display = null; + toggleContents.append(clone); + } + toggleContents.style.height = "0px"; + const positionToggle = () => { + // position the element (top left of parent, same width as parent) + if (!elRect) { + elRect = el.getBoundingClientRect(); + } + toggleContainer.style.left = `${elRect.left}px`; + toggleContainer.style.top = `${elRect.top}px`; + toggleContainer.style.width = `${elRect.width}px`; + }; + positionToggle(); + + toggleContainer.append(toggleContents); + el.parentElement.prepend(toggleContainer); + + // Process clicks + let tocShowing = false; + // Allow the caller to control whether this is dismissed + // when it is clicked (e.g. sidebar navigation supports + // opening and closing the nav tree, so don't dismiss on click) + const clickEl = placeholderDescriptor.dismissOnClick + ? toggleContainer + : toggleTitle; + + const closeToggle = () => { + if (tocShowing) { + toggleContainer.classList.remove("expanded"); + toggleContents.style.height = "0px"; + tocShowing = false; + } + }; + + // Get rid of any expanded toggle if the user scrolls + window.document.addEventListener( + "scroll", + throttle(() => { + closeToggle(); + }, 50) + ); + + // Handle positioning of the toggle + window.addEventListener( + "resize", + throttle(() => { + elRect = undefined; + positionToggle(); + }, 50) + ); + + window.addEventListener("quarto-hrChanged", () => { + elRect = undefined; + }); + + // Process the click + clickEl.onclick = () => { + if (!tocShowing) { + toggleContainer.classList.add("expanded"); + toggleContents.style.height = null; + tocShowing = true; + } else { + closeToggle(); + } + }; + }); + }; + + // Converts a sidebar from a menu back to a sidebar + const convertToSidebar = () => { + for (const child of el.children) { + child.style.opacity = 1; + child.style.overflow = null; + child.style.pointerEvents = null; + } + + const placeholderEl = window.document.getElementById( + placeholderDescriptor.id + ); + if (placeholderEl) { + placeholderEl.remove(); + } + + el.classList.remove("rollup"); + }; + + if (isReaderMode()) { + convertToMenu(); + isVisible = false; + } else { + // Find the top and bottom o the element that is being managed + const elTop = el.offsetTop; + const elBottom = + elTop + lastChildEl.offsetTop + lastChildEl.offsetHeight; + + if (!isVisible) { + // If the element is current not visible reveal if there are + // no conflicts with overlay regions + if (!inHiddenRegion(elTop, elBottom, hiddenRegions)) { + convertToSidebar(); + isVisible = true; + } + } else { + // If the element is visible, hide it if it conflicts with overlay regions + // and insert a placeholder toggle (or if we're in reader mode) + if (inHiddenRegion(elTop, elBottom, hiddenRegions)) { + convertToMenu(); + isVisible = false; + } + } + } + } + }; + }; + + const tabEls = document.querySelectorAll('a[data-bs-toggle="tab"]'); + for (const tabEl of tabEls) { + const id = tabEl.getAttribute("data-bs-target"); + if (id) { + const columnEl = document.querySelector( + `${id} .column-margin, .tabset-margin-content` + ); + if (columnEl) + tabEl.addEventListener("shown.bs.tab", function (event) { + const el = event.srcElement; + if (el) { + const visibleCls = `${el.id}-margin-content`; + // walk up until we find a parent tabset + let panelTabsetEl = el.parentElement; + while (panelTabsetEl) { + if (panelTabsetEl.classList.contains("panel-tabset")) { + break; + } + panelTabsetEl = panelTabsetEl.parentElement; + } + + if (panelTabsetEl) { + const prevSib = panelTabsetEl.previousElementSibling; + if ( + prevSib && + prevSib.classList.contains("tabset-margin-container") + ) { + const childNodes = prevSib.querySelectorAll( + ".tabset-margin-content" + ); + for (const childEl of childNodes) { + if (childEl.classList.contains(visibleCls)) { + childEl.classList.remove("collapse"); + } else { + childEl.classList.add("collapse"); + } + } + } + } + } + + layoutMarginEls(); + }); + } + } + + // Manage the visibility of the toc and the sidebar + const marginScrollVisibility = manageSidebarVisiblity(marginSidebarEl, { + id: "quarto-toc-toggle", + titleSelector: "#toc-title", + dismissOnClick: true, + }); + const sidebarScrollVisiblity = manageSidebarVisiblity(sidebarEl, { + id: "quarto-sidebarnav-toggle", + titleSelector: ".title", + dismissOnClick: false, + }); + let tocLeftScrollVisibility; + if (leftTocEl) { + tocLeftScrollVisibility = manageSidebarVisiblity(leftTocEl, { + id: "quarto-lefttoc-toggle", + titleSelector: "#toc-title", + dismissOnClick: true, + }); + } + + // Find the first element that uses formatting in special columns + const conflictingEls = window.document.body.querySelectorAll( + '[class^="column-"], [class*=" column-"], aside, [class*="margin-caption"], [class*=" margin-caption"], [class*="margin-ref"], [class*=" margin-ref"]' + ); + + // Filter all the possibly conflicting elements into ones + // the do conflict on the left or ride side + const arrConflictingEls = Array.from(conflictingEls); + const leftSideConflictEls = arrConflictingEls.filter((el) => { + if (el.tagName === "ASIDE") { + return false; + } + return Array.from(el.classList).find((className) => { + return ( + className !== "column-body" && + className.startsWith("column-") && + !className.endsWith("right") && + !className.endsWith("container") && + className !== "column-margin" + ); + }); + }); + const rightSideConflictEls = arrConflictingEls.filter((el) => { + if (el.tagName === "ASIDE") { + return true; + } + + const hasMarginCaption = Array.from(el.classList).find((className) => { + return className == "margin-caption"; + }); + if (hasMarginCaption) { + return true; + } + + return Array.from(el.classList).find((className) => { + return ( + className !== "column-body" && + !className.endsWith("container") && + className.startsWith("column-") && + !className.endsWith("left") + ); + }); + }); + + const kOverlapPaddingSize = 10; + function toRegions(els) { + return els.map((el) => { + const boundRect = el.getBoundingClientRect(); + const top = + boundRect.top + + document.documentElement.scrollTop - + kOverlapPaddingSize; + return { + top, + bottom: top + el.scrollHeight + 2 * kOverlapPaddingSize, + }; + }); + } + + let hasObserved = false; + const visibleItemObserver = (els) => { + let visibleElements = [...els]; + const intersectionObserver = new IntersectionObserver( + (entries, _observer) => { + entries.forEach((entry) => { + if (entry.isIntersecting) { + if (visibleElements.indexOf(entry.target) === -1) { + visibleElements.push(entry.target); + } + } else { + visibleElements = visibleElements.filter((visibleEntry) => { + return visibleEntry !== entry; + }); + } + }); + + if (!hasObserved) { + hideOverlappedSidebars(); + } + hasObserved = true; + }, + {} + ); + els.forEach((el) => { + intersectionObserver.observe(el); + }); + + return { + getVisibleEntries: () => { + return visibleElements; + }, + }; + }; + + const rightElementObserver = visibleItemObserver(rightSideConflictEls); + const leftElementObserver = visibleItemObserver(leftSideConflictEls); + + const hideOverlappedSidebars = () => { + marginScrollVisibility(toRegions(rightElementObserver.getVisibleEntries())); + sidebarScrollVisiblity(toRegions(leftElementObserver.getVisibleEntries())); + if (tocLeftScrollVisibility) { + tocLeftScrollVisibility( + toRegions(leftElementObserver.getVisibleEntries()) + ); + } + }; + + window.quartoToggleReader = () => { + // Applies a slow class (or removes it) + // to update the transition speed + const slowTransition = (slow) => { + const manageTransition = (id, slow) => { + const el = document.getElementById(id); + if (el) { + if (slow) { + el.classList.add("slow"); + } else { + el.classList.remove("slow"); + } + } + }; + + manageTransition("TOC", slow); + manageTransition("quarto-sidebar", slow); + }; + const readerMode = !isReaderMode(); + setReaderModeValue(readerMode); + + // If we're entering reader mode, slow the transition + if (readerMode) { + slowTransition(readerMode); + } + highlightReaderToggle(readerMode); + hideOverlappedSidebars(); + + // If we're exiting reader mode, restore the non-slow transition + if (!readerMode) { + slowTransition(!readerMode); + } + }; + + const highlightReaderToggle = (readerMode) => { + const els = document.querySelectorAll(".quarto-reader-toggle"); + if (els) { + els.forEach((el) => { + if (readerMode) { + el.classList.add("reader"); + } else { + el.classList.remove("reader"); + } + }); + } + }; + + const setReaderModeValue = (val) => { + if (window.location.protocol !== "file:") { + window.localStorage.setItem("quarto-reader-mode", val); + } else { + localReaderMode = val; + } + }; + + const isReaderMode = () => { + if (window.location.protocol !== "file:") { + return window.localStorage.getItem("quarto-reader-mode") === "true"; + } else { + return localReaderMode; + } + }; + let localReaderMode = null; + + const tocOpenDepthStr = tocEl?.getAttribute("data-toc-expanded"); + const tocOpenDepth = tocOpenDepthStr ? Number(tocOpenDepthStr) : 1; + + // Walk the TOC and collapse/expand nodes + // Nodes are expanded if: + // - they are top level + // - they have children that are 'active' links + // - they are directly below an link that is 'active' + const walk = (el, depth) => { + // Tick depth when we enter a UL + if (el.tagName === "UL") { + depth = depth + 1; + } + + // It this is active link + let isActiveNode = false; + if (el.tagName === "A" && el.classList.contains("active")) { + isActiveNode = true; + } + + // See if there is an active child to this element + let hasActiveChild = false; + for (const child of el.children) { + hasActiveChild = walk(child, depth) || hasActiveChild; + } + + // Process the collapse state if this is an UL + if (el.tagName === "UL") { + if (tocOpenDepth === -1 && depth > 1) { + // toc-expand: false + el.classList.add("collapse"); + } else if ( + depth <= tocOpenDepth || + hasActiveChild || + prevSiblingIsActiveLink(el) + ) { + el.classList.remove("collapse"); + } else { + el.classList.add("collapse"); + } + + // untick depth when we leave a UL + depth = depth - 1; + } + return hasActiveChild || isActiveNode; + }; + + // walk the TOC and expand / collapse any items that should be shown + if (tocEl) { + updateActiveLink(); + walk(tocEl, 0); + } + + // Throttle the scroll event and walk peridiocally + window.document.addEventListener( + "scroll", + throttle(() => { + if (tocEl) { + updateActiveLink(); + walk(tocEl, 0); + } + if (!isReaderMode()) { + hideOverlappedSidebars(); + } + }, 5) + ); + window.addEventListener( + "resize", + throttle(() => { + if (tocEl) { + updateActiveLink(); + walk(tocEl, 0); + } + if (!isReaderMode()) { + hideOverlappedSidebars(); + } + }, 10) + ); + hideOverlappedSidebars(); + highlightReaderToggle(isReaderMode()); +}); + +tabsets.init(); +axe.init(); + +function throttle(func, wait) { + let waiting = false; + return function () { + if (!waiting) { + func.apply(this, arguments); + waiting = true; + setTimeout(function () { + waiting = false; + }, wait); + } + }; +} + +function nexttick(func) { + return setTimeout(func, 0); +} diff --git a/docs/site_libs/quarto-html/tabsets/tabsets.js b/docs/site_libs/quarto-html/tabsets/tabsets.js new file mode 100644 index 0000000..51345d0 --- /dev/null +++ b/docs/site_libs/quarto-html/tabsets/tabsets.js @@ -0,0 +1,95 @@ +// grouped tabsets + +export function init() { + window.addEventListener("pageshow", (_event) => { + function getTabSettings() { + const data = localStorage.getItem("quarto-persistent-tabsets-data"); + if (!data) { + localStorage.setItem("quarto-persistent-tabsets-data", "{}"); + return {}; + } + if (data) { + return JSON.parse(data); + } + } + + function setTabSettings(data) { + localStorage.setItem( + "quarto-persistent-tabsets-data", + JSON.stringify(data) + ); + } + + function setTabState(groupName, groupValue) { + const data = getTabSettings(); + data[groupName] = groupValue; + setTabSettings(data); + } + + function toggleTab(tab, active) { + const tabPanelId = tab.getAttribute("aria-controls"); + const tabPanel = document.getElementById(tabPanelId); + if (active) { + tab.classList.add("active"); + tabPanel.classList.add("active"); + } else { + tab.classList.remove("active"); + tabPanel.classList.remove("active"); + } + } + + function toggleAll(selectedGroup, selectorsToSync) { + for (const [thisGroup, tabs] of Object.entries(selectorsToSync)) { + const active = selectedGroup === thisGroup; + for (const tab of tabs) { + toggleTab(tab, active); + } + } + } + + function findSelectorsToSyncByLanguage() { + const result = {}; + const tabs = Array.from( + document.querySelectorAll(`div[data-group] a[id^='tabset-']`) + ); + for (const item of tabs) { + const div = item.parentElement.parentElement.parentElement; + const group = div.getAttribute("data-group"); + if (!result[group]) { + result[group] = {}; + } + const selectorsToSync = result[group]; + const value = item.innerHTML; + if (!selectorsToSync[value]) { + selectorsToSync[value] = []; + } + selectorsToSync[value].push(item); + } + return result; + } + + function setupSelectorSync() { + const selectorsToSync = findSelectorsToSyncByLanguage(); + Object.entries(selectorsToSync).forEach(([group, tabSetsByValue]) => { + Object.entries(tabSetsByValue).forEach(([value, items]) => { + items.forEach((item) => { + item.addEventListener("click", (_event) => { + setTabState(group, value); + toggleAll(value, selectorsToSync[group]); + }); + }); + }); + }); + return selectorsToSync; + } + + const selectorsToSync = setupSelectorSync(); + for (const [group, selectedName] of Object.entries(getTabSettings())) { + const selectors = selectorsToSync[group]; + // it's possible that stale state gives us empty selections, so we explicitly check here. + if (selectors) { + toggleAll(selectedName, selectors); + } + } + }); +} diff --git a/docs/site_libs/quarto-html/tippy.css b/docs/site_libs/quarto-html/tippy.css new file mode 100644 index 0000000..e6ae635 --- /dev/null +++ b/docs/site_libs/quarto-html/tippy.css @@ -0,0 +1 @@ +.tippy-box[data-animation=fade][data-state=hidden]{opacity:0}[data-tippy-root]{max-width:calc(100vw - 10px)}.tippy-box{position:relative;background-color:#333;color:#fff;border-radius:4px;font-size:14px;line-height:1.4;white-space:normal;outline:0;transition-property:transform,visibility,opacity}.tippy-box[data-placement^=top]>.tippy-arrow{bottom:0}.tippy-box[data-placement^=top]>.tippy-arrow:before{bottom:-7px;left:0;border-width:8px 8px 0;border-top-color:initial;transform-origin:center top}.tippy-box[data-placement^=bottom]>.tippy-arrow{top:0}.tippy-box[data-placement^=bottom]>.tippy-arrow:before{top:-7px;left:0;border-width:0 8px 8px;border-bottom-color:initial;transform-origin:center bottom}.tippy-box[data-placement^=left]>.tippy-arrow{right:0}.tippy-box[data-placement^=left]>.tippy-arrow:before{border-width:8px 0 8px 8px;border-left-color:initial;right:-7px;transform-origin:center left}.tippy-box[data-placement^=right]>.tippy-arrow{left:0}.tippy-box[data-placement^=right]>.tippy-arrow:before{left:-7px;border-width:8px 8px 8px 0;border-right-color:initial;transform-origin:center right}.tippy-box[data-inertia][data-state=visible]{transition-timing-function:cubic-bezier(.54,1.5,.38,1.11)}.tippy-arrow{width:16px;height:16px;color:#333}.tippy-arrow:before{content:"";position:absolute;border-color:transparent;border-style:solid}.tippy-content{position:relative;padding:5px 9px;z-index:1} \ No newline at end of file diff --git a/docs/site_libs/quarto-html/tippy.umd.min.js b/docs/site_libs/quarto-html/tippy.umd.min.js new file mode 100644 index 0000000..ca292be --- /dev/null +++ b/docs/site_libs/quarto-html/tippy.umd.min.js @@ -0,0 +1,2 @@ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t(require("@popperjs/core")):"function"==typeof define&&define.amd?define(["@popperjs/core"],t):(e=e||self).tippy=t(e.Popper)}(this,(function(e){"use strict";var t={passive:!0,capture:!0},n=function(){return document.body};function r(e,t,n){if(Array.isArray(e)){var r=e[t];return null==r?Array.isArray(n)?n[t]:n:r}return e}function o(e,t){var n={}.toString.call(e);return 0===n.indexOf("[object")&&n.indexOf(t+"]")>-1}function i(e,t){return"function"==typeof e?e.apply(void 0,t):e}function a(e,t){return 0===t?e:function(r){clearTimeout(n),n=setTimeout((function(){e(r)}),t)};var n}function s(e,t){var n=Object.assign({},e);return t.forEach((function(e){delete n[e]})),n}function u(e){return[].concat(e)}function c(e,t){-1===e.indexOf(t)&&e.push(t)}function p(e){return e.split("-")[0]}function f(e){return[].slice.call(e)}function l(e){return Object.keys(e).reduce((function(t,n){return void 0!==e[n]&&(t[n]=e[n]),t}),{})}function d(){return document.createElement("div")}function v(e){return["Element","Fragment"].some((function(t){return o(e,t)}))}function m(e){return o(e,"MouseEvent")}function g(e){return!(!e||!e._tippy||e._tippy.reference!==e)}function h(e){return v(e)?[e]:function(e){return o(e,"NodeList")}(e)?f(e):Array.isArray(e)?e:f(document.querySelectorAll(e))}function b(e,t){e.forEach((function(e){e&&(e.style.transitionDuration=t+"ms")}))}function y(e,t){e.forEach((function(e){e&&e.setAttribute("data-state",t)}))}function w(e){var t,n=u(e)[0];return null!=n&&null!=(t=n.ownerDocument)&&t.body?n.ownerDocument:document}function E(e,t,n){var r=t+"EventListener";["transitionend","webkitTransitionEnd"].forEach((function(t){e[r](t,n)}))}function O(e,t){for(var n=t;n;){var r;if(e.contains(n))return!0;n=null==n.getRootNode||null==(r=n.getRootNode())?void 0:r.host}return!1}var x={isTouch:!1},C=0;function T(){x.isTouch||(x.isTouch=!0,window.performance&&document.addEventListener("mousemove",A))}function A(){var e=performance.now();e-C<20&&(x.isTouch=!1,document.removeEventListener("mousemove",A)),C=e}function L(){var e=document.activeElement;if(g(e)){var t=e._tippy;e.blur&&!t.state.isVisible&&e.blur()}}var D=!!("undefined"!=typeof window&&"undefined"!=typeof document)&&!!window.msCrypto,R=Object.assign({appendTo:n,aria:{content:"auto",expanded:"auto"},delay:0,duration:[300,250],getReferenceClientRect:null,hideOnClick:!0,ignoreAttributes:!1,interactive:!1,interactiveBorder:2,interactiveDebounce:0,moveTransition:"",offset:[0,10],onAfterUpdate:function(){},onBeforeUpdate:function(){},onCreate:function(){},onDestroy:function(){},onHidden:function(){},onHide:function(){},onMount:function(){},onShow:function(){},onShown:function(){},onTrigger:function(){},onUntrigger:function(){},onClickOutside:function(){},placement:"top",plugins:[],popperOptions:{},render:null,showOnCreate:!1,touch:!0,trigger:"mouseenter focus",triggerTarget:null},{animateFill:!1,followCursor:!1,inlinePositioning:!1,sticky:!1},{allowHTML:!1,animation:"fade",arrow:!0,content:"",inertia:!1,maxWidth:350,role:"tooltip",theme:"",zIndex:9999}),k=Object.keys(R);function P(e){var t=(e.plugins||[]).reduce((function(t,n){var r,o=n.name,i=n.defaultValue;o&&(t[o]=void 0!==e[o]?e[o]:null!=(r=R[o])?r:i);return t}),{});return Object.assign({},e,t)}function j(e,t){var n=Object.assign({},t,{content:i(t.content,[e])},t.ignoreAttributes?{}:function(e,t){return(t?Object.keys(P(Object.assign({},R,{plugins:t}))):k).reduce((function(t,n){var r=(e.getAttribute("data-tippy-"+n)||"").trim();if(!r)return t;if("content"===n)t[n]=r;else try{t[n]=JSON.parse(r)}catch(e){t[n]=r}return t}),{})}(e,t.plugins));return n.aria=Object.assign({},R.aria,n.aria),n.aria={expanded:"auto"===n.aria.expanded?t.interactive:n.aria.expanded,content:"auto"===n.aria.content?t.interactive?null:"describedby":n.aria.content},n}function M(e,t){e.innerHTML=t}function V(e){var t=d();return!0===e?t.className="tippy-arrow":(t.className="tippy-svg-arrow",v(e)?t.appendChild(e):M(t,e)),t}function I(e,t){v(t.content)?(M(e,""),e.appendChild(t.content)):"function"!=typeof t.content&&(t.allowHTML?M(e,t.content):e.textContent=t.content)}function S(e){var t=e.firstElementChild,n=f(t.children);return{box:t,content:n.find((function(e){return e.classList.contains("tippy-content")})),arrow:n.find((function(e){return e.classList.contains("tippy-arrow")||e.classList.contains("tippy-svg-arrow")})),backdrop:n.find((function(e){return e.classList.contains("tippy-backdrop")}))}}function N(e){var t=d(),n=d();n.className="tippy-box",n.setAttribute("data-state","hidden"),n.setAttribute("tabindex","-1");var r=d();function o(n,r){var o=S(t),i=o.box,a=o.content,s=o.arrow;r.theme?i.setAttribute("data-theme",r.theme):i.removeAttribute("data-theme"),"string"==typeof r.animation?i.setAttribute("data-animation",r.animation):i.removeAttribute("data-animation"),r.inertia?i.setAttribute("data-inertia",""):i.removeAttribute("data-inertia"),i.style.maxWidth="number"==typeof r.maxWidth?r.maxWidth+"px":r.maxWidth,r.role?i.setAttribute("role",r.role):i.removeAttribute("role"),n.content===r.content&&n.allowHTML===r.allowHTML||I(a,e.props),r.arrow?s?n.arrow!==r.arrow&&(i.removeChild(s),i.appendChild(V(r.arrow))):i.appendChild(V(r.arrow)):s&&i.removeChild(s)}return r.className="tippy-content",r.setAttribute("data-state","hidden"),I(r,e.props),t.appendChild(n),n.appendChild(r),o(e.props,e.props),{popper:t,onUpdate:o}}N.$$tippy=!0;var B=1,H=[],U=[];function _(o,s){var v,g,h,C,T,A,L,k,M=j(o,Object.assign({},R,P(l(s)))),V=!1,I=!1,N=!1,_=!1,F=[],W=a(we,M.interactiveDebounce),X=B++,Y=(k=M.plugins).filter((function(e,t){return k.indexOf(e)===t})),$={id:X,reference:o,popper:d(),popperInstance:null,props:M,state:{isEnabled:!0,isVisible:!1,isDestroyed:!1,isMounted:!1,isShown:!1},plugins:Y,clearDelayTimeouts:function(){clearTimeout(v),clearTimeout(g),cancelAnimationFrame(h)},setProps:function(e){if($.state.isDestroyed)return;ae("onBeforeUpdate",[$,e]),be();var t=$.props,n=j(o,Object.assign({},t,l(e),{ignoreAttributes:!0}));$.props=n,he(),t.interactiveDebounce!==n.interactiveDebounce&&(ce(),W=a(we,n.interactiveDebounce));t.triggerTarget&&!n.triggerTarget?u(t.triggerTarget).forEach((function(e){e.removeAttribute("aria-expanded")})):n.triggerTarget&&o.removeAttribute("aria-expanded");ue(),ie(),J&&J(t,n);$.popperInstance&&(Ce(),Ae().forEach((function(e){requestAnimationFrame(e._tippy.popperInstance.forceUpdate)})));ae("onAfterUpdate",[$,e])},setContent:function(e){$.setProps({content:e})},show:function(){var e=$.state.isVisible,t=$.state.isDestroyed,o=!$.state.isEnabled,a=x.isTouch&&!$.props.touch,s=r($.props.duration,0,R.duration);if(e||t||o||a)return;if(te().hasAttribute("disabled"))return;if(ae("onShow",[$],!1),!1===$.props.onShow($))return;$.state.isVisible=!0,ee()&&(z.style.visibility="visible");ie(),de(),$.state.isMounted||(z.style.transition="none");if(ee()){var u=re(),p=u.box,f=u.content;b([p,f],0)}A=function(){var e;if($.state.isVisible&&!_){if(_=!0,z.offsetHeight,z.style.transition=$.props.moveTransition,ee()&&$.props.animation){var t=re(),n=t.box,r=t.content;b([n,r],s),y([n,r],"visible")}se(),ue(),c(U,$),null==(e=$.popperInstance)||e.forceUpdate(),ae("onMount",[$]),$.props.animation&&ee()&&function(e,t){me(e,t)}(s,(function(){$.state.isShown=!0,ae("onShown",[$])}))}},function(){var e,t=$.props.appendTo,r=te();e=$.props.interactive&&t===n||"parent"===t?r.parentNode:i(t,[r]);e.contains(z)||e.appendChild(z);$.state.isMounted=!0,Ce()}()},hide:function(){var e=!$.state.isVisible,t=$.state.isDestroyed,n=!$.state.isEnabled,o=r($.props.duration,1,R.duration);if(e||t||n)return;if(ae("onHide",[$],!1),!1===$.props.onHide($))return;$.state.isVisible=!1,$.state.isShown=!1,_=!1,V=!1,ee()&&(z.style.visibility="hidden");if(ce(),ve(),ie(!0),ee()){var i=re(),a=i.box,s=i.content;$.props.animation&&(b([a,s],o),y([a,s],"hidden"))}se(),ue(),$.props.animation?ee()&&function(e,t){me(e,(function(){!$.state.isVisible&&z.parentNode&&z.parentNode.contains(z)&&t()}))}(o,$.unmount):$.unmount()},hideWithInteractivity:function(e){ne().addEventListener("mousemove",W),c(H,W),W(e)},enable:function(){$.state.isEnabled=!0},disable:function(){$.hide(),$.state.isEnabled=!1},unmount:function(){$.state.isVisible&&$.hide();if(!$.state.isMounted)return;Te(),Ae().forEach((function(e){e._tippy.unmount()})),z.parentNode&&z.parentNode.removeChild(z);U=U.filter((function(e){return e!==$})),$.state.isMounted=!1,ae("onHidden",[$])},destroy:function(){if($.state.isDestroyed)return;$.clearDelayTimeouts(),$.unmount(),be(),delete o._tippy,$.state.isDestroyed=!0,ae("onDestroy",[$])}};if(!M.render)return $;var q=M.render($),z=q.popper,J=q.onUpdate;z.setAttribute("data-tippy-root",""),z.id="tippy-"+$.id,$.popper=z,o._tippy=$,z._tippy=$;var G=Y.map((function(e){return e.fn($)})),K=o.hasAttribute("aria-expanded");return he(),ue(),ie(),ae("onCreate",[$]),M.showOnCreate&&Le(),z.addEventListener("mouseenter",(function(){$.props.interactive&&$.state.isVisible&&$.clearDelayTimeouts()})),z.addEventListener("mouseleave",(function(){$.props.interactive&&$.props.trigger.indexOf("mouseenter")>=0&&ne().addEventListener("mousemove",W)})),$;function Q(){var e=$.props.touch;return Array.isArray(e)?e:[e,0]}function Z(){return"hold"===Q()[0]}function ee(){var e;return!(null==(e=$.props.render)||!e.$$tippy)}function te(){return L||o}function ne(){var e=te().parentNode;return e?w(e):document}function re(){return S(z)}function oe(e){return $.state.isMounted&&!$.state.isVisible||x.isTouch||C&&"focus"===C.type?0:r($.props.delay,e?0:1,R.delay)}function ie(e){void 0===e&&(e=!1),z.style.pointerEvents=$.props.interactive&&!e?"":"none",z.style.zIndex=""+$.props.zIndex}function ae(e,t,n){var r;(void 0===n&&(n=!0),G.forEach((function(n){n[e]&&n[e].apply(n,t)})),n)&&(r=$.props)[e].apply(r,t)}function se(){var e=$.props.aria;if(e.content){var t="aria-"+e.content,n=z.id;u($.props.triggerTarget||o).forEach((function(e){var r=e.getAttribute(t);if($.state.isVisible)e.setAttribute(t,r?r+" "+n:n);else{var o=r&&r.replace(n,"").trim();o?e.setAttribute(t,o):e.removeAttribute(t)}}))}}function ue(){!K&&$.props.aria.expanded&&u($.props.triggerTarget||o).forEach((function(e){$.props.interactive?e.setAttribute("aria-expanded",$.state.isVisible&&e===te()?"true":"false"):e.removeAttribute("aria-expanded")}))}function ce(){ne().removeEventListener("mousemove",W),H=H.filter((function(e){return e!==W}))}function pe(e){if(!x.isTouch||!N&&"mousedown"!==e.type){var t=e.composedPath&&e.composedPath()[0]||e.target;if(!$.props.interactive||!O(z,t)){if(u($.props.triggerTarget||o).some((function(e){return O(e,t)}))){if(x.isTouch)return;if($.state.isVisible&&$.props.trigger.indexOf("click")>=0)return}else ae("onClickOutside",[$,e]);!0===$.props.hideOnClick&&($.clearDelayTimeouts(),$.hide(),I=!0,setTimeout((function(){I=!1})),$.state.isMounted||ve())}}}function fe(){N=!0}function le(){N=!1}function de(){var e=ne();e.addEventListener("mousedown",pe,!0),e.addEventListener("touchend",pe,t),e.addEventListener("touchstart",le,t),e.addEventListener("touchmove",fe,t)}function ve(){var e=ne();e.removeEventListener("mousedown",pe,!0),e.removeEventListener("touchend",pe,t),e.removeEventListener("touchstart",le,t),e.removeEventListener("touchmove",fe,t)}function me(e,t){var n=re().box;function r(e){e.target===n&&(E(n,"remove",r),t())}if(0===e)return t();E(n,"remove",T),E(n,"add",r),T=r}function ge(e,t,n){void 0===n&&(n=!1),u($.props.triggerTarget||o).forEach((function(r){r.addEventListener(e,t,n),F.push({node:r,eventType:e,handler:t,options:n})}))}function he(){var e;Z()&&(ge("touchstart",ye,{passive:!0}),ge("touchend",Ee,{passive:!0})),(e=$.props.trigger,e.split(/\s+/).filter(Boolean)).forEach((function(e){if("manual"!==e)switch(ge(e,ye),e){case"mouseenter":ge("mouseleave",Ee);break;case"focus":ge(D?"focusout":"blur",Oe);break;case"focusin":ge("focusout",Oe)}}))}function be(){F.forEach((function(e){var t=e.node,n=e.eventType,r=e.handler,o=e.options;t.removeEventListener(n,r,o)})),F=[]}function ye(e){var t,n=!1;if($.state.isEnabled&&!xe(e)&&!I){var r="focus"===(null==(t=C)?void 0:t.type);C=e,L=e.currentTarget,ue(),!$.state.isVisible&&m(e)&&H.forEach((function(t){return t(e)})),"click"===e.type&&($.props.trigger.indexOf("mouseenter")<0||V)&&!1!==$.props.hideOnClick&&$.state.isVisible?n=!0:Le(e),"click"===e.type&&(V=!n),n&&!r&&De(e)}}function we(e){var t=e.target,n=te().contains(t)||z.contains(t);"mousemove"===e.type&&n||function(e,t){var n=t.clientX,r=t.clientY;return e.every((function(e){var t=e.popperRect,o=e.popperState,i=e.props.interactiveBorder,a=p(o.placement),s=o.modifiersData.offset;if(!s)return!0;var u="bottom"===a?s.top.y:0,c="top"===a?s.bottom.y:0,f="right"===a?s.left.x:0,l="left"===a?s.right.x:0,d=t.top-r+u>i,v=r-t.bottom-c>i,m=t.left-n+f>i,g=n-t.right-l>i;return d||v||m||g}))}(Ae().concat(z).map((function(e){var t,n=null==(t=e._tippy.popperInstance)?void 0:t.state;return n?{popperRect:e.getBoundingClientRect(),popperState:n,props:M}:null})).filter(Boolean),e)&&(ce(),De(e))}function Ee(e){xe(e)||$.props.trigger.indexOf("click")>=0&&V||($.props.interactive?$.hideWithInteractivity(e):De(e))}function Oe(e){$.props.trigger.indexOf("focusin")<0&&e.target!==te()||$.props.interactive&&e.relatedTarget&&z.contains(e.relatedTarget)||De(e)}function xe(e){return!!x.isTouch&&Z()!==e.type.indexOf("touch")>=0}function Ce(){Te();var t=$.props,n=t.popperOptions,r=t.placement,i=t.offset,a=t.getReferenceClientRect,s=t.moveTransition,u=ee()?S(z).arrow:null,c=a?{getBoundingClientRect:a,contextElement:a.contextElement||te()}:o,p=[{name:"offset",options:{offset:i}},{name:"preventOverflow",options:{padding:{top:2,bottom:2,left:5,right:5}}},{name:"flip",options:{padding:5}},{name:"computeStyles",options:{adaptive:!s}},{name:"$$tippy",enabled:!0,phase:"beforeWrite",requires:["computeStyles"],fn:function(e){var t=e.state;if(ee()){var n=re().box;["placement","reference-hidden","escaped"].forEach((function(e){"placement"===e?n.setAttribute("data-placement",t.placement):t.attributes.popper["data-popper-"+e]?n.setAttribute("data-"+e,""):n.removeAttribute("data-"+e)})),t.attributes.popper={}}}}];ee()&&u&&p.push({name:"arrow",options:{element:u,padding:3}}),p.push.apply(p,(null==n?void 0:n.modifiers)||[]),$.popperInstance=e.createPopper(c,z,Object.assign({},n,{placement:r,onFirstUpdate:A,modifiers:p}))}function Te(){$.popperInstance&&($.popperInstance.destroy(),$.popperInstance=null)}function Ae(){return f(z.querySelectorAll("[data-tippy-root]"))}function Le(e){$.clearDelayTimeouts(),e&&ae("onTrigger",[$,e]),de();var t=oe(!0),n=Q(),r=n[0],o=n[1];x.isTouch&&"hold"===r&&o&&(t=o),t?v=setTimeout((function(){$.show()}),t):$.show()}function De(e){if($.clearDelayTimeouts(),ae("onUntrigger",[$,e]),$.state.isVisible){if(!($.props.trigger.indexOf("mouseenter")>=0&&$.props.trigger.indexOf("click")>=0&&["mouseleave","mousemove"].indexOf(e.type)>=0&&V)){var t=oe(!1);t?g=setTimeout((function(){$.state.isVisible&&$.hide()}),t):h=requestAnimationFrame((function(){$.hide()}))}}else ve()}}function F(e,n){void 0===n&&(n={});var r=R.plugins.concat(n.plugins||[]);document.addEventListener("touchstart",T,t),window.addEventListener("blur",L);var o=Object.assign({},n,{plugins:r}),i=h(e).reduce((function(e,t){var n=t&&_(t,o);return n&&e.push(n),e}),[]);return v(e)?i[0]:i}F.defaultProps=R,F.setDefaultProps=function(e){Object.keys(e).forEach((function(t){R[t]=e[t]}))},F.currentInput=x;var W=Object.assign({},e.applyStyles,{effect:function(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow)}}),X={mouseover:"mouseenter",focusin:"focus",click:"click"};var Y={name:"animateFill",defaultValue:!1,fn:function(e){var t;if(null==(t=e.props.render)||!t.$$tippy)return{};var n=S(e.popper),r=n.box,o=n.content,i=e.props.animateFill?function(){var e=d();return e.className="tippy-backdrop",y([e],"hidden"),e}():null;return{onCreate:function(){i&&(r.insertBefore(i,r.firstElementChild),r.setAttribute("data-animatefill",""),r.style.overflow="hidden",e.setProps({arrow:!1,animation:"shift-away"}))},onMount:function(){if(i){var e=r.style.transitionDuration,t=Number(e.replace("ms",""));o.style.transitionDelay=Math.round(t/10)+"ms",i.style.transitionDuration=e,y([i],"visible")}},onShow:function(){i&&(i.style.transitionDuration="0ms")},onHide:function(){i&&y([i],"hidden")}}}};var $={clientX:0,clientY:0},q=[];function z(e){var t=e.clientX,n=e.clientY;$={clientX:t,clientY:n}}var J={name:"followCursor",defaultValue:!1,fn:function(e){var t=e.reference,n=w(e.props.triggerTarget||t),r=!1,o=!1,i=!0,a=e.props;function s(){return"initial"===e.props.followCursor&&e.state.isVisible}function u(){n.addEventListener("mousemove",f)}function c(){n.removeEventListener("mousemove",f)}function p(){r=!0,e.setProps({getReferenceClientRect:null}),r=!1}function f(n){var r=!n.target||t.contains(n.target),o=e.props.followCursor,i=n.clientX,a=n.clientY,s=t.getBoundingClientRect(),u=i-s.left,c=a-s.top;!r&&e.props.interactive||e.setProps({getReferenceClientRect:function(){var e=t.getBoundingClientRect(),n=i,r=a;"initial"===o&&(n=e.left+u,r=e.top+c);var s="horizontal"===o?e.top:r,p="vertical"===o?e.right:n,f="horizontal"===o?e.bottom:r,l="vertical"===o?e.left:n;return{width:p-l,height:f-s,top:s,right:p,bottom:f,left:l}}})}function l(){e.props.followCursor&&(q.push({instance:e,doc:n}),function(e){e.addEventListener("mousemove",z)}(n))}function d(){0===(q=q.filter((function(t){return t.instance!==e}))).filter((function(e){return e.doc===n})).length&&function(e){e.removeEventListener("mousemove",z)}(n)}return{onCreate:l,onDestroy:d,onBeforeUpdate:function(){a=e.props},onAfterUpdate:function(t,n){var i=n.followCursor;r||void 0!==i&&a.followCursor!==i&&(d(),i?(l(),!e.state.isMounted||o||s()||u()):(c(),p()))},onMount:function(){e.props.followCursor&&!o&&(i&&(f($),i=!1),s()||u())},onTrigger:function(e,t){m(t)&&($={clientX:t.clientX,clientY:t.clientY}),o="focus"===t.type},onHidden:function(){e.props.followCursor&&(p(),c(),i=!0)}}}};var G={name:"inlinePositioning",defaultValue:!1,fn:function(e){var t,n=e.reference;var r=-1,o=!1,i=[],a={name:"tippyInlinePositioning",enabled:!0,phase:"afterWrite",fn:function(o){var a=o.state;e.props.inlinePositioning&&(-1!==i.indexOf(a.placement)&&(i=[]),t!==a.placement&&-1===i.indexOf(a.placement)&&(i.push(a.placement),e.setProps({getReferenceClientRect:function(){return function(e){return function(e,t,n,r){if(n.length<2||null===e)return t;if(2===n.length&&r>=0&&n[0].left>n[1].right)return n[r]||t;switch(e){case"top":case"bottom":var o=n[0],i=n[n.length-1],a="top"===e,s=o.top,u=i.bottom,c=a?o.left:i.left,p=a?o.right:i.right;return{top:s,bottom:u,left:c,right:p,width:p-c,height:u-s};case"left":case"right":var f=Math.min.apply(Math,n.map((function(e){return e.left}))),l=Math.max.apply(Math,n.map((function(e){return e.right}))),d=n.filter((function(t){return"left"===e?t.left===f:t.right===l})),v=d[0].top,m=d[d.length-1].bottom;return{top:v,bottom:m,left:f,right:l,width:l-f,height:m-v};default:return t}}(p(e),n.getBoundingClientRect(),f(n.getClientRects()),r)}(a.placement)}})),t=a.placement)}};function s(){var t;o||(t=function(e,t){var n;return{popperOptions:Object.assign({},e.popperOptions,{modifiers:[].concat(((null==(n=e.popperOptions)?void 0:n.modifiers)||[]).filter((function(e){return e.name!==t.name})),[t])})}}(e.props,a),o=!0,e.setProps(t),o=!1)}return{onCreate:s,onAfterUpdate:s,onTrigger:function(t,n){if(m(n)){var o=f(e.reference.getClientRects()),i=o.find((function(e){return e.left-2<=n.clientX&&e.right+2>=n.clientX&&e.top-2<=n.clientY&&e.bottom+2>=n.clientY})),a=o.indexOf(i);r=a>-1?a:r}},onHidden:function(){r=-1}}}};var K={name:"sticky",defaultValue:!1,fn:function(e){var t=e.reference,n=e.popper;function r(t){return!0===e.props.sticky||e.props.sticky===t}var o=null,i=null;function a(){var s=r("reference")?(e.popperInstance?e.popperInstance.state.elements.reference:t).getBoundingClientRect():null,u=r("popper")?n.getBoundingClientRect():null;(s&&Q(o,s)||u&&Q(i,u))&&e.popperInstance&&e.popperInstance.update(),o=s,i=u,e.state.isMounted&&requestAnimationFrame(a)}return{onMount:function(){e.props.sticky&&a()}}}};function Q(e,t){return!e||!t||(e.top!==t.top||e.right!==t.right||e.bottom!==t.bottom||e.left!==t.left)}return F.setDefaultProps({plugins:[Y,J,G,K],render:N}),F.createSingleton=function(e,t){var n;void 0===t&&(t={});var r,o=e,i=[],a=[],c=t.overrides,p=[],f=!1;function l(){a=o.map((function(e){return u(e.props.triggerTarget||e.reference)})).reduce((function(e,t){return e.concat(t)}),[])}function v(){i=o.map((function(e){return e.reference}))}function m(e){o.forEach((function(t){e?t.enable():t.disable()}))}function g(e){return o.map((function(t){var n=t.setProps;return t.setProps=function(o){n(o),t.reference===r&&e.setProps(o)},function(){t.setProps=n}}))}function h(e,t){var n=a.indexOf(t);if(t!==r){r=t;var s=(c||[]).concat("content").reduce((function(e,t){return e[t]=o[n].props[t],e}),{});e.setProps(Object.assign({},s,{getReferenceClientRect:"function"==typeof s.getReferenceClientRect?s.getReferenceClientRect:function(){var e;return null==(e=i[n])?void 0:e.getBoundingClientRect()}}))}}m(!1),v(),l();var b={fn:function(){return{onDestroy:function(){m(!0)},onHidden:function(){r=null},onClickOutside:function(e){e.props.showOnCreate&&!f&&(f=!0,r=null)},onShow:function(e){e.props.showOnCreate&&!f&&(f=!0,h(e,i[0]))},onTrigger:function(e,t){h(e,t.currentTarget)}}}},y=F(d(),Object.assign({},s(t,["overrides"]),{plugins:[b].concat(t.plugins||[]),triggerTarget:a,popperOptions:Object.assign({},t.popperOptions,{modifiers:[].concat((null==(n=t.popperOptions)?void 0:n.modifiers)||[],[W])})})),w=y.show;y.show=function(e){if(w(),!r&&null==e)return h(y,i[0]);if(!r||null!=e){if("number"==typeof e)return i[e]&&h(y,i[e]);if(o.indexOf(e)>=0){var t=e.reference;return h(y,t)}return i.indexOf(e)>=0?h(y,e):void 0}},y.showNext=function(){var e=i[0];if(!r)return y.show(0);var t=i.indexOf(r);y.show(i[t+1]||e)},y.showPrevious=function(){var e=i[i.length-1];if(!r)return y.show(e);var t=i.indexOf(r),n=i[t-1]||e;y.show(n)};var E=y.setProps;return y.setProps=function(e){c=e.overrides||c,E(e)},y.setInstances=function(e){m(!0),p.forEach((function(e){return e()})),o=e,m(!1),v(),l(),p=g(y),y.setProps({triggerTarget:a})},p=g(y),y},F.delegate=function(e,n){var r=[],o=[],i=!1,a=n.target,c=s(n,["target"]),p=Object.assign({},c,{trigger:"manual",touch:!1}),f=Object.assign({touch:R.touch},c,{showOnCreate:!0}),l=F(e,p);function d(e){if(e.target&&!i){var t=e.target.closest(a);if(t){var r=t.getAttribute("data-tippy-trigger")||n.trigger||R.trigger;if(!t._tippy&&!("touchstart"===e.type&&"boolean"==typeof f.touch||"touchstart"!==e.type&&r.indexOf(X[e.type])<0)){var s=F(t,f);s&&(o=o.concat(s))}}}}function v(e,t,n,o){void 0===o&&(o=!1),e.addEventListener(t,n,o),r.push({node:e,eventType:t,handler:n,options:o})}return u(l).forEach((function(e){var n=e.destroy,a=e.enable,s=e.disable;e.destroy=function(e){void 0===e&&(e=!0),e&&o.forEach((function(e){e.destroy()})),o=[],r.forEach((function(e){var t=e.node,n=e.eventType,r=e.handler,o=e.options;t.removeEventListener(n,r,o)})),r=[],n()},e.enable=function(){a(),o.forEach((function(e){return e.enable()})),i=!1},e.disable=function(){s(),o.forEach((function(e){return e.disable()})),i=!0},function(e){var n=e.reference;v(n,"touchstart",d,t),v(n,"mouseover",d),v(n,"focusin",d),v(n,"click",d)}(e)})),l},F.hideAll=function(e){var t=void 0===e?{}:e,n=t.exclude,r=t.duration;U.forEach((function(e){var t=!1;if(n&&(t=g(n)?e.reference===n:e.popper===n.popper),!t){var o=e.props.duration;e.setProps({duration:r}),e.hide(),e.state.isDestroyed||e.setProps({duration:o})}}))},F.roundArrow='',F})); + diff --git a/docs/site_libs/quarto-nav/headroom.min.js b/docs/site_libs/quarto-nav/headroom.min.js new file mode 100644 index 0000000..b08f1df --- /dev/null +++ b/docs/site_libs/quarto-nav/headroom.min.js @@ -0,0 +1,7 @@ +/*! + * headroom.js v0.12.0 - Give your page some headroom. Hide your header until you need it + * Copyright (c) 2020 Nick Williams - http://wicky.nillia.ms/headroom.js + * License: MIT + */ + +!function(t,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(t=t||self).Headroom=n()}(this,function(){"use strict";function t(){return"undefined"!=typeof window}function d(t){return function(t){return t&&t.document&&function(t){return 9===t.nodeType}(t.document)}(t)?function(t){var n=t.document,o=n.body,s=n.documentElement;return{scrollHeight:function(){return Math.max(o.scrollHeight,s.scrollHeight,o.offsetHeight,s.offsetHeight,o.clientHeight,s.clientHeight)},height:function(){return t.innerHeight||s.clientHeight||o.clientHeight},scrollY:function(){return void 0!==t.pageYOffset?t.pageYOffset:(s||o.parentNode||o).scrollTop}}}(t):function(t){return{scrollHeight:function(){return Math.max(t.scrollHeight,t.offsetHeight,t.clientHeight)},height:function(){return Math.max(t.offsetHeight,t.clientHeight)},scrollY:function(){return t.scrollTop}}}(t)}function n(t,s,e){var n,o=function(){var n=!1;try{var t={get passive(){n=!0}};window.addEventListener("test",t,t),window.removeEventListener("test",t,t)}catch(t){n=!1}return n}(),i=!1,r=d(t),l=r.scrollY(),a={};function c(){var t=Math.round(r.scrollY()),n=r.height(),o=r.scrollHeight();a.scrollY=t,a.lastScrollY=l,a.direction=ls.tolerance[a.direction],e(a),l=t,i=!1}function h(){i||(i=!0,n=requestAnimationFrame(c))}var u=!!o&&{passive:!0,capture:!1};return t.addEventListener("scroll",h,u),c(),{destroy:function(){cancelAnimationFrame(n),t.removeEventListener("scroll",h,u)}}}function o(t){return t===Object(t)?t:{down:t,up:t}}function s(t,n){n=n||{},Object.assign(this,s.options,n),this.classes=Object.assign({},s.options.classes,n.classes),this.elem=t,this.tolerance=o(this.tolerance),this.offset=o(this.offset),this.initialised=!1,this.frozen=!1}return s.prototype={constructor:s,init:function(){return s.cutsTheMustard&&!this.initialised&&(this.addClass("initial"),this.initialised=!0,setTimeout(function(t){t.scrollTracker=n(t.scroller,{offset:t.offset,tolerance:t.tolerance},t.update.bind(t))},100,this)),this},destroy:function(){this.initialised=!1,Object.keys(this.classes).forEach(this.removeClass,this),this.scrollTracker.destroy()},unpin:function(){!this.hasClass("pinned")&&this.hasClass("unpinned")||(this.addClass("unpinned"),this.removeClass("pinned"),this.onUnpin&&this.onUnpin.call(this))},pin:function(){this.hasClass("unpinned")&&(this.addClass("pinned"),this.removeClass("unpinned"),this.onPin&&this.onPin.call(this))},freeze:function(){this.frozen=!0,this.addClass("frozen")},unfreeze:function(){this.frozen=!1,this.removeClass("frozen")},top:function(){this.hasClass("top")||(this.addClass("top"),this.removeClass("notTop"),this.onTop&&this.onTop.call(this))},notTop:function(){this.hasClass("notTop")||(this.addClass("notTop"),this.removeClass("top"),this.onNotTop&&this.onNotTop.call(this))},bottom:function(){this.hasClass("bottom")||(this.addClass("bottom"),this.removeClass("notBottom"),this.onBottom&&this.onBottom.call(this))},notBottom:function(){this.hasClass("notBottom")||(this.addClass("notBottom"),this.removeClass("bottom"),this.onNotBottom&&this.onNotBottom.call(this))},shouldUnpin:function(t){return"down"===t.direction&&!t.top&&t.toleranceExceeded},shouldPin:function(t){return"up"===t.direction&&t.toleranceExceeded||t.top},addClass:function(t){this.elem.classList.add.apply(this.elem.classList,this.classes[t].split(" "))},removeClass:function(t){this.elem.classList.remove.apply(this.elem.classList,this.classes[t].split(" "))},hasClass:function(t){return this.classes[t].split(" ").every(function(t){return this.classList.contains(t)},this.elem)},update:function(t){t.isOutOfBounds||!0!==this.frozen&&(t.top?this.top():this.notTop(),t.bottom?this.bottom():this.notBottom(),this.shouldUnpin(t)?this.unpin():this.shouldPin(t)&&this.pin())}},s.options={tolerance:{up:0,down:0},offset:0,scroller:t()?window:null,classes:{frozen:"headroom--frozen",pinned:"headroom--pinned",unpinned:"headroom--unpinned",top:"headroom--top",notTop:"headroom--not-top",bottom:"headroom--bottom",notBottom:"headroom--not-bottom",initial:"headroom"}},s.cutsTheMustard=!!(t()&&function(){}.bind&&"classList"in document.documentElement&&Object.assign&&Object.keys&&requestAnimationFrame),s}); diff --git a/docs/site_libs/quarto-nav/quarto-nav.js b/docs/site_libs/quarto-nav/quarto-nav.js new file mode 100644 index 0000000..38cc430 --- /dev/null +++ b/docs/site_libs/quarto-nav/quarto-nav.js @@ -0,0 +1,325 @@ +const headroomChanged = new CustomEvent("quarto-hrChanged", { + detail: {}, + bubbles: true, + cancelable: false, + composed: false, +}); + +const announceDismiss = () => { + const annEl = window.document.getElementById("quarto-announcement"); + if (annEl) { + annEl.remove(); + + const annId = annEl.getAttribute("data-announcement-id"); + window.localStorage.setItem(`quarto-announce-${annId}`, "true"); + } +}; + +const announceRegister = () => { + const annEl = window.document.getElementById("quarto-announcement"); + if (annEl) { + const annId = annEl.getAttribute("data-announcement-id"); + const isDismissed = + window.localStorage.getItem(`quarto-announce-${annId}`) || false; + if (isDismissed) { + announceDismiss(); + return; + } else { + annEl.classList.remove("hidden"); + } + + const actionEl = annEl.querySelector(".quarto-announcement-action"); + if (actionEl) { + actionEl.addEventListener("click", function (e) { + e.preventDefault(); + // Hide the bar immediately + announceDismiss(); + }); + } + } +}; + +window.document.addEventListener("DOMContentLoaded", function () { + let init = false; + + announceRegister(); + + // Manage the back to top button, if one is present. + let lastScrollTop = window.pageYOffset || document.documentElement.scrollTop; + const scrollDownBuffer = 5; + const scrollUpBuffer = 35; + const btn = document.getElementById("quarto-back-to-top"); + const hideBackToTop = () => { + btn.style.display = "none"; + }; + const showBackToTop = () => { + btn.style.display = "inline-block"; + }; + if (btn) { + window.document.addEventListener( + "scroll", + function () { + const currentScrollTop = + window.pageYOffset || document.documentElement.scrollTop; + + // Shows and hides the button 'intelligently' as the user scrolls + if (currentScrollTop - scrollDownBuffer > lastScrollTop) { + hideBackToTop(); + lastScrollTop = currentScrollTop <= 0 ? 0 : currentScrollTop; + } else if (currentScrollTop < lastScrollTop - scrollUpBuffer) { + showBackToTop(); + lastScrollTop = currentScrollTop <= 0 ? 0 : currentScrollTop; + } + + // Show the button at the bottom, hides it at the top + if (currentScrollTop <= 0) { + hideBackToTop(); + } else if ( + window.innerHeight + currentScrollTop >= + document.body.offsetHeight + ) { + showBackToTop(); + } + }, + false + ); + } + + function throttle(func, wait) { + var timeout; + return function () { + const context = this; + const args = arguments; + const later = function () { + clearTimeout(timeout); + timeout = null; + func.apply(context, args); + }; + + if (!timeout) { + timeout = setTimeout(later, wait); + } + }; + } + + function headerOffset() { + // Set an offset if there is are fixed top navbar + const headerEl = window.document.querySelector("header.fixed-top"); + if (headerEl) { + return headerEl.clientHeight; + } else { + return 0; + } + } + + function footerOffset() { + const footerEl = window.document.querySelector("footer.footer"); + if (footerEl) { + return footerEl.clientHeight; + } else { + return 0; + } + } + + function dashboardOffset() { + const dashboardNavEl = window.document.getElementById( + "quarto-dashboard-header" + ); + if (dashboardNavEl !== null) { + return dashboardNavEl.clientHeight; + } else { + return 0; + } + } + + function updateDocumentOffsetWithoutAnimation() { + updateDocumentOffset(false); + } + + function updateDocumentOffset(animated) { + // set body offset + const topOffset = headerOffset(); + const bodyOffset = topOffset + footerOffset() + dashboardOffset(); + const bodyEl = window.document.body; + bodyEl.setAttribute("data-bs-offset", topOffset); + bodyEl.style.paddingTop = topOffset + "px"; + + // deal with sidebar offsets + const sidebars = window.document.querySelectorAll( + ".sidebar, .headroom-target" + ); + sidebars.forEach((sidebar) => { + if (!animated) { + sidebar.classList.add("notransition"); + // Remove the no transition class after the animation has time to complete + setTimeout(function () { + sidebar.classList.remove("notransition"); + }, 201); + } + + if (window.Headroom && sidebar.classList.contains("sidebar-unpinned")) { + sidebar.style.top = "0"; + sidebar.style.maxHeight = "100vh"; + } else { + sidebar.style.top = topOffset + "px"; + sidebar.style.maxHeight = "calc(100vh - " + topOffset + "px)"; + } + }); + + // allow space for footer + const mainContainer = window.document.querySelector(".quarto-container"); + if (mainContainer) { + mainContainer.style.minHeight = "calc(100vh - " + bodyOffset + "px)"; + } + + // link offset + let linkStyle = window.document.querySelector("#quarto-target-style"); + if (!linkStyle) { + linkStyle = window.document.createElement("style"); + linkStyle.setAttribute("id", "quarto-target-style"); + window.document.head.appendChild(linkStyle); + } + while (linkStyle.firstChild) { + linkStyle.removeChild(linkStyle.firstChild); + } + if (topOffset > 0) { + linkStyle.appendChild( + window.document.createTextNode(` + section:target::before { + content: ""; + display: block; + height: ${topOffset}px; + margin: -${topOffset}px 0 0; + }`) + ); + } + if (init) { + window.dispatchEvent(headroomChanged); + } + init = true; + } + + // initialize headroom + var header = window.document.querySelector("#quarto-header"); + if (header && window.Headroom) { + const headroom = new window.Headroom(header, { + tolerance: 5, + onPin: function () { + const sidebars = window.document.querySelectorAll( + ".sidebar, .headroom-target" + ); + sidebars.forEach((sidebar) => { + sidebar.classList.remove("sidebar-unpinned"); + }); + updateDocumentOffset(); + }, + onUnpin: function () { + const sidebars = window.document.querySelectorAll( + ".sidebar, .headroom-target" + ); + sidebars.forEach((sidebar) => { + sidebar.classList.add("sidebar-unpinned"); + }); + updateDocumentOffset(); + }, + }); + headroom.init(); + + let frozen = false; + window.quartoToggleHeadroom = function () { + if (frozen) { + headroom.unfreeze(); + frozen = false; + } else { + headroom.freeze(); + frozen = true; + } + }; + } + + window.addEventListener( + "hashchange", + function (e) { + if ( + getComputedStyle(document.documentElement).scrollBehavior !== "smooth" + ) { + window.scrollTo(0, window.pageYOffset - headerOffset()); + } + }, + false + ); + + // Observe size changed for the header + const headerEl = window.document.querySelector("header.fixed-top"); + if (headerEl && window.ResizeObserver) { + const observer = new window.ResizeObserver(() => { + setTimeout(updateDocumentOffsetWithoutAnimation, 0); + }); + observer.observe(headerEl, { + attributes: true, + childList: true, + characterData: true, + }); + } else { + window.addEventListener( + "resize", + throttle(updateDocumentOffsetWithoutAnimation, 50) + ); + } + setTimeout(updateDocumentOffsetWithoutAnimation, 250); + + // fixup index.html links if we aren't on the filesystem + if (window.location.protocol !== "file:") { + const links = window.document.querySelectorAll("a"); + for (let i = 0; i < links.length; i++) { + if (links[i].href) { + links[i].dataset.originalHref = links[i].href; + links[i].href = links[i].href.replace(/\/index\.html/, "/"); + } + } + + // Fixup any sharing links that require urls + // Append url to any sharing urls + const sharingLinks = window.document.querySelectorAll( + "a.sidebar-tools-main-item, a.quarto-navigation-tool, a.quarto-navbar-tools, a.quarto-navbar-tools-item" + ); + for (let i = 0; i < sharingLinks.length; i++) { + const sharingLink = sharingLinks[i]; + const href = sharingLink.getAttribute("href"); + if (href) { + sharingLink.setAttribute( + "href", + href.replace("|url|", window.location.href) + ); + } + } + + // Scroll the active navigation item into view, if necessary + const navSidebar = window.document.querySelector("nav#quarto-sidebar"); + if (navSidebar) { + // Find the active item + const activeItem = navSidebar.querySelector("li.sidebar-item a.active"); + if (activeItem) { + // Wait for the scroll height and height to resolve by observing size changes on the + // nav element that is scrollable + const resizeObserver = new ResizeObserver((_entries) => { + // The bottom of the element + const elBottom = activeItem.offsetTop; + const viewBottom = navSidebar.scrollTop + navSidebar.clientHeight; + + // The element height and scroll height are the same, then we are still loading + if (viewBottom !== navSidebar.scrollHeight) { + // Determine if the item isn't visible and scroll to it + if (elBottom >= viewBottom) { + navSidebar.scrollTop = elBottom; + } + + // stop observing now since we've completed the scroll + resizeObserver.unobserve(navSidebar); + } + }); + resizeObserver.observe(navSidebar); + } + } + } +}); diff --git a/docs/site_libs/quarto-search/autocomplete.umd.js b/docs/site_libs/quarto-search/autocomplete.umd.js new file mode 100644 index 0000000..6090a55 --- /dev/null +++ b/docs/site_libs/quarto-search/autocomplete.umd.js @@ -0,0 +1,3 @@ +/*! @algolia/autocomplete-js 1.19.1 | MIT License | © Algolia, Inc. and contributors | https://github.com/algolia/autocomplete */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@algolia/autocomplete-js"]={})}(this,(function(e){"use strict";function t(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function n(e){for(var n=1;n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function a(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var r,o,i,u,a=[],l=!0,c=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(r=i.call(n)).done)&&(a.push(r.value),a.length!==t);l=!0);}catch(e){c=!0,o=e}finally{try{if(!l&&null!=n.return&&(u=n.return(),Object(u)!==u))return}finally{if(c)throw o}}return a}}(e,t)||c(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function l(e){return function(e){if(Array.isArray(e))return s(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||c(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function c(e,t){if(e){if("string"==typeof e)return s(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?s(e,t):void 0}}function s(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function x(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function N(e){for(var t=1;t1&&void 0!==arguments[1]?arguments[1]:20,n=[],r=0;r=3||2===n&&r>=4||1===n&&r>=10);function i(t,n,r){if(o&&void 0!==r){var i=r[0].__autocomplete_algoliaCredentials,u={"X-Algolia-Application-Id":i.appId,"X-Algolia-API-Key":i.apiKey};e.apply(void 0,[t].concat(D(n),[{headers:u}]))}else e.apply(void 0,[t].concat(D(n)))}return{init:function(t,n){e("init",{appId:t,apiKey:n})},setAuthenticatedUserToken:function(t){e("setAuthenticatedUserToken",t)},setUserToken:function(t){e("setUserToken",t)},clickedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&i("clickedObjectIDsAfterSearch",B(t),t[0].items)},clickedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&i("clickedObjectIDs",B(t),t[0].items)},clickedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r0&&e.apply(void 0,["clickedFilters"].concat(n))},convertedObjectIDsAfterSearch:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&i("convertedObjectIDsAfterSearch",B(t),t[0].items)},convertedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&i("convertedObjectIDs",B(t),t[0].items)},convertedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r0&&e.apply(void 0,["convertedFilters"].concat(n))},viewedObjectIDs:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&t.reduce((function(e,t){var n=t.items,r=k(t,A);return[].concat(D(e),D(q(N(N({},r),{},{objectIDs:(null==n?void 0:n.map((function(e){return e.objectID})))||r.objectIDs})).map((function(e){return{items:n,payload:e}}))))}),[]).forEach((function(e){var t=e.items;return i("viewedObjectIDs",[e.payload],t)}))},viewedFilters:function(){for(var t=arguments.length,n=new Array(t),r=0;r0&&e.apply(void 0,["viewedFilters"].concat(n))}}}function L(e){var t=e.items.reduce((function(e,t){var n;return e[t.__autocomplete_indexName]=(null!==(n=e[t.__autocomplete_indexName])&&void 0!==n?n:[]).concat(t),e}),{});return Object.keys(t).map((function(e){return{index:e,items:t[e],algoliaSource:["autocomplete"]}}))}function F(e){return e.objectID&&e.__autocomplete_indexName&&e.__autocomplete_queryID}function U(e){return U="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},U(e)}function M(e){return function(e){if(Array.isArray(e))return H(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return H(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return H(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function H(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&z({onItemsChange:o,items:n,insights:c,state:t}))}}),0);return{name:"aa.algoliaInsightsPlugin",subscribe:function(e){var t=e.setContext,n=e.onSelect,r=e.onActive;function o(e){t({algoliaInsightsPlugin:{__algoliaSearchParameters:W(W({},a?{clickAnalytics:!0}:{}),e?{userToken:X(e)}:{}),insights:c}})}l("addAlgoliaAgent","insights-plugin"),o(),l("onUserTokenChange",(function(e){o(e)})),l("getUserToken",null,(function(e,t){o(t)})),n((function(e){var t=e.item,n=e.state,r=e.event,o=e.source;F(t)&&i({state:n,event:r,insights:c,item:t,insightsEvents:[W({eventName:"Item Selected"},j({item:t,items:o.getItems().filter(F)}))]})})),r((function(e){var t=e.item,n=e.source,r=e.state,o=e.event;F(t)&&u({state:r,event:o,insights:c,item:t,insightsEvents:[W({eventName:"Item Active"},j({item:t,items:n.getItems().filter(F)}))]})}))},onStateChange:function(e){var t=e.state;m({state:t})},__autocomplete_pluginOptions:e}}function J(){var e,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],n=arguments.length>1?arguments[1]:void 0;return[].concat(M(t),["autocomplete-internal"],M(null!==(e=n.algoliaInsightsPlugin)&&void 0!==e&&e.__automaticInsights?["autocomplete-automatic"]:[]))}function X(e){return"number"==typeof e?e.toString():e}function Y(e,t){var n=t;return{then:function(t,r){return Y(e.then(ee(t,n,e),ee(r,n,e)),n)},catch:function(t){return Y(e.catch(ee(t,n,e)),n)},finally:function(t){return t&&n.onCancelList.push(t),Y(e.finally(ee(t&&function(){return n.onCancelList=[],t()},n,e)),n)},cancel:function(){n.isCanceled=!0;var e=n.onCancelList;n.onCancelList=[],e.forEach((function(e){e()}))},isCanceled:function(){return!0===n.isCanceled}}}function Z(e){return Y(e,{isCanceled:!1,onCancelList:[]})}function ee(e,t,n){return e?function(n){return t.isCanceled?n:e(n)}:n}var te,ne=!0;function re(e,t,n,r){if(!n)return null;if(e<0&&(null===t||null!==r&&0===t))return n+e;var o=(null===t?-1:t)+e;return o<=-1||o>=n?null===r?null:0:o}function oe(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function ie(e){for(var t=1;t=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,u=!0,a=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return u=e.done,e},e:function(e){a=!0,i=e},f:function(){try{u||null==n.return||n.return()}finally{if(a)throw i}}}}function ce(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0?t.wait(Math.max.apply(Math,o)):void 0};function fe(e){var t=function(e){var t=e.collections.map((function(e){return e.items.length})).reduce((function(e,t,n){var r=(e[n-1]||0)+t;return e.push(r),e}),[]).reduce((function(t,n){return n<=e.activeItemId?t+1:t}),0);return e.collections[t]}(e);if(!t)return null;var n=t.items[function(e){for(var t=e.state,n=e.collection,r=!1,o=0,i=0;!1===r;){var u=t.collections[o];if(u===n){r=!0;break}i+=u.items.length,o++}return t.activeItemId-i}({state:e,collection:t})],r=t.source;return{item:n,itemInputValue:r.getItemInputValue({item:n,state:e}),itemUrl:r.getItemUrl({item:n,state:e}),source:r}}function pe(e,t,n){return[e,null==n?void 0:n.sourceId,t].filter(Boolean).join("-").replace(/\s/g,"")}var me=/((gt|sm)-|galaxy nexus)|samsung[- ]|samsungbrowser/i;function ve(e){return e.nativeEvent||e}function de(e){return de="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},de(e)}function ye(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function be(e,t,n){return(t=function(e){var t=function(e,t){if("object"!==de(e)||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!==de(r))return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"===de(t)?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function ge(e,t,n){var r,o=t.initialState;return{getState:function(){return o},dispatch:function(r,i){var u=function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n0},reshape:function(e){return e.sources}},e),{},{id:null!==(n=e.id)&&void 0!==n?n:d(),plugins:o,initialState:Ae({activeItemId:null,query:"",completion:null,collections:[],isOpen:!1,status:"idle",context:{}},e.initialState),onStateChange:function(t){var n;null===(n=e.onStateChange)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onStateChange)||void 0===n?void 0:n.call(e,t)}))},onSubmit:function(t){var n;null===(n=e.onSubmit)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onSubmit)||void 0===n?void 0:n.call(e,t)}))},onReset:function(t){var n;null===(n=e.onReset)||void 0===n||n.call(e,t),o.forEach((function(e){var n;return null===(n=e.onReset)||void 0===n?void 0:n.call(e,t)}))},getSources:function(n){return Promise.all([].concat(Pe(o.map((function(e){return e.getSources}))),[e.getSources]).filter(Boolean).map((function(e){return function(e,t){var n=[];return Promise.resolve(e(t)).then((function(e){return Promise.all(e.filter((function(e){return Boolean(e)})).map((function(e){if(e.sourceId,n.includes(e.sourceId))throw new Error("[Autocomplete] The `sourceId` ".concat(JSON.stringify(e.sourceId)," is not unique."));n.push(e.sourceId);var t={getItemInputValue:function(e){return e.state.query},getItemUrl:function(){},onSelect:function(e){(0,e.setIsOpen)(!1)},onActive:_,onResolve:_};Object.keys(t).forEach((function(e){t[e].__default=!0}));var r=ie(ie({},t),e);return Promise.resolve(r)})))}))}(e,n)}))).then((function(e){return m(e)})).then((function(e){return e.map((function(e){return Ae(Ae({},e),{},{onSelect:function(n){e.onSelect(n),t.forEach((function(e){var t;return null===(t=e.onSelect)||void 0===t?void 0:t.call(e,n)}))},onActive:function(n){e.onActive(n),t.forEach((function(e){var t;return null===(t=e.onActive)||void 0===t?void 0:t.call(e,n)}))},onResolve:function(n){e.onResolve(n),t.forEach((function(e){var t;return null===(t=e.onResolve)||void 0===t?void 0:t.call(e,n)}))}})}))}))},navigator:Ae({navigate:function(e){var t=e.itemUrl;r.location.assign(t)},navigateNewTab:function(e){var t=e.itemUrl,n=r.open(t,"_blank","noopener");null==n||n.focus()},navigateNewWindow:function(e){var t=e.itemUrl;r.open(t,"_blank","noopener")}},e.navigator)})}function Ce(e){return Ce="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Ce(e)}function ke(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function xe(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}var Je,Xe,Ye,Ze=null,et=(Je=-1,Xe=-1,Ye=void 0,function(e){var t=++Je;return Promise.resolve(e).then((function(e){return Ye&&t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function lt(e){return lt="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},lt(e)}var ct=["props","refresh","store"],st=["inputElement","formElement","panelElement"],ft=["inputElement"],pt=["inputElement","maxLength"],mt=["source"],vt=["item","source"];function dt(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function yt(e){for(var t=1;t=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function ht(e){var t=e.props,n=e.refresh,r=e.store,o=gt(e,ct);return{getEnvironmentProps:function(e){var n=e.inputElement,o=e.formElement,i=e.panelElement;function u(e){!r.getState().isOpen&&r.pendingRequests.isEmpty()||e.target===n||!1===[o,i].some((function(t){return n=t,r=e.target,n===r||n.contains(r);var n,r}))&&(r.dispatch("blur",null),t.debug||r.pendingRequests.cancelAll())}return yt({onTouchStart:u,onMouseDown:u,onTouchMove:function(e){!1!==r.getState().isOpen&&n===t.environment.document.activeElement&&e.target!==n&&n.blur()}},gt(e,st))},getRootProps:function(e){return yt({role:"combobox","aria-expanded":r.getState().isOpen,"aria-haspopup":"listbox","aria-controls":r.getState().isOpen?r.getState().collections.map((function(e){var n=e.source;return pe(t.id,"list",n)})).join(" "):void 0,"aria-labelledby":pe(t.id,"label")},e)},getFormProps:function(e){e.inputElement;var i=gt(e,ft),u=function(i){var u;t.onSubmit(yt({event:i,refresh:n,state:r.getState()},o)),r.dispatch("submit",null),null===(u=e.inputElement)||void 0===u||u.blur()};return yt({action:"",noValidate:!0,role:"search",onSubmit:function(e){e.preventDefault();var n=se(t.plugins,r.pendingRequests);void 0!==n?n.then((function(){return u(e)})):u(e)},onReset:function(i){var u;i.preventDefault(),t.onReset(yt({event:i,refresh:n,state:r.getState()},o)),r.dispatch("reset",null),null===(u=e.inputElement)||void 0===u||u.focus()}},i)},getLabelProps:function(e){return yt({htmlFor:pe(t.id,"input"),id:pe(t.id,"label")},e)},getInputProps:function(e){var i;function u(e){(t.openOnFocus||Boolean(r.getState().query))&&tt(yt({event:e,props:t,query:r.getState().completion||r.getState().query,refresh:n,store:r},o)),r.dispatch("focus",null)}var a=e||{};a.inputElement;var l=a.maxLength,c=void 0===l?512:l,s=gt(a,pt),f=fe(r.getState()),p=function(e){return Boolean(e&&e.match(me))}((null===(i=t.environment.navigator)||void 0===i?void 0:i.userAgent)||""),m=t.enterKeyHint||(null!=f&&f.itemUrl&&!p?"go":"search");return yt({"aria-autocomplete":"both","aria-activedescendant":r.getState().isOpen&&null!==r.getState().activeItemId?pe(t.id,"item-".concat(r.getState().activeItemId),null==f?void 0:f.source):void 0,"aria-controls":r.getState().isOpen?r.getState().collections.filter((function(e){return e.items.length>0})).map((function(e){var n=e.source;return pe(t.id,"list",n)})).join(" "):void 0,"aria-labelledby":pe(t.id,"label"),value:r.getState().completion||r.getState().query,id:pe(t.id,"input"),autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",enterKeyHint:m,spellCheck:"false",autoFocus:t.autoFocus,placeholder:t.placeholder,maxLength:c,type:"search",onChange:function(e){var i=e.currentTarget.value;t.ignoreCompositionEvents&&ve(e).isComposing?o.setQuery(i):tt(yt({event:e,props:t,query:i.slice(0,c),refresh:n,store:r},o))},onCompositionEnd:function(e){tt(yt({event:e,props:t,query:e.currentTarget.value.slice(0,c),refresh:n,store:r},o))},onKeyDown:function(e){ve(e).isComposing||function(e){var t=e.event,n=e.props,r=e.refresh,o=e.store,i=at(e,rt);if("ArrowUp"===t.key||"ArrowDown"===t.key){var u=function(){var e=fe(o.getState()),t=n.environment.document.getElementById(pe(n.id,"item-".concat(o.getState().activeItemId),null==e?void 0:e.source));t&&(t.scrollIntoViewIfNeeded?t.scrollIntoViewIfNeeded(!1):t.scrollIntoView(!1))},a=function(){var e=fe(o.getState());if(null!==o.getState().activeItemId&&e){var n=e.item,u=e.itemInputValue,a=e.itemUrl,l=e.source;l.onActive(it({event:t,item:n,itemInputValue:u,itemUrl:a,refresh:r,source:l,state:o.getState()},i))}};t.preventDefault(),!1===o.getState().isOpen&&(n.openOnFocus||Boolean(o.getState().query))?tt(it({event:t,props:n,query:o.getState().query,refresh:r,store:o},i)).then((function(){o.dispatch(t.key,{nextActiveItemId:n.defaultActiveItemId}),a(),setTimeout(u,0)})):(o.dispatch(t.key,{}),a(),u())}else if("Escape"===t.key)t.preventDefault(),o.dispatch(t.key,null),o.pendingRequests.cancelAll();else if("Tab"===t.key)o.dispatch("blur",null),o.pendingRequests.cancelAll();else if("Enter"===t.key){if(null===o.getState().activeItemId||o.getState().collections.every((function(e){return 0===e.items.length}))){var l=se(n.plugins,o.pendingRequests);return void(void 0!==l?l.then(o.pendingRequests.cancelAll):n.debug||o.pendingRequests.cancelAll())}t.preventDefault();var c=fe(o.getState()),s=c.item,f=c.itemInputValue,p=c.itemUrl,m=c.source;if(t.metaKey||t.ctrlKey)void 0!==p&&(m.onSelect(it({event:t,item:s,itemInputValue:f,itemUrl:p,refresh:r,source:m,state:o.getState()},i)),n.navigator.navigateNewTab({itemUrl:p,item:s,state:o.getState()}));else if(t.shiftKey)void 0!==p&&(m.onSelect(it({event:t,item:s,itemInputValue:f,itemUrl:p,refresh:r,source:m,state:o.getState()},i)),n.navigator.navigateNewWindow({itemUrl:p,item:s,state:o.getState()}));else if(t.altKey);else{if(void 0!==p)return m.onSelect(it({event:t,item:s,itemInputValue:f,itemUrl:p,refresh:r,source:m,state:o.getState()},i)),void n.navigator.navigate({itemUrl:p,item:s,state:o.getState()});tt(it({event:t,nextState:{isOpen:!1},props:n,query:f,refresh:r,store:o},i)).then((function(){m.onSelect(it({event:t,item:s,itemInputValue:f,itemUrl:p,refresh:r,source:m,state:o.getState()},i))}))}}}(yt({event:e,props:t,refresh:n,store:r},o))},onFocus:u,onBlur:_,onClick:function(n){e.inputElement!==t.environment.document.activeElement||r.getState().isOpen||u(n)}},s)},getPanelProps:function(e){return yt({onMouseDown:function(e){e.preventDefault()},onMouseLeave:function(){r.dispatch("mouseleave",null)}},e)},getListProps:function(e){var n=e||{},r=n.source,o=gt(n,mt);return yt({role:"listbox","aria-labelledby":pe(t.id,"label"),id:pe(t.id,"list",r)},o)},getItemProps:function(e){var i=e.item,u=e.source,a=gt(e,vt);return yt({id:pe(t.id,"item-".concat(i.__autocomplete_id),u),role:"option","aria-selected":r.getState().activeItemId===i.__autocomplete_id,onMouseMove:function(e){if(i.__autocomplete_id!==r.getState().activeItemId){r.dispatch("mousemove",i.__autocomplete_id);var t=fe(r.getState());if(null!==r.getState().activeItemId&&t){var u=t.item,a=t.itemInputValue,l=t.itemUrl,c=t.source;c.onActive(yt({event:e,item:u,itemInputValue:a,itemUrl:l,refresh:n,source:c,state:r.getState()},o))}}},onMouseDown:function(e){e.preventDefault()},onClick:function(e){var a=u.getItemInputValue({item:i,state:r.getState()}),l=u.getItemUrl({item:i,state:r.getState()});(l?Promise.resolve():tt(yt({event:e,nextState:{isOpen:!1},props:t,query:a,refresh:n,store:r},o))).then((function(){u.onSelect(yt({event:e,item:i,itemInputValue:a,itemUrl:l,refresh:n,source:u,state:r.getState()},o))}))}},a)}}}function _t(e){return _t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_t(e)}function Ot(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function St(e){for(var t=1;t=5&&((o||!e&&5===r)&&(u.push(r,0,o,n),r=6),e&&(u.push(r,e,0,n),r=6)),o=""},l=0;l"===t?(r=1,o=""):o=t+o[0]:i?t===i?i="":o+=t:'"'===t||"'"===t?i=t:">"===t?(a(),r=1):r&&("="===t?(r=5,n=o,o=""):"/"===t&&(r<5||">"===e[l][c+1])?(a(),3===r&&(u=u[0]),r=u,(u=u[0]).push(2,0,r),r=0):" "===t||"\t"===t||"\n"===t||"\r"===t?(a(),r=2):o+=t),3===r&&"!--"===o&&(r=4,u=u[0])}return a(),u}(e)),t),arguments,[])).length>1?t:t[0]}var Ft=function(e){var t=e.environment,n=t.document.createElementNS("http://www.w3.org/2000/svg","svg");n.setAttribute("class","aa-ClearIcon"),n.setAttribute("viewBox","0 0 24 24"),n.setAttribute("width","18"),n.setAttribute("height","18"),n.setAttribute("fill","currentColor");var r=t.document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d","M5.293 6.707l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0l5.293-5.293 5.293 5.293c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"),n.appendChild(r),n};function Ut(e,t){if("string"==typeof t){var n=e.document.querySelector(t);return"The element ".concat(JSON.stringify(t)," is not in the document."),n}return t}function Mt(){for(var e=arguments.length,t=new Array(e),n=0;n2&&(u.children=arguments.length>3?on.call(arguments,2):n),"function"==typeof e&&null!=e.defaultProps)for(i in e.defaultProps)void 0===u[i]&&(u[i]=e.defaultProps[i]);return gn(e,u,r,o,null)}function gn(e,t,n,r,o){var i={type:e,props:t,key:n,ref:r,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:null==o?++an:o};return null==o&&null!=un.vnode&&un.vnode(i),i}function hn(e){return e.children}function _n(e,t){this.props=e,this.context=t}function On(e,t){if(null==t)return e.__?On(e.__,e.__.__k.indexOf(e)+1):null;for(var n;tt&&ln.sort(fn));Pn.__r=0}function wn(e,t,n,r,o,i,u,a,l,c){var s,f,p,m,v,d,y,b=r&&r.__k||mn,g=b.length;for(n.__k=[],s=0;s0?gn(m.type,m.props,m.key,m.ref?m.ref:null,m.__v):m)){if(m.__=n,m.__b=n.__b+1,null===(p=b[s])||p&&m.key==p.key&&m.type===p.type)b[s]=void 0;else for(f=0;f=0;t--)if((n=e.__k[t])&&(r=En(n)))return r;return null}function Dn(e,t,n){"-"===t[0]?e.setProperty(t,null==n?"":n):e[t]=null==n?"":"number"!=typeof n||vn.test(t)?n:n+"px"}function Cn(e,t,n,r,o){var i;e:if("style"===t)if("string"==typeof n)e.style.cssText=n;else{if("string"==typeof r&&(e.style.cssText=r=""),r)for(t in r)n&&t in n||Dn(e.style,t,"");if(n)for(t in n)r&&n[t]===r[t]||Dn(e.style,t,n[t])}else if("o"===t[0]&&"n"===t[1])i=t!==(t=t.replace(/Capture$/,"")),t=t.toLowerCase()in e?t.toLowerCase().slice(2):t.slice(2),e.l||(e.l={}),e.l[t+i]=n,n?r||e.addEventListener(t,i?xn:kn,i):e.removeEventListener(t,i?xn:kn,i);else if("dangerouslySetInnerHTML"!==t){if(o)t=t.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if("width"!==t&&"height"!==t&&"href"!==t&&"list"!==t&&"form"!==t&&"tabIndex"!==t&&"download"!==t&&t in e)try{e[t]=null==n?"":n;break e}catch(e){}"function"==typeof n||(null==n||!1===n&&"-"!==t[4]?e.removeAttribute(t):e.setAttribute(t,n))}}function kn(e){return this.l[e.type+!1](un.event?un.event(e):e)}function xn(e){return this.l[e.type+!0](un.event?un.event(e):e)}function Nn(e,t,n,r,o,i,u,a,l){var c,s,f,p,m,v,d,y,b,g,h,_,O,S,j,P=t.type;if(void 0!==t.constructor)return null;null!=n.__h&&(l=n.__h,a=t.__e=n.__e,t.__h=null,i=[a]),(c=un.__b)&&c(t);try{e:if("function"==typeof P){if(y=t.props,b=(c=P.contextType)&&r[c.__c],g=c?b?b.props.value:c.__:r,n.__c?d=(s=t.__c=n.__c).__=s.__E:("prototype"in P&&P.prototype.render?t.__c=s=new P(y,g):(t.__c=s=new _n(y,g),s.constructor=P,s.render=Ln),b&&b.sub(s),s.props=y,s.state||(s.state={}),s.context=g,s.__n=r,f=s.__d=!0,s.__h=[],s._sb=[]),null==s.__s&&(s.__s=s.state),null!=P.getDerivedStateFromProps&&(s.__s==s.state&&(s.__s=dn({},s.__s)),dn(s.__s,P.getDerivedStateFromProps(y,s.__s))),p=s.props,m=s.state,s.__v=t,f)null==P.getDerivedStateFromProps&&null!=s.componentWillMount&&s.componentWillMount(),null!=s.componentDidMount&&s.__h.push(s.componentDidMount);else{if(null==P.getDerivedStateFromProps&&y!==p&&null!=s.componentWillReceiveProps&&s.componentWillReceiveProps(y,g),!s.__e&&null!=s.shouldComponentUpdate&&!1===s.shouldComponentUpdate(y,s.__s,g)||t.__v===n.__v){for(t.__v!==n.__v&&(s.props=y,s.state=s.__s,s.__d=!1),s.__e=!1,t.__e=n.__e,t.__k=n.__k,t.__k.forEach((function(e){e&&(e.__=t)})),h=0;h0&&void 0!==arguments[0]?arguments[0]:[];return{get:function(){return e},add:function(t){var n=e[e.length-1];(null==n?void 0:n.isHighlighted)===t.isHighlighted?e[e.length-1]={value:n.value+t.value,isHighlighted:n.isHighlighted}:e.push(t)}}}(n?[{value:n,isHighlighted:!1}]:[]);return t.forEach((function(e){var t=e.split(Un);r.add({value:t[0],isHighlighted:!0}),""!==t[1]&&r.add({value:t[1],isHighlighted:!1})})),r.get()}function Hn(e){return function(e){if(Array.isArray(e))return Vn(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return Vn(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Vn(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function Vn(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n",""":'"',"'":"'"},Kn=new RegExp(/\w/i),$n=/&(amp|quot|lt|gt|#39);/g,zn=RegExp($n.source);function Gn(e,t){var n,r,o,i=e[t],u=(null===(n=e[t+1])||void 0===n?void 0:n.isHighlighted)||!0,a=(null===(r=e[t-1])||void 0===r?void 0:r.isHighlighted)||!0;return Kn.test((o=i.value)&&zn.test(o)?o.replace($n,(function(e){return Qn[e]})):o)||a!==u?i.isHighlighted:a}function Jn(e){return Jn="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Jn(e)}function Xn(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function Yn(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0||(o[n]=e[n]);return o}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(o[n]=e[n])}return o}function vr(e){return function(e){if(Array.isArray(e))return dr(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(!e)return;if("string"==typeof e)return dr(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);"Object"===n&&e.constructor&&(n=e.constructor.name);if("Map"===n||"Set"===n)return Array.from(e);if("Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return dr(e,t)}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function dr(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0;if(!_.value.core.openOnFocus&&!t.query)return n;var r=Boolean(y.current||_.value.renderer.renderNoResults);return!n&&r||n},__autocomplete_metadata:{userAgents:wr,options:e}}))})),j=f(n({collections:[],completion:null,context:{},isOpen:!1,query:"",activeItemId:null,status:"idle"},_.value.core.initialState)),P={getEnvironmentProps:_.value.renderer.getEnvironmentProps,getFormProps:_.value.renderer.getFormProps,getInputProps:_.value.renderer.getInputProps,getItemProps:_.value.renderer.getItemProps,getLabelProps:_.value.renderer.getLabelProps,getListProps:_.value.renderer.getListProps,getPanelProps:_.value.renderer.getPanelProps,getRootProps:_.value.renderer.getRootProps},w={setActiveItemId:S.value.setActiveItemId,setQuery:S.value.setQuery,setCollections:S.value.setCollections,setIsOpen:S.value.setIsOpen,setStatus:S.value.setStatus,setContext:S.value.setContext,refresh:S.value.refresh,navigator:S.value.navigator},I=m((function(){return Lt.bind(_.value.renderer.renderer.createElement)})),A=m((function(){return rn({autocomplete:S.value,autocompleteScopeApi:w,classNames:_.value.renderer.classNames,environment:_.value.core.environment,isDetached:O.value,placeholder:_.value.core.placeholder,propGetters:P,setIsModalOpen:k,state:j.current,translations:_.value.renderer.translations})}));function E(){Jt(A.value.panel,{style:O.value?{}:Pr({panelPlacement:_.value.renderer.panelPlacement,container:A.value.root,form:A.value.form,environment:_.value.core.environment})})}function D(e){j.current=e;var t={autocomplete:S.value,autocompleteScopeApi:w,classNames:_.value.renderer.classNames,components:_.value.renderer.components,container:_.value.renderer.container,html:I.value,dom:A.value,panelContainer:O.value?A.value.detachedContainer:_.value.renderer.panelContainer,propGetters:P,state:j.current,renderer:_.value.renderer.renderer},r=!b(e)&&!y.current&&_.value.renderer.renderNoResults||_.value.renderer.render;!function(e){var t=e.autocomplete,r=e.autocompleteScopeApi,o=e.dom,i=e.propGetters,u=e.state;Xt(o.root,i.getRootProps(n({state:u,props:t.getRootProps({})},r))),Xt(o.input,i.getInputProps(n({state:u,props:t.getInputProps({inputElement:o.input}),inputElement:o.input},r))),Jt(o.label,{hidden:"stalled"===u.status}),Jt(o.loadingIndicator,{hidden:"stalled"!==u.status}),Jt(o.clearButton,{hidden:!u.query}),Jt(o.detachedSearchButtonQuery,{textContent:u.query}),Jt(o.detachedSearchButtonPlaceholder,{hidden:Boolean(u.query)})}(t),function(e,t){var r=t.autocomplete,o=t.autocompleteScopeApi,u=t.classNames,a=t.html,l=t.dom,c=t.panelContainer,s=t.propGetters,f=t.state,p=t.components,m=t.renderer;if(f.isOpen){c.contains(l.panel)||"loading"===f.status||c.appendChild(l.panel),l.panel.classList.toggle("aa-Panel--stalled","stalled"===f.status);var v=f.collections.filter((function(e){var t=e.source,n=e.items;return t.templates.noResults||n.length>0})).map((function(e,t){var l=e.source,c=e.items;return m.createElement("section",{key:t,className:u.source,"data-autocomplete-source-id":l.sourceId},l.templates.header&&m.createElement("div",{className:u.sourceHeader},l.templates.header({components:p,createElement:m.createElement,Fragment:m.Fragment,items:c,source:l,state:f,html:a})),l.templates.noResults&&0===c.length?m.createElement("div",{className:u.sourceNoResults},l.templates.noResults({components:p,createElement:m.createElement,Fragment:m.Fragment,source:l,state:f,html:a})):m.createElement("ul",i({className:u.list},s.getListProps(n({state:f,props:r.getListProps({source:l})},o))),c.map((function(e){var t=r.getItemProps({item:e,source:l});return m.createElement("li",i({key:t.id,className:u.item},s.getItemProps(n({state:f,props:t},o))),l.templates.item({components:p,createElement:m.createElement,Fragment:m.Fragment,item:e,state:f,html:a}))}))),l.templates.footer&&m.createElement("div",{className:u.sourceFooter},l.templates.footer({components:p,createElement:m.createElement,Fragment:m.Fragment,items:c,source:l,state:f,html:a})))})),d=m.createElement(m.Fragment,null,m.createElement("div",{className:u.panelLayout},v),m.createElement("div",{className:"aa-GradientBottom"})),y=v.reduce((function(e,t){return e[t.props["data-autocomplete-source-id"]]=t,e}),{});e(n(n({children:d,state:f,sections:v,elements:y},m),{},{components:p,html:a},o),l.panel)}else c.contains(l.panel)&&c.removeChild(l.panel)}(r,t)}function C(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};l();var t=_.value.renderer,n=t.components,r=u(t,Ir);g.current=Vt(r,_.value.core,{components:Wt(n,(function(e){return!e.value.hasOwnProperty("__autocomplete_componentName")})),initialState:j.current},e),v(),c(),S.value.refresh().then((function(){D(j.current)}))}function k(e){e!==_.value.core.environment.document.body.contains(A.value.detachedOverlay)&&(e?(_.value.core.environment.document.body.appendChild(A.value.detachedOverlay),_.value.core.environment.document.body.classList.add("aa-Detached"),A.value.input.focus()):(_.value.core.environment.document.body.removeChild(A.value.detachedOverlay),_.value.core.environment.document.body.classList.remove("aa-Detached")))}return a((function(){var e=S.value.getEnvironmentProps({formElement:A.value.form,panelElement:A.value.panel,inputElement:A.value.input});return Jt(_.value.core.environment,e),function(){Jt(_.value.core.environment,Object.keys(e).reduce((function(e,t){return n(n({},e),{},o({},t,void 0))}),{}))}})),a((function(){var e=O.value?_.value.core.environment.document.body:_.value.renderer.panelContainer,t=O.value?A.value.detachedOverlay:A.value.panel;return O.value&&j.current.isOpen&&k(!0),D(j.current),function(){e.contains(t)&&(e.removeChild(t),e.classList.remove("aa-Detached"))}})),a((function(){var e=_.value.renderer.container;return e.appendChild(A.value.root),function(){e.removeChild(A.value.root)}})),a((function(){var e=p((function(e){D(e.state)}),0);return h.current=function(t){var n=t.state,r=t.prevState;(O.value&&r.isOpen!==n.isOpen&&k(n.isOpen),O.value||!n.isOpen||r.isOpen||E(),n.query!==r.query)&&_.value.core.environment.document.querySelectorAll(".aa-Panel--scrollable").forEach((function(e){0!==e.scrollTop&&(e.scrollTop=0)}));e({state:n})},function(){h.current=void 0}})),a((function(){var e=p((function(){var e=O.value;O.value=_.value.core.environment.matchMedia(_.value.renderer.detachedMediaQuery).matches,e!==O.value?C({}):requestAnimationFrame(E)}),20);return _.value.core.environment.addEventListener("resize",e),function(){_.value.core.environment.removeEventListener("resize",e)}})),a((function(){if(!O.value)return function(){};function e(e){A.value.detachedContainer.classList.toggle("aa-DetachedContainer--modal",e)}function t(t){e(t.matches)}var n=_.value.core.environment.matchMedia(getComputedStyle(_.value.core.environment.document.documentElement).getPropertyValue("--aa-detached-modal-media-query"));e(n.matches);var r=Boolean(n.addEventListener);return r?n.addEventListener("change",t):n.addListener(t),function(){r?n.removeEventListener("change",t):n.removeListener(t)}})),a((function(){return requestAnimationFrame(E),function(){}})),n(n({},w),{},{update:C,destroy:function(){l()}})},e.getAlgoliaFacets=function(e){var t=Ar({transformResponse:function(e){return e.facetHits}}),r=e.queries.map((function(e){return n(n({},e),{},{type:"facet"})}));return t(n(n({},e),{},{queries:r}))},e.getAlgoliaResults=Er,Object.defineProperty(e,"__esModule",{value:!0})})); + diff --git a/docs/site_libs/quarto-search/fuse.min.js b/docs/site_libs/quarto-search/fuse.min.js new file mode 100644 index 0000000..adc2835 --- /dev/null +++ b/docs/site_libs/quarto-search/fuse.min.js @@ -0,0 +1,9 @@ +/** + * Fuse.js v6.6.2 - Lightweight fuzzy-search (http://fusejs.io) + * + * Copyright (c) 2022 Kiro Risk (http://kiro.me) + * All Rights Reserved. Apache Software License 2.0 + * + * http://www.apache.org/licenses/LICENSE-2.0 + */ +var e,t;e=this,t=function(){"use strict";function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function t(t){for(var n=1;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&void 0!==arguments[0]?arguments[0]:1,t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:3,n=new Map,r=Math.pow(10,t);return{get:function(t){var i=t.match(C).length;if(n.has(i))return n.get(i);var o=1/Math.pow(i,.5*e),c=parseFloat(Math.round(o*r)/r);return n.set(i,c),c},clear:function(){n.clear()}}}var $=function(){function e(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},n=t.getFn,i=void 0===n?I.getFn:n,o=t.fieldNormWeight,c=void 0===o?I.fieldNormWeight:o;r(this,e),this.norm=E(c,3),this.getFn=i,this.isCreated=!1,this.setIndexRecords()}return o(e,[{key:"setSources",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.docs=e}},{key:"setIndexRecords",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.records=e}},{key:"setKeys",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];this.keys=t,this._keysMap={},t.forEach((function(t,n){e._keysMap[t.id]=n}))}},{key:"create",value:function(){var e=this;!this.isCreated&&this.docs.length&&(this.isCreated=!0,g(this.docs[0])?this.docs.forEach((function(t,n){e._addString(t,n)})):this.docs.forEach((function(t,n){e._addObject(t,n)})),this.norm.clear())}},{key:"add",value:function(e){var t=this.size();g(e)?this._addString(e,t):this._addObject(e,t)}},{key:"removeAt",value:function(e){this.records.splice(e,1);for(var t=e,n=this.size();t2&&void 0!==arguments[2]?arguments[2]:{},r=n.getFn,i=void 0===r?I.getFn:r,o=n.fieldNormWeight,c=void 0===o?I.fieldNormWeight:o,a=new $({getFn:i,fieldNormWeight:c});return a.setKeys(e.map(_)),a.setSources(t),a.create(),a}function R(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.errors,r=void 0===n?0:n,i=t.currentLocation,o=void 0===i?0:i,c=t.expectedLocation,a=void 0===c?0:c,s=t.distance,u=void 0===s?I.distance:s,h=t.ignoreLocation,l=void 0===h?I.ignoreLocation:h,f=r/e.length;if(l)return f;var d=Math.abs(a-o);return u?f+d/u:d?1:f}function N(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:I.minMatchCharLength,n=[],r=-1,i=-1,o=0,c=e.length;o=t&&n.push([r,i]),r=-1)}return e[o-1]&&o-r>=t&&n.push([r,o-1]),n}var P=32;function W(e){for(var t={},n=0,r=e.length;n1&&void 0!==arguments[1]?arguments[1]:{},o=i.location,c=void 0===o?I.location:o,a=i.threshold,s=void 0===a?I.threshold:a,u=i.distance,h=void 0===u?I.distance:u,l=i.includeMatches,f=void 0===l?I.includeMatches:l,d=i.findAllMatches,v=void 0===d?I.findAllMatches:d,g=i.minMatchCharLength,y=void 0===g?I.minMatchCharLength:g,p=i.isCaseSensitive,m=void 0===p?I.isCaseSensitive:p,k=i.ignoreLocation,M=void 0===k?I.ignoreLocation:k;if(r(this,e),this.options={location:c,threshold:s,distance:h,includeMatches:f,findAllMatches:v,minMatchCharLength:y,isCaseSensitive:m,ignoreLocation:M},this.pattern=m?t:t.toLowerCase(),this.chunks=[],this.pattern.length){var b=function(e,t){n.chunks.push({pattern:e,alphabet:W(e),startIndex:t})},x=this.pattern.length;if(x>P){for(var w=0,L=x%P,S=x-L;w3&&void 0!==arguments[3]?arguments[3]:{},i=r.location,o=void 0===i?I.location:i,c=r.distance,a=void 0===c?I.distance:c,s=r.threshold,u=void 0===s?I.threshold:s,h=r.findAllMatches,l=void 0===h?I.findAllMatches:h,f=r.minMatchCharLength,d=void 0===f?I.minMatchCharLength:f,v=r.includeMatches,g=void 0===v?I.includeMatches:v,y=r.ignoreLocation,p=void 0===y?I.ignoreLocation:y;if(t.length>P)throw new Error(w(P));for(var m,k=t.length,M=e.length,b=Math.max(0,Math.min(o,M)),x=u,L=b,S=d>1||g,_=S?Array(M):[];(m=e.indexOf(t,L))>-1;){var O=R(t,{currentLocation:m,expectedLocation:b,distance:a,ignoreLocation:p});if(x=Math.min(O,x),L=m+k,S)for(var j=0;j=z;q-=1){var B=q-1,J=n[e.charAt(B)];if(S&&(_[B]=+!!J),K[q]=(K[q+1]<<1|1)&J,F&&(K[q]|=(A[q+1]|A[q])<<1|1|A[q+1]),K[q]&$&&(C=R(t,{errors:F,currentLocation:B,expectedLocation:b,distance:a,ignoreLocation:p}))<=x){if(x=C,(L=B)<=b)break;z=Math.max(1,2*b-L)}}if(R(t,{errors:F+1,currentLocation:b,expectedLocation:b,distance:a,ignoreLocation:p})>x)break;A=K}var U={isMatch:L>=0,score:Math.max(.001,C)};if(S){var V=N(_,d);V.length?g&&(U.indices=V):U.isMatch=!1}return U}(e,n,i,{location:c+o,distance:a,threshold:s,findAllMatches:u,minMatchCharLength:h,includeMatches:r,ignoreLocation:l}),p=y.isMatch,m=y.score,k=y.indices;p&&(g=!0),v+=m,p&&k&&(d=[].concat(f(d),f(k)))}));var y={isMatch:g,score:g?v/this.chunks.length:1};return g&&r&&(y.indices=d),y}}]),e}(),z=function(){function e(t){r(this,e),this.pattern=t}return o(e,[{key:"search",value:function(){}}],[{key:"isMultiMatch",value:function(e){return D(e,this.multiRegex)}},{key:"isSingleMatch",value:function(e){return D(e,this.singleRegex)}}]),e}();function D(e,t){var n=e.match(t);return n?n[1]:null}var K=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e===this.pattern;return{isMatch:t,score:t?0:1,indices:[0,this.pattern.length-1]}}}],[{key:"type",get:function(){return"exact"}},{key:"multiRegex",get:function(){return/^="(.*)"$/}},{key:"singleRegex",get:function(){return/^=(.*)$/}}]),n}(z),q=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=-1===e.indexOf(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-exact"}},{key:"multiRegex",get:function(){return/^!"(.*)"$/}},{key:"singleRegex",get:function(){return/^!(.*)$/}}]),n}(z),B=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e.startsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,this.pattern.length-1]}}}],[{key:"type",get:function(){return"prefix-exact"}},{key:"multiRegex",get:function(){return/^\^"(.*)"$/}},{key:"singleRegex",get:function(){return/^\^(.*)$/}}]),n}(z),J=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=!e.startsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-prefix-exact"}},{key:"multiRegex",get:function(){return/^!\^"(.*)"$/}},{key:"singleRegex",get:function(){return/^!\^(.*)$/}}]),n}(z),U=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=e.endsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[e.length-this.pattern.length,e.length-1]}}}],[{key:"type",get:function(){return"suffix-exact"}},{key:"multiRegex",get:function(){return/^"(.*)"\$$/}},{key:"singleRegex",get:function(){return/^(.*)\$$/}}]),n}(z),V=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){var t=!e.endsWith(this.pattern);return{isMatch:t,score:t?0:1,indices:[0,e.length-1]}}}],[{key:"type",get:function(){return"inverse-suffix-exact"}},{key:"multiRegex",get:function(){return/^!"(.*)"\$$/}},{key:"singleRegex",get:function(){return/^!(.*)\$$/}}]),n}(z),G=function(e){a(n,e);var t=l(n);function n(e){var i,o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},c=o.location,a=void 0===c?I.location:c,s=o.threshold,u=void 0===s?I.threshold:s,h=o.distance,l=void 0===h?I.distance:h,f=o.includeMatches,d=void 0===f?I.includeMatches:f,v=o.findAllMatches,g=void 0===v?I.findAllMatches:v,y=o.minMatchCharLength,p=void 0===y?I.minMatchCharLength:y,m=o.isCaseSensitive,k=void 0===m?I.isCaseSensitive:m,M=o.ignoreLocation,b=void 0===M?I.ignoreLocation:M;return r(this,n),(i=t.call(this,e))._bitapSearch=new T(e,{location:a,threshold:u,distance:l,includeMatches:d,findAllMatches:g,minMatchCharLength:p,isCaseSensitive:k,ignoreLocation:b}),i}return o(n,[{key:"search",value:function(e){return this._bitapSearch.searchIn(e)}}],[{key:"type",get:function(){return"fuzzy"}},{key:"multiRegex",get:function(){return/^"(.*)"$/}},{key:"singleRegex",get:function(){return/^(.*)$/}}]),n}(z),H=function(e){a(n,e);var t=l(n);function n(e){return r(this,n),t.call(this,e)}return o(n,[{key:"search",value:function(e){for(var t,n=0,r=[],i=this.pattern.length;(t=e.indexOf(this.pattern,n))>-1;)n=t+i,r.push([t,n-1]);var o=!!r.length;return{isMatch:o,score:o?0:1,indices:r}}}],[{key:"type",get:function(){return"include"}},{key:"multiRegex",get:function(){return/^'"(.*)"$/}},{key:"singleRegex",get:function(){return/^'(.*)$/}}]),n}(z),Q=[K,H,B,J,V,U,q,G],X=Q.length,Y=/ +(?=(?:[^\"]*\"[^\"]*\")*[^\"]*$)/;function Z(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return e.split("|").map((function(e){for(var n=e.trim().split(Y).filter((function(e){return e&&!!e.trim()})),r=[],i=0,o=n.length;i1&&void 0!==arguments[1]?arguments[1]:{},i=n.isCaseSensitive,o=void 0===i?I.isCaseSensitive:i,c=n.includeMatches,a=void 0===c?I.includeMatches:c,s=n.minMatchCharLength,u=void 0===s?I.minMatchCharLength:s,h=n.ignoreLocation,l=void 0===h?I.ignoreLocation:h,f=n.findAllMatches,d=void 0===f?I.findAllMatches:f,v=n.location,g=void 0===v?I.location:v,y=n.threshold,p=void 0===y?I.threshold:y,m=n.distance,k=void 0===m?I.distance:m;r(this,e),this.query=null,this.options={isCaseSensitive:o,includeMatches:a,minMatchCharLength:u,findAllMatches:d,ignoreLocation:l,location:g,threshold:p,distance:k},this.pattern=o?t:t.toLowerCase(),this.query=Z(this.pattern,this.options)}return o(e,[{key:"searchIn",value:function(e){var t=this.query;if(!t)return{isMatch:!1,score:1};var n=this.options,r=n.includeMatches;e=n.isCaseSensitive?e:e.toLowerCase();for(var i=0,o=[],c=0,a=0,s=t.length;a-1&&(n.refIndex=e.idx),t.matches.push(n)}}))}function ve(e,t){t.score=e.score}function ge(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.includeMatches,i=void 0===r?I.includeMatches:r,o=n.includeScore,c=void 0===o?I.includeScore:o,a=[];return i&&a.push(de),c&&a.push(ve),e.map((function(e){var n=e.idx,r={item:t[n],refIndex:n};return a.length&&a.forEach((function(t){t(e,r)})),r}))}var ye=function(){function e(n){var i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},o=arguments.length>2?arguments[2]:void 0;r(this,e),this.options=t(t({},I),i),this.options.useExtendedSearch,this._keyStore=new S(this.options.keys),this.setCollection(n,o)}return o(e,[{key:"setCollection",value:function(e,t){if(this._docs=e,t&&!(t instanceof $))throw new Error("Incorrect 'index' type");this._myIndex=t||F(this.options.keys,this._docs,{getFn:this.options.getFn,fieldNormWeight:this.options.fieldNormWeight})}},{key:"add",value:function(e){k(e)&&(this._docs.push(e),this._myIndex.add(e))}},{key:"remove",value:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:function(){return!1},t=[],n=0,r=this._docs.length;n1&&void 0!==arguments[1]?arguments[1]:{},n=t.limit,r=void 0===n?-1:n,i=this.options,o=i.includeMatches,c=i.includeScore,a=i.shouldSort,s=i.sortFn,u=i.ignoreFieldNorm,h=g(e)?g(this._docs[0])?this._searchStringList(e):this._searchObjectList(e):this._searchLogical(e);return fe(h,{ignoreFieldNorm:u}),a&&h.sort(s),y(r)&&r>-1&&(h=h.slice(0,r)),ge(h,this._docs,{includeMatches:o,includeScore:c})}},{key:"_searchStringList",value:function(e){var t=re(e,this.options),n=this._myIndex.records,r=[];return n.forEach((function(e){var n=e.v,i=e.i,o=e.n;if(k(n)){var c=t.searchIn(n),a=c.isMatch,s=c.score,u=c.indices;a&&r.push({item:n,idx:i,matches:[{score:s,value:n,norm:o,indices:u}]})}})),r}},{key:"_searchLogical",value:function(e){var t=this,n=function(e,t){var n=(arguments.length>2&&void 0!==arguments[2]?arguments[2]:{}).auto,r=void 0===n||n,i=function e(n){var i=Object.keys(n),o=ue(n);if(!o&&i.length>1&&!se(n))return e(le(n));if(he(n)){var c=o?n[ce]:i[0],a=o?n[ae]:n[c];if(!g(a))throw new Error(x(c));var s={keyId:j(c),pattern:a};return r&&(s.searcher=re(a,t)),s}var u={children:[],operator:i[0]};return i.forEach((function(t){var r=n[t];v(r)&&r.forEach((function(t){u.children.push(e(t))}))})),u};return se(e)||(e=le(e)),i(e)}(e,this.options),r=function e(n,r,i){if(!n.children){var o=n.keyId,c=n.searcher,a=t._findMatches({key:t._keyStore.get(o),value:t._myIndex.getValueForItemAtKeyId(r,o),searcher:c});return a&&a.length?[{idx:i,item:r,matches:a}]:[]}for(var s=[],u=0,h=n.children.length;u1&&void 0!==arguments[1]?arguments[1]:{},n=t.getFn,r=void 0===n?I.getFn:n,i=t.fieldNormWeight,o=void 0===i?I.fieldNormWeight:i,c=e.keys,a=e.records,s=new $({getFn:r,fieldNormWeight:o});return s.setKeys(c),s.setIndexRecords(a),s},ye.config=I,function(){ne.push.apply(ne,arguments)}(te),ye},"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Fuse=t(); \ No newline at end of file diff --git a/docs/site_libs/quarto-search/quarto-search.js b/docs/site_libs/quarto-search/quarto-search.js new file mode 100644 index 0000000..d788a95 --- /dev/null +++ b/docs/site_libs/quarto-search/quarto-search.js @@ -0,0 +1,1290 @@ +const kQueryArg = "q"; +const kResultsArg = "show-results"; + +// If items don't provide a URL, then both the navigator and the onSelect +// function aren't called (and therefore, the default implementation is used) +// +// We're using this sentinel URL to signal to those handlers that this +// item is a more item (along with the type) and can be handled appropriately +const kItemTypeMoreHref = "0767FDFD-0422-4E5A-BC8A-3BE11E5BBA05"; + +window.document.addEventListener("DOMContentLoaded", function (_event) { + // Ensure that search is available on this page. If it isn't, + // should return early and not do anything + var searchEl = window.document.getElementById("quarto-search"); + if (!searchEl) return; + + const { autocomplete } = window["@algolia/autocomplete-js"]; + + let quartoSearchOptions = {}; + let language = {}; + const searchOptionEl = window.document.getElementById( + "quarto-search-options" + ); + if (searchOptionEl) { + const jsonStr = searchOptionEl.textContent; + quartoSearchOptions = JSON.parse(jsonStr); + language = quartoSearchOptions.language; + } + + // note the search mode + if (quartoSearchOptions.type === "overlay") { + searchEl.classList.add("type-overlay"); + } else { + searchEl.classList.add("type-textbox"); + } + + // Used to determine highlighting behavior for this page + // A `q` query param is expected when the user follows a search + // to this page + const currentUrl = new URL(window.location); + const query = currentUrl.searchParams.get(kQueryArg); + const showSearchResults = currentUrl.searchParams.get(kResultsArg); + const mainEl = window.document.querySelector("main"); + + // highlight matches on the page + if (query && mainEl) { + // perform any highlighting + highlight(escapeRegExp(query), mainEl); + + // fix up the URL to remove the q query param + const replacementUrl = new URL(window.location); + replacementUrl.searchParams.delete(kQueryArg); + window.history.replaceState({}, "", replacementUrl); + } + + // function to clear highlighting on the page when the search query changes + // (e.g. if the user edits the query or clears it) + let highlighting = true; + const resetHighlighting = (searchTerm) => { + if (mainEl && highlighting && query && searchTerm !== query) { + clearHighlight(query, mainEl); + highlighting = false; + } + }; + + // Clear search highlighting when the user scrolls sufficiently + const resetFn = () => { + resetHighlighting(""); + window.removeEventListener("quarto-hrChanged", resetFn); + window.removeEventListener("quarto-sectionChanged", resetFn); + }; + + // Register this event after the initial scrolling and settling of events + // on the page + window.addEventListener("quarto-hrChanged", resetFn); + window.addEventListener("quarto-sectionChanged", resetFn); + + // Responsively switch to overlay mode if the search is present on the navbar + // Note that switching the sidebar to overlay mode requires more coordinate (not just + // the media query since we generate different HTML for sidebar overlays than we do + // for sidebar input UI) + const detachedMediaQuery = + quartoSearchOptions.type === "overlay" ? "all" : "(max-width: 991px)"; + + // If configured, include the analytics client to send insights + const plugins = configurePlugins(quartoSearchOptions); + + let lastState = null; + const { setIsOpen, setQuery, setCollections } = autocomplete({ + container: searchEl, + detachedMediaQuery: detachedMediaQuery, + defaultActiveItemId: 0, + panelContainer: "#quarto-search-results", + panelPlacement: quartoSearchOptions["panel-placement"], + debug: false, + openOnFocus: true, + plugins, + classNames: { + form: "d-flex", + }, + placeholder: language["search-text-placeholder"], + translations: { + clearButtonTitle: language["search-clear-button-title"], + detachedCancelButtonText: language["search-detached-cancel-button-title"], + submitButtonTitle: language["search-submit-button-title"], + }, + initialState: { + query, + }, + getItemUrl({ item }) { + return item.href; + }, + onStateChange({ state }) { + // If this is a file URL, note that + + // Perhaps reset highlighting + resetHighlighting(state.query); + + // If the panel just opened, ensure the panel is positioned properly + if (state.isOpen) { + if (lastState && !lastState.isOpen) { + setTimeout(() => { + positionPanel(quartoSearchOptions["panel-placement"]); + }, 150); + } + } + + // Perhaps show the copy link + showCopyLink(state.query, quartoSearchOptions); + + lastState = state; + }, + reshape({ sources, state }) { + return sources.map((source) => { + try { + const items = source.getItems(); + + // Validate the items + validateItems(items); + + // group the items by document + const groupedItems = new Map(); + items.forEach((item) => { + const hrefParts = item.href.split("#"); + const baseHref = hrefParts[0]; + const isDocumentItem = hrefParts.length === 1; + + const items = groupedItems.get(baseHref); + if (!items) { + groupedItems.set(baseHref, [item]); + } else { + // If the href for this item matches the document + // exactly, place this item first as it is the item that represents + // the document itself + if (isDocumentItem) { + items.unshift(item); + } else { + items.push(item); + } + groupedItems.set(baseHref, items); + } + }); + + const reshapedItems = []; + let count = 1; + for (const [_key, value] of groupedItems) { + const firstItem = value[0]; + reshapedItems.push({ + ...firstItem, + type: kItemTypeDoc, + }); + + const collapseMatches = quartoSearchOptions["collapse-after"]; + const collapseCount = + typeof collapseMatches === "number" ? collapseMatches : 1; + + if (value.length > 1) { + const target = `search-more-${count}`; + const isExpanded = + state.context.expanded && + state.context.expanded.includes(target); + + const remainingCount = value.length - collapseCount; + + for (let i = 1; i < value.length; i++) { + if (collapseMatches && i === collapseCount) { + reshapedItems.push({ + target, + title: isExpanded + ? language["search-hide-matches-text"] + : remainingCount === 1 + ? `${remainingCount} ${language["search-more-match-text"]}` + : `${remainingCount} ${language["search-more-matches-text"]}`, + type: kItemTypeMore, + href: kItemTypeMoreHref, + }); + } + + if (isExpanded || !collapseMatches || i < collapseCount) { + reshapedItems.push({ + ...value[i], + type: kItemTypeItem, + target, + }); + } + } + } + count += 1; + } + + return { + ...source, + getItems() { + return reshapedItems; + }, + }; + } catch (error) { + // Some form of error occurred + return { + ...source, + getItems() { + return [ + { + title: error.name || "An Error Occurred While Searching", + text: + error.message || + "An unknown error occurred while attempting to perform the requested search.", + type: kItemTypeError, + }, + ]; + }, + }; + } + }); + }, + navigator: { + navigate({ itemUrl }) { + if (itemUrl !== offsetURL(kItemTypeMoreHref)) { + window.location.assign(itemUrl); + } + }, + navigateNewTab({ itemUrl }) { + if (itemUrl !== offsetURL(kItemTypeMoreHref)) { + const windowReference = window.open(itemUrl, "_blank", "noopener"); + if (windowReference) { + windowReference.focus(); + } + } + }, + navigateNewWindow({ itemUrl }) { + if (itemUrl !== offsetURL(kItemTypeMoreHref)) { + window.open(itemUrl, "_blank", "noopener"); + } + }, + }, + getSources({ state, setContext, setActiveItemId, refresh }) { + return [ + { + sourceId: "documents", + getItemUrl({ item }) { + if (item.href) { + return offsetURL(item.href); + } else { + return undefined; + } + }, + onSelect({ + item, + state, + setContext, + setIsOpen, + setActiveItemId, + refresh, + }) { + if (item.type === kItemTypeMore) { + toggleExpanded(item, state, setContext, setActiveItemId, refresh); + + // Toggle more + setIsOpen(true); + } + }, + getItems({ query }) { + if (query === null || query === "") { + return []; + } + + const limit = quartoSearchOptions.limit; + if (quartoSearchOptions.algolia) { + return algoliaSearch(query, limit, quartoSearchOptions.algolia); + } else { + // Fuse search options + const fuseSearchOptions = { + isCaseSensitive: false, + shouldSort: true, + minMatchCharLength: 2, + limit: limit, + }; + + return readSearchData().then(function (fuse) { + return fuseSearch(query, fuse, fuseSearchOptions); + }); + } + }, + templates: { + noResults({ createElement }) { + const hasQuery = lastState.query; + + return createElement( + "div", + { + class: `quarto-search-no-results${ + hasQuery ? "" : " no-query" + }`, + }, + language["search-no-results-text"] + ); + }, + header({ items, createElement }) { + // count the documents + const count = items.filter((item) => { + return item.type === kItemTypeDoc; + }).length; + + if (count > 0) { + return createElement( + "div", + { class: "search-result-header" }, + `${count} ${language["search-matching-documents-text"]}` + ); + } else { + return createElement( + "div", + { class: "search-result-header-no-results" }, + `` + ); + } + }, + footer({ _items, createElement }) { + if ( + quartoSearchOptions.algolia && + quartoSearchOptions.algolia["show-logo"] + ) { + const libDir = quartoSearchOptions.algolia["libDir"]; + const logo = createElement("img", { + src: offsetURL( + `${libDir}/quarto-search/search-by-algolia.svg` + ), + class: "algolia-search-logo", + }); + return createElement( + "a", + { href: "http://www.algolia.com/" }, + logo + ); + } + }, + + item({ item, createElement }) { + return renderItem( + item, + createElement, + state, + setActiveItemId, + setContext, + refresh, + quartoSearchOptions + ); + }, + }, + }, + ]; + }, + }); + + window.quartoOpenSearch = () => { + setIsOpen(false); + setIsOpen(true); + focusSearchInput(); + }; + + document.addEventListener("keyup", (event) => { + const { key } = event; + const kbds = quartoSearchOptions["keyboard-shortcut"]; + const focusedEl = document.activeElement; + + const isFormElFocused = [ + "input", + "select", + "textarea", + "button", + "option", + ].find((tag) => { + return focusedEl.tagName.toLowerCase() === tag; + }); + + if ( + kbds && + kbds.includes(key) && + !isFormElFocused && + !document.activeElement.isContentEditable + ) { + event.preventDefault(); + window.quartoOpenSearch(); + } + }); + + // Remove the labeleledby attribute since it is pointing + // to a non-existent label + if (quartoSearchOptions.type === "overlay") { + const inputEl = window.document.querySelector( + "#quarto-search .aa-Autocomplete" + ); + if (inputEl) { + inputEl.removeAttribute("aria-labelledby"); + } + } + + function throttle(func, wait) { + let waiting = false; + return function () { + if (!waiting) { + func.apply(this, arguments); + waiting = true; + setTimeout(function () { + waiting = false; + }, wait); + } + }; + } + + // If the main document scrolls dismiss the search results + // (otherwise, since they're floating in the document they can scroll with the document) + window.document.body.onscroll = throttle(() => { + // Only do this if we're not detached + // Bug #7117 + // This will happen when the keyboard is shown on ios (resulting in a scroll) + // which then closed the search UI + if (!window.matchMedia(detachedMediaQuery).matches) { + setIsOpen(false); + } + }, 50); + + if (showSearchResults) { + setIsOpen(true); + focusSearchInput(); + } +}); + +function configurePlugins(quartoSearchOptions) { + const autocompletePlugins = []; + const algoliaOptions = quartoSearchOptions.algolia; + if ( + algoliaOptions && + algoliaOptions["analytics-events"] && + algoliaOptions["search-only-api-key"] && + algoliaOptions["application-id"] + ) { + const apiKey = algoliaOptions["search-only-api-key"]; + const appId = algoliaOptions["application-id"]; + + // Aloglia insights may not be loaded because they require cookie consent + // Use deferred loading so events will start being recorded when/if consent + // is granted. + const algoliaInsightsDeferredPlugin = deferredLoadPlugin(() => { + if ( + window.aa && + window["@algolia/autocomplete-plugin-algolia-insights"] + ) { + window.aa("init", { + appId, + apiKey, + useCookie: true, + }); + + const { createAlgoliaInsightsPlugin } = + window["@algolia/autocomplete-plugin-algolia-insights"]; + // Register the insights client + const algoliaInsightsPlugin = createAlgoliaInsightsPlugin({ + insightsClient: window.aa, + onItemsChange({ insights, insightsEvents }) { + const events = insightsEvents.flatMap((event) => { + // This API limits the number of items per event to 20 + const chunkSize = 20; + const itemChunks = []; + const eventItems = event.items; + for (let i = 0; i < eventItems.length; i += chunkSize) { + itemChunks.push(eventItems.slice(i, i + chunkSize)); + } + // Split the items into multiple events that can be sent + const events = itemChunks.map((items) => { + return { + ...event, + items, + }; + }); + return events; + }); + + for (const event of events) { + insights.viewedObjectIDs(event); + } + }, + }); + return algoliaInsightsPlugin; + } + }); + + // Add the plugin + autocompletePlugins.push(algoliaInsightsDeferredPlugin); + return autocompletePlugins; + } +} + +// For plugins that may not load immediately, create a wrapper +// plugin and forward events and plugin data once the plugin +// is initialized. This is useful for cases like cookie consent +// which may prevent the analytics insights event plugin from initializing +// immediately. +function deferredLoadPlugin(createPlugin) { + let plugin = undefined; + let subscribeObj = undefined; + const wrappedPlugin = () => { + if (!plugin && subscribeObj) { + plugin = createPlugin(); + if (plugin && plugin.subscribe) { + plugin.subscribe(subscribeObj); + } + } + return plugin; + }; + + return { + subscribe: (obj) => { + subscribeObj = obj; + }, + onStateChange: (obj) => { + const plugin = wrappedPlugin(); + if (plugin && plugin.onStateChange) { + plugin.onStateChange(obj); + } + }, + onSubmit: (obj) => { + const plugin = wrappedPlugin(); + if (plugin && plugin.onSubmit) { + plugin.onSubmit(obj); + } + }, + onReset: (obj) => { + const plugin = wrappedPlugin(); + if (plugin && plugin.onReset) { + plugin.onReset(obj); + } + }, + getSources: (obj) => { + const plugin = wrappedPlugin(); + if (plugin && plugin.getSources) { + return plugin.getSources(obj); + } else { + return Promise.resolve([]); + } + }, + data: (obj) => { + const plugin = wrappedPlugin(); + if (plugin && plugin.data) { + plugin.data(obj); + } + }, + }; +} + +function validateItems(items) { + // Validate the first item + if (items.length > 0) { + const item = items[0]; + const missingFields = []; + if (item.href == undefined) { + missingFields.push("href"); + } + if (!item.title == undefined) { + missingFields.push("title"); + } + if (!item.text == undefined) { + missingFields.push("text"); + } + + if (missingFields.length === 1) { + throw { + name: `Error: Search index is missing the ${missingFields[0]} field.`, + message: `The items being returned for this search do not include all the required fields. Please ensure that your index items include the ${missingFields[0]} field or use index-fields in your _quarto.yml file to specify the field names.`, + }; + } else if (missingFields.length > 1) { + const missingFieldList = missingFields + .map((field) => { + return `${field}`; + }) + .join(", "); + + throw { + name: `Error: Search index is missing the following fields: ${missingFieldList}.`, + message: `The items being returned for this search do not include all the required fields. Please ensure that your index items includes the following fields: ${missingFieldList}, or use index-fields in your _quarto.yml file to specify the field names.`, + }; + } + } +} + +let lastQuery = null; +function showCopyLink(query, options) { + const language = options.language; + lastQuery = query; + // Insert share icon + const inputSuffixEl = window.document.body.querySelector( + ".aa-Form .aa-InputWrapperSuffix" + ); + + if (inputSuffixEl) { + let copyButtonEl = window.document.body.querySelector( + ".aa-Form .aa-InputWrapperSuffix .aa-CopyButton" + ); + + if (copyButtonEl === null) { + copyButtonEl = window.document.createElement("button"); + copyButtonEl.setAttribute("class", "aa-CopyButton"); + copyButtonEl.setAttribute("type", "button"); + copyButtonEl.setAttribute("title", language["search-copy-link-title"]); + copyButtonEl.onmousedown = (e) => { + e.preventDefault(); + e.stopPropagation(); + }; + + const linkIcon = "bi-clipboard"; + const checkIcon = "bi-check2"; + + const shareIconEl = window.document.createElement("i"); + shareIconEl.setAttribute("class", `bi ${linkIcon}`); + copyButtonEl.appendChild(shareIconEl); + inputSuffixEl.prepend(copyButtonEl); + + const clipboard = new window.ClipboardJS(".aa-CopyButton", { + text: function (_trigger) { + const copyUrl = new URL(window.location); + copyUrl.searchParams.set(kQueryArg, lastQuery); + copyUrl.searchParams.set(kResultsArg, "1"); + return copyUrl.toString(); + }, + }); + clipboard.on("success", function (e) { + // Focus the input + + // button target + const button = e.trigger; + const icon = button.querySelector("i.bi"); + + // flash "checked" + icon.classList.add(checkIcon); + icon.classList.remove(linkIcon); + setTimeout(function () { + icon.classList.remove(checkIcon); + icon.classList.add(linkIcon); + }, 1000); + }); + } + + // If there is a query, show the link icon + if (copyButtonEl) { + if (lastQuery && options["copy-button"]) { + copyButtonEl.style.display = "flex"; + } else { + copyButtonEl.style.display = "none"; + } + } + } +} + +/* Search Index Handling */ +// create the index +var fuseIndex = undefined; +var shownWarning = false; + +// fuse index options +const kFuseIndexOptions = { + keys: [ + { name: "title", weight: 20 }, + { name: "section", weight: 20 }, + { name: "text", weight: 10 }, + ], + ignoreLocation: true, + threshold: 0.1, +}; + +async function readSearchData() { + // Initialize the search index on demand + if (fuseIndex === undefined) { + if (window.location.protocol === "file:" && !shownWarning) { + window.alert( + "Search requires JavaScript features disabled when running in file://... URLs. In order to use search, please run this document in a web server." + ); + shownWarning = true; + return; + } + const fuse = new window.Fuse([], kFuseIndexOptions); + + // fetch the main search.json + const response = await fetch(offsetURL("search.json")); + if (response.status == 200) { + return response.json().then(function (searchDocs) { + searchDocs.forEach(function (searchDoc) { + fuse.add(searchDoc); + }); + fuseIndex = fuse; + return fuseIndex; + }); + } else { + return Promise.reject( + new Error( + "Unexpected status from search index request: " + response.status + ) + ); + } + } + + return fuseIndex; +} + +function inputElement() { + return window.document.body.querySelector(".aa-Form .aa-Input"); +} + +function focusSearchInput() { + setTimeout(() => { + const inputEl = inputElement(); + if (inputEl) { + inputEl.focus(); + } + }, 50); +} + +/* Panels */ +const kItemTypeDoc = "document"; +const kItemTypeMore = "document-more"; +const kItemTypeItem = "document-item"; +const kItemTypeError = "error"; + +function renderItem( + item, + createElement, + state, + setActiveItemId, + setContext, + refresh, + quartoSearchOptions +) { + switch (item.type) { + case kItemTypeDoc: + return createDocumentCard( + createElement, + "file-richtext", + item.title, + item.section, + item.text, + item.href, + item.crumbs, + quartoSearchOptions + ); + case kItemTypeMore: + return createMoreCard( + createElement, + item, + state, + setActiveItemId, + setContext, + refresh + ); + case kItemTypeItem: + return createSectionCard( + createElement, + item.section, + item.text, + item.href + ); + case kItemTypeError: + return createErrorCard(createElement, item.title, item.text); + default: + return undefined; + } +} + +function createDocumentCard( + createElement, + icon, + title, + section, + text, + href, + crumbs, + quartoSearchOptions +) { + const iconEl = createElement("i", { + class: `bi bi-${icon} search-result-icon`, + }); + const titleEl = createElement("p", { class: "search-result-title" }, title); + const titleContents = [iconEl, titleEl]; + const showParent = quartoSearchOptions["show-item-context"]; + if (crumbs && showParent) { + let crumbsOut = undefined; + const crumbClz = ["search-result-crumbs"]; + if (showParent === "root") { + crumbsOut = crumbs.length > 1 ? crumbs[0] : undefined; + } else if (showParent === "parent") { + crumbsOut = crumbs.length > 1 ? crumbs[crumbs.length - 2] : undefined; + } else { + crumbsOut = crumbs.length > 1 ? crumbs.join(" > ") : undefined; + crumbClz.push("search-result-crumbs-wrap"); + } + + const crumbEl = createElement( + "p", + { class: crumbClz.join(" ") }, + crumbsOut + ); + titleContents.push(crumbEl); + } + + const titleContainerEl = createElement( + "div", + { class: "search-result-title-container" }, + titleContents + ); + + const textEls = []; + if (section) { + const sectionEl = createElement( + "p", + { class: "search-result-section" }, + section + ); + textEls.push(sectionEl); + } + const descEl = createElement("p", { + class: "search-result-text", + dangerouslySetInnerHTML: { + __html: text, + }, + }); + textEls.push(descEl); + + const textContainerEl = createElement( + "div", + { class: "search-result-text-container" }, + textEls + ); + + const containerEl = createElement( + "div", + { + class: "search-result-container", + }, + [titleContainerEl, textContainerEl] + ); + + const linkEl = createElement( + "a", + { + href: offsetURL(href), + class: "search-result-link", + }, + containerEl + ); + + const classes = ["search-result-doc", "search-item"]; + if (!section) { + classes.push("document-selectable"); + } + + return createElement( + "div", + { + class: classes.join(" "), + }, + linkEl + ); +} + +function createMoreCard( + createElement, + item, + state, + setActiveItemId, + setContext, + refresh +) { + const moreCardEl = createElement( + "div", + { + class: "search-result-more search-item", + onClick: (e) => { + // Handle expanding the sections by adding the expanded + // section to the list of expanded sections + toggleExpanded(item, state, setContext, setActiveItemId, refresh); + e.stopPropagation(); + }, + }, + item.title + ); + + return moreCardEl; +} + +function toggleExpanded(item, state, setContext, setActiveItemId, refresh) { + const expanded = state.context.expanded || []; + if (expanded.includes(item.target)) { + setContext({ + expanded: expanded.filter((target) => target !== item.target), + }); + } else { + setContext({ expanded: [...expanded, item.target] }); + } + + refresh(); + setActiveItemId(item.__autocomplete_id); +} + +function createSectionCard(createElement, section, text, href) { + const sectionEl = createSection(createElement, section, text, href); + return createElement( + "div", + { + class: "search-result-doc-section search-item", + }, + sectionEl + ); +} + +function createSection(createElement, title, text, href) { + const descEl = createElement("p", { + class: "search-result-text", + dangerouslySetInnerHTML: { + __html: text, + }, + }); + + const titleEl = createElement("p", { class: "search-result-section" }, title); + const linkEl = createElement( + "a", + { + href: offsetURL(href), + class: "search-result-link", + }, + [titleEl, descEl] + ); + return linkEl; +} + +function createErrorCard(createElement, title, text) { + const descEl = createElement("p", { + class: "search-error-text", + dangerouslySetInnerHTML: { + __html: text, + }, + }); + + const titleEl = createElement("p", { + class: "search-error-title", + dangerouslySetInnerHTML: { + __html: ` ${title}`, + }, + }); + const errorEl = createElement("div", { class: "search-error" }, [ + titleEl, + descEl, + ]); + return errorEl; +} + +function positionPanel(pos) { + const panelEl = window.document.querySelector( + "#quarto-search-results .aa-Panel" + ); + const inputEl = window.document.querySelector( + "#quarto-search .aa-Autocomplete" + ); + + if (panelEl && inputEl) { + panelEl.style.top = `${Math.round(panelEl.offsetTop)}px`; + if (pos === "start") { + panelEl.style.left = `${Math.round(inputEl.left)}px`; + } else { + panelEl.style.right = `${Math.round(inputEl.offsetRight)}px`; + } + } +} + +/* Highlighting */ +// highlighting functions +function highlightMatch(query, text) { + if (text) { + const start = text.toLowerCase().indexOf(query.toLowerCase()); + if (start !== -1) { + const startMark = ""; + const endMark = ""; + + const end = start + query.length; + text = + text.slice(0, start) + + startMark + + text.slice(start, end) + + endMark + + text.slice(end); + const startInfo = clipStart(text, start); + const endInfo = clipEnd( + text, + startInfo.position + startMark.length + endMark.length + ); + text = + startInfo.prefix + + text.slice(startInfo.position, endInfo.position) + + endInfo.suffix; + + return text; + } else { + return text; + } + } else { + return text; + } +} + +function clipStart(text, pos) { + const clipStart = pos - 50; + if (clipStart < 0) { + // This will just return the start of the string + return { + position: 0, + prefix: "", + }; + } else { + // We're clipping before the start of the string, walk backwards to the first space. + const spacePos = findSpace(text, pos, -1); + return { + position: spacePos.position, + prefix: "", + }; + } +} + +function clipEnd(text, pos) { + const clipEnd = pos + 200; + if (clipEnd > text.length) { + return { + position: text.length, + suffix: "", + }; + } else { + const spacePos = findSpace(text, clipEnd, 1); + return { + position: spacePos.position, + suffix: spacePos.clipped ? "…" : "", + }; + } +} + +function findSpace(text, start, step) { + let stepPos = start; + while (stepPos > -1 && stepPos < text.length) { + const char = text[stepPos]; + if (char === " " || char === "," || char === ":") { + return { + position: step === 1 ? stepPos : stepPos - step, + clipped: stepPos > 1 && stepPos < text.length, + }; + } + stepPos = stepPos + step; + } + + return { + position: stepPos - step, + clipped: false, + }; +} + +// removes highlighting as implemented by the mark tag +function clearHighlight(searchterm, el) { + const childNodes = el.childNodes; + for (let i = childNodes.length - 1; i >= 0; i--) { + const node = childNodes[i]; + if (node.nodeType === Node.ELEMENT_NODE) { + if ( + node.tagName === "MARK" && + node.innerText.toLowerCase() === searchterm.toLowerCase() + ) { + el.replaceChild(document.createTextNode(node.innerText), node); + } else { + clearHighlight(searchterm, node); + } + } + } +} + +function escapeRegExp(string) { + return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string +} + +// highlight matches +function highlight(term, el) { + const termRegex = new RegExp(term, "ig"); + const childNodes = el.childNodes; + + // walk back to front avoid mutating elements in front of us + for (let i = childNodes.length - 1; i >= 0; i--) { + const node = childNodes[i]; + + if (node.nodeType === Node.TEXT_NODE) { + // Search text nodes for text to highlight + const text = node.nodeValue; + + let startIndex = 0; + let matchIndex = text.search(termRegex); + if (matchIndex > -1) { + const markFragment = document.createDocumentFragment(); + while (matchIndex > -1) { + const prefix = text.slice(startIndex, matchIndex); + markFragment.appendChild(document.createTextNode(prefix)); + + const mark = document.createElement("mark"); + mark.appendChild( + document.createTextNode( + text.slice(matchIndex, matchIndex + term.length) + ) + ); + markFragment.appendChild(mark); + + startIndex = matchIndex + term.length; + matchIndex = text.slice(startIndex).search(new RegExp(term, "ig")); + if (matchIndex > -1) { + matchIndex = startIndex + matchIndex; + } + } + if (startIndex < text.length) { + markFragment.appendChild( + document.createTextNode(text.slice(startIndex, text.length)) + ); + } + + el.replaceChild(markFragment, node); + } + } else if (node.nodeType === Node.ELEMENT_NODE) { + // recurse through elements + highlight(term, node); + } + } +} + +/* Link Handling */ +// get the offset from this page for a given site root relative url +function offsetURL(url) { + var offset = getMeta("quarto:offset"); + return offset ? offset + url : url; +} + +// read a meta tag value +function getMeta(metaName) { + var metas = window.document.getElementsByTagName("meta"); + for (let i = 0; i < metas.length; i++) { + if (metas[i].getAttribute("name") === metaName) { + return metas[i].getAttribute("content"); + } + } + return ""; +} + +function algoliaSearch(query, limit, algoliaOptions) { + const { getAlgoliaResults } = window["@algolia/autocomplete-preset-algolia"]; + + const applicationId = algoliaOptions["application-id"]; + const searchOnlyApiKey = algoliaOptions["search-only-api-key"]; + const indexName = algoliaOptions["index-name"]; + const indexFields = algoliaOptions["index-fields"]; + const searchClient = window.algoliasearch(applicationId, searchOnlyApiKey); + const searchParams = algoliaOptions["params"]; + const searchAnalytics = !!algoliaOptions["analytics-events"]; + + return getAlgoliaResults({ + searchClient, + queries: [ + { + indexName: indexName, + query, + params: { + hitsPerPage: limit, + clickAnalytics: searchAnalytics, + ...searchParams, + }, + }, + ], + transformResponse: (response) => { + if (!indexFields) { + return response.hits.map((hit) => { + return hit.map((item) => { + return { + ...item, + text: highlightMatch(query, item.text), + }; + }); + }); + } else { + const remappedHits = response.hits.map((hit) => { + return hit.map((item) => { + const newItem = { ...item }; + ["href", "section", "title", "text", "crumbs"].forEach( + (keyName) => { + const mappedName = indexFields[keyName]; + if ( + mappedName && + item[mappedName] !== undefined && + mappedName !== keyName + ) { + newItem[keyName] = item[mappedName]; + delete newItem[mappedName]; + } + } + ); + newItem.text = highlightMatch(query, newItem.text); + return newItem; + }); + }); + return remappedHits; + } + }, + }); +} + +let subSearchTerm = undefined; +let subSearchFuse = undefined; +const kFuseMaxWait = 125; + +async function fuseSearch(query, fuse, fuseOptions) { + let index = fuse; + // Fuse.js using the Bitap algorithm for text matching which runs in + // O(nm) time (no matter the structure of the text). In our case this + // means that long search terms mixed with large index gets very slow + // + // This injects a subIndex that will be used once the terms get long enough + // Usually making this subindex is cheap since there will typically be + // a subset of results matching the existing query + if (subSearchFuse !== undefined && query.startsWith(subSearchTerm)) { + // Use the existing subSearchFuse + index = subSearchFuse; + } else if (subSearchFuse !== undefined) { + // The term changed, discard the existing fuse + subSearchFuse = undefined; + subSearchTerm = undefined; + } + + // Search using the active fuse + const then = performance.now(); + const resultsRaw = await index.search(query, fuseOptions); + const now = performance.now(); + + const results = resultsRaw.map((result) => { + const addParam = (url, name, value) => { + const anchorParts = url.split("#"); + const baseUrl = anchorParts[0]; + const sep = baseUrl.search("\\?") > 0 ? "&" : "?"; + anchorParts[0] = baseUrl + sep + name + "=" + value; + return anchorParts.join("#"); + }; + + return { + title: result.item.title, + section: result.item.section, + href: addParam(result.item.href, kQueryArg, query), + text: highlightMatch(query, result.item.text), + crumbs: result.item.crumbs, + }; + }); + + // If we don't have a subfuse and the query is long enough, go ahead + // and create a subfuse to use for subsequent queries + if ( + now - then > kFuseMaxWait && + subSearchFuse === undefined && + resultsRaw.length < fuseOptions.limit + ) { + subSearchTerm = query; + subSearchFuse = new window.Fuse([], kFuseIndexOptions); + resultsRaw.forEach((rr) => { + subSearchFuse.add(rr.item); + }); + } + return results; +} diff --git a/docs/theme.scss b/docs/theme.scss new file mode 100644 index 0000000..30df0d3 --- /dev/null +++ b/docs/theme.scss @@ -0,0 +1,31 @@ +/*-- scss:defaults --*/ +$primary: #39729E !default; +$link-color: #39729E !default; + +/*-- scss:rules --*/ + +.sidebar-title { + color: #39729E; +} + +div.sidebar-item-container .active { + font-weight: bold; +} + +.sidebar nav[role=doc-toc] ul>li>a.active, .sidebar nav[role=doc-toc] ul>li>ul>li>a.active{ + font-weight: bold; +} + +/* Code ------------------------------------------------ */ + +code { + color: #373a3c; +} + +code a:any-link { + text-decoration: underline; + text-decoration-color: #ccc; +} + + + From 5265481f741a23759566c4947ad5cf1da30bfbc7 Mon Sep 17 00:00:00 2001 From: Hirototensho Date: Fri, 23 Jan 2026 23:20:17 +0900 Subject: [PATCH 12/19] =?UTF-8?q?README.md=20=E3=82=92=E4=BF=AE=E6=AD=A3?= =?UTF-8?q?=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2dadced..c2e22a3 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # `Py4Stats` - `Py4Stats` は、主に実証研究で用いられる、探索的データ分析および回帰結果レポート用のユーティリティライブラリで、回帰分析を中心とする分析でよく使われるR言語の機能を、Python で実装しています。本ライブラリの主な機能は [**Get started**](./docs/docs/introduction.html) を、実装されている関数の一覧は [**Function reference**](./docs/docs/reference.html) を参照してください。 + `Py4Stats` は、主に実証研究で用いられる、探索的データ分析および回帰結果レポート用のユーティリティライブラリで、回帰分析を中心とする分析でよく使われるR言語の機能を、Python で実装しています。本ライブラリの主な機能は [**Get started**](./docs/introduction.html) を、実装されている関数の一覧は [**Function reference**](./docs/reference.html) を参照してください。 ## Installation @@ -78,6 +78,6 @@ compare_tab1 詳細は、[`py4stats.compare_ols()`](docs/docs/man/compare_ols.html) を参照してください。  *** -[Jump to **Get started**.](./docs/docs/introduction.html) -[Jump to **Function reference**.](./docs/docs/reference.html) +[Jump to **Get started**.](./docs/introduction.html) +[Jump to **Function reference**.](./docs/reference.html) From 5fbb8775df49d128f3c81c522125b0b0befb73fd Mon Sep 17 00:00:00 2001 From: Hirototensho Date: Fri, 23 Jan 2026 23:23:32 +0900 Subject: [PATCH 13/19] =?UTF-8?q?README.md=20=E3=82=92=E8=AA=BF=E6=95=B4?= =?UTF-8?q?=E4=B8=AD=E3=81=A7=E3=81=99=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index c2e22a3..3725c60 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,16 @@ # `Py4Stats` - `Py4Stats` は、主に実証研究で用いられる、探索的データ分析および回帰結果レポート用のユーティリティライブラリで、回帰分析を中心とする分析でよく使われるR言語の機能を、Python で実装しています。本ライブラリの主な機能は [**Get started**](./docs/introduction.html) を、実装されている関数の一覧は [**Function reference**](./docs/reference.html) を参照してください。 +`Py4Stats` は、主に実証研究で用いられる、探索的データ分析および回帰結果レポート用のユーティリティライブラリで、回帰分析を中心とする分析でよく使われるR言語の機能を、Python で実装しています。 + +## 📚 Documentation + +Explore the full documentation (Quarto Book) at: + +- [🏠 Full Docs](docs/index.html) +- [🚀 Get Started](https://hirototensho.github.io/Py4Stats/introduction.html) +- [📖 API Reference](https://hirototensho.github.io/Py4Stats/reference.html) + +本ライブラリの主な機能は [**Get started**](https://hirototensho.github.io/Py4Stats/introduction.html) を、実装されている関数の一覧は [**Function reference**](https://hirototensho.github.io/Py4Stats/reference.html) を参照してください。 ## Installation @@ -78,6 +88,6 @@ compare_tab1 詳細は、[`py4stats.compare_ols()`](docs/docs/man/compare_ols.html) を参照してください。  *** -[Jump to **Get started**.](./docs/introduction.html) -[Jump to **Function reference**.](./docs/reference.html) +[Jump to **Get started**.](https://hirototensho.github.io/Py4Stats/introduction.html) +[Jump to **Function reference**.](https://hirototensho.github.io/Py4Stats/reference.html) From d65291a9ae91b254e8b4f793a2ee3fdf3f0b1bbc Mon Sep 17 00:00:00 2001 From: Hirototensho Date: Fri, 23 Jan 2026 23:25:11 +0900 Subject: [PATCH 14/19] =?UTF-8?q?README.md=20=E3=82=92=E8=AA=BF=E6=95=B4?= =?UTF-8?q?=E4=B8=AD=E3=81=A7=E3=81=99=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 3725c60..f3be8e9 100644 --- a/README.md +++ b/README.md @@ -6,12 +6,10 @@ Explore the full documentation (Quarto Book) at: -- [🏠 Full Docs](docs/index.html) +- [🏠 Full Docs](https://hirototensho.github.io/Py4Stats/) - [🚀 Get Started](https://hirototensho.github.io/Py4Stats/introduction.html) - [📖 API Reference](https://hirototensho.github.io/Py4Stats/reference.html) -本ライブラリの主な機能は [**Get started**](https://hirototensho.github.io/Py4Stats/introduction.html) を、実装されている関数の一覧は [**Function reference**](https://hirototensho.github.io/Py4Stats/reference.html) を参照してください。 - ## Installation [`uv`](https://github.com/astral-sh/uv) をお使いの場合、次のコードで `py4stats` をインストールできます。 @@ -88,6 +86,7 @@ compare_tab1 詳細は、[`py4stats.compare_ols()`](docs/docs/man/compare_ols.html) を参照してください。  *** +[Jump to **Full Docs**.](https://hirototensho.github.io/Py4Stats/) [Jump to **Get started**.](https://hirototensho.github.io/Py4Stats/introduction.html) [Jump to **Function reference**.](https://hirototensho.github.io/Py4Stats/reference.html) From 703e0a42a8ee792511c8a0603aab39009bb60fe7 Mon Sep 17 00:00:00 2001 From: Hirototensho Date: Fri, 23 Jan 2026 23:28:10 +0900 Subject: [PATCH 15/19] =?UTF-8?q?Quarto=20Book=20=E3=81=AB=E3=83=AA?= =?UTF-8?q?=E3=83=9D=E3=82=B8=E3=83=88=E3=83=AA=E3=81=B8=E3=81=AE=E3=83=AA?= =?UTF-8?q?=E3=83=B3=E3=82=AF=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97=E3=81=BE?= =?UTF-8?q?=E3=81=97=E3=81=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- _quarto.yml | 4 ++-- docs/articles/eda_tools_development_status.html | 7 +++++-- docs/articles/narwhals_in_py4stats.html | 7 +++++-- ...4\343\201\246\343\201\256\350\200\203\345\257\237.html" | 7 +++++-- docs/index.html | 7 +++++-- docs/introduction.html | 7 +++++-- docs/man/Blinder_Oaxaca.html | 7 +++++-- docs/man/Heckit_from_formula.html | 7 +++++-- docs/man/Pareto_plot.html | 7 +++++-- docs/man/arg_match.html | 7 +++++-- docs/man/assert_dtype.html | 7 +++++-- docs/man/coefplot.html | 7 +++++-- docs/man/compare_df_cols.html | 7 +++++-- docs/man/compare_group_stats.html | 7 +++++-- docs/man/compare_mfx.html | 7 +++++-- docs/man/compare_ols.html | 7 +++++-- docs/man/diagnose.html | 7 +++++-- docs/man/diagnose_category.html | 7 +++++-- docs/man/filtering_out.html | 7 +++++-- docs/man/freq_table.html | 7 +++++-- docs/man/glance.html | 7 +++++-- docs/man/heckitmfx_compute.html | 7 +++++-- docs/man/is_dtype.html | 7 +++++-- docs/man/is_dummy.html | 7 +++++-- docs/man/miscellaneous.html | 7 +++++-- docs/man/oxford_comma.html | 7 +++++-- docs/man/plot_category.html | 7 +++++-- docs/man/plot_miss_var.html | 7 +++++-- docs/man/point_range.html | 7 +++++-- docs/man/predicate_str.html | 7 +++++-- docs/man/relocate.html | 7 +++++-- docs/man/remove_empty_constant.html | 7 +++++-- docs/man/scale_wmean.html | 7 +++++-- docs/man/set_miss.html | 7 +++++-- docs/man/style_pvalue.html | 7 +++++-- docs/man/tabyl.html | 7 +++++-- docs/man/tidy.html | 7 +++++-- docs/man/tidy_heckit.html | 7 +++++-- docs/man/tidy_test.html | 7 +++++-- docs/man/varidate.html | 7 +++++-- docs/reference.html | 7 +++++-- 42 files changed, 203 insertions(+), 83 deletions(-) diff --git a/README.md b/README.md index f3be8e9..3cb9fa2 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # `Py4Stats` -`Py4Stats` は、主に実証研究で用いられる、探索的データ分析および回帰結果レポート用のユーティリティライブラリで、回帰分析を中心とする分析でよく使われるR言語の機能を、Python で実装しています。 +`Py4Stats` は、主に実証研究で用いられる、探索的データ分析および回帰結果レポート用のユーティリティライブラリで、回帰分析を中心とする分析でよく使われるR言語の機能を Python で実装しています。 ## 📚 Documentation diff --git a/_quarto.yml b/_quarto.yml index ac5ed0b..8d681c3 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -54,8 +54,8 @@ book: - articles/narwhals_in_py4stats.qmd - articles/eda_tools_development_status.qmd - articles/narwhalsについての考察.qmd - # repo-url: https://github.com/Hirototensho/Portfolio - # repo-actions: [source] + repo-url: https://github.com/Hirototensho/Py4Stats.git + repo-actions: [source] format: html: theme: cosmo diff --git a/docs/articles/eda_tools_development_status.html b/docs/articles/eda_tools_development_status.html index 0f996c7..b977d7b 100644 --- a/docs/articles/eda_tools_development_status.html +++ b/docs/articles/eda_tools_development_status.html @@ -100,6 +100,9 @@
@@ -416,7 +419,7 @@

Table of contents

- +
@@ -1190,4 +1193,4 @@

\ No newline at end of file diff --git a/docs/articles/narwhals_in_py4stats.html b/docs/articles/narwhals_in_py4stats.html index d1b855b..becb40b 100644 --- a/docs/articles/narwhals_in_py4stats.html +++ b/docs/articles/narwhals_in_py4stats.html @@ -135,6 +135,9 @@
@@ -972,4 +975,4 @@

\ No newline at end of file + \ No newline at end of file diff --git "a/docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.html" "b/docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.html" index 5f797bc..ec15816 100644 --- "a/docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.html" +++ "b/docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.html" @@ -134,6 +134,9 @@
@@ -460,7 +463,7 @@

Table of contents

  • 40.2.2 バックエンドの書き換え (非推奨)
  • - +
    @@ -1025,4 +1028,4 @@

    \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index de5db56..baeb014 100644 --- a/docs/index.html +++ b/docs/index.html @@ -135,6 +135,9 @@
    @@ -455,7 +458,7 @@

    Table of contents

  • 1.2 使用例
  • - +
    @@ -1055,4 +1058,4 @@

    \ No newline at end of file diff --git a/docs/introduction.html b/docs/introduction.html index 42374a9..bd4ba20 100644 --- a/docs/introduction.html +++ b/docs/introduction.html @@ -135,6 +135,9 @@
    @@ -452,7 +455,7 @@

    Table of contents

  • 2.1 py4stats.eda_tools
  • 2.2 py4stats.regression_tools
  • - +
    @@ -1355,4 +1358,4 @@

    \ No newline at end of file diff --git a/docs/man/Blinder_Oaxaca.html b/docs/man/Blinder_Oaxaca.html index f1a96e0..57c3e67 100644 --- a/docs/man/Blinder_Oaxaca.html +++ b/docs/man/Blinder_Oaxaca.html @@ -164,6 +164,9 @@
    @@ -482,7 +485,7 @@

    Table of contents

  • 28.2 引数 Argument
  • 28.3 参考文献
  • - +
    @@ -1138,4 +1141,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/Heckit_from_formula.html b/docs/man/Heckit_from_formula.html index dd3b70e..661b1de 100644 --- a/docs/man/Heckit_from_formula.html +++ b/docs/man/Heckit_from_formula.html @@ -135,6 +135,9 @@
    @@ -455,7 +458,7 @@

    Table of contents

  • 30.4 使用例 Examples
  • 30.5 参考文献
  • - +
    @@ -998,4 +1001,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/Pareto_plot.html b/docs/man/Pareto_plot.html index b5f99e5..2fccaff 100644 --- a/docs/man/Pareto_plot.html +++ b/docs/man/Pareto_plot.html @@ -135,6 +135,9 @@
    @@ -452,7 +455,7 @@

    Table of contents

  • 7.1 概要
  • 7.2 使用例
  • - +
    @@ -967,4 +970,4 @@

    \ No newline at end of file diff --git a/docs/man/arg_match.html b/docs/man/arg_match.html index d805320..b15b268 100644 --- a/docs/man/arg_match.html +++ b/docs/man/arg_match.html @@ -135,6 +135,9 @@
    @@ -454,7 +457,7 @@

    Table of contents

  • 32.3 返り値 Value
  • 32.4 使用例 Examples
  • - +
    @@ -982,4 +985,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/assert_dtype.html b/docs/man/assert_dtype.html index d0e161e..735eb75 100644 --- a/docs/man/assert_dtype.html +++ b/docs/man/assert_dtype.html @@ -135,6 +135,9 @@
    @@ -455,7 +458,7 @@

    Table of contents

  • 33.4 使用例 Examples
  • 33.5 参照
  • - +
    @@ -1057,4 +1060,4 @@

    \ No newline at end of file diff --git a/docs/man/coefplot.html b/docs/man/coefplot.html index 3fa8bee..2c7e343 100644 --- a/docs/man/coefplot.html +++ b/docs/man/coefplot.html @@ -135,6 +135,9 @@
    @@ -453,7 +456,7 @@

    Table of contents

  • 24.2 引数 Argument
  • 24.3 使用例
  • - +
    @@ -1008,4 +1011,4 @@

    \ No newline at end of file diff --git a/docs/man/compare_df_cols.html b/docs/man/compare_df_cols.html index a72965b..b05e87d 100644 --- a/docs/man/compare_df_cols.html +++ b/docs/man/compare_df_cols.html @@ -135,6 +135,9 @@
    @@ -453,7 +456,7 @@

    Table of contents

  • 14.2 引数 Argument
  • 14.3 使用例 Examples
  • - +
    @@ -974,4 +977,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/compare_group_stats.html b/docs/man/compare_group_stats.html index 06690ba..1e2da51 100644 --- a/docs/man/compare_group_stats.html +++ b/docs/man/compare_group_stats.html @@ -164,6 +164,9 @@
    @@ -483,7 +486,7 @@

    Table of contents

  • 15.3 返り値 Value
  • 15.4 使用例 Examples
  • - +
    @@ -1060,4 +1063,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/compare_mfx.html b/docs/man/compare_mfx.html index 90fa9a3..dac8c77 100644 --- a/docs/man/compare_mfx.html +++ b/docs/man/compare_mfx.html @@ -135,6 +135,9 @@
    @@ -454,7 +457,7 @@

    Table of contents

  • 23.3 使用例
  • 23.4 補足
  • - +
    @@ -1090,4 +1093,4 @@

    \ No newline at end of file diff --git a/docs/man/compare_ols.html b/docs/man/compare_ols.html index 08ae41b..81b8831 100644 --- a/docs/man/compare_ols.html +++ b/docs/man/compare_ols.html @@ -135,6 +135,9 @@
    @@ -455,7 +458,7 @@

    Table of contents

  • 22.4 補足
  • 22.5 参照 see also
  • - +
    @@ -1410,4 +1413,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/diagnose.html b/docs/man/diagnose.html index ed544cd..be18a8d 100644 --- a/docs/man/diagnose.html +++ b/docs/man/diagnose.html @@ -135,6 +135,9 @@
    @@ -454,7 +457,7 @@

    Table of contents

  • 4.3 返り値
  • 4.4 使用例 Examples
  • - +
    @@ -940,4 +943,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/diagnose_category.html b/docs/man/diagnose_category.html index dcb2b92..68ca1c3 100644 --- a/docs/man/diagnose_category.html +++ b/docs/man/diagnose_category.html @@ -164,6 +164,9 @@
    @@ -484,7 +487,7 @@

    Table of contents

  • 9.4 使用例 Examples
  • 9.5 Note
  • - +
    @@ -985,4 +988,4 @@

    \ No newline at end of file diff --git a/docs/man/filtering_out.html b/docs/man/filtering_out.html index 09bb909..86f6341 100644 --- a/docs/man/filtering_out.html +++ b/docs/man/filtering_out.html @@ -135,6 +135,9 @@
    @@ -454,7 +457,7 @@

    Table of contents

  • 12.3 使用例
  • 12.4 Notes
  • - +
    @@ -985,4 +988,4 @@

    \ No newline at end of file diff --git a/docs/man/freq_table.html b/docs/man/freq_table.html index a4f2974..091cac3 100644 --- a/docs/man/freq_table.html +++ b/docs/man/freq_table.html @@ -135,6 +135,9 @@
    @@ -454,7 +457,7 @@

    Table of contents

  • 6.3 返り値 Value
  • 6.4 使用例
  • - +
    @@ -981,4 +984,4 @@

    \ No newline at end of file diff --git a/docs/man/glance.html b/docs/man/glance.html index 3cf37a5..6d35f7a 100644 --- a/docs/man/glance.html +++ b/docs/man/glance.html @@ -135,6 +135,9 @@
    @@ -455,7 +458,7 @@

    Table of contents

  • 27.4 使用例 Examples
  • 27.5 注意点
  • - +
    @@ -946,4 +949,4 @@

    \ No newline at end of file diff --git a/docs/man/heckitmfx_compute.html b/docs/man/heckitmfx_compute.html index fed1c21..6f86732 100644 --- a/docs/man/heckitmfx_compute.html +++ b/docs/man/heckitmfx_compute.html @@ -164,6 +164,9 @@
    @@ -485,7 +488,7 @@

    Table of contents

  • 31.5 注意
  • 31.6 参考文献
  • - +
    @@ -1026,4 +1029,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/is_dtype.html b/docs/man/is_dtype.html index cd7c01a..c2588e9 100644 --- a/docs/man/is_dtype.html +++ b/docs/man/is_dtype.html @@ -135,6 +135,9 @@
    @@ -455,7 +458,7 @@

    Table of contents

  • 34.4 返り値 Value
  • 34.5 使用例 Examples
  • - +
    @@ -959,4 +962,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/is_dummy.html b/docs/man/is_dummy.html index dc84a29..0082316 100644 --- a/docs/man/is_dummy.html +++ b/docs/man/is_dummy.html @@ -135,6 +135,9 @@
    @@ -454,7 +457,7 @@

    Table of contents

  • 20.3 返り値 Value
  • 20.4 使用例 Examples
  • - +
    @@ -969,4 +972,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/miscellaneous.html b/docs/man/miscellaneous.html index 7364330..07b903d 100644 --- a/docs/man/miscellaneous.html +++ b/docs/man/miscellaneous.html @@ -135,6 +135,9 @@
    @@ -454,7 +457,7 @@

    Table of contents

  • 35.3 返り値 Value
  • 35.4 使用例 Examples
  • - +
    @@ -954,4 +957,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/oxford_comma.html b/docs/man/oxford_comma.html index e53940a..87c212b 100644 --- a/docs/man/oxford_comma.html +++ b/docs/man/oxford_comma.html @@ -135,6 +135,9 @@
    @@ -453,7 +456,7 @@

    Table of contents

  • 37.2 引数
  • 37.3 使用例
  • - +
    @@ -938,4 +941,4 @@

    \ No newline at end of file diff --git a/docs/man/plot_category.html b/docs/man/plot_category.html index 962a17b..7d76d5e 100644 --- a/docs/man/plot_category.html +++ b/docs/man/plot_category.html @@ -135,6 +135,9 @@
    @@ -454,7 +457,7 @@

    Table of contents

  • 8.3 使用例 Example
  • 8.4 注意 Notes
  • - +
    @@ -989,4 +992,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/plot_miss_var.html b/docs/man/plot_miss_var.html index 22948f8..d71c741 100644 --- a/docs/man/plot_miss_var.html +++ b/docs/man/plot_miss_var.html @@ -135,6 +135,9 @@
    @@ -453,7 +456,7 @@

    Table of contents

  • 16.2 引数 Argument
  • 16.3 使用例 Example
  • - +
    @@ -954,4 +957,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/point_range.html b/docs/man/point_range.html index e6c062a..c8dbcef 100644 --- a/docs/man/point_range.html +++ b/docs/man/point_range.html @@ -135,6 +135,9 @@
    @@ -453,7 +456,7 @@

    Table of contents

  • 10.2 引数 Argument
  • 10.3 使用例 Examples
  • - +
    @@ -969,4 +972,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/predicate_str.html b/docs/man/predicate_str.html index 5fb457f..a60dbd3 100644 --- a/docs/man/predicate_str.html +++ b/docs/man/predicate_str.html @@ -135,6 +135,9 @@
    @@ -453,7 +456,7 @@

    Table of contents

  • 19.2 引数 Argument
  • 19.3 使用例
  • - +
    @@ -1000,4 +1003,4 @@

    \ No newline at end of file diff --git a/docs/man/relocate.html b/docs/man/relocate.html index 28a0d6f..70d90c4 100644 --- a/docs/man/relocate.html +++ b/docs/man/relocate.html @@ -135,6 +135,9 @@
    @@ -456,7 +459,7 @@

    Table of contents

  • 13.3 使用例 Example
  • - +
    @@ -991,4 +994,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/remove_empty_constant.html b/docs/man/remove_empty_constant.html index 4f92720..f872068 100644 --- a/docs/man/remove_empty_constant.html +++ b/docs/man/remove_empty_constant.html @@ -135,6 +135,9 @@
    @@ -453,7 +456,7 @@

    Table of contents

  • 11.2 引数 Argument
  • 11.3 使用例 Example
  • - +
    @@ -1014,4 +1017,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/scale_wmean.html b/docs/man/scale_wmean.html index c526eac..85888cd 100644 --- a/docs/man/scale_wmean.html +++ b/docs/man/scale_wmean.html @@ -164,6 +164,9 @@
    @@ -483,7 +486,7 @@

    Table of contents

  • 18.3 返り値 Value
  • 18.4 使用例 Example
  • - +
    @@ -1010,4 +1013,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/set_miss.html b/docs/man/set_miss.html index d676c74..989c85b 100644 --- a/docs/man/set_miss.html +++ b/docs/man/set_miss.html @@ -135,6 +135,9 @@
    @@ -453,7 +456,7 @@

    Table of contents

  • 17.2 引数 Argument
  • 17.3 使用例 Example
  • - +
    @@ -973,4 +976,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/style_pvalue.html b/docs/man/style_pvalue.html index ddb8e5e..a667d07 100644 --- a/docs/man/style_pvalue.html +++ b/docs/man/style_pvalue.html @@ -135,6 +135,9 @@
    @@ -454,7 +457,7 @@

    Table of contents

  • 36.3 返り値 Value
  • 36.4 使用例 Examples
  • - +
    @@ -961,4 +964,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/tabyl.html b/docs/man/tabyl.html index ab722e5..e1c22e4 100644 --- a/docs/man/tabyl.html +++ b/docs/man/tabyl.html @@ -135,6 +135,9 @@
    @@ -453,7 +456,7 @@

    Table of contents

  • 5.2 引数 Argument
  • 5.3 使用例
  • - +
    @@ -968,4 +971,4 @@

    \ No newline at end of file diff --git a/docs/man/tidy.html b/docs/man/tidy.html index 3e27975..2e797af 100644 --- a/docs/man/tidy.html +++ b/docs/man/tidy.html @@ -164,6 +164,9 @@
    @@ -484,7 +487,7 @@

    Table of contents

  • 25.4 使用例 Examples
  • 25.5 注意点
  • - +
    @@ -1023,4 +1026,4 @@

    \ No newline at end of file diff --git a/docs/man/tidy_heckit.html b/docs/man/tidy_heckit.html index 315730e..a802d92 100644 --- a/docs/man/tidy_heckit.html +++ b/docs/man/tidy_heckit.html @@ -164,6 +164,9 @@
    @@ -483,7 +486,7 @@

    Table of contents

  • 29.3 返り値 Value
  • 29.4 使用例 Examples
  • - +
    @@ -1015,4 +1018,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/tidy_test.html b/docs/man/tidy_test.html index 4b93641..5d78bef 100644 --- a/docs/man/tidy_test.html +++ b/docs/man/tidy_test.html @@ -135,6 +135,9 @@
    @@ -454,7 +457,7 @@

    Table of contents

  • 26.3 返り値 Value
  • 26.4 使用例 Examples
  • - +
    @@ -955,4 +958,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/varidate.html b/docs/man/varidate.html index e037016..7fe9e96 100644 --- a/docs/man/varidate.html +++ b/docs/man/varidate.html @@ -135,6 +135,9 @@
    @@ -460,7 +463,7 @@

    Table of contents

  • 21.5 Notes
  • 21.6 参考文献
  • - +
    @@ -1037,4 +1040,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/reference.html b/docs/reference.html index 71b8d47..788824b 100644 --- a/docs/reference.html +++ b/docs/reference.html @@ -100,6 +100,9 @@
    @@ -430,7 +433,7 @@

    Table of contents

  • 3.2.6 並列文の作成
  • - +
    @@ -993,4 +996,4 @@

    \ No newline at end of file + \ No newline at end of file From 1276afe2d2c11e5ec34b1f071987b618b88df8b3 Mon Sep 17 00:00:00 2001 From: Hirototensho Date: Fri, 23 Jan 2026 23:58:52 +0900 Subject: [PATCH 16/19] =?UTF-8?q?=E3=83=AA=E3=83=9D=E3=82=B8=E3=83=88?= =?UTF-8?q?=E3=83=AA=E3=81=B8=E3=81=AE=E3=83=AA=E3=83=B3=E3=82=AF=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E3=81=97=E3=81=BE=E3=81=97=E3=81=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _quarto.yml | 2 +- docs/articles/eda_tools_development_status.html | 6 +++--- docs/articles/narwhals_in_py4stats.html | 6 +++--- ...04\343\201\246\343\201\256\350\200\203\345\257\237.html" | 6 +++--- docs/index.html | 6 +++--- docs/introduction.html | 6 +++--- docs/man/Blinder_Oaxaca.html | 6 +++--- docs/man/Heckit_from_formula.html | 6 +++--- docs/man/Pareto_plot.html | 6 +++--- docs/man/arg_match.html | 6 +++--- docs/man/assert_dtype.html | 6 +++--- docs/man/coefplot.html | 6 +++--- docs/man/compare_df_cols.html | 6 +++--- docs/man/compare_group_stats.html | 6 +++--- docs/man/compare_mfx.html | 6 +++--- docs/man/compare_ols.html | 6 +++--- docs/man/diagnose.html | 6 +++--- docs/man/diagnose_category.html | 6 +++--- docs/man/filtering_out.html | 6 +++--- docs/man/freq_table.html | 6 +++--- docs/man/glance.html | 6 +++--- docs/man/heckitmfx_compute.html | 6 +++--- docs/man/is_dtype.html | 6 +++--- docs/man/is_dummy.html | 6 +++--- docs/man/miscellaneous.html | 6 +++--- docs/man/oxford_comma.html | 6 +++--- docs/man/plot_category.html | 6 +++--- docs/man/plot_miss_var.html | 6 +++--- docs/man/point_range.html | 6 +++--- docs/man/predicate_str.html | 6 +++--- docs/man/relocate.html | 6 +++--- docs/man/remove_empty_constant.html | 6 +++--- docs/man/scale_wmean.html | 6 +++--- docs/man/set_miss.html | 6 +++--- docs/man/style_pvalue.html | 6 +++--- docs/man/tabyl.html | 6 +++--- docs/man/tidy.html | 6 +++--- docs/man/tidy_heckit.html | 6 +++--- docs/man/tidy_test.html | 6 +++--- docs/man/varidate.html | 6 +++--- docs/reference.html | 6 +++--- 41 files changed, 121 insertions(+), 121 deletions(-) diff --git a/_quarto.yml b/_quarto.yml index 8d681c3..4060be7 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -54,7 +54,7 @@ book: - articles/narwhals_in_py4stats.qmd - articles/eda_tools_development_status.qmd - articles/narwhalsについての考察.qmd - repo-url: https://github.com/Hirototensho/Py4Stats.git + repo-url: https://github.com/Hirototensho/Py4Stats repo-actions: [source] format: html: diff --git a/docs/articles/eda_tools_development_status.html b/docs/articles/eda_tools_development_status.html index b977d7b..bb2086b 100644 --- a/docs/articles/eda_tools_development_status.html +++ b/docs/articles/eda_tools_development_status.html @@ -101,7 +101,7 @@ @@ -419,7 +419,7 @@

    Table of contents

    - +
    @@ -1193,4 +1193,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/articles/narwhals_in_py4stats.html b/docs/articles/narwhals_in_py4stats.html index becb40b..2ee1a98 100644 --- a/docs/articles/narwhals_in_py4stats.html +++ b/docs/articles/narwhals_in_py4stats.html @@ -136,7 +136,7 @@ @@ -459,7 +459,7 @@

    Table of contents

  • 38.5  pandas_flavor を用いた DataFrame メソッド登録について
  • 38.6 今後について
  • - +
    @@ -975,4 +975,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git "a/docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.html" "b/docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.html" index ec15816..cb8a8b5 100644 --- "a/docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.html" +++ "b/docs/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.html" @@ -135,7 +135,7 @@ @@ -463,7 +463,7 @@

    Table of contents

  • 40.2.2 バックエンドの書き換え (非推奨)
  • - +
    @@ -1028,4 +1028,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index baeb014..11ee878 100644 --- a/docs/index.html +++ b/docs/index.html @@ -136,7 +136,7 @@ @@ -458,7 +458,7 @@

    Table of contents

  • 1.2 使用例
  • - +
    @@ -1058,4 +1058,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/introduction.html b/docs/introduction.html index bd4ba20..f22c51c 100644 --- a/docs/introduction.html +++ b/docs/introduction.html @@ -136,7 +136,7 @@ @@ -455,7 +455,7 @@

    Table of contents

  • 2.1 py4stats.eda_tools
  • 2.2 py4stats.regression_tools
  • - +
    @@ -1358,4 +1358,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/Blinder_Oaxaca.html b/docs/man/Blinder_Oaxaca.html index 57c3e67..db7a8d8 100644 --- a/docs/man/Blinder_Oaxaca.html +++ b/docs/man/Blinder_Oaxaca.html @@ -165,7 +165,7 @@ @@ -485,7 +485,7 @@

    Table of contents

  • 28.2 引数 Argument
  • 28.3 参考文献
  • - +
    @@ -1141,4 +1141,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/Heckit_from_formula.html b/docs/man/Heckit_from_formula.html index 661b1de..26766a9 100644 --- a/docs/man/Heckit_from_formula.html +++ b/docs/man/Heckit_from_formula.html @@ -136,7 +136,7 @@ @@ -458,7 +458,7 @@

    Table of contents

  • 30.4 使用例 Examples
  • 30.5 参考文献
  • - +
    @@ -1001,4 +1001,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/Pareto_plot.html b/docs/man/Pareto_plot.html index 2fccaff..b85afa5 100644 --- a/docs/man/Pareto_plot.html +++ b/docs/man/Pareto_plot.html @@ -136,7 +136,7 @@ @@ -455,7 +455,7 @@

    Table of contents

  • 7.1 概要
  • 7.2 使用例
  • - +
    @@ -970,4 +970,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/arg_match.html b/docs/man/arg_match.html index b15b268..9b6c58a 100644 --- a/docs/man/arg_match.html +++ b/docs/man/arg_match.html @@ -136,7 +136,7 @@ @@ -457,7 +457,7 @@

    Table of contents

  • 32.3 返り値 Value
  • 32.4 使用例 Examples
  • - +
    @@ -985,4 +985,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/assert_dtype.html b/docs/man/assert_dtype.html index 735eb75..1af69c7 100644 --- a/docs/man/assert_dtype.html +++ b/docs/man/assert_dtype.html @@ -136,7 +136,7 @@ @@ -458,7 +458,7 @@

    Table of contents

  • 33.4 使用例 Examples
  • 33.5 参照
  • - +
    @@ -1060,4 +1060,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/coefplot.html b/docs/man/coefplot.html index 2c7e343..9032147 100644 --- a/docs/man/coefplot.html +++ b/docs/man/coefplot.html @@ -136,7 +136,7 @@ @@ -456,7 +456,7 @@

    Table of contents

  • 24.2 引数 Argument
  • 24.3 使用例
  • - +
    @@ -1011,4 +1011,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/compare_df_cols.html b/docs/man/compare_df_cols.html index b05e87d..6dabb67 100644 --- a/docs/man/compare_df_cols.html +++ b/docs/man/compare_df_cols.html @@ -136,7 +136,7 @@ @@ -456,7 +456,7 @@

    Table of contents

  • 14.2 引数 Argument
  • 14.3 使用例 Examples
  • - +
    @@ -977,4 +977,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/compare_group_stats.html b/docs/man/compare_group_stats.html index 1e2da51..023bcc5 100644 --- a/docs/man/compare_group_stats.html +++ b/docs/man/compare_group_stats.html @@ -165,7 +165,7 @@ @@ -486,7 +486,7 @@

    Table of contents

  • 15.3 返り値 Value
  • 15.4 使用例 Examples
  • - +
    @@ -1063,4 +1063,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/compare_mfx.html b/docs/man/compare_mfx.html index dac8c77..ed471bc 100644 --- a/docs/man/compare_mfx.html +++ b/docs/man/compare_mfx.html @@ -136,7 +136,7 @@ @@ -457,7 +457,7 @@

    Table of contents

  • 23.3 使用例
  • 23.4 補足
  • - +
    @@ -1093,4 +1093,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/compare_ols.html b/docs/man/compare_ols.html index 81b8831..289a914 100644 --- a/docs/man/compare_ols.html +++ b/docs/man/compare_ols.html @@ -136,7 +136,7 @@ @@ -458,7 +458,7 @@

    Table of contents

  • 22.4 補足
  • 22.5 参照 see also
  • - +
    @@ -1413,4 +1413,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/diagnose.html b/docs/man/diagnose.html index be18a8d..9f8d501 100644 --- a/docs/man/diagnose.html +++ b/docs/man/diagnose.html @@ -136,7 +136,7 @@ @@ -457,7 +457,7 @@

    Table of contents

  • 4.3 返り値
  • 4.4 使用例 Examples
  • - +
    @@ -943,4 +943,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/diagnose_category.html b/docs/man/diagnose_category.html index 68ca1c3..5538780 100644 --- a/docs/man/diagnose_category.html +++ b/docs/man/diagnose_category.html @@ -165,7 +165,7 @@ @@ -487,7 +487,7 @@

    Table of contents

  • 9.4 使用例 Examples
  • 9.5 Note
  • - +
    @@ -988,4 +988,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/filtering_out.html b/docs/man/filtering_out.html index 86f6341..36e6fa8 100644 --- a/docs/man/filtering_out.html +++ b/docs/man/filtering_out.html @@ -136,7 +136,7 @@ @@ -457,7 +457,7 @@

    Table of contents

  • 12.3 使用例
  • 12.4 Notes
  • - +
    @@ -988,4 +988,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/freq_table.html b/docs/man/freq_table.html index 091cac3..087fdc4 100644 --- a/docs/man/freq_table.html +++ b/docs/man/freq_table.html @@ -136,7 +136,7 @@ @@ -457,7 +457,7 @@

    Table of contents

  • 6.3 返り値 Value
  • 6.4 使用例
  • - +
    @@ -984,4 +984,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/glance.html b/docs/man/glance.html index 6d35f7a..89ed4d2 100644 --- a/docs/man/glance.html +++ b/docs/man/glance.html @@ -136,7 +136,7 @@ @@ -458,7 +458,7 @@

    Table of contents

  • 27.4 使用例 Examples
  • 27.5 注意点
  • - +
    @@ -949,4 +949,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/heckitmfx_compute.html b/docs/man/heckitmfx_compute.html index 6f86732..b570242 100644 --- a/docs/man/heckitmfx_compute.html +++ b/docs/man/heckitmfx_compute.html @@ -165,7 +165,7 @@ @@ -488,7 +488,7 @@

    Table of contents

  • 31.5 注意
  • 31.6 参考文献
  • - +
    @@ -1029,4 +1029,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/is_dtype.html b/docs/man/is_dtype.html index c2588e9..f505749 100644 --- a/docs/man/is_dtype.html +++ b/docs/man/is_dtype.html @@ -136,7 +136,7 @@ @@ -458,7 +458,7 @@

    Table of contents

  • 34.4 返り値 Value
  • 34.5 使用例 Examples
  • - +
    @@ -962,4 +962,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/is_dummy.html b/docs/man/is_dummy.html index 0082316..048e65b 100644 --- a/docs/man/is_dummy.html +++ b/docs/man/is_dummy.html @@ -136,7 +136,7 @@ @@ -457,7 +457,7 @@

    Table of contents

  • 20.3 返り値 Value
  • 20.4 使用例 Examples
  • - +
    @@ -972,4 +972,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/miscellaneous.html b/docs/man/miscellaneous.html index 07b903d..081d9f3 100644 --- a/docs/man/miscellaneous.html +++ b/docs/man/miscellaneous.html @@ -136,7 +136,7 @@ @@ -457,7 +457,7 @@

    Table of contents

  • 35.3 返り値 Value
  • 35.4 使用例 Examples
  • - +
    @@ -957,4 +957,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/oxford_comma.html b/docs/man/oxford_comma.html index 87c212b..a7fe966 100644 --- a/docs/man/oxford_comma.html +++ b/docs/man/oxford_comma.html @@ -136,7 +136,7 @@ @@ -456,7 +456,7 @@

    Table of contents

  • 37.2 引数
  • 37.3 使用例
  • - +
    @@ -941,4 +941,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/plot_category.html b/docs/man/plot_category.html index 7d76d5e..53a4496 100644 --- a/docs/man/plot_category.html +++ b/docs/man/plot_category.html @@ -136,7 +136,7 @@ @@ -457,7 +457,7 @@

    Table of contents

  • 8.3 使用例 Example
  • 8.4 注意 Notes
  • - +
    @@ -992,4 +992,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/plot_miss_var.html b/docs/man/plot_miss_var.html index d71c741..ca680ba 100644 --- a/docs/man/plot_miss_var.html +++ b/docs/man/plot_miss_var.html @@ -136,7 +136,7 @@ @@ -456,7 +456,7 @@

    Table of contents

  • 16.2 引数 Argument
  • 16.3 使用例 Example
  • - +
    @@ -957,4 +957,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/point_range.html b/docs/man/point_range.html index c8dbcef..7ed848a 100644 --- a/docs/man/point_range.html +++ b/docs/man/point_range.html @@ -136,7 +136,7 @@ @@ -456,7 +456,7 @@

    Table of contents

  • 10.2 引数 Argument
  • 10.3 使用例 Examples
  • - +
    @@ -972,4 +972,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/predicate_str.html b/docs/man/predicate_str.html index a60dbd3..5a69879 100644 --- a/docs/man/predicate_str.html +++ b/docs/man/predicate_str.html @@ -136,7 +136,7 @@ @@ -456,7 +456,7 @@

    Table of contents

  • 19.2 引数 Argument
  • 19.3 使用例
  • - +
    @@ -1003,4 +1003,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/relocate.html b/docs/man/relocate.html index 70d90c4..31ee4fa 100644 --- a/docs/man/relocate.html +++ b/docs/man/relocate.html @@ -136,7 +136,7 @@ @@ -459,7 +459,7 @@

    Table of contents

  • 13.3 使用例 Example
  • - +
    @@ -994,4 +994,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/remove_empty_constant.html b/docs/man/remove_empty_constant.html index f872068..ead4df9 100644 --- a/docs/man/remove_empty_constant.html +++ b/docs/man/remove_empty_constant.html @@ -136,7 +136,7 @@ @@ -456,7 +456,7 @@

    Table of contents

  • 11.2 引数 Argument
  • 11.3 使用例 Example
  • - +
    @@ -1017,4 +1017,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/scale_wmean.html b/docs/man/scale_wmean.html index 85888cd..9dadc6c 100644 --- a/docs/man/scale_wmean.html +++ b/docs/man/scale_wmean.html @@ -165,7 +165,7 @@ @@ -486,7 +486,7 @@

    Table of contents

  • 18.3 返り値 Value
  • 18.4 使用例 Example
  • - +
    @@ -1013,4 +1013,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/set_miss.html b/docs/man/set_miss.html index 989c85b..92dae83 100644 --- a/docs/man/set_miss.html +++ b/docs/man/set_miss.html @@ -136,7 +136,7 @@ @@ -456,7 +456,7 @@

    Table of contents

  • 17.2 引数 Argument
  • 17.3 使用例 Example
  • - +
    @@ -976,4 +976,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/style_pvalue.html b/docs/man/style_pvalue.html index a667d07..305f065 100644 --- a/docs/man/style_pvalue.html +++ b/docs/man/style_pvalue.html @@ -136,7 +136,7 @@ @@ -457,7 +457,7 @@

    Table of contents

  • 36.3 返り値 Value
  • 36.4 使用例 Examples
  • - +
    @@ -964,4 +964,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/tabyl.html b/docs/man/tabyl.html index e1c22e4..3b46a68 100644 --- a/docs/man/tabyl.html +++ b/docs/man/tabyl.html @@ -136,7 +136,7 @@ @@ -456,7 +456,7 @@

    Table of contents

  • 5.2 引数 Argument
  • 5.3 使用例
  • - +
    @@ -971,4 +971,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/tidy.html b/docs/man/tidy.html index 2e797af..2a12bc6 100644 --- a/docs/man/tidy.html +++ b/docs/man/tidy.html @@ -165,7 +165,7 @@ @@ -487,7 +487,7 @@

    Table of contents

  • 25.4 使用例 Examples
  • 25.5 注意点
  • - +
    @@ -1026,4 +1026,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/tidy_heckit.html b/docs/man/tidy_heckit.html index a802d92..dde0e65 100644 --- a/docs/man/tidy_heckit.html +++ b/docs/man/tidy_heckit.html @@ -165,7 +165,7 @@ @@ -486,7 +486,7 @@

    Table of contents

  • 29.3 返り値 Value
  • 29.4 使用例 Examples
  • - +
    @@ -1018,4 +1018,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/tidy_test.html b/docs/man/tidy_test.html index 5d78bef..0b8f64b 100644 --- a/docs/man/tidy_test.html +++ b/docs/man/tidy_test.html @@ -136,7 +136,7 @@ @@ -457,7 +457,7 @@

    Table of contents

  • 26.3 返り値 Value
  • 26.4 使用例 Examples
  • - +
    @@ -958,4 +958,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/man/varidate.html b/docs/man/varidate.html index 7fe9e96..26135f5 100644 --- a/docs/man/varidate.html +++ b/docs/man/varidate.html @@ -136,7 +136,7 @@ @@ -463,7 +463,7 @@

    Table of contents

  • 21.5 Notes
  • 21.6 参考文献
  • - +
    @@ -1040,4 +1040,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/reference.html b/docs/reference.html index 788824b..a714cea 100644 --- a/docs/reference.html +++ b/docs/reference.html @@ -101,7 +101,7 @@ @@ -433,7 +433,7 @@

    Table of contents

  • 3.2.6 並列文の作成
  • - +
    @@ -996,4 +996,4 @@

    \ No newline at end of file + \ No newline at end of file From 0582873901fc962fc365288c66c74c4fd67ae25b Mon Sep 17 00:00:00 2001 From: Hirototensho Date: Sat, 24 Jan 2026 00:31:56 +0900 Subject: [PATCH 17/19] =?UTF-8?q?Quarto=20Book=20=E3=81=AB=20scaling=5Fup?= =?UTF-8?q?=5Fregression.qmd=20=E3=82=92=E8=BF=BD=E5=8A=A0=E3=81=97?= =?UTF-8?q?=E3=81=BE=E3=81=97=E3=81=9F=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- _quarto.yml | 1 + ...6\343\201\256\350\200\203\345\257\237.qmd" | 8 +- articles/scaling_up_regression.qmd | 10 +- .../eda_tools_development_status.html | 30 +++-- docs/articles/narwhals_in_py4stats.html | 64 +++++----- ...\343\201\256\350\200\203\345\257\237.html" | 70 +++++----- docs/index.html | 16 ++- docs/introduction.html | 12 +- docs/man/Blinder_Oaxaca.html | 12 +- docs/man/Heckit_from_formula.html | 12 +- docs/man/Pareto_plot.html | 12 +- docs/man/arg_match.html | 12 +- docs/man/assert_dtype.html | 12 +- docs/man/coefplot.html | 12 +- docs/man/compare_df_cols.html | 12 +- docs/man/compare_group_stats.html | 12 +- docs/man/compare_mfx.html | 12 +- docs/man/compare_ols.html | 12 +- docs/man/diagnose.html | 12 +- docs/man/diagnose_category.html | 12 +- docs/man/filtering_out.html | 12 +- docs/man/freq_table.html | 12 +- docs/man/glance.html | 12 +- docs/man/heckitmfx_compute.html | 12 +- docs/man/is_dtype.html | 12 +- docs/man/is_dummy.html | 12 +- docs/man/miscellaneous.html | 12 +- docs/man/oxford_comma.html | 18 ++- docs/man/plot_category.html | 12 +- docs/man/plot_miss_var.html | 12 +- docs/man/point_range.html | 12 +- docs/man/predicate_str.html | 12 +- docs/man/relocate.html | 12 +- docs/man/remove_empty_constant.html | 12 +- docs/man/scale_wmean.html | 12 +- docs/man/set_miss.html | 12 +- docs/man/style_pvalue.html | 12 +- docs/man/tabyl.html | 12 +- docs/man/tidy.html | 12 +- docs/man/tidy_heckit.html | 12 +- docs/man/tidy_test.html | 12 +- docs/man/varidate.html | 12 +- docs/reference.html | 12 +- docs/search.json | 120 ++++++++++++------ 44 files changed, 521 insertions(+), 236 deletions(-) diff --git a/_quarto.yml b/_quarto.yml index 4060be7..4813e38 100644 --- a/_quarto.yml +++ b/_quarto.yml @@ -51,6 +51,7 @@ book: - man/oxford_comma.qmd - part: "articles" chapters: + - articles/scaling_up_regression.qmd - articles/narwhals_in_py4stats.qmd - articles/eda_tools_development_status.qmd - articles/narwhalsについての考察.qmd diff --git "a/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.qmd" "b/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.qmd" index ba789bd..55838f8 100644 --- "a/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.qmd" +++ "b/articles/narwhals\343\201\253\343\201\244\343\201\204\343\201\246\343\201\256\350\200\203\345\257\237.qmd" @@ -28,8 +28,8 @@ data_nw.group_by(nw.col(group)).agg(nw.col('x').my_func()) data_nw.group_by(nw.col(group)).agg(my_func(nw.col('x'))) ```` -例えば Py4Stats では、[`Pareto_plot()`](../man/Pareto_plot.qmd) 関数の内部実装に使用している [`make_rank_table()`](..../py4stats/eda_tools/_nw.py) 関数において、任意の `aggfunc()` 関数をグループ別集計に使うために、サブセッティングを使って `group_by()` メソッドの使用を回避するという変則的(かつ、おそらく非効率な)な実装を行なっています。 - +例えば Py4Stats では、[`Pareto_plot()`](../man/Pareto_plot.qmd) 関数の内部実装に使用している [`make_rank_table()`](../py4stats/eda_tools/_nw.py) 関数において、任意の関数をグループ別集計に使うために、サブセッティングを使って `group_by()` メソッドの使用を回避するという変則的(かつ、おそらく非効率 )な実装を行なっています。 + ``` python stat_values = [ aggfunc( @@ -63,8 +63,8 @@ result = data_nw.to_native() # -> pd.DataFrame が出力される ```python data_nw = nw.from_native(input_pd) # ここで backend が記録される data_nw2 = nw.from_native(data_nw.to_polars()) # ここで backend が上書きされる -data_nw2.implementation # -> polars -result = data_nw2.to_native() # -> pl.DataFrame が出力される +data_nw2.implementation # -> polars +result = data_nw2.to_native() # -> pl.DataFrame が出力される ``` 従って、`result` が `input_pd` と同じ型をもつことを保証するには、`data_nw` を nw.DataFrame クラスのまま維持する(≒ narwhals ベースのメソッドだけで処理を書く)必要があり、これが narwhals ベースの実装としてのあるべき姿だと思われます。 diff --git a/articles/scaling_up_regression.qmd b/articles/scaling_up_regression.qmd index 4115b61..6f1f54a 100644 --- a/articles/scaling_up_regression.qmd +++ b/articles/scaling_up_regression.qmd @@ -58,6 +58,7 @@ py4st.compare_ols(list_models = list_fitted1) # 表の作成 | nobs | 342 | 342 | 333 | | df | 3 | 4 | 5 | + この方法であれば、試したい回帰式のパターンが増えた場合でも、`list_fml` の要素を追加するだけで済むため、実行部分を変更する必要がありません。  また、回帰係数を視覚的に比較するには次のようなコードを使うと良いでしょう。 @@ -72,8 +73,7 @@ for k, mod in enumerate(list_fitted1): ax[k].set_title(f'model {k + 1}') ax[k].set_xlabel(f'coefficient (n = {mod.nobs:,.0f})') ``` -![Unknown](https://github.com/Hirototensho/Py4Stats/assets/55335752/c3971702-b97a-4679-ae9a-f5787b1443cb) - +![scaling_up_regression1.png](image/scaling_up_regression1.png) ## グループ別の回帰分析  次に、データセットのグループ別に回帰分析を行う場合を考えます。この場合、データを受け取ると回帰分析の結果を返す関数 `group_ols` を定義し、回帰式は固定しておきます。 @@ -95,7 +95,7 @@ penguins2 = penguins.groupby('species') list_fitted2 = penguins2.apply(group_ols).to_list() ``` -[`py4st.compare_ols()`](https://github.com/Hirototensho/Py4Stats/blob/main/man/compare_ols.md) で分析結果を比較できます。 +ここまでの準備ができれば、後は [`py4st.compare_ols()`](../man/compare_ols.qmd) で分析結果を比較できます。 ``` python list_groups = list(penguins2.groups.keys()) @@ -130,7 +130,7 @@ for k, mod in enumerate(list_fitted2): ax[k].set_title(list_groups[k]) ax[k].set_xlabel(f'coefficient (n = {mod.nobs:,.0f})') ``` -![Unknown-1](https://github.com/Hirototensho/Py4Stats/assets/55335752/abb362d3-f0f7-42d0-9dd5-8379e5c05b55) +![scaling_up_regression2.png](image/scaling_up_regression2.png) ## ブートストラップ回帰 @@ -196,7 +196,7 @@ pt.RainCloud( ax.axvline(0, ls = "--", color = '#969696'); ``` -![Unknown](https://github.com/Hirototensho/Py4Stats/assets/55335752/dd2a0384-4ef9-4a08-898f-fc96cc79a058) +![scaling_up_regression3.png](image/scaling_up_regression3.png) ### 補足 diff --git a/docs/articles/eda_tools_development_status.html b/docs/articles/eda_tools_development_status.html index bb2086b..dcf3b98 100644 --- a/docs/articles/eda_tools_development_status.html +++ b/docs/articles/eda_tools_development_status.html @@ -7,7 +7,7 @@ -39  eda_toolsの開発状況 – Py4Stats +40  eda_toolsの開発状況 – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    + +
    + + +
    + + + +
    + +
    +
    +

    Release Notes

    +
    + + + +
    + + + + +
    + + + +
    + + +
    +

    Py4Stats v0.3.0 2026-01-23

    +
    +

    概要(Summary)

    +

    このリリースでは Pyt4Stats に幾つかの関数の追加を行いました。 関数のリファクタリングとバグ修正を行いました。今回のリリースでは機能の追加や変更はありません。

    +
    +
    +

    ✨ 主な新機能 (New Features)

    +
      +
    • diagnose_category() 関数の追加 +
        +
      • データフレームのカテゴリー変数の要約を提供する関数です。
      • +
    • +
    • set_miss() 関数の追加 +
        +
      • Series の非欠測要素のうち、指定された個数または割合を欠測値に置き換えます。
      • +
    • +
    +
    +
    +

    🛠 修正と改善(Fixes /Improvements)

    +
      +
    • compare_group_means(), compare_group_median(), compare_df_cols(), compare_df_stats(): コードをリファクタリングし、引数と同じクラスのデータフレームを出力できるようにしました。この変更により、返り値が pd.DataFrame である場合でも、index が自動では設定されなくなりました。

    • +
    • diagnose(): dtype 列が、polars や pyarrow における列のクラスの表記に対してより忠実になるように修正しました。

    • +
    • relocate() 関数に、指定した列を最後列に配置する機能を追加し、エラーメッセージを改善しました。

    • +
    • assert_character() および assert_numeric() 系関数のエラーメッセージを改善しました。

    • +
    • その他、いくつかの関数のエラーメッセージを改善しました。

    • +
    +
    +
    +
    +

    Py4Stats v0.2.2 2026-01-19

    +
    +

    概要(Summary)

    +

    型ヒントに関する若干の修正と、バグ修正を行いました。今回のリリースでは機能の追加や変更はありません。

    +
    +
    +

    🛠 修正と改善(Fixes /Improvements)

    +
      +
    • building_block.assert_numeric 系関数のリファクタリングを行いました。この変更でメインモジュールの関数の動作に変更はありません。
    • +
    • compare_group_means(), compare_group_median() のテストコードを実装しました。
    • +
    • tabyl(): 第一引数 data と同じオブジェクト型をもつ DataFrame を出力できるように実装を修正しました。
    • +
    • check_that(), check_viorate() : 第一引数 data と同じオブジェクト型をもつ DataFrame を出力できるように実装を修正しました。引き続きロジックのコア部分には pd.DataFrame.eval() を使用しており、使用方法に大きな変更はありません。
    • +
    • is_number() 関数を修正し、pyarrow.lib.ChunkedArray オブジェクトを代入すると生じるエラーを解消しました。
    • +
    +
    +
    +
    +

    Py4Stats v0.2.1 2026-01-16

    +
    +

    概要(Summary)

    +

    このリリースでは Pyt4Stats の各モジュールに幾つかの関数の追加を行いました。

    +
    +
    +

    ✨ 主な新機能 (New Features)

    +
      +
    • plot_category() 関数の追加 +
        +
      • カテゴリ変数の回答分布を 100% 積み上げ横棒グラフとして描画する関数です。
      • +
    • +
    • plot_miss_var() 関数の追加 +
        +
      • データフレームの各変数について欠測値の量を横棒グラフとして可視化します。
      • +
    • +
    • relocate() 関数の追加 +
        +
      • データフレームの列を、削除することなく並べ替えます。
      • +
    • +
    • weighted_mean(), scale(), min_max() 関数の追加 +
        +
      • それぞれ Series オブジェクトの加重平均の計算と、標準化を行う関数です。
      • +
    • +
    +
    +
    +

    🛠 修正と改善(Fixes /Improvements)

    +
      +
    • eda_tools の Pandas ベース実装 eda_tools/_pands.py に、FutureWarning を実装しました。
    • +
    • ユーザビリティ向上のため、freq_table() 関数に sort_by 引数を導入しました。 +
        +
      • sort_by = 'frequency' なら度数分布表を頻度に応じてソートし(従来の sort = True に相当)、sort_by = 'values' なら subset で指定した列の値に応じてソートします(従来の sort = False に相当)。
      • +
      • この変更に合わせて、sort 引数は非推奨扱いに変更されています。
      • +
    • +
    • Pareto_plot()aggfunc 引数に、np.mean など values 列を1次元配列として受け取って単一の数値を返す任意の関数を使用できるように改良を行いました。
    • +
    • その他、py4stats ライブラリ全体のエラーメッセージ改善
    • +
    • building_block.assert_* 系関数の改良を行い、与えられた引数の要素数に関するアサーションと、None やリストを拒否する機能を追加しました。
    • +
    • cmpare_ols() および cmpare_mfx() に stars 引数を追加し、有意性のアスタリスクの表示形式を変更できる機能を追加しました。また、その他エラーメッセージの改善を行なっています。
    • +
    +
    +
    +

    ⚠️ 既知の制限・注意点(Notes)

    +
      +
    • pyarrow.Table を使用する場合、plot_category() 関数の一部機能が制限されます。
    • +
    +
    +
    +
    +

    Py4Stats v0.1.0 2026-01-11

    +
    +

    概要(Summary)

    +

    このリリースでは EDA モジュールの narwhals ベース実装を統合し、パフォーマンスと互換性を大幅に改善しました。いくつかの既知の挙動も修正されています。

    +
    +
    +

    ✨ 主な新機能 (New Features)

    +
      +
    • py4stats.eda_tools が Pandas ベースの実装から narwhals ベース実装へ移行しました。 +
        +
      • この変更により、複数バックエンド(pandas / polars / pyarrow)をサポートしました。
      • +
    • +
    • Pandas ベースの実装は、当面 py4stats ライブラリのサブモジュール eda_tools._pandas として維持されますが、将来的に廃止される予定です。
    • +
    +
    +
    +

    🛠 修正と改善(Fixes /Improvements)

    +
      +
    • bilding_block モジュールの名称を building_block に修正
    • +
    • Py4Stats.building_block モジュールの assert_* 系関数の出力を AssertionError から ValueError に変更しました。
    • +
    • Py4Stats.eda_tools モジュールの関数の bool 値の引数を中心に、型の不一致があった場合のエラーメッセージを改善しました。
    • +
    +
    +
    +

    ⚠️ 既知の制限・注意点(Notes)

    +
      +
    • バックエンドの変更に伴い、py4st.freq_table()py4st.diagnose()py4st.tabyl() など、従来はインデックス(Index)付きの pandas.DataFrame データフレームが出力されていた関数で、インデックスのない pandas.DataFrame が出力されるように変更されました。
    • +
    • polars / pyarrow のサポートは experimental であり、一部のエッジケースで動作に違いが出る可能性があります。詳細は Technical Notes および eda_tools開発状況 を参照してください。
    • +
    + + +
    +
    + +
    + + +
    + + + + + \ No newline at end of file diff --git a/docs/articles/scaling_up_regression.html b/docs/articles/scaling_up_regression.html new file mode 100644 index 0000000..c733b49 --- /dev/null +++ b/docs/articles/scaling_up_regression.html @@ -0,0 +1,1232 @@ + + + + + + + + + +scaling up regression – Py4Stats + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
    + +
    + + +
    + + + +
    + +
    +
    +

    scaling up regression

    +
    + + + +
    + + + + +
    + + + +
    + + +

     ここでは実証分析の場面で便利な回帰分析の実装例を紹介します。

    +
    import py4stats as py4st
    +import statsmodels.formula.api as smf
    +from palmerpenguins import load_penguins
    +penguins = load_penguins() # サンプルデータの読み込み
    +
    +

    複数の回帰式を比較する

    +

     異なる説明変数の組合せを比較したい場合、リスと内包表記を使って実装するとコードが簡潔で扱いやすくなります。まずは smf.ols() をもとに回帰式を受け取って回帰分析の結果を返す関数 fit_ols と、回帰式のリストlist_fml を定義します。

    +
    # 回帰分析の推定
    +def fit_ols(fml, data):
    +  res = smf.ols(fml, data = data).fit()
    +  return res
    +
    +list_fml = [
    +    'body_mass_g ~ bill_length_mm + species',
    +    'body_mass_g ~ bill_length_mm + bill_depth_mm + species',
    +    'body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex'
    +]
    +

    回帰分析の実行部分は次のように記述します。

    +
    # 回帰分析の実行
    +list_fitted1 = [fit_ols(fml, penguins) for fml in list_fml]
    +

    このとき list_fitted1 は回帰分析の推定結果を要素に持つリストであるため、py4st.compare_ols() にそのまま代入することができます。

    +
    py4st.compare_ols(list_models = list_fitted1) # 表の作成
    + ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    termmodel 1model 2model 3
    Intercept153.7397-1742.7202 ***843.9812 **
    (268.9012)(313.7697)(403.5956)
    species[T.Chinstrap]-885.8121 ***-539.6864 ***-245.1516 ***
    (88.2502)(86.9425)(84.5952)
    species[T.Gentoo]578.6292 ***1492.8283 ***1443.3525 ***
    (75.3623)(118.4442)(107.7844)
    bill_length_mm91.4358 ***55.6461 ***26.5366 ***
    (6.8871)(7.2326)(7.2436)
    bill_depth_mm179.0434 ***87.9328 ***
    (19.0997)(20.2192)
    sex[T.male]437.2007 ***
    (49.1098)
    rsquared_adj0.78100.82580.8613
    nobs342342333
    df345
    +

    この方法であれば、試したい回帰式のパターンが増えた場合でも、list_fml の要素を追加するだけで済むため、実行部分を変更する必要がありません。
    + また、回帰係数を視覚的に比較するには次のようなコードを使うと良いでしょう。

    +
    plt.rcParams["figure.autolayout"] = True
    +
    +fig, ax = plt.subplots(1, 3, figsize = (3.2 * 5, 5), dpi = 100)
    +
    +for k, mod in enumerate(list_fitted1):
    +  py4st.coefplot(mod, ax = ax[k])
    +  ax[k].set_xlim(-1200, 1800)
    +  ax[k].set_title(f'model {k + 1}')
    +  ax[k].set_xlabel(f'coefficient (n = {mod.nobs:,.0f})')
    +

    scaling_up_regression1 ## グループ別の回帰分析

    +

     次に、データセットのグループ別に回帰分析を行う場合を考えます。この場合、データを受け取ると回帰分析の結果を返す関数 group_ols を定義し、回帰式は固定しておきます。

    +
    # グループ別の回帰分析の実行
    +def group_ols(data):
    +  res = smf.ols(
    +      'body_mass_g ~ bill_length_mm + bill_depth_mm + sex', 
    +      data = data).fit()
    +  return res
    +

    次に pd.DataFrame.groupby() メソッドを使ってグループ分けを行い、続いて .apply() メソッドを使ってグループ別に回帰分析を実行します。ここでは、実行結果が回帰分析の結果を要素にもつ pd.Series になるので、.to_list() メソッドでリストに変換しています。

    +
    penguins2 = penguins.groupby('species')
    +
    +list_fitted2 = penguins2.apply(group_ols).to_list()
    +

    ここまでの準備ができれば、後は py4st.compare_ols() で分析結果を比較できます。

    +
    list_groups = list(penguins2.groups.keys())
    +
    +py4st.compare_ols(
    +    list_models = list_fitted2,
    +    model_name = list_groups
    +    )
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    termAdelieChinstrapGentoo
    Intercept984.4166286.25401829.0302 ***
    (601.1999)(980.5230)(638.6999)
    sex[T.male]476.6000 ***102.9407536.5500 ***
    (69.9994)(119.3246)(80.3899)
    bill_length_mm26.8589 **18.421833.6324 ***
    (11.4707)(16.0333)(11.2907)
    bill_depth_mm78.5228 ***135.4873 **92.5900 **
    (25.1993)(51.1571)(41.9318)
    rsquared_adj0.58220.36870.6956
    nobs14668119
    df333
    +
    plt.rcParams["figure.autolayout"] = True
    +
    +fig, ax = plt.subplots(1, 3, figsize = (3.2 * 5, 5), dpi = 100)
    +
    +for k, mod in enumerate(list_fitted2):
    +  py4st.coefplot(mod, ax = ax[k])
    +  ax[k].set_xlim(-500, 1000)
    +  ax[k].set_title(list_groups[k])
    +  ax[k].set_xlabel(f'coefficient (n = {mod.nobs:,.0f})')
    +
    +
    +

    +
    scaling_up_regression2
    +
    +
    +
    +
    +

    ブートストラップ回帰

    +

     前節でグループ別の回帰分析を行なった方法を応用すると、ブートストラップ法を簡単に実装することができます。

    +
    def est_ols(data):
    +  fitted = smf.ols(
    +      'body_mass_g ~ bill_length_mm + bill_depth_mm + species + sex',
    +      data = data).fit()
    +  return fitted
    +

     次にブートストラップ法の実行部分を作成します。ここでは pandas の DataFrame.sample() メソッドを使い、引数に frac = 1, replace = True を指定することで復元抽出を行います。また、ここでは反復回数を Efron, Hastie(2016, p.161)などで推奨されている \(B = 1000\) を指定しています。

    +
    # ブートストラップ法の実装
    +B = 1000 # ブートストラップ法の反復回数
    +model_list = [
    +    penguins.sample(frac = 1, replace = True, random_state = 123)\
    +    .pipe(est_ols) 
    +    for b in range(B)
    +]
    +
    +boot_sample = pd.concat([py4st.tidy(mod) for mod in model_list])
    +
    +len(boot_sample)
    +#> 6000
    +

    次にブートストラップ統計量を集計して結果を確認しますが、ここではごく簡単に py4st.mean_qi() を使って、説明変数別に回帰係数の平均値と分位点を求めています。

    +
    res = boot_sample.groupby(['term'])[['estimate']]\
    +    .apply(py4st.mean_qi)
    +
    +print(res.round(4))
    +#>                         variable       mean      lower      upper
    +#> term                                                             
    +#> Intercept            0  estimate   823.7098   823.7098   823.7098
    +#> bill_depth_mm        0  estimate   109.9439   109.9439   109.9439
    +#> bill_length_mm       0  estimate    17.8235    17.8235    17.8235
    +#> sex[T.male]          0  estimate   474.2673   474.2673   474.2673
    +#> species[T.Chinstrap] 0  estimate  -191.4717  -191.4717  -191.4717
    +#> species[T.Gentoo]    0  estimate  1487.5680  1487.5680  1487.5680
    +

    ブートストラップ法を使うと、次のような回帰係数の分布のグラフを描くこともできます。

    +
    import ptitprince as pt
    +
    +fig, ax = plt.subplots(figsize = (np.sqrt(2) * 3, 3), dpi = 150)
    +
    +pt.RainCloud(
    +    data = boot_sample.sort_index().reset_index()\
    +      .query('~term.str.contains("Intercept")'),
    +    x = 'term',
    +    y = 'estimate',
    +    orient = 'h',
    +    ax = ax
    +);
    +
    +ax.axvline(0, ls = "--", color = '#969696');
    +
    +
    +

    +
    scaling_up_regression3
    +
    +
    +
    +

    補足

    +
      +
    • データセットが大きい場合、ブートストラップ法の実行には時間がかかるので boot_sample.to_csv('output/boot_sample.csv') を追加して保存しておいた方が、事後的な分析がしやすいと思います。
    • +
    • 今回のような通常の回帰分析であれば、回帰係数の標準誤差は簡単に計算できるためブートストラップ法を使う必要性を感じにくいですが、傾向スコアを用いたIPW推定量など、標準誤差の推定にブートストラップ法が必要になる場合もあります。
    • +
    • 今回は DataFrame.sample() メソッドを使ったごく簡単な方法でブートストラップ法を実装していますが、もう少し効率的な方法もあるのではないかと思います。
    • +
    +
    +
    +
    +

    参考文献

    +
      +
    • Efron, Bradley, and Trevor Hastie. (2016). Computer age statistical inference. Cambridge University Press.
    • +
    • 末石直也(2015)『計量経済学:ミクロデータ分析へのいざない』 日本評論社.
    • +
    + + +
    + +
    + + +
    + + + + + \ No newline at end of file diff --git a/docs/index.html b/docs/index.html index 408de45..93f2521 100644 --- a/docs/index.html +++ b/docs/index.html @@ -119,7 +119,7 @@ - +

    一方で、pip をお使いの場合には、次のコードで py4stats をインストールできます。

    ! pip install git+https://github.com/Hirototensho/py4stats.git
    -
    -

    1.2 使用例

    +
    +

    使用例

    import py4stats as py4st

    py4stats.diagnose() 関数はデータの全般的な状態についての要約を提供します。

    import pandas as pd
    @@ -642,7 +611,7 @@ 

    py4stats.compare_ols() を参照してください。 


    -

    Jump to Function Get started.
    +

    Jump to Get Started.
    Jump to Function reference.

    @@ -723,7 +692,7 @@

    { return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href); } @@ -1055,7 +1024,7 @@

    - 2  Introduction to Py4Stats + Introduction to Py4Stats

    @@ -1064,4 +1033,4 @@

    \ No newline at end of file + \ No newline at end of file diff --git a/docs/introduction.html b/docs/introduction.html index ec0f642..2441be6 100644 --- a/docs/introduction.html +++ b/docs/introduction.html @@ -7,7 +7,7 @@ -2  Introduction to Py4Stats – Py4Stats +Introduction to Py4Stats – Py4Stats