An evaluator that verifies all methods in abstract base classes are properly marked as abstract
Project description
Swarmauri Evaluator Abstractmethods
AbstractMethodsEvaluator inspects Python source files to verify that abstract
base classes decorate their contract methods with @abstractmethod. The
evaluator is designed for automated program analysis within the Swarmauri
ecosystem and reports the exact lines that need attention together with summary
metrics.
Features
- Parses Python modules into an AST to discover classes inheriting from
ABCor any custom bases supplied throughabc_base_classes. - Flags methods on abstract classes that are missing the
@abstractmethoddecorator and records fully compliant methods for context. - Ignores private (
_method) and dunder (__method__) members by default to focus on the public interface; these rules can be toggled withignore_privateandignore_dunder. - Returns a detailed metadata payload containing compliance counts, per-method diagnostics, and an overall percentage score.
- Provides
aggregate_scoresto average multiple evaluation runs while combining their metadata such as total issues and compliance percentages.
Installation
Install the evaluator with your preferred packaging tool:
pip install swarmauri_evaluator_abstractmethods
poetry add swarmauri_evaluator_abstractmethods
uv pip install swarmauri_evaluator_abstractmethods
Configuration
Instantiate the evaluator with optional keyword arguments:
| Option | Default | Description |
|---|---|---|
ignore_private |
True |
Skip methods whose names begin with a single underscore. |
ignore_dunder |
True |
Skip dunder methods such as __init__. |
abc_base_classes |
["ABC", "abc.ABC"] |
Additional base class names that should be treated as abstract. |
Evaluation Output
Calling evaluate returns (score, metadata) where score is the ratio of
properly decorated methods to the total number of methods that should be
abstract. metadata contains:
issues: A list of dictionaries with file, line, class name, method name, whether the decorator is present, and a descriptive message. Fully compliant methods are included for context.total_abstract_classes,total_methods,total_abstract_methods, andtotal_missing_decorators: Counters summarizing the analysis.percentage_compliant: Convenience metric equal toscore * 100.
Usage Example
import textwrap
from typing import Dict
from swarmauri_core.programs.IProgram import DiffType, IProgram
from swarmauri_evaluator_abstractmethods import AbstractMethodsEvaluator
class InMemoryProgram(IProgram):
def __init__(self, files: Dict[str, str]):
self._files = files
def diff(self, other: IProgram) -> DiffType:
return {}
def apply_diff(self, diff: DiffType) -> IProgram:
return self
def validate(self) -> bool:
return True
def clone(self) -> IProgram:
return InMemoryProgram(dict(self._files))
def get_source_files(self) -> Dict[str, str]:
return self._files
def main() -> None:
program = InMemoryProgram(
{
"shapes.py": textwrap.dedent(
"""
from abc import ABC, abstractmethod
class Shape(ABC):
@abstractmethod
def area(self):
...
"""
).strip(),
"incomplete.py": textwrap.dedent(
"""
from abc import ABC
class InvalidShape(ABC):
def area(self):
...
"""
).strip(),
}
)
evaluator = AbstractMethodsEvaluator()
score, metadata = evaluator.evaluate(program)
print(f"Score: {score:.2f}")
for issue in metadata["issues"]:
if not issue["has_abstractmethod"]:
print(f"{issue['file']}:{issue['line']} -> {issue['message']}")
if __name__ == "__main__":
main()
Output
Score: 0.50
incomplete.py:4 -> Method 'area' in abstract class 'InvalidShape' should be decorated with @abstractmethod
The evaluator reports both compliant and non-compliant methods in
metadata["issues"], allowing you to surface violations while still retaining
context about classes that already satisfy the contract.
Want to help?
If you want to contribute to swarmauri-sdk, read up on our guidelines for contributing that will help you get started.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file swarmauri_evaluator_abstractmethods-0.3.0.dev43.tar.gz.
File metadata
- Download URL: swarmauri_evaluator_abstractmethods-0.3.0.dev43.tar.gz
- Upload date:
- Size: 10.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a348e3aa578cfe7bccf8acf4455ca4f8396740f513f0d134bb57215380d2d6e7
|
|
| MD5 |
ab18b23201b1a2eb20a7c8c214ce4a99
|
|
| BLAKE2b-256 |
c5c502552f0150dbe3f2a159f1b1fc0c35fcd84b874c06fc15bd7904e42ac97f
|
File details
Details for the file swarmauri_evaluator_abstractmethods-0.3.0.dev43-py3-none-any.whl.
File metadata
- Download URL: swarmauri_evaluator_abstractmethods-0.3.0.dev43-py3-none-any.whl
- Upload date:
- Size: 11.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.12 {"installer":{"name":"uv","version":"0.10.12","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
78a6e7bd091be24b0f7dfd77a09a760257ac521a4a4806b0fa9d68f4b738bd63
|
|
| MD5 |
f144397e0f0f1cb9fd90e3db0094b58a
|
|
| BLAKE2b-256 |
baa894e110b4e8a7a7affea42eb0ba1260158027f9cef587afc18627df3cca94
|