Catalog PyPI
PACKAGE EXPLORERView in registry

afsolver

PyPI

Lightweight solver for Dung-style argumentation framework semantics (conflict-free, admissible, complete, preferred, grounded, stable extensions)

Versions collected1
Direct dependencies1From release 0.1.1
Last observed20 Oct, 21:13 UTC

README

Version 0.1.1 documentation

afsolver

A lightweight Python solver for Dung-style abstract argumentation framework (AF) semantics: conflict-free, admissible, complete, preferred, grounded, and stable.

Install

uv add afsolver

or with pip:

pip install afsolver

Quick start

from afsolver import ArgumentationFramework

af = ArgumentationFramework(
    arguments=["a", "b", "c"],
    attacks=[("a", "b"), ("b", "a"), ("c", "b")],  # a<->b mutual attack, c attacks b
)

af.preferred()   # [frozenset({'a', 'c'})]
af.grounded()    # frozenset({'a', 'c'})
af.extensions()  # dict with all six semantics at once

arguments is optional — if omitted, arguments are inferred from the attacks pairs:

af = ArgumentationFramework(attacks=[("b", "a"), ("c", "b"), ("d", "c")])
af.arguments  # ('b', 'a', 'c', 'd')

Attack pairs can be tuples or lists — both are accepted and normalized to tuples internally.

API

ArgumentationFramework(arguments=(), attacks=())

MethodReturns
.conflict_free()list[frozenset] — conflict-free sets
.admissible()list[frozenset] — admissible sets
.complete()list[frozenset] — complete extensions
.preferred(contains=None)list[frozenset] — preferred (maximal admissible) extensions, optionally restricted to those containing all arguments in contains
.grounded()frozenset — the (unique) grounded extension
.stable()list[frozenset] — stable extensions
.minimal_admissible(contains=None)list[frozenset] — non-empty admissible sets minimal by set inclusion, optionally restricted to those containing all arguments in contains
.extension(name)dispatch to any of the six semantics above by string name
.extensions()dict[str, ...] — all six semantics computed at once

preferred

With no contains argument, returns all preferred extensions. Pass contains to restrict the result to only those that include a given argument (or set of arguments):

af = ArgumentationFramework(
    ["a", "b", "c", "d", "e"],
    [("b", "a"), ("c", "b"), ("d", "b"), ("c", "e"), ("e", "c")],
)

af.preferred()                     # [{'a', 'c', 'd'}, {'a', 'd', 'e'}]
af.preferred(contains=["a", "c"])  # [{'a', 'c', 'd'}]

minimal_admissible

With no contains argument, returns the smallest non-trivial admissible sets overall. Pass contains to restrict the result to the smallest admissible sets that include a given argument (or set of arguments):

af = ArgumentationFramework(
    ["a", "b", "c", "d", "e"],
    [("b", "a"), ("c", "b"), ("d", "b"), ("c", "e"), ("e", "c")],
)

af.minimal_admissible()                # [{'c'}, {'d'}, {'e'}]
af.minimal_admissible(contains=["a"])  # [{'a', 'c'}, {'a', 'd'}]

The empty set is always excluded — it's trivially admissible and a subset of everything else, so including it would hide the smallest non-trivial results.

Development

uv sync            # install project + dev dependencies
uv run pytest -q   # run tests
uv build           # build sdist + wheel

Downloads & popularity

1downloads
1-day window · source-reported counts20 Oct 2026
10552.50
2026-07-24: 105 · observed 2026-10-21T15:02:53.6677056Z · period 2026-07-24–2026-07-242026-07-25: 9 · observed 2026-10-21T15:02:53.6677056Z · period 2026-07-25–2026-07-252026-07-27: 7 · observed 2026-10-21T15:02:53.6677056Z · period 2026-07-27–2026-07-272026-07-28: 2 · observed 2026-10-21T15:02:53.6677056Z · period 2026-07-28–2026-07-282026-07-29: 1 · observed 2026-10-21T15:02:53.6677056Z · period 2026-07-29–2026-07-292026-07-30: 6 · observed 2026-10-21T15:02:53.6677056Z · period 2026-07-30–2026-07-302026-07-31: 2 · observed 2026-10-21T15:02:53.6677056Z · period 2026-07-31–2026-07-312026-08-01: 93 · observed 2026-10-21T15:02:53.6677056Z · period 2026-08-01–2026-08-012026-08-02: 9 · observed 2026-10-21T15:02:53.6677056Z · period 2026-08-02–2026-08-022026-08-03: 9 · observed 2026-10-21T15:02:53.6677056Z · period 2026-08-03–2026-08-032026-08-04: 2 · observed 2026-10-21T15:02:53.6677056Z · period 2026-08-04–2026-08-042026-08-06: 5 · observed 2026-10-21T15:02:53.6677056Z · period 2026-08-06–2026-08-062026-08-07: 4 · observed 2026-10-21T15:02:53.6677056Z · period 2026-08-07–2026-08-072026-08-08: 1 · observed 2026-10-21T15:02:53.6677056Z · period 2026-08-08–2026-08-082026-08-09: 8 · observed 2026-10-21T15:02:53.6677056Z · period 2026-08-09–2026-08-092026-08-11: 3 · observed 2026-10-21T15:02:53.6677056Z · period 2026-08-11–2026-08-112026-08-13: 2 · observed 2026-10-21T15:02:53.6677056Z · period 2026-08-13–2026-08-132026-08-14: 6 · observed 2026-10-21T15:02:53.6677056Z · period 2026-08-14–2026-08-142026-08-17: 2 · observed 2026-10-21T15:02:53.6677056Z · period 2026-08-17–2026-08-172026-08-18: 3 · observed 2026-10-21T15:02:53.6677056Z · period 2026-08-18–2026-08-182026-08-19: 2 · observed 2026-10-21T15:02:53.6677056Z · period 2026-08-19–2026-08-192026-08-20: 1 · observed 2026-10-21T15:02:53.6677056Z · period 2026-08-20–2026-08-202026-08-22: 1 · observed 2026-10-21T15:02:53.6677056Z · period 2026-08-22–2026-08-222026-08-23: 1 · observed 2026-10-21T15:02:53.6677056Z · period 2026-08-23–2026-08-232026-08-24: 6 · observed 2026-10-21T15:02:53.6677056Z · period 2026-08-24–2026-08-242026-08-27: 4 · observed 2026-10-21T15:02:53.6677056Z · period 2026-08-27–2026-08-272026-08-28: 4 · observed 2026-10-21T15:02:53.6677056Z · period 2026-08-28–2026-08-282026-08-29: 2 · observed 2026-10-21T15:02:53.6677056Z · period 2026-08-29–2026-08-292026-08-31: 2 · observed 2026-10-21T15:02:53.6677056Z · period 2026-08-31–2026-08-312026-09-01: 1 · observed 2026-10-21T15:02:53.6677056Z · period 2026-09-01–2026-09-012026-09-04: 2 · observed 2026-10-21T15:02:53.6677056Z · period 2026-09-04–2026-09-042026-09-06: 2 · observed 2026-10-21T15:02:53.6677056Z · period 2026-09-06–2026-09-062026-09-07: 4 · observed 2026-10-21T15:02:53.6677056Z · period 2026-09-07–2026-09-072026-09-08: 2 · observed 2026-10-21T15:02:53.6677056Z · period 2026-09-08–2026-09-082026-09-12: 2 · observed 2026-10-21T15:02:53.6677056Z · period 2026-09-12–2026-09-122026-09-13: 4 · observed 2026-10-21T15:02:53.6677056Z · period 2026-09-13–2026-09-132026-09-14: 6 · observed 2026-10-21T15:02:53.6677056Z · period 2026-09-14–2026-09-142026-09-15: 1 · observed 2026-10-21T15:02:53.6677056Z · period 2026-09-15–2026-09-152026-09-16: 4 · observed 2026-10-21T15:02:53.6677056Z · period 2026-09-16–2026-09-162026-09-20: 4 · observed 2026-10-21T15:02:53.6677056Z · period 2026-09-20–2026-09-202026-09-21: 2 · observed 2026-10-21T15:02:53.6677056Z · period 2026-09-21–2026-09-212026-09-24: 1 · observed 2026-10-21T15:02:53.6677056Z · period 2026-09-24–2026-09-242026-09-25: 1 · observed 2026-10-21T15:02:53.6677056Z · period 2026-09-25–2026-09-252026-09-26: 2 · observed 2026-10-21T15:02:53.6677056Z · period 2026-09-26–2026-09-262026-09-27: 2 · observed 2026-10-21T15:02:53.6677056Z · period 2026-09-27–2026-09-272026-09-28: 2 · observed 2026-10-21T15:02:53.6677056Z · period 2026-09-28–2026-09-282026-09-30: 2 · observed 2026-10-21T15:02:53.6677056Z · period 2026-09-30–2026-09-302026-10-01: 2 · observed 2026-10-21T15:02:53.6677056Z · period 2026-10-01–2026-10-012026-10-02: 1 · observed 2026-10-21T15:02:53.6677056Z · period 2026-10-02–2026-10-022026-10-06: 1 · observed 2026-10-21T15:02:53.6677056Z · period 2026-10-06–2026-10-062026-10-08: 2 · observed 2026-10-21T15:02:53.6677056Z · period 2026-10-08–2026-10-082026-10-09: 5 · observed 2026-10-21T15:02:53.6677056Z · period 2026-10-09–2026-10-092026-10-10: 2 · observed 2026-10-21T15:02:53.6677056Z · period 2026-10-10–2026-10-102026-10-13: 1 · observed 2026-10-21T15:02:53.6677056Z · period 2026-10-13–2026-10-132026-10-15: 1 · observed 2026-10-21T15:02:53.6677056Z · period 2026-10-15–2026-10-152026-10-18: 1 · observed 2026-10-21T15:02:53.6677056Z · period 2026-10-18–2026-10-182026-10-20: 1 · observed 2026-10-21T15:02:53.6677056Z · period 2026-10-20–2026-10-20
24 Jul20 Oct

pypistats · 57 observations shown. Missing days are unknown. Source category: overall: without mirrors.

View observed values
Date / source periodValueObserved at
2026-10-20 – 2026-10-2012026-10-21T15:02:53.6677056Z
2026-10-18 – 2026-10-1812026-10-21T15:02:53.6677056Z
2026-10-15 – 2026-10-1512026-10-21T15:02:53.6677056Z
2026-10-13 – 2026-10-1312026-10-21T15:02:53.6677056Z
2026-10-10 – 2026-10-1022026-10-21T15:02:53.6677056Z
2026-10-09 – 2026-10-0952026-10-21T15:02:53.6677056Z
2026-10-08 – 2026-10-0822026-10-21T15:02:53.6677056Z
2026-10-06 – 2026-10-0612026-10-21T15:02:53.6677056Z
2026-10-02 – 2026-10-0212026-10-21T15:02:53.6677056Z
2026-10-01 – 2026-10-0122026-10-21T15:02:53.6677056Z
2026-09-30 – 2026-09-3022026-10-21T15:02:53.6677056Z
2026-09-28 – 2026-09-2822026-10-21T15:02:53.6677056Z
2026-09-27 – 2026-09-2722026-10-21T15:02:53.6677056Z
2026-09-26 – 2026-09-2622026-10-21T15:02:53.6677056Z
2026-09-25 – 2026-09-2512026-10-21T15:02:53.6677056Z
2026-09-24 – 2026-09-2412026-10-21T15:02:53.6677056Z
2026-09-21 – 2026-09-2122026-10-21T15:02:53.6677056Z
2026-09-20 – 2026-09-2042026-10-21T15:02:53.6677056Z
2026-09-16 – 2026-09-1642026-10-21T15:02:53.6677056Z
2026-09-15 – 2026-09-1512026-10-21T15:02:53.6677056Z
2026-09-14 – 2026-09-1462026-10-21T15:02:53.6677056Z
2026-09-13 – 2026-09-1342026-10-21T15:02:53.6677056Z
2026-09-12 – 2026-09-1222026-10-21T15:02:53.6677056Z
2026-09-08 – 2026-09-0822026-10-21T15:02:53.6677056Z
2026-09-07 – 2026-09-0742026-10-21T15:02:53.6677056Z
2026-09-06 – 2026-09-0622026-10-21T15:02:53.6677056Z
2026-09-04 – 2026-09-0422026-10-21T15:02:53.6677056Z
2026-09-01 – 2026-09-0112026-10-21T15:02:53.6677056Z
2026-08-31 – 2026-08-3122026-10-21T15:02:53.6677056Z
2026-08-29 – 2026-08-2922026-10-21T15:02:53.6677056Z
2026-08-28 – 2026-08-2842026-10-21T15:02:53.6677056Z
2026-08-27 – 2026-08-2742026-10-21T15:02:53.6677056Z
2026-08-24 – 2026-08-2462026-10-21T15:02:53.6677056Z
2026-08-23 – 2026-08-2312026-10-21T15:02:53.6677056Z
2026-08-22 – 2026-08-2212026-10-21T15:02:53.6677056Z
2026-08-20 – 2026-08-2012026-10-21T15:02:53.6677056Z
2026-08-19 – 2026-08-1922026-10-21T15:02:53.6677056Z
2026-08-18 – 2026-08-1832026-10-21T15:02:53.6677056Z
2026-08-17 – 2026-08-1722026-10-21T15:02:53.6677056Z
2026-08-14 – 2026-08-1462026-10-21T15:02:53.6677056Z
2026-08-13 – 2026-08-1322026-10-21T15:02:53.6677056Z
2026-08-11 – 2026-08-1132026-10-21T15:02:53.6677056Z
2026-08-09 – 2026-08-0982026-10-21T15:02:53.6677056Z
2026-08-08 – 2026-08-0812026-10-21T15:02:53.6677056Z
2026-08-07 – 2026-08-0742026-10-21T15:02:53.6677056Z
2026-08-06 – 2026-08-0652026-10-21T15:02:53.6677056Z
2026-08-04 – 2026-08-0422026-10-21T15:02:53.6677056Z
2026-08-03 – 2026-08-0392026-10-21T15:02:53.6677056Z
2026-08-02 – 2026-08-0292026-10-21T15:02:53.6677056Z
2026-08-01 – 2026-08-01932026-10-21T15:02:53.6677056Z
2026-07-31 – 2026-07-3122026-10-21T15:02:53.6677056Z
2026-07-30 – 2026-07-3062026-10-21T15:02:53.6677056Z
2026-07-29 – 2026-07-2912026-10-21T15:02:53.6677056Z
2026-07-28 – 2026-07-2822026-10-21T15:02:53.6677056Z
2026-07-27 – 2026-07-2772026-10-21T15:02:53.6677056Z
2026-07-25 – 2026-07-2592026-10-21T15:02:53.6677056Z
2026-07-24 – 2026-07-241052026-10-21T15:02:53.6677056Z

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
0.1.11 Aug 20261

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

PENDING
meng6/afsolver

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 21:13 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:2a89f66da7493d387d859dfdcc636a0e3a15ea06ae4da58bf6a8021a91561ef6