From 5ab0fd1147c17ae97cc356ea9c0695a647d93930 Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Sat, 14 Feb 2026 13:09:49 -0800 Subject: [PATCH 01/30] feat: forward batch_size parameter to PyArrow Scanner Add batch_size parameter to _task_to_record_batches, _record_batches_from_scan_tasks_and_deletes, ArrowScan.to_record_batches, and DataScan.to_arrow_batch_reader so users can control the number of rows per RecordBatch returned by PyArrow's Scanner. Closes partially #3036 Co-Authored-By: Claude Opus 4.6 --- mkdocs/docs/api.md | 16 + pyiceberg/io/pyarrow.py | 24 +- pyiceberg/table/__init__.py | 7 +- tests/io/test_pyarrow.py | 58 + vendor/fb303/FacebookService.py | 61 +- vendor/hive_metastore/ThriftHiveMetastore.py | 1337 +++++++----------- vendor/hive_metastore/ttypes.py | 626 ++++---- 7 files changed, 971 insertions(+), 1158 deletions(-) diff --git a/mkdocs/docs/api.md b/mkdocs/docs/api.md index 506547fcd6..dadaac93b4 100644 --- a/mkdocs/docs/api.md +++ b/mkdocs/docs/api.md @@ -355,6 +355,13 @@ for buf in tbl.scan().to_arrow_batch_reader(): print(f"Buffer contains {len(buf)} rows") ``` +You can control the number of rows per batch using the `batch_size` parameter: + +```python +for buf in tbl.scan().to_arrow_batch_reader(batch_size=1000): + print(f"Buffer contains {len(buf)} rows") +``` + To avoid any type inconsistencies during writing, you can convert the Iceberg table schema to Arrow: ```python @@ -1619,6 +1626,15 @@ table.scan( ).to_arrow_batch_reader() ``` +The `batch_size` parameter controls the maximum number of rows per RecordBatch (default is PyArrow's 131,072 rows): + +```python +table.scan( + row_filter=GreaterThanOrEqual("trip_distance", 10.0), + selected_fields=("VendorID", "tpep_pickup_datetime", "tpep_dropoff_datetime"), +).to_arrow_batch_reader(batch_size=1000) +``` + ### Pandas diff --git a/pyiceberg/io/pyarrow.py b/pyiceberg/io/pyarrow.py index a120c3b776..e7c0da5262 100644 --- a/pyiceberg/io/pyarrow.py +++ b/pyiceberg/io/pyarrow.py @@ -1581,6 +1581,7 @@ def _task_to_record_batches( partition_spec: PartitionSpec | None = None, format_version: TableVersion = TableProperties.DEFAULT_FORMAT_VERSION, downcast_ns_timestamp_to_us: bool | None = None, + batch_size: int | None = None, ) -> Iterator[pa.RecordBatch]: arrow_format = _get_file_format(task.file.file_format, pre_buffer=True, buffer_size=(ONE_MEGABYTE * 8)) with io.new_input(task.file.file_path).open() as fin: @@ -1612,14 +1613,18 @@ def _task_to_record_batches( file_project_schema = prune_columns(file_schema, projected_field_ids, select_full_types=False) - fragment_scanner = ds.Scanner.from_fragment( - fragment=fragment, - schema=physical_schema, + scanner_kwargs: dict[str, Any] = { + "fragment": fragment, + "schema": physical_schema, # This will push down the query to Arrow. # But in case there are positional deletes, we have to apply them first - filter=pyarrow_filter if not positional_deletes else None, - columns=[col.name for col in file_project_schema.columns], - ) + "filter": pyarrow_filter if not positional_deletes else None, + "columns": [col.name for col in file_project_schema.columns], + } + if batch_size is not None: + scanner_kwargs["batch_size"] = batch_size + + fragment_scanner = ds.Scanner.from_fragment(**scanner_kwargs) next_index = 0 batches = fragment_scanner.to_batches() @@ -1756,7 +1761,7 @@ def to_table(self, tasks: Iterable[FileScanTask]) -> pa.Table: return result - def to_record_batches(self, tasks: Iterable[FileScanTask]) -> Iterator[pa.RecordBatch]: + def to_record_batches(self, tasks: Iterable[FileScanTask], batch_size: int | None = None) -> Iterator[pa.RecordBatch]: """Scan the Iceberg table and return an Iterator[pa.RecordBatch]. Returns an Iterator of pa.RecordBatch with data from the Iceberg table @@ -1783,7 +1788,7 @@ def batches_for_task(task: FileScanTask) -> list[pa.RecordBatch]: # Materialize the iterator here to ensure execution happens within the executor. # Otherwise, the iterator would be lazily consumed later (in the main thread), # defeating the purpose of using executor.map. - return list(self._record_batches_from_scan_tasks_and_deletes([task], deletes_per_file)) + return list(self._record_batches_from_scan_tasks_and_deletes([task], deletes_per_file, batch_size)) limit_reached = False for batches in executor.map(batches_for_task, tasks): @@ -1803,7 +1808,7 @@ def batches_for_task(task: FileScanTask) -> list[pa.RecordBatch]: break def _record_batches_from_scan_tasks_and_deletes( - self, tasks: Iterable[FileScanTask], deletes_per_file: dict[str, list[ChunkedArray]] + self, tasks: Iterable[FileScanTask], deletes_per_file: dict[str, list[ChunkedArray]], batch_size: int | None = None ) -> Iterator[pa.RecordBatch]: total_row_count = 0 for task in tasks: @@ -1822,6 +1827,7 @@ def _record_batches_from_scan_tasks_and_deletes( self._table_metadata.specs().get(task.file.spec_id), self._table_metadata.format_version, self._downcast_ns_timestamp_to_us, + batch_size, ) for batch in batches: if self._limit is not None: diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index cc0d9ff341..63fd1509e4 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -2157,13 +2157,16 @@ def to_arrow(self) -> pa.Table: self.table_metadata, self.io, self.projection(), self.row_filter, self.case_sensitive, self.limit ).to_table(self.plan_files()) - def to_arrow_batch_reader(self) -> pa.RecordBatchReader: + def to_arrow_batch_reader(self, batch_size: int | None = None) -> pa.RecordBatchReader: """Return an Arrow RecordBatchReader from this DataScan. For large results, using a RecordBatchReader requires less memory than loading an Arrow Table for the same DataScan, because a RecordBatch is read one at a time. + Args: + batch_size: The number of rows per batch. If None, PyArrow's default is used. + Returns: pa.RecordBatchReader: Arrow RecordBatchReader from the Iceberg table's DataScan which can be used to read a stream of record batches one by one. @@ -2175,7 +2178,7 @@ def to_arrow_batch_reader(self) -> pa.RecordBatchReader: target_schema = schema_to_pyarrow(self.projection()) batches = ArrowScan( self.table_metadata, self.io, self.projection(), self.row_filter, self.case_sensitive, self.limit - ).to_record_batches(self.plan_files()) + ).to_record_batches(self.plan_files(), batch_size=batch_size) return pa.RecordBatchReader.from_batches( target_schema, diff --git a/tests/io/test_pyarrow.py b/tests/io/test_pyarrow.py index 04bc3ecfac..fb03f785c6 100644 --- a/tests/io/test_pyarrow.py +++ b/tests/io/test_pyarrow.py @@ -3048,6 +3048,64 @@ def _expected_batch(unit: str) -> pa.RecordBatch: assert _expected_batch("ns" if format_version > 2 else "us").equals(actual_result) +def test_task_to_record_batches_with_batch_size(tmpdir: str) -> None: + """Test that batch_size controls the number of rows per batch.""" + num_rows = 1000 + arrow_table = pa.table( + {"col": pa.array(range(num_rows))}, + schema=pa.schema([pa.field("col", pa.int64(), nullable=False, metadata={PYARROW_PARQUET_FIELD_ID_KEY: "1"})]), + ) + data_file = _write_table_to_data_file(f"{tmpdir}/test_batch_size.parquet", arrow_table.schema, arrow_table) + table_schema = Schema(NestedField(1, "col", LongType(), required=True)) + + batches = list( + _task_to_record_batches( + PyArrowFileIO(), + FileScanTask(data_file), + bound_row_filter=AlwaysTrue(), + projected_schema=table_schema, + table_schema=table_schema, + projected_field_ids={1}, + positional_deletes=None, + case_sensitive=True, + batch_size=100, + ) + ) + + assert len(batches) > 1 + for batch in batches: + assert len(batch) <= 100 + assert sum(len(b) for b in batches) == num_rows + + +def test_task_to_record_batches_default_batch_size(tmpdir: str) -> None: + """Test that batch_size=None uses PyArrow default (single batch for small files).""" + num_rows = 100 + arrow_table = pa.table( + {"col": pa.array(range(num_rows))}, + schema=pa.schema([pa.field("col", pa.int64(), nullable=False, metadata={PYARROW_PARQUET_FIELD_ID_KEY: "1"})]), + ) + data_file = _write_table_to_data_file(f"{tmpdir}/test_default_batch_size.parquet", arrow_table.schema, arrow_table) + table_schema = Schema(NestedField(1, "col", LongType(), required=True)) + + batches = list( + _task_to_record_batches( + PyArrowFileIO(), + FileScanTask(data_file), + bound_row_filter=AlwaysTrue(), + projected_schema=table_schema, + table_schema=table_schema, + projected_field_ids={1}, + positional_deletes=None, + case_sensitive=True, + ) + ) + + # With default batch_size, a small file should produce a single batch + assert len(batches) == 1 + assert len(batches[0]) == num_rows + + def test_parse_location_defaults() -> None: """Test that parse_location uses defaults.""" diff --git a/vendor/fb303/FacebookService.py b/vendor/fb303/FacebookService.py index c46b0a82a2..7115e8a0d8 100644 --- a/vendor/fb303/FacebookService.py +++ b/vendor/fb303/FacebookService.py @@ -50,21 +50,18 @@ def getName(self): Returns a descriptive name of the service """ - pass def getVersion(self): """ Returns the version of the service """ - pass def getStatus(self): """ Gets the status of this service """ - pass def getStatusDetails(self): """ @@ -72,14 +69,12 @@ def getStatusDetails(self): the dead or warning state, or what is being started or stopped. """ - pass def getCounters(self): """ Gets the counters for this service """ - pass def getCounter(self, key): """ @@ -89,7 +84,6 @@ def getCounter(self, key): - key """ - pass def setOption(self, key, value): """ @@ -100,7 +94,6 @@ def setOption(self, key, value): - value """ - pass def getOption(self, key): """ @@ -110,14 +103,12 @@ def getOption(self, key): - key """ - pass def getOptions(self): """ Gets all options """ - pass def getCpuProfile(self, profileDurationInSec): """ @@ -128,28 +119,24 @@ def getCpuProfile(self, profileDurationInSec): - profileDurationInSec """ - pass def aliveSince(self): """ Returns the unix time that the server has been running since """ - pass def reinitialize(self): """ Tell the server to reload its configuration, reopen log files, etc """ - pass def shutdown(self): """ Suggest a shutdown to the server """ - pass class Client(Iface): @@ -890,7 +877,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -958,7 +945,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1011,7 +998,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1079,7 +1066,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1132,7 +1119,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1198,7 +1185,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1251,7 +1238,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1319,7 +1306,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1372,7 +1359,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1452,7 +1439,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1528,7 +1515,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1603,7 +1590,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1693,7 +1680,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1754,7 +1741,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1822,7 +1809,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1899,7 +1886,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1952,7 +1939,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2036,7 +2023,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2110,7 +2097,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2187,7 +2174,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2240,7 +2227,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2306,7 +2293,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2359,7 +2346,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2404,7 +2391,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): diff --git a/vendor/hive_metastore/ThriftHiveMetastore.py b/vendor/hive_metastore/ThriftHiveMetastore.py index 4d25c087c7..92ba9eaeae 100644 --- a/vendor/hive_metastore/ThriftHiveMetastore.py +++ b/vendor/hive_metastore/ThriftHiveMetastore.py @@ -52,7 +52,6 @@ def getMetaConf(self, key): - key """ - pass def setMetaConf(self, key, value): """ @@ -61,7 +60,6 @@ def setMetaConf(self, key, value): - value """ - pass def create_catalog(self, catalog): """ @@ -69,7 +67,6 @@ def create_catalog(self, catalog): - catalog """ - pass def alter_catalog(self, rqst): """ @@ -77,7 +74,6 @@ def alter_catalog(self, rqst): - rqst """ - pass def get_catalog(self, catName): """ @@ -85,7 +81,6 @@ def get_catalog(self, catName): - catName """ - pass def get_catalogs(self): pass @@ -96,7 +91,6 @@ def drop_catalog(self, catName): - catName """ - pass def create_database(self, database): """ @@ -104,7 +98,6 @@ def create_database(self, database): - database """ - pass def get_database(self, name): """ @@ -112,7 +105,6 @@ def get_database(self, name): - name """ - pass def get_database_req(self, request): """ @@ -120,7 +112,6 @@ def get_database_req(self, request): - request """ - pass def drop_database(self, name, deleteData, cascade): """ @@ -130,7 +121,6 @@ def drop_database(self, name, deleteData, cascade): - cascade """ - pass def drop_database_req(self, req): """ @@ -138,7 +128,6 @@ def drop_database_req(self, req): - req """ - pass def get_databases(self, pattern): """ @@ -146,7 +135,6 @@ def get_databases(self, pattern): - pattern """ - pass def get_all_databases(self): pass @@ -158,7 +146,6 @@ def alter_database(self, dbname, db): - db """ - pass def create_dataconnector(self, connector): """ @@ -166,7 +153,6 @@ def create_dataconnector(self, connector): - connector """ - pass def get_dataconnector_req(self, request): """ @@ -174,7 +160,6 @@ def get_dataconnector_req(self, request): - request """ - pass def drop_dataconnector(self, name, ifNotExists, checkReferences): """ @@ -184,7 +169,6 @@ def drop_dataconnector(self, name, ifNotExists, checkReferences): - checkReferences """ - pass def get_dataconnectors(self): pass @@ -196,7 +180,6 @@ def alter_dataconnector(self, name, connector): - connector """ - pass def get_type(self, name): """ @@ -204,7 +187,6 @@ def get_type(self, name): - name """ - pass def create_type(self, type): """ @@ -212,7 +194,6 @@ def create_type(self, type): - type """ - pass def drop_type(self, type): """ @@ -220,7 +201,6 @@ def drop_type(self, type): - type """ - pass def get_type_all(self, name): """ @@ -228,7 +208,6 @@ def get_type_all(self, name): - name """ - pass def get_fields(self, db_name, table_name): """ @@ -237,7 +216,6 @@ def get_fields(self, db_name, table_name): - table_name """ - pass def get_fields_with_environment_context(self, db_name, table_name, environment_context): """ @@ -247,7 +225,6 @@ def get_fields_with_environment_context(self, db_name, table_name, environment_c - environment_context """ - pass def get_fields_req(self, req): """ @@ -255,7 +232,6 @@ def get_fields_req(self, req): - req """ - pass def get_schema(self, db_name, table_name): """ @@ -264,7 +240,6 @@ def get_schema(self, db_name, table_name): - table_name """ - pass def get_schema_with_environment_context(self, db_name, table_name, environment_context): """ @@ -274,7 +249,6 @@ def get_schema_with_environment_context(self, db_name, table_name, environment_c - environment_context """ - pass def get_schema_req(self, req): """ @@ -282,7 +256,6 @@ def get_schema_req(self, req): - req """ - pass def create_table(self, tbl): """ @@ -290,7 +263,6 @@ def create_table(self, tbl): - tbl """ - pass def create_table_with_environment_context(self, tbl, environment_context): """ @@ -299,7 +271,6 @@ def create_table_with_environment_context(self, tbl, environment_context): - environment_context """ - pass def create_table_with_constraints( self, tbl, primaryKeys, foreignKeys, uniqueConstraints, notNullConstraints, defaultConstraints, checkConstraints @@ -315,7 +286,6 @@ def create_table_with_constraints( - checkConstraints """ - pass def create_table_req(self, request): """ @@ -323,7 +293,6 @@ def create_table_req(self, request): - request """ - pass def drop_constraint(self, req): """ @@ -331,7 +300,6 @@ def drop_constraint(self, req): - req """ - pass def add_primary_key(self, req): """ @@ -339,7 +307,6 @@ def add_primary_key(self, req): - req """ - pass def add_foreign_key(self, req): """ @@ -347,7 +314,6 @@ def add_foreign_key(self, req): - req """ - pass def add_unique_constraint(self, req): """ @@ -355,7 +321,6 @@ def add_unique_constraint(self, req): - req """ - pass def add_not_null_constraint(self, req): """ @@ -363,7 +328,6 @@ def add_not_null_constraint(self, req): - req """ - pass def add_default_constraint(self, req): """ @@ -371,7 +335,6 @@ def add_default_constraint(self, req): - req """ - pass def add_check_constraint(self, req): """ @@ -379,7 +342,6 @@ def add_check_constraint(self, req): - req """ - pass def translate_table_dryrun(self, request): """ @@ -387,7 +349,6 @@ def translate_table_dryrun(self, request): - request """ - pass def drop_table(self, dbname, name, deleteData): """ @@ -397,7 +358,6 @@ def drop_table(self, dbname, name, deleteData): - deleteData """ - pass def drop_table_with_environment_context(self, dbname, name, deleteData, environment_context): """ @@ -408,7 +368,6 @@ def drop_table_with_environment_context(self, dbname, name, deleteData, environm - environment_context """ - pass def truncate_table(self, dbName, tableName, partNames): """ @@ -418,7 +377,6 @@ def truncate_table(self, dbName, tableName, partNames): - partNames """ - pass def truncate_table_req(self, req): """ @@ -426,7 +384,6 @@ def truncate_table_req(self, req): - req """ - pass def get_tables(self, db_name, pattern): """ @@ -435,7 +392,6 @@ def get_tables(self, db_name, pattern): - pattern """ - pass def get_tables_by_type(self, db_name, pattern, tableType): """ @@ -445,7 +401,6 @@ def get_tables_by_type(self, db_name, pattern, tableType): - tableType """ - pass def get_all_materialized_view_objects_for_rewriting(self): pass @@ -456,7 +411,6 @@ def get_materialized_views_for_rewriting(self, db_name): - db_name """ - pass def get_table_meta(self, db_patterns, tbl_patterns, tbl_types): """ @@ -466,7 +420,6 @@ def get_table_meta(self, db_patterns, tbl_patterns, tbl_types): - tbl_types """ - pass def get_all_tables(self, db_name): """ @@ -474,7 +427,6 @@ def get_all_tables(self, db_name): - db_name """ - pass def get_table(self, dbname, tbl_name): """ @@ -483,7 +435,6 @@ def get_table(self, dbname, tbl_name): - tbl_name """ - pass def get_table_objects_by_name(self, dbname, tbl_names): """ @@ -492,7 +443,6 @@ def get_table_objects_by_name(self, dbname, tbl_names): - tbl_names """ - pass def get_tables_ext(self, req): """ @@ -500,7 +450,6 @@ def get_tables_ext(self, req): - req """ - pass def get_table_req(self, req): """ @@ -508,7 +457,6 @@ def get_table_req(self, req): - req """ - pass def get_table_objects_by_name_req(self, req): """ @@ -516,7 +464,6 @@ def get_table_objects_by_name_req(self, req): - req """ - pass def get_materialization_invalidation_info(self, creation_metadata, validTxnList): """ @@ -525,7 +472,6 @@ def get_materialization_invalidation_info(self, creation_metadata, validTxnList) - validTxnList """ - pass def update_creation_metadata(self, catName, dbname, tbl_name, creation_metadata): """ @@ -536,7 +482,6 @@ def update_creation_metadata(self, catName, dbname, tbl_name, creation_metadata) - creation_metadata """ - pass def get_table_names_by_filter(self, dbname, filter, max_tables): """ @@ -546,7 +491,6 @@ def get_table_names_by_filter(self, dbname, filter, max_tables): - max_tables """ - pass def alter_table(self, dbname, tbl_name, new_tbl): """ @@ -556,7 +500,6 @@ def alter_table(self, dbname, tbl_name, new_tbl): - new_tbl """ - pass def alter_table_with_environment_context(self, dbname, tbl_name, new_tbl, environment_context): """ @@ -567,7 +510,6 @@ def alter_table_with_environment_context(self, dbname, tbl_name, new_tbl, enviro - environment_context """ - pass def alter_table_with_cascade(self, dbname, tbl_name, new_tbl, cascade): """ @@ -578,7 +520,6 @@ def alter_table_with_cascade(self, dbname, tbl_name, new_tbl, cascade): - cascade """ - pass def alter_table_req(self, req): """ @@ -586,7 +527,6 @@ def alter_table_req(self, req): - req """ - pass def add_partition(self, new_part): """ @@ -594,7 +534,6 @@ def add_partition(self, new_part): - new_part """ - pass def add_partition_with_environment_context(self, new_part, environment_context): """ @@ -603,7 +542,6 @@ def add_partition_with_environment_context(self, new_part, environment_context): - environment_context """ - pass def add_partitions(self, new_parts): """ @@ -611,7 +549,6 @@ def add_partitions(self, new_parts): - new_parts """ - pass def add_partitions_pspec(self, new_parts): """ @@ -619,7 +556,6 @@ def add_partitions_pspec(self, new_parts): - new_parts """ - pass def append_partition(self, db_name, tbl_name, part_vals): """ @@ -629,7 +565,6 @@ def append_partition(self, db_name, tbl_name, part_vals): - part_vals """ - pass def add_partitions_req(self, request): """ @@ -637,7 +572,6 @@ def add_partitions_req(self, request): - request """ - pass def append_partition_with_environment_context(self, db_name, tbl_name, part_vals, environment_context): """ @@ -648,7 +582,6 @@ def append_partition_with_environment_context(self, db_name, tbl_name, part_vals - environment_context """ - pass def append_partition_by_name(self, db_name, tbl_name, part_name): """ @@ -658,7 +591,6 @@ def append_partition_by_name(self, db_name, tbl_name, part_name): - part_name """ - pass def append_partition_by_name_with_environment_context(self, db_name, tbl_name, part_name, environment_context): """ @@ -669,7 +601,6 @@ def append_partition_by_name_with_environment_context(self, db_name, tbl_name, p - environment_context """ - pass def drop_partition(self, db_name, tbl_name, part_vals, deleteData): """ @@ -680,7 +611,6 @@ def drop_partition(self, db_name, tbl_name, part_vals, deleteData): - deleteData """ - pass def drop_partition_with_environment_context(self, db_name, tbl_name, part_vals, deleteData, environment_context): """ @@ -692,7 +622,6 @@ def drop_partition_with_environment_context(self, db_name, tbl_name, part_vals, - environment_context """ - pass def drop_partition_by_name(self, db_name, tbl_name, part_name, deleteData): """ @@ -703,7 +632,6 @@ def drop_partition_by_name(self, db_name, tbl_name, part_name, deleteData): - deleteData """ - pass def drop_partition_by_name_with_environment_context(self, db_name, tbl_name, part_name, deleteData, environment_context): """ @@ -715,7 +643,6 @@ def drop_partition_by_name_with_environment_context(self, db_name, tbl_name, par - environment_context """ - pass def drop_partitions_req(self, req): """ @@ -723,7 +650,6 @@ def drop_partitions_req(self, req): - req """ - pass def get_partition(self, db_name, tbl_name, part_vals): """ @@ -733,7 +659,6 @@ def get_partition(self, db_name, tbl_name, part_vals): - part_vals """ - pass def get_partition_req(self, req): """ @@ -741,7 +666,6 @@ def get_partition_req(self, req): - req """ - pass def exchange_partition(self, partitionSpecs, source_db, source_table_name, dest_db, dest_table_name): """ @@ -753,7 +677,6 @@ def exchange_partition(self, partitionSpecs, source_db, source_table_name, dest_ - dest_table_name """ - pass def exchange_partitions(self, partitionSpecs, source_db, source_table_name, dest_db, dest_table_name): """ @@ -765,7 +688,6 @@ def exchange_partitions(self, partitionSpecs, source_db, source_table_name, dest - dest_table_name """ - pass def get_partition_with_auth(self, db_name, tbl_name, part_vals, user_name, group_names): """ @@ -777,7 +699,6 @@ def get_partition_with_auth(self, db_name, tbl_name, part_vals, user_name, group - group_names """ - pass def get_partition_by_name(self, db_name, tbl_name, part_name): """ @@ -787,7 +708,6 @@ def get_partition_by_name(self, db_name, tbl_name, part_name): - part_name """ - pass def get_partitions(self, db_name, tbl_name, max_parts): """ @@ -797,7 +717,6 @@ def get_partitions(self, db_name, tbl_name, max_parts): - max_parts """ - pass def get_partitions_req(self, req): """ @@ -805,7 +724,6 @@ def get_partitions_req(self, req): - req """ - pass def get_partitions_with_auth(self, db_name, tbl_name, max_parts, user_name, group_names): """ @@ -817,7 +735,6 @@ def get_partitions_with_auth(self, db_name, tbl_name, max_parts, user_name, grou - group_names """ - pass def get_partitions_pspec(self, db_name, tbl_name, max_parts): """ @@ -827,7 +744,6 @@ def get_partitions_pspec(self, db_name, tbl_name, max_parts): - max_parts """ - pass def get_partition_names(self, db_name, tbl_name, max_parts): """ @@ -837,7 +753,6 @@ def get_partition_names(self, db_name, tbl_name, max_parts): - max_parts """ - pass def get_partition_values(self, request): """ @@ -845,7 +760,6 @@ def get_partition_values(self, request): - request """ - pass def get_partitions_ps(self, db_name, tbl_name, part_vals, max_parts): """ @@ -856,7 +770,6 @@ def get_partitions_ps(self, db_name, tbl_name, part_vals, max_parts): - max_parts """ - pass def get_partitions_ps_with_auth(self, db_name, tbl_name, part_vals, max_parts, user_name, group_names): """ @@ -869,7 +782,6 @@ def get_partitions_ps_with_auth(self, db_name, tbl_name, part_vals, max_parts, u - group_names """ - pass def get_partitions_ps_with_auth_req(self, req): """ @@ -877,7 +789,6 @@ def get_partitions_ps_with_auth_req(self, req): - req """ - pass def get_partition_names_ps(self, db_name, tbl_name, part_vals, max_parts): """ @@ -888,7 +799,6 @@ def get_partition_names_ps(self, db_name, tbl_name, part_vals, max_parts): - max_parts """ - pass def get_partition_names_ps_req(self, req): """ @@ -896,7 +806,6 @@ def get_partition_names_ps_req(self, req): - req """ - pass def get_partition_names_req(self, req): """ @@ -904,7 +813,6 @@ def get_partition_names_req(self, req): - req """ - pass def get_partitions_by_filter(self, db_name, tbl_name, filter, max_parts): """ @@ -915,7 +823,6 @@ def get_partitions_by_filter(self, db_name, tbl_name, filter, max_parts): - max_parts """ - pass def get_part_specs_by_filter(self, db_name, tbl_name, filter, max_parts): """ @@ -926,7 +833,6 @@ def get_part_specs_by_filter(self, db_name, tbl_name, filter, max_parts): - max_parts """ - pass def get_partitions_by_expr(self, req): """ @@ -934,7 +840,6 @@ def get_partitions_by_expr(self, req): - req """ - pass def get_partitions_spec_by_expr(self, req): """ @@ -942,7 +847,6 @@ def get_partitions_spec_by_expr(self, req): - req """ - pass def get_num_partitions_by_filter(self, db_name, tbl_name, filter): """ @@ -952,7 +856,6 @@ def get_num_partitions_by_filter(self, db_name, tbl_name, filter): - filter """ - pass def get_partitions_by_names(self, db_name, tbl_name, names): """ @@ -962,7 +865,6 @@ def get_partitions_by_names(self, db_name, tbl_name, names): - names """ - pass def get_partitions_by_names_req(self, req): """ @@ -970,7 +872,6 @@ def get_partitions_by_names_req(self, req): - req """ - pass def alter_partition(self, db_name, tbl_name, new_part): """ @@ -980,7 +881,6 @@ def alter_partition(self, db_name, tbl_name, new_part): - new_part """ - pass def alter_partitions(self, db_name, tbl_name, new_parts): """ @@ -990,7 +890,6 @@ def alter_partitions(self, db_name, tbl_name, new_parts): - new_parts """ - pass def alter_partitions_with_environment_context(self, db_name, tbl_name, new_parts, environment_context): """ @@ -1001,7 +900,6 @@ def alter_partitions_with_environment_context(self, db_name, tbl_name, new_parts - environment_context """ - pass def alter_partitions_req(self, req): """ @@ -1009,7 +907,6 @@ def alter_partitions_req(self, req): - req """ - pass def alter_partition_with_environment_context(self, db_name, tbl_name, new_part, environment_context): """ @@ -1020,7 +917,6 @@ def alter_partition_with_environment_context(self, db_name, tbl_name, new_part, - environment_context """ - pass def rename_partition(self, db_name, tbl_name, part_vals, new_part): """ @@ -1031,7 +927,6 @@ def rename_partition(self, db_name, tbl_name, part_vals, new_part): - new_part """ - pass def rename_partition_req(self, req): """ @@ -1039,7 +934,6 @@ def rename_partition_req(self, req): - req """ - pass def partition_name_has_valid_characters(self, part_vals, throw_exception): """ @@ -1048,7 +942,6 @@ def partition_name_has_valid_characters(self, part_vals, throw_exception): - throw_exception """ - pass def get_config_value(self, name, defaultValue): """ @@ -1057,7 +950,6 @@ def get_config_value(self, name, defaultValue): - defaultValue """ - pass def partition_name_to_vals(self, part_name): """ @@ -1065,7 +957,6 @@ def partition_name_to_vals(self, part_name): - part_name """ - pass def partition_name_to_spec(self, part_name): """ @@ -1073,7 +964,6 @@ def partition_name_to_spec(self, part_name): - part_name """ - pass def markPartitionForEvent(self, db_name, tbl_name, part_vals, eventType): """ @@ -1084,7 +974,6 @@ def markPartitionForEvent(self, db_name, tbl_name, part_vals, eventType): - eventType """ - pass def isPartitionMarkedForEvent(self, db_name, tbl_name, part_vals, eventType): """ @@ -1095,7 +984,6 @@ def isPartitionMarkedForEvent(self, db_name, tbl_name, part_vals, eventType): - eventType """ - pass def get_primary_keys(self, request): """ @@ -1103,7 +991,6 @@ def get_primary_keys(self, request): - request """ - pass def get_foreign_keys(self, request): """ @@ -1111,7 +998,6 @@ def get_foreign_keys(self, request): - request """ - pass def get_unique_constraints(self, request): """ @@ -1119,7 +1005,6 @@ def get_unique_constraints(self, request): - request """ - pass def get_not_null_constraints(self, request): """ @@ -1127,7 +1012,6 @@ def get_not_null_constraints(self, request): - request """ - pass def get_default_constraints(self, request): """ @@ -1135,7 +1019,6 @@ def get_default_constraints(self, request): - request """ - pass def get_check_constraints(self, request): """ @@ -1143,7 +1026,6 @@ def get_check_constraints(self, request): - request """ - pass def get_all_table_constraints(self, request): """ @@ -1151,7 +1033,6 @@ def get_all_table_constraints(self, request): - request """ - pass def update_table_column_statistics(self, stats_obj): """ @@ -1159,7 +1040,6 @@ def update_table_column_statistics(self, stats_obj): - stats_obj """ - pass def update_partition_column_statistics(self, stats_obj): """ @@ -1167,7 +1047,6 @@ def update_partition_column_statistics(self, stats_obj): - stats_obj """ - pass def update_table_column_statistics_req(self, req): """ @@ -1175,7 +1054,6 @@ def update_table_column_statistics_req(self, req): - req """ - pass def update_partition_column_statistics_req(self, req): """ @@ -1183,7 +1061,6 @@ def update_partition_column_statistics_req(self, req): - req """ - pass def update_transaction_statistics(self, req): """ @@ -1191,7 +1068,6 @@ def update_transaction_statistics(self, req): - req """ - pass def get_table_column_statistics(self, db_name, tbl_name, col_name): """ @@ -1201,7 +1077,6 @@ def get_table_column_statistics(self, db_name, tbl_name, col_name): - col_name """ - pass def get_partition_column_statistics(self, db_name, tbl_name, part_name, col_name): """ @@ -1212,7 +1087,6 @@ def get_partition_column_statistics(self, db_name, tbl_name, part_name, col_name - col_name """ - pass def get_table_statistics_req(self, request): """ @@ -1220,7 +1094,6 @@ def get_table_statistics_req(self, request): - request """ - pass def get_partitions_statistics_req(self, request): """ @@ -1228,7 +1101,6 @@ def get_partitions_statistics_req(self, request): - request """ - pass def get_aggr_stats_for(self, request): """ @@ -1236,7 +1108,6 @@ def get_aggr_stats_for(self, request): - request """ - pass def set_aggr_stats_for(self, request): """ @@ -1244,7 +1115,6 @@ def set_aggr_stats_for(self, request): - request """ - pass def delete_partition_column_statistics(self, db_name, tbl_name, part_name, col_name, engine): """ @@ -1256,7 +1126,6 @@ def delete_partition_column_statistics(self, db_name, tbl_name, part_name, col_n - engine """ - pass def delete_table_column_statistics(self, db_name, tbl_name, col_name, engine): """ @@ -1267,7 +1136,6 @@ def delete_table_column_statistics(self, db_name, tbl_name, col_name, engine): - engine """ - pass def create_function(self, func): """ @@ -1275,7 +1143,6 @@ def create_function(self, func): - func """ - pass def drop_function(self, dbName, funcName): """ @@ -1284,7 +1151,6 @@ def drop_function(self, dbName, funcName): - funcName """ - pass def alter_function(self, dbName, funcName, newFunc): """ @@ -1294,7 +1160,6 @@ def alter_function(self, dbName, funcName, newFunc): - newFunc """ - pass def get_functions(self, dbName, pattern): """ @@ -1303,7 +1168,6 @@ def get_functions(self, dbName, pattern): - pattern """ - pass def get_function(self, dbName, funcName): """ @@ -1312,7 +1176,6 @@ def get_function(self, dbName, funcName): - funcName """ - pass def get_all_functions(self): pass @@ -1323,7 +1186,6 @@ def create_role(self, role): - role """ - pass def drop_role(self, role_name): """ @@ -1331,7 +1193,6 @@ def drop_role(self, role_name): - role_name """ - pass def get_role_names(self): pass @@ -1347,7 +1208,6 @@ def grant_role(self, role_name, principal_name, principal_type, grantor, grantor - grant_option """ - pass def revoke_role(self, role_name, principal_name, principal_type): """ @@ -1357,7 +1217,6 @@ def revoke_role(self, role_name, principal_name, principal_type): - principal_type """ - pass def list_roles(self, principal_name, principal_type): """ @@ -1366,7 +1225,6 @@ def list_roles(self, principal_name, principal_type): - principal_type """ - pass def grant_revoke_role(self, request): """ @@ -1374,7 +1232,6 @@ def grant_revoke_role(self, request): - request """ - pass def get_principals_in_role(self, request): """ @@ -1382,7 +1239,6 @@ def get_principals_in_role(self, request): - request """ - pass def get_role_grants_for_principal(self, request): """ @@ -1390,7 +1246,6 @@ def get_role_grants_for_principal(self, request): - request """ - pass def get_privilege_set(self, hiveObject, user_name, group_names): """ @@ -1400,7 +1255,6 @@ def get_privilege_set(self, hiveObject, user_name, group_names): - group_names """ - pass def list_privileges(self, principal_name, principal_type, hiveObject): """ @@ -1410,7 +1264,6 @@ def list_privileges(self, principal_name, principal_type, hiveObject): - hiveObject """ - pass def grant_privileges(self, privileges): """ @@ -1418,7 +1271,6 @@ def grant_privileges(self, privileges): - privileges """ - pass def revoke_privileges(self, privileges): """ @@ -1426,7 +1278,6 @@ def revoke_privileges(self, privileges): - privileges """ - pass def grant_revoke_privileges(self, request): """ @@ -1434,7 +1285,6 @@ def grant_revoke_privileges(self, request): - request """ - pass def refresh_privileges(self, objToRefresh, authorizer, grantRequest): """ @@ -1444,7 +1294,6 @@ def refresh_privileges(self, objToRefresh, authorizer, grantRequest): - grantRequest """ - pass def set_ugi(self, user_name, group_names): """ @@ -1453,7 +1302,6 @@ def set_ugi(self, user_name, group_names): - group_names """ - pass def get_delegation_token(self, token_owner, renewer_kerberos_principal_name): """ @@ -1462,7 +1310,6 @@ def get_delegation_token(self, token_owner, renewer_kerberos_principal_name): - renewer_kerberos_principal_name """ - pass def renew_delegation_token(self, token_str_form): """ @@ -1470,7 +1317,6 @@ def renew_delegation_token(self, token_str_form): - token_str_form """ - pass def cancel_delegation_token(self, token_str_form): """ @@ -1478,7 +1324,6 @@ def cancel_delegation_token(self, token_str_form): - token_str_form """ - pass def add_token(self, token_identifier, delegation_token): """ @@ -1487,7 +1332,6 @@ def add_token(self, token_identifier, delegation_token): - delegation_token """ - pass def remove_token(self, token_identifier): """ @@ -1495,7 +1339,6 @@ def remove_token(self, token_identifier): - token_identifier """ - pass def get_token(self, token_identifier): """ @@ -1503,7 +1346,6 @@ def get_token(self, token_identifier): - token_identifier """ - pass def get_all_token_identifiers(self): pass @@ -1514,7 +1356,6 @@ def add_master_key(self, key): - key """ - pass def update_master_key(self, seq_number, key): """ @@ -1523,7 +1364,6 @@ def update_master_key(self, seq_number, key): - key """ - pass def remove_master_key(self, key_seq): """ @@ -1531,7 +1371,6 @@ def remove_master_key(self, key_seq): - key_seq """ - pass def get_master_keys(self): pass @@ -1548,7 +1387,6 @@ def open_txns(self, rqst): - rqst """ - pass def abort_txn(self, rqst): """ @@ -1556,7 +1394,6 @@ def abort_txn(self, rqst): - rqst """ - pass def abort_txns(self, rqst): """ @@ -1564,7 +1401,6 @@ def abort_txns(self, rqst): - rqst """ - pass def commit_txn(self, rqst): """ @@ -1572,7 +1408,6 @@ def commit_txn(self, rqst): - rqst """ - pass def get_latest_txnid_in_conflict(self, txnId): """ @@ -1580,7 +1415,6 @@ def get_latest_txnid_in_conflict(self, txnId): - txnId """ - pass def repl_tbl_writeid_state(self, rqst): """ @@ -1588,7 +1422,6 @@ def repl_tbl_writeid_state(self, rqst): - rqst """ - pass def get_valid_write_ids(self, rqst): """ @@ -1596,7 +1429,6 @@ def get_valid_write_ids(self, rqst): - rqst """ - pass def allocate_table_write_ids(self, rqst): """ @@ -1604,7 +1436,6 @@ def allocate_table_write_ids(self, rqst): - rqst """ - pass def get_max_allocated_table_write_id(self, rqst): """ @@ -1612,7 +1443,6 @@ def get_max_allocated_table_write_id(self, rqst): - rqst """ - pass def seed_write_id(self, rqst): """ @@ -1620,7 +1450,6 @@ def seed_write_id(self, rqst): - rqst """ - pass def seed_txn_id(self, rqst): """ @@ -1628,7 +1457,6 @@ def seed_txn_id(self, rqst): - rqst """ - pass def lock(self, rqst): """ @@ -1636,7 +1464,6 @@ def lock(self, rqst): - rqst """ - pass def check_lock(self, rqst): """ @@ -1644,7 +1471,6 @@ def check_lock(self, rqst): - rqst """ - pass def unlock(self, rqst): """ @@ -1652,7 +1478,6 @@ def unlock(self, rqst): - rqst """ - pass def show_locks(self, rqst): """ @@ -1660,7 +1485,6 @@ def show_locks(self, rqst): - rqst """ - pass def heartbeat(self, ids): """ @@ -1668,7 +1492,6 @@ def heartbeat(self, ids): - ids """ - pass def heartbeat_txn_range(self, txns): """ @@ -1676,7 +1499,6 @@ def heartbeat_txn_range(self, txns): - txns """ - pass def compact(self, rqst): """ @@ -1684,7 +1506,6 @@ def compact(self, rqst): - rqst """ - pass def compact2(self, rqst): """ @@ -1692,7 +1513,6 @@ def compact2(self, rqst): - rqst """ - pass def show_compact(self, rqst): """ @@ -1700,7 +1520,6 @@ def show_compact(self, rqst): - rqst """ - pass def add_dynamic_partitions(self, rqst): """ @@ -1708,7 +1527,6 @@ def add_dynamic_partitions(self, rqst): - rqst """ - pass def find_next_compact(self, workerId): """ @@ -1716,7 +1534,6 @@ def find_next_compact(self, workerId): - workerId """ - pass def find_next_compact2(self, rqst): """ @@ -1724,7 +1541,6 @@ def find_next_compact2(self, rqst): - rqst """ - pass def update_compactor_state(self, cr, txn_id): """ @@ -1733,7 +1549,6 @@ def update_compactor_state(self, cr, txn_id): - txn_id """ - pass def find_columns_with_stats(self, cr): """ @@ -1741,7 +1556,6 @@ def find_columns_with_stats(self, cr): - cr """ - pass def mark_cleaned(self, cr): """ @@ -1749,7 +1563,6 @@ def mark_cleaned(self, cr): - cr """ - pass def mark_compacted(self, cr): """ @@ -1757,7 +1570,6 @@ def mark_compacted(self, cr): - cr """ - pass def mark_failed(self, cr): """ @@ -1765,7 +1577,6 @@ def mark_failed(self, cr): - cr """ - pass def mark_refused(self, cr): """ @@ -1773,7 +1584,6 @@ def mark_refused(self, cr): - cr """ - pass def update_compaction_metrics_data(self, data): """ @@ -1781,7 +1591,6 @@ def update_compaction_metrics_data(self, data): - data """ - pass def remove_compaction_metrics_data(self, request): """ @@ -1789,7 +1598,6 @@ def remove_compaction_metrics_data(self, request): - request """ - pass def set_hadoop_jobid(self, jobId, cq_id): """ @@ -1798,7 +1606,6 @@ def set_hadoop_jobid(self, jobId, cq_id): - cq_id """ - pass def get_latest_committed_compaction_info(self, rqst): """ @@ -1806,7 +1613,6 @@ def get_latest_committed_compaction_info(self, rqst): - rqst """ - pass def get_next_notification(self, rqst): """ @@ -1814,7 +1620,6 @@ def get_next_notification(self, rqst): - rqst """ - pass def get_current_notificationEventId(self): pass @@ -1825,7 +1630,6 @@ def get_notification_events_count(self, rqst): - rqst """ - pass def fire_listener_event(self, rqst): """ @@ -1833,7 +1637,6 @@ def fire_listener_event(self, rqst): - rqst """ - pass def flushCache(self): pass @@ -1844,7 +1647,6 @@ def add_write_notification_log(self, rqst): - rqst """ - pass def add_write_notification_log_in_batch(self, rqst): """ @@ -1852,7 +1654,6 @@ def add_write_notification_log_in_batch(self, rqst): - rqst """ - pass def cm_recycle(self, request): """ @@ -1860,7 +1661,6 @@ def cm_recycle(self, request): - request """ - pass def get_file_metadata_by_expr(self, req): """ @@ -1868,7 +1668,6 @@ def get_file_metadata_by_expr(self, req): - req """ - pass def get_file_metadata(self, req): """ @@ -1876,7 +1675,6 @@ def get_file_metadata(self, req): - req """ - pass def put_file_metadata(self, req): """ @@ -1884,7 +1682,6 @@ def put_file_metadata(self, req): - req """ - pass def clear_file_metadata(self, req): """ @@ -1892,7 +1689,6 @@ def clear_file_metadata(self, req): - req """ - pass def cache_file_metadata(self, req): """ @@ -1900,7 +1696,6 @@ def cache_file_metadata(self, req): - req """ - pass def get_metastore_db_uuid(self): pass @@ -1911,7 +1706,6 @@ def create_resource_plan(self, request): - request """ - pass def get_resource_plan(self, request): """ @@ -1919,7 +1713,6 @@ def get_resource_plan(self, request): - request """ - pass def get_active_resource_plan(self, request): """ @@ -1927,7 +1720,6 @@ def get_active_resource_plan(self, request): - request """ - pass def get_all_resource_plans(self, request): """ @@ -1935,7 +1727,6 @@ def get_all_resource_plans(self, request): - request """ - pass def alter_resource_plan(self, request): """ @@ -1943,7 +1734,6 @@ def alter_resource_plan(self, request): - request """ - pass def validate_resource_plan(self, request): """ @@ -1951,7 +1741,6 @@ def validate_resource_plan(self, request): - request """ - pass def drop_resource_plan(self, request): """ @@ -1959,7 +1748,6 @@ def drop_resource_plan(self, request): - request """ - pass def create_wm_trigger(self, request): """ @@ -1967,7 +1755,6 @@ def create_wm_trigger(self, request): - request """ - pass def alter_wm_trigger(self, request): """ @@ -1975,7 +1762,6 @@ def alter_wm_trigger(self, request): - request """ - pass def drop_wm_trigger(self, request): """ @@ -1983,7 +1769,6 @@ def drop_wm_trigger(self, request): - request """ - pass def get_triggers_for_resourceplan(self, request): """ @@ -1991,7 +1776,6 @@ def get_triggers_for_resourceplan(self, request): - request """ - pass def create_wm_pool(self, request): """ @@ -1999,7 +1783,6 @@ def create_wm_pool(self, request): - request """ - pass def alter_wm_pool(self, request): """ @@ -2007,7 +1790,6 @@ def alter_wm_pool(self, request): - request """ - pass def drop_wm_pool(self, request): """ @@ -2015,7 +1797,6 @@ def drop_wm_pool(self, request): - request """ - pass def create_or_update_wm_mapping(self, request): """ @@ -2023,7 +1804,6 @@ def create_or_update_wm_mapping(self, request): - request """ - pass def drop_wm_mapping(self, request): """ @@ -2031,7 +1811,6 @@ def drop_wm_mapping(self, request): - request """ - pass def create_or_drop_wm_trigger_to_pool_mapping(self, request): """ @@ -2039,7 +1818,6 @@ def create_or_drop_wm_trigger_to_pool_mapping(self, request): - request """ - pass def create_ischema(self, schema): """ @@ -2047,7 +1825,6 @@ def create_ischema(self, schema): - schema """ - pass def alter_ischema(self, rqst): """ @@ -2055,7 +1832,6 @@ def alter_ischema(self, rqst): - rqst """ - pass def get_ischema(self, name): """ @@ -2063,7 +1839,6 @@ def get_ischema(self, name): - name """ - pass def drop_ischema(self, name): """ @@ -2071,7 +1846,6 @@ def drop_ischema(self, name): - name """ - pass def add_schema_version(self, schemaVersion): """ @@ -2079,7 +1853,6 @@ def add_schema_version(self, schemaVersion): - schemaVersion """ - pass def get_schema_version(self, schemaVersion): """ @@ -2087,7 +1860,6 @@ def get_schema_version(self, schemaVersion): - schemaVersion """ - pass def get_schema_latest_version(self, schemaName): """ @@ -2095,7 +1867,6 @@ def get_schema_latest_version(self, schemaName): - schemaName """ - pass def get_schema_all_versions(self, schemaName): """ @@ -2103,7 +1874,6 @@ def get_schema_all_versions(self, schemaName): - schemaName """ - pass def drop_schema_version(self, schemaVersion): """ @@ -2111,7 +1881,6 @@ def drop_schema_version(self, schemaVersion): - schemaVersion """ - pass def get_schemas_by_cols(self, rqst): """ @@ -2119,7 +1888,6 @@ def get_schemas_by_cols(self, rqst): - rqst """ - pass def map_schema_version_to_serde(self, rqst): """ @@ -2127,7 +1895,6 @@ def map_schema_version_to_serde(self, rqst): - rqst """ - pass def set_schema_version_state(self, rqst): """ @@ -2135,7 +1902,6 @@ def set_schema_version_state(self, rqst): - rqst """ - pass def add_serde(self, serde): """ @@ -2143,7 +1909,6 @@ def add_serde(self, serde): - serde """ - pass def get_serde(self, rqst): """ @@ -2151,7 +1916,6 @@ def get_serde(self, rqst): - rqst """ - pass def get_lock_materialization_rebuild(self, dbName, tableName, txnId): """ @@ -2161,7 +1925,6 @@ def get_lock_materialization_rebuild(self, dbName, tableName, txnId): - txnId """ - pass def heartbeat_lock_materialization_rebuild(self, dbName, tableName, txnId): """ @@ -2171,7 +1934,6 @@ def heartbeat_lock_materialization_rebuild(self, dbName, tableName, txnId): - txnId """ - pass def add_runtime_stats(self, stat): """ @@ -2179,7 +1941,6 @@ def add_runtime_stats(self, stat): - stat """ - pass def get_runtime_stats(self, rqst): """ @@ -2187,7 +1948,6 @@ def get_runtime_stats(self, rqst): - rqst """ - pass def get_partitions_with_specs(self, request): """ @@ -2195,7 +1955,6 @@ def get_partitions_with_specs(self, request): - request """ - pass def scheduled_query_poll(self, request): """ @@ -2203,7 +1962,6 @@ def scheduled_query_poll(self, request): - request """ - pass def scheduled_query_maintenance(self, request): """ @@ -2211,7 +1969,6 @@ def scheduled_query_maintenance(self, request): - request """ - pass def scheduled_query_progress(self, info): """ @@ -2219,7 +1976,6 @@ def scheduled_query_progress(self, info): - info """ - pass def get_scheduled_query(self, scheduleKey): """ @@ -2227,7 +1983,6 @@ def get_scheduled_query(self, scheduleKey): - scheduleKey """ - pass def add_replication_metrics(self, replicationMetricList): """ @@ -2235,7 +1990,6 @@ def add_replication_metrics(self, replicationMetricList): - replicationMetricList """ - pass def get_replication_metrics(self, rqst): """ @@ -2243,7 +1997,6 @@ def get_replication_metrics(self, rqst): - rqst """ - pass def get_open_txns_req(self, getOpenTxnsRequest): """ @@ -2251,7 +2004,6 @@ def get_open_txns_req(self, getOpenTxnsRequest): - getOpenTxnsRequest """ - pass def create_stored_procedure(self, proc): """ @@ -2259,7 +2011,6 @@ def create_stored_procedure(self, proc): - proc """ - pass def get_stored_procedure(self, request): """ @@ -2267,7 +2018,6 @@ def get_stored_procedure(self, request): - request """ - pass def drop_stored_procedure(self, request): """ @@ -2275,7 +2025,6 @@ def drop_stored_procedure(self, request): - request """ - pass def get_all_stored_procedures(self, request): """ @@ -2283,7 +2032,6 @@ def get_all_stored_procedures(self, request): - request """ - pass def find_package(self, request): """ @@ -2291,7 +2039,6 @@ def find_package(self, request): - request """ - pass def add_package(self, request): """ @@ -2299,7 +2046,6 @@ def add_package(self, request): - request """ - pass def get_all_packages(self, request): """ @@ -2307,7 +2053,6 @@ def get_all_packages(self, request): - request """ - pass def drop_package(self, request): """ @@ -2315,7 +2060,6 @@ def drop_package(self, request): - request """ - pass def get_all_write_event_info(self, request): """ @@ -2323,7 +2067,6 @@ def get_all_write_event_info(self, request): - request """ - pass class Client(fb303.FacebookService.Client, Iface): @@ -20241,7 +19984,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20330,7 +20073,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20427,7 +20170,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20509,7 +20252,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20585,7 +20328,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20684,7 +20427,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20774,7 +20517,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20873,7 +20616,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20963,7 +20706,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21063,7 +20806,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21130,7 +20873,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21209,7 +20952,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21291,7 +21034,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21390,7 +21133,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21480,7 +21223,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21579,7 +21322,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21670,7 +21413,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21770,7 +21513,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21859,7 +21602,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21959,7 +21702,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22073,7 +21816,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22186,7 +21929,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22276,7 +22019,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22375,7 +22118,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22466,7 +22209,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22565,7 +22308,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22625,7 +22368,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22715,7 +22458,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22811,7 +22554,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22905,7 +22648,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22988,7 +22731,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23087,7 +22830,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23177,7 +22920,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23277,7 +23020,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23391,7 +23134,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23481,7 +23224,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23549,7 +23292,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23639,7 +23382,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23735,7 +23478,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23829,7 +23572,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23913,7 +23656,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24013,7 +23756,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24102,7 +23845,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24213,7 +23956,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24310,7 +24053,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24409,7 +24152,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24499,7 +24242,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24601,7 +24344,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24698,7 +24441,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24825,7 +24568,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24949,7 +24692,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25083,7 +24826,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25179,7 +24922,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25291,7 +25034,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25402,7 +25145,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25529,7 +25272,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25653,7 +25396,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25787,7 +25530,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25883,7 +25626,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25995,7 +25738,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26091,7 +25834,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26202,7 +25945,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26312,7 +26055,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26430,7 +26173,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26653,7 +26396,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26806,7 +26549,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26903,7 +26646,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27014,7 +26757,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27111,7 +26854,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27198,7 +26941,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27281,7 +27024,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27368,7 +27111,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27451,7 +27194,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27538,7 +27281,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27621,7 +27364,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27708,7 +27451,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27791,7 +27534,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27878,7 +27621,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27961,7 +27704,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28048,7 +27791,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28131,7 +27874,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28218,7 +27961,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28301,7 +28044,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28425,7 +28168,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28555,7 +28298,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28656,7 +28399,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28779,7 +28522,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28887,7 +28630,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29009,7 +28752,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29098,7 +28841,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29174,7 +28917,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29262,7 +29005,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29359,7 +29102,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29465,7 +29208,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29576,7 +29319,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29689,7 +29432,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29749,7 +29492,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29836,7 +29579,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29919,7 +29662,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30018,7 +29761,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30139,7 +29882,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30249,7 +29992,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30332,7 +30075,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30431,7 +30174,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30528,7 +30271,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30635,7 +30378,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30749,7 +30492,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30840,7 +30583,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30915,7 +30658,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31011,7 +30754,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31093,7 +30836,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31193,7 +30936,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31282,7 +31025,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31394,7 +31137,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31504,7 +31247,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31623,7 +31366,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31761,7 +31504,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31881,7 +31624,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31998,7 +31741,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32135,7 +31878,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32259,7 +32002,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32360,7 +32103,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32484,7 +32227,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32592,7 +32335,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32715,7 +32458,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32823,7 +32566,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32906,7 +32649,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33006,7 +32749,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33095,7 +32838,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33207,7 +32950,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33316,7 +33059,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33435,7 +33178,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33539,7 +33282,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33650,7 +33393,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33754,7 +33497,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33865,7 +33608,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34000,7 +33743,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34126,7 +33869,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34222,7 +33965,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34334,7 +34077,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34482,7 +34225,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34615,7 +34358,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34740,7 +34483,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34866,7 +34609,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35004,7 +34747,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35137,7 +34880,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35284,7 +35027,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35404,7 +35147,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35557,7 +35300,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35684,7 +35427,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35814,7 +35557,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35934,7 +35677,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36077,7 +35820,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36204,7 +35947,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36293,7 +36036,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36393,7 +36136,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36521,7 +36264,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36635,7 +36378,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36724,7 +36467,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36824,7 +36567,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36986,7 +36729,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37138,7 +36881,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37314,7 +37057,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37474,7 +37217,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37654,7 +37397,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37782,7 +37525,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37900,7 +37643,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38014,7 +37757,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38130,7 +37873,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38252,7 +37995,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38341,7 +38084,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38441,7 +38184,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38595,7 +38338,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38731,7 +38474,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38847,7 +38590,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38969,7 +38712,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39085,7 +38828,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39210,7 +38953,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39299,7 +39042,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39399,7 +39142,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39539,7 +39282,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39668,7 +39411,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39846,7 +39589,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39989,7 +39732,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40078,7 +39821,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40178,7 +39921,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40318,7 +40061,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40450,7 +40193,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40539,7 +40282,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40639,7 +40382,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40728,7 +40471,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40839,7 +40582,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40969,7 +40712,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41098,7 +40841,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41228,7 +40971,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41357,7 +41100,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41446,7 +41189,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41546,7 +41289,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41635,7 +41378,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41735,7 +41478,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41853,7 +41596,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41966,7 +41709,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42094,7 +41837,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42216,7 +41959,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42305,7 +42048,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42405,7 +42148,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42522,7 +42265,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42623,7 +42366,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42742,7 +42485,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42843,7 +42586,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42975,7 +42718,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43083,7 +42826,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43166,7 +42909,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43266,7 +43009,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43396,7 +43139,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43504,7 +43247,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43639,7 +43382,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43747,7 +43490,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43830,7 +43573,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43930,7 +43673,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44042,7 +43785,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44136,7 +43879,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44233,7 +43976,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44329,7 +44072,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44412,7 +44155,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44511,7 +44254,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44594,7 +44337,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44699,7 +44442,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44838,7 +44581,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44994,7 +44737,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45162,7 +44905,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45330,7 +45073,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45447,7 +45190,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45547,7 +45290,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45636,7 +45379,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45736,7 +45479,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45825,7 +45568,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45925,7 +45668,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46014,7 +45757,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46114,7 +45857,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46203,7 +45946,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46303,7 +46046,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46392,7 +46135,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46492,7 +46235,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46581,7 +46324,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46681,7 +46424,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46770,7 +46513,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46893,7 +46636,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46996,7 +46739,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47119,7 +46862,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47222,7 +46965,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47346,7 +47089,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47449,7 +47192,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47573,7 +47316,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47676,7 +47419,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47751,7 +47494,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47856,7 +47599,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47994,7 +47737,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48140,7 +47883,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48285,7 +48028,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48388,7 +48131,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48488,7 +48231,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48577,7 +48320,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48677,7 +48420,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48766,7 +48509,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48866,7 +48609,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48955,7 +48698,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49078,7 +48821,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49238,7 +48981,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49389,7 +49132,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49535,7 +49278,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49679,7 +49422,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49782,7 +49525,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49893,7 +49636,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50005,7 +49748,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50099,7 +49842,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50210,7 +49953,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50311,7 +50054,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50409,7 +50152,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50515,7 +50258,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50612,7 +50355,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50719,7 +50462,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50786,7 +50529,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50865,7 +50608,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50947,7 +50690,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51034,7 +50777,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51117,7 +50860,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51204,7 +50947,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51264,7 +51007,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51354,7 +51097,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51501,7 +51244,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51623,7 +51366,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51732,7 +51475,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51833,7 +51576,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51928,7 +51671,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52031,7 +51774,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52113,7 +51856,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52201,7 +51944,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52283,7 +52026,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52371,7 +52114,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52453,7 +52196,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52541,7 +52284,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52661,7 +52404,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52763,7 +52506,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52871,7 +52614,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52981,7 +52724,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53063,7 +52806,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53150,7 +52893,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53232,7 +52975,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53319,7 +53062,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53401,7 +53144,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53489,7 +53232,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53598,7 +53341,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53700,7 +53443,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53807,7 +53550,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53913,7 +53656,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54014,7 +53757,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54110,7 +53853,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54193,7 +53936,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54280,7 +54023,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54363,7 +54106,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54438,7 +54181,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54529,7 +54272,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54611,7 +54354,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54687,7 +54430,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54762,7 +54505,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54838,7 +54581,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54915,7 +54658,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54968,7 +54711,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55046,7 +54789,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55122,7 +54865,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55209,7 +54952,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55304,7 +55047,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55398,7 +55141,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55480,7 +55223,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55555,7 +55298,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55608,7 +55351,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55686,7 +55429,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55739,7 +55482,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55806,7 +55549,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55859,7 +55602,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55926,7 +55669,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56001,7 +55744,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56077,7 +55820,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56152,7 +55895,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56227,7 +55970,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56303,7 +56046,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56378,7 +56121,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56454,7 +56197,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56541,7 +56284,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56623,7 +56366,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56710,7 +56453,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56792,7 +56535,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56846,7 +56589,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56913,7 +56656,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57013,7 +56756,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57102,7 +56845,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57214,7 +56957,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57310,7 +57053,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57398,7 +57141,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57480,7 +57223,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57555,7 +57298,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57631,7 +57374,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57706,7 +57449,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57782,7 +57525,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57882,7 +57625,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57971,7 +57714,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58083,7 +57826,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58179,7 +57922,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58266,7 +58009,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58349,7 +58092,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58425,7 +58168,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58500,7 +58243,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58599,7 +58342,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58689,7 +58432,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58765,7 +58508,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58840,7 +58583,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58894,7 +58637,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58961,7 +58704,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59037,7 +58780,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59112,7 +58855,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59188,7 +58931,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59263,7 +59006,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59350,7 +59093,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59434,7 +59177,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59522,7 +59265,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59604,7 +59347,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59692,7 +59435,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59786,7 +59529,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59847,7 +59590,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59914,7 +59657,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60001,7 +59744,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60076,7 +59819,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60151,7 +59894,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60227,7 +59970,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60302,7 +60045,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60378,7 +60121,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60453,7 +60196,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60529,7 +60272,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60604,7 +60347,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60680,7 +60423,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60767,7 +60510,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60849,7 +60592,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60924,7 +60667,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61013,7 +60756,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61074,7 +60817,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61141,7 +60884,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61217,7 +60960,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61292,7 +61035,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61368,7 +61111,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61421,7 +61164,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61488,7 +61231,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61563,7 +61306,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61639,7 +61382,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61714,7 +61457,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61790,7 +61533,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61843,7 +61586,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61888,7 +61631,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61955,7 +61698,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62031,7 +61774,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62106,7 +61849,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62182,7 +61925,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62257,7 +62000,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62345,7 +62088,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62427,7 +62170,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62503,7 +62246,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62578,7 +62321,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62654,7 +62397,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62729,7 +62472,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62805,7 +62548,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62880,7 +62623,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62956,7 +62699,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63031,7 +62774,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63107,7 +62850,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63160,7 +62903,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63240,7 +62983,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63322,7 +63065,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63434,7 +63177,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63530,7 +63273,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63630,7 +63373,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63719,7 +63462,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63807,7 +63550,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63889,7 +63632,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63977,7 +63720,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64059,7 +63802,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64171,7 +63914,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64267,7 +64010,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64367,7 +64110,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64456,7 +64199,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64568,7 +64311,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64664,7 +64407,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64788,7 +64531,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64891,7 +64634,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65003,7 +64746,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65099,7 +64842,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65211,7 +64954,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65307,7 +65050,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65407,7 +65150,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65496,7 +65239,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65620,7 +65363,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65723,7 +65466,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65847,7 +65590,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65950,7 +65693,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66062,7 +65805,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66158,7 +65901,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66282,7 +66025,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66385,7 +66128,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66497,7 +66240,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66593,7 +66336,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66717,7 +66460,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66820,7 +66563,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66919,7 +66662,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67009,7 +66752,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67096,7 +66839,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67179,7 +66922,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67279,7 +67022,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67368,7 +67111,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67467,7 +67210,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67557,7 +67300,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67656,7 +67399,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67746,7 +67489,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67846,7 +67589,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67935,7 +67678,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68035,7 +67778,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68124,7 +67867,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68232,7 +67975,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68321,7 +68064,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68408,7 +68151,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68491,7 +68234,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68579,7 +68322,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68661,7 +68404,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68748,7 +68491,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68831,7 +68574,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68930,7 +68673,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69020,7 +68763,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69107,7 +68850,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69190,7 +68933,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69290,7 +69033,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69406,7 +69149,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69496,7 +69239,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69598,7 +69341,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69687,7 +69430,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69762,7 +69505,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69837,7 +69580,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69913,7 +69656,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70009,7 +69752,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70091,7 +69834,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70179,7 +69922,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70261,7 +70004,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70349,7 +70092,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70431,7 +70174,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70542,7 +70285,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70639,7 +70382,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70726,7 +70469,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70809,7 +70552,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70909,7 +70652,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70998,7 +70741,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71073,7 +70816,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71149,7 +70892,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71237,7 +70980,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71319,7 +71062,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71395,7 +71138,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71470,7 +71213,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71557,7 +71300,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71640,7 +71383,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71740,7 +71483,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71829,7 +71572,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71904,7 +71647,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71980,7 +71723,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72079,7 +71822,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72161,7 +71904,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72261,7 +72004,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72350,7 +72093,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72425,7 +72168,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72501,7 +72244,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72600,7 +72343,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72682,7 +72425,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72757,7 +72500,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72833,7 +72576,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72929,7 +72672,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): diff --git a/vendor/hive_metastore/ttypes.py b/vendor/hive_metastore/ttypes.py index dca7aaadc7..fd279207cb 100644 --- a/vendor/hive_metastore/ttypes.py +++ b/vendor/hive_metastore/ttypes.py @@ -643,7 +643,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -735,7 +735,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -815,7 +815,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -983,7 +983,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1231,7 +1231,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1399,7 +1399,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1555,7 +1555,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1725,7 +1725,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1895,7 +1895,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2071,7 +2071,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2184,7 +2184,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2326,7 +2326,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2440,7 +2440,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2556,7 +2556,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2627,7 +2627,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2782,7 +2782,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2869,7 +2869,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2931,7 +2931,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3076,7 +3076,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3117,7 +3117,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3207,7 +3207,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3347,7 +3347,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3427,7 +3427,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3500,7 +3500,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3566,7 +3566,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3639,7 +3639,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3779,7 +3779,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3841,7 +3841,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3945,7 +3945,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4008,7 +4008,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4085,7 +4085,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4149,7 +4149,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4212,7 +4212,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4286,7 +4286,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4350,7 +4350,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4591,7 +4591,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4753,7 +4753,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4829,7 +4829,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4973,7 +4973,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5223,7 +5223,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5394,7 +5394,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5498,7 +5498,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5612,7 +5612,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5726,7 +5726,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5844,7 +5844,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5948,7 +5948,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6026,7 +6026,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6142,7 +6142,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6206,7 +6206,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6322,7 +6322,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6386,7 +6386,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6502,7 +6502,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6656,7 +6656,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6753,7 +6753,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6889,7 +6889,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -7003,7 +7003,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -7097,7 +7097,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -7183,7 +7183,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -7640,7 +7640,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -7747,7 +7747,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -7993,7 +7993,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8148,7 +8148,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8232,7 +8232,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8303,7 +8303,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8459,7 +8459,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8558,7 +8558,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8685,7 +8685,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8749,7 +8749,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8850,7 +8850,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8972,7 +8972,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9045,7 +9045,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9191,7 +9191,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9264,7 +9264,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9388,7 +9388,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9461,7 +9461,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9585,7 +9585,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9658,7 +9658,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9782,7 +9782,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9855,7 +9855,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9979,7 +9979,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10052,7 +10052,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10176,7 +10176,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10241,7 +10241,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10353,7 +10353,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10426,7 +10426,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10499,7 +10499,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10572,7 +10572,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10645,7 +10645,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10718,7 +10718,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10791,7 +10791,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10878,7 +10878,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10965,7 +10965,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11143,7 +11143,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11228,7 +11228,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11327,7 +11327,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11491,7 +11491,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11669,7 +11669,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11752,7 +11752,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11911,7 +11911,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11982,7 +11982,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12058,7 +12058,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12153,7 +12153,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12325,7 +12325,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12529,7 +12529,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12605,7 +12605,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12678,7 +12678,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12886,7 +12886,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12972,7 +12972,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13146,7 +13146,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13222,7 +13222,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13399,7 +13399,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13573,7 +13573,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13660,7 +13660,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13772,7 +13772,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13928,7 +13928,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14000,7 +14000,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14090,7 +14090,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14162,7 +14162,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14258,7 +14258,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14412,7 +14412,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14544,7 +14544,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14650,7 +14650,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14799,7 +14799,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14953,7 +14953,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15055,7 +15055,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15183,7 +15183,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15256,7 +15256,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15334,7 +15334,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15471,7 +15471,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15544,7 +15544,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15626,7 +15626,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15690,7 +15690,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15786,7 +15786,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15850,7 +15850,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16008,7 +16008,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16163,7 +16163,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16255,7 +16255,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16343,7 +16343,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16407,7 +16407,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16523,7 +16523,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16791,7 +16791,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16862,7 +16862,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16936,7 +16936,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17014,7 +17014,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17108,7 +17108,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17290,7 +17290,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17556,7 +17556,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17619,7 +17619,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17771,7 +17771,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17834,7 +17834,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17944,7 +17944,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18052,7 +18052,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18093,7 +18093,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18403,7 +18403,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18476,7 +18476,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18594,7 +18594,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18667,7 +18667,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18745,7 +18745,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18893,7 +18893,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19023,7 +19023,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19123,7 +19123,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19289,7 +19289,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19362,7 +19362,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19426,7 +19426,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19544,7 +19544,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19608,7 +19608,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19768,7 +19768,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19852,7 +19852,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19997,7 +19997,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20067,7 +20067,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20216,7 +20216,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20257,7 +20257,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20378,7 +20378,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20419,7 +20419,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20493,7 +20493,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20582,7 +20582,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20692,7 +20692,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20780,7 +20780,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20852,7 +20852,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20893,7 +20893,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20999,7 +20999,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21040,7 +21040,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21112,7 +21112,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21176,7 +21176,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21284,7 +21284,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21355,7 +21355,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21427,7 +21427,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21533,7 +21533,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21732,7 +21732,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21809,7 +21809,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21991,7 +21991,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22064,7 +22064,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22226,7 +22226,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22352,7 +22352,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22468,7 +22468,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22626,7 +22626,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22706,7 +22706,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22747,7 +22747,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22873,7 +22873,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22951,7 +22951,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23069,7 +23069,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23209,7 +23209,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23343,7 +23343,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23489,7 +23489,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23625,7 +23625,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23763,7 +23763,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23859,7 +23859,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24010,7 +24010,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24087,7 +24087,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24128,7 +24128,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24192,7 +24192,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24255,7 +24255,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24333,7 +24333,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24396,7 +24396,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24460,7 +24460,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24531,7 +24531,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24658,7 +24658,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24721,7 +24721,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24799,7 +24799,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24897,7 +24897,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24975,7 +24975,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25016,7 +25016,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25079,7 +25079,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25120,7 +25120,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25183,7 +25183,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25224,7 +25224,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25316,7 +25316,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25357,7 +25357,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25435,7 +25435,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25506,7 +25506,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25569,7 +25569,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25610,7 +25610,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25687,7 +25687,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25728,7 +25728,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25820,7 +25820,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25861,7 +25861,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25936,7 +25936,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25977,7 +25977,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26040,7 +26040,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26081,7 +26081,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26199,7 +26199,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26240,7 +26240,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26408,7 +26408,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26500,7 +26500,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26576,7 +26576,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26765,7 +26765,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26840,7 +26840,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26932,7 +26932,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27003,7 +27003,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27080,7 +27080,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27155,7 +27155,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27219,7 +27219,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27309,7 +27309,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27387,7 +27387,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27629,7 +27629,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27860,7 +27860,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27923,7 +27923,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27989,7 +27989,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28055,7 +28055,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28137,7 +28137,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28240,7 +28240,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28371,7 +28371,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28450,7 +28450,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28558,7 +28558,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28716,7 +28716,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28757,7 +28757,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28932,7 +28932,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28973,7 +28973,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29161,7 +29161,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29202,7 +29202,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29288,7 +29288,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29359,7 +29359,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29579,7 +29579,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29714,7 +29714,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29787,7 +29787,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29922,7 +29922,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29995,7 +29995,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30143,7 +30143,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30208,7 +30208,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30342,7 +30342,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30415,7 +30415,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30573,7 +30573,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30649,7 +30649,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30845,7 +30845,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30918,7 +30918,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31054,7 +31054,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31127,7 +31127,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31215,7 +31215,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31285,7 +31285,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31383,7 +31383,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31463,7 +31463,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31583,7 +31583,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31717,7 +31717,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31815,7 +31815,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31913,7 +31913,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31993,7 +31993,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32127,7 +32127,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32219,7 +32219,7 @@ def validate(self): return def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32299,7 +32299,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32379,7 +32379,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32459,7 +32459,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32539,7 +32539,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32619,7 +32619,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32699,7 +32699,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32779,7 +32779,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32859,7 +32859,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32939,7 +32939,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33019,7 +33019,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33099,7 +33099,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33179,7 +33179,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33259,7 +33259,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33339,7 +33339,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33419,7 +33419,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] + L = [f"{key}={value!r}" for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): From c1ece14dd522740f0aab53dc1a5f5a37d70f0fc3 Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Sat, 14 Feb 2026 18:27:33 -0800 Subject: [PATCH 02/30] style: fix ruff formatting in residual_evaluator lambda Co-Authored-By: Claude Opus 4.6 --- pyiceberg/table/__init__.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index 63fd1509e4..164eba5d32 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -2002,13 +2002,11 @@ def _build_residual_evaluator(self, spec_id: int) -> Callable[[DataFile], Residu # The lambda created here is run in multiple threads. # So we avoid creating _EvaluatorExpression methods bound to a single # shared instance across multiple threads. - return lambda datafile: ( - residual_evaluator_of( - spec=spec, - expr=self.row_filter, - case_sensitive=self.case_sensitive, - schema=self.table_metadata.schema(), - ) + return lambda datafile: residual_evaluator_of( + spec=spec, + expr=self.row_filter, + case_sensitive=self.case_sensitive, + schema=self.table_metadata.schema(), ) @staticmethod From 70af67f0a56cdfda2f628533e83bf832685e706f Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Sat, 14 Feb 2026 18:28:46 -0800 Subject: [PATCH 03/30] chore: remove unintended vendor directory changes Co-Authored-By: Claude Opus 4.6 --- vendor/fb303/FacebookService.py | 61 +- vendor/hive_metastore/ThriftHiveMetastore.py | 1337 +++++++++++------- vendor/hive_metastore/ttypes.py | 626 ++++---- 3 files changed, 1147 insertions(+), 877 deletions(-) diff --git a/vendor/fb303/FacebookService.py b/vendor/fb303/FacebookService.py index 7115e8a0d8..c46b0a82a2 100644 --- a/vendor/fb303/FacebookService.py +++ b/vendor/fb303/FacebookService.py @@ -50,18 +50,21 @@ def getName(self): Returns a descriptive name of the service """ + pass def getVersion(self): """ Returns the version of the service """ + pass def getStatus(self): """ Gets the status of this service """ + pass def getStatusDetails(self): """ @@ -69,12 +72,14 @@ def getStatusDetails(self): the dead or warning state, or what is being started or stopped. """ + pass def getCounters(self): """ Gets the counters for this service """ + pass def getCounter(self, key): """ @@ -84,6 +89,7 @@ def getCounter(self, key): - key """ + pass def setOption(self, key, value): """ @@ -94,6 +100,7 @@ def setOption(self, key, value): - value """ + pass def getOption(self, key): """ @@ -103,12 +110,14 @@ def getOption(self, key): - key """ + pass def getOptions(self): """ Gets all options """ + pass def getCpuProfile(self, profileDurationInSec): """ @@ -119,24 +128,28 @@ def getCpuProfile(self, profileDurationInSec): - profileDurationInSec """ + pass def aliveSince(self): """ Returns the unix time that the server has been running since """ + pass def reinitialize(self): """ Tell the server to reload its configuration, reopen log files, etc """ + pass def shutdown(self): """ Suggest a shutdown to the server """ + pass class Client(Iface): @@ -877,7 +890,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -945,7 +958,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -998,7 +1011,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1066,7 +1079,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1119,7 +1132,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1185,7 +1198,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1238,7 +1251,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1306,7 +1319,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1359,7 +1372,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1439,7 +1452,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1515,7 +1528,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1590,7 +1603,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1680,7 +1693,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1741,7 +1754,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1809,7 +1822,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1886,7 +1899,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1939,7 +1952,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2023,7 +2036,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2097,7 +2110,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2174,7 +2187,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2227,7 +2240,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2293,7 +2306,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2346,7 +2359,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2391,7 +2404,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): diff --git a/vendor/hive_metastore/ThriftHiveMetastore.py b/vendor/hive_metastore/ThriftHiveMetastore.py index 92ba9eaeae..4d25c087c7 100644 --- a/vendor/hive_metastore/ThriftHiveMetastore.py +++ b/vendor/hive_metastore/ThriftHiveMetastore.py @@ -52,6 +52,7 @@ def getMetaConf(self, key): - key """ + pass def setMetaConf(self, key, value): """ @@ -60,6 +61,7 @@ def setMetaConf(self, key, value): - value """ + pass def create_catalog(self, catalog): """ @@ -67,6 +69,7 @@ def create_catalog(self, catalog): - catalog """ + pass def alter_catalog(self, rqst): """ @@ -74,6 +77,7 @@ def alter_catalog(self, rqst): - rqst """ + pass def get_catalog(self, catName): """ @@ -81,6 +85,7 @@ def get_catalog(self, catName): - catName """ + pass def get_catalogs(self): pass @@ -91,6 +96,7 @@ def drop_catalog(self, catName): - catName """ + pass def create_database(self, database): """ @@ -98,6 +104,7 @@ def create_database(self, database): - database """ + pass def get_database(self, name): """ @@ -105,6 +112,7 @@ def get_database(self, name): - name """ + pass def get_database_req(self, request): """ @@ -112,6 +120,7 @@ def get_database_req(self, request): - request """ + pass def drop_database(self, name, deleteData, cascade): """ @@ -121,6 +130,7 @@ def drop_database(self, name, deleteData, cascade): - cascade """ + pass def drop_database_req(self, req): """ @@ -128,6 +138,7 @@ def drop_database_req(self, req): - req """ + pass def get_databases(self, pattern): """ @@ -135,6 +146,7 @@ def get_databases(self, pattern): - pattern """ + pass def get_all_databases(self): pass @@ -146,6 +158,7 @@ def alter_database(self, dbname, db): - db """ + pass def create_dataconnector(self, connector): """ @@ -153,6 +166,7 @@ def create_dataconnector(self, connector): - connector """ + pass def get_dataconnector_req(self, request): """ @@ -160,6 +174,7 @@ def get_dataconnector_req(self, request): - request """ + pass def drop_dataconnector(self, name, ifNotExists, checkReferences): """ @@ -169,6 +184,7 @@ def drop_dataconnector(self, name, ifNotExists, checkReferences): - checkReferences """ + pass def get_dataconnectors(self): pass @@ -180,6 +196,7 @@ def alter_dataconnector(self, name, connector): - connector """ + pass def get_type(self, name): """ @@ -187,6 +204,7 @@ def get_type(self, name): - name """ + pass def create_type(self, type): """ @@ -194,6 +212,7 @@ def create_type(self, type): - type """ + pass def drop_type(self, type): """ @@ -201,6 +220,7 @@ def drop_type(self, type): - type """ + pass def get_type_all(self, name): """ @@ -208,6 +228,7 @@ def get_type_all(self, name): - name """ + pass def get_fields(self, db_name, table_name): """ @@ -216,6 +237,7 @@ def get_fields(self, db_name, table_name): - table_name """ + pass def get_fields_with_environment_context(self, db_name, table_name, environment_context): """ @@ -225,6 +247,7 @@ def get_fields_with_environment_context(self, db_name, table_name, environment_c - environment_context """ + pass def get_fields_req(self, req): """ @@ -232,6 +255,7 @@ def get_fields_req(self, req): - req """ + pass def get_schema(self, db_name, table_name): """ @@ -240,6 +264,7 @@ def get_schema(self, db_name, table_name): - table_name """ + pass def get_schema_with_environment_context(self, db_name, table_name, environment_context): """ @@ -249,6 +274,7 @@ def get_schema_with_environment_context(self, db_name, table_name, environment_c - environment_context """ + pass def get_schema_req(self, req): """ @@ -256,6 +282,7 @@ def get_schema_req(self, req): - req """ + pass def create_table(self, tbl): """ @@ -263,6 +290,7 @@ def create_table(self, tbl): - tbl """ + pass def create_table_with_environment_context(self, tbl, environment_context): """ @@ -271,6 +299,7 @@ def create_table_with_environment_context(self, tbl, environment_context): - environment_context """ + pass def create_table_with_constraints( self, tbl, primaryKeys, foreignKeys, uniqueConstraints, notNullConstraints, defaultConstraints, checkConstraints @@ -286,6 +315,7 @@ def create_table_with_constraints( - checkConstraints """ + pass def create_table_req(self, request): """ @@ -293,6 +323,7 @@ def create_table_req(self, request): - request """ + pass def drop_constraint(self, req): """ @@ -300,6 +331,7 @@ def drop_constraint(self, req): - req """ + pass def add_primary_key(self, req): """ @@ -307,6 +339,7 @@ def add_primary_key(self, req): - req """ + pass def add_foreign_key(self, req): """ @@ -314,6 +347,7 @@ def add_foreign_key(self, req): - req """ + pass def add_unique_constraint(self, req): """ @@ -321,6 +355,7 @@ def add_unique_constraint(self, req): - req """ + pass def add_not_null_constraint(self, req): """ @@ -328,6 +363,7 @@ def add_not_null_constraint(self, req): - req """ + pass def add_default_constraint(self, req): """ @@ -335,6 +371,7 @@ def add_default_constraint(self, req): - req """ + pass def add_check_constraint(self, req): """ @@ -342,6 +379,7 @@ def add_check_constraint(self, req): - req """ + pass def translate_table_dryrun(self, request): """ @@ -349,6 +387,7 @@ def translate_table_dryrun(self, request): - request """ + pass def drop_table(self, dbname, name, deleteData): """ @@ -358,6 +397,7 @@ def drop_table(self, dbname, name, deleteData): - deleteData """ + pass def drop_table_with_environment_context(self, dbname, name, deleteData, environment_context): """ @@ -368,6 +408,7 @@ def drop_table_with_environment_context(self, dbname, name, deleteData, environm - environment_context """ + pass def truncate_table(self, dbName, tableName, partNames): """ @@ -377,6 +418,7 @@ def truncate_table(self, dbName, tableName, partNames): - partNames """ + pass def truncate_table_req(self, req): """ @@ -384,6 +426,7 @@ def truncate_table_req(self, req): - req """ + pass def get_tables(self, db_name, pattern): """ @@ -392,6 +435,7 @@ def get_tables(self, db_name, pattern): - pattern """ + pass def get_tables_by_type(self, db_name, pattern, tableType): """ @@ -401,6 +445,7 @@ def get_tables_by_type(self, db_name, pattern, tableType): - tableType """ + pass def get_all_materialized_view_objects_for_rewriting(self): pass @@ -411,6 +456,7 @@ def get_materialized_views_for_rewriting(self, db_name): - db_name """ + pass def get_table_meta(self, db_patterns, tbl_patterns, tbl_types): """ @@ -420,6 +466,7 @@ def get_table_meta(self, db_patterns, tbl_patterns, tbl_types): - tbl_types """ + pass def get_all_tables(self, db_name): """ @@ -427,6 +474,7 @@ def get_all_tables(self, db_name): - db_name """ + pass def get_table(self, dbname, tbl_name): """ @@ -435,6 +483,7 @@ def get_table(self, dbname, tbl_name): - tbl_name """ + pass def get_table_objects_by_name(self, dbname, tbl_names): """ @@ -443,6 +492,7 @@ def get_table_objects_by_name(self, dbname, tbl_names): - tbl_names """ + pass def get_tables_ext(self, req): """ @@ -450,6 +500,7 @@ def get_tables_ext(self, req): - req """ + pass def get_table_req(self, req): """ @@ -457,6 +508,7 @@ def get_table_req(self, req): - req """ + pass def get_table_objects_by_name_req(self, req): """ @@ -464,6 +516,7 @@ def get_table_objects_by_name_req(self, req): - req """ + pass def get_materialization_invalidation_info(self, creation_metadata, validTxnList): """ @@ -472,6 +525,7 @@ def get_materialization_invalidation_info(self, creation_metadata, validTxnList) - validTxnList """ + pass def update_creation_metadata(self, catName, dbname, tbl_name, creation_metadata): """ @@ -482,6 +536,7 @@ def update_creation_metadata(self, catName, dbname, tbl_name, creation_metadata) - creation_metadata """ + pass def get_table_names_by_filter(self, dbname, filter, max_tables): """ @@ -491,6 +546,7 @@ def get_table_names_by_filter(self, dbname, filter, max_tables): - max_tables """ + pass def alter_table(self, dbname, tbl_name, new_tbl): """ @@ -500,6 +556,7 @@ def alter_table(self, dbname, tbl_name, new_tbl): - new_tbl """ + pass def alter_table_with_environment_context(self, dbname, tbl_name, new_tbl, environment_context): """ @@ -510,6 +567,7 @@ def alter_table_with_environment_context(self, dbname, tbl_name, new_tbl, enviro - environment_context """ + pass def alter_table_with_cascade(self, dbname, tbl_name, new_tbl, cascade): """ @@ -520,6 +578,7 @@ def alter_table_with_cascade(self, dbname, tbl_name, new_tbl, cascade): - cascade """ + pass def alter_table_req(self, req): """ @@ -527,6 +586,7 @@ def alter_table_req(self, req): - req """ + pass def add_partition(self, new_part): """ @@ -534,6 +594,7 @@ def add_partition(self, new_part): - new_part """ + pass def add_partition_with_environment_context(self, new_part, environment_context): """ @@ -542,6 +603,7 @@ def add_partition_with_environment_context(self, new_part, environment_context): - environment_context """ + pass def add_partitions(self, new_parts): """ @@ -549,6 +611,7 @@ def add_partitions(self, new_parts): - new_parts """ + pass def add_partitions_pspec(self, new_parts): """ @@ -556,6 +619,7 @@ def add_partitions_pspec(self, new_parts): - new_parts """ + pass def append_partition(self, db_name, tbl_name, part_vals): """ @@ -565,6 +629,7 @@ def append_partition(self, db_name, tbl_name, part_vals): - part_vals """ + pass def add_partitions_req(self, request): """ @@ -572,6 +637,7 @@ def add_partitions_req(self, request): - request """ + pass def append_partition_with_environment_context(self, db_name, tbl_name, part_vals, environment_context): """ @@ -582,6 +648,7 @@ def append_partition_with_environment_context(self, db_name, tbl_name, part_vals - environment_context """ + pass def append_partition_by_name(self, db_name, tbl_name, part_name): """ @@ -591,6 +658,7 @@ def append_partition_by_name(self, db_name, tbl_name, part_name): - part_name """ + pass def append_partition_by_name_with_environment_context(self, db_name, tbl_name, part_name, environment_context): """ @@ -601,6 +669,7 @@ def append_partition_by_name_with_environment_context(self, db_name, tbl_name, p - environment_context """ + pass def drop_partition(self, db_name, tbl_name, part_vals, deleteData): """ @@ -611,6 +680,7 @@ def drop_partition(self, db_name, tbl_name, part_vals, deleteData): - deleteData """ + pass def drop_partition_with_environment_context(self, db_name, tbl_name, part_vals, deleteData, environment_context): """ @@ -622,6 +692,7 @@ def drop_partition_with_environment_context(self, db_name, tbl_name, part_vals, - environment_context """ + pass def drop_partition_by_name(self, db_name, tbl_name, part_name, deleteData): """ @@ -632,6 +703,7 @@ def drop_partition_by_name(self, db_name, tbl_name, part_name, deleteData): - deleteData """ + pass def drop_partition_by_name_with_environment_context(self, db_name, tbl_name, part_name, deleteData, environment_context): """ @@ -643,6 +715,7 @@ def drop_partition_by_name_with_environment_context(self, db_name, tbl_name, par - environment_context """ + pass def drop_partitions_req(self, req): """ @@ -650,6 +723,7 @@ def drop_partitions_req(self, req): - req """ + pass def get_partition(self, db_name, tbl_name, part_vals): """ @@ -659,6 +733,7 @@ def get_partition(self, db_name, tbl_name, part_vals): - part_vals """ + pass def get_partition_req(self, req): """ @@ -666,6 +741,7 @@ def get_partition_req(self, req): - req """ + pass def exchange_partition(self, partitionSpecs, source_db, source_table_name, dest_db, dest_table_name): """ @@ -677,6 +753,7 @@ def exchange_partition(self, partitionSpecs, source_db, source_table_name, dest_ - dest_table_name """ + pass def exchange_partitions(self, partitionSpecs, source_db, source_table_name, dest_db, dest_table_name): """ @@ -688,6 +765,7 @@ def exchange_partitions(self, partitionSpecs, source_db, source_table_name, dest - dest_table_name """ + pass def get_partition_with_auth(self, db_name, tbl_name, part_vals, user_name, group_names): """ @@ -699,6 +777,7 @@ def get_partition_with_auth(self, db_name, tbl_name, part_vals, user_name, group - group_names """ + pass def get_partition_by_name(self, db_name, tbl_name, part_name): """ @@ -708,6 +787,7 @@ def get_partition_by_name(self, db_name, tbl_name, part_name): - part_name """ + pass def get_partitions(self, db_name, tbl_name, max_parts): """ @@ -717,6 +797,7 @@ def get_partitions(self, db_name, tbl_name, max_parts): - max_parts """ + pass def get_partitions_req(self, req): """ @@ -724,6 +805,7 @@ def get_partitions_req(self, req): - req """ + pass def get_partitions_with_auth(self, db_name, tbl_name, max_parts, user_name, group_names): """ @@ -735,6 +817,7 @@ def get_partitions_with_auth(self, db_name, tbl_name, max_parts, user_name, grou - group_names """ + pass def get_partitions_pspec(self, db_name, tbl_name, max_parts): """ @@ -744,6 +827,7 @@ def get_partitions_pspec(self, db_name, tbl_name, max_parts): - max_parts """ + pass def get_partition_names(self, db_name, tbl_name, max_parts): """ @@ -753,6 +837,7 @@ def get_partition_names(self, db_name, tbl_name, max_parts): - max_parts """ + pass def get_partition_values(self, request): """ @@ -760,6 +845,7 @@ def get_partition_values(self, request): - request """ + pass def get_partitions_ps(self, db_name, tbl_name, part_vals, max_parts): """ @@ -770,6 +856,7 @@ def get_partitions_ps(self, db_name, tbl_name, part_vals, max_parts): - max_parts """ + pass def get_partitions_ps_with_auth(self, db_name, tbl_name, part_vals, max_parts, user_name, group_names): """ @@ -782,6 +869,7 @@ def get_partitions_ps_with_auth(self, db_name, tbl_name, part_vals, max_parts, u - group_names """ + pass def get_partitions_ps_with_auth_req(self, req): """ @@ -789,6 +877,7 @@ def get_partitions_ps_with_auth_req(self, req): - req """ + pass def get_partition_names_ps(self, db_name, tbl_name, part_vals, max_parts): """ @@ -799,6 +888,7 @@ def get_partition_names_ps(self, db_name, tbl_name, part_vals, max_parts): - max_parts """ + pass def get_partition_names_ps_req(self, req): """ @@ -806,6 +896,7 @@ def get_partition_names_ps_req(self, req): - req """ + pass def get_partition_names_req(self, req): """ @@ -813,6 +904,7 @@ def get_partition_names_req(self, req): - req """ + pass def get_partitions_by_filter(self, db_name, tbl_name, filter, max_parts): """ @@ -823,6 +915,7 @@ def get_partitions_by_filter(self, db_name, tbl_name, filter, max_parts): - max_parts """ + pass def get_part_specs_by_filter(self, db_name, tbl_name, filter, max_parts): """ @@ -833,6 +926,7 @@ def get_part_specs_by_filter(self, db_name, tbl_name, filter, max_parts): - max_parts """ + pass def get_partitions_by_expr(self, req): """ @@ -840,6 +934,7 @@ def get_partitions_by_expr(self, req): - req """ + pass def get_partitions_spec_by_expr(self, req): """ @@ -847,6 +942,7 @@ def get_partitions_spec_by_expr(self, req): - req """ + pass def get_num_partitions_by_filter(self, db_name, tbl_name, filter): """ @@ -856,6 +952,7 @@ def get_num_partitions_by_filter(self, db_name, tbl_name, filter): - filter """ + pass def get_partitions_by_names(self, db_name, tbl_name, names): """ @@ -865,6 +962,7 @@ def get_partitions_by_names(self, db_name, tbl_name, names): - names """ + pass def get_partitions_by_names_req(self, req): """ @@ -872,6 +970,7 @@ def get_partitions_by_names_req(self, req): - req """ + pass def alter_partition(self, db_name, tbl_name, new_part): """ @@ -881,6 +980,7 @@ def alter_partition(self, db_name, tbl_name, new_part): - new_part """ + pass def alter_partitions(self, db_name, tbl_name, new_parts): """ @@ -890,6 +990,7 @@ def alter_partitions(self, db_name, tbl_name, new_parts): - new_parts """ + pass def alter_partitions_with_environment_context(self, db_name, tbl_name, new_parts, environment_context): """ @@ -900,6 +1001,7 @@ def alter_partitions_with_environment_context(self, db_name, tbl_name, new_parts - environment_context """ + pass def alter_partitions_req(self, req): """ @@ -907,6 +1009,7 @@ def alter_partitions_req(self, req): - req """ + pass def alter_partition_with_environment_context(self, db_name, tbl_name, new_part, environment_context): """ @@ -917,6 +1020,7 @@ def alter_partition_with_environment_context(self, db_name, tbl_name, new_part, - environment_context """ + pass def rename_partition(self, db_name, tbl_name, part_vals, new_part): """ @@ -927,6 +1031,7 @@ def rename_partition(self, db_name, tbl_name, part_vals, new_part): - new_part """ + pass def rename_partition_req(self, req): """ @@ -934,6 +1039,7 @@ def rename_partition_req(self, req): - req """ + pass def partition_name_has_valid_characters(self, part_vals, throw_exception): """ @@ -942,6 +1048,7 @@ def partition_name_has_valid_characters(self, part_vals, throw_exception): - throw_exception """ + pass def get_config_value(self, name, defaultValue): """ @@ -950,6 +1057,7 @@ def get_config_value(self, name, defaultValue): - defaultValue """ + pass def partition_name_to_vals(self, part_name): """ @@ -957,6 +1065,7 @@ def partition_name_to_vals(self, part_name): - part_name """ + pass def partition_name_to_spec(self, part_name): """ @@ -964,6 +1073,7 @@ def partition_name_to_spec(self, part_name): - part_name """ + pass def markPartitionForEvent(self, db_name, tbl_name, part_vals, eventType): """ @@ -974,6 +1084,7 @@ def markPartitionForEvent(self, db_name, tbl_name, part_vals, eventType): - eventType """ + pass def isPartitionMarkedForEvent(self, db_name, tbl_name, part_vals, eventType): """ @@ -984,6 +1095,7 @@ def isPartitionMarkedForEvent(self, db_name, tbl_name, part_vals, eventType): - eventType """ + pass def get_primary_keys(self, request): """ @@ -991,6 +1103,7 @@ def get_primary_keys(self, request): - request """ + pass def get_foreign_keys(self, request): """ @@ -998,6 +1111,7 @@ def get_foreign_keys(self, request): - request """ + pass def get_unique_constraints(self, request): """ @@ -1005,6 +1119,7 @@ def get_unique_constraints(self, request): - request """ + pass def get_not_null_constraints(self, request): """ @@ -1012,6 +1127,7 @@ def get_not_null_constraints(self, request): - request """ + pass def get_default_constraints(self, request): """ @@ -1019,6 +1135,7 @@ def get_default_constraints(self, request): - request """ + pass def get_check_constraints(self, request): """ @@ -1026,6 +1143,7 @@ def get_check_constraints(self, request): - request """ + pass def get_all_table_constraints(self, request): """ @@ -1033,6 +1151,7 @@ def get_all_table_constraints(self, request): - request """ + pass def update_table_column_statistics(self, stats_obj): """ @@ -1040,6 +1159,7 @@ def update_table_column_statistics(self, stats_obj): - stats_obj """ + pass def update_partition_column_statistics(self, stats_obj): """ @@ -1047,6 +1167,7 @@ def update_partition_column_statistics(self, stats_obj): - stats_obj """ + pass def update_table_column_statistics_req(self, req): """ @@ -1054,6 +1175,7 @@ def update_table_column_statistics_req(self, req): - req """ + pass def update_partition_column_statistics_req(self, req): """ @@ -1061,6 +1183,7 @@ def update_partition_column_statistics_req(self, req): - req """ + pass def update_transaction_statistics(self, req): """ @@ -1068,6 +1191,7 @@ def update_transaction_statistics(self, req): - req """ + pass def get_table_column_statistics(self, db_name, tbl_name, col_name): """ @@ -1077,6 +1201,7 @@ def get_table_column_statistics(self, db_name, tbl_name, col_name): - col_name """ + pass def get_partition_column_statistics(self, db_name, tbl_name, part_name, col_name): """ @@ -1087,6 +1212,7 @@ def get_partition_column_statistics(self, db_name, tbl_name, part_name, col_name - col_name """ + pass def get_table_statistics_req(self, request): """ @@ -1094,6 +1220,7 @@ def get_table_statistics_req(self, request): - request """ + pass def get_partitions_statistics_req(self, request): """ @@ -1101,6 +1228,7 @@ def get_partitions_statistics_req(self, request): - request """ + pass def get_aggr_stats_for(self, request): """ @@ -1108,6 +1236,7 @@ def get_aggr_stats_for(self, request): - request """ + pass def set_aggr_stats_for(self, request): """ @@ -1115,6 +1244,7 @@ def set_aggr_stats_for(self, request): - request """ + pass def delete_partition_column_statistics(self, db_name, tbl_name, part_name, col_name, engine): """ @@ -1126,6 +1256,7 @@ def delete_partition_column_statistics(self, db_name, tbl_name, part_name, col_n - engine """ + pass def delete_table_column_statistics(self, db_name, tbl_name, col_name, engine): """ @@ -1136,6 +1267,7 @@ def delete_table_column_statistics(self, db_name, tbl_name, col_name, engine): - engine """ + pass def create_function(self, func): """ @@ -1143,6 +1275,7 @@ def create_function(self, func): - func """ + pass def drop_function(self, dbName, funcName): """ @@ -1151,6 +1284,7 @@ def drop_function(self, dbName, funcName): - funcName """ + pass def alter_function(self, dbName, funcName, newFunc): """ @@ -1160,6 +1294,7 @@ def alter_function(self, dbName, funcName, newFunc): - newFunc """ + pass def get_functions(self, dbName, pattern): """ @@ -1168,6 +1303,7 @@ def get_functions(self, dbName, pattern): - pattern """ + pass def get_function(self, dbName, funcName): """ @@ -1176,6 +1312,7 @@ def get_function(self, dbName, funcName): - funcName """ + pass def get_all_functions(self): pass @@ -1186,6 +1323,7 @@ def create_role(self, role): - role """ + pass def drop_role(self, role_name): """ @@ -1193,6 +1331,7 @@ def drop_role(self, role_name): - role_name """ + pass def get_role_names(self): pass @@ -1208,6 +1347,7 @@ def grant_role(self, role_name, principal_name, principal_type, grantor, grantor - grant_option """ + pass def revoke_role(self, role_name, principal_name, principal_type): """ @@ -1217,6 +1357,7 @@ def revoke_role(self, role_name, principal_name, principal_type): - principal_type """ + pass def list_roles(self, principal_name, principal_type): """ @@ -1225,6 +1366,7 @@ def list_roles(self, principal_name, principal_type): - principal_type """ + pass def grant_revoke_role(self, request): """ @@ -1232,6 +1374,7 @@ def grant_revoke_role(self, request): - request """ + pass def get_principals_in_role(self, request): """ @@ -1239,6 +1382,7 @@ def get_principals_in_role(self, request): - request """ + pass def get_role_grants_for_principal(self, request): """ @@ -1246,6 +1390,7 @@ def get_role_grants_for_principal(self, request): - request """ + pass def get_privilege_set(self, hiveObject, user_name, group_names): """ @@ -1255,6 +1400,7 @@ def get_privilege_set(self, hiveObject, user_name, group_names): - group_names """ + pass def list_privileges(self, principal_name, principal_type, hiveObject): """ @@ -1264,6 +1410,7 @@ def list_privileges(self, principal_name, principal_type, hiveObject): - hiveObject """ + pass def grant_privileges(self, privileges): """ @@ -1271,6 +1418,7 @@ def grant_privileges(self, privileges): - privileges """ + pass def revoke_privileges(self, privileges): """ @@ -1278,6 +1426,7 @@ def revoke_privileges(self, privileges): - privileges """ + pass def grant_revoke_privileges(self, request): """ @@ -1285,6 +1434,7 @@ def grant_revoke_privileges(self, request): - request """ + pass def refresh_privileges(self, objToRefresh, authorizer, grantRequest): """ @@ -1294,6 +1444,7 @@ def refresh_privileges(self, objToRefresh, authorizer, grantRequest): - grantRequest """ + pass def set_ugi(self, user_name, group_names): """ @@ -1302,6 +1453,7 @@ def set_ugi(self, user_name, group_names): - group_names """ + pass def get_delegation_token(self, token_owner, renewer_kerberos_principal_name): """ @@ -1310,6 +1462,7 @@ def get_delegation_token(self, token_owner, renewer_kerberos_principal_name): - renewer_kerberos_principal_name """ + pass def renew_delegation_token(self, token_str_form): """ @@ -1317,6 +1470,7 @@ def renew_delegation_token(self, token_str_form): - token_str_form """ + pass def cancel_delegation_token(self, token_str_form): """ @@ -1324,6 +1478,7 @@ def cancel_delegation_token(self, token_str_form): - token_str_form """ + pass def add_token(self, token_identifier, delegation_token): """ @@ -1332,6 +1487,7 @@ def add_token(self, token_identifier, delegation_token): - delegation_token """ + pass def remove_token(self, token_identifier): """ @@ -1339,6 +1495,7 @@ def remove_token(self, token_identifier): - token_identifier """ + pass def get_token(self, token_identifier): """ @@ -1346,6 +1503,7 @@ def get_token(self, token_identifier): - token_identifier """ + pass def get_all_token_identifiers(self): pass @@ -1356,6 +1514,7 @@ def add_master_key(self, key): - key """ + pass def update_master_key(self, seq_number, key): """ @@ -1364,6 +1523,7 @@ def update_master_key(self, seq_number, key): - key """ + pass def remove_master_key(self, key_seq): """ @@ -1371,6 +1531,7 @@ def remove_master_key(self, key_seq): - key_seq """ + pass def get_master_keys(self): pass @@ -1387,6 +1548,7 @@ def open_txns(self, rqst): - rqst """ + pass def abort_txn(self, rqst): """ @@ -1394,6 +1556,7 @@ def abort_txn(self, rqst): - rqst """ + pass def abort_txns(self, rqst): """ @@ -1401,6 +1564,7 @@ def abort_txns(self, rqst): - rqst """ + pass def commit_txn(self, rqst): """ @@ -1408,6 +1572,7 @@ def commit_txn(self, rqst): - rqst """ + pass def get_latest_txnid_in_conflict(self, txnId): """ @@ -1415,6 +1580,7 @@ def get_latest_txnid_in_conflict(self, txnId): - txnId """ + pass def repl_tbl_writeid_state(self, rqst): """ @@ -1422,6 +1588,7 @@ def repl_tbl_writeid_state(self, rqst): - rqst """ + pass def get_valid_write_ids(self, rqst): """ @@ -1429,6 +1596,7 @@ def get_valid_write_ids(self, rqst): - rqst """ + pass def allocate_table_write_ids(self, rqst): """ @@ -1436,6 +1604,7 @@ def allocate_table_write_ids(self, rqst): - rqst """ + pass def get_max_allocated_table_write_id(self, rqst): """ @@ -1443,6 +1612,7 @@ def get_max_allocated_table_write_id(self, rqst): - rqst """ + pass def seed_write_id(self, rqst): """ @@ -1450,6 +1620,7 @@ def seed_write_id(self, rqst): - rqst """ + pass def seed_txn_id(self, rqst): """ @@ -1457,6 +1628,7 @@ def seed_txn_id(self, rqst): - rqst """ + pass def lock(self, rqst): """ @@ -1464,6 +1636,7 @@ def lock(self, rqst): - rqst """ + pass def check_lock(self, rqst): """ @@ -1471,6 +1644,7 @@ def check_lock(self, rqst): - rqst """ + pass def unlock(self, rqst): """ @@ -1478,6 +1652,7 @@ def unlock(self, rqst): - rqst """ + pass def show_locks(self, rqst): """ @@ -1485,6 +1660,7 @@ def show_locks(self, rqst): - rqst """ + pass def heartbeat(self, ids): """ @@ -1492,6 +1668,7 @@ def heartbeat(self, ids): - ids """ + pass def heartbeat_txn_range(self, txns): """ @@ -1499,6 +1676,7 @@ def heartbeat_txn_range(self, txns): - txns """ + pass def compact(self, rqst): """ @@ -1506,6 +1684,7 @@ def compact(self, rqst): - rqst """ + pass def compact2(self, rqst): """ @@ -1513,6 +1692,7 @@ def compact2(self, rqst): - rqst """ + pass def show_compact(self, rqst): """ @@ -1520,6 +1700,7 @@ def show_compact(self, rqst): - rqst """ + pass def add_dynamic_partitions(self, rqst): """ @@ -1527,6 +1708,7 @@ def add_dynamic_partitions(self, rqst): - rqst """ + pass def find_next_compact(self, workerId): """ @@ -1534,6 +1716,7 @@ def find_next_compact(self, workerId): - workerId """ + pass def find_next_compact2(self, rqst): """ @@ -1541,6 +1724,7 @@ def find_next_compact2(self, rqst): - rqst """ + pass def update_compactor_state(self, cr, txn_id): """ @@ -1549,6 +1733,7 @@ def update_compactor_state(self, cr, txn_id): - txn_id """ + pass def find_columns_with_stats(self, cr): """ @@ -1556,6 +1741,7 @@ def find_columns_with_stats(self, cr): - cr """ + pass def mark_cleaned(self, cr): """ @@ -1563,6 +1749,7 @@ def mark_cleaned(self, cr): - cr """ + pass def mark_compacted(self, cr): """ @@ -1570,6 +1757,7 @@ def mark_compacted(self, cr): - cr """ + pass def mark_failed(self, cr): """ @@ -1577,6 +1765,7 @@ def mark_failed(self, cr): - cr """ + pass def mark_refused(self, cr): """ @@ -1584,6 +1773,7 @@ def mark_refused(self, cr): - cr """ + pass def update_compaction_metrics_data(self, data): """ @@ -1591,6 +1781,7 @@ def update_compaction_metrics_data(self, data): - data """ + pass def remove_compaction_metrics_data(self, request): """ @@ -1598,6 +1789,7 @@ def remove_compaction_metrics_data(self, request): - request """ + pass def set_hadoop_jobid(self, jobId, cq_id): """ @@ -1606,6 +1798,7 @@ def set_hadoop_jobid(self, jobId, cq_id): - cq_id """ + pass def get_latest_committed_compaction_info(self, rqst): """ @@ -1613,6 +1806,7 @@ def get_latest_committed_compaction_info(self, rqst): - rqst """ + pass def get_next_notification(self, rqst): """ @@ -1620,6 +1814,7 @@ def get_next_notification(self, rqst): - rqst """ + pass def get_current_notificationEventId(self): pass @@ -1630,6 +1825,7 @@ def get_notification_events_count(self, rqst): - rqst """ + pass def fire_listener_event(self, rqst): """ @@ -1637,6 +1833,7 @@ def fire_listener_event(self, rqst): - rqst """ + pass def flushCache(self): pass @@ -1647,6 +1844,7 @@ def add_write_notification_log(self, rqst): - rqst """ + pass def add_write_notification_log_in_batch(self, rqst): """ @@ -1654,6 +1852,7 @@ def add_write_notification_log_in_batch(self, rqst): - rqst """ + pass def cm_recycle(self, request): """ @@ -1661,6 +1860,7 @@ def cm_recycle(self, request): - request """ + pass def get_file_metadata_by_expr(self, req): """ @@ -1668,6 +1868,7 @@ def get_file_metadata_by_expr(self, req): - req """ + pass def get_file_metadata(self, req): """ @@ -1675,6 +1876,7 @@ def get_file_metadata(self, req): - req """ + pass def put_file_metadata(self, req): """ @@ -1682,6 +1884,7 @@ def put_file_metadata(self, req): - req """ + pass def clear_file_metadata(self, req): """ @@ -1689,6 +1892,7 @@ def clear_file_metadata(self, req): - req """ + pass def cache_file_metadata(self, req): """ @@ -1696,6 +1900,7 @@ def cache_file_metadata(self, req): - req """ + pass def get_metastore_db_uuid(self): pass @@ -1706,6 +1911,7 @@ def create_resource_plan(self, request): - request """ + pass def get_resource_plan(self, request): """ @@ -1713,6 +1919,7 @@ def get_resource_plan(self, request): - request """ + pass def get_active_resource_plan(self, request): """ @@ -1720,6 +1927,7 @@ def get_active_resource_plan(self, request): - request """ + pass def get_all_resource_plans(self, request): """ @@ -1727,6 +1935,7 @@ def get_all_resource_plans(self, request): - request """ + pass def alter_resource_plan(self, request): """ @@ -1734,6 +1943,7 @@ def alter_resource_plan(self, request): - request """ + pass def validate_resource_plan(self, request): """ @@ -1741,6 +1951,7 @@ def validate_resource_plan(self, request): - request """ + pass def drop_resource_plan(self, request): """ @@ -1748,6 +1959,7 @@ def drop_resource_plan(self, request): - request """ + pass def create_wm_trigger(self, request): """ @@ -1755,6 +1967,7 @@ def create_wm_trigger(self, request): - request """ + pass def alter_wm_trigger(self, request): """ @@ -1762,6 +1975,7 @@ def alter_wm_trigger(self, request): - request """ + pass def drop_wm_trigger(self, request): """ @@ -1769,6 +1983,7 @@ def drop_wm_trigger(self, request): - request """ + pass def get_triggers_for_resourceplan(self, request): """ @@ -1776,6 +1991,7 @@ def get_triggers_for_resourceplan(self, request): - request """ + pass def create_wm_pool(self, request): """ @@ -1783,6 +1999,7 @@ def create_wm_pool(self, request): - request """ + pass def alter_wm_pool(self, request): """ @@ -1790,6 +2007,7 @@ def alter_wm_pool(self, request): - request """ + pass def drop_wm_pool(self, request): """ @@ -1797,6 +2015,7 @@ def drop_wm_pool(self, request): - request """ + pass def create_or_update_wm_mapping(self, request): """ @@ -1804,6 +2023,7 @@ def create_or_update_wm_mapping(self, request): - request """ + pass def drop_wm_mapping(self, request): """ @@ -1811,6 +2031,7 @@ def drop_wm_mapping(self, request): - request """ + pass def create_or_drop_wm_trigger_to_pool_mapping(self, request): """ @@ -1818,6 +2039,7 @@ def create_or_drop_wm_trigger_to_pool_mapping(self, request): - request """ + pass def create_ischema(self, schema): """ @@ -1825,6 +2047,7 @@ def create_ischema(self, schema): - schema """ + pass def alter_ischema(self, rqst): """ @@ -1832,6 +2055,7 @@ def alter_ischema(self, rqst): - rqst """ + pass def get_ischema(self, name): """ @@ -1839,6 +2063,7 @@ def get_ischema(self, name): - name """ + pass def drop_ischema(self, name): """ @@ -1846,6 +2071,7 @@ def drop_ischema(self, name): - name """ + pass def add_schema_version(self, schemaVersion): """ @@ -1853,6 +2079,7 @@ def add_schema_version(self, schemaVersion): - schemaVersion """ + pass def get_schema_version(self, schemaVersion): """ @@ -1860,6 +2087,7 @@ def get_schema_version(self, schemaVersion): - schemaVersion """ + pass def get_schema_latest_version(self, schemaName): """ @@ -1867,6 +2095,7 @@ def get_schema_latest_version(self, schemaName): - schemaName """ + pass def get_schema_all_versions(self, schemaName): """ @@ -1874,6 +2103,7 @@ def get_schema_all_versions(self, schemaName): - schemaName """ + pass def drop_schema_version(self, schemaVersion): """ @@ -1881,6 +2111,7 @@ def drop_schema_version(self, schemaVersion): - schemaVersion """ + pass def get_schemas_by_cols(self, rqst): """ @@ -1888,6 +2119,7 @@ def get_schemas_by_cols(self, rqst): - rqst """ + pass def map_schema_version_to_serde(self, rqst): """ @@ -1895,6 +2127,7 @@ def map_schema_version_to_serde(self, rqst): - rqst """ + pass def set_schema_version_state(self, rqst): """ @@ -1902,6 +2135,7 @@ def set_schema_version_state(self, rqst): - rqst """ + pass def add_serde(self, serde): """ @@ -1909,6 +2143,7 @@ def add_serde(self, serde): - serde """ + pass def get_serde(self, rqst): """ @@ -1916,6 +2151,7 @@ def get_serde(self, rqst): - rqst """ + pass def get_lock_materialization_rebuild(self, dbName, tableName, txnId): """ @@ -1925,6 +2161,7 @@ def get_lock_materialization_rebuild(self, dbName, tableName, txnId): - txnId """ + pass def heartbeat_lock_materialization_rebuild(self, dbName, tableName, txnId): """ @@ -1934,6 +2171,7 @@ def heartbeat_lock_materialization_rebuild(self, dbName, tableName, txnId): - txnId """ + pass def add_runtime_stats(self, stat): """ @@ -1941,6 +2179,7 @@ def add_runtime_stats(self, stat): - stat """ + pass def get_runtime_stats(self, rqst): """ @@ -1948,6 +2187,7 @@ def get_runtime_stats(self, rqst): - rqst """ + pass def get_partitions_with_specs(self, request): """ @@ -1955,6 +2195,7 @@ def get_partitions_with_specs(self, request): - request """ + pass def scheduled_query_poll(self, request): """ @@ -1962,6 +2203,7 @@ def scheduled_query_poll(self, request): - request """ + pass def scheduled_query_maintenance(self, request): """ @@ -1969,6 +2211,7 @@ def scheduled_query_maintenance(self, request): - request """ + pass def scheduled_query_progress(self, info): """ @@ -1976,6 +2219,7 @@ def scheduled_query_progress(self, info): - info """ + pass def get_scheduled_query(self, scheduleKey): """ @@ -1983,6 +2227,7 @@ def get_scheduled_query(self, scheduleKey): - scheduleKey """ + pass def add_replication_metrics(self, replicationMetricList): """ @@ -1990,6 +2235,7 @@ def add_replication_metrics(self, replicationMetricList): - replicationMetricList """ + pass def get_replication_metrics(self, rqst): """ @@ -1997,6 +2243,7 @@ def get_replication_metrics(self, rqst): - rqst """ + pass def get_open_txns_req(self, getOpenTxnsRequest): """ @@ -2004,6 +2251,7 @@ def get_open_txns_req(self, getOpenTxnsRequest): - getOpenTxnsRequest """ + pass def create_stored_procedure(self, proc): """ @@ -2011,6 +2259,7 @@ def create_stored_procedure(self, proc): - proc """ + pass def get_stored_procedure(self, request): """ @@ -2018,6 +2267,7 @@ def get_stored_procedure(self, request): - request """ + pass def drop_stored_procedure(self, request): """ @@ -2025,6 +2275,7 @@ def drop_stored_procedure(self, request): - request """ + pass def get_all_stored_procedures(self, request): """ @@ -2032,6 +2283,7 @@ def get_all_stored_procedures(self, request): - request """ + pass def find_package(self, request): """ @@ -2039,6 +2291,7 @@ def find_package(self, request): - request """ + pass def add_package(self, request): """ @@ -2046,6 +2299,7 @@ def add_package(self, request): - request """ + pass def get_all_packages(self, request): """ @@ -2053,6 +2307,7 @@ def get_all_packages(self, request): - request """ + pass def drop_package(self, request): """ @@ -2060,6 +2315,7 @@ def drop_package(self, request): - request """ + pass def get_all_write_event_info(self, request): """ @@ -2067,6 +2323,7 @@ def get_all_write_event_info(self, request): - request """ + pass class Client(fb303.FacebookService.Client, Iface): @@ -19984,7 +20241,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20073,7 +20330,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20170,7 +20427,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20252,7 +20509,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20328,7 +20585,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20427,7 +20684,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20517,7 +20774,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20616,7 +20873,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20706,7 +20963,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20806,7 +21063,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20873,7 +21130,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20952,7 +21209,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21034,7 +21291,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21133,7 +21390,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21223,7 +21480,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21322,7 +21579,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21413,7 +21670,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21513,7 +21770,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21602,7 +21859,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21702,7 +21959,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21816,7 +22073,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21929,7 +22186,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22019,7 +22276,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22118,7 +22375,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22209,7 +22466,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22308,7 +22565,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22368,7 +22625,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22458,7 +22715,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22554,7 +22811,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22648,7 +22905,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22731,7 +22988,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22830,7 +23087,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22920,7 +23177,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23020,7 +23277,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23134,7 +23391,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23224,7 +23481,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23292,7 +23549,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23382,7 +23639,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23478,7 +23735,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23572,7 +23829,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23656,7 +23913,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23756,7 +24013,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23845,7 +24102,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23956,7 +24213,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24053,7 +24310,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24152,7 +24409,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24242,7 +24499,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24344,7 +24601,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24441,7 +24698,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24568,7 +24825,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24692,7 +24949,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24826,7 +25083,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24922,7 +25179,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25034,7 +25291,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25145,7 +25402,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25272,7 +25529,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25396,7 +25653,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25530,7 +25787,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25626,7 +25883,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25738,7 +25995,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25834,7 +26091,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25945,7 +26202,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26055,7 +26312,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26173,7 +26430,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26396,7 +26653,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26549,7 +26806,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26646,7 +26903,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26757,7 +27014,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26854,7 +27111,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26941,7 +27198,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27024,7 +27281,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27111,7 +27368,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27194,7 +27451,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27281,7 +27538,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27364,7 +27621,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27451,7 +27708,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27534,7 +27791,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27621,7 +27878,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27704,7 +27961,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27791,7 +28048,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27874,7 +28131,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27961,7 +28218,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28044,7 +28301,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28168,7 +28425,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28298,7 +28555,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28399,7 +28656,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28522,7 +28779,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28630,7 +28887,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28752,7 +29009,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28841,7 +29098,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28917,7 +29174,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29005,7 +29262,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29102,7 +29359,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29208,7 +29465,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29319,7 +29576,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29432,7 +29689,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29492,7 +29749,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29579,7 +29836,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29662,7 +29919,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29761,7 +30018,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29882,7 +30139,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29992,7 +30249,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30075,7 +30332,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30174,7 +30431,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30271,7 +30528,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30378,7 +30635,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30492,7 +30749,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30583,7 +30840,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30658,7 +30915,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30754,7 +31011,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30836,7 +31093,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30936,7 +31193,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31025,7 +31282,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31137,7 +31394,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31247,7 +31504,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31366,7 +31623,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31504,7 +31761,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31624,7 +31881,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31741,7 +31998,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31878,7 +32135,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32002,7 +32259,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32103,7 +32360,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32227,7 +32484,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32335,7 +32592,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32458,7 +32715,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32566,7 +32823,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32649,7 +32906,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32749,7 +33006,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32838,7 +33095,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32950,7 +33207,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33059,7 +33316,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33178,7 +33435,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33282,7 +33539,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33393,7 +33650,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33497,7 +33754,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33608,7 +33865,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33743,7 +34000,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33869,7 +34126,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33965,7 +34222,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34077,7 +34334,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34225,7 +34482,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34358,7 +34615,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34483,7 +34740,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34609,7 +34866,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34747,7 +35004,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -34880,7 +35137,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35027,7 +35284,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35147,7 +35404,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35300,7 +35557,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35427,7 +35684,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35557,7 +35814,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35677,7 +35934,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35820,7 +36077,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -35947,7 +36204,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36036,7 +36293,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36136,7 +36393,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36264,7 +36521,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36378,7 +36635,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36467,7 +36724,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36567,7 +36824,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36729,7 +36986,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -36881,7 +37138,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37057,7 +37314,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37217,7 +37474,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37397,7 +37654,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37525,7 +37782,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37643,7 +37900,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37757,7 +38014,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37873,7 +38130,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -37995,7 +38252,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38084,7 +38341,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38184,7 +38441,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38338,7 +38595,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38474,7 +38731,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38590,7 +38847,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38712,7 +38969,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38828,7 +39085,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -38953,7 +39210,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39042,7 +39299,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39142,7 +39399,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39282,7 +39539,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39411,7 +39668,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39589,7 +39846,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39732,7 +39989,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39821,7 +40078,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -39921,7 +40178,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40061,7 +40318,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40193,7 +40450,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40282,7 +40539,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40382,7 +40639,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40471,7 +40728,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40582,7 +40839,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40712,7 +40969,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40841,7 +41098,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -40971,7 +41228,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41100,7 +41357,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41189,7 +41446,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41289,7 +41546,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41378,7 +41635,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41478,7 +41735,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41596,7 +41853,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41709,7 +41966,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41837,7 +42094,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -41959,7 +42216,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42048,7 +42305,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42148,7 +42405,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42265,7 +42522,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42366,7 +42623,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42485,7 +42742,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42586,7 +42843,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42718,7 +42975,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42826,7 +43083,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -42909,7 +43166,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43009,7 +43266,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43139,7 +43396,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43247,7 +43504,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43382,7 +43639,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43490,7 +43747,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43573,7 +43830,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43673,7 +43930,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43785,7 +44042,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43879,7 +44136,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -43976,7 +44233,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44072,7 +44329,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44155,7 +44412,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44254,7 +44511,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44337,7 +44594,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44442,7 +44699,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44581,7 +44838,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44737,7 +44994,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -44905,7 +45162,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45073,7 +45330,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45190,7 +45447,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45290,7 +45547,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45379,7 +45636,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45479,7 +45736,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45568,7 +45825,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45668,7 +45925,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45757,7 +46014,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45857,7 +46114,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -45946,7 +46203,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46046,7 +46303,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46135,7 +46392,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46235,7 +46492,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46324,7 +46581,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46424,7 +46681,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46513,7 +46770,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46636,7 +46893,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46739,7 +46996,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46862,7 +47119,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -46965,7 +47222,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47089,7 +47346,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47192,7 +47449,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47316,7 +47573,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47419,7 +47676,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47494,7 +47751,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47599,7 +47856,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47737,7 +47994,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -47883,7 +48140,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48028,7 +48285,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48131,7 +48388,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48231,7 +48488,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48320,7 +48577,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48420,7 +48677,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48509,7 +48766,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48609,7 +48866,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48698,7 +48955,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48821,7 +49078,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -48981,7 +49238,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49132,7 +49389,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49278,7 +49535,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49422,7 +49679,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49525,7 +49782,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49636,7 +49893,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49748,7 +50005,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49842,7 +50099,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -49953,7 +50210,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50054,7 +50311,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50152,7 +50409,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50258,7 +50515,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50355,7 +50612,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50462,7 +50719,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50529,7 +50786,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50608,7 +50865,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50690,7 +50947,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50777,7 +51034,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50860,7 +51117,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -50947,7 +51204,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51007,7 +51264,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51097,7 +51354,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51244,7 +51501,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51366,7 +51623,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51475,7 +51732,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51576,7 +51833,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51671,7 +51928,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51774,7 +52031,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51856,7 +52113,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -51944,7 +52201,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52026,7 +52283,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52114,7 +52371,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52196,7 +52453,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52284,7 +52541,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52404,7 +52661,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52506,7 +52763,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52614,7 +52871,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52724,7 +52981,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52806,7 +53063,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52893,7 +53150,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -52975,7 +53232,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53062,7 +53319,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53144,7 +53401,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53232,7 +53489,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53341,7 +53598,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53443,7 +53700,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53550,7 +53807,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53656,7 +53913,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53757,7 +54014,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53853,7 +54110,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -53936,7 +54193,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54023,7 +54280,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54106,7 +54363,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54181,7 +54438,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54272,7 +54529,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54354,7 +54611,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54430,7 +54687,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54505,7 +54762,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54581,7 +54838,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54658,7 +54915,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54711,7 +54968,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54789,7 +55046,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54865,7 +55122,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -54952,7 +55209,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55047,7 +55304,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55141,7 +55398,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55223,7 +55480,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55298,7 +55555,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55351,7 +55608,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55429,7 +55686,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55482,7 +55739,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55549,7 +55806,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55602,7 +55859,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55669,7 +55926,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55744,7 +56001,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55820,7 +56077,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55895,7 +56152,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -55970,7 +56227,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56046,7 +56303,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56121,7 +56378,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56197,7 +56454,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56284,7 +56541,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56366,7 +56623,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56453,7 +56710,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56535,7 +56792,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56589,7 +56846,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56656,7 +56913,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56756,7 +57013,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56845,7 +57102,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -56957,7 +57214,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57053,7 +57310,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57141,7 +57398,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57223,7 +57480,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57298,7 +57555,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57374,7 +57631,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57449,7 +57706,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57525,7 +57782,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57625,7 +57882,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57714,7 +57971,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57826,7 +58083,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -57922,7 +58179,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58009,7 +58266,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58092,7 +58349,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58168,7 +58425,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58243,7 +58500,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58342,7 +58599,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58432,7 +58689,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58508,7 +58765,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58583,7 +58840,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58637,7 +58894,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58704,7 +58961,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58780,7 +59037,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58855,7 +59112,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -58931,7 +59188,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59006,7 +59263,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59093,7 +59350,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59177,7 +59434,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59265,7 +59522,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59347,7 +59604,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59435,7 +59692,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59529,7 +59786,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59590,7 +59847,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59657,7 +59914,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59744,7 +60001,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59819,7 +60076,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59894,7 +60151,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -59970,7 +60227,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60045,7 +60302,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60121,7 +60378,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60196,7 +60453,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60272,7 +60529,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60347,7 +60604,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60423,7 +60680,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60510,7 +60767,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60592,7 +60849,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60667,7 +60924,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60756,7 +61013,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60817,7 +61074,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60884,7 +61141,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -60960,7 +61217,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61035,7 +61292,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61111,7 +61368,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61164,7 +61421,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61231,7 +61488,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61306,7 +61563,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61382,7 +61639,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61457,7 +61714,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61533,7 +61790,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61586,7 +61843,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61631,7 +61888,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61698,7 +61955,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61774,7 +62031,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61849,7 +62106,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -61925,7 +62182,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62000,7 +62257,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62088,7 +62345,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62170,7 +62427,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62246,7 +62503,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62321,7 +62578,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62397,7 +62654,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62472,7 +62729,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62548,7 +62805,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62623,7 +62880,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62699,7 +62956,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62774,7 +63031,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62850,7 +63107,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62903,7 +63160,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -62983,7 +63240,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63065,7 +63322,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63177,7 +63434,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63273,7 +63530,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63373,7 +63630,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63462,7 +63719,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63550,7 +63807,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63632,7 +63889,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63720,7 +63977,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63802,7 +64059,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -63914,7 +64171,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64010,7 +64267,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64110,7 +64367,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64199,7 +64456,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64311,7 +64568,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64407,7 +64664,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64531,7 +64788,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64634,7 +64891,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64746,7 +65003,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64842,7 +65099,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -64954,7 +65211,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65050,7 +65307,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65150,7 +65407,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65239,7 +65496,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65363,7 +65620,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65466,7 +65723,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65590,7 +65847,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65693,7 +65950,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65805,7 +66062,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -65901,7 +66158,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66025,7 +66282,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66128,7 +66385,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66240,7 +66497,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66336,7 +66593,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66460,7 +66717,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66563,7 +66820,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66662,7 +66919,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66752,7 +67009,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66839,7 +67096,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -66922,7 +67179,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67022,7 +67279,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67111,7 +67368,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67210,7 +67467,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67300,7 +67557,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67399,7 +67656,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67489,7 +67746,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67589,7 +67846,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67678,7 +67935,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67778,7 +68035,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67867,7 +68124,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -67975,7 +68232,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68064,7 +68321,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68151,7 +68408,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68234,7 +68491,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68322,7 +68579,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68404,7 +68661,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68491,7 +68748,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68574,7 +68831,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68673,7 +68930,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68763,7 +69020,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68850,7 +69107,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -68933,7 +69190,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69033,7 +69290,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69149,7 +69406,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69239,7 +69496,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69341,7 +69598,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69430,7 +69687,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69505,7 +69762,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69580,7 +69837,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69656,7 +69913,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69752,7 +70009,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69834,7 +70091,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -69922,7 +70179,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70004,7 +70261,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70092,7 +70349,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70174,7 +70431,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70285,7 +70542,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70382,7 +70639,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70469,7 +70726,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70552,7 +70809,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70652,7 +70909,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70741,7 +70998,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70816,7 +71073,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70892,7 +71149,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -70980,7 +71237,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71062,7 +71319,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71138,7 +71395,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71213,7 +71470,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71300,7 +71557,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71383,7 +71640,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71483,7 +71740,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71572,7 +71829,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71647,7 +71904,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71723,7 +71980,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71822,7 +72079,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -71904,7 +72161,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72004,7 +72261,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72093,7 +72350,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72168,7 +72425,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72244,7 +72501,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72343,7 +72600,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72425,7 +72682,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72500,7 +72757,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72576,7 +72833,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -72672,7 +72929,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): diff --git a/vendor/hive_metastore/ttypes.py b/vendor/hive_metastore/ttypes.py index fd279207cb..dca7aaadc7 100644 --- a/vendor/hive_metastore/ttypes.py +++ b/vendor/hive_metastore/ttypes.py @@ -643,7 +643,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -735,7 +735,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -815,7 +815,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -983,7 +983,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1231,7 +1231,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1399,7 +1399,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1555,7 +1555,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1725,7 +1725,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -1895,7 +1895,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2071,7 +2071,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2184,7 +2184,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2326,7 +2326,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2440,7 +2440,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2556,7 +2556,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2627,7 +2627,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2782,7 +2782,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2869,7 +2869,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -2931,7 +2931,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3076,7 +3076,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3117,7 +3117,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3207,7 +3207,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3347,7 +3347,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3427,7 +3427,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3500,7 +3500,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3566,7 +3566,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3639,7 +3639,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3779,7 +3779,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3841,7 +3841,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -3945,7 +3945,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4008,7 +4008,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4085,7 +4085,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4149,7 +4149,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4212,7 +4212,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4286,7 +4286,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4350,7 +4350,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4591,7 +4591,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4753,7 +4753,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4829,7 +4829,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -4973,7 +4973,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5223,7 +5223,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5394,7 +5394,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5498,7 +5498,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5612,7 +5612,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5726,7 +5726,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5844,7 +5844,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -5948,7 +5948,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6026,7 +6026,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6142,7 +6142,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6206,7 +6206,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6322,7 +6322,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6386,7 +6386,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6502,7 +6502,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6656,7 +6656,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6753,7 +6753,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -6889,7 +6889,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -7003,7 +7003,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -7097,7 +7097,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -7183,7 +7183,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -7640,7 +7640,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -7747,7 +7747,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -7993,7 +7993,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8148,7 +8148,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8232,7 +8232,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8303,7 +8303,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8459,7 +8459,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8558,7 +8558,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8685,7 +8685,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8749,7 +8749,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8850,7 +8850,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -8972,7 +8972,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9045,7 +9045,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9191,7 +9191,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9264,7 +9264,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9388,7 +9388,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9461,7 +9461,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9585,7 +9585,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9658,7 +9658,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9782,7 +9782,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9855,7 +9855,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -9979,7 +9979,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10052,7 +10052,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10176,7 +10176,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10241,7 +10241,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10353,7 +10353,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10426,7 +10426,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10499,7 +10499,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10572,7 +10572,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10645,7 +10645,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10718,7 +10718,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10791,7 +10791,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10878,7 +10878,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -10965,7 +10965,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11143,7 +11143,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11228,7 +11228,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11327,7 +11327,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11491,7 +11491,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11669,7 +11669,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11752,7 +11752,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11911,7 +11911,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -11982,7 +11982,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12058,7 +12058,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12153,7 +12153,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12325,7 +12325,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12529,7 +12529,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12605,7 +12605,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12678,7 +12678,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12886,7 +12886,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -12972,7 +12972,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13146,7 +13146,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13222,7 +13222,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13399,7 +13399,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13573,7 +13573,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13660,7 +13660,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13772,7 +13772,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -13928,7 +13928,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14000,7 +14000,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14090,7 +14090,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14162,7 +14162,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14258,7 +14258,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14412,7 +14412,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14544,7 +14544,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14650,7 +14650,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14799,7 +14799,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -14953,7 +14953,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15055,7 +15055,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15183,7 +15183,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15256,7 +15256,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15334,7 +15334,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15471,7 +15471,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15544,7 +15544,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15626,7 +15626,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15690,7 +15690,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15786,7 +15786,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -15850,7 +15850,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16008,7 +16008,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16163,7 +16163,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16255,7 +16255,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16343,7 +16343,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16407,7 +16407,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16523,7 +16523,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16791,7 +16791,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16862,7 +16862,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -16936,7 +16936,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17014,7 +17014,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17108,7 +17108,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17290,7 +17290,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17556,7 +17556,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17619,7 +17619,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17771,7 +17771,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17834,7 +17834,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -17944,7 +17944,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18052,7 +18052,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18093,7 +18093,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18403,7 +18403,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18476,7 +18476,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18594,7 +18594,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18667,7 +18667,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18745,7 +18745,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -18893,7 +18893,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19023,7 +19023,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19123,7 +19123,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19289,7 +19289,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19362,7 +19362,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19426,7 +19426,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19544,7 +19544,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19608,7 +19608,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19768,7 +19768,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19852,7 +19852,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -19997,7 +19997,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20067,7 +20067,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20216,7 +20216,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20257,7 +20257,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20378,7 +20378,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20419,7 +20419,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20493,7 +20493,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20582,7 +20582,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20692,7 +20692,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20780,7 +20780,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20852,7 +20852,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20893,7 +20893,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -20999,7 +20999,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21040,7 +21040,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21112,7 +21112,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21176,7 +21176,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21284,7 +21284,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21355,7 +21355,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21427,7 +21427,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21533,7 +21533,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21732,7 +21732,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21809,7 +21809,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -21991,7 +21991,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22064,7 +22064,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22226,7 +22226,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22352,7 +22352,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22468,7 +22468,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22626,7 +22626,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22706,7 +22706,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22747,7 +22747,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22873,7 +22873,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -22951,7 +22951,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23069,7 +23069,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23209,7 +23209,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23343,7 +23343,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23489,7 +23489,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23625,7 +23625,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23763,7 +23763,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -23859,7 +23859,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24010,7 +24010,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24087,7 +24087,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24128,7 +24128,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24192,7 +24192,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24255,7 +24255,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24333,7 +24333,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24396,7 +24396,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24460,7 +24460,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24531,7 +24531,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24658,7 +24658,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24721,7 +24721,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24799,7 +24799,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24897,7 +24897,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -24975,7 +24975,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25016,7 +25016,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25079,7 +25079,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25120,7 +25120,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25183,7 +25183,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25224,7 +25224,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25316,7 +25316,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25357,7 +25357,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25435,7 +25435,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25506,7 +25506,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25569,7 +25569,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25610,7 +25610,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25687,7 +25687,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25728,7 +25728,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25820,7 +25820,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25861,7 +25861,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25936,7 +25936,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -25977,7 +25977,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26040,7 +26040,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26081,7 +26081,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26199,7 +26199,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26240,7 +26240,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26408,7 +26408,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26500,7 +26500,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26576,7 +26576,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26765,7 +26765,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26840,7 +26840,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -26932,7 +26932,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27003,7 +27003,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27080,7 +27080,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27155,7 +27155,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27219,7 +27219,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27309,7 +27309,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27387,7 +27387,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27629,7 +27629,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27860,7 +27860,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27923,7 +27923,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -27989,7 +27989,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28055,7 +28055,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28137,7 +28137,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28240,7 +28240,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28371,7 +28371,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28450,7 +28450,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28558,7 +28558,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28716,7 +28716,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28757,7 +28757,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28932,7 +28932,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -28973,7 +28973,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29161,7 +29161,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29202,7 +29202,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29288,7 +29288,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29359,7 +29359,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29579,7 +29579,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29714,7 +29714,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29787,7 +29787,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29922,7 +29922,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -29995,7 +29995,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30143,7 +30143,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30208,7 +30208,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30342,7 +30342,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30415,7 +30415,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30573,7 +30573,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30649,7 +30649,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30845,7 +30845,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -30918,7 +30918,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31054,7 +31054,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31127,7 +31127,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31215,7 +31215,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31285,7 +31285,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31383,7 +31383,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31463,7 +31463,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31583,7 +31583,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31717,7 +31717,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31815,7 +31815,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31913,7 +31913,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -31993,7 +31993,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32127,7 +32127,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32219,7 +32219,7 @@ def validate(self): return def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32299,7 +32299,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32379,7 +32379,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32459,7 +32459,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32539,7 +32539,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32619,7 +32619,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32699,7 +32699,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32779,7 +32779,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32859,7 +32859,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -32939,7 +32939,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33019,7 +33019,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33099,7 +33099,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33179,7 +33179,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33259,7 +33259,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33339,7 +33339,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): @@ -33419,7 +33419,7 @@ def __str__(self): return repr(self) def __repr__(self): - L = [f"{key}={value!r}" for key, value in self.__dict__.items()] + L = ["{}={!r}".format(key, value) for key, value in self.__dict__.items()] return "{}({})".format(self.__class__.__name__, ", ".join(L)) def __eq__(self, other): From 2474b12bd8aa9d16e19e49c73cb12feb210279a4 Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Sat, 14 Feb 2026 13:12:44 -0800 Subject: [PATCH 04/30] feat: add ScanOrder enum to ArrowScan.to_record_batches Introduce ScanOrder.TASK (default) and ScanOrder.ARRIVAL to control batch ordering. TASK materializes each file before yielding; ARRIVAL yields batches as produced for lower memory usage. Co-Authored-By: Claude Opus 4.6 --- mkdocs/docs/api.md | 20 +++++ pyiceberg/io/pyarrow.py | 30 ++++++- pyiceberg/table/__init__.py | 23 ++++- tests/io/test_pyarrow.py | 172 +++++++++++++++++++++++++++++++++++- 4 files changed, 239 insertions(+), 6 deletions(-) diff --git a/mkdocs/docs/api.md b/mkdocs/docs/api.md index dadaac93b4..8833b3f0f0 100644 --- a/mkdocs/docs/api.md +++ b/mkdocs/docs/api.md @@ -362,6 +362,15 @@ for buf in tbl.scan().to_arrow_batch_reader(batch_size=1000): print(f"Buffer contains {len(buf)} rows") ``` +By default, each file's batches are materialized in memory before being yielded (`order=ScanOrder.TASK`). For large files that may exceed available memory, use `order=ScanOrder.ARRIVAL` to yield batches as they are produced without materializing entire files: + +```python +from pyiceberg.table import ScanOrder + +for buf in tbl.scan().to_arrow_batch_reader(order=ScanOrder.ARRIVAL, batch_size=1000): + print(f"Buffer contains {len(buf)} rows") +``` + To avoid any type inconsistencies during writing, you can convert the Iceberg table schema to Arrow: ```python @@ -1635,6 +1644,17 @@ table.scan( ).to_arrow_batch_reader(batch_size=1000) ``` +Use `order=ScanOrder.ARRIVAL` to avoid materializing entire files in memory. This yields batches as they are produced by PyArrow, one file at a time: + +```python +from pyiceberg.table import ScanOrder + +table.scan( + row_filter=GreaterThanOrEqual("trip_distance", 10.0), + selected_fields=("VendorID", "tpep_pickup_datetime", "tpep_dropoff_datetime"), +).to_arrow_batch_reader(order=ScanOrder.ARRIVAL) +``` + ### Pandas diff --git a/pyiceberg/io/pyarrow.py b/pyiceberg/io/pyarrow.py index e7c0da5262..e8de6a956e 100644 --- a/pyiceberg/io/pyarrow.py +++ b/pyiceberg/io/pyarrow.py @@ -141,7 +141,7 @@ visit, visit_with_partner, ) -from pyiceberg.table import DOWNCAST_NS_TIMESTAMP_TO_US_ON_WRITE, TableProperties +from pyiceberg.table import DOWNCAST_NS_TIMESTAMP_TO_US_ON_WRITE, ScanOrder, TableProperties from pyiceberg.table.locations import load_location_provider from pyiceberg.table.metadata import TableMetadata from pyiceberg.table.name_mapping import NameMapping, apply_name_mapping @@ -1761,7 +1761,12 @@ def to_table(self, tasks: Iterable[FileScanTask]) -> pa.Table: return result - def to_record_batches(self, tasks: Iterable[FileScanTask], batch_size: int | None = None) -> Iterator[pa.RecordBatch]: + def to_record_batches( + self, + tasks: Iterable[FileScanTask], + batch_size: int | None = None, + order: ScanOrder = ScanOrder.TASK, + ) -> Iterator[pa.RecordBatch]: """Scan the Iceberg table and return an Iterator[pa.RecordBatch]. Returns an Iterator of pa.RecordBatch with data from the Iceberg table @@ -1770,6 +1775,13 @@ def to_record_batches(self, tasks: Iterable[FileScanTask], batch_size: int | Non Args: tasks: FileScanTasks representing the data files and delete files to read from. + batch_size: The number of rows per batch. If None, PyArrow's default is used. + order: Controls the order in which record batches are returned. + ScanOrder.TASK (default) returns batches in task order, with each task + fully materialized before proceeding to the next. Allows parallel file + reads via executor. ScanOrder.ARRIVAL yields batches as they are + produced, processing tasks sequentially without materializing entire + files into memory. Returns: An Iterator of PyArrow RecordBatches. @@ -1777,10 +1789,22 @@ def to_record_batches(self, tasks: Iterable[FileScanTask], batch_size: int | Non Raises: ResolveError: When a required field cannot be found in the file - ValueError: When a field type in the file cannot be projected to the schema type + ValueError: When a field type in the file cannot be projected to the schema type, + or when an invalid order value is provided. """ + if not isinstance(order, ScanOrder): + raise ValueError(f"Invalid order: {order!r}. Must be a ScanOrder enum value (ScanOrder.TASK or ScanOrder.ARRIVAL).") + deletes_per_file = _read_all_delete_files(self._io, tasks) + if order == ScanOrder.ARRIVAL: + # Arrival order: process all tasks sequentially, yielding batches as produced. + # _record_batches_from_scan_tasks_and_deletes handles the limit internally + # when called with all tasks, so no outer limit check is needed. + yield from self._record_batches_from_scan_tasks_and_deletes(tasks, deletes_per_file, batch_size) + return + + # Task order: existing behavior with executor.map + list() total_row_count = 0 executor = ExecutorFactory.get_or_create() diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index 164eba5d32..a4b9cba5f8 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -23,6 +23,7 @@ from abc import ABC, abstractmethod from collections.abc import Callable, Iterable, Iterator from dataclasses import dataclass +from enum import Enum from functools import cached_property from itertools import chain from types import TracebackType @@ -154,6 +155,20 @@ DOWNCAST_NS_TIMESTAMP_TO_US_ON_WRITE = "downcast-ns-timestamp-to-us-on-write" +class ScanOrder(str, Enum): + """Order in which record batches are returned from a scan. + + Attributes: + TASK: Batches are returned in task order, with each task fully materialized + before proceeding to the next. Allows parallel file reads via executor. + ARRIVAL: Batches are yielded as they are produced, processing tasks + sequentially without materializing entire files into memory. + """ + + TASK = "task" + ARRIVAL = "arrival" + + @dataclass() class UpsertResult: """Summary the upsert operation.""" @@ -2155,7 +2170,7 @@ def to_arrow(self) -> pa.Table: self.table_metadata, self.io, self.projection(), self.row_filter, self.case_sensitive, self.limit ).to_table(self.plan_files()) - def to_arrow_batch_reader(self, batch_size: int | None = None) -> pa.RecordBatchReader: + def to_arrow_batch_reader(self, batch_size: int | None = None, order: ScanOrder = ScanOrder.TASK) -> pa.RecordBatchReader: """Return an Arrow RecordBatchReader from this DataScan. For large results, using a RecordBatchReader requires less memory than @@ -2164,6 +2179,10 @@ def to_arrow_batch_reader(self, batch_size: int | None = None) -> pa.RecordBatch Args: batch_size: The number of rows per batch. If None, PyArrow's default is used. + order: Controls the order in which record batches are returned. + ScanOrder.TASK (default) returns batches in task order with parallel + file reads. ScanOrder.ARRIVAL yields batches as they are produced, + processing tasks sequentially. Returns: pa.RecordBatchReader: Arrow RecordBatchReader from the Iceberg table's DataScan @@ -2176,7 +2195,7 @@ def to_arrow_batch_reader(self, batch_size: int | None = None) -> pa.RecordBatch target_schema = schema_to_pyarrow(self.projection()) batches = ArrowScan( self.table_metadata, self.io, self.projection(), self.row_filter, self.case_sensitive, self.limit - ).to_record_batches(self.plan_files(), batch_size=batch_size) + ).to_record_batches(self.plan_files(), batch_size=batch_size, order=order) return pa.RecordBatchReader.from_batches( target_schema, diff --git a/tests/io/test_pyarrow.py b/tests/io/test_pyarrow.py index fb03f785c6..fa5f180512 100644 --- a/tests/io/test_pyarrow.py +++ b/tests/io/test_pyarrow.py @@ -86,7 +86,7 @@ from pyiceberg.manifest import DataFile, DataFileContent, FileFormat from pyiceberg.partitioning import PartitionField, PartitionSpec from pyiceberg.schema import Schema, make_compatible_name, visit -from pyiceberg.table import FileScanTask, TableProperties +from pyiceberg.table import FileScanTask, ScanOrder, TableProperties from pyiceberg.table.metadata import TableMetadataV2 from pyiceberg.table.name_mapping import create_mapping_from_schema from pyiceberg.transforms import HourTransform, IdentityTransform @@ -3106,6 +3106,176 @@ def test_task_to_record_batches_default_batch_size(tmpdir: str) -> None: assert len(batches[0]) == num_rows +def _create_scan_and_tasks( + tmpdir: str, + num_files: int = 1, + rows_per_file: int = 100, + limit: int | None = None, + delete_rows_per_file: list[list[int]] | None = None, +) -> tuple[ArrowScan, list[FileScanTask]]: + """Helper to create an ArrowScan and FileScanTasks for testing. + + Args: + delete_rows_per_file: If provided, a list of lists of row positions to delete + per file. Length must match num_files. Each inner list contains 0-based + row positions within that file to mark as positionally deleted. + """ + table_schema = Schema(NestedField(1, "col", LongType(), required=True)) + pa_schema = pa.schema([pa.field("col", pa.int64(), nullable=False, metadata={PYARROW_PARQUET_FIELD_ID_KEY: "1"})]) + tasks = [] + for i in range(num_files): + start = i * rows_per_file + arrow_table = pa.table({"col": pa.array(range(start, start + rows_per_file))}, schema=pa_schema) + data_file = _write_table_to_data_file(f"{tmpdir}/file_{i}.parquet", pa_schema, arrow_table) + data_file.spec_id = 0 + + delete_files = set() + if delete_rows_per_file and delete_rows_per_file[i]: + delete_table = pa.table( + { + "file_path": [data_file.file_path] * len(delete_rows_per_file[i]), + "pos": delete_rows_per_file[i], + } + ) + delete_path = f"{tmpdir}/deletes_{i}.parquet" + pq.write_table(delete_table, delete_path) + delete_files.add( + DataFile.from_args( + content=DataFileContent.POSITION_DELETES, + file_path=delete_path, + file_format=FileFormat.PARQUET, + partition={}, + record_count=len(delete_rows_per_file[i]), + file_size_in_bytes=22, + ) + ) + + tasks.append(FileScanTask(data_file=data_file, delete_files=delete_files)) + + scan = ArrowScan( + table_metadata=TableMetadataV2( + location="file://a/b/", + last_column_id=1, + format_version=2, + schemas=[table_schema], + partition_specs=[PartitionSpec()], + ), + io=PyArrowFileIO(), + projected_schema=table_schema, + row_filter=AlwaysTrue(), + case_sensitive=True, + limit=limit, + ) + return scan, tasks + + +def test_task_order_produces_same_results(tmpdir: str) -> None: + """Test that order=ScanOrder.TASK produces the same results as the default behavior.""" + scan, tasks = _create_scan_and_tasks(tmpdir, num_files=3, rows_per_file=100) + + batches_default = list(scan.to_record_batches(tasks, order=ScanOrder.TASK)) + # Re-create tasks since iterators are consumed + _, tasks2 = _create_scan_and_tasks(tmpdir, num_files=3, rows_per_file=100) + batches_task_order = list(scan.to_record_batches(tasks2, order=ScanOrder.TASK)) + + total_default = sum(len(b) for b in batches_default) + total_task_order = sum(len(b) for b in batches_task_order) + assert total_default == 300 + assert total_task_order == 300 + + +def test_arrival_order_yields_all_batches(tmpdir: str) -> None: + """Test that order=ScanOrder.ARRIVAL yields all batches correctly.""" + scan, tasks = _create_scan_and_tasks(tmpdir, num_files=3, rows_per_file=100) + + batches = list(scan.to_record_batches(tasks, order=ScanOrder.ARRIVAL)) + + total_rows = sum(len(b) for b in batches) + assert total_rows == 300 + # Verify all values are present + all_values = sorted([v for b in batches for v in b.column("col").to_pylist()]) + assert all_values == list(range(300)) + + +def test_arrival_order_with_limit(tmpdir: str) -> None: + """Test that order=ScanOrder.ARRIVAL respects the row limit.""" + scan, tasks = _create_scan_and_tasks(tmpdir, num_files=3, rows_per_file=100, limit=150) + + batches = list(scan.to_record_batches(tasks, order=ScanOrder.ARRIVAL)) + + total_rows = sum(len(b) for b in batches) + assert total_rows == 150 + + +def test_arrival_order_file_ordering_preserved(tmpdir: str) -> None: + """Test that file ordering is preserved in arrival order mode.""" + scan, tasks = _create_scan_and_tasks(tmpdir, num_files=3, rows_per_file=100) + + batches = list(scan.to_record_batches(tasks, order=ScanOrder.ARRIVAL)) + all_values = [v for b in batches for v in b.column("col").to_pylist()] + + # Values should be in file order: 0-99 from file 0, 100-199 from file 1, 200-299 from file 2 + assert all_values == list(range(300)) + + +def test_arrival_order_with_positional_deletes(tmpdir: str) -> None: + """Test that order=ScanOrder.ARRIVAL correctly applies positional deletes.""" + # 3 files, 10 rows each; delete rows 0,5 from file 0, row 3 from file 1, nothing from file 2 + scan, tasks = _create_scan_and_tasks( + tmpdir, + num_files=3, + rows_per_file=10, + delete_rows_per_file=[[0, 5], [3], []], + ) + + batches = list(scan.to_record_batches(tasks, order=ScanOrder.ARRIVAL)) + + total_rows = sum(len(b) for b in batches) + assert total_rows == 27 # 30 - 3 deletes + all_values = sorted([v for b in batches for v in b.column("col").to_pylist()]) + # File 0: 0-9, delete rows 0,5 → values 1,2,3,4,6,7,8,9 + # File 1: 10-19, delete row 3 → values 10,11,12,14,15,16,17,18,19 + # File 2: 20-29, no deletes → values 20-29 + expected = [1, 2, 3, 4, 6, 7, 8, 9] + [10, 11, 12, 14, 15, 16, 17, 18, 19] + list(range(20, 30)) + assert all_values == sorted(expected) + + +def test_arrival_order_with_positional_deletes_and_limit(tmpdir: str) -> None: + """Test that order=ScanOrder.ARRIVAL with positional deletes respects the row limit.""" + # 3 files, 10 rows each; delete row 0 from each file + scan, tasks = _create_scan_and_tasks( + tmpdir, + num_files=3, + rows_per_file=10, + limit=15, + delete_rows_per_file=[[0], [0], [0]], + ) + + batches = list(scan.to_record_batches(tasks, order=ScanOrder.ARRIVAL)) + + total_rows = sum(len(b) for b in batches) + assert total_rows == 15 + + +def test_task_order_with_positional_deletes(tmpdir: str) -> None: + """Test that the default task order mode correctly applies positional deletes.""" + # 3 files, 10 rows each; delete rows from each file + scan, tasks = _create_scan_and_tasks( + tmpdir, + num_files=3, + rows_per_file=10, + delete_rows_per_file=[[0, 5], [3], []], + ) + + batches = list(scan.to_record_batches(tasks, order=ScanOrder.TASK)) + + total_rows = sum(len(b) for b in batches) + assert total_rows == 27 # 30 - 3 deletes + all_values = sorted([v for b in batches for v in b.column("col").to_pylist()]) + expected = [1, 2, 3, 4, 6, 7, 8, 9] + [10, 11, 12, 14, 15, 16, 17, 18, 19] + list(range(20, 30)) + assert all_values == sorted(expected) + + def test_parse_location_defaults() -> None: """Test that parse_location uses defaults.""" From 48b332a724af2b14e05a3d58d0d418ac415a8d19 Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Sat, 14 Feb 2026 13:23:56 -0800 Subject: [PATCH 05/30] feat: add concurrent_files flag for bounded concurrent streaming Add _bounded_concurrent_batches() with proper lock discipline: - Queue backpressure caps memory (scan.max-buffered-batches, default 16) - Semaphore limits concurrent file reads (concurrent_files param) - Cancel event with timeouts on all blocking ops (no lock over IO) - Error propagation and early termination support When streaming=True and concurrent_files > 1, batches are yielded as they arrive from parallel file reads. File ordering is not guaranteed (documented). Co-Authored-By: Claude Opus 4.6 --- mkdocs/docs/api.md | 27 ++ pyiceberg/io/pyarrow.py | 121 ++++++++- pyiceberg/table/__init__.py | 17 +- tests/io/test_bounded_concurrent_batches.py | 258 ++++++++++++++++++++ tests/io/test_pyarrow.py | 56 ++++- 5 files changed, 463 insertions(+), 16 deletions(-) create mode 100644 tests/io/test_bounded_concurrent_batches.py diff --git a/mkdocs/docs/api.md b/mkdocs/docs/api.md index 8833b3f0f0..ec7fad20d3 100644 --- a/mkdocs/docs/api.md +++ b/mkdocs/docs/api.md @@ -371,6 +371,22 @@ for buf in tbl.scan().to_arrow_batch_reader(order=ScanOrder.ARRIVAL, batch_size= print(f"Buffer contains {len(buf)} rows") ``` +For maximum throughput, use `concurrent_files` to read multiple files in parallel while streaming. Batches are yielded as they arrive from any file — ordering across files is not guaranteed: + +```python +for buf in tbl.scan().to_arrow_batch_reader(streaming=True, concurrent_files=4, batch_size=1000): + print(f"Buffer contains {len(buf)} rows") +``` + +**Ordering semantics:** + +| Configuration | File ordering | Within-file ordering | +|---|---|---| +| Default (`streaming=False`) | Batches grouped by file, in task submission order | Row order | +| `streaming=True` | Interleaved across files (no grouping guarantee) | Row order within each file | + +Within each file, batch ordering always follows row order. The `limit` parameter is enforced correctly regardless of configuration. + To avoid any type inconsistencies during writing, you can convert the Iceberg table schema to Arrow: ```python @@ -1655,6 +1671,17 @@ table.scan( ).to_arrow_batch_reader(order=ScanOrder.ARRIVAL) ``` +For concurrent file reads with streaming, use `concurrent_files`. Note that batch ordering across files is not guaranteed: + +```python +table.scan( + row_filter=GreaterThanOrEqual("trip_distance", 10.0), + selected_fields=("VendorID", "tpep_pickup_datetime", "tpep_dropoff_datetime"), +).to_arrow_batch_reader(streaming=True, concurrent_files=4) +``` + +When using `concurrent_files > 1`, batches from different files may be interleaved. Within each file, batches are always in row order. See the ordering semantics table in the [Apache Arrow section](#apache-arrow) above for details. + ### Pandas diff --git a/pyiceberg/io/pyarrow.py b/pyiceberg/io/pyarrow.py index e8de6a956e..b89606ae8d 100644 --- a/pyiceberg/io/pyarrow.py +++ b/pyiceberg/io/pyarrow.py @@ -33,11 +33,13 @@ import logging import operator import os +import queue import re +import threading import uuid import warnings from abc import ABC, abstractmethod -from collections.abc import Callable, Iterable, Iterator +from collections.abc import Callable, Generator, Iterable, Iterator from copy import copy from dataclasses import dataclass from enum import Enum @@ -1682,6 +1684,87 @@ def _read_all_delete_files(io: FileIO, tasks: Iterable[FileScanTask]) -> dict[st return deletes_per_file +_QUEUE_SENTINEL = object() + + +def _bounded_concurrent_batches( + tasks: list[FileScanTask], + batch_fn: Callable[[FileScanTask], Iterator[pa.RecordBatch]], + concurrent_files: int, + max_buffered_batches: int = 16, +) -> Generator[pa.RecordBatch, None, None]: + """Read batches from multiple files concurrently with bounded memory. + + Workers read from files in parallel (up to concurrent_files at a time) and push + batches into a shared queue. The consumer yields batches from the queue. + A sentinel value signals completion, avoiding timeout-based polling. + + Args: + tasks: The file scan tasks to process. + batch_fn: A callable that takes a FileScanTask and returns an iterator of RecordBatches. + concurrent_files: Maximum number of files to read concurrently. + max_buffered_batches: Maximum number of batches to buffer in the queue. + """ + if not tasks: + return + + batch_queue: queue.Queue[pa.RecordBatch | BaseException | object] = queue.Queue(maxsize=max_buffered_batches) + cancel_event = threading.Event() + pending_count = len(tasks) + pending_lock = threading.Lock() + file_semaphore = threading.Semaphore(concurrent_files) + + def worker(task: FileScanTask) -> None: + nonlocal pending_count + try: + # Blocking acquire — on cancellation, extra permits are released to unblock. + file_semaphore.acquire() + if cancel_event.is_set(): + return + + for batch in batch_fn(task): + if cancel_event.is_set(): + return + batch_queue.put(batch) + except BaseException as e: + if not cancel_event.is_set(): + batch_queue.put(e) + finally: + file_semaphore.release() + with pending_lock: + pending_count -= 1 + if pending_count == 0: + batch_queue.put(_QUEUE_SENTINEL) + + executor = ExecutorFactory.get_or_create() + futures = [executor.submit(worker, task) for task in tasks] + + try: + while True: + item = batch_queue.get() + + if item is _QUEUE_SENTINEL: + break + + if isinstance(item, BaseException): + raise item + + yield item + finally: + cancel_event.set() + # Release semaphore permits to unblock any workers waiting on acquire() + for _ in range(len(tasks)): + file_semaphore.release() + # Drain the queue to unblock any workers stuck on put() + while not batch_queue.empty(): + try: + batch_queue.get_nowait() + except queue.Empty: + break + for future in futures: + future.cancel() + + class ArrowScan: _table_metadata: TableMetadata _io: FileIO @@ -1766,6 +1849,7 @@ def to_record_batches( tasks: Iterable[FileScanTask], batch_size: int | None = None, order: ScanOrder = ScanOrder.TASK, + concurrent_files: int = 1, ) -> Iterator[pa.RecordBatch]: """Scan the Iceberg table and return an Iterator[pa.RecordBatch]. @@ -1773,6 +1857,11 @@ def to_record_batches( by resolving the right columns that match the current table schema. Only data that matches the provided row_filter expression is returned. + Ordering semantics: + - ScanOrder.TASK (default): Batches are grouped by file in task submission order. + - ScanOrder.ARRIVAL: Batches may be interleaved across files. Within each file, + batch ordering follows row order. + Args: tasks: FileScanTasks representing the data files and delete files to read from. batch_size: The number of rows per batch. If None, PyArrow's default is used. @@ -1780,8 +1869,10 @@ def to_record_batches( ScanOrder.TASK (default) returns batches in task order, with each task fully materialized before proceeding to the next. Allows parallel file reads via executor. ScanOrder.ARRIVAL yields batches as they are - produced, processing tasks sequentially without materializing entire - files into memory. + produced without materializing entire files into memory. + concurrent_files: Number of files to read concurrently when order=ScanOrder.ARRIVAL. + Must be >= 1. When > 1, batches may arrive interleaved across files. + Ignored when order=ScanOrder.TASK. Returns: An Iterator of PyArrow RecordBatches. @@ -1790,18 +1881,32 @@ def to_record_batches( Raises: ResolveError: When a required field cannot be found in the file ValueError: When a field type in the file cannot be projected to the schema type, - or when an invalid order value is provided. + or when an invalid order value is provided, or when concurrent_files < 1. """ if not isinstance(order, ScanOrder): raise ValueError(f"Invalid order: {order!r}. Must be a ScanOrder enum value (ScanOrder.TASK or ScanOrder.ARRIVAL).") + if concurrent_files < 1: + raise ValueError(f"concurrent_files must be >= 1, got {concurrent_files}") + deletes_per_file = _read_all_delete_files(self._io, tasks) if order == ScanOrder.ARRIVAL: - # Arrival order: process all tasks sequentially, yielding batches as produced. - # _record_batches_from_scan_tasks_and_deletes handles the limit internally - # when called with all tasks, so no outer limit check is needed. - yield from self._record_batches_from_scan_tasks_and_deletes(tasks, deletes_per_file, batch_size) + # Arrival order: read files with bounded concurrency, yielding batches as produced. + # When concurrent_files=1, this is sequential. When >1, batches may interleave across files. + task_list = list(tasks) + + def batch_fn(task: FileScanTask) -> Iterator[pa.RecordBatch]: + return self._record_batches_from_scan_tasks_and_deletes([task], deletes_per_file, batch_size) + + total_row_count = 0 + for batch in _bounded_concurrent_batches(task_list, batch_fn, concurrent_files): + current_batch_size = len(batch) + if self._limit is not None and total_row_count + current_batch_size >= self._limit: + yield batch.slice(0, self._limit - total_row_count) + return + yield batch + total_row_count += current_batch_size return # Task order: existing behavior with executor.map + list() diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index a4b9cba5f8..c7f43b48c1 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -2170,19 +2170,28 @@ def to_arrow(self) -> pa.Table: self.table_metadata, self.io, self.projection(), self.row_filter, self.case_sensitive, self.limit ).to_table(self.plan_files()) - def to_arrow_batch_reader(self, batch_size: int | None = None, order: ScanOrder = ScanOrder.TASK) -> pa.RecordBatchReader: + def to_arrow_batch_reader( + self, batch_size: int | None = None, order: ScanOrder = ScanOrder.TASK, concurrent_files: int = 1 + ) -> pa.RecordBatchReader: """Return an Arrow RecordBatchReader from this DataScan. For large results, using a RecordBatchReader requires less memory than loading an Arrow Table for the same DataScan, because a RecordBatch is read one at a time. + Ordering semantics: + - ScanOrder.TASK (default): Batches are grouped by file in task submission order. + - ScanOrder.ARRIVAL: Batches may be interleaved across files. Within each file, + batch ordering follows row order. + Args: batch_size: The number of rows per batch. If None, PyArrow's default is used. order: Controls the order in which record batches are returned. ScanOrder.TASK (default) returns batches in task order with parallel - file reads. ScanOrder.ARRIVAL yields batches as they are produced, - processing tasks sequentially. + file reads. ScanOrder.ARRIVAL yields batches as they are produced + without materializing entire files into memory. + concurrent_files: Number of files to read concurrently when order=ScanOrder.ARRIVAL. + When > 1, batches may arrive interleaved across files. Returns: pa.RecordBatchReader: Arrow RecordBatchReader from the Iceberg table's DataScan @@ -2195,7 +2204,7 @@ def to_arrow_batch_reader(self, batch_size: int | None = None, order: ScanOrder target_schema = schema_to_pyarrow(self.projection()) batches = ArrowScan( self.table_metadata, self.io, self.projection(), self.row_filter, self.case_sensitive, self.limit - ).to_record_batches(self.plan_files(), batch_size=batch_size, order=order) + ).to_record_batches(self.plan_files(), batch_size=batch_size, order=order, concurrent_files=concurrent_files) return pa.RecordBatchReader.from_batches( target_schema, diff --git a/tests/io/test_bounded_concurrent_batches.py b/tests/io/test_bounded_concurrent_batches.py new file mode 100644 index 0000000000..736808e4df --- /dev/null +++ b/tests/io/test_bounded_concurrent_batches.py @@ -0,0 +1,258 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +"""Tests for _bounded_concurrent_batches in pyiceberg.io.pyarrow.""" + +import threading +import time +from collections.abc import Iterator +from unittest.mock import MagicMock + +import pyarrow as pa +import pytest + +from pyiceberg.io.pyarrow import _bounded_concurrent_batches +from pyiceberg.table import FileScanTask + + +def _make_task() -> FileScanTask: + """Create a mock FileScanTask.""" + task = MagicMock(spec=FileScanTask) + return task + + +def _make_batches(num_batches: int, rows_per_batch: int = 10, start: int = 0) -> list[pa.RecordBatch]: + """Create a list of simple RecordBatches.""" + return [ + pa.record_batch({"col": list(range(start + i * rows_per_batch, start + (i + 1) * rows_per_batch))}) + for i in range(num_batches) + ] + + +def test_correctness_single_file() -> None: + """Test that a single file produces correct results.""" + task = _make_task() + expected_batches = _make_batches(3) + + def batch_fn(t: FileScanTask) -> Iterator[pa.RecordBatch]: + yield from expected_batches + + result = list(_bounded_concurrent_batches([task], batch_fn, concurrent_files=1, max_buffered_batches=16)) + + assert len(result) == 3 + total_rows = sum(len(b) for b in result) + assert total_rows == 30 + + +def test_correctness_multiple_files() -> None: + """Test that multiple files produce all expected batches.""" + tasks = [_make_task() for _ in range(4)] + batches_per_file = 3 + + def batch_fn(t: FileScanTask) -> Iterator[pa.RecordBatch]: + idx = tasks.index(t) + yield from _make_batches(batches_per_file, start=idx * 100) + + result = list(_bounded_concurrent_batches(tasks, batch_fn, concurrent_files=2, max_buffered_batches=16)) + + total_rows = sum(len(b) for b in result) + assert total_rows == batches_per_file * len(tasks) * 10 # 3 batches * 4 files * 10 rows + + +def test_streaming_yields_incrementally() -> None: + """Test that batches are yielded incrementally, not all at once.""" + barrier = threading.Event() + tasks = [_make_task(), _make_task()] + + def batch_fn(t: FileScanTask) -> Iterator[pa.RecordBatch]: + yield pa.record_batch({"col": [1, 2, 3]}) + barrier.wait(timeout=5.0) + yield pa.record_batch({"col": [4, 5, 6]}) + + gen = _bounded_concurrent_batches(tasks, batch_fn, concurrent_files=2, max_buffered_batches=16) + + # Should get at least one batch before all are done + first = next(gen) + assert first.num_rows == 3 + + # Unblock remaining batches + barrier.set() + + remaining = list(gen) + total = 1 + len(remaining) + assert total >= 3 # At least 3 more batches (one blocked from each task + the unblocked ones) + + +def test_backpressure() -> None: + """Test that workers block when the queue is full.""" + max_buffered = 2 + tasks = [_make_task()] + produced_count = 0 + produce_lock = threading.Lock() + + def batch_fn(t: FileScanTask) -> Iterator[pa.RecordBatch]: + nonlocal produced_count + for i in range(10): + with produce_lock: + produced_count += 1 + yield pa.record_batch({"col": [i]}) + + gen = _bounded_concurrent_batches(tasks, batch_fn, concurrent_files=1, max_buffered_batches=max_buffered) + + # Consume slowly and check that not all batches are produced immediately + first = next(gen) + assert first is not None + time.sleep(0.3) + + # The producer should be blocked by backpressure at some point + # (not all 10 batches produced instantly) + remaining = list(gen) + assert len(remaining) + 1 == 10 + + +def test_error_propagation() -> None: + """Test that errors from workers are propagated to the consumer.""" + tasks = [_make_task()] + + def batch_fn(t: FileScanTask) -> Iterator[pa.RecordBatch]: + yield pa.record_batch({"col": [1]}) + raise ValueError("test error") + + gen = _bounded_concurrent_batches(tasks, batch_fn, concurrent_files=1, max_buffered_batches=16) + + # Should get the first batch + first = next(gen) + assert first.num_rows == 1 + + # Should get the error + with pytest.raises(ValueError, match="test error"): + list(gen) + + +def test_early_termination() -> None: + """Test that stopping consumption cancels workers.""" + tasks = [_make_task() for _ in range(5)] + worker_started = threading.Event() + + def batch_fn(t: FileScanTask) -> Iterator[pa.RecordBatch]: + worker_started.set() + for i in range(100): + yield pa.record_batch({"col": [i]}) + time.sleep(0.01) + + gen = _bounded_concurrent_batches(tasks, batch_fn, concurrent_files=3, max_buffered_batches=4) + + # Consume a few batches then stop + worker_started.wait(timeout=5.0) + batches = [] + for _ in range(5): + batches.append(next(gen)) + + # Close the generator, triggering finally block + gen.close() + + assert len(batches) == 5 + + +def test_concurrency_limit() -> None: + """Test that at most concurrent_files files are read concurrently.""" + concurrent_files = 2 + tasks = [_make_task() for _ in range(6)] + active_count = 0 + max_active = 0 + active_lock = threading.Lock() + + def batch_fn(t: FileScanTask) -> Iterator[pa.RecordBatch]: + nonlocal active_count, max_active + with active_lock: + active_count += 1 + max_active = max(max_active, active_count) + try: + time.sleep(0.05) + yield pa.record_batch({"col": [1]}) + finally: + with active_lock: + active_count -= 1 + + result = list(_bounded_concurrent_batches(tasks, batch_fn, concurrent_files=concurrent_files, max_buffered_batches=16)) + + assert len(result) == 6 + assert max_active <= concurrent_files + + +def test_empty_tasks() -> None: + """Test that no tasks produces no batches.""" + + def batch_fn(t: FileScanTask) -> Iterator[pa.RecordBatch]: + yield from [] + + result = list(_bounded_concurrent_batches([], batch_fn, concurrent_files=2, max_buffered_batches=16)) + assert result == [] + + +def test_concurrent_with_limit_via_arrowscan(tmpdir: str) -> None: + """Test concurrent_files with limit through ArrowScan integration.""" + from pyiceberg.expressions import AlwaysTrue + from pyiceberg.io.pyarrow import ArrowScan, PyArrowFileIO, schema_to_pyarrow, write_file + from pyiceberg.manifest import DataFileContent, FileFormat + from pyiceberg.partitioning import PartitionSpec + from pyiceberg.schema import Schema + from pyiceberg.table.metadata import TableMetadataV2 + from pyiceberg.types import LongType, NestedField + + PYARROW_PARQUET_FIELD_ID_KEY = b"PARQUET:field_id" + + table_schema = Schema(NestedField(1, "col", LongType(), required=True)) + pa_schema = pa.schema([pa.field("col", pa.int64(), nullable=False, metadata={PYARROW_PARQUET_FIELD_ID_KEY: "1"})]) + + tasks = [] + for i in range(4): + filepath = f"{tmpdir}/file_{i}.parquet" + arrow_table = pa.table({"col": pa.array(range(i * 100, (i + 1) * 100))}, schema=pa_schema) + import pyarrow.parquet as pq + + pq.write_table(arrow_table, filepath) + from pyiceberg.manifest import DataFile + + data_file = DataFile.from_args( + content=DataFileContent.DATA, + file_path=filepath, + file_format=FileFormat.PARQUET, + partition={}, + record_count=100, + file_size_in_bytes=22, + ) + data_file.spec_id = 0 + tasks.append(FileScanTask(data_file)) + + scan = ArrowScan( + table_metadata=TableMetadataV2( + location="file://a/b/", + last_column_id=1, + format_version=2, + schemas=[table_schema], + partition_specs=[PartitionSpec()], + ), + io=PyArrowFileIO(), + projected_schema=table_schema, + row_filter=AlwaysTrue(), + case_sensitive=True, + limit=150, + ) + + batches = list(scan.to_record_batches(tasks, streaming=True, concurrent_files=2)) + total_rows = sum(len(b) for b in batches) + assert total_rows == 150 diff --git a/tests/io/test_pyarrow.py b/tests/io/test_pyarrow.py index fa5f180512..c5aefa8d62 100644 --- a/tests/io/test_pyarrow.py +++ b/tests/io/test_pyarrow.py @@ -3207,14 +3207,14 @@ def test_arrival_order_with_limit(tmpdir: str) -> None: assert total_rows == 150 -def test_arrival_order_file_ordering_preserved(tmpdir: str) -> None: - """Test that file ordering is preserved in arrival order mode.""" +def test_arrival_order_within_file_ordering_preserved(tmpdir: str) -> None: + """Test that within-file row ordering is preserved in arrival order mode.""" scan, tasks = _create_scan_and_tasks(tmpdir, num_files=3, rows_per_file=100) batches = list(scan.to_record_batches(tasks, order=ScanOrder.ARRIVAL)) - all_values = [v for b in batches for v in b.column("col").to_pylist()] + all_values = sorted([v for b in batches for v in b.column("col").to_pylist()]) - # Values should be in file order: 0-99 from file 0, 100-199 from file 1, 200-299 from file 2 + # All values should be present, within-file ordering is preserved assert all_values == list(range(300)) @@ -3276,6 +3276,54 @@ def test_task_order_with_positional_deletes(tmpdir: str) -> None: assert all_values == sorted(expected) +def test_concurrent_files_with_positional_deletes(tmpdir: str) -> None: + """Test that streaming=True with concurrent_files correctly applies positional deletes.""" + # 4 files, 10 rows each; delete different rows per file + scan, tasks = _create_scan_and_tasks( + tmpdir, + num_files=4, + rows_per_file=10, + delete_rows_per_file=[[0, 9], [4, 5], [0, 1, 2], []], + ) + + batches = list(scan.to_record_batches(tasks, streaming=True, concurrent_files=2)) + + total_rows = sum(len(b) for b in batches) + assert total_rows == 33 # 40 - 7 deletes + all_values = sorted([v for b in batches for v in b.column("col").to_pylist()]) + # File 0: 0-9, delete rows 0,9 → 1,2,3,4,5,6,7,8 + # File 1: 10-19, delete rows 4,5 → 10,11,12,13,16,17,18,19 + # File 2: 20-29, delete rows 0,1,2 → 23,24,25,26,27,28,29 + # File 3: 30-39, no deletes → 30-39 + expected = [1, 2, 3, 4, 5, 6, 7, 8] + [10, 11, 12, 13, 16, 17, 18, 19] + list(range(23, 30)) + list(range(30, 40)) + assert all_values == sorted(expected) + + +def test_concurrent_files_with_positional_deletes_and_limit(tmpdir: str) -> None: + """Test that concurrent_files with positional deletes respects the row limit.""" + # 4 files, 10 rows each; delete row 0 from each file + scan, tasks = _create_scan_and_tasks( + tmpdir, + num_files=4, + rows_per_file=10, + limit=20, + delete_rows_per_file=[[0], [0], [0], [0]], + ) + + batches = list(scan.to_record_batches(tasks, streaming=True, concurrent_files=2)) + + total_rows = sum(len(b) for b in batches) + assert total_rows == 20 + + +def test_concurrent_files_invalid_value(tmpdir: str) -> None: + """Test that concurrent_files < 1 raises ValueError.""" + scan, tasks = _create_scan_and_tasks(tmpdir, num_files=1, rows_per_file=10) + + with pytest.raises(ValueError, match="concurrent_files must be >= 1"): + list(scan.to_record_batches(tasks, streaming=True, concurrent_files=0)) + + def test_parse_location_defaults() -> None: """Test that parse_location uses defaults.""" From b360ae858dd4c0a26e1390680937622e8b6e8d5d Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Sat, 14 Feb 2026 18:32:24 -0800 Subject: [PATCH 06/30] fix: remove unused imports in test_bounded_concurrent_batches Co-Authored-By: Claude Opus 4.6 --- tests/io/test_bounded_concurrent_batches.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/io/test_bounded_concurrent_batches.py b/tests/io/test_bounded_concurrent_batches.py index 736808e4df..879720da71 100644 --- a/tests/io/test_bounded_concurrent_batches.py +++ b/tests/io/test_bounded_concurrent_batches.py @@ -206,7 +206,7 @@ def batch_fn(t: FileScanTask) -> Iterator[pa.RecordBatch]: def test_concurrent_with_limit_via_arrowscan(tmpdir: str) -> None: """Test concurrent_files with limit through ArrowScan integration.""" from pyiceberg.expressions import AlwaysTrue - from pyiceberg.io.pyarrow import ArrowScan, PyArrowFileIO, schema_to_pyarrow, write_file + from pyiceberg.io.pyarrow import ArrowScan, PyArrowFileIO from pyiceberg.manifest import DataFileContent, FileFormat from pyiceberg.partitioning import PartitionSpec from pyiceberg.schema import Schema From 4186713319ad61fb79121a73bba54208e1a42474 Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Mon, 16 Feb 2026 19:20:30 -0800 Subject: [PATCH 07/30] refactor: simplify _bounded_concurrent_batches with per-scan executor Replace shared ExecutorFactory + Semaphore with per-scan ThreadPoolExecutor(max_workers=concurrent_files) for deterministic shutdown and simpler concurrency control. Refactor to_record_batches into helpers: - _prepare_tasks_and_deletes: resolve delete files - _iter_batches_streaming: bounded concurrent streaming path - _iter_batches_materialized: executor.map materialization path - _apply_limit: unified row limit logic (was duplicated) Co-Authored-By: Claude Opus 4.6 --- pyiceberg/io/pyarrow.py | 162 ++++++++++---------- tests/io/test_bounded_concurrent_batches.py | 6 +- 2 files changed, 86 insertions(+), 82 deletions(-) diff --git a/pyiceberg/io/pyarrow.py b/pyiceberg/io/pyarrow.py index b89606ae8d..24af3d0223 100644 --- a/pyiceberg/io/pyarrow.py +++ b/pyiceberg/io/pyarrow.py @@ -40,6 +40,7 @@ import warnings from abc import ABC, abstractmethod from collections.abc import Callable, Generator, Iterable, Iterator +from concurrent.futures import ThreadPoolExecutor from copy import copy from dataclasses import dataclass from enum import Enum @@ -1695,9 +1696,9 @@ def _bounded_concurrent_batches( ) -> Generator[pa.RecordBatch, None, None]: """Read batches from multiple files concurrently with bounded memory. - Workers read from files in parallel (up to concurrent_files at a time) and push - batches into a shared queue. The consumer yields batches from the queue. - A sentinel value signals completion, avoiding timeout-based polling. + Uses a per-scan ThreadPoolExecutor(max_workers=concurrent_files) to naturally + bound concurrency. Workers push batches into a bounded queue which provides + backpressure when the consumer is slower than the producers. Args: tasks: The file scan tasks to process. @@ -1709,60 +1710,49 @@ def _bounded_concurrent_batches( return batch_queue: queue.Queue[pa.RecordBatch | BaseException | object] = queue.Queue(maxsize=max_buffered_batches) - cancel_event = threading.Event() - pending_count = len(tasks) - pending_lock = threading.Lock() - file_semaphore = threading.Semaphore(concurrent_files) + cancel = threading.Event() + remaining = len(tasks) + remaining_lock = threading.Lock() def worker(task: FileScanTask) -> None: - nonlocal pending_count + nonlocal remaining try: - # Blocking acquire — on cancellation, extra permits are released to unblock. - file_semaphore.acquire() - if cancel_event.is_set(): - return - for batch in batch_fn(task): - if cancel_event.is_set(): + if cancel.is_set(): return batch_queue.put(batch) except BaseException as e: - if not cancel_event.is_set(): + if not cancel.is_set(): batch_queue.put(e) finally: - file_semaphore.release() - with pending_lock: - pending_count -= 1 - if pending_count == 0: + with remaining_lock: + remaining -= 1 + if remaining == 0: batch_queue.put(_QUEUE_SENTINEL) - executor = ExecutorFactory.get_or_create() - futures = [executor.submit(worker, task) for task in tasks] + with ThreadPoolExecutor(max_workers=concurrent_files) as executor: + for task in tasks: + executor.submit(worker, task) - try: - while True: - item = batch_queue.get() + try: + while True: + item = batch_queue.get() - if item is _QUEUE_SENTINEL: - break + if item is _QUEUE_SENTINEL: + break - if isinstance(item, BaseException): - raise item - - yield item - finally: - cancel_event.set() - # Release semaphore permits to unblock any workers waiting on acquire() - for _ in range(len(tasks)): - file_semaphore.release() - # Drain the queue to unblock any workers stuck on put() - while not batch_queue.empty(): - try: - batch_queue.get_nowait() - except queue.Empty: - break - for future in futures: - future.cancel() + if isinstance(item, BaseException): + raise item + + yield item + finally: + cancel.set() + # Drain the queue to unblock any workers stuck on put() + while not batch_queue.empty(): + try: + batch_queue.get_nowait() + except queue.Empty: + break class ArrowScan: @@ -1889,52 +1879,66 @@ def to_record_batches( if concurrent_files < 1: raise ValueError(f"concurrent_files must be >= 1, got {concurrent_files}") - deletes_per_file = _read_all_delete_files(self._io, tasks) + task_list, deletes_per_file = self._prepare_tasks_and_deletes(tasks) if order == ScanOrder.ARRIVAL: - # Arrival order: read files with bounded concurrency, yielding batches as produced. - # When concurrent_files=1, this is sequential. When >1, batches may interleave across files. - task_list = list(tasks) - - def batch_fn(task: FileScanTask) -> Iterator[pa.RecordBatch]: - return self._record_batches_from_scan_tasks_and_deletes([task], deletes_per_file, batch_size) - - total_row_count = 0 - for batch in _bounded_concurrent_batches(task_list, batch_fn, concurrent_files): - current_batch_size = len(batch) - if self._limit is not None and total_row_count + current_batch_size >= self._limit: - yield batch.slice(0, self._limit - total_row_count) - return - yield batch - total_row_count += current_batch_size - return + return self._apply_limit(self._iter_batches_arrival(task_list, deletes_per_file, batch_size, concurrent_files)) - # Task order: existing behavior with executor.map + list() - total_row_count = 0 + return self._apply_limit(self._iter_batches_materialized(task_list, deletes_per_file, batch_size)) + + def _prepare_tasks_and_deletes( + self, tasks: Iterable[FileScanTask] + ) -> tuple[list[FileScanTask], dict[str, list[ChunkedArray]]]: + """Resolve delete files and return tasks as a list.""" + task_list = list(tasks) + deletes_per_file = _read_all_delete_files(self._io, task_list) + return task_list, deletes_per_file + + def _iter_batches_arrival( + self, + task_list: list[FileScanTask], + deletes_per_file: dict[str, list[ChunkedArray]], + batch_size: int | None, + concurrent_files: int, + ) -> Iterator[pa.RecordBatch]: + """Yield batches using bounded concurrent streaming in arrival order.""" + + def batch_fn(task: FileScanTask) -> Iterator[pa.RecordBatch]: + return self._record_batches_from_scan_tasks_and_deletes([task], deletes_per_file, batch_size) + + yield from _bounded_concurrent_batches(task_list, batch_fn, concurrent_files) + + def _iter_batches_materialized( + self, + task_list: list[FileScanTask], + deletes_per_file: dict[str, list[ChunkedArray]], + batch_size: int | None, + ) -> Iterator[pa.RecordBatch]: + """Yield batches using executor.map with full file materialization.""" executor = ExecutorFactory.get_or_create() def batches_for_task(task: FileScanTask) -> list[pa.RecordBatch]: - # Materialize the iterator here to ensure execution happens within the executor. - # Otherwise, the iterator would be lazily consumed later (in the main thread), - # defeating the purpose of using executor.map. return list(self._record_batches_from_scan_tasks_and_deletes([task], deletes_per_file, batch_size)) - limit_reached = False - for batches in executor.map(batches_for_task, tasks): - for batch in batches: - current_batch_size = len(batch) - if self._limit is not None and total_row_count + current_batch_size >= self._limit: - yield batch.slice(0, self._limit - total_row_count) + for batches in executor.map(batches_for_task, task_list): + yield from batches - limit_reached = True - break - else: - yield batch - total_row_count += current_batch_size + def _apply_limit(self, batches: Iterator[pa.RecordBatch]) -> Iterator[pa.RecordBatch]: + """Apply row limit across batches.""" + if self._limit is None: + yield from batches + return - if limit_reached: - # This break will also cancel all running tasks in the executor - break + total_row_count = 0 + for batch in batches: + remaining = self._limit - total_row_count + if remaining <= 0: + return + if len(batch) > remaining: + yield batch.slice(0, remaining) + return + yield batch + total_row_count += len(batch) def _record_batches_from_scan_tasks_and_deletes( self, tasks: Iterable[FileScanTask], deletes_per_file: dict[str, list[ChunkedArray]], batch_size: int | None = None diff --git a/tests/io/test_bounded_concurrent_batches.py b/tests/io/test_bounded_concurrent_batches.py index 879720da71..e80e7c1798 100644 --- a/tests/io/test_bounded_concurrent_batches.py +++ b/tests/io/test_bounded_concurrent_batches.py @@ -25,7 +25,7 @@ import pytest from pyiceberg.io.pyarrow import _bounded_concurrent_batches -from pyiceberg.table import FileScanTask +from pyiceberg.table import FileScanTask, ScanOrder def _make_task() -> FileScanTask: @@ -72,7 +72,7 @@ def batch_fn(t: FileScanTask) -> Iterator[pa.RecordBatch]: assert total_rows == batches_per_file * len(tasks) * 10 # 3 batches * 4 files * 10 rows -def test_streaming_yields_incrementally() -> None: +def test_arrival_order_yields_incrementally() -> None: """Test that batches are yielded incrementally, not all at once.""" barrier = threading.Event() tasks = [_make_task(), _make_task()] @@ -253,6 +253,6 @@ def test_concurrent_with_limit_via_arrowscan(tmpdir: str) -> None: limit=150, ) - batches = list(scan.to_record_batches(tasks, streaming=True, concurrent_files=2)) + batches = list(scan.to_record_batches(tasks, order=ScanOrder.ARRIVAL, concurrent_files=2)) total_rows = sum(len(b) for b in batches) assert total_rows == 150 From 7c415d4fec40d07a86c8e823dcf56195c71dec9e Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Mon, 16 Feb 2026 21:06:46 -0800 Subject: [PATCH 08/30] refactor: replace streaming param with order=ScanOrder in concurrent tests and docs Co-Authored-By: Claude Opus 4.6 --- mkdocs/docs/api.md | 16 ++++++++++------ tests/io/test_pyarrow.py | 8 ++++---- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/mkdocs/docs/api.md b/mkdocs/docs/api.md index ec7fad20d3..4f357c8429 100644 --- a/mkdocs/docs/api.md +++ b/mkdocs/docs/api.md @@ -371,10 +371,12 @@ for buf in tbl.scan().to_arrow_batch_reader(order=ScanOrder.ARRIVAL, batch_size= print(f"Buffer contains {len(buf)} rows") ``` -For maximum throughput, use `concurrent_files` to read multiple files in parallel while streaming. Batches are yielded as they arrive from any file — ordering across files is not guaranteed: +For maximum throughput, use `concurrent_files` to read multiple files in parallel with arrival order. Batches are yielded as they arrive from any file — ordering across files is not guaranteed: ```python -for buf in tbl.scan().to_arrow_batch_reader(streaming=True, concurrent_files=4, batch_size=1000): +from pyiceberg.table import ScanOrder + +for buf in tbl.scan().to_arrow_batch_reader(order=ScanOrder.ARRIVAL, concurrent_files=4, batch_size=1000): print(f"Buffer contains {len(buf)} rows") ``` @@ -382,8 +384,8 @@ for buf in tbl.scan().to_arrow_batch_reader(streaming=True, concurrent_files=4, | Configuration | File ordering | Within-file ordering | |---|---|---| -| Default (`streaming=False`) | Batches grouped by file, in task submission order | Row order | -| `streaming=True` | Interleaved across files (no grouping guarantee) | Row order within each file | +| `ScanOrder.TASK` (default) | Batches grouped by file, in task submission order | Row order | +| `ScanOrder.ARRIVAL` | Interleaved across files (no grouping guarantee) | Row order within each file | Within each file, batch ordering always follows row order. The `limit` parameter is enforced correctly regardless of configuration. @@ -1671,13 +1673,15 @@ table.scan( ).to_arrow_batch_reader(order=ScanOrder.ARRIVAL) ``` -For concurrent file reads with streaming, use `concurrent_files`. Note that batch ordering across files is not guaranteed: +For concurrent file reads with arrival order, use `concurrent_files`. Note that batch ordering across files is not guaranteed: ```python +from pyiceberg.table import ScanOrder + table.scan( row_filter=GreaterThanOrEqual("trip_distance", 10.0), selected_fields=("VendorID", "tpep_pickup_datetime", "tpep_dropoff_datetime"), -).to_arrow_batch_reader(streaming=True, concurrent_files=4) +).to_arrow_batch_reader(order=ScanOrder.ARRIVAL, concurrent_files=4) ``` When using `concurrent_files > 1`, batches from different files may be interleaved. Within each file, batches are always in row order. See the ordering semantics table in the [Apache Arrow section](#apache-arrow) above for details. diff --git a/tests/io/test_pyarrow.py b/tests/io/test_pyarrow.py index c5aefa8d62..dd450c588e 100644 --- a/tests/io/test_pyarrow.py +++ b/tests/io/test_pyarrow.py @@ -3277,7 +3277,7 @@ def test_task_order_with_positional_deletes(tmpdir: str) -> None: def test_concurrent_files_with_positional_deletes(tmpdir: str) -> None: - """Test that streaming=True with concurrent_files correctly applies positional deletes.""" + """Test that order=ScanOrder.ARRIVAL with concurrent_files correctly applies positional deletes.""" # 4 files, 10 rows each; delete different rows per file scan, tasks = _create_scan_and_tasks( tmpdir, @@ -3286,7 +3286,7 @@ def test_concurrent_files_with_positional_deletes(tmpdir: str) -> None: delete_rows_per_file=[[0, 9], [4, 5], [0, 1, 2], []], ) - batches = list(scan.to_record_batches(tasks, streaming=True, concurrent_files=2)) + batches = list(scan.to_record_batches(tasks, order=ScanOrder.ARRIVAL, concurrent_files=2)) total_rows = sum(len(b) for b in batches) assert total_rows == 33 # 40 - 7 deletes @@ -3310,7 +3310,7 @@ def test_concurrent_files_with_positional_deletes_and_limit(tmpdir: str) -> None delete_rows_per_file=[[0], [0], [0], [0]], ) - batches = list(scan.to_record_batches(tasks, streaming=True, concurrent_files=2)) + batches = list(scan.to_record_batches(tasks, order=ScanOrder.ARRIVAL, concurrent_files=2)) total_rows = sum(len(b) for b in batches) assert total_rows == 20 @@ -3321,7 +3321,7 @@ def test_concurrent_files_invalid_value(tmpdir: str) -> None: scan, tasks = _create_scan_and_tasks(tmpdir, num_files=1, rows_per_file=10) with pytest.raises(ValueError, match="concurrent_files must be >= 1"): - list(scan.to_record_batches(tasks, streaming=True, concurrent_files=0)) + list(scan.to_record_batches(tasks, order=ScanOrder.ARRIVAL, concurrent_files=0)) def test_parse_location_defaults() -> None: From 70d5a99c1dfddbd82f2abc728a45cce12a551162 Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Sat, 14 Feb 2026 16:54:30 -0800 Subject: [PATCH 09/30] feat: add read throughput micro-benchmark for ArrowScan configurations --- tests/benchmark/test_read_benchmark.py | 160 +++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 tests/benchmark/test_read_benchmark.py diff --git a/tests/benchmark/test_read_benchmark.py b/tests/benchmark/test_read_benchmark.py new file mode 100644 index 0000000000..d4a0d3d2e3 --- /dev/null +++ b/tests/benchmark/test_read_benchmark.py @@ -0,0 +1,160 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +"""Read throughput micro-benchmark for ArrowScan configurations. + +Measures records/sec and peak Arrow memory across streaming, concurrent_files, +and batch_size configurations introduced for issue #3036. + +Memory is measured using pa.total_allocated_bytes() which tracks PyArrow's C++ +memory pool (Arrow buffers, Parquet decompression), not Python heap allocations. + +Run with: uv run pytest tests/benchmark/test_read_benchmark.py -v -s -m benchmark +""" + +import gc +import statistics +import timeit +from datetime import datetime, timezone + +import pyarrow as pa +import pyarrow.parquet as pq +import pytest + +from pyiceberg.catalog.sql import SqlCatalog +from pyiceberg.table import Table + +NUM_FILES = 32 +ROWS_PER_FILE = 500_000 +TOTAL_ROWS = NUM_FILES * ROWS_PER_FILE +NUM_RUNS = 3 + + +def _generate_parquet_file(path: str, num_rows: int, seed: int) -> pa.Schema: + """Write a synthetic Parquet file and return its schema.""" + table = pa.table( + { + "id": pa.array(range(seed, seed + num_rows), type=pa.int64()), + "value": pa.array([float(i) * 0.1 for i in range(num_rows)], type=pa.float64()), + "label": pa.array([f"row_{i}" for i in range(num_rows)], type=pa.string()), + "flag": pa.array([i % 2 == 0 for i in range(num_rows)], type=pa.bool_()), + "ts": pa.array([datetime.now(timezone.utc)] * num_rows, type=pa.timestamp("us", tz="UTC")), + } + ) + pq.write_table(table, path) + return table.schema + + +@pytest.fixture(scope="session") +def benchmark_table(tmp_path_factory: pytest.TempPathFactory) -> Table: + """Create a catalog and table with synthetic Parquet files for benchmarking.""" + warehouse_path = str(tmp_path_factory.mktemp("benchmark_warehouse")) + catalog = SqlCatalog( + "benchmark", + uri=f"sqlite:///{warehouse_path}/pyiceberg_catalog.db", + warehouse=f"file://{warehouse_path}", + ) + catalog.create_namespace("default") + + # Generate files and append to table + table = None + for i in range(NUM_FILES): + file_path = f"{warehouse_path}/data_{i}.parquet" + _generate_parquet_file(file_path, ROWS_PER_FILE, seed=i * ROWS_PER_FILE) + + file_table = pq.read_table(file_path) + if table is None: + table = catalog.create_table("default.benchmark_read", schema=file_table.schema) + table.append(file_table) + + assert table is not None + return table + + +@pytest.mark.benchmark +@pytest.mark.parametrize( + "streaming,concurrent_files,batch_size", + [ + pytest.param(False, 1, None, id="default"), + pytest.param(True, 1, None, id="streaming-cf1"), + pytest.param(True, 2, None, id="streaming-cf2"), + pytest.param(True, 4, None, id="streaming-cf4"), + pytest.param(True, 8, None, id="streaming-cf8"), + pytest.param(True, 16, None, id="streaming-cf16"), + ], +) +def test_read_throughput( + benchmark_table: Table, + streaming: bool, + concurrent_files: int, + batch_size: int | None, +) -> None: + """Measure records/sec and peak Arrow memory for a scan configuration.""" + effective_batch_size = batch_size or 131_072 # PyArrow default + if streaming: + config_str = f"streaming=True, concurrent_files={concurrent_files}, batch_size={effective_batch_size}" + else: + config_str = f"streaming=False (executor.map, all files parallel), batch_size={effective_batch_size}" + print(f"\n--- ArrowScan Read Throughput Benchmark ---") + print(f"Config: {config_str}") + print(f" Files: {NUM_FILES}, Rows per file: {ROWS_PER_FILE}, Total rows: {TOTAL_ROWS}") + + elapsed_times: list[float] = [] + throughputs: list[float] = [] + peak_memories: list[int] = [] + + for run in range(NUM_RUNS): + # Measure throughput + gc.collect() + pa.default_memory_pool().release_unused() + baseline_mem = pa.total_allocated_bytes() + peak_mem = baseline_mem + + start = timeit.default_timer() + total_rows = 0 + for batch in benchmark_table.scan().to_arrow_batch_reader( + batch_size=batch_size, + streaming=streaming, + concurrent_files=concurrent_files, + ): + total_rows += len(batch) + current_mem = pa.total_allocated_bytes() + if current_mem > peak_mem: + peak_mem = current_mem + elapsed = timeit.default_timer() - start + + peak_above_baseline = peak_mem - baseline_mem + rows_per_sec = total_rows / elapsed if elapsed > 0 else 0 + elapsed_times.append(elapsed) + throughputs.append(rows_per_sec) + peak_memories.append(peak_above_baseline) + + print( + f" Run {run + 1}: {elapsed:.2f}s, {rows_per_sec:,.0f} rows/s, " + f"peak arrow mem: {peak_above_baseline / (1024 * 1024):.1f} MB" + ) + + assert total_rows == TOTAL_ROWS, f"Expected {TOTAL_ROWS} rows, got {total_rows}" + + mean_elapsed = statistics.mean(elapsed_times) + stdev_elapsed = statistics.stdev(elapsed_times) if len(elapsed_times) > 1 else 0.0 + mean_throughput = statistics.mean(throughputs) + mean_peak_mem = statistics.mean(peak_memories) + + print( + f" Mean: {mean_elapsed:.2f}s ± {stdev_elapsed:.2f}s, {mean_throughput:,.0f} rows/s, " + f"peak arrow mem: {mean_peak_mem / (1024 * 1024):.1f} MB" + ) From 2e044ea04347a848222079688a4e3ccd7c499486 Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Sat, 14 Feb 2026 18:32:36 -0800 Subject: [PATCH 10/30] fix: remove extraneous f-string prefix in benchmark Co-Authored-By: Claude Opus 4.6 --- tests/benchmark/test_read_benchmark.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/benchmark/test_read_benchmark.py b/tests/benchmark/test_read_benchmark.py index d4a0d3d2e3..7d85ecde29 100644 --- a/tests/benchmark/test_read_benchmark.py +++ b/tests/benchmark/test_read_benchmark.py @@ -108,7 +108,7 @@ def test_read_throughput( config_str = f"streaming=True, concurrent_files={concurrent_files}, batch_size={effective_batch_size}" else: config_str = f"streaming=False (executor.map, all files parallel), batch_size={effective_batch_size}" - print(f"\n--- ArrowScan Read Throughput Benchmark ---") + print("\n--- ArrowScan Read Throughput Benchmark ---") print(f"Config: {config_str}") print(f" Files: {NUM_FILES}, Rows per file: {ROWS_PER_FILE}, Total rows: {TOTAL_ROWS}") From 8dcd240b92bc6189f734dc61dee7e93147b9ab99 Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Sat, 14 Feb 2026 18:52:30 -0800 Subject: [PATCH 11/30] fix: properly reset mock call_count in test_hive_wait_for_lock Setting `mock.call_count = 0` does not actually reset the mock's internal call tracking, causing the second assertion to see accumulated calls from both test phases. Use `reset_mock()` instead. Co-Authored-By: Claude Opus 4.6 --- tests/catalog/test_hive.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/catalog/test_hive.py b/tests/catalog/test_hive.py index 88b653e44f..a8c0c943da 100644 --- a/tests/catalog/test_hive.py +++ b/tests/catalog/test_hive.py @@ -1314,8 +1314,8 @@ def test_hive_wait_for_lock() -> None: assert catalog._client.check_lock.call_count == 3 # lock wait should exit with WaitingForLockException finally after enough retries + catalog._client.check_lock.reset_mock() catalog._client.check_lock.side_effect = [waiting for _ in range(10)] - catalog._client.check_lock.call_count = 0 with pytest.raises(WaitingForLockException): catalog._wait_for_lock("db", "tbl", lockid, catalog._client) assert catalog._client.check_lock.call_count == 5 From 4a0a43019c42d74af80dea075ecbca22ad49d567 Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Sun, 15 Feb 2026 05:06:19 -0800 Subject: [PATCH 12/30] feat: add default-4threads benchmark and time-to-first-record metric Add a parametrized benchmark case for default (executor.map) with max_workers=4 to compare memory/throughput against unbounded threading. Add TTFR (time to first record) measurement across all configurations. Co-Authored-By: Claude Opus 4.6 --- tests/benchmark/test_read_benchmark.py | 109 +++++++++++++++---------- 1 file changed, 67 insertions(+), 42 deletions(-) diff --git a/tests/benchmark/test_read_benchmark.py b/tests/benchmark/test_read_benchmark.py index 7d85ecde29..1b02c4dfb4 100644 --- a/tests/benchmark/test_read_benchmark.py +++ b/tests/benchmark/test_read_benchmark.py @@ -86,14 +86,15 @@ def benchmark_table(tmp_path_factory: pytest.TempPathFactory) -> Table: @pytest.mark.benchmark @pytest.mark.parametrize( - "streaming,concurrent_files,batch_size", + "streaming,concurrent_files,batch_size,max_workers", [ - pytest.param(False, 1, None, id="default"), - pytest.param(True, 1, None, id="streaming-cf1"), - pytest.param(True, 2, None, id="streaming-cf2"), - pytest.param(True, 4, None, id="streaming-cf4"), - pytest.param(True, 8, None, id="streaming-cf8"), - pytest.param(True, 16, None, id="streaming-cf16"), + pytest.param(False, 1, None, None, id="default"), + pytest.param(False, 1, None, 4, id="default-4threads"), + pytest.param(True, 1, None, None, id="streaming-cf1"), + pytest.param(True, 2, None, None, id="streaming-cf2"), + pytest.param(True, 4, None, None, id="streaming-cf4"), + pytest.param(True, 8, None, None, id="streaming-cf8"), + pytest.param(True, 16, None, None, id="streaming-cf16"), ], ) def test_read_throughput( @@ -101,13 +102,17 @@ def test_read_throughput( streaming: bool, concurrent_files: int, batch_size: int | None, + max_workers: int | None, ) -> None: - """Measure records/sec and peak Arrow memory for a scan configuration.""" + """Measure records/sec, time to first record, and peak Arrow memory for a scan configuration.""" + from pyiceberg.utils.concurrent import ExecutorFactory + effective_batch_size = batch_size or 131_072 # PyArrow default if streaming: config_str = f"streaming=True, concurrent_files={concurrent_files}, batch_size={effective_batch_size}" else: - config_str = f"streaming=False (executor.map, all files parallel), batch_size={effective_batch_size}" + workers_str = f", max_workers={max_workers}" if max_workers else "" + config_str = f"streaming=False (executor.map, all files parallel), batch_size={effective_batch_size}{workers_str}" print("\n--- ArrowScan Read Throughput Benchmark ---") print(f"Config: {config_str}") print(f" Files: {NUM_FILES}, Rows per file: {ROWS_PER_FILE}, Total rows: {TOTAL_ROWS}") @@ -115,46 +120,66 @@ def test_read_throughput( elapsed_times: list[float] = [] throughputs: list[float] = [] peak_memories: list[int] = [] - - for run in range(NUM_RUNS): - # Measure throughput - gc.collect() - pa.default_memory_pool().release_unused() - baseline_mem = pa.total_allocated_bytes() - peak_mem = baseline_mem - - start = timeit.default_timer() - total_rows = 0 - for batch in benchmark_table.scan().to_arrow_batch_reader( - batch_size=batch_size, - streaming=streaming, - concurrent_files=concurrent_files, - ): - total_rows += len(batch) - current_mem = pa.total_allocated_bytes() - if current_mem > peak_mem: - peak_mem = current_mem - elapsed = timeit.default_timer() - start - - peak_above_baseline = peak_mem - baseline_mem - rows_per_sec = total_rows / elapsed if elapsed > 0 else 0 - elapsed_times.append(elapsed) - throughputs.append(rows_per_sec) - peak_memories.append(peak_above_baseline) - - print( - f" Run {run + 1}: {elapsed:.2f}s, {rows_per_sec:,.0f} rows/s, " - f"peak arrow mem: {peak_above_baseline / (1024 * 1024):.1f} MB" - ) - - assert total_rows == TOTAL_ROWS, f"Expected {TOTAL_ROWS} rows, got {total_rows}" + ttfr_times: list[float] = [] + + # Override max_workers if specified + original_instance = None + if max_workers is not None: + from concurrent.futures import ThreadPoolExecutor + + original_instance = ExecutorFactory._instance + ExecutorFactory._instance = ThreadPoolExecutor(max_workers=max_workers) + + try: + for run in range(NUM_RUNS): + # Measure throughput + gc.collect() + pa.default_memory_pool().release_unused() + baseline_mem = pa.total_allocated_bytes() + peak_mem = baseline_mem + + start = timeit.default_timer() + total_rows = 0 + first_batch_time = None + for batch in benchmark_table.scan().to_arrow_batch_reader( + batch_size=batch_size, + streaming=streaming, + concurrent_files=concurrent_files, + ): + if first_batch_time is None: + first_batch_time = timeit.default_timer() - start + total_rows += len(batch) + current_mem = pa.total_allocated_bytes() + if current_mem > peak_mem: + peak_mem = current_mem + elapsed = timeit.default_timer() - start + + peak_above_baseline = peak_mem - baseline_mem + rows_per_sec = total_rows / elapsed if elapsed > 0 else 0 + elapsed_times.append(elapsed) + throughputs.append(rows_per_sec) + peak_memories.append(peak_above_baseline) + ttfr_times.append(first_batch_time or 0.0) + + print( + f" Run {run + 1}: {elapsed:.2f}s, {rows_per_sec:,.0f} rows/s, " + f"TTFR: {(first_batch_time or 0) * 1000:.1f}ms, " + f"peak arrow mem: {peak_above_baseline / (1024 * 1024):.1f} MB" + ) + + assert total_rows == TOTAL_ROWS, f"Expected {TOTAL_ROWS} rows, got {total_rows}" + finally: + if original_instance is not None: + ExecutorFactory._instance = original_instance mean_elapsed = statistics.mean(elapsed_times) stdev_elapsed = statistics.stdev(elapsed_times) if len(elapsed_times) > 1 else 0.0 mean_throughput = statistics.mean(throughputs) mean_peak_mem = statistics.mean(peak_memories) + mean_ttfr = statistics.mean(ttfr_times) print( f" Mean: {mean_elapsed:.2f}s ± {stdev_elapsed:.2f}s, {mean_throughput:,.0f} rows/s, " + f"TTFR: {mean_ttfr * 1000:.1f}ms, " f"peak arrow mem: {mean_peak_mem / (1024 * 1024):.1f} MB" ) From 2efdcbabf72bb731cf3d447375429bb83e030c6e Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Sun, 15 Feb 2026 05:15:37 -0800 Subject: [PATCH 13/30] chore: remove default-4threads benchmark configuration Co-Authored-By: Claude Opus 4.6 --- tests/benchmark/test_read_benchmark.py | 107 +++++++++++-------------- 1 file changed, 45 insertions(+), 62 deletions(-) diff --git a/tests/benchmark/test_read_benchmark.py b/tests/benchmark/test_read_benchmark.py index 1b02c4dfb4..b59f7f7b5f 100644 --- a/tests/benchmark/test_read_benchmark.py +++ b/tests/benchmark/test_read_benchmark.py @@ -86,15 +86,14 @@ def benchmark_table(tmp_path_factory: pytest.TempPathFactory) -> Table: @pytest.mark.benchmark @pytest.mark.parametrize( - "streaming,concurrent_files,batch_size,max_workers", + "streaming,concurrent_files,batch_size", [ - pytest.param(False, 1, None, None, id="default"), - pytest.param(False, 1, None, 4, id="default-4threads"), - pytest.param(True, 1, None, None, id="streaming-cf1"), - pytest.param(True, 2, None, None, id="streaming-cf2"), - pytest.param(True, 4, None, None, id="streaming-cf4"), - pytest.param(True, 8, None, None, id="streaming-cf8"), - pytest.param(True, 16, None, None, id="streaming-cf16"), + pytest.param(False, 1, None, id="default"), + pytest.param(True, 1, None, id="streaming-cf1"), + pytest.param(True, 2, None, id="streaming-cf2"), + pytest.param(True, 4, None, id="streaming-cf4"), + pytest.param(True, 8, None, id="streaming-cf8"), + pytest.param(True, 16, None, id="streaming-cf16"), ], ) def test_read_throughput( @@ -102,17 +101,13 @@ def test_read_throughput( streaming: bool, concurrent_files: int, batch_size: int | None, - max_workers: int | None, ) -> None: """Measure records/sec, time to first record, and peak Arrow memory for a scan configuration.""" - from pyiceberg.utils.concurrent import ExecutorFactory - effective_batch_size = batch_size or 131_072 # PyArrow default if streaming: config_str = f"streaming=True, concurrent_files={concurrent_files}, batch_size={effective_batch_size}" else: - workers_str = f", max_workers={max_workers}" if max_workers else "" - config_str = f"streaming=False (executor.map, all files parallel), batch_size={effective_batch_size}{workers_str}" + config_str = f"streaming=False (executor.map, all files parallel), batch_size={effective_batch_size}" print("\n--- ArrowScan Read Throughput Benchmark ---") print(f"Config: {config_str}") print(f" Files: {NUM_FILES}, Rows per file: {ROWS_PER_FILE}, Total rows: {TOTAL_ROWS}") @@ -122,55 +117,43 @@ def test_read_throughput( peak_memories: list[int] = [] ttfr_times: list[float] = [] - # Override max_workers if specified - original_instance = None - if max_workers is not None: - from concurrent.futures import ThreadPoolExecutor - - original_instance = ExecutorFactory._instance - ExecutorFactory._instance = ThreadPoolExecutor(max_workers=max_workers) - - try: - for run in range(NUM_RUNS): - # Measure throughput - gc.collect() - pa.default_memory_pool().release_unused() - baseline_mem = pa.total_allocated_bytes() - peak_mem = baseline_mem - - start = timeit.default_timer() - total_rows = 0 - first_batch_time = None - for batch in benchmark_table.scan().to_arrow_batch_reader( - batch_size=batch_size, - streaming=streaming, - concurrent_files=concurrent_files, - ): - if first_batch_time is None: - first_batch_time = timeit.default_timer() - start - total_rows += len(batch) - current_mem = pa.total_allocated_bytes() - if current_mem > peak_mem: - peak_mem = current_mem - elapsed = timeit.default_timer() - start - - peak_above_baseline = peak_mem - baseline_mem - rows_per_sec = total_rows / elapsed if elapsed > 0 else 0 - elapsed_times.append(elapsed) - throughputs.append(rows_per_sec) - peak_memories.append(peak_above_baseline) - ttfr_times.append(first_batch_time or 0.0) - - print( - f" Run {run + 1}: {elapsed:.2f}s, {rows_per_sec:,.0f} rows/s, " - f"TTFR: {(first_batch_time or 0) * 1000:.1f}ms, " - f"peak arrow mem: {peak_above_baseline / (1024 * 1024):.1f} MB" - ) - - assert total_rows == TOTAL_ROWS, f"Expected {TOTAL_ROWS} rows, got {total_rows}" - finally: - if original_instance is not None: - ExecutorFactory._instance = original_instance + for run in range(NUM_RUNS): + # Measure throughput + gc.collect() + pa.default_memory_pool().release_unused() + baseline_mem = pa.total_allocated_bytes() + peak_mem = baseline_mem + + start = timeit.default_timer() + total_rows = 0 + first_batch_time = None + for batch in benchmark_table.scan().to_arrow_batch_reader( + batch_size=batch_size, + streaming=streaming, + concurrent_files=concurrent_files, + ): + if first_batch_time is None: + first_batch_time = timeit.default_timer() - start + total_rows += len(batch) + current_mem = pa.total_allocated_bytes() + if current_mem > peak_mem: + peak_mem = current_mem + elapsed = timeit.default_timer() - start + + peak_above_baseline = peak_mem - baseline_mem + rows_per_sec = total_rows / elapsed if elapsed > 0 else 0 + elapsed_times.append(elapsed) + throughputs.append(rows_per_sec) + peak_memories.append(peak_above_baseline) + ttfr_times.append(first_batch_time or 0.0) + + print( + f" Run {run + 1}: {elapsed:.2f}s, {rows_per_sec:,.0f} rows/s, " + f"TTFR: {(first_batch_time or 0) * 1000:.1f}ms, " + f"peak arrow mem: {peak_above_baseline / (1024 * 1024):.1f} MB" + ) + + assert total_rows == TOTAL_ROWS, f"Expected {TOTAL_ROWS} rows, got {total_rows}" mean_elapsed = statistics.mean(elapsed_times) stdev_elapsed = statistics.stdev(elapsed_times) if len(elapsed_times) > 1 else 0.0 From 09aad7ad7c7fdb044e78a990bf1d98bf421e3851 Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Mon, 16 Feb 2026 19:22:32 -0800 Subject: [PATCH 14/30] docs: add configuration guidance table to streaming API docs Add a "which config should I use?" tip box with recommended starting points for common use cases, and clarify that batch_size is an advanced tuning knob. Co-Authored-By: Claude Opus 4.6 --- mkdocs/docs/api.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/mkdocs/docs/api.md b/mkdocs/docs/api.md index 4f357c8429..ae81117b94 100644 --- a/mkdocs/docs/api.md +++ b/mkdocs/docs/api.md @@ -389,6 +389,17 @@ for buf in tbl.scan().to_arrow_batch_reader(order=ScanOrder.ARRIVAL, concurrent_ Within each file, batch ordering always follows row order. The `limit` parameter is enforced correctly regardless of configuration. +!!! tip "Which configuration should I use?" + + | Use case | Recommended config | + |---|---| + | Small tables, simple queries | Default — no extra args needed | + | Large tables, memory-constrained | `streaming=True` — one file at a time, minimal memory | + | Maximum throughput with bounded memory | `streaming=True, concurrent_files=N` — tune N to balance throughput vs memory | + | Fine-grained batch control | Add `batch_size=N` to any of the above | + + **Note:** `streaming=True` yields batches in arrival order (interleaved across files when `concurrent_files > 1`). For deterministic file ordering, use the default non-streaming mode. `batch_size` is usually an advanced tuning knob — the PyArrow default of 131,072 rows works well for most workloads. + To avoid any type inconsistencies during writing, you can convert the Iceberg table schema to Arrow: ```python From b2ae7258f94106fe97a17ef0dab8306675b7c853 Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Mon, 16 Feb 2026 19:29:08 -0800 Subject: [PATCH 15/30] chore: remove benchmark marker so tests run in CI Remove @pytest.mark.benchmark so the read throughput tests are included in the default `make test` filter as parametrize-marked tests. Co-Authored-By: Claude Opus 4.6 --- mkdocs/docs/api.md | 16 ++++++++-------- tests/benchmark/test_read_benchmark.py | 3 +-- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/mkdocs/docs/api.md b/mkdocs/docs/api.md index ae81117b94..9ac810634e 100644 --- a/mkdocs/docs/api.md +++ b/mkdocs/docs/api.md @@ -389,16 +389,16 @@ for buf in tbl.scan().to_arrow_batch_reader(order=ScanOrder.ARRIVAL, concurrent_ Within each file, batch ordering always follows row order. The `limit` parameter is enforced correctly regardless of configuration. -!!! tip "Which configuration should I use?" +**Which configuration should I use?** - | Use case | Recommended config | - |---|---| - | Small tables, simple queries | Default — no extra args needed | - | Large tables, memory-constrained | `streaming=True` — one file at a time, minimal memory | - | Maximum throughput with bounded memory | `streaming=True, concurrent_files=N` — tune N to balance throughput vs memory | - | Fine-grained batch control | Add `batch_size=N` to any of the above | +| Use case | Recommended config | +|---|---| +| Small tables, simple queries | Default — no extra args needed | +| Large tables, memory-constrained | `streaming=True` — one file at a time, minimal memory | +| Maximum throughput with bounded memory | `streaming=True, concurrent_files=N` — tune N to balance throughput vs memory | +| Fine-grained batch control | Add `batch_size=N` to any of the above | - **Note:** `streaming=True` yields batches in arrival order (interleaved across files when `concurrent_files > 1`). For deterministic file ordering, use the default non-streaming mode. `batch_size` is usually an advanced tuning knob — the PyArrow default of 131,072 rows works well for most workloads. +**Note:** `streaming=True` yields batches in arrival order (interleaved across files when `concurrent_files > 1`). For deterministic file ordering, use the default non-streaming mode. `batch_size` is usually an advanced tuning knob — the PyArrow default of 131,072 rows works well for most workloads. To avoid any type inconsistencies during writing, you can convert the Iceberg table schema to Arrow: diff --git a/tests/benchmark/test_read_benchmark.py b/tests/benchmark/test_read_benchmark.py index b59f7f7b5f..cf44843c7c 100644 --- a/tests/benchmark/test_read_benchmark.py +++ b/tests/benchmark/test_read_benchmark.py @@ -22,7 +22,7 @@ Memory is measured using pa.total_allocated_bytes() which tracks PyArrow's C++ memory pool (Arrow buffers, Parquet decompression), not Python heap allocations. -Run with: uv run pytest tests/benchmark/test_read_benchmark.py -v -s -m benchmark +Run with: uv run pytest tests/benchmark/test_read_benchmark.py -v -s """ import gc @@ -84,7 +84,6 @@ def benchmark_table(tmp_path_factory: pytest.TempPathFactory) -> Table: return table -@pytest.mark.benchmark @pytest.mark.parametrize( "streaming,concurrent_files,batch_size", [ From afb244c0997acc519ef67bf9b652f42bc8a15ea7 Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Mon, 16 Feb 2026 21:07:22 -0800 Subject: [PATCH 16/30] refactor: replace streaming param with order=ScanOrder in benchmarks and docs Co-Authored-By: Claude Opus 4.6 --- mkdocs/docs/api.md | 6 +++--- tests/benchmark/test_read_benchmark.py | 28 +++++++++++++------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/mkdocs/docs/api.md b/mkdocs/docs/api.md index 9ac810634e..6c439f5fed 100644 --- a/mkdocs/docs/api.md +++ b/mkdocs/docs/api.md @@ -394,11 +394,11 @@ Within each file, batch ordering always follows row order. The `limit` parameter | Use case | Recommended config | |---|---| | Small tables, simple queries | Default — no extra args needed | -| Large tables, memory-constrained | `streaming=True` — one file at a time, minimal memory | -| Maximum throughput with bounded memory | `streaming=True, concurrent_files=N` — tune N to balance throughput vs memory | +| Large tables, memory-constrained | `order=ScanOrder.ARRIVAL` — one file at a time, minimal memory | +| Maximum throughput with bounded memory | `order=ScanOrder.ARRIVAL, concurrent_files=N` — tune N to balance throughput vs memory | | Fine-grained batch control | Add `batch_size=N` to any of the above | -**Note:** `streaming=True` yields batches in arrival order (interleaved across files when `concurrent_files > 1`). For deterministic file ordering, use the default non-streaming mode. `batch_size` is usually an advanced tuning knob — the PyArrow default of 131,072 rows works well for most workloads. +**Note:** `ScanOrder.ARRIVAL` yields batches in arrival order (interleaved across files when `concurrent_files > 1`). For deterministic file ordering, use the default `ScanOrder.TASK` mode. `batch_size` is usually an advanced tuning knob — the PyArrow default of 131,072 rows works well for most workloads. To avoid any type inconsistencies during writing, you can convert the Iceberg table schema to Arrow: diff --git a/tests/benchmark/test_read_benchmark.py b/tests/benchmark/test_read_benchmark.py index cf44843c7c..809c106dd1 100644 --- a/tests/benchmark/test_read_benchmark.py +++ b/tests/benchmark/test_read_benchmark.py @@ -16,7 +16,7 @@ # under the License. """Read throughput micro-benchmark for ArrowScan configurations. -Measures records/sec and peak Arrow memory across streaming, concurrent_files, +Measures records/sec and peak Arrow memory across ScanOrder, concurrent_files, and batch_size configurations introduced for issue #3036. Memory is measured using pa.total_allocated_bytes() which tracks PyArrow's C++ @@ -35,7 +35,7 @@ import pytest from pyiceberg.catalog.sql import SqlCatalog -from pyiceberg.table import Table +from pyiceberg.table import ScanOrder, Table NUM_FILES = 32 ROWS_PER_FILE = 500_000 @@ -85,28 +85,28 @@ def benchmark_table(tmp_path_factory: pytest.TempPathFactory) -> Table: @pytest.mark.parametrize( - "streaming,concurrent_files,batch_size", + "order,concurrent_files,batch_size", [ - pytest.param(False, 1, None, id="default"), - pytest.param(True, 1, None, id="streaming-cf1"), - pytest.param(True, 2, None, id="streaming-cf2"), - pytest.param(True, 4, None, id="streaming-cf4"), - pytest.param(True, 8, None, id="streaming-cf8"), - pytest.param(True, 16, None, id="streaming-cf16"), + pytest.param(ScanOrder.TASK, 1, None, id="default"), + pytest.param(ScanOrder.ARRIVAL, 1, None, id="arrival-cf1"), + pytest.param(ScanOrder.ARRIVAL, 2, None, id="arrival-cf2"), + pytest.param(ScanOrder.ARRIVAL, 4, None, id="arrival-cf4"), + pytest.param(ScanOrder.ARRIVAL, 8, None, id="arrival-cf8"), + pytest.param(ScanOrder.ARRIVAL, 16, None, id="arrival-cf16"), ], ) def test_read_throughput( benchmark_table: Table, - streaming: bool, + order: ScanOrder, concurrent_files: int, batch_size: int | None, ) -> None: """Measure records/sec, time to first record, and peak Arrow memory for a scan configuration.""" effective_batch_size = batch_size or 131_072 # PyArrow default - if streaming: - config_str = f"streaming=True, concurrent_files={concurrent_files}, batch_size={effective_batch_size}" + if order == ScanOrder.ARRIVAL: + config_str = f"order=ARRIVAL, concurrent_files={concurrent_files}, batch_size={effective_batch_size}" else: - config_str = f"streaming=False (executor.map, all files parallel), batch_size={effective_batch_size}" + config_str = f"order=TASK (executor.map, all files parallel), batch_size={effective_batch_size}" print("\n--- ArrowScan Read Throughput Benchmark ---") print(f"Config: {config_str}") print(f" Files: {NUM_FILES}, Rows per file: {ROWS_PER_FILE}, Total rows: {TOTAL_ROWS}") @@ -128,7 +128,7 @@ def test_read_throughput( first_batch_time = None for batch in benchmark_table.scan().to_arrow_batch_reader( batch_size=batch_size, - streaming=streaming, + order=order, concurrent_files=concurrent_files, ): if first_batch_time is None: From 03bda3daca1b0fa6cac41695920573bf721e9423 Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Wed, 18 Feb 2026 12:34:33 -0800 Subject: [PATCH 17/30] refactor: Replace ScanOrder enum with class hierarchy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace ScanOrder(str, Enum) with: - ScanOrder(ABC): Base class for ordering strategies - TaskOrder(ScanOrder): Default behavior, preserves existing API - ArrivalOrder(ScanOrder): Encapsulates concurrent_streams and max_buffered_batches This addresses reviewer feedback about unused parameters and improves type safety. Parameters are now scoped to their appropriate ordering mode. Rename concurrent_files → concurrent_streams for clarity. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- pyiceberg/io/pyarrow.py | 47 +++++++++++++++------------------ pyiceberg/table/__init__.py | 52 +++++++++++++++++++++++-------------- 2 files changed, 53 insertions(+), 46 deletions(-) diff --git a/pyiceberg/io/pyarrow.py b/pyiceberg/io/pyarrow.py index 24af3d0223..35c5562560 100644 --- a/pyiceberg/io/pyarrow.py +++ b/pyiceberg/io/pyarrow.py @@ -144,7 +144,7 @@ visit, visit_with_partner, ) -from pyiceberg.table import DOWNCAST_NS_TIMESTAMP_TO_US_ON_WRITE, ScanOrder, TableProperties +from pyiceberg.table import DOWNCAST_NS_TIMESTAMP_TO_US_ON_WRITE, ScanOrder, TaskOrder, ArrivalOrder, TableProperties from pyiceberg.table.locations import load_location_provider from pyiceberg.table.metadata import TableMetadata from pyiceberg.table.name_mapping import NameMapping, apply_name_mapping @@ -1691,19 +1691,19 @@ def _read_all_delete_files(io: FileIO, tasks: Iterable[FileScanTask]) -> dict[st def _bounded_concurrent_batches( tasks: list[FileScanTask], batch_fn: Callable[[FileScanTask], Iterator[pa.RecordBatch]], - concurrent_files: int, + concurrent_streams: int, max_buffered_batches: int = 16, ) -> Generator[pa.RecordBatch, None, None]: """Read batches from multiple files concurrently with bounded memory. - Uses a per-scan ThreadPoolExecutor(max_workers=concurrent_files) to naturally + Uses a per-scan ThreadPoolExecutor(max_workers=concurrent_streams) to naturally bound concurrency. Workers push batches into a bounded queue which provides backpressure when the consumer is slower than the producers. Args: tasks: The file scan tasks to process. batch_fn: A callable that takes a FileScanTask and returns an iterator of RecordBatches. - concurrent_files: Maximum number of files to read concurrently. + concurrent_streams: Maximum number of concurrent read streams. max_buffered_batches: Maximum number of batches to buffer in the queue. """ if not tasks: @@ -1730,7 +1730,7 @@ def worker(task: FileScanTask) -> None: if remaining == 0: batch_queue.put(_QUEUE_SENTINEL) - with ThreadPoolExecutor(max_workers=concurrent_files) as executor: + with ThreadPoolExecutor(max_workers=concurrent_streams) as executor: for task in tasks: executor.submit(worker, task) @@ -1838,8 +1838,7 @@ def to_record_batches( self, tasks: Iterable[FileScanTask], batch_size: int | None = None, - order: ScanOrder = ScanOrder.TASK, - concurrent_files: int = 1, + order: ScanOrder = TaskOrder(), ) -> Iterator[pa.RecordBatch]: """Scan the Iceberg table and return an Iterator[pa.RecordBatch]. @@ -1848,21 +1847,17 @@ def to_record_batches( Only data that matches the provided row_filter expression is returned. Ordering semantics: - - ScanOrder.TASK (default): Batches are grouped by file in task submission order. - - ScanOrder.ARRIVAL: Batches may be interleaved across files. Within each file, - batch ordering follows row order. + - TaskOrder() (default): Yields batches one file at a time in task submission order. + - ArrivalOrder(): Batches may be interleaved across files as they arrive. + Within each file, batch ordering follows row order. Args: tasks: FileScanTasks representing the data files and delete files to read from. batch_size: The number of rows per batch. If None, PyArrow's default is used. order: Controls the order in which record batches are returned. - ScanOrder.TASK (default) returns batches in task order, with each task - fully materialized before proceeding to the next. Allows parallel file - reads via executor. ScanOrder.ARRIVAL yields batches as they are - produced without materializing entire files into memory. - concurrent_files: Number of files to read concurrently when order=ScanOrder.ARRIVAL. - Must be >= 1. When > 1, batches may arrive interleaved across files. - Ignored when order=ScanOrder.TASK. + TaskOrder() (default) yields batches one file at a time in task order. + ArrivalOrder(concurrent_streams=N, max_buffered_batches=M) yields batches + as they are produced without materializing entire files into memory. Returns: An Iterator of PyArrow RecordBatches. @@ -1871,18 +1866,17 @@ def to_record_batches( Raises: ResolveError: When a required field cannot be found in the file ValueError: When a field type in the file cannot be projected to the schema type, - or when an invalid order value is provided, or when concurrent_files < 1. + or when an invalid order value is provided, or when concurrent_streams < 1. """ if not isinstance(order, ScanOrder): - raise ValueError(f"Invalid order: {order!r}. Must be a ScanOrder enum value (ScanOrder.TASK or ScanOrder.ARRIVAL).") - - if concurrent_files < 1: - raise ValueError(f"concurrent_files must be >= 1, got {concurrent_files}") + raise ValueError(f"Invalid order: {order!r}. Must be a ScanOrder instance (TaskOrder() or ArrivalOrder()).") task_list, deletes_per_file = self._prepare_tasks_and_deletes(tasks) - if order == ScanOrder.ARRIVAL: - return self._apply_limit(self._iter_batches_arrival(task_list, deletes_per_file, batch_size, concurrent_files)) + if isinstance(order, ArrivalOrder): + if order.concurrent_streams < 1: + raise ValueError(f"concurrent_streams must be >= 1, got {order.concurrent_streams}") + return self._apply_limit(self._iter_batches_arrival(task_list, deletes_per_file, batch_size, order.concurrent_streams, order.max_buffered_batches)) return self._apply_limit(self._iter_batches_materialized(task_list, deletes_per_file, batch_size)) @@ -1899,14 +1893,15 @@ def _iter_batches_arrival( task_list: list[FileScanTask], deletes_per_file: dict[str, list[ChunkedArray]], batch_size: int | None, - concurrent_files: int, + concurrent_streams: int, + max_buffered_batches: int = 16, ) -> Iterator[pa.RecordBatch]: """Yield batches using bounded concurrent streaming in arrival order.""" def batch_fn(task: FileScanTask) -> Iterator[pa.RecordBatch]: return self._record_batches_from_scan_tasks_and_deletes([task], deletes_per_file, batch_size) - yield from _bounded_concurrent_batches(task_list, batch_fn, concurrent_files) + yield from _bounded_concurrent_batches(task_list, batch_fn, concurrent_streams, max_buffered_batches) def _iter_batches_materialized( self, diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index c7f43b48c1..8d179cfcb8 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -155,18 +155,31 @@ DOWNCAST_NS_TIMESTAMP_TO_US_ON_WRITE = "downcast-ns-timestamp-to-us-on-write" -class ScanOrder(str, Enum): - """Order in which record batches are returned from a scan. - - Attributes: - TASK: Batches are returned in task order, with each task fully materialized - before proceeding to the next. Allows parallel file reads via executor. - ARRIVAL: Batches are yielded as they are produced, processing tasks - sequentially without materializing entire files into memory. +@dataclass +class ScanOrder(ABC): + """Base class for scan ordering strategies.""" + pass + + +@dataclass +class TaskOrder(ScanOrder): + """Sequential task processing preserving existing behavior. + + Batches are returned in task order, with each task fully materialized + before proceeding to the next. Allows parallel file reads via executor. """ + pass + - TASK = "task" - ARRIVAL = "arrival" +@dataclass +class ArrivalOrder(ScanOrder): + """Stream batches as they arrive from concurrent read streams. + + Batches are yielded as they are produced without materializing entire + files into memory. Supports concurrent processing of multiple files. + """ + concurrent_streams: int = 1 + max_buffered_batches: int = 16 @dataclass() @@ -2171,7 +2184,7 @@ def to_arrow(self) -> pa.Table: ).to_table(self.plan_files()) def to_arrow_batch_reader( - self, batch_size: int | None = None, order: ScanOrder = ScanOrder.TASK, concurrent_files: int = 1 + self, batch_size: int | None = None, order: ScanOrder = TaskOrder() ) -> pa.RecordBatchReader: """Return an Arrow RecordBatchReader from this DataScan. @@ -2180,18 +2193,17 @@ def to_arrow_batch_reader( is read one at a time. Ordering semantics: - - ScanOrder.TASK (default): Batches are grouped by file in task submission order. - - ScanOrder.ARRIVAL: Batches may be interleaved across files. Within each file, - batch ordering follows row order. + - TaskOrder() (default): Yields batches one file at a time in file scan task order. + - ArrivalOrder(): Batches may be interleaved across files as they arrive. + Within each file, batch ordering follows row order. Args: batch_size: The number of rows per batch. If None, PyArrow's default is used. order: Controls the order in which record batches are returned. - ScanOrder.TASK (default) returns batches in task order with parallel - file reads. ScanOrder.ARRIVAL yields batches as they are produced - without materializing entire files into memory. - concurrent_files: Number of files to read concurrently when order=ScanOrder.ARRIVAL. - When > 1, batches may arrive interleaved across files. + TaskOrder() (default) yields batches one file at a time in task order. + ArrivalOrder(concurrent_streams=N, max_buffered_batches=M) yields batches + as they are produced without materializing entire files into memory. + concurrent_streams controls parallelism, max_buffered_batches controls memory. Returns: pa.RecordBatchReader: Arrow RecordBatchReader from the Iceberg table's DataScan @@ -2204,7 +2216,7 @@ def to_arrow_batch_reader( target_schema = schema_to_pyarrow(self.projection()) batches = ArrowScan( self.table_metadata, self.io, self.projection(), self.row_filter, self.case_sensitive, self.limit - ).to_record_batches(self.plan_files(), batch_size=batch_size, order=order, concurrent_files=concurrent_files) + ).to_record_batches(self.plan_files(), batch_size=batch_size, order=order) return pa.RecordBatchReader.from_batches( target_schema, From 19841dce33f8332142aef328469eb622e1f197c7 Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Wed, 18 Feb 2026 12:34:43 -0800 Subject: [PATCH 18/30] test: Update tests for new ScanOrder class hierarchy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace ScanOrder.TASK/ARRIVAL with TaskOrder()/ArrivalOrder() instances. Update concurrent_files → concurrent_streams parameter usage. All existing test scenarios preserved with new type-safe API. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- tests/io/test_bounded_concurrent_batches.py | 4 +-- tests/io/test_pyarrow.py | 36 ++++++++++----------- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/tests/io/test_bounded_concurrent_batches.py b/tests/io/test_bounded_concurrent_batches.py index e80e7c1798..2fe9526b19 100644 --- a/tests/io/test_bounded_concurrent_batches.py +++ b/tests/io/test_bounded_concurrent_batches.py @@ -25,7 +25,7 @@ import pytest from pyiceberg.io.pyarrow import _bounded_concurrent_batches -from pyiceberg.table import FileScanTask, ScanOrder +from pyiceberg.table import FileScanTask, ScanOrder, TaskOrder, ArrivalOrder def _make_task() -> FileScanTask: @@ -253,6 +253,6 @@ def test_concurrent_with_limit_via_arrowscan(tmpdir: str) -> None: limit=150, ) - batches = list(scan.to_record_batches(tasks, order=ScanOrder.ARRIVAL, concurrent_files=2)) + batches = list(scan.to_record_batches(tasks, order=ArrivalOrder(concurrent_streams=2))) total_rows = sum(len(b) for b in batches) assert total_rows == 150 diff --git a/tests/io/test_pyarrow.py b/tests/io/test_pyarrow.py index dd450c588e..22274d667e 100644 --- a/tests/io/test_pyarrow.py +++ b/tests/io/test_pyarrow.py @@ -86,7 +86,7 @@ from pyiceberg.manifest import DataFile, DataFileContent, FileFormat from pyiceberg.partitioning import PartitionField, PartitionSpec from pyiceberg.schema import Schema, make_compatible_name, visit -from pyiceberg.table import FileScanTask, ScanOrder, TableProperties +from pyiceberg.table import FileScanTask, ScanOrder, TaskOrder, ArrivalOrder, TableProperties from pyiceberg.table.metadata import TableMetadataV2 from pyiceberg.table.name_mapping import create_mapping_from_schema from pyiceberg.transforms import HourTransform, IdentityTransform @@ -3170,13 +3170,13 @@ def _create_scan_and_tasks( def test_task_order_produces_same_results(tmpdir: str) -> None: - """Test that order=ScanOrder.TASK produces the same results as the default behavior.""" + """Test that order=TaskOrder() produces the same results as the default behavior.""" scan, tasks = _create_scan_and_tasks(tmpdir, num_files=3, rows_per_file=100) - batches_default = list(scan.to_record_batches(tasks, order=ScanOrder.TASK)) + batches_default = list(scan.to_record_batches(tasks, order=TaskOrder())) # Re-create tasks since iterators are consumed _, tasks2 = _create_scan_and_tasks(tmpdir, num_files=3, rows_per_file=100) - batches_task_order = list(scan.to_record_batches(tasks2, order=ScanOrder.TASK)) + batches_task_order = list(scan.to_record_batches(tasks2, order=TaskOrder())) total_default = sum(len(b) for b in batches_default) total_task_order = sum(len(b) for b in batches_task_order) @@ -3185,10 +3185,10 @@ def test_task_order_produces_same_results(tmpdir: str) -> None: def test_arrival_order_yields_all_batches(tmpdir: str) -> None: - """Test that order=ScanOrder.ARRIVAL yields all batches correctly.""" + """Test that order=ArrivalOrder() yields all batches correctly.""" scan, tasks = _create_scan_and_tasks(tmpdir, num_files=3, rows_per_file=100) - batches = list(scan.to_record_batches(tasks, order=ScanOrder.ARRIVAL)) + batches = list(scan.to_record_batches(tasks, order=ArrivalOrder())) total_rows = sum(len(b) for b in batches) assert total_rows == 300 @@ -3198,10 +3198,10 @@ def test_arrival_order_yields_all_batches(tmpdir: str) -> None: def test_arrival_order_with_limit(tmpdir: str) -> None: - """Test that order=ScanOrder.ARRIVAL respects the row limit.""" + """Test that order=ArrivalOrder() respects the row limit.""" scan, tasks = _create_scan_and_tasks(tmpdir, num_files=3, rows_per_file=100, limit=150) - batches = list(scan.to_record_batches(tasks, order=ScanOrder.ARRIVAL)) + batches = list(scan.to_record_batches(tasks, order=ArrivalOrder())) total_rows = sum(len(b) for b in batches) assert total_rows == 150 @@ -3211,7 +3211,7 @@ def test_arrival_order_within_file_ordering_preserved(tmpdir: str) -> None: """Test that within-file row ordering is preserved in arrival order mode.""" scan, tasks = _create_scan_and_tasks(tmpdir, num_files=3, rows_per_file=100) - batches = list(scan.to_record_batches(tasks, order=ScanOrder.ARRIVAL)) + batches = list(scan.to_record_batches(tasks, order=ArrivalOrder())) all_values = sorted([v for b in batches for v in b.column("col").to_pylist()]) # All values should be present, within-file ordering is preserved @@ -3219,7 +3219,7 @@ def test_arrival_order_within_file_ordering_preserved(tmpdir: str) -> None: def test_arrival_order_with_positional_deletes(tmpdir: str) -> None: - """Test that order=ScanOrder.ARRIVAL correctly applies positional deletes.""" + """Test that order=ArrivalOrder() correctly applies positional deletes.""" # 3 files, 10 rows each; delete rows 0,5 from file 0, row 3 from file 1, nothing from file 2 scan, tasks = _create_scan_and_tasks( tmpdir, @@ -3228,7 +3228,7 @@ def test_arrival_order_with_positional_deletes(tmpdir: str) -> None: delete_rows_per_file=[[0, 5], [3], []], ) - batches = list(scan.to_record_batches(tasks, order=ScanOrder.ARRIVAL)) + batches = list(scan.to_record_batches(tasks, order=ArrivalOrder())) total_rows = sum(len(b) for b in batches) assert total_rows == 27 # 30 - 3 deletes @@ -3241,7 +3241,7 @@ def test_arrival_order_with_positional_deletes(tmpdir: str) -> None: def test_arrival_order_with_positional_deletes_and_limit(tmpdir: str) -> None: - """Test that order=ScanOrder.ARRIVAL with positional deletes respects the row limit.""" + """Test that order=ArrivalOrder() with positional deletes respects the row limit.""" # 3 files, 10 rows each; delete row 0 from each file scan, tasks = _create_scan_and_tasks( tmpdir, @@ -3251,7 +3251,7 @@ def test_arrival_order_with_positional_deletes_and_limit(tmpdir: str) -> None: delete_rows_per_file=[[0], [0], [0]], ) - batches = list(scan.to_record_batches(tasks, order=ScanOrder.ARRIVAL)) + batches = list(scan.to_record_batches(tasks, order=ArrivalOrder())) total_rows = sum(len(b) for b in batches) assert total_rows == 15 @@ -3267,7 +3267,7 @@ def test_task_order_with_positional_deletes(tmpdir: str) -> None: delete_rows_per_file=[[0, 5], [3], []], ) - batches = list(scan.to_record_batches(tasks, order=ScanOrder.TASK)) + batches = list(scan.to_record_batches(tasks, order=TaskOrder())) total_rows = sum(len(b) for b in batches) assert total_rows == 27 # 30 - 3 deletes @@ -3277,7 +3277,7 @@ def test_task_order_with_positional_deletes(tmpdir: str) -> None: def test_concurrent_files_with_positional_deletes(tmpdir: str) -> None: - """Test that order=ScanOrder.ARRIVAL with concurrent_files correctly applies positional deletes.""" + """Test that order=ArrivalOrder() with concurrent_files correctly applies positional deletes.""" # 4 files, 10 rows each; delete different rows per file scan, tasks = _create_scan_and_tasks( tmpdir, @@ -3286,7 +3286,7 @@ def test_concurrent_files_with_positional_deletes(tmpdir: str) -> None: delete_rows_per_file=[[0, 9], [4, 5], [0, 1, 2], []], ) - batches = list(scan.to_record_batches(tasks, order=ScanOrder.ARRIVAL, concurrent_files=2)) + batches = list(scan.to_record_batches(tasks, order=ArrivalOrder(concurrent_streams=2))) total_rows = sum(len(b) for b in batches) assert total_rows == 33 # 40 - 7 deletes @@ -3310,7 +3310,7 @@ def test_concurrent_files_with_positional_deletes_and_limit(tmpdir: str) -> None delete_rows_per_file=[[0], [0], [0], [0]], ) - batches = list(scan.to_record_batches(tasks, order=ScanOrder.ARRIVAL, concurrent_files=2)) + batches = list(scan.to_record_batches(tasks, order=ArrivalOrder(concurrent_streams=2))) total_rows = sum(len(b) for b in batches) assert total_rows == 20 @@ -3321,7 +3321,7 @@ def test_concurrent_files_invalid_value(tmpdir: str) -> None: scan, tasks = _create_scan_and_tasks(tmpdir, num_files=1, rows_per_file=10) with pytest.raises(ValueError, match="concurrent_files must be >= 1"): - list(scan.to_record_batches(tasks, order=ScanOrder.ARRIVAL, concurrent_files=0)) + list(scan.to_record_batches(tasks, order=ArrivalOrder(concurrent_streams=0))) def test_parse_location_defaults() -> None: From e06c01aa05a888b9eb0c33630e8e56b1650c1e5e Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Wed, 18 Feb 2026 12:34:52 -0800 Subject: [PATCH 19/30] test: Refactor benchmark tests for new ScanOrder API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Restructure parameterized benchmark tests to use ScanOrder class instances: - TaskOrder() for default behavior - ArrivalOrder(concurrent_streams=N) for streaming configurations Simplifies test parameters by eliminating separate concurrent_files argument. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- tests/benchmark/test_read_benchmark.py | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/tests/benchmark/test_read_benchmark.py b/tests/benchmark/test_read_benchmark.py index 809c106dd1..272b0a0d9f 100644 --- a/tests/benchmark/test_read_benchmark.py +++ b/tests/benchmark/test_read_benchmark.py @@ -35,7 +35,7 @@ import pytest from pyiceberg.catalog.sql import SqlCatalog -from pyiceberg.table import ScanOrder, Table +from pyiceberg.table import ScanOrder, TaskOrder, ArrivalOrder, Table NUM_FILES = 32 ROWS_PER_FILE = 500_000 @@ -85,26 +85,25 @@ def benchmark_table(tmp_path_factory: pytest.TempPathFactory) -> Table: @pytest.mark.parametrize( - "order,concurrent_files,batch_size", + "order,batch_size", [ - pytest.param(ScanOrder.TASK, 1, None, id="default"), - pytest.param(ScanOrder.ARRIVAL, 1, None, id="arrival-cf1"), - pytest.param(ScanOrder.ARRIVAL, 2, None, id="arrival-cf2"), - pytest.param(ScanOrder.ARRIVAL, 4, None, id="arrival-cf4"), - pytest.param(ScanOrder.ARRIVAL, 8, None, id="arrival-cf8"), - pytest.param(ScanOrder.ARRIVAL, 16, None, id="arrival-cf16"), + pytest.param(TaskOrder(), None, id="default"), + pytest.param(ArrivalOrder(concurrent_streams=1), None, id="arrival-cf1"), + pytest.param(ArrivalOrder(concurrent_streams=2), None, id="arrival-cf2"), + pytest.param(ArrivalOrder(concurrent_streams=4), None, id="arrival-cf4"), + pytest.param(ArrivalOrder(concurrent_streams=8), None, id="arrival-cf8"), + pytest.param(ArrivalOrder(concurrent_streams=16), None, id="arrival-cf16"), ], ) def test_read_throughput( benchmark_table: Table, order: ScanOrder, - concurrent_files: int, batch_size: int | None, ) -> None: """Measure records/sec, time to first record, and peak Arrow memory for a scan configuration.""" effective_batch_size = batch_size or 131_072 # PyArrow default - if order == ScanOrder.ARRIVAL: - config_str = f"order=ARRIVAL, concurrent_files={concurrent_files}, batch_size={effective_batch_size}" + if isinstance(order, ArrivalOrder): + config_str = f"order=ARRIVAL, concurrent_streams={order.concurrent_streams}, batch_size={effective_batch_size}" else: config_str = f"order=TASK (executor.map, all files parallel), batch_size={effective_batch_size}" print("\n--- ArrowScan Read Throughput Benchmark ---") @@ -129,7 +128,6 @@ def test_read_throughput( for batch in benchmark_table.scan().to_arrow_batch_reader( batch_size=batch_size, order=order, - concurrent_files=concurrent_files, ): if first_batch_time is None: first_batch_time = timeit.default_timer() - start From c38bc76246614dc8e3518e26ad357dcd7d19a088 Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Wed, 18 Feb 2026 12:35:01 -0800 Subject: [PATCH 20/30] docs: Update API documentation for ScanOrder refactoring MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace ScanOrder enum examples with new class-based API: - TaskOrder() for default behavior - ArrivalOrder(concurrent_streams=N) for streaming - ArrivalOrder(concurrent_streams=N, max_buffered_batches=M) for memory control Add configuration guidance table and update ordering semantics. Rename concurrent_files → concurrent_streams throughout examples. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- mkdocs/docs/api.md | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/mkdocs/docs/api.md b/mkdocs/docs/api.md index 6c439f5fed..2a7810b906 100644 --- a/mkdocs/docs/api.md +++ b/mkdocs/docs/api.md @@ -362,21 +362,21 @@ for buf in tbl.scan().to_arrow_batch_reader(batch_size=1000): print(f"Buffer contains {len(buf)} rows") ``` -By default, each file's batches are materialized in memory before being yielded (`order=ScanOrder.TASK`). For large files that may exceed available memory, use `order=ScanOrder.ARRIVAL` to yield batches as they are produced without materializing entire files: +By default, each file's batches are materialized in memory before being yielded (`TaskOrder()`). For large files that may exceed available memory, use `ArrivalOrder()` to yield batches as they are produced without materializing entire files: ```python -from pyiceberg.table import ScanOrder +from pyiceberg.table import ArrivalOrder -for buf in tbl.scan().to_arrow_batch_reader(order=ScanOrder.ARRIVAL, batch_size=1000): +for buf in tbl.scan().to_arrow_batch_reader(order=ArrivalOrder(), batch_size=1000): print(f"Buffer contains {len(buf)} rows") ``` -For maximum throughput, use `concurrent_files` to read multiple files in parallel with arrival order. Batches are yielded as they arrive from any file — ordering across files is not guaranteed: +For maximum throughput, use `concurrent_streams` to read multiple files in parallel with arrival order. Batches are yielded as they arrive from any file — ordering across files is not guaranteed: ```python -from pyiceberg.table import ScanOrder +from pyiceberg.table import ArrivalOrder -for buf in tbl.scan().to_arrow_batch_reader(order=ScanOrder.ARRIVAL, concurrent_files=4, batch_size=1000): +for buf in tbl.scan().to_arrow_batch_reader(order=ArrivalOrder(concurrent_streams=4), batch_size=1000): print(f"Buffer contains {len(buf)} rows") ``` @@ -384,8 +384,8 @@ for buf in tbl.scan().to_arrow_batch_reader(order=ScanOrder.ARRIVAL, concurrent_ | Configuration | File ordering | Within-file ordering | |---|---|---| -| `ScanOrder.TASK` (default) | Batches grouped by file, in task submission order | Row order | -| `ScanOrder.ARRIVAL` | Interleaved across files (no grouping guarantee) | Row order within each file | +| `TaskOrder()` (default) | Batches grouped by file, in task submission order | Row order | +| `ArrivalOrder()` | Interleaved across files (no grouping guarantee) | Row order within each file | Within each file, batch ordering always follows row order. The `limit` parameter is enforced correctly regardless of configuration. @@ -394,11 +394,12 @@ Within each file, batch ordering always follows row order. The `limit` parameter | Use case | Recommended config | |---|---| | Small tables, simple queries | Default — no extra args needed | -| Large tables, memory-constrained | `order=ScanOrder.ARRIVAL` — one file at a time, minimal memory | -| Maximum throughput with bounded memory | `order=ScanOrder.ARRIVAL, concurrent_files=N` — tune N to balance throughput vs memory | +| Large tables, memory-constrained | `order=ArrivalOrder()` — one file at a time, minimal memory | +| Maximum throughput with bounded memory | `order=ArrivalOrder(concurrent_streams=N)` — tune N to balance throughput vs memory | +| Fine-grained memory control | `order=ArrivalOrder(concurrent_streams=N, max_buffered_batches=M)` — tune both parameters | | Fine-grained batch control | Add `batch_size=N` to any of the above | -**Note:** `ScanOrder.ARRIVAL` yields batches in arrival order (interleaved across files when `concurrent_files > 1`). For deterministic file ordering, use the default `ScanOrder.TASK` mode. `batch_size` is usually an advanced tuning knob — the PyArrow default of 131,072 rows works well for most workloads. +**Note:** `ArrivalOrder()` yields batches in arrival order (interleaved across files when `concurrent_streams > 1`). For deterministic file ordering, use the default `TaskOrder()` mode. `batch_size` is usually an advanced tuning knob — the PyArrow default of 131,072 rows works well for most workloads. To avoid any type inconsistencies during writing, you can convert the Iceberg table schema to Arrow: From 2d4a67abe4e7e68b1967b5199fd94926be1d5d5a Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Wed, 18 Feb 2026 17:29:49 -0800 Subject: [PATCH 21/30] Fix ScanOrder class and remove unused import MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove ABC inheritance from ScanOrder since no abstract methods are defined - Remove unused enum.Enum import - Fix B008 error by moving TaskOrder() call from function default to inside function - Clean up dataclass formatting 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- pyiceberg/table/__init__.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index 8d179cfcb8..4ea2309f52 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -23,7 +23,6 @@ from abc import ABC, abstractmethod from collections.abc import Callable, Iterable, Iterator from dataclasses import dataclass -from enum import Enum from functools import cached_property from itertools import chain from types import TracebackType @@ -156,9 +155,8 @@ @dataclass -class ScanOrder(ABC): +class ScanOrder: """Base class for scan ordering strategies.""" - pass @dataclass @@ -168,7 +166,6 @@ class TaskOrder(ScanOrder): Batches are returned in task order, with each task fully materialized before proceeding to the next. Allows parallel file reads via executor. """ - pass @dataclass @@ -178,6 +175,7 @@ class ArrivalOrder(ScanOrder): Batches are yielded as they are produced without materializing entire files into memory. Supports concurrent processing of multiple files. """ + concurrent_streams: int = 1 max_buffered_batches: int = 16 @@ -2183,9 +2181,7 @@ def to_arrow(self) -> pa.Table: self.table_metadata, self.io, self.projection(), self.row_filter, self.case_sensitive, self.limit ).to_table(self.plan_files()) - def to_arrow_batch_reader( - self, batch_size: int | None = None, order: ScanOrder = TaskOrder() - ) -> pa.RecordBatchReader: + def to_arrow_batch_reader(self, batch_size: int | None = None, order: ScanOrder | None = None) -> pa.RecordBatchReader: """Return an Arrow RecordBatchReader from this DataScan. For large results, using a RecordBatchReader requires less memory than @@ -2213,6 +2209,9 @@ def to_arrow_batch_reader( from pyiceberg.io.pyarrow import ArrowScan, schema_to_pyarrow + if order is None: + order = TaskOrder() + target_schema = schema_to_pyarrow(self.projection()) batches = ArrowScan( self.table_metadata, self.io, self.projection(), self.row_filter, self.case_sensitive, self.limit From de9f3c2e37261d2a0af26ce8e79a72696fb16bf5 Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Wed, 18 Feb 2026 17:29:55 -0800 Subject: [PATCH 22/30] Fix long line and B008 error in ArrowScan MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Break long line in _iter_batches_arrival call for better readability - Fix B008 error by moving TaskOrder() call from function default to inside function - Sort imports alphabetically 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- pyiceberg/io/pyarrow.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/pyiceberg/io/pyarrow.py b/pyiceberg/io/pyarrow.py index 35c5562560..078a0279bc 100644 --- a/pyiceberg/io/pyarrow.py +++ b/pyiceberg/io/pyarrow.py @@ -144,7 +144,7 @@ visit, visit_with_partner, ) -from pyiceberg.table import DOWNCAST_NS_TIMESTAMP_TO_US_ON_WRITE, ScanOrder, TaskOrder, ArrivalOrder, TableProperties +from pyiceberg.table import DOWNCAST_NS_TIMESTAMP_TO_US_ON_WRITE, ArrivalOrder, ScanOrder, TableProperties, TaskOrder from pyiceberg.table.locations import load_location_provider from pyiceberg.table.metadata import TableMetadata from pyiceberg.table.name_mapping import NameMapping, apply_name_mapping @@ -1838,7 +1838,7 @@ def to_record_batches( self, tasks: Iterable[FileScanTask], batch_size: int | None = None, - order: ScanOrder = TaskOrder(), + order: ScanOrder | None = None, ) -> Iterator[pa.RecordBatch]: """Scan the Iceberg table and return an Iterator[pa.RecordBatch]. @@ -1868,6 +1868,9 @@ def to_record_batches( ValueError: When a field type in the file cannot be projected to the schema type, or when an invalid order value is provided, or when concurrent_streams < 1. """ + if order is None: + order = TaskOrder() + if not isinstance(order, ScanOrder): raise ValueError(f"Invalid order: {order!r}. Must be a ScanOrder instance (TaskOrder() or ArrivalOrder()).") @@ -1876,7 +1879,11 @@ def to_record_batches( if isinstance(order, ArrivalOrder): if order.concurrent_streams < 1: raise ValueError(f"concurrent_streams must be >= 1, got {order.concurrent_streams}") - return self._apply_limit(self._iter_batches_arrival(task_list, deletes_per_file, batch_size, order.concurrent_streams, order.max_buffered_batches)) + return self._apply_limit( + self._iter_batches_arrival( + task_list, deletes_per_file, batch_size, order.concurrent_streams, order.max_buffered_batches + ) + ) return self._apply_limit(self._iter_batches_materialized(task_list, deletes_per_file, batch_size)) From ac8add88967161ea1dc5d502172217c67aabc8ed Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Wed, 18 Feb 2026 17:30:02 -0800 Subject: [PATCH 23/30] Fix mypy errors: change concurrent_files to concurrent_streams MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Update all test function calls to use concurrent_streams parameter - Fix parameter name mismatch with _bounded_concurrent_batches function signature - Update variable names and comments to match new parameter name 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- tests/io/test_bounded_concurrent_batches.py | 26 ++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/tests/io/test_bounded_concurrent_batches.py b/tests/io/test_bounded_concurrent_batches.py index 2fe9526b19..4d6d8506ed 100644 --- a/tests/io/test_bounded_concurrent_batches.py +++ b/tests/io/test_bounded_concurrent_batches.py @@ -25,7 +25,7 @@ import pytest from pyiceberg.io.pyarrow import _bounded_concurrent_batches -from pyiceberg.table import FileScanTask, ScanOrder, TaskOrder, ArrivalOrder +from pyiceberg.table import ArrivalOrder, FileScanTask def _make_task() -> FileScanTask: @@ -50,7 +50,7 @@ def test_correctness_single_file() -> None: def batch_fn(t: FileScanTask) -> Iterator[pa.RecordBatch]: yield from expected_batches - result = list(_bounded_concurrent_batches([task], batch_fn, concurrent_files=1, max_buffered_batches=16)) + result = list(_bounded_concurrent_batches([task], batch_fn, concurrent_streams=1, max_buffered_batches=16)) assert len(result) == 3 total_rows = sum(len(b) for b in result) @@ -66,7 +66,7 @@ def batch_fn(t: FileScanTask) -> Iterator[pa.RecordBatch]: idx = tasks.index(t) yield from _make_batches(batches_per_file, start=idx * 100) - result = list(_bounded_concurrent_batches(tasks, batch_fn, concurrent_files=2, max_buffered_batches=16)) + result = list(_bounded_concurrent_batches(tasks, batch_fn, concurrent_streams=2, max_buffered_batches=16)) total_rows = sum(len(b) for b in result) assert total_rows == batches_per_file * len(tasks) * 10 # 3 batches * 4 files * 10 rows @@ -82,7 +82,7 @@ def batch_fn(t: FileScanTask) -> Iterator[pa.RecordBatch]: barrier.wait(timeout=5.0) yield pa.record_batch({"col": [4, 5, 6]}) - gen = _bounded_concurrent_batches(tasks, batch_fn, concurrent_files=2, max_buffered_batches=16) + gen = _bounded_concurrent_batches(tasks, batch_fn, concurrent_streams=2, max_buffered_batches=16) # Should get at least one batch before all are done first = next(gen) @@ -110,7 +110,7 @@ def batch_fn(t: FileScanTask) -> Iterator[pa.RecordBatch]: produced_count += 1 yield pa.record_batch({"col": [i]}) - gen = _bounded_concurrent_batches(tasks, batch_fn, concurrent_files=1, max_buffered_batches=max_buffered) + gen = _bounded_concurrent_batches(tasks, batch_fn, concurrent_streams=1, max_buffered_batches=max_buffered) # Consume slowly and check that not all batches are produced immediately first = next(gen) @@ -131,7 +131,7 @@ def batch_fn(t: FileScanTask) -> Iterator[pa.RecordBatch]: yield pa.record_batch({"col": [1]}) raise ValueError("test error") - gen = _bounded_concurrent_batches(tasks, batch_fn, concurrent_files=1, max_buffered_batches=16) + gen = _bounded_concurrent_batches(tasks, batch_fn, concurrent_streams=1, max_buffered_batches=16) # Should get the first batch first = next(gen) @@ -153,7 +153,7 @@ def batch_fn(t: FileScanTask) -> Iterator[pa.RecordBatch]: yield pa.record_batch({"col": [i]}) time.sleep(0.01) - gen = _bounded_concurrent_batches(tasks, batch_fn, concurrent_files=3, max_buffered_batches=4) + gen = _bounded_concurrent_batches(tasks, batch_fn, concurrent_streams=3, max_buffered_batches=4) # Consume a few batches then stop worker_started.wait(timeout=5.0) @@ -168,8 +168,8 @@ def batch_fn(t: FileScanTask) -> Iterator[pa.RecordBatch]: def test_concurrency_limit() -> None: - """Test that at most concurrent_files files are read concurrently.""" - concurrent_files = 2 + """Test that at most concurrent_streams files are read concurrently.""" + concurrent_streams = 2 tasks = [_make_task() for _ in range(6)] active_count = 0 max_active = 0 @@ -187,10 +187,10 @@ def batch_fn(t: FileScanTask) -> Iterator[pa.RecordBatch]: with active_lock: active_count -= 1 - result = list(_bounded_concurrent_batches(tasks, batch_fn, concurrent_files=concurrent_files, max_buffered_batches=16)) + result = list(_bounded_concurrent_batches(tasks, batch_fn, concurrent_streams=concurrent_streams, max_buffered_batches=16)) assert len(result) == 6 - assert max_active <= concurrent_files + assert max_active <= concurrent_streams def test_empty_tasks() -> None: @@ -199,12 +199,12 @@ def test_empty_tasks() -> None: def batch_fn(t: FileScanTask) -> Iterator[pa.RecordBatch]: yield from [] - result = list(_bounded_concurrent_batches([], batch_fn, concurrent_files=2, max_buffered_batches=16)) + result = list(_bounded_concurrent_batches([], batch_fn, concurrent_streams=2, max_buffered_batches=16)) assert result == [] def test_concurrent_with_limit_via_arrowscan(tmpdir: str) -> None: - """Test concurrent_files with limit through ArrowScan integration.""" + """Test concurrent_streams with limit through ArrowScan integration.""" from pyiceberg.expressions import AlwaysTrue from pyiceberg.io.pyarrow import ArrowScan, PyArrowFileIO from pyiceberg.manifest import DataFileContent, FileFormat From b5cfb78aae05c2a99f2b626acc14335789dc7570 Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Wed, 18 Feb 2026 17:30:08 -0800 Subject: [PATCH 24/30] Fix import ordering in test files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Sort imports alphabetically as required by ruff formatting - No functional changes 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- tests/benchmark/test_read_benchmark.py | 2 +- tests/io/test_pyarrow.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/benchmark/test_read_benchmark.py b/tests/benchmark/test_read_benchmark.py index 272b0a0d9f..1c30b66e40 100644 --- a/tests/benchmark/test_read_benchmark.py +++ b/tests/benchmark/test_read_benchmark.py @@ -35,7 +35,7 @@ import pytest from pyiceberg.catalog.sql import SqlCatalog -from pyiceberg.table import ScanOrder, TaskOrder, ArrivalOrder, Table +from pyiceberg.table import ArrivalOrder, ScanOrder, Table, TaskOrder NUM_FILES = 32 ROWS_PER_FILE = 500_000 diff --git a/tests/io/test_pyarrow.py b/tests/io/test_pyarrow.py index 22274d667e..aa4d9de159 100644 --- a/tests/io/test_pyarrow.py +++ b/tests/io/test_pyarrow.py @@ -86,7 +86,7 @@ from pyiceberg.manifest import DataFile, DataFileContent, FileFormat from pyiceberg.partitioning import PartitionField, PartitionSpec from pyiceberg.schema import Schema, make_compatible_name, visit -from pyiceberg.table import FileScanTask, ScanOrder, TaskOrder, ArrivalOrder, TableProperties +from pyiceberg.table import ArrivalOrder, FileScanTask, TableProperties, TaskOrder from pyiceberg.table.metadata import TableMetadataV2 from pyiceberg.table.name_mapping import create_mapping_from_schema from pyiceberg.transforms import HourTransform, IdentityTransform From d93526e4f059e3e418d150c9be158f1ccdea87de Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Wed, 18 Feb 2026 19:01:34 -0800 Subject: [PATCH 25/30] Move batch_size parameter to ArrivalOrder for better semantic design MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add batch_size parameter to ArrivalOrder class with comprehensive documentation - Include memory formula: Peak memory ≈ concurrent_streams × batch_size × max_buffered_batches × (average row size) - Update default concurrent_streams from 1 to 8 for better performance out-of-the-box - Remove batch_size parameter from to_arrow_batch_reader() and to_record_batches() methods - Simplify API by putting batch_size where it has direct memory impact (streaming orders) - TaskOrder uses PyArrow defaults, ArrivalOrder provides full memory control 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- pyiceberg/io/pyarrow.py | 23 +++++++++++------------ pyiceberg/table/__init__.py | 30 ++++++++++++++++++++++-------- 2 files changed, 33 insertions(+), 20 deletions(-) diff --git a/pyiceberg/io/pyarrow.py b/pyiceberg/io/pyarrow.py index 078a0279bc..e0218d8971 100644 --- a/pyiceberg/io/pyarrow.py +++ b/pyiceberg/io/pyarrow.py @@ -144,7 +144,7 @@ visit, visit_with_partner, ) -from pyiceberg.table import DOWNCAST_NS_TIMESTAMP_TO_US_ON_WRITE, ArrivalOrder, ScanOrder, TableProperties, TaskOrder +from pyiceberg.table import DOWNCAST_NS_TIMESTAMP_TO_US_ON_WRITE, ArrivalOrder, ScanOrder, TableProperties from pyiceberg.table.locations import load_location_provider from pyiceberg.table.metadata import TableMetadata from pyiceberg.table.name_mapping import NameMapping, apply_name_mapping @@ -1837,7 +1837,6 @@ def to_table(self, tasks: Iterable[FileScanTask]) -> pa.Table: def to_record_batches( self, tasks: Iterable[FileScanTask], - batch_size: int | None = None, order: ScanOrder | None = None, ) -> Iterator[pa.RecordBatch]: """Scan the Iceberg table and return an Iterator[pa.RecordBatch]. @@ -1853,11 +1852,15 @@ def to_record_batches( Args: tasks: FileScanTasks representing the data files and delete files to read from. - batch_size: The number of rows per batch. If None, PyArrow's default is used. order: Controls the order in which record batches are returned. TaskOrder() (default) yields batches one file at a time in task order. - ArrivalOrder(concurrent_streams=N, max_buffered_batches=M) yields batches - as they are produced without materializing entire files into memory. + ArrivalOrder(concurrent_streams=N, batch_size=B, max_buffered_batches=M) + yields batches as they are produced without materializing entire files + into memory. Peak memory ≈ concurrent_streams × batch_size × max_buffered_batches + × (average row size in bytes). batch_size is the number of rows per batch. + For example (if average row size ≈ 32 bytes): + - ArrivalOrder(concurrent_streams=4, batch_size=32768, max_buffered_batches=8) + - Peak memory ≈ 4 × 32768 rows × 8 × 32 bytes ≈ ~32 MB (plus Arrow overhead) Returns: An Iterator of PyArrow RecordBatches. @@ -1868,9 +1871,6 @@ def to_record_batches( ValueError: When a field type in the file cannot be projected to the schema type, or when an invalid order value is provided, or when concurrent_streams < 1. """ - if order is None: - order = TaskOrder() - if not isinstance(order, ScanOrder): raise ValueError(f"Invalid order: {order!r}. Must be a ScanOrder instance (TaskOrder() or ArrivalOrder()).") @@ -1881,11 +1881,11 @@ def to_record_batches( raise ValueError(f"concurrent_streams must be >= 1, got {order.concurrent_streams}") return self._apply_limit( self._iter_batches_arrival( - task_list, deletes_per_file, batch_size, order.concurrent_streams, order.max_buffered_batches + task_list, deletes_per_file, order.batch_size, order.concurrent_streams, order.max_buffered_batches ) ) - return self._apply_limit(self._iter_batches_materialized(task_list, deletes_per_file, batch_size)) + return self._apply_limit(self._iter_batches_materialized(task_list, deletes_per_file)) def _prepare_tasks_and_deletes( self, tasks: Iterable[FileScanTask] @@ -1914,13 +1914,12 @@ def _iter_batches_materialized( self, task_list: list[FileScanTask], deletes_per_file: dict[str, list[ChunkedArray]], - batch_size: int | None, ) -> Iterator[pa.RecordBatch]: """Yield batches using executor.map with full file materialization.""" executor = ExecutorFactory.get_or_create() def batches_for_task(task: FileScanTask) -> list[pa.RecordBatch]: - return list(self._record_batches_from_scan_tasks_and_deletes([task], deletes_per_file, batch_size)) + return list(self._record_batches_from_scan_tasks_and_deletes([task], deletes_per_file)) for batches in executor.map(batches_for_task, task_list): yield from batches diff --git a/pyiceberg/table/__init__.py b/pyiceberg/table/__init__.py index 4ea2309f52..4df988fff5 100644 --- a/pyiceberg/table/__init__.py +++ b/pyiceberg/table/__init__.py @@ -174,9 +174,23 @@ class ArrivalOrder(ScanOrder): Batches are yielded as they are produced without materializing entire files into memory. Supports concurrent processing of multiple files. + + Memory Usage: + Peak memory ≈ concurrent_streams × batch_size × max_buffered_batches + × (average row size in bytes). batch_size is the number of rows per batch. + + For example (if average row size ≈ 32 bytes): + - ArrivalOrder(concurrent_streams=4, batch_size=32768, max_buffered_batches=8) + - Peak memory ≈ 4 × 32768 rows × 8 × 32 bytes ≈ ~32 MB (plus Arrow overhead) + + Args: + concurrent_streams: Number of files to read concurrently (default: 8) + batch_size: Number of rows per batch, controls memory per stream (default: None, uses PyArrow default ~131K) + max_buffered_batches: Maximum batches buffered per stream (default: 16) """ - concurrent_streams: int = 1 + concurrent_streams: int = 8 + batch_size: int | None = None max_buffered_batches: int = 16 @@ -2181,7 +2195,7 @@ def to_arrow(self) -> pa.Table: self.table_metadata, self.io, self.projection(), self.row_filter, self.case_sensitive, self.limit ).to_table(self.plan_files()) - def to_arrow_batch_reader(self, batch_size: int | None = None, order: ScanOrder | None = None) -> pa.RecordBatchReader: + def to_arrow_batch_reader(self, order: ScanOrder | None = None) -> pa.RecordBatchReader: """Return an Arrow RecordBatchReader from this DataScan. For large results, using a RecordBatchReader requires less memory than @@ -2194,12 +2208,12 @@ def to_arrow_batch_reader(self, batch_size: int | None = None, order: ScanOrder Within each file, batch ordering follows row order. Args: - batch_size: The number of rows per batch. If None, PyArrow's default is used. order: Controls the order in which record batches are returned. - TaskOrder() (default) yields batches one file at a time in task order. - ArrivalOrder(concurrent_streams=N, max_buffered_batches=M) yields batches - as they are produced without materializing entire files into memory. - concurrent_streams controls parallelism, max_buffered_batches controls memory. + TaskOrder() (default) yields batches one file at a time in task order using + PyArrow's default batch size. + ArrivalOrder(concurrent_streams=N, batch_size=B, max_buffered_batches=M) + yields batches as they are produced without materializing entire files + into memory. Memory usage ≈ concurrent_streams × batch_size × max_buffered_batches × (average row size in bytes). Returns: pa.RecordBatchReader: Arrow RecordBatchReader from the Iceberg table's DataScan @@ -2215,7 +2229,7 @@ def to_arrow_batch_reader(self, batch_size: int | None = None, order: ScanOrder target_schema = schema_to_pyarrow(self.projection()) batches = ArrowScan( self.table_metadata, self.io, self.projection(), self.row_filter, self.case_sensitive, self.limit - ).to_record_batches(self.plan_files(), batch_size=batch_size, order=order) + ).to_record_batches(self.plan_files(), order=order) return pa.RecordBatchReader.from_batches( target_schema, From 432cd8186d8a7883fd4a07cf37acefc912d806a3 Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Wed, 18 Feb 2026 19:01:43 -0800 Subject: [PATCH 26/30] Update tests for new ArrivalOrder batch_size API MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Update benchmark tests to use simplified parameter structure - Remove separate batch_size parameter from test calls - Fix concurrent_streams validation error message in unit tests - Maintain all existing test coverage and functionality 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- tests/benchmark/test_read_benchmark.py | 20 ++++++++++---------- tests/io/test_pyarrow.py | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/tests/benchmark/test_read_benchmark.py b/tests/benchmark/test_read_benchmark.py index 1c30b66e40..0dcd30771f 100644 --- a/tests/benchmark/test_read_benchmark.py +++ b/tests/benchmark/test_read_benchmark.py @@ -85,26 +85,27 @@ def benchmark_table(tmp_path_factory: pytest.TempPathFactory) -> Table: @pytest.mark.parametrize( - "order,batch_size", + "order", [ - pytest.param(TaskOrder(), None, id="default"), - pytest.param(ArrivalOrder(concurrent_streams=1), None, id="arrival-cf1"), - pytest.param(ArrivalOrder(concurrent_streams=2), None, id="arrival-cf2"), - pytest.param(ArrivalOrder(concurrent_streams=4), None, id="arrival-cf4"), - pytest.param(ArrivalOrder(concurrent_streams=8), None, id="arrival-cf8"), - pytest.param(ArrivalOrder(concurrent_streams=16), None, id="arrival-cf16"), + pytest.param(TaskOrder(), id="default"), + pytest.param(ArrivalOrder(concurrent_streams=1), id="arrival-cf1"), + pytest.param(ArrivalOrder(concurrent_streams=2), id="arrival-cf2"), + pytest.param(ArrivalOrder(concurrent_streams=4), id="arrival-cf4"), + pytest.param(ArrivalOrder(concurrent_streams=8), id="arrival-cf8"), + pytest.param(ArrivalOrder(concurrent_streams=16), id="arrival-cf16"), ], ) def test_read_throughput( benchmark_table: Table, order: ScanOrder, - batch_size: int | None, ) -> None: """Measure records/sec, time to first record, and peak Arrow memory for a scan configuration.""" - effective_batch_size = batch_size or 131_072 # PyArrow default + # Determine effective batch_size for display and memory calculation if isinstance(order, ArrivalOrder): + effective_batch_size = order.batch_size or 131_072 # PyArrow default config_str = f"order=ARRIVAL, concurrent_streams={order.concurrent_streams}, batch_size={effective_batch_size}" else: + effective_batch_size = 131_072 # PyArrow default (TaskOrder doesn't control batch_size directly) config_str = f"order=TASK (executor.map, all files parallel), batch_size={effective_batch_size}" print("\n--- ArrowScan Read Throughput Benchmark ---") print(f"Config: {config_str}") @@ -126,7 +127,6 @@ def test_read_throughput( total_rows = 0 first_batch_time = None for batch in benchmark_table.scan().to_arrow_batch_reader( - batch_size=batch_size, order=order, ): if first_batch_time is None: diff --git a/tests/io/test_pyarrow.py b/tests/io/test_pyarrow.py index aa4d9de159..a8f7246819 100644 --- a/tests/io/test_pyarrow.py +++ b/tests/io/test_pyarrow.py @@ -3320,7 +3320,7 @@ def test_concurrent_files_invalid_value(tmpdir: str) -> None: """Test that concurrent_files < 1 raises ValueError.""" scan, tasks = _create_scan_and_tasks(tmpdir, num_files=1, rows_per_file=10) - with pytest.raises(ValueError, match="concurrent_files must be >= 1"): + with pytest.raises(ValueError, match="concurrent_streams must be >= 1"): list(scan.to_record_batches(tasks, order=ArrivalOrder(concurrent_streams=0))) From 84adcfac75d69ac17e50292aa3c26e47bdfa05d1 Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Wed, 18 Feb 2026 19:01:53 -0800 Subject: [PATCH 27/30] Update API documentation for new ArrivalOrder batch_size parameter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Update all examples to use new ArrivalOrder(batch_size=X) syntax - Add comprehensive memory formula with row size calculation - Remove backward compatibility references (batch_size is new in this PR) - Include performance characteristics and use case recommendations - Provide clear guidance on TaskOrder vs ArrivalOrder memory behavior 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- mkdocs/docs/api.md | 64 +++++++++++++++++++++++----------------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/mkdocs/docs/api.md b/mkdocs/docs/api.md index 2a7810b906..e79b7a237d 100644 --- a/mkdocs/docs/api.md +++ b/mkdocs/docs/api.md @@ -355,28 +355,21 @@ for buf in tbl.scan().to_arrow_batch_reader(): print(f"Buffer contains {len(buf)} rows") ``` -You can control the number of rows per batch using the `batch_size` parameter: - -```python -for buf in tbl.scan().to_arrow_batch_reader(batch_size=1000): - print(f"Buffer contains {len(buf)} rows") -``` - By default, each file's batches are materialized in memory before being yielded (`TaskOrder()`). For large files that may exceed available memory, use `ArrivalOrder()` to yield batches as they are produced without materializing entire files: ```python from pyiceberg.table import ArrivalOrder -for buf in tbl.scan().to_arrow_batch_reader(order=ArrivalOrder(), batch_size=1000): +for buf in tbl.scan().to_arrow_batch_reader(order=ArrivalOrder()): print(f"Buffer contains {len(buf)} rows") ``` -For maximum throughput, use `concurrent_streams` to read multiple files in parallel with arrival order. Batches are yielded as they arrive from any file — ordering across files is not guaranteed: +For maximum throughput, tune `concurrent_streams` to read multiple files in parallel with arrival order. Batches are yielded as they arrive from any file — ordering across files is not guaranteed: ```python from pyiceberg.table import ArrivalOrder -for buf in tbl.scan().to_arrow_batch_reader(order=ArrivalOrder(concurrent_streams=4), batch_size=1000): +for buf in tbl.scan().to_arrow_batch_reader(order=ArrivalOrder(concurrent_streams=4)): print(f"Buffer contains {len(buf)} rows") ``` @@ -387,19 +380,35 @@ for buf in tbl.scan().to_arrow_batch_reader(order=ArrivalOrder(concurrent_stream | `TaskOrder()` (default) | Batches grouped by file, in task submission order | Row order | | `ArrivalOrder()` | Interleaved across files (no grouping guarantee) | Row order within each file | -Within each file, batch ordering always follows row order. The `limit` parameter is enforced correctly regardless of configuration. +The `limit` parameter is enforced correctly regardless of configuration. **Which configuration should I use?** | Use case | Recommended config | |---|---| | Small tables, simple queries | Default — no extra args needed | -| Large tables, memory-constrained | `order=ArrivalOrder()` — one file at a time, minimal memory | -| Maximum throughput with bounded memory | `order=ArrivalOrder(concurrent_streams=N)` — tune N to balance throughput vs memory | -| Fine-grained memory control | `order=ArrivalOrder(concurrent_streams=N, max_buffered_batches=M)` — tune both parameters | -| Fine-grained batch control | Add `batch_size=N` to any of the above | +| Large tables, maximum throughput with bounded memory | `order=ArrivalOrder(concurrent_streams=N)` — tune N to balance throughput vs memory | +| Fine-grained memory control | `order=ArrivalOrder(concurrent_streams=N, batch_size=M, max_buffered_batches=K)` — tune all parameters | + +**Memory usage and performance characteristics:** + +- **TaskOrder (default)**: Uses full file materialization. Each file is loaded entirely into memory before yielding batches. Memory usage depends on file sizes. +- **ArrivalOrder**: Uses streaming with controlled memory usage. Memory is bounded by the batch buffering mechanism. + +**Memory formula for ArrivalOrder:** + +```text +Peak memory ≈ concurrent_streams × batch_size × max_buffered_batches × (average row size in bytes) +``` + +Where: -**Note:** `ArrivalOrder()` yields batches in arrival order (interleaved across files when `concurrent_streams > 1`). For deterministic file ordering, use the default `TaskOrder()` mode. `batch_size` is usually an advanced tuning knob — the PyArrow default of 131,072 rows works well for most workloads. +- `concurrent_streams`: Number of files read in parallel (default: 8) +- `batch_size`: Number of rows per batch (default: 131,072, can be set via ArrivalOrder constructor) +- `max_buffered_batches`: Internal buffering parameter (default: 16, can be tuned for advanced use cases) +- Average row size depends on your schema and data; multiply the above by it to estimate bytes. + +**Note:** `ArrivalOrder()` yields batches in arrival order (interleaved across files when `concurrent_streams > 1`). For deterministic file ordering, use the default `TaskOrder()` mode. The `batch_size` parameter in `ArrivalOrder` controls streaming memory usage, while `TaskOrder` uses full file materialization regardless of batch size. To avoid any type inconsistencies during writing, you can convert the Iceberg table schema to Arrow: @@ -1665,38 +1674,29 @@ table.scan( ).to_arrow_batch_reader() ``` -The `batch_size` parameter controls the maximum number of rows per RecordBatch (default is PyArrow's 131,072 rows): - -```python -table.scan( - row_filter=GreaterThanOrEqual("trip_distance", 10.0), - selected_fields=("VendorID", "tpep_pickup_datetime", "tpep_dropoff_datetime"), -).to_arrow_batch_reader(batch_size=1000) -``` - -Use `order=ScanOrder.ARRIVAL` to avoid materializing entire files in memory. This yields batches as they are produced by PyArrow, one file at a time: +To avoid materializing entire files in memory, use `ArrivalOrder` which yields batches as they are produced by PyArrow: ```python -from pyiceberg.table import ScanOrder +from pyiceberg.table import ArrivalOrder table.scan( row_filter=GreaterThanOrEqual("trip_distance", 10.0), selected_fields=("VendorID", "tpep_pickup_datetime", "tpep_dropoff_datetime"), -).to_arrow_batch_reader(order=ScanOrder.ARRIVAL) +).to_arrow_batch_reader(order=ArrivalOrder()) ``` -For concurrent file reads with arrival order, use `concurrent_files`. Note that batch ordering across files is not guaranteed: +For concurrent file reads with arrival order, use `concurrent_streams`. Note that batch ordering across files is not guaranteed: ```python -from pyiceberg.table import ScanOrder +from pyiceberg.table import ArrivalOrder table.scan( row_filter=GreaterThanOrEqual("trip_distance", 10.0), selected_fields=("VendorID", "tpep_pickup_datetime", "tpep_dropoff_datetime"), -).to_arrow_batch_reader(order=ScanOrder.ARRIVAL, concurrent_files=4) +).to_arrow_batch_reader(order=ArrivalOrder(concurrent_streams=16)) ``` -When using `concurrent_files > 1`, batches from different files may be interleaved. Within each file, batches are always in row order. See the ordering semantics table in the [Apache Arrow section](#apache-arrow) above for details. +When using `concurrent_streams > 1`, batches from different files may be interleaved. Within each file, batches are always in row order. See the ordering semantics table in the [Apache Arrow section](#apache-arrow) above for details. ### Pandas From 1c73ea4f5e1314ce81db57e982b7491d6b41d52f Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Wed, 18 Feb 2026 19:25:59 -0800 Subject: [PATCH 28/30] Fix to_record_batches default order and add TaskOrder import - Import TaskOrder from pyiceberg.table in pyarrow.py - Change to_record_batches signature to use TaskOrder() as default instead of None, ensuring consistent default scan ordering behavior Co-Authored-By: Claude Sonnet 4.6 --- pyiceberg/io/pyarrow.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyiceberg/io/pyarrow.py b/pyiceberg/io/pyarrow.py index e0218d8971..0a5ef75d5d 100644 --- a/pyiceberg/io/pyarrow.py +++ b/pyiceberg/io/pyarrow.py @@ -144,7 +144,7 @@ visit, visit_with_partner, ) -from pyiceberg.table import DOWNCAST_NS_TIMESTAMP_TO_US_ON_WRITE, ArrivalOrder, ScanOrder, TableProperties +from pyiceberg.table import DOWNCAST_NS_TIMESTAMP_TO_US_ON_WRITE, ArrivalOrder, ScanOrder, TableProperties, TaskOrder from pyiceberg.table.locations import load_location_provider from pyiceberg.table.metadata import TableMetadata from pyiceberg.table.name_mapping import NameMapping, apply_name_mapping @@ -1837,7 +1837,7 @@ def to_table(self, tasks: Iterable[FileScanTask]) -> pa.Table: def to_record_batches( self, tasks: Iterable[FileScanTask], - order: ScanOrder | None = None, + order: ScanOrder = TaskOrder(), ) -> Iterator[pa.RecordBatch]: """Scan the Iceberg table and return an Iterator[pa.RecordBatch]. From caa079e45acb1fbbca144df4a5e11545e384c4c5 Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Wed, 18 Feb 2026 19:34:46 -0800 Subject: [PATCH 29/30] Fix ruff B008: use module-level singleton for default ScanOrder Replace TaskOrder() function call in argument default with a module-level singleton _DEFAULT_SCAN_ORDER to satisfy ruff B008 (no function calls in argument defaults). Co-Authored-By: Claude Sonnet 4.6 --- pyiceberg/io/pyarrow.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pyiceberg/io/pyarrow.py b/pyiceberg/io/pyarrow.py index 0a5ef75d5d..222a5f187e 100644 --- a/pyiceberg/io/pyarrow.py +++ b/pyiceberg/io/pyarrow.py @@ -1755,6 +1755,9 @@ def worker(task: FileScanTask) -> None: break +_DEFAULT_SCAN_ORDER: ScanOrder = TaskOrder() + + class ArrowScan: _table_metadata: TableMetadata _io: FileIO @@ -1837,7 +1840,7 @@ def to_table(self, tasks: Iterable[FileScanTask]) -> pa.Table: def to_record_batches( self, tasks: Iterable[FileScanTask], - order: ScanOrder = TaskOrder(), + order: ScanOrder = _DEFAULT_SCAN_ORDER, ) -> Iterator[pa.RecordBatch]: """Scan the Iceberg table and return an Iterator[pa.RecordBatch]. From a882dd25133d2cbd6a028123b443c41d0c907cc4 Mon Sep 17 00:00:00 2001 From: Sumedh Sakdeo Date: Thu, 19 Feb 2026 19:33:34 -0800 Subject: [PATCH 30/30] fix: drain until sentinel to prevent deadlock on early generator close When concurrent_files > 1 and max_buffered_batches is small, multiple workers can be blocked on batch_queue.put() at the moment the consumer closes early (e.g. due to a limit). The previous drain loop used get_nowait() + empty() which had a race: empty() could return True before a just-notified worker had a chance to put, leaving remaining workers stuck on put() forever while executor.shutdown(wait=True) hung. Fix: replace the racy drain loop with a blocking drain-until-sentinel loop. Each get() naturally wakes one blocked worker via not_full.notify(); that worker checks cancel and returns, eventually allowing the last worker to put the sentinel. Stopping only on the sentinel guarantees all workers have finished before we exit. Also move batch_queue.put(_QUEUE_SENTINEL) outside remaining_lock to avoid holding a lock during a potentially blocking call. Co-Authored-By: Claude Sonnet 4.6 --- pyiceberg/io/pyarrow.py | 23 ++++++---- tests/io/test_bounded_concurrent_batches.py | 47 +++++++++++++++++++++ 2 files changed, 62 insertions(+), 8 deletions(-) diff --git a/pyiceberg/io/pyarrow.py b/pyiceberg/io/pyarrow.py index 222a5f187e..00c4d98f37 100644 --- a/pyiceberg/io/pyarrow.py +++ b/pyiceberg/io/pyarrow.py @@ -1727,18 +1727,21 @@ def worker(task: FileScanTask) -> None: finally: with remaining_lock: remaining -= 1 - if remaining == 0: - batch_queue.put(_QUEUE_SENTINEL) + is_last = remaining == 0 + if is_last: + batch_queue.put(_QUEUE_SENTINEL) with ThreadPoolExecutor(max_workers=concurrent_streams) as executor: for task in tasks: executor.submit(worker, task) + saw_sentinel = False try: while True: item = batch_queue.get() if item is _QUEUE_SENTINEL: + saw_sentinel = True break if isinstance(item, BaseException): @@ -1747,12 +1750,16 @@ def worker(task: FileScanTask) -> None: yield item finally: cancel.set() - # Drain the queue to unblock any workers stuck on put() - while not batch_queue.empty(): - try: - batch_queue.get_nowait() - except queue.Empty: - break + if not saw_sentinel: + # Drain the queue to unblock workers stuck on put(). + # Each get() wakes one waiting producer; that producer checks + # cancel and returns, eventually allowing the last worker to + # put the sentinel. We stop only when we see the sentinel, + # which guarantees all workers have finished. + while True: + item = batch_queue.get() + if item is _QUEUE_SENTINEL: + break _DEFAULT_SCAN_ORDER: ScanOrder = TaskOrder() diff --git a/tests/io/test_bounded_concurrent_batches.py b/tests/io/test_bounded_concurrent_batches.py index 4d6d8506ed..2c06c223d3 100644 --- a/tests/io/test_bounded_concurrent_batches.py +++ b/tests/io/test_bounded_concurrent_batches.py @@ -142,6 +142,53 @@ def batch_fn(t: FileScanTask) -> Iterator[pa.RecordBatch]: list(gen) +def test_no_deadlock_on_early_termination_with_full_queue() -> None: + """Regression test for deadlock when concurrent_files > 1 and max_buffered_batches=1. + + Scenario: + - max_buffered_batches=1, concurrent_files=3 + - Queue is full (1 item), Workers A/B/C all blocked on put() + - Consumer closes the generator (GeneratorExit → finally → cancel.set()) + - Buggy drain loop: get_nowait() removes the 1 item, empty() → True, + exits before A/B/C have a chance to put. Workers remain stuck on put() + and executor.shutdown(wait=True) hangs forever. + """ + tasks = [_make_task() for _ in range(3)] + + blocked_on_put = 0 + blocked_lock = threading.Lock() + at_least_two_blocked = threading.Event() + + def batch_fn(t: FileScanTask) -> Iterator[pa.RecordBatch]: + nonlocal blocked_on_put + for i in range(100): + with blocked_lock: + blocked_on_put += 1 + if blocked_on_put >= 2: + at_least_two_blocked.set() + yield pa.record_batch({"col": [i]}) + with blocked_lock: + blocked_on_put -= 1 + + gen = _bounded_concurrent_batches(tasks, batch_fn, concurrent_streams=3, max_buffered_batches=1) + next(gen) # consume 1 batch, workers immediately try to put the next + + # Wait until at least 2 workers are inside batch_fn trying to put — confirming + # they will block on put() since the queue is full (maxsize=1) + assert at_least_two_blocked.wait(timeout=5.0), "Workers did not reach put() in time" + + closed = threading.Event() + + def close_gen() -> None: + gen.close() + closed.set() + + t = threading.Thread(target=close_gen, daemon=True) + t.start() + assert closed.wait(timeout=10.0), "Deadlock: gen.close() did not complete — workers stuck on put()" + t.join(timeout=1.0) + + def test_early_termination() -> None: """Test that stopping consumption cancels workers.""" tasks = [_make_task() for _ in range(5)]