energy-reports-pkg 0.6.14__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- energy_reports_pkg-0.6.14.dist-info/METADATA +10 -0
- energy_reports_pkg-0.6.14.dist-info/RECORD +221 -0
- energy_reports_pkg-0.6.14.dist-info/WHEEL +5 -0
- energy_reports_pkg-0.6.14.dist-info/top_level.txt +1 -0
- mindsett_energy_reports_pkg/config/__init__.py +6 -0
- mindsett_energy_reports_pkg/config/email/__init__.py +37 -0
- mindsett_energy_reports_pkg/config/monday/__init__.py +8 -0
- mindsett_energy_reports_pkg/config/monday/auth/__init__.py +7 -0
- mindsett_energy_reports_pkg/config/monday/columns_concerned/__init__.py +22 -0
- mindsett_energy_reports_pkg/config/postgresdb/__init__.py +33 -0
- mindsett_energy_reports_pkg/config/postgresdb/table/__init__.py +2 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_building/__init__.py +1 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_building_total/__init__.py +1 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_cache/__init__.py +30 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_iot/__init__.py +1 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_mailing/__init__.py +15 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_meta/__init__.py +2 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_occupancy/__init__.py +3 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_on_off/__init__.py +2 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_org/__init__.py +1 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_price/__init__.py +2 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_schedule/__init__.py +1 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_sqm/__init__.py +2 -0
- mindsett_energy_reports_pkg/config/postgresdb/table_timezone/__init__.py +2 -0
- mindsett_energy_reports_pkg/config/sharepoint/__init__.py +12 -0
- mindsett_energy_reports_pkg/config/sharepoint/excel/__init__.py +5 -0
- mindsett_energy_reports_pkg/config/sharepoint/excel/columns_concerned/__init__.py +7 -0
- mindsett_energy_reports_pkg/config/smtp/__init__.py +10 -0
- mindsett_energy_reports_pkg/jobs/databricks_job.py +31 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/DataProcessor/__init__.py +14 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/DataProcessor/launchInteractiveProcess.py +6 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorBoardColumnNotMatch/__init__.py +6 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorBoardNotFound/__init__.py +5 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorException/__init__.py +4 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorNoColumInBoard/__init__.py +5 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorNoGroupsInBoard/__init__.py +5 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorNoItemInGroup/__init__.py +6 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/MondayProcessorPageNotSupported/__init__.py +7 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/MondayProcessorExceptions_/__init__.py +8 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/__init__.py +40 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchBoardById.py +13 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchBoardLogsById.py +33 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchColumnValueByGroup.py +103 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchGroups.py +19 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchPrismConf.py +10 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchPrismConfByBoard.py +83 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_fetchPrismConfByGroup.py +89 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_searchColumnIdsByName.py +23 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_searchConfColumnIds.py +30 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/_searchConfColumnIdsMatch.py +20 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/__init__.py +11 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/boards/__init__.py +12 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/boards/groups/__init__.py +11 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/boards/groups/items_page/__init__.py +10 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/boards/groups/items_page/items/__init__.py +12 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/boards/groups/items_page/items/column_values/__init__.py +10 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/dev/graphql_query/boards/groups/items_page/items/column_values/column/__init__.py +2 -0
- mindsett_energy_reports_pkg/libs/MondayProcessor/launchInteractiveProcess.py +7 -0
- mindsett_energy_reports_pkg/libs/__init__.py +4 -0
- mindsett_energy_reports_pkg/libs/cache_return/__init__.py +47 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/__init__.py +29 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/load_cf_from_db/__init__.py +17 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/__init__.py +52 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/cache_cf_to_db/__init__.py +11 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/cache_cf_to_db/append_df_to_table/__init__.py +29 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/cache_cf_to_db/empty_table/__init__.py +11 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/extract_contacts/__init__.py +57 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/extract_contacts/get_mailing_list/__init__.py +25 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/extract_contacts/load_mailing_list/__init__.py +50 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/extract_contacts/load_mailing_list/columns_concerned/__init__.py +22 -0
- mindsett_energy_reports_pkg/libs/fetch_monday_info/sync_with_monday/get_last_update_time/__init__.py +26 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/__init__.py +27 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/load_cf_from_db/__init__.py +17 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/__init__.py +28 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/cache_cf_to_db/__init__.py +11 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/cache_cf_to_db/append_df_to_table/__init__.py +29 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/cache_cf_to_db/empty_table/__init__.py +11 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/__init__.py +13 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/format_contacts/__init__.py +57 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/format_contacts/columns_concerned/__init__.py +8 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/format_contacts/extract_id/# __init__.py +11 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/format_contacts/extract_id/__init__.py +19 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/format_contacts/get_mailing_list/__init__.py +10 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/format_contacts/uuid_for_nona/__init__.py +12 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/load_mailing_list/__init__.py +30 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/load_mailing_list/get_excel_file_from_link/__init__.py +30 -0
- mindsett_energy_reports_pkg/libs/fetch_sharepoint_info/sync_with_sharepoint/extract_contacts/load_mailing_list/load_excel_as_df/__init__.py +45 -0
- mindsett_energy_reports_pkg/libs/generate_dag_id/__init__.py +20 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/__init__.py +42 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/__version__.py +8 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_airflow/__init__.py +47 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_json/__init__.py +25 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_json/get_credential_url/__init__.py +17 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_json/get_credential_url/databricks/__init__.py +10 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_json/get_credential_url/local/__init__.py +13 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_synapse/__init__.py +15 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_synapse/connect_lake_and_fetch_json/__init__.py +19 -0
- mindsett_energy_reports_pkg/libs/get_conn_by_id/get_conn_by_id_synapse/datalake/__init__.py +7 -0
- mindsett_energy_reports_pkg/mdl/__init__.py +2 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/ClientSite/__init__.py +119 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/ClientSite/get_end_time/__init__.py +8 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/ClientSite/get_period_range/__init__.py +8 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/ClientSite/get_schedule_records/__init__.py +34 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/ClientSite/get_start_time/__init__.py +6 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/ClientSite/get_start_time_co2_barchart/__init__.py +7 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/__init__.py +93 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/email_report/__init__.py +47 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/__init__.py +75 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/apply_price_from_db/__init__.py +13 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/apply_price_from_db/load_energy_price/__init__.py +14 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/attach_id_to_buildings/__init__.py +24 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/attach_id_to_buildings/load_building/__init__.py +19 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/attach_id_to_buildings/load_org/__init__.py +13 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/check_and_keep_valid/__init__.py +36 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/load_sqm/__init__.py +11 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/load_config/load_timezone/__init__.py +11 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/__init__.py +43 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/__init__.py +47 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/__init__.py +40 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/__init__.py +71 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/plot_temperature_graph/__init__.py +35 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/plot_the_legend/__init__.py +26 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/setup_x_tick_lim/__init__.py +26 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/setup_x_tick_lim/generate_day_code/__init__.py +18 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/setup_x_tick_lim/generate_day_code/generate_day_code_list/__init__.py +38 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/setup_y_label_and_get_pos_bot_range/__init__.py +40 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/setup_y_label_and_get_pos_bot_range/get_pos_bot_and_ylim/__init__.py +30 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/plot_shifted_daily_barchart_with_temp/setup_y_tick_lim_label_zero_line/__init__.py +23 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/preprocessing_for_barchart/__init__.py +21 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/preprocessing_for_barchart/groupby_date_and_ooh_current_period/__init__.py +39 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/preprocessing_for_barchart/patch_missing_columns_for_ooh_and_sign/__init__.py +18 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_daily_barchart_with_temp/preprocessing_for_barchart/patch_missing_dates/__init__.py +28 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_energy_meter_with_benchmarking/__init__.py +42 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_energy_meter_with_benchmarking/energy_meter_with_benchmarking/__init__.py +66 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_energy_meter_with_benchmarking/energy_meter_with_benchmarking/benchmarking_design/__init__.py +194 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_energy_meter_with_benchmarking/energy_meter_with_benchmarking/benchmarking_design/ruler_anno_shink_cf/__init__.py +24 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_energy_meter_with_benchmarking/energy_meter_with_benchmarking/energy_meter_design/__init__.py +233 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_energy_meter_with_benchmarking/preprocessing_for_energy_meter_with_benchmarking/__init__.py +23 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_insight_statements/__init__.py +42 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_insight_statements/insight_statements/__init__.py +41 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_insight_statements/insight_statements/statement_for_avg_action_time/__init__.py +61 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_insight_statements/insight_statements/statement_for_biggest_ooh/__init__.py +31 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_insight_statements/insight_statements/statement_for_total_ooh/__init__.py +18 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_insight_statements/preprocessing_for_statement/__init__.py +85 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_period_barchart/__init__.py +29 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_period_barchart/plot_shifted_period_barchart/__init__.py +49 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_period_barchart/plot_shifted_period_barchart/set_x_label_prepare_xtick/__init__.py +24 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_period_barchart/plot_shifted_period_barchart/set_x_tick_and_lim/__init__.py +26 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_period_barchart/plot_shifted_period_barchart/setup_y_tick_lim_label_zero_line/__init__.py +31 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_period_barchart/preprocessing_for_period_barchart/__init__.py +43 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_period_barchart/preprocessing_for_period_barchart/patch_missing_ooh_periods_sign/__init__.py +23 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/__init__.py +56 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/__init__.py +109 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/colors/__init__.py +28 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/hatches/__init__.py +2 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_centre_pct/__init__.py +28 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_phase_balance/__init__.py +42 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_phase_balance/get_phase_markers/__init__.py +28 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_phase_balance/get_tick_values/__init__.py +44 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_phase_balance/plot_phase_balance_part/__init__.py +108 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_phase_balance/plot_phase_balance_part/ruler_anno_shink_cf/__init__.py +29 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_phase_balance/plot_phase_balance_part/ruler_symbol_cf/__init__.py +35 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_ring/__init__.py +87 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_ring/adjust_gap_for_visibility/__init__.py +19 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_ring/adjust_to_inner_ring/__init__.py +32 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_ring/adjust_values_for_better_visibility/__init__.py +27 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_ring/annotate_pct_on_pies/__init__.py +21 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/plot_ring/generate_pct_fmt/__init__.py +8 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/show_legend/__init__.py +36 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/show_legend/generate_legend_labels/__init__.py +50 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/show_legend/generate_legend_labels/get_formatted_arrow/__init__.py +18 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/show_legend/generate_legend_labels/get_formatted_name/__init__.py +14 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/show_legend/generate_legend_labels/get_formatted_pct/__init__.py +44 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/show_legend/generate_legend_labels/get_formatted_sum/__init__.py +31 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/plot_adaptive_ring_with_phase/show_legend/get_legend_handles/__init__.py +22 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_phases/__init__.py +37 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_piechart/__init__.py +26 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_piechart/group_and_pivot/__init__.py +24 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_piechart/transform_asset_stats_for_adaptive_piechart/__init__.py +30 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_piechart/transform_asset_stats_for_adaptive_piechart/get_change_pct_and_sort_and_trim_cols/__init__.py +34 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_piechart/transform_asset_stats_for_adaptive_piechart/get_entries_to_display/__init__.py +34 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_piechart/transform_asset_stats_for_adaptive_piechart/get_rank_overall_protect/__init__.py +14 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_piechart/transform_asset_stats_for_adaptive_piechart/get_subgroup_sum_and_rank/__init__.py +22 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_components/generate_piechart_with_phase/preprocessing_for_piechart/transform_asset_stats_for_adaptive_piechart/get_sum_for_curr_and_prev/__init__.py +20 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_report/PDF/__init__.py +44 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_report/PDF/write_multicell_with_styles.py +30 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/generate_report/__init__.py +162 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/__init__.py +78 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/load_source_data/__init__.py +32 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/load_source_data/import_data_with_meta_postgres/__init__.py +47 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/load_source_data/import_data_with_meta_postgres/load_iot_data/__init__.py +28 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/load_source_data/import_data_with_meta_postgres/load_iot_data/load_iot_data_partition/__init__.py +24 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/load_source_data/import_data_with_meta_postgres/load_metadata/__init__.py +34 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/load_source_data/import_data_with_meta_postgres/load_metadata/get_meta_statement/__init__.py +32 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/load_source_data/query_building_total/__init__.py +40 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/refine_group_name/__init__.py +20 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/refine_group_name/exchange_group_name_column/__init__.py +10 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/prepare_report/preparing_source_data/validate_data_not_empty/__init__.py +9 -0
- mindsett_energy_reports_pkg/mdl/prepare_and_email_reports/select_sites_and_emails/__init__.py +19 -0
- mindsett_energy_reports_pkg/mdl/utils_/__init__.py +17 -0
- mindsett_energy_reports_pkg/mdl/utils_/cache_df_to_db/__init__.py +11 -0
- mindsett_energy_reports_pkg/mdl/utils_/cache_df_to_db/append_df_to_table/__init__.py +29 -0
- mindsett_energy_reports_pkg/mdl/utils_/cache_df_to_db/empty_table/__init__.py +11 -0
- mindsett_energy_reports_pkg/mdl/utils_/cache_obj/__init__.py +50 -0
- mindsett_energy_reports_pkg/mdl/utils_/color_dict/__init__.py +13 -0
- mindsett_energy_reports_pkg/mdl/utils_/delete_files_in_directory/__init__.py +15 -0
- mindsett_energy_reports_pkg/mdl/utils_/enriching_time_features/__init__.py +66 -0
- mindsett_energy_reports_pkg/mdl/utils_/enriching_time_features/__version__.py +4 -0
- mindsett_energy_reports_pkg/mdl/utils_/generate_time_partition_list/__init__.py +14 -0
- mindsett_energy_reports_pkg/mdl/utils_/get_group_with_others/__init__.py +7 -0
- mindsett_energy_reports_pkg/mdl/utils_/get_pos_bot_range_unit_format/__init__.py +37 -0
- mindsett_energy_reports_pkg/mdl/utils_/get_pos_bot_range_unit_format/get_pos_bot_and_ylim/__init__.py +31 -0
- mindsett_energy_reports_pkg/mdl/utils_/modify_group_names/__init__.py +17 -0
- mindsett_energy_reports_pkg/mdl/utils_/patch_missing_periods/__init__.py +34 -0
- mindsett_energy_reports_pkg/mdl/utils_/plot_stacked_barchart/__init__.py +50 -0
- mindsett_energy_reports_pkg/mdl/utils_/send_email/__init__.py +73 -0
- mindsett_energy_reports_pkg/mdl/utils_/setup_table/__init__.py +40 -0
- mindsett_energy_reports_pkg/mdl/utils_/setup_table/check_table_existence/__init__.py +25 -0
- mindsett_energy_reports_pkg/mdl/utils_/setup_table/create_new_schema/__init__.py +8 -0
- mindsett_energy_reports_pkg/mdl/utils_/setup_table/create_table/__init__.py +73 -0
- mindsett_energy_reports_pkg/mdl/utils_/setup_table/empty_table/__init__.py +11 -0
@@ -0,0 +1,26 @@
|
|
1
|
+
import matplotlib.ticker as ticker
|
2
|
+
|
3
|
+
def set_x_tick_and_lim(ax, x_ticks_labels, df_pivot_working_hours_sorted,
|
4
|
+
fontsize=None):
|
5
|
+
|
6
|
+
if fontsize is None:
|
7
|
+
fontsize = 13
|
8
|
+
|
9
|
+
df_pivot_working_hours_sorted_reset = df_pivot_working_hours_sorted.reset_index(drop=True)
|
10
|
+
|
11
|
+
# set up the x-ticks and xlim
|
12
|
+
ax.tick_params(axis='x', which='major', pad=8, length=2, labelsize=fontsize)
|
13
|
+
|
14
|
+
x_tick_pad = 0.99
|
15
|
+
top_index = df_pivot_working_hours_sorted_reset.index.min() - x_tick_pad
|
16
|
+
bot_index = df_pivot_working_hours_sorted_reset.index.max() + x_tick_pad
|
17
|
+
ax.set_xlim([top_index, bot_index])
|
18
|
+
|
19
|
+
# used to handle the below warning:
|
20
|
+
ax.xaxis.set_major_locator(ticker.MultipleLocator(1)) # ValueError: The number of FixedLocator locations (5), usually from a call to set_ticks, does not match the number of labels (8).
|
21
|
+
|
22
|
+
# fixing yticks with matplotlib.ticker "FixedLocator": UserWarning: FixedFormatter should only be used together with FixedLocator
|
23
|
+
ticks_loc = ax.get_xticks().tolist()
|
24
|
+
# print(f'{ticks_loc = }')
|
25
|
+
ax.xaxis.set_major_locator(ticker.FixedLocator(ticks_loc))
|
26
|
+
ax.set_xticklabels(x_ticks_labels, fontsize=fontsize)
|
@@ -0,0 +1,31 @@
|
|
1
|
+
import matplotlib.ticker as ticker
|
2
|
+
|
3
|
+
def setup_y_tick_lim_label_zero_line(ax, ls_ylim, display_unit, formatter,
|
4
|
+
freqstr=None,
|
5
|
+
fontsize=None):
|
6
|
+
|
7
|
+
if freqstr is None:
|
8
|
+
freqstr == 'M'
|
9
|
+
|
10
|
+
if fontsize is None:
|
11
|
+
fontsize = 13
|
12
|
+
|
13
|
+
# move the y_tick to the right
|
14
|
+
ax.yaxis.tick_right()
|
15
|
+
ax.yaxis.set_label_position("right")
|
16
|
+
ax.tick_params(axis='y', which='major', pad=9, length=5, labelsize=fontsize)
|
17
|
+
ax.set_ylim(ls_ylim)
|
18
|
+
|
19
|
+
# set y label
|
20
|
+
if freqstr == 'M':
|
21
|
+
y_label = f"Monthly Usage ({display_unit})"
|
22
|
+
else:
|
23
|
+
y_label = f"Weekly Usage ({display_unit})"
|
24
|
+
|
25
|
+
ax.set_ylabel(y_label, labelpad= 18, fontsize =fontsize)
|
26
|
+
|
27
|
+
# set yaxis formatter
|
28
|
+
ax.yaxis.set_major_formatter(ticker.FormatStrFormatter(formatter))
|
29
|
+
|
30
|
+
# plot the zero value horizontal line
|
31
|
+
ax.axhline(y=0, color='k', linestyle=':', zorder=-1)
|
@@ -0,0 +1,43 @@
|
|
1
|
+
import pandas as pd
|
2
|
+
from itertools import product
|
3
|
+
|
4
|
+
from .patch_missing_ooh_periods_sign import patch_missing_ooh_periods_sign
|
5
|
+
|
6
|
+
def preprocessing_for_period_barchart(df_meta_with_value,
|
7
|
+
sign_column=None,
|
8
|
+
period_column=None,
|
9
|
+
ooh_column=None,
|
10
|
+
kwh_column=None,
|
11
|
+
no_of_period=None):
|
12
|
+
if sign_column is None:
|
13
|
+
sign_column = 'neg_sign'
|
14
|
+
|
15
|
+
if period_column is None:
|
16
|
+
period_column = "period"
|
17
|
+
|
18
|
+
if ooh_column is None:
|
19
|
+
ooh_column = "out_of_hours"
|
20
|
+
|
21
|
+
if kwh_column is None:
|
22
|
+
kwh_column = "kwh"
|
23
|
+
|
24
|
+
if no_of_period is None:
|
25
|
+
no_of_period = 6
|
26
|
+
|
27
|
+
df_meta_with_value[sign_column] = df_meta_with_value[kwh_column].lt(0)
|
28
|
+
|
29
|
+
df_grouped_working_hours_period = df_meta_with_value.groupby([sign_column, period_column, ooh_column])[kwh_column].sum()
|
30
|
+
|
31
|
+
period_max = df_meta_with_value[period_column].max() # todo: check whether there are other better ways for getting the max period, as it might be missing also
|
32
|
+
|
33
|
+
# handle the situation that not all groups exist
|
34
|
+
df_grouped_working_hours_period = patch_missing_ooh_periods_sign(df_grouped_working_hours_period, period_max,
|
35
|
+
no_of_period=no_of_period)
|
36
|
+
|
37
|
+
df_grouped_working_hours_period_unstacked = df_grouped_working_hours_period.unstack([sign_column, ooh_column])
|
38
|
+
df_grouped_working_hours_period_unstacked = df_grouped_working_hours_period_unstacked.sort_index()
|
39
|
+
|
40
|
+
# convert the unit from kwh to mwh
|
41
|
+
df_grouped_working_hours_period_unstacked = df_grouped_working_hours_period_unstacked.div(1000)
|
42
|
+
|
43
|
+
return df_grouped_working_hours_period_unstacked
|
@@ -0,0 +1,23 @@
|
|
1
|
+
|
2
|
+
import pandas as pd
|
3
|
+
from itertools import product
|
4
|
+
|
5
|
+
def patch_missing_ooh_periods_sign(df_grouped_working_hours_period,
|
6
|
+
period_max,
|
7
|
+
no_of_period=None):
|
8
|
+
|
9
|
+
if no_of_period is None:
|
10
|
+
no_of_period = 6
|
11
|
+
|
12
|
+
# handle the situation that not all groups exist
|
13
|
+
expected_sign = [True, False]
|
14
|
+
expected_periods = [period_max-i for i in range(no_of_period)]
|
15
|
+
expected_working_hours = [True, False]
|
16
|
+
expected_group_index = pd.Index(product(expected_sign, expected_periods, expected_working_hours))
|
17
|
+
|
18
|
+
missing_group_index = expected_group_index.drop(df_grouped_working_hours_period.index)
|
19
|
+
|
20
|
+
for indice in missing_group_index:
|
21
|
+
df_grouped_working_hours_period.loc[indice] = 0
|
22
|
+
|
23
|
+
return df_grouped_working_hours_period
|
@@ -0,0 +1,56 @@
|
|
1
|
+
|
2
|
+
import io
|
3
|
+
import matplotlib.pyplot as plt
|
4
|
+
|
5
|
+
|
6
|
+
from .preprocessing_for_piechart import preprocessing_for_piechart
|
7
|
+
from .preprocessing_for_phases import preprocessing_for_phases
|
8
|
+
from .plot_adaptive_ring_with_phase import plot_adaptive_ring_with_phase
|
9
|
+
|
10
|
+
|
11
|
+
def generate_piechart_with_phase(df_meta_with_value,
|
12
|
+
colors=None,
|
13
|
+
hatches=None,
|
14
|
+
reading_interval_in_mins=None,
|
15
|
+
asset_group=None,
|
16
|
+
minimum_cnt_for_protection=None,
|
17
|
+
max_display_cnt=None,
|
18
|
+
sum_column=None,
|
19
|
+
pct_column=None,
|
20
|
+
gene_column=None,
|
21
|
+
fontsize=None,
|
22
|
+
directory_to_savefig=None
|
23
|
+
):
|
24
|
+
|
25
|
+
df_sort_idx_trim = preprocessing_for_piechart(df_meta_with_value,
|
26
|
+
reading_interval_in_mins=reading_interval_in_mins,
|
27
|
+
asset_group=asset_group,
|
28
|
+
minimum_cnt_for_protection=minimum_cnt_for_protection,
|
29
|
+
max_display_cnt=max_display_cnt,
|
30
|
+
sum_column=sum_column,
|
31
|
+
pct_column=pct_column,
|
32
|
+
gene_column=gene_column)
|
33
|
+
|
34
|
+
phase_values_list = preprocessing_for_phases(df_meta_with_value,
|
35
|
+
reading_interval_in_mins=reading_interval_in_mins)
|
36
|
+
|
37
|
+
plot_adaptive_ring_with_phase(df_sort_idx_trim, phase_values_list,
|
38
|
+
colors=colors,
|
39
|
+
hatches=hatches,
|
40
|
+
sum_column=sum_column,
|
41
|
+
pct_column=pct_column,
|
42
|
+
gene_column=gene_column,
|
43
|
+
fontsize=fontsize,
|
44
|
+
)
|
45
|
+
|
46
|
+
png_name = 'consumption_by_assetclass_piechart_with_phase.png'
|
47
|
+
if directory_to_savefig == None:
|
48
|
+
png_object = io.BytesIO()
|
49
|
+
plt.savefig(png_object, format='png', dpi=200)
|
50
|
+
plt.close()
|
51
|
+
return {png_name: png_object}
|
52
|
+
else:
|
53
|
+
png_path = directory_to_savefig + png_name
|
54
|
+
plt.savefig(png_path, format='png', dpi=200)
|
55
|
+
plt.close()
|
56
|
+
return {png_name: png_path}
|
@@ -0,0 +1,109 @@
|
|
1
|
+
|
2
|
+
import matplotlib.pyplot as plt
|
3
|
+
|
4
|
+
from .plot_ring import plot_ring
|
5
|
+
from .plot_centre_pct import plot_centre_pct
|
6
|
+
from .show_legend import show_legend
|
7
|
+
from .plot_phase_balance import plot_phase_balance
|
8
|
+
|
9
|
+
# cd = {"tomato": '#FF836A',
|
10
|
+
# "aquablue": '#6DC2B3',
|
11
|
+
# "peach": '#FED6D2',
|
12
|
+
# "darkgrey": '#9F9D9C',
|
13
|
+
# "potato": '#FEF8C8',
|
14
|
+
# "cyan": '#B6E4E1',
|
15
|
+
# "dimgray":'#696969',
|
16
|
+
# "Seafoam":'#87e0cf',
|
17
|
+
# "gainsboro":'#DCDCDC',
|
18
|
+
# "grey": '#808080',
|
19
|
+
# "brown": '#964B00',
|
20
|
+
# "black": '#000000'}
|
21
|
+
|
22
|
+
def plot_adaptive_ring_with_phase(df_pre_pie,
|
23
|
+
phase_values_list,
|
24
|
+
colors=None,
|
25
|
+
hatches=None,
|
26
|
+
sum_column = None,
|
27
|
+
pct_column = None,
|
28
|
+
gene_column = None,
|
29
|
+
fontsize=None,
|
30
|
+
):
|
31
|
+
|
32
|
+
if colors is None:
|
33
|
+
from .colors import colors
|
34
|
+
|
35
|
+
if hatches is None:
|
36
|
+
from .hatches import hatches
|
37
|
+
|
38
|
+
if sum_column is None:
|
39
|
+
sum_column = "sum_abs"
|
40
|
+
|
41
|
+
if gene_column is None:
|
42
|
+
gene_column = 'generator'
|
43
|
+
|
44
|
+
fig, ax = plt.subplots(1, 1, figsize=(9, 3.5))
|
45
|
+
|
46
|
+
# gs = fig.add_gridspec(2, hspace=0)
|
47
|
+
# axs = gs.subplots(sharex=True, sharey=True)
|
48
|
+
|
49
|
+
if df_pre_pie[gene_column].nunique() == 2:
|
50
|
+
|
51
|
+
sr_outer = df_pre_pie.loc[df_pre_pie[gene_column]==False, sum_column]
|
52
|
+
sr_inner = df_pre_pie.loc[df_pre_pie[gene_column]==True, sum_column]
|
53
|
+
gap_value = sr_inner.sum() - sr_outer.sum()
|
54
|
+
outer_ring_inner_radius = 0.55
|
55
|
+
asset_total = sr_inner.sum() + sr_outer.sum()
|
56
|
+
else:
|
57
|
+
sr_outer = df_pre_pie[sum_column]
|
58
|
+
gap_value = None
|
59
|
+
outer_ring_inner_radius = 0.50
|
60
|
+
asset_total = sr_outer.sum()
|
61
|
+
|
62
|
+
print('consumption_mwh_subchannel_sum: ', asset_total/1000) # debug
|
63
|
+
|
64
|
+
# plot the outer ring
|
65
|
+
plot_ring(sr_outer, ax,
|
66
|
+
colors=colors,
|
67
|
+
fontsize=fontsize,
|
68
|
+
gap_value=gap_value,
|
69
|
+
outer_radius=1,
|
70
|
+
inner_radius=outer_ring_inner_radius,
|
71
|
+
ann_pct=True,
|
72
|
+
as_inner_ring=False)
|
73
|
+
|
74
|
+
# plot the inner ring and pct text in the middle conditionally
|
75
|
+
if df_pre_pie[gene_column].nunique() == 2:
|
76
|
+
plot_ring(sr_inner, ax,
|
77
|
+
hatch=hatches,
|
78
|
+
fontsize=fontsize,
|
79
|
+
gap_value=-gap_value,
|
80
|
+
outer_radius=0.5,
|
81
|
+
inner_radius=0.3,
|
82
|
+
ann_pct=False,
|
83
|
+
as_inner_ring=True)
|
84
|
+
|
85
|
+
assets_source_pct = sr_inner.sum()/sr_outer.sum()
|
86
|
+
plot_centre_pct(ax, assets_source_pct,
|
87
|
+
fontsize=fontsize)
|
88
|
+
|
89
|
+
show_legend(ax, df_pre_pie,
|
90
|
+
fontsize=fontsize,
|
91
|
+
sum_column=sum_column,
|
92
|
+
pct_column=pct_column)
|
93
|
+
|
94
|
+
# ruler settings
|
95
|
+
ru_x = 0.01 # the x-axis of phase balance ruler
|
96
|
+
ru_y = 0 # the x-axis of phase balance ruler
|
97
|
+
ru_w = 2 # the width of phase balance ruler
|
98
|
+
ru_h = 0.06 # the height of phase balance ruler
|
99
|
+
|
100
|
+
plot_phase_balance(ax, phase_values_list,
|
101
|
+
fontsize=fontsize,
|
102
|
+
ru_x=ru_x,
|
103
|
+
ru_y=ru_y,
|
104
|
+
ru_h=ru_h,
|
105
|
+
ru_w=ru_w)
|
106
|
+
|
107
|
+
fig.tight_layout(pad=0, rect=[-0.2, -0.0, 0.608, 0.99])
|
108
|
+
|
109
|
+
ax.set_ylim(-1.75, 1.6)
|
@@ -0,0 +1,28 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
colors = ['#6DC2B3',
|
4
|
+
'#FF836A',
|
5
|
+
'#FED6D2',
|
6
|
+
'#9F9D9C',
|
7
|
+
'#B6E4E1',
|
8
|
+
'#FEF8C8',
|
9
|
+
'#CFCDCD',
|
10
|
+
'#9DE7BE',
|
11
|
+
'#f7baad',
|
12
|
+
'#b3fff2',
|
13
|
+
'#F7D8BA']
|
14
|
+
|
15
|
+
# backup/archive copy
|
16
|
+
|
17
|
+
cd = {"aquablue": '#6DC2B3',
|
18
|
+
"tomato": '#FF836A',
|
19
|
+
"peach": '#FED6D2',
|
20
|
+
"darkgrey": '#9F9D9C',
|
21
|
+
"cyan": '#B6E4E1',
|
22
|
+
"potato": '#FEF8C8',
|
23
|
+
"dimgray":'#696969',
|
24
|
+
"Seafoam":'#87e0cf',
|
25
|
+
"gainsboro":'#DCDCDC',
|
26
|
+
"grey": '#808080',
|
27
|
+
"brown": '#964B00',
|
28
|
+
"black": '#000000'}
|
@@ -0,0 +1,28 @@
|
|
1
|
+
|
2
|
+
import matplotlib.pyplot as plt
|
3
|
+
|
4
|
+
|
5
|
+
|
6
|
+
def plot_centre_pct(ax, assets_source_pct,
|
7
|
+
fontsize=None):
|
8
|
+
|
9
|
+
if fontsize is None:
|
10
|
+
fontsize = 13
|
11
|
+
|
12
|
+
assets_source_pct_value = assets_source_pct*100
|
13
|
+
|
14
|
+
# print(f'{assets_source_pct_value = }')
|
15
|
+
# ensure the digits are readable
|
16
|
+
if assets_source_pct_value >= 1:
|
17
|
+
assets_source_pct_fmt = f'{assets_source_pct_value:.0f}%'
|
18
|
+
elif assets_source_pct_value >= 0.1:
|
19
|
+
assets_source_pct_fmt = f'{assets_source_pct_value:.1f}%'
|
20
|
+
elif assets_source_pct_value >= 0.01:
|
21
|
+
assets_source_pct_fmt = f'{(assets_source_pct_value*10):.1f}‰'
|
22
|
+
else:
|
23
|
+
assets_source_pct_fmt = f'<0.1‰'
|
24
|
+
|
25
|
+
ax.text(0, 0, assets_source_pct_fmt,
|
26
|
+
fontsize=fontsize,
|
27
|
+
horizontalalignment='center',
|
28
|
+
verticalalignment='center')
|
@@ -0,0 +1,42 @@
|
|
1
|
+
|
2
|
+
# import matplotlib.patches as mpatches
|
3
|
+
|
4
|
+
from .plot_phase_balance_part import plot_phase_balance_part
|
5
|
+
from .get_tick_values import get_tick_values
|
6
|
+
from .get_phase_markers import get_phase_markers
|
7
|
+
|
8
|
+
color_dict = {"grey": '#808080',
|
9
|
+
"brown": '#964B00',
|
10
|
+
"black": '#000000'}
|
11
|
+
|
12
|
+
def plot_phase_balance(ax, phase_values_list,
|
13
|
+
fontsize=None,
|
14
|
+
ru_x=None,
|
15
|
+
ru_y=None,
|
16
|
+
ru_h=None,
|
17
|
+
ru_w=None):
|
18
|
+
|
19
|
+
phase_markers_list = get_phase_markers(phase_values_list)
|
20
|
+
|
21
|
+
part_control_ls = [{'ruler_part_color': color_dict["brown"],
|
22
|
+
'phase_marker': phase_markers_list[0],
|
23
|
+
'part': 'part_one',
|
24
|
+
'part_idx': 1},
|
25
|
+
{'ruler_part_color': color_dict["black"],
|
26
|
+
'phase_marker': phase_markers_list[1],
|
27
|
+
'part': 'part_two',
|
28
|
+
'part_idx': 2},
|
29
|
+
{'ruler_part_color': color_dict["grey"],
|
30
|
+
'phase_marker': phase_markers_list[2],
|
31
|
+
'part': 'part_three',
|
32
|
+
'part_idx': 3}]
|
33
|
+
|
34
|
+
ticks_values_list = get_tick_values(phase_values_list)
|
35
|
+
|
36
|
+
for part_control in part_control_ls:
|
37
|
+
plot_phase_balance_part(ax, ticks_values_list, part_control,
|
38
|
+
fontsize=fontsize,
|
39
|
+
ru_x=ru_x,
|
40
|
+
ru_y=ru_y,
|
41
|
+
ru_h=ru_h,
|
42
|
+
ru_w=ru_w)
|
@@ -0,0 +1,28 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
def get_phase_markers(phase_values_list,
|
4
|
+
var_allowance_pct=None):
|
5
|
+
|
6
|
+
balanced_avg_value = sum(phase_values_list)/3
|
7
|
+
|
8
|
+
if var_allowance_pct is None:
|
9
|
+
var_allowance_pct = 0.04
|
10
|
+
|
11
|
+
var_allowance_value = balanced_avg_value * var_allowance_pct
|
12
|
+
|
13
|
+
markers_list = []
|
14
|
+
for phase_value in phase_values_list:
|
15
|
+
|
16
|
+
if phase_value > (balanced_avg_value + var_allowance_value):
|
17
|
+
marker_text = '>'
|
18
|
+
elif phase_value > (balanced_avg_value - var_allowance_value):
|
19
|
+
marker_text = '='
|
20
|
+
elif phase_value > 0:
|
21
|
+
marker_text = '<'
|
22
|
+
else:
|
23
|
+
marker_text = '?'
|
24
|
+
|
25
|
+
markers_list.append(marker_text)
|
26
|
+
|
27
|
+
return markers_list
|
28
|
+
|
@@ -0,0 +1,44 @@
|
|
1
|
+
|
2
|
+
import pandas as pd
|
3
|
+
|
4
|
+
def get_tick_values(phase_values_list,
|
5
|
+
min_visible_pct=None):
|
6
|
+
|
7
|
+
if min_visible_pct is None:
|
8
|
+
min_visible_pct = 0.077
|
9
|
+
|
10
|
+
df_phase = pd.DataFrame({'phase_value': phase_values_list})
|
11
|
+
|
12
|
+
total_value = df_phase['phase_value'].sum()
|
13
|
+
|
14
|
+
# setup the threshold
|
15
|
+
min_visible_value = total_value * min_visible_pct
|
16
|
+
|
17
|
+
# label the visibility
|
18
|
+
df_phase['min_visible_value'] = min_visible_value
|
19
|
+
df_phase['visible'] = df_phase['phase_value'].gt(min_visible_value)
|
20
|
+
|
21
|
+
# separate by visibility
|
22
|
+
df_phase_visible = df_phase.loc[df_phase['visible']]
|
23
|
+
df_phase_invisible = df_phase.loc[~df_phase['visible']]
|
24
|
+
|
25
|
+
# get adjusted value for invisible part
|
26
|
+
df_phase_invisible['adj_value'] = df_phase_invisible['min_visible_value']
|
27
|
+
|
28
|
+
# get adjusted value for visible part
|
29
|
+
compensation = df_phase_invisible['adj_value'].sum() - df_phase_invisible['phase_value'].sum()
|
30
|
+
visible_orig_sum = df_phase_visible['phase_value'].sum()
|
31
|
+
shrink_pct = (visible_orig_sum - compensation)/visible_orig_sum
|
32
|
+
df_phase_visible['adj_value'] = df_phase_visible['phase_value'] * shrink_pct
|
33
|
+
|
34
|
+
# combine the visible and invisible parts back
|
35
|
+
df_phase_adj = pd.concat([df_phase_visible, df_phase_invisible]).sort_index()
|
36
|
+
|
37
|
+
# get the tick values
|
38
|
+
df_phase_adj['tick_value'] = df_phase_adj['adj_value'].cumsum()
|
39
|
+
|
40
|
+
non_zero_tick_values = df_phase_adj['tick_value'].to_list()
|
41
|
+
|
42
|
+
tick_values_list = [0, *non_zero_tick_values]
|
43
|
+
|
44
|
+
return tick_values_list
|
@@ -0,0 +1,108 @@
|
|
1
|
+
|
2
|
+
import matplotlib.patches as mpatches
|
3
|
+
|
4
|
+
from .ruler_anno_shink_cf import ruler_anno_shink_cf
|
5
|
+
|
6
|
+
def plot_phase_balance_part(ax, ticks_values_list, part_control,
|
7
|
+
fontsize=None,
|
8
|
+
fx=None,
|
9
|
+
fy=None,
|
10
|
+
fs=None,
|
11
|
+
ru_x=None,
|
12
|
+
ru_y=None,
|
13
|
+
ru_h=None,
|
14
|
+
ru_w=None):
|
15
|
+
|
16
|
+
if fontsize is None:
|
17
|
+
fontsize = 13
|
18
|
+
|
19
|
+
# fancy box setting
|
20
|
+
if fx is None:
|
21
|
+
fx = -1 # fancy box x-axis value
|
22
|
+
if fy is None:
|
23
|
+
fy = -1.3 # fancy box y-axis value
|
24
|
+
if fs is None:
|
25
|
+
fs = 1 # fancy box scale factor
|
26
|
+
|
27
|
+
# ruler settings
|
28
|
+
if ru_x is None:
|
29
|
+
ru_x = 0 # the x-axis of benchmarking ruler
|
30
|
+
if ru_y is None:
|
31
|
+
ru_y = 0 # the x-axis of benchmarking ruler
|
32
|
+
if ru_h is None:
|
33
|
+
ru_h = 0.03 # the height of benchmarking ruler
|
34
|
+
if ru_w is None:
|
35
|
+
ru_w = 1 # the width of benchmarking ruler
|
36
|
+
|
37
|
+
ruler_part_color = part_control['ruler_part_color']
|
38
|
+
part = part_control['part']
|
39
|
+
part_idx = part_control['part_idx']
|
40
|
+
phase_marker = part_control['phase_marker']
|
41
|
+
# text_color = part_control['text_color']
|
42
|
+
|
43
|
+
# ticks range
|
44
|
+
ticks_max = max(ticks_values_list)
|
45
|
+
ticks_min = min(ticks_values_list)
|
46
|
+
ticks_range = ticks_max - ticks_min
|
47
|
+
|
48
|
+
# rp_edgecolor = 'k' # edgecolor of the ruler body parts
|
49
|
+
rp_note_fontsize = fontsize - 5 # the fontsize of notes on ruler parts # please note that the other sizes except default 13 haven't been tested yet
|
50
|
+
|
51
|
+
# ruler body - rectangle bar
|
52
|
+
rp_x = ru_x + ru_w * (ticks_values_list[part_idx-1]-ticks_min)/ticks_range # the x-axis value of this part
|
53
|
+
rp_y = ru_y - 0.03 # - 0.1 # 0.14 # the y-axis value of this part
|
54
|
+
rp_pct = (ticks_values_list[part_idx]-ticks_values_list[part_idx-1])/ticks_range
|
55
|
+
rp_w = ru_w * rp_pct # the width value of this part
|
56
|
+
rp_h = ru_h
|
57
|
+
rp_c = ruler_part_color
|
58
|
+
ruler_body_part = mpatches.Rectangle([fx+rp_x*fs, fy+rp_y*fs], rp_w*fs, rp_h*fs,
|
59
|
+
facecolor=rp_c,
|
60
|
+
edgecolor='w',
|
61
|
+
lw=2)
|
62
|
+
ax.add_artist(ruler_body_part)
|
63
|
+
|
64
|
+
# ruler body - annotation on the bar
|
65
|
+
rpa_x = rp_x + rp_w/2.0 # ruler body part annotation - x axis
|
66
|
+
rpa_y = rp_y + 0.076 # ruler body part annotation - y axis
|
67
|
+
bar_width = rp_w*fs
|
68
|
+
# part = 'part_one'
|
69
|
+
rpa_text = ruler_anno_shink_cf(bar_width, part)
|
70
|
+
|
71
|
+
ax.annotate(rpa_text, (fx+fs*rpa_x, fy+fs*rpa_y),
|
72
|
+
color= 'w', # '#B87333', # text_color,
|
73
|
+
weight='extra bold',
|
74
|
+
fontsize=rp_note_fontsize,
|
75
|
+
ha='center',
|
76
|
+
va='center')
|
77
|
+
|
78
|
+
# ruler body - marker symbol below the bar
|
79
|
+
rps_x = rp_x + rp_w/2.0 # ruler body part annotation - x axis
|
80
|
+
sym_pad_y = (-0.18)
|
81
|
+
rps_y = rp_y + sym_pad_y # ruler body part annotation - y axis
|
82
|
+
bar_width = rp_w*fs
|
83
|
+
rp_maker_fontsize = fontsize +2 # make it bigger than the annotation text, to be more visible
|
84
|
+
|
85
|
+
# print(f'{rp_pct = }')
|
86
|
+
|
87
|
+
# balance_value = 1./3
|
88
|
+
# variance_allowance = 0.04/3
|
89
|
+
|
90
|
+
# if rp_pct > (balance_value + variance_allowance):
|
91
|
+
# rps_text = '>'
|
92
|
+
# elif rp_pct > (balance_value - variance_allowance):
|
93
|
+
# rps_text = '='
|
94
|
+
# elif rp_pct > 0:
|
95
|
+
# rps_text = '<'
|
96
|
+
# else:
|
97
|
+
# rps_text = '?'
|
98
|
+
|
99
|
+
# rpa_text = ruler_anno_shink_cf(bar_width, part)
|
100
|
+
symbol_color = 'k'
|
101
|
+
|
102
|
+
ax.annotate(phase_marker, (fx+fs*rps_x, fy+fs*rps_y),
|
103
|
+
color=symbol_color,
|
104
|
+
weight='extra bold',
|
105
|
+
fontsize=rp_maker_fontsize,
|
106
|
+
ha='center',
|
107
|
+
va='center')
|
108
|
+
|
@@ -0,0 +1,29 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
# ruler annotation shinking config
|
4
|
+
|
5
|
+
config_dict = {'full_name': {'size_lim': 0.11*2,
|
6
|
+
'names': {'part_one': "",
|
7
|
+
'part_two': '',
|
8
|
+
'part_three': ''}},
|
9
|
+
'short_name': {'size_lim': 0.035*2,
|
10
|
+
'names': {'part_one': "",
|
11
|
+
'part_two': '',
|
12
|
+
'part_three': ''}},
|
13
|
+
'null_name': {'size_lim': 0.03*2,
|
14
|
+
'names': {'part_one': "",
|
15
|
+
'part_two': '',
|
16
|
+
'part_three': ''}},
|
17
|
+
}
|
18
|
+
|
19
|
+
|
20
|
+
def ruler_anno_shink_cf(bar_width, part):
|
21
|
+
|
22
|
+
if bar_width > config_dict['full_name']['size_lim']:
|
23
|
+
rpa_text = config_dict['full_name']['names'][part]
|
24
|
+
elif bar_width > config_dict['short_name']['size_lim']:
|
25
|
+
rpa_text = config_dict['short_name']['names'][part]
|
26
|
+
else:
|
27
|
+
rpa_text = config_dict['null_name']['names'][part]
|
28
|
+
|
29
|
+
return rpa_text
|
@@ -0,0 +1,35 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
# ruler annotation shinking config
|
4
|
+
|
5
|
+
config_dict = {'full_name': {'size_lim': 0.11,
|
6
|
+
'names': {'part_one': "L1",
|
7
|
+
'part_two': 'L2',
|
8
|
+
'part_three': 'L3'}},
|
9
|
+
'shrink_name': {'size_lim': 0.08,
|
10
|
+
'names': {'part_one': "L1",
|
11
|
+
'part_two': 'L2',
|
12
|
+
'part_three': 'L3'}},
|
13
|
+
'short_name': {'size_lim': 0.06,
|
14
|
+
'names': {'part_one': "1",
|
15
|
+
'part_two': '2',
|
16
|
+
'part_three': '3'}},
|
17
|
+
'null_name': {'size_lim': 0.05,
|
18
|
+
'names': {'part_one': "",
|
19
|
+
'part_two': '',
|
20
|
+
'part_three': ''}},
|
21
|
+
}
|
22
|
+
|
23
|
+
|
24
|
+
def ruler_anno_shink_cf(bar_width, part):
|
25
|
+
|
26
|
+
if bar_width > config_dict['full_name']['size_lim']:
|
27
|
+
rpa_text = config_dict['full_name']['names'][part]
|
28
|
+
elif bar_width > config_dict['shrink_name']['size_lim']:
|
29
|
+
rpa_text = config_dict['shrink_name']['names'][part]
|
30
|
+
elif bar_width > config_dict['short_name']['size_lim']:
|
31
|
+
rpa_text = config_dict['short_name']['names'][part]
|
32
|
+
else:
|
33
|
+
rpa_text = config_dict['null_name']['names'][part]
|
34
|
+
|
35
|
+
return rpa_text
|