Code view:

A painting is a person's account of this edit as text, recorded independently of the node mapping - a rendering often has several equally defensible answers where the mapping has one. Deletions and insertions carry no position on the opposite side in a painting, so that panel draws no caret for them.

Before

…lines 1–978 unchanged (978 lines)
979 "Excel filters merged cells by showing only the first row. "
980 "'autofilter' and 'merge_cells' cannot "
981 "be used simultaneously."
982 )
983 else:
984 startrowsoffset = self.columns.nlevels
985 # multindex columns add a blank row between header and data
986 endrowsoffset = self.columns.nlevels + 1
987 else:
988 # no index column
989 indexoffset = -1
990 start = f"{self._num2excel(startcol)}{startrow + startrowsoffset}"
991 autofilter_end_column = self._num2excel(startcol + num_cols + indexoffset)
…lines 992–1025 unchanged (34 lines)

After

…lines 1–978 unchanged (978 lines)
979 "Excel filters merged cells by showing only the first row. "
980 "'autofilter' and 'merge_cells' cannot "
981 "be used simultaneously."
982 )
983 else:
984 startrowsoffset = self.columns.nlevels
985 # multiindex columns add a blank row between header and data
986 endrowsoffset = self.columns.nlevels + 1
987 else:
988 # no index column
989 indexoffset = -1
990 start = f"{self._num2excel(startcol)}{startrow + startrowsoffset}"
991 autofilter_end_column = self._num2excel(startcol + num_cols + indexoffset)
…lines 992–1025 unchanged (34 lines)

Before

module
expression_statement
string
string_start "\"\"\""
string_content "\nUtilities for conversion to writer-agnostic Excel represent"...
string_end "\"\"\""
future_import_statement
from "from"
__future__ "__future__"
import "import"
dotted_name
identifier "annotations"
import_statement
import "import"
dotted_name
identifier "functools"
import_statement
import "import"
dotted_name
identifier "itertools"
import_statement
import "import"
dotted_name
identifier "re"
import_from_statement
from "from"
dotted_name
identifier "typing"
import "import"
( "("
dotted_name
identifier "TYPE_CHECKING"
, ","
dotted_name
identifier "Any"
, ","
dotted_name
identifier "cast"
, ","
) ")"
import_statement
import "import"
dotted_name
identifier "warnings"
import_statement
import "import"
aliased_import
dotted_name
identifier "numpy"
as "as"
identifier "np"
import_from_statement
from "from"
dotted_name
identifier "pandas"
. "."
identifier "_libs"
. "."
identifier "lib"
import "import"
dotted_name
identifier "is_list_like"
import_from_statement
from "from"
dotted_name
identifier "pandas"
. "."
identifier "util"
. "."
identifier "_exceptions"
import "import"
dotted_name
identifier "find_stack_level"
import_from_statement
from "from"
dotted_name
identifier "pandas"
. "."
identifier "core"
. "."
identifier "dtypes"
import "import"
dotted_name
identifier "missing"
import_from_statement
from "from"
dotted_name
identifier "pandas"
. "."
identifier "core"
. "."
identifier "dtypes"
. "."
identifier "common"
import "import"
( "("
dotted_name
identifier "is_float"
, ","
dotted_name
identifier "is_scalar"
, ","
) ")"
import_from_statement (+22 nodes collapsed)
import_statement
import "import"
aliased_import
dotted_name
identifier "pandas"
. "."
identifier "core"
. "."
identifier "common"
as "as"
identifier "com"
import_from_statement
from "from"
dotted_name
identifier "pandas"
. "."
identifier "io"
. "."
identifier "formats"
. "."
identifier "_color_data"
import "import"
dotted_name
identifier "CSS4_COLORS"
import_from_statement
from "from"
dotted_name
identifier "pandas"
. "."
identifier "io"
. "."
identifier "formats"
. "."
identifier "css"
import "import"
( "("
dotted_name
identifier "CSSResolver"
, ","
dotted_name
identifier "CSSWarning"
, ","
) ")"
import_from_statement
from "from"
dotted_name
identifier "pandas"
. "."
identifier "io"
. "."
identifier "formats"
. "."
identifier "format"
import "import"
dotted_name
identifier "get_level_lengths"
if_statement (+60 nodes collapsed)
class_definition (+148 nodes collapsed)
class_definition (+219 nodes collapsed)
class_definition (+3243 nodes collapsed)
class_definition
class "class"
identifier "ExcelFormatter"
: ":"
block
expression_statement
string
string_start "\"\"\""
string_content "\n Class for formatting a DataFrame to a list of ExcelCell"...
string_end "\"\"\""
expression_statement
assignment
identifier "max_rows"
= "="
binary_operator
integer "2"
** "**"
integer "20"
expression_statement
assignment
identifier "max_cols"
= "="
binary_operator
integer "2"
** "**"
integer "14"
function_definition (+479 nodes collapsed)
function_definition (+173 nodes collapsed)
function_definition (+439 nodes collapsed)
function_definition (+285 nodes collapsed)
function_definition (+250 nodes collapsed)
function_definition (+60 nodes collapsed)
function_definition (+370 nodes collapsed)
function_definition (+669 nodes collapsed)
decorated_definition (+32 nodes collapsed)
function_definition (+153 nodes collapsed)
function_definition (+72 nodes collapsed)
function_definition (+101 nodes collapsed)
function_definition
def "def"
identifier "write"
parameters (+99 nodes collapsed)
-> "->"
type
none "None"
: ":"
block
expression_statement
string
string_start "\"\"\""
string_content "\n writer : path-like, file-like, or ExcelWriter objec"...
string_end "\"\"\""
import_from_statement
from "from"
dotted_name
identifier "pandas"
. "."
identifier "io"
. "."
identifier "excel"
import "import"
dotted_name
identifier "ExcelWriter"
expression_statement
assignment
pattern_list
identifier "num_rows"
, ","
identifier "num_cols"
= "="
attribute
attribute
identifier "self"
. "."
identifier "df"
. "."
identifier "shape"
if_statement (+61 nodes collapsed)
if_statement
if "if"
attribute
identifier "self"
. "."
identifier "autofilter"
: ":"
comment "# default offset for header row"
block
expression_statement
assignment
identifier "startrowsoffset"
= "="
integer "1"
expression_statement
assignment
identifier "endrowsoffset"
= "="
integer "1"
if_statement
if "if"
comparison_operator
identifier "num_cols"
== "=="
integer "0"
: ":"
block
expression_statement
assignment
identifier "indexoffset"
= "="
integer "0"
elif_clause
elif "elif"
attribute
identifier "self"
. "."
identifier "index"
: ":"
block
expression_statement
assignment
identifier "indexoffset"
= "="
integer "0"
if_statement (+67 nodes collapsed)
if_statement
if "if"
call
identifier "isinstance"
argument_list
( "("
attribute
identifier "self"
. "."
identifier "columns"
, ","
identifier "MultiIndex"
) ")"
: ":"
block
if_statement
if "if"
attribute
identifier "self"
. "."
identifier "merge_cells"
: ":"
block (+21 nodes collapsed)
else_clause
else "else"
: ":"
block
expression_statement
assignment
identifier "startrowsoffset"
= "="
attribute
attribute
identifier "self"
. "."
identifier "columns"
. "."
identifier "nlevels"
comment "# multindex columns add a blank row between header and data"
expression_statement
assignment
identifier "endrowsoffset"
= "="
binary_operator
attribute
attribute
identifier "self"
. "."
identifier "columns"
. "."
identifier "nlevels"
+ "+"
integer "1"
else_clause
else "else"
: ":"
comment "# no index column"
block
expression_statement
assignment
identifier "indexoffset"
= "="
unary_operator
- "-"
integer "1"
expression_statement (+26 nodes collapsed)
expression_statement
assignment
identifier "autofilter_end_column"
= "="
call
attribute
identifier "self"
. "."
identifier "_num2excel"
argument_list
( "("
binary_operator
binary_operator
identifier "startcol"
+ "+"
identifier "num_cols"
+ "+"
identifier "indexoffset"
) ")"
expression_statement (+21 nodes collapsed)
expression_statement
assignment
identifier "autofilter_range"
= "="
string
string_start "f\""
interpolation
{ "{"
identifier "start"
} "}"
string_content ":"
interpolation
{ "{"
identifier "end"
} "}"
string_end "\""
else_clause
else "else"
: ":"
block
expression_statement
assignment
identifier "autofilter_range"
= "="
none "None"
if_statement
if "if"
comparison_operator
identifier "engine_kwargs"
is "is"
none "None"
: ":"
block
expression_statement
assignment
identifier "engine_kwargs"
= "="
dictionary
{ "{"
} "}"
expression_statement
assignment
identifier "formatted_cells"
= "="
call
attribute
identifier "self"
. "."
identifier "get_formatted_cells"
argument_list
( "("
) ")"
if_statement (+52 nodes collapsed)
try_statement (+56 nodes collapsed)

After

module
expression_statement
string
string_start "\"\"\""
string_content "\nUtilities for conversion to writer-agnostic Excel represent"...
string_end "\"\"\""
future_import_statement
from "from"
__future__ "__future__"
import "import"
dotted_name
identifier "annotations"
import_statement
import "import"
dotted_name
identifier "functools"
import_statement
import "import"
dotted_name
identifier "itertools"
import_statement
import "import"
dotted_name
identifier "re"
import_from_statement
from "from"
dotted_name
identifier "typing"
import "import"
( "("
dotted_name
identifier "TYPE_CHECKING"
, ","
dotted_name
identifier "Any"
, ","
dotted_name
identifier "cast"
, ","
) ")"
import_statement
import "import"
dotted_name
identifier "warnings"
import_statement
import "import"
aliased_import
dotted_name
identifier "numpy"
as "as"
identifier "np"
import_from_statement
from "from"
dotted_name
identifier "pandas"
. "."
identifier "_libs"
. "."
identifier "lib"
import "import"
dotted_name
identifier "is_list_like"
import_from_statement
from "from"
dotted_name
identifier "pandas"
. "."
identifier "util"
. "."
identifier "_exceptions"
import "import"
dotted_name
identifier "find_stack_level"
import_from_statement
from "from"
dotted_name
identifier "pandas"
. "."
identifier "core"
. "."
identifier "dtypes"
import "import"
dotted_name
identifier "missing"
import_from_statement
from "from"
dotted_name
identifier "pandas"
. "."
identifier "core"
. "."
identifier "dtypes"
. "."
identifier "common"
import "import"
( "("
dotted_name
identifier "is_float"
, ","
dotted_name
identifier "is_scalar"
, ","
) ")"
import_from_statement (+22 nodes collapsed)
import_statement
import "import"
aliased_import
dotted_name
identifier "pandas"
. "."
identifier "core"
. "."
identifier "common"
as "as"
identifier "com"
import_from_statement
from "from"
dotted_name
identifier "pandas"
. "."
identifier "io"
. "."
identifier "formats"
. "."
identifier "_color_data"
import "import"
dotted_name
identifier "CSS4_COLORS"
import_from_statement
from "from"
dotted_name
identifier "pandas"
. "."
identifier "io"
. "."
identifier "formats"
. "."
identifier "css"
import "import"
( "("
dotted_name
identifier "CSSResolver"
, ","
dotted_name
identifier "CSSWarning"
, ","
) ")"
import_from_statement
from "from"
dotted_name
identifier "pandas"
. "."
identifier "io"
. "."
identifier "formats"
. "."
identifier "format"
import "import"
dotted_name
identifier "get_level_lengths"
if_statement (+60 nodes collapsed)
class_definition (+148 nodes collapsed)
class_definition (+219 nodes collapsed)
class_definition (+3243 nodes collapsed)
class_definition
class "class"
identifier "ExcelFormatter"
: ":"
block
expression_statement
string
string_start "\"\"\""
string_content "\n Class for formatting a DataFrame to a list of ExcelCell"...
string_end "\"\"\""
expression_statement
assignment
identifier "max_rows"
= "="
binary_operator
integer "2"
** "**"
integer "20"
expression_statement
assignment
identifier "max_cols"
= "="
binary_operator
integer "2"
** "**"
integer "14"
function_definition (+479 nodes collapsed)
function_definition (+173 nodes collapsed)
function_definition (+439 nodes collapsed)
function_definition (+285 nodes collapsed)
function_definition (+250 nodes collapsed)
function_definition (+60 nodes collapsed)
function_definition (+370 nodes collapsed)
function_definition (+669 nodes collapsed)
decorated_definition (+32 nodes collapsed)
function_definition (+153 nodes collapsed)
function_definition (+72 nodes collapsed)
function_definition (+101 nodes collapsed)
function_definition
def "def"
identifier "write"
parameters (+99 nodes collapsed)
-> "->"
type
none "None"
: ":"
block
expression_statement
string
string_start "\"\"\""
string_content "\n writer : path-like, file-like, or ExcelWriter objec"...
string_end "\"\"\""
import_from_statement
from "from"
dotted_name
identifier "pandas"
. "."
identifier "io"
. "."
identifier "excel"
import "import"
dotted_name
identifier "ExcelWriter"
expression_statement
assignment
pattern_list
identifier "num_rows"
, ","
identifier "num_cols"
= "="
attribute
attribute
identifier "self"
. "."
identifier "df"
. "."
identifier "shape"
if_statement (+61 nodes collapsed)
if_statement
if "if"
attribute
identifier "self"
. "."
identifier "autofilter"
: ":"
comment "# default offset for header row"
block
expression_statement
assignment
identifier "startrowsoffset"
= "="
integer "1"
expression_statement
assignment
identifier "endrowsoffset"
= "="
integer "1"
if_statement
if "if"
comparison_operator
identifier "num_cols"
== "=="
integer "0"
: ":"
block
expression_statement
assignment
identifier "indexoffset"
= "="
integer "0"
elif_clause
elif "elif"
attribute
identifier "self"
. "."
identifier "index"
: ":"
block
expression_statement
assignment
identifier "indexoffset"
= "="
integer "0"
if_statement (+67 nodes collapsed)
if_statement
if "if"
call
identifier "isinstance"
argument_list
( "("
attribute
identifier "self"
. "."
identifier "columns"
, ","
identifier "MultiIndex"
) ")"
: ":"
block
if_statement
if "if"
attribute
identifier "self"
. "."
identifier "merge_cells"
: ":"
block (+21 nodes collapsed)
else_clause
else "else"
: ":"
block
expression_statement
assignment
identifier "startrowsoffset"
= "="
attribute
attribute
identifier "self"
. "."
identifier "columns"
. "."
identifier "nlevels"
comment "# multiindex columns add a blank row between header and data"
expression_statement
assignment
identifier "endrowsoffset"
= "="
binary_operator
attribute
attribute
identifier "self"
. "."
identifier "columns"
. "."
identifier "nlevels"
+ "+"
integer "1"
else_clause
else "else"
: ":"
comment "# no index column"
block
expression_statement
assignment
identifier "indexoffset"
= "="
unary_operator
- "-"
integer "1"
expression_statement (+26 nodes collapsed)
expression_statement
assignment
identifier "autofilter_end_column"
= "="
call
attribute
identifier "self"
. "."
identifier "_num2excel"
argument_list
( "("
binary_operator
binary_operator
identifier "startcol"
+ "+"
identifier "num_cols"
+ "+"
identifier "indexoffset"
) ")"
expression_statement (+21 nodes collapsed)
expression_statement
assignment
identifier "autofilter_range"
= "="
string
string_start "f\""
interpolation
{ "{"
identifier "start"
} "}"
string_content ":"
interpolation
{ "{"
identifier "end"
} "}"
string_end "\""
else_clause
else "else"
: ":"
block
expression_statement
assignment
identifier "autofilter_range"
= "="
none "None"
if_statement
if "if"
comparison_operator
identifier "engine_kwargs"
is "is"
none "None"
: ":"
block
expression_statement
assignment
identifier "engine_kwargs"
= "="
dictionary
{ "{"
} "}"
expression_statement
assignment
identifier "formatted_cells"
= "="
call
attribute
identifier "self"
. "."
identifier "get_formatted_cells"
argument_list
( "("
) ")"
if_statement (+52 nodes collapsed)
try_statement (+56 nodes collapsed)