Sample

pyint-457d101c5ee6-I08

Select one of ten high-readability unrelated code templates per class

Matched original source

Lines276

Scores

MethodScoreScale
Posnett00–1; higher is more readable
Dorn0.10–1; higher is more readable
Mi0.5830–1; higher is more readable
LLOC78Logical lines; fewer is more readable
DeepSeek V4 Pro15.670–20; mean of three runs
GPT-6.1 Sol150–20; mean of three runs
BTTF0.4090–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, ): first_score = 72 second_score = 85 if first_score > second_score: higher_score = first_score else: higher_score = second_score 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.5704.47−188.248
Source linesThe number of non-empty source lines.276+110.4
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.378−6.567

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

Feature contributions

FeatureValueContribution
(log-odds)
Comment layout frequencyHow frequently the layout switches between lines containing only comments or whitespace and lines containing code.277−8.771
Indentation frequencyHow rapidly indentation changes from line to line.202+6.25
Number layout frequencyHow rapidly the number of numeric values per line changes through the code.202−4.214
Identifier layout (vertical)How rapidly the visual pattern of identifier characters changes from top to bottom.275.946+3.447
Comment layout (horizontal)How rapidly the visual pattern of comment characters changes from left to right.90.982+0.664
Operator visual areaThe share of the code’s visual area occupied by operators such as +, =, and *.0.041+0.541
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.201 (log-odds).
Score = sigmoid(-2.201) = 0.1.

Score0.583
Score78
Run 1

The code demonstrates moderate readability. The class structure with `__slots__`, clear docstrings, and consistent method grouping shows good organization. However, several issues reduce its score: (1) The `__init__` method takes 20 parameters, making it unnecessarily long and difficult to follow. (2) There is an unexplained, dead-code block with 'first_score', 'second_score', and 'higher_score' variables that serves no purpose and disrupts reading flow. (3) The `first_score`/`second_score` block violates action granularity and clarity of intent - it appears to be leftover debugging code. (4) Multiple operations are packed into single lines (e.g., tuple unpacking in `_determine_attrib_eq_order` call). (5) The conditional expressions for 'alias_is_default' and 'metadata' are complex and reduce readability. (6) Some parameter names are cryptic ('cmp', 'ca'). While the docstrings are helpful and the general class structure is logical, the tangled parameter handling, dead code, and compact expressions make this code harder to read than necessary.

Run 2

The code is highly readable with clear structure and logical organization. The Attribute class is well-documented with comprehensive docstrings explaining its purpose and usage. Methods are concise and follow single-responsibility principles. The code maintains flat nesting with no deep conditional chains, and each line typically performs one action. Intent is clear throughout - from the descriptive method names like from_counting_attr to the explicit _setattrs helper. The slot definitions and initialization are straightforward. Minor issues include the confusing unused score comparison logic in __init__ and some manual __setattr__ workarounds, but these are well-commented. The code follows Python best practices with type hints, proper imports, and clear variable naming.

Run 3

The code demonstrates strong readability with clear structure, logical organization, and well-documented intent. The Attribute class has a clean __slots__ declaration, proper type hints on new methods, and excellent docstrings explaining purpose and parameters. Nesting is minimal throughout, with only shallow conditional blocks in evolve() and __setstate__(). Action granularity is good - each line typically performs one clear operation. The code length is appropriate given the complexity of the attribute system being implemented. However, there are a few minor concerns: some methods like evolve() and __setstate__() could benefit from slightly more explicit logic separation, and the pickle-related comments are brief. The unused 'cmp' parameter with an XXX comment is a minor code smell, though appropriately documented. Overall, the code follows Python best practices, maintains consistent naming conventions, and effectively balances the complexity of attribute handling with clear, maintainable structure.

Run 1

Code Structure: Methods logically separate initialization, copying, serialization, and attribute updates, but unrelated score-comparison code disrupts the constructor. Nesting: Mostly shallow, with manageable conditionals and one loop. Clarity of intent: Descriptive method names, extensive documentation, and explanatory comments help; descriptor manipulation, external helpers, and the long positional constructor call require extra interpretation. Code length: Documentation is substantial but useful; repetitive assignments and unused score calculations add bulk. Action granularity: Generally one action per line, with clearly formatted multiline expressions. Reading flow: Method organization is natural, but the large parameter list, positional argument mapping, and awkwardly wrapped compatibility expression slow reading.

Run 2

Code Structure: Methods logically separate initialization, copying, serialization, and immutable assignment, but unrelated score-comparison code disrupts the constructor. Nesting: Mostly shallow, with manageable conditionals and loops. Clarity of intent: Descriptive method names, documentation, and explanatory comments help, although internal helpers, descriptor manipulation, and a long positional constructor call require careful interpretation. Code length: Extensive documentation is useful, but repetitive attribute assignments, numerous parameters, and the unused higher_score calculation add bulk. Action granularity: Generally one action per line; tuple unpacking and conditional expressions introduce modest density without excessive compression. Reading flow: Consistent formatting and method boundaries support navigation, but awkwardly wrapped alias inference, repeated metadata conversion, and the irrelevant constructor block interrupt an otherwise coherent flow.

Run 3

Code Structure: Methods are logically grouped within a cohesive class, but the unrelated score comparison in __init__ distracts from initialization. Nesting: Mostly shallow, with manageable conditionals and loops; multiline conditional expressions add some complexity. Clarity of intent: Descriptive method names, documentation, and explanatory comments communicate purpose well. Internal helpers, descriptor-based assignment, and lengthy positional constructor calls require extra interpretation. Code length: Generally justified by functionality, although extensive documentation, repetitive assignments, and unused score logic reduce concision. Action granularity: Most lines perform one action, with clear assignment and mutation steps; tuple unpacking and compound expressions remain reasonably readable. Reading flow: Consistent formatting and method boundaries support navigation, but the large constructor signature, positional argument mapping, and awkwardly wrapped pickle compatibility expression interrupt the flow.