Sample

pyint-70ce6caf7638-I10

Deterministically remove some optional blank lines and bracketed line breaks

Matched original source

Lines218

Scores

MethodScoreScale
Posnett00–1; higher is more readable
Dorn0.0450–1; higher is more readable
Mi0.5240–1; higher is more readable
LLOC73Logical lines; fewer is more readable
DeepSeek V4 Pro7.330–20; mean of three runs
GPT-6.1 Sol130–20; mean of three runs
BTTF0.3590–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 len(state) < len(self.__slots__): # 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 name != "metadata": bound_setattr(name, value) else: bound_setattr( name, ( types.MappingProxyType(dict(value)) if value else _EMPTY_METADATA_SINGLETON ), )

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.5522.817−182.253
Source linesThe number of non-empty source lines.218+87.2
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.366−6.549

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

Feature contributions

FeatureValueContribution
(log-odds)
Comment layout frequencyHow frequently the layout switches between lines containing only comments or whitespace and lines containing code.219−6.718
Indentation frequencyHow rapidly indentation changes from line to line.147+4.347
Number layout frequencyHow rapidly the number of numeric values per line changes through the code.147−2.952
Identifier layout (vertical)How rapidly the visual pattern of identifier characters changes from top to bottom.217.966+2.637
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.146.977−2.56
Comment layout (horizontal)How rapidly the visual pattern of comment characters changes from left to right.146.991+1.567
Operator visual areaThe share of the code’s visual area occupied by operators such as +, =, and *.0.041+0.543

Intercept 0.07 + feature contributions = -3.066 (log-odds).
Score = sigmoid(-3.066) = 0.045.

Score0.524
Score73
Run 1

This code is difficult to read due to inconsistent formatting, poor spacing, and tangled structure. The import block lacks organization with awkward line breaks. The Attribute class constructor takes 16+ parameters without clear grouping, and the function body mixes multiple actions per line with confusing multi-line statements. The use of bound_setattr for every assignment adds unnecessary complexity and obscures intent. Docstrings are lengthy and placed before critical code, disrupting flow. The metadata handling has deep conditional nesting and inconsistent indentation. While the class has a logical purpose, the implementation shows poor action granularity, with multiple assignments and conditionals crammed together. Variable naming is generally clear but the overall structure and formatting make comprehension slow and error-prone. The code would benefit greatly from consistent line breaks, extracted helper methods, and simplification of the attribute-setting mechanism.

Run 2

The code has clear documentation and logical organization at the class level, but implementation details significantly hurt readability. Many lines contain multiple statements or poorly aligned expressions, violating the 'one action per line' principle. Nesting is moderate but inconsistent in formatting makes it harder to follow. Variable names and intent are mostly clear, but the use of cryptic abbreviations (e.g., 'ca', '_OBJ_SETATTR') and dense argument passing reduces clarity. The class is long with many repetitive bound_setattr calls, though some could be condensed. Reading flow is disrupted by uneven whitespace, mixed indentation styles in expressions, and compact alignment choices. While docstrings are thorough and helpful, the actual code layout feels tangled and overly verbose in places.

Run 3

The code has good documentation and clear intent for an internal library class, but its layout severely undermines readability. Structure is monolithic with imports and class definition cramped together. The constructor signature and body contain inconsistent indentation, compressed multi-argument lines, and multiple statements on one line. Nesting is shallow but line wrapping is erratic, making control flow hard to follow. Action granularity is violated repeatedly (e.g., multiple bound_setattr calls on one line, tuple packing inline). Reading flow is disrupted by scattered alignment and dense expressions, especially in methods like __getstate__ and _setattrs. While naming is descriptive and the class purpose is clear, formatting inconsistencies and overly compact code make it difficult to scan and maintain.

Run 1

Code Structure: Methods are logically grouped within a cohesive class, but inconsistent spacing and limited separation between definitions obscure organization. Nesting: Mostly shallow, with straightforward conditionals and loops; multiline expressions add visual complexity rather than deep nesting. Clarity of intent: Descriptive method names, extensive documentation, and explanatory comments clarify immutability, copying, and serialization. Internal helpers and long positional constructor calls require extra effort to interpret. Code length: Generally justified by functionality, although lengthy documentation and repetitive attribute assignments slow scanning. Action granularity: Most executable statements perform one action, but multiple parameters and slot names crowded onto lines reduce readability. Reading flow: Method order is natural, yet erratic alignment, awkward wrapping, and dense argument lists frequently interrupt reading.

Run 2

Code Structure: Methods are logically grouped within a single class, but inconsistent spacing and weak separation between imports and definitions obscure organization. Nesting: Mostly shallow, with straightforward conditionals and loops; embedded expressions add some complexity. Clarity of intent: Descriptive method names, extensive documentation, and explanatory comments make responsibilities clear, although internal helpers and long positional argument lists require extra interpretation. Code length: Generally justified by initialization, serialization, and compatibility handling, but repetitive assignments and lengthy documentation slow scanning. Action granularity: Most executable statements perform one action per line, though multiple parameters and slot names are crowded onto individual lines. Reading flow: Method ordering is coherent, but irregular indentation, excessive inline whitespace, awkward wrapping, and compressed argument lists repeatedly interrupt natural reading.

Run 3

Code Structure: Methods are logically organized around attribute construction, copying, immutability, and serialization, but inconsistent spacing and limited separation weaken organization. Nesting: Generally shallow, with straightforward conditionals and loops; multiline expressions add visual complexity rather than deep nesting. Clarity of intent: Descriptive method names, extensive documentation, and explanatory comments clarify purpose, although internal helpers and long positional constructor calls require additional context. Code length: Mostly justified by functionality, but lengthy documentation and repetitive field assignments make scanning slower. Action granularity: Executable statements generally perform one action per line; however, multiple parameters and slot names crowded onto single lines obscure individual elements. Reading flow: Method progression is natural, but irregular indentation, excessive inline whitespace, awkward wrapping, and dense argument lists repeatedly interrupt reading.