From e57d3ef9812f0e42c600f16f9f908b34297e7716 Mon Sep 17 00:00:00 2001 From: David Chang Date: Mon, 19 Feb 2024 23:33:51 +0800 Subject: [PATCH] ver Feb19thv5 correcting SheetCopilot data and annotations --- desktop_env/evaluators/metrics/utils.py | 38 +++++++++++++------ .../1273e544-688f-496b-8d89-3e0f40aa0606.json | 6 +-- .../163789f0-c895-4a50-8207-17cbdd56ec38.json | 12 +++--- 3 files changed, 35 insertions(+), 21 deletions(-) diff --git a/desktop_env/evaluators/metrics/utils.py b/desktop_env/evaluators/metrics/utils.py index 8afffb1..6270ccf 100644 --- a/desktop_env/evaluators/metrics/utils.py +++ b/desktop_env/evaluators/metrics/utils.py @@ -1,12 +1,13 @@ import logging import zipfile from typing import Any, TypeVar, Union, Iterable, Optional, Callable -from typing import Dict, List, Set, Match +from typing import Dict, List, Set, Match, Tuple from urllib.parse import urlparse, urlunparse import re import functools import operator import builtins +import itertools import lxml.cssselect import lxml.etree @@ -20,7 +21,7 @@ from openpyxl.worksheet.filters import AutoFilter, SortState from openpyxl.worksheet.cell_range import MultiCellRange from openpyxl.worksheet.dimensions import DimensionHolder from openpyxl.formatting.formatting import ConditionalFormattingList -#from openpyxl.utils import get_column_letter +from openpyxl.utils import coordinate_to_tuple from openpyxl.cell.cell import Cell from openpyxl.styles.differential import DifferentialStyle from openpyxl.pivot.table import TableDefinition as PivotTableDefinition @@ -176,6 +177,7 @@ def load_charts(xlsx_file: Workbook, sheet_name: str, **options) -> Dict[str, An except: info["ztitle"] = None chart_set[series] = info + logger.debug(".[%s].charts: %s", sheet_name, repr(chart_set)) return chart_set # }}} function load_charts # @@ -183,7 +185,7 @@ def load_charts(xlsx_file: Workbook, sheet_name: str, **options) -> Dict[str, An # name: str # show_total, show_empty_row, show_empty_col, show_headers: bool # location: str -# selection: if the concrete item selection should be checked, a list of list of tuple like (bool, index) will be returned +# selection: if the concrete item selection should be checked, a list of set of tuple like (bool, index) will be returned; list will be returned instead of set if "ordered" is specified # filter: if the filter fields should be checked; fields indices will be return in `filter_fields` item # col_fields: indices # row_fields: indices @@ -215,14 +217,27 @@ def load_pivot_tables(xlsx_file: Workbook, sheet_name: str, **options) -> Dict[s pivot_set: Dict[str, Any] = {} pivot_props: Set[str] = set(options.get("pivot_props", [])) for pvt in pivots: - name: str = pvt.name + raw_selection: List[List[tuple[Optional[bool], int]]] =\ + [ [(itm.h, itm.x) for itm in f.items if itm.x is not None]\ + for f in pvt.pivotFields + ] + raw__selection: List[List[tuple[Optional[bool], int]]] = list(itertools.dropwhile(lambda r: len(r)==0, raw_selection)) + left_bias = len(raw_selection)-len(raw__selection) + selection: List[List[tuple[Optional[bool], int]]] = list((itertools.dropwhile(lambda r: len(r)==0, reversed(raw__selection))))[::-1] + right_bias = len(raw__selection)-len(selection) cache_source: PivotCacheSource = pvt.cache.cacheSource - source: str = "{:};{:};{:}".format(cache_source.type, cache_source.worksheetSource.ref, cache_source.worksheetSource.sheet) + cell_range1: str + cell_range2: str + cell_range1, cell_range2 = cache_source.worksheetSource.ref.split(":") + cell_range1: Tuple[int, int] = coordinate_to_tuple(cell_range1) + cell_range1 = (cell_range1[0], cell_range1[1]+left_bias) + cell_range2: Tuple[int, int] = coordinate_to_tuple(cell_range2) + cell_range2 = (cell_range2[0], cell_range2[1]-right_bias) + source: str = "{:};{:}:{:};{:}".format(cache_source.type, cell_range1, cell_range2, cache_source.worksheetSource.sheet) info: Dict[str, Any] = {} - #info["source"] = if "name" in pivot_props: - info["name"] = name + info["name"] = pvt.name if "show_total" in pivot_props: info["show_total"] = pvt.visualTotals @@ -236,23 +251,22 @@ def load_pivot_tables(xlsx_file: Workbook, sheet_name: str, **options) -> Dict[s if "location" in pivot_props: info["location"] = pvt.location if "filter" in pivot_props or "selection" in pivot_props: - info["selection"] = [ [(itm.h, itm.x) for itm in f.items]\ - for f in pvt.pivotFields - ] + info["selection"] = selection if "ordered" in pivot_props else list(set(r) for r in selection) if "filter" in pivot_props: info["filter_fields"] = set(f.fld for f in pvt.pageFields) if "col_fields" in pivot_props: info["col_fields"] = [f.x for f in pvt.colFields] if "row_fields" in pivot_props: - info["row_fields"] = [f.x for f in pvt.rowFields] + info["row_fields"] = [f.x-left_bias for f in pvt.rowFields] if "data_fields" in pivot_props: - info["data_fields"] = [ "{:d};{:};{:};{:}".format( f.fld, f.name if "data_fields_name" in pivot_props else "" + info["data_fields"] = [ "{:d};{:};{:};{:}".format( f.fld-left_bias, f.name if "data_fields_name" in pivot_props else "" , f.subtotal, f.showDataAs )\ for f in pvt.dataFields ] pivot_set[source] = info + logger.debug(".[%s].pivots: %s", sheet_name, repr(pivot_set)) return pivot_set # }}} function load_pivot_tables # diff --git a/evaluation_examples/examples/sheetcopilot/1273e544-688f-496b-8d89-3e0f40aa0606.json b/evaluation_examples/examples/sheetcopilot/1273e544-688f-496b-8d89-3e0f40aa0606.json index 1f2369c..f5d1d67 100644 --- a/evaluation_examples/examples/sheetcopilot/1273e544-688f-496b-8d89-3e0f40aa0606.json +++ b/evaluation_examples/examples/sheetcopilot/1273e544-688f-496b-8d89-3e0f40aa0606.json @@ -73,10 +73,10 @@ "rules": [ { "type": "sheet_data", - "sheet_idx0": 0, - "sheet_idx1": "EI0" + "sheet_idx0": "RNSheet2", + "sheet_idx1": "ENSheet2" } ] } } -} \ No newline at end of file +} diff --git a/evaluation_examples/examples/sheetcopilot/163789f0-c895-4a50-8207-17cbdd56ec38.json b/evaluation_examples/examples/sheetcopilot/163789f0-c895-4a50-8207-17cbdd56ec38.json index dfd9341..22f2087 100644 --- a/evaluation_examples/examples/sheetcopilot/163789f0-c895-4a50-8207-17cbdd56ec38.json +++ b/evaluation_examples/examples/sheetcopilot/163789f0-c895-4a50-8207-17cbdd56ec38.json @@ -1,7 +1,7 @@ { "id": "163789f0-c895-4a50-8207-17cbdd56ec38", "snapshot": "libreoffice_calc", - "instruction": "Create a pivot table in a new sheet to calculate the sum of revenue for each product. In this new sheet, plot a horizontal bar chart illustrating the revenue sums in the pivot table. Turn off the legend and then set the chart tile as \"Revenue of each product\".", + "instruction": "Create a pivot table in a new sheet (Sheet2) to calculate the sum of revenue for each product. In this new sheet, plot a horizontal bar chart illustrating the revenue sums in the pivot table. Turn off the legend and then set the chart tile as \"Revenue of each product\".", "source": "SheetCopilot@176", "config": [ { @@ -73,8 +73,8 @@ "rules": [ { "type": "chart", - "sheet_idx0": 0, - "sheet_idx1": "EI0", + "sheet_idx0": "RNSheet2", + "sheet_idx1": "ENSheet2", "chart_props": [ "type", "legend", @@ -83,8 +83,8 @@ }, { "type": "pivot_table", - "sheet_idx0": 0, - "sheet_idx1": "EI0", + "sheet_idx0": "RNSheet2", + "sheet_idx1": "ENSheet2", "pivot_props": [ "col_fields", "filter", @@ -95,4 +95,4 @@ ] } } -} \ No newline at end of file +}