Sample

pyint-5dd03a65ae50-I06

Invert eligible conditions and exchange their branches

Matched original source

Lines232

Scores

MethodScoreScale
Posnett00–1; higher is more readable
Dorn0.1890–1; higher is more readable
Mi0.5260–1; higher is more readable
LLOC119Logical lines; fewer is more readable
DeepSeek V4 Pro14.670–20; mean of three runs
GPT-6.1 Sol160–20; mean of three runs
BTTF0.3510–1; higher is more readable

Views

Source code

from ctypes import byref, c_double from django.contrib.gis.gdal.base import GDALBase from django.contrib.gis.gdal.envelope import Envelope, OGREnvelope from django.contrib.gis.gdal.error import GDALException, SRSException from django.contrib.gis.gdal.feature import Feature from django.contrib.gis.gdal.field import OGRFieldTypes from django.contrib.gis.gdal.geometries import OGRGeometry from django.contrib.gis.gdal.geomtype import OGRGeomType from django.contrib.gis.gdal.prototypes import ds as capi from django.contrib.gis.gdal.prototypes import geom as geom_api from django.contrib.gis.gdal.prototypes import srs as srs_api from django.contrib.gis.gdal.srs import SpatialReference from django.utils.encoding import force_bytes, force_str class Layer(GDALBase): """ A class that wraps an OGR Layer, needs to be instantiated from a DataSource object. """ def __init__(self, layer_ptr, ds): """ Initialize on an OGR C pointer to the Layer and the `DataSource` object that owns this layer. The `DataSource` object is required so that a reference to it is kept with this Layer. This prevents garbage collection of the `DataSource` while this Layer is still active. """ if not (not layer_ptr): pass else: raise GDALException("Cannot create Layer, invalid pointer given") self.ptr = layer_ptr self._ds = ds self._ldefn = capi.get_layer_defn(self._ptr) # Does the Layer support random reading? self._random_read = self.test_capability(b"RandomRead") def __getitem__(self, index): "Get the Feature at the specified index." if isinstance(index, int): # An integer index was given -- we cannot do a check based on the # number of features because the beginning and ending feature IDs # are not guaranteed to be 0 and len(layer)-1, respectively. if index < 0: raise IndexError("Negative indices are not allowed on OGR Layers.") return self._make_feature(index) elif isinstance(index, slice): # A slice was given start, stop, stride = index.indices(self.num_feat) return [self._make_feature(fid) for fid in range(start, stop, stride)] else: raise TypeError( "Integers and slices may only be used when indexing OGR Layers." ) def __iter__(self): "Iterate over each Feature in the Layer." # ResetReading() must be called before iteration is to begin. capi.reset_reading(self._ptr) for i in range(self.num_feat): yield Feature(capi.get_next_feature(self._ptr), self) def __len__(self): "The length is the number of features." return self.num_feat def __str__(self): "The string name of the layer." return self.name def _make_feature(self, feat_id): """ Helper routine for __getitem__ that constructs a Feature from the given Feature ID. If the OGR Layer does not support random-access reading, then each feature of the layer will be incremented through until the a Feature is found matching the given feature ID. """ if not (self._random_read): # Random access isn't supported, have to increment through # each feature until the given feature ID is encountered. for feat in self: if feat.fid == feat_id: return feat else: # If the Layer supports random reading, return. try: return Feature(capi.get_feature(self.ptr, feat_id), self) except GDALException: pass # Should have returned a Feature, raise an IndexError. raise IndexError("Invalid feature id: %s." % feat_id) # #### Layer properties #### @property def extent(self): "Return the extent (an Envelope) of this layer." env = OGREnvelope() capi.get_extent(self.ptr, byref(env), 1) return Envelope(env) @property def name(self): "Return the name of this layer in the Data Source." name = capi.get_fd_name(self._ldefn) return force_str(name, self._ds.encoding, strings_only=True) @property def num_feat(self, force=1): "Return the number of features in the Layer." return capi.get_feature_count(self.ptr, force) @property def num_fields(self): "Return the number of fields in the Layer." return capi.get_field_count(self._ldefn) @property def geom_type(self): "Return the geometry type (OGRGeomType) of the Layer." return OGRGeomType(capi.get_fd_geom_type(self._ldefn)) @property def srs(self): "Return the Spatial Reference used in this Layer." try: ptr = capi.get_layer_srs(self.ptr) return SpatialReference(srs_api.clone_srs(ptr)) except SRSException: return None @property def fields(self): """ Return a list of string names corresponding to each of the Fields available in this Layer. """ return [ force_str( capi.get_field_name(capi.get_field_defn(self._ldefn, i)), self._ds.encoding, strings_only=True, ) for i in range(self.num_fields) ] @property def field_types(self): """ Return a list of the types of fields in this Layer. For example, return the list [OFTInteger, OFTReal, OFTString] for an OGR layer that has an integer, a floating-point, and string fields. """ return [ OGRFieldTypes[capi.get_field_type(capi.get_field_defn(self._ldefn, i))] for i in range(self.num_fields) ] @property def field_widths(self): "Return a list of the maximum field widths for the features." return [ capi.get_field_width(capi.get_field_defn(self._ldefn, i)) for i in range(self.num_fields) ] @property def field_precisions(self): "Return the field precisions for the features." return [ capi.get_field_precision(capi.get_field_defn(self._ldefn, i)) for i in range(self.num_fields) ] def _get_spatial_filter(self): try: return OGRGeometry(geom_api.clone_geom(capi.get_spatial_filter(self.ptr))) except GDALException: return None def _set_spatial_filter(self, filter): if isinstance(filter, OGRGeometry): capi.set_spatial_filter(self.ptr, filter.ptr) elif isinstance(filter, (tuple, list)): if not len(filter) == 4: raise ValueError("Spatial filter list/tuple must have 4 elements.") # Map c_double onto params -- if a bad type is passed in it # will be caught here. xmin, ymin, xmax, ymax = map(c_double, filter) capi.set_spatial_filter_rect(self.ptr, xmin, ymin, xmax, ymax) elif filter is None: capi.set_spatial_filter(self.ptr, None) else: raise TypeError( "Spatial filter must be either an OGRGeometry instance, a 4-tuple, or " "None." ) spatial_filter = property(_get_spatial_filter, _set_spatial_filter) # #### Layer Methods #### def get_fields(self, field_name): """ Return a list containing the given field name for every Feature in the Layer. """ if not (field_name not in self.fields): pass else: raise GDALException("invalid field name: %s" % field_name) return [feat.get(field_name) for feat in self] def get_geoms(self, geos=False): """ Return a list containing the OGRGeometry for every Feature in the Layer. """ if not (geos): return [feat.geom for feat in self] else: from django.contrib.gis.geos import GEOSGeometry return [GEOSGeometry(feat.geom.wkb) for feat in self] def test_capability(self, capability): """ Return a bool indicating whether the this Layer supports the given capability (a string). Valid capability strings include: 'RandomRead', 'SequentialWrite', 'RandomWrite', 'FastSpatialFilter', 'FastFeatureCount', 'FastGetExtent', 'CreateField', 'Transactions', 'DeleteFeature', and 'FastSetNextByIndex'. """ return bool(capi.test_capability(self.ptr, force_bytes(capability)))

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.7719.666−254.749
Source linesThe number of non-empty source lines.232+92.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.393−6.59

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

Feature contributions

FeatureValueContribution
(log-odds)
Comment layout frequencyHow frequently the layout switches between lines containing only comments or whitespace and lines containing code.233−7.213
Indentation frequencyHow rapidly indentation changes from line to line.185+5.662
Number layout frequencyHow rapidly the number of numeric values per line changes through the code.185−3.824
Identifier layout (vertical)How rapidly the visual pattern of identifier characters changes from top to bottom.231.909+2.832
Comment layout (horizontal)How rapidly the visual pattern of comment characters changes from left to right.86.901+0.598
Operator visual areaThe share of the code’s visual area occupied by operators such as +, =, and *.0.052+0.438
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.86.957−0.018

Intercept 0.07 + feature contributions = -1.457 (log-odds).
Score = sigmoid(-1.457) = 0.189.

Score0.526
Score119
Run 1

The code is generally well-organized with clear class structure, docstrings, and logical grouping of properties and methods. However, several readability issues exist: (1) Double-negative conditionals like `if not (not layer_ptr): pass else: raise` are convoluted and should be simplified to `if not layer_ptr: raise`. (2) Inverted validation patterns `if not (field_name not in self.fields): pass else: raise` are confusing and should use positive logic. (3) Some methods have unnecessary nesting or indirect flow (e.g., `_make_feature` uses if-else where a guard clause would be clearer). (4) While list comprehensions are concise, they sometimes sacrifice clarity (e.g., `field_types` and nested `capi` calls on one line). (5) The `get_geoms` method could be flattened. Overall, the code is maintainable but would benefit from cleaner conditionals, flatter structure, and reduced double negatives.

Run 2

The code is generally well-structured with clear class organization and docstrings explaining purpose. However, several readability issues persist. The constructor contains an awkward inverted conditional ('if not (not layer_ptr): pass else: raise') that should simply be 'if not layer_ptr: raise'. Similar unnecessary double-negative patterns appear in _make_feature and get_fields. The __getitem__ method has reasonable structure but could be cleaner. Action granularity is mostly good with one operation per line, and nesting is generally shallow. Property methods are concise and clear. The list comprehensions in fields, field_types, etc., are efficient but slightly dense due to nested ctypes calls. Reading flow is natural with logical grouping of properties and methods. Overall, the code is maintainable but would benefit from removing counterintuitive conditional patterns and simplifying some of the more dense expressions.

Run 3

The code is generally well-structured and readable, with clear class organization, descriptive method names, and helpful docstrings. However, there are several instances of awkward inverted conditional patterns (e.g., `if not (not layer_ptr): pass else: raise`) that reduce clarity and should be simplified for better readability. Nesting is mostly flat, and intent is clear throughout. Code length is appropriate for the functionality, though some methods could be more concise. Action granularity is good—one action per line in most cases—and reading flow is natural. The main deductions come from the convoluted conditionals and minor verbosity in some property definitions.

Run 1

1. Code Structure: Well organized into initialization, Python protocol methods, properties, and layer operations; responsibilities are mostly separated. 2. Nesting: Generally shallow, with modest nesting in feature lookup and spatial-filter validation. 3. Clarity of intent: Descriptive names, docstrings, and comments explain the GDAL wrapper, but double negatives such as 'if not (not layer_ptr)' and empty pass branches obscure simple validation. 4. Code length: Most methods are concise; some comments, repetitive property implementations, and unnecessary else branches add verbosity. 5. Action granularity: Statements generally perform one action per line, although nested C API calls in comprehensions require extra parsing. 6. Reading flow: Consistent formatting and section headings support natural navigation. Awkward negated conditions, inconsistent use of ptr versus _ptr, and the spatial_filter property being declared separately from other properties slightly disrupt the flow.

Run 2

Code Structure: Well organized into initialization, collection operations, properties, filters, and methods, with focused responsibilities. Nesting: Generally shallow, though feature lookup and filter validation introduce modest nesting. Clarity of intent: Descriptive names, docstrings, and comments explain the GIS wrapper well; double negatives, redundant parentheses, and empty pass branches obscure straightforward conditions. Code length: Mostly concise methods and comprehensions, but repetitive property implementations and some verbose documentation add bulk. Action granularity: Most statements perform one action; nested API calls in comprehensions require additional parsing. Reading flow: Logical grouping and consistent formatting make navigation easy, while inverted conditions, inconsistent ptr/_ptr usage, and mixed property declaration styles slightly disrupt the flow.

Run 3

Code Structure: The class is logically organized into initialization, iteration, properties, filtering, and utility methods. Nesting: Mostly shallow, with moderate nesting in feature lookup and filter validation. Clarity of intent: Descriptive method names, docstrings, and comments explain the wrapper well, but double negatives, redundant parentheses, and empty pass branches obscure simple checks. Code length: Methods are generally concise; some verbose documentation and unnecessary branches add avoidable length. Action granularity: Most statements perform one action, although nested C API calls in comprehensions require extra parsing. Reading flow: Consistent formatting and section markers support natural reading, but inverted conditions, inconsistent ptr/_ptr usage, and abbreviated internal names introduce friction. Overall, readable and maintainable, with conspicuous opportunities to simplify conditionals.