Sample

pyint-2fe0ff6cce61-I06

Invert eligible conditions and exchange their branches

Matched original source

Lines272

Scores

MethodScoreScale
Posnett00–1; higher is more readable
Dorn0.1020–1; higher is more readable
Mi0.5830–1; higher is more readable
LLOC74Logical lines; fewer is more readable
DeepSeek V4 Pro140–20; mean of three runs
GPT-6.1 Sol150–20; mean of three runs
BTTF0.4410–1; higher is more readable

Views

Source code

from __future__ import annotations import abc import contextlib import enum import itertools import linecache import sys import types import unicodedata import weakref from collections.abc import Callable, Mapping from functools import cached_property from typing import Any, NamedTuple, TypeVar from . import _compat, _config, setters from ._compat import ( PY_3_11_PLUS, PY_3_13_PLUS, _AnnotationExtractor, _get_annotations, _lazy_is_generator, get_generic_base, ) from .exceptions import ( DefaultAlreadySetError, FrozenInstanceError, NotAnAttrsClassError, UnannotatedAttributeError, ) class Attribute: """ *Read-only* representation of an attribute. .. warning:: You should never instantiate this class yourself. The class has *all* arguments of `attr.ib` (except for ``factory`` which is only syntactic sugar for ``default=Factory(...)`` plus the following: - ``name`` (`str`): The name of the attribute. - ``alias`` (`str`): The __init__ parameter name of the attribute, after any explicit overrides and default private-attribute-name handling. - ``alias_is_default`` (`bool`): Whether the ``alias`` was automatically generated (``True``) or explicitly provided by the user (``False``). - ``inherited`` (`bool`): Whether or not that attribute has been inherited from a base class. - ``eq_key`` and ``order_key`` (`typing.Callable` or `None`): The callables that are used for comparing and ordering objects by this attribute, respectively. These are set by passing a callable to `attr.ib`'s ``eq``, ``order``, or ``cmp`` arguments. See also :ref:`comparison customization <custom-comparison>`. Instances of this class are frequently used for introspection purposes like: - `fields` returns a tuple of them. - Validators get them passed as the first argument. - The :ref:`field transformer <transform-fields>` hook receives a list of them. - The ``alias`` property exposes the __init__ parameter name of the field, with any overrides and default private-attribute handling applied. .. versionadded:: 20.1.0 *inherited* .. versionadded:: 20.1.0 *on_setattr* .. versionchanged:: 20.2.0 *inherited* is not taken into account for equality checks and hashing anymore. .. versionadded:: 21.1.0 *eq_key* and *order_key* .. versionadded:: 22.2.0 *alias* .. versionadded:: 26.1.0 *alias_is_default* For the full version history of the fields, see `attr.ib`. """ # These slots must NOT be reordered because we use them later for # instantiation. __slots__ = ( # noqa: RUF023 "name", "default", "validator", "repr", "eq", "eq_key", "order", "order_key", "hash", "init", "metadata", "type", "converter", "kw_only", "inherited", "on_setattr", "alias", "alias_is_default", ) def __init__( self, name, default, validator, repr, cmp, # XXX: unused, remove along with other cmp code. hash, init, inherited, metadata=None, type=None, converter=None, kw_only=False, eq=None, eq_key=None, order=None, order_key=None, on_setattr=None, alias=None, alias_is_default=None, ): eq, eq_key, order, order_key = _determine_attrib_eq_order( cmp, eq_key or eq, order_key or order, True ) # Cache this descriptor here to speed things up later. bound_setattr = _OBJ_SETATTR.__get__(self) # Despite the big red warning, people *do* instantiate `Attribute` # themselves. bound_setattr("name", name) bound_setattr("default", default) bound_setattr("validator", validator) bound_setattr("repr", repr) bound_setattr("eq", eq) bound_setattr("eq_key", eq_key) bound_setattr("order", order) bound_setattr("order_key", order_key) bound_setattr("hash", hash) bound_setattr("init", init) bound_setattr("converter", converter) bound_setattr( "metadata", ( types.MappingProxyType(dict(metadata)) # Shallow copy if metadata else _EMPTY_METADATA_SINGLETON ), ) bound_setattr("type", type) bound_setattr("kw_only", kw_only) bound_setattr("inherited", inherited) bound_setattr("on_setattr", on_setattr) bound_setattr("alias", alias) bound_setattr( "alias_is_default", alias is None if alias_is_default is None else alias_is_default, ) def __setattr__(self, name, value): raise FrozenInstanceError @classmethod def from_counting_attr( cls, name: str, ca: _CountingAttr, kw_only: bool, type=None ): # The 'kw_only' argument is the class-level setting, and is used if the # attribute itself does not explicitly set 'kw_only'. # type holds the annotated value. deal with conflicts: if type is None: type = ca.type elif ca.type is not None: msg = f"Type annotation and type argument cannot both be present for '{name}'." raise ValueError(msg) return cls( name, ca._default, ca._validator, ca.repr, None, ca.hash, ca.init, False, ca.metadata, type, ca._converter, kw_only if ca.kw_only is None else ca.kw_only, ca.eq, ca.eq_key, ca.order, ca.order_key, ca.on_setattr, ca.alias, ca.alias is None, ) # Don't use attrs.evolve since fields(Attribute) doesn't work def evolve(self, **changes): """ Copy *self* and apply *changes*. This works similarly to `attrs.evolve` but that function does not work with :class:`attrs.Attribute`. It is mainly meant to be used for `transform-fields`. .. versionadded:: 20.3.0 """ import copy new = copy.copy(self) new._setattrs(changes.items()) if "alias" in changes and "alias_is_default" not in changes: # Explicit alias provided -- no longer the default. _OBJ_SETATTR.__get__(new)("alias_is_default", False) elif ( "name" in changes and "alias" not in changes # Don't auto-generate alias if the user picked picked the old one. and self.alias_is_default ): # Name changed, alias was auto-generated -- update it. _OBJ_SETATTR.__get__(new)( "alias", _default_init_alias_for(new.name) ) return new # Don't use _add_pickle since fields(Attribute) doesn't work def __getstate__(self): """ Play nice with pickle. """ return tuple( getattr(self, name) if name != "metadata" else dict(self.metadata) for name in self.__slots__ ) def __setstate__(self, state): """ Play nice with pickle. """ if not (len(state) < len(self.__slots__)): pass else: # Pre-26.1.0 pickle without alias_is_default -- infer it # heuristically. state_dict = dict(zip(self.__slots__, state, strict=False)) alias_is_default = state_dict.get( "alias" ) is None or state_dict.get("alias") == _default_init_alias_for( state_dict["name"] ) state = (*state, alias_is_default) self._setattrs(zip(self.__slots__, state, strict=True)) def _setattrs(self, name_values_pairs): bound_setattr = _OBJ_SETATTR.__get__(self) for name, value in name_values_pairs: if not (name != "metadata"): bound_setattr( name, ( types.MappingProxyType(dict(value)) if value else _EMPTY_METADATA_SINGLETON ), ) else: bound_setattr(name, value)

Loading feature diagnosis…

Source regions

Feature contributions

Feature contributions

FeatureValueContribution
(log-odds)
Halstead volumeHow much symbolic information the code contains. It combines the total number of operators and values with the number of distinct ones.5595.287−184.644
Source linesThe number of non-empty source lines.272+108.8
Byte entropyHow varied the bytes in the source text are. Repeated bytes give a lower value; a more even mixture gives a higher value.4.379−6.568

Intercept 8.87 + feature contributions = -73.542 (log-odds).
Score = sigmoid(-73.542) = 0.

Feature contributions

FeatureValueContribution
(log-odds)
Comment layout frequencyHow frequently the layout switches between lines containing only comments or whitespace and lines containing code.273−8.63
Indentation frequencyHow rapidly indentation changes from line to line.198+6.111
Number layout frequencyHow rapidly the number of numeric values per line changes through the code.198−4.123
Identifier layout (vertical)How rapidly the visual pattern of identifier characters changes from top to bottom.271.957+3.392
Comment layout (horizontal)How rapidly the visual pattern of comment characters changes from left to right.90.315+0.653
Operator visual areaThe share of the code’s visual area occupied by operators such as +, =, and *.0.042+0.537
Identifier layout (horizontal)How rapidly the visual pattern of identifier characters changes from left to right. It measures spatial frequency, not the meaning of the names.90.96−0.187

Intercept 0.07 + feature contributions = -2.177 (log-odds).
Score = sigmoid(-2.177) = 0.102.

Score0.583
Score74
Run 1

The code is reasonably structured with a clear class hierarchy and documentation, but it suffers from several readability issues. The Attribute class has good docstrings and logical organization, but the __init__ method is very long with many parameters and repetitive bound_setattr calls. The _setattrs method contains awkward inverted conditionals (e.g., 'if not (name != "metadata")') that hurt readability. Some helper methods like from_counting_attr have unclear parameter naming (ca) and complex conditional logic. The __setstate__ method has confusing nested if/else structure with a no-op pass branch. While the code follows consistent patterns and has helpful comments, the dense parameter lists, repetitive setter patterns, and occasionally inverted logic make it harder to follow than necessary.

Run 2

The code is moderately readable. It has clear intent with docstrings and consistent naming, and the overall class structure is logical. However, readability is reduced by several factors: the extremely long __init__ parameter list, the use of bound_setattr to bypass frozen immutability which obscures direct assignment, the length of the class docstring, and boolean conditions like 'if not (name != metadata)' which are difficult to parse. Nesting is generally shallow, and line length is mostly reasonable, but some methods (like evolve and _setattrs) contain slightly convoluted logic. The code is organized but not succinct; it feels longer than necessary due to verbose comments and repetitive assignments.

Run 3

The code is well-structured with clear class organization and thorough documentation. The Attribute class is logically laid out with __slots__, __init__, and helper methods. Nesting is minimal, with only one if-else block in __setstate__. Intent is clear through descriptive method names and class docstring. Action granularity is good, with one bound_setattr call per line. However, the code is unnecessarily long due to excessive docstring content and verbose comments. The reading flow is natural but interrupted by long documentation blocks. Some conditional logic is awkwardly inverted (using 'if not condition: pass else: ...'), which reduces clarity. Overall, the code is highly readable but could be more concise.

Run 1

Code Structure: The class is logically organized into initialization, construction, copying, serialization, and attribute-setting methods, though slot-order dependencies and long positional calls introduce fragility. Nesting: Generally shallow, with only modest conditional complexity. Clarity of intent: Descriptive method names, documentation, and explanatory comments help, but double-negated conditions, an empty pass branch, builtin-shadowing parameters, and internal descriptor operations obscure some logic. Code length: Extensive documentation is useful, but repetitive assignments, a large constructor signature, and unused imports in this excerpt increase reading effort. Action granularity: Most statements perform one action; tuple unpacking and conditional expressions remain manageable. Reading flow: Method grouping and consistent formatting support natural reading, while lengthy positional argument lists and awkwardly split expressions interrupt it. Overall, readable and well documented, but unnecessarily indirect conditionals and implementation-heavy construction prevent a higher score.

Run 2

Code Structure: Methods are logically separated by responsibility, with useful documentation, though slot-order dependencies and long positional constructor calls complicate maintenance. Nesting: Mostly shallow, with limited conditional branching; multiline conditional expressions add some visual complexity. Clarity of intent: Descriptive names and comments explain immutability, metadata handling, and compatibility behavior. However, inverted conditions such as 'if not (name != "metadata")' and an empty pass branch obscure simple logic. Code length: Generally justified, but extensive documentation, repetitive assignments, and imports unused within this excerpt make it lengthy. Action granularity: Statements generally perform one action per line, supporting easy scanning. Reading flow: Methods follow a sensible progression from construction to copying and serialization, but awkward line wrapping, numerous positional arguments, and references to externally defined helpers interrupt comprehension.

Run 3

Code Structure: Methods are logically grouped within a cohesive class, with documentation explaining responsibilities and compatibility concerns. Nesting: Mostly shallow, although conditional expressions and multiline calls add visual complexity. Clarity of intent: Descriptive method names and comments help, but inverted conditions such as 'if not (name != "metadata")' and the no-op pass branch obscure straightforward logic. Code length: Repetitive field assignments are understandable, but extensive documentation, a large constructor, and imports unused in this excerpt increase reading overhead. Action granularity: Statements generally perform one action each, making operations easy to follow. Reading flow: Consistent formatting and sequential initialization support natural reading, but the long positional constructor call requires cross-referencing parameter order, and slot-order dependencies and descriptor-based mutation demand additional context.