Groups¶
All groups¶
All recognized groups and their properties:
Icon |
Symbol |
Description |
Detection function |
Canonical |
Member count |
|---|---|---|---|---|---|
🏛️ |
All architectures |
24 |
|||
♺ |
All CI systems |
⬥ |
11 |
||
⚙️ |
All platforms |
47 |
|||
⁕ |
Any architectures, platforms and CI systems |
82 |
|||
📱 |
Any ARM architecture |
⬥ |
5 |
||
🔲 |
Any MIPS architecture |
⬥ |
4 |
||
☀️ |
Any SPARC architecture |
⬥ |
2 |
||
🪟 |
Any Windows |
⬥ |
1 |
||
³² |
32-bit architectures |
13 |
|||
⁶⁴ |
64-bit architectures |
11 |
|||
🅱️+ |
Any BSD |
⬥ |
6 |
||
🅱️ |
Any BSD excluding macOS |
5 |
|||
🏢 |
IBM mainframe |
⬥ |
1 |
||
🐧 |
Any Linux distribution |
⬥ |
34 |
||
≚ |
Any Linux compatibility layers |
⬥ |
2 |
||
🐧+ |
Any Linux and compatibility layers |
36 |
|||
🐉 |
LoongArch |
⬥ |
1 |
||
⊎ |
Any other Unix |
⬥ |
1 |
||
⚡ |
PowerPC family |
⬥ |
3 |
||
Ⅴ |
RISC-V family |
⬥ |
2 |
||
𝐕 |
AT&T System Five |
⬥ |
2 |
||
⨷ |
Any Unix |
46 |
|||
≛ |
Any Unix compatibility layers |
⬥ |
1 |
||
⨂ |
Any Unix excluding macOS |
45 |
|||
❓ |
Unknown |
⬥ |
3 |
||
🌐 |
WebAssembly |
⬥ |
2 |
||
𝘅 |
x86 family |
⬥ |
4 |
Hint
Canonical groups are non-overlapping groups that together cover all recognized traits. They are marked with a ⬥ icon in the table above.
Other groups are provided for convenience, but overlap with each other or with canonical groups.
extra_platforms.group API¶
classDiagram
_Identifiable <|-- Group
Group a collection of traits. Also referred as families.
- class extra_platforms.group.Group(id, name, icon='❓', members=<factory>)[source]¶
Bases:
_IdentifiableA
Groupidentifies a collection ofTraitmembers.Additionally of the common fields inherited from
_Identifiable, each trait provides:members: An iterable ofTraitinstances that belong to this group.member_ids: A frozenset of member IDs for quick lookup.canonical: A boolean indicating if the group is canonical (non-overlapping).various set-like operations (union, intersection, difference, etc.).
- unknown_symbol: ClassVar[str] = 'UNKNOWN'¶
Groups use ‘UNKNOWN’ instead of ‘UNKNOWN_GROUP’.
- current_func_id: ClassVar[str | None] = None¶
Groups don’t have a
current_group()function.
- members: Iterable[Trait]¶
Traits in this group.
Normalized to
MappingProxyType[str, Trait]at init, providing O(1) lookup by ID.
- property canonical: bool¶
Returns True if the group is canonical (non-overlapping), False otherwise.
A canonical group is one that does not share any members with other canonical groups.
Hint
Canonical groups are denoted with a “⬥” symbol in the documentation and tables.
- property short_desc: str¶
Return a short description with the first letter lowercased.
Overrides the base implementation to produce text suitable for mid-sentence use in docstrings, e.g., “any Linux distribution” instead of “Any Linux distribution”.
- isdisjoint(other)[source]¶
Return True if the group has no members in common with
other.Groups are disjoint if and only if their intersection is an empty set.
othercan be an arbitrarily nestedIterableofGroupandTrait.- Return type:
- fullyintersects(other)[source]¶
Return True if the group has all members in common with
other.- Return type:
- union(*others)[source]¶
Return a new
Groupwith members from the group and all others.Caution
The new
Groupwill inherits the metadata of the first one. All other groups’ metadata will be ignored.- Return type:
- intersection(*others)[source]¶
Return a new
Groupwith members common to the group and all others.Caution
The new
Groupwill inherits the metadata of the first one. All other groups’ metadata will be ignored.- Return type:
- difference(*others)[source]¶
Return a new
Groupwith members in the group that are not in the others.Caution
The new
Groupwill inherits the metadata of the first one. All other groups’ metadata will be ignored.- Return type:
- symmetric_difference(other)[source]¶
Return a new
Groupwith members in either the group or other but not both.Caution
The new
Groupwill inherits the metadata of the first one. All other groups’ metadata will be ignored.- Return type:
- copy(id=None, name=None, icon=None, members=None)[source]¶
Return a shallow copy of the group.
Fields can be overridden by passing new values as arguments.
- Return type:
- add(member)[source]¶
Return a new
Groupwith the specified trait added.If the trait is already in the group, returns a copy unchanged.
- Return type:
- Args:
member: A
Traitobject or trait ID string to add.- Returns:
A new
Groupinstance with the trait added.- Raises:
ValueError: If the trait ID is not recognized.
- remove(member)[source]¶
Return a new
Groupwith the specified trait removed.Raises
KeyErrorif the trait is not in the group.- Return type:
- Args:
member: A
Traitobject or trait ID string to remove.- Returns:
A new
Groupinstance with the trait removed.- Raises:
KeyError: If the trait is not in the group.
- all_group: ClassVar[str] = 'ALL_GROUPS'¶
The symbol name for the group containing all instances of this type.
- data_module_id: ClassVar[str] = 'group_data'¶
The module name where instances of this type are defined.
- discard(member)[source]¶
Return a new
Groupwith the specified trait removed if present.Unlike
remove(), this does not raise an error if the trait is not found.- Return type:
- Args:
member: A
Traitobject or trait ID string to remove.- Returns:
A new
Groupinstance with the trait removed, or a copy if not present.
- doc_page: ClassVar[str] = 'groups.md'¶
The documentation page filename.
- type_id: ClassVar[str] = 'group'¶
Machine-readable type identifier used to derive module and symbol names.
- type_name: ClassVar[str] = 'group'¶
Human-readable type name for documentation.
- id: str¶
Unique ID of the object.
- symbol_id: str¶
Symbolic identifier.
This is the variable name under which the instance can be accessed at the root of the
extra_platformsmodule.Mainly useful for documentation generation.
- detection_func_id: str¶
ID of the detection function for this object.
The detection function is expected to be named
is_<id>()and located at the root of theextra_platformsmodule.
- name: str¶
User-friendly name of the object.
- pop(member_id=None)[source]¶
Remove and return a trait from the group.
- Args:
- member_id: Optional trait ID to remove. If not provided, removes an arbitrary
trait (specifically, the first one in iteration order).
- Returns:
A tuple of (removed_trait, new_group).
- Raises:
KeyError: If
member_idis provided but not found in the group. KeyError: If the group is empty.
extra_platforms.group_data API¶
Definitions of ready-to-use groups.
- extra_platforms.group_data.ALL_ARCHITECTURES: Group = Group(id='all_architectures', name='All architectures')¶
All recognized architectures.
Caution
This group does not contain the
UNKNOWN_ARCHITECTUREtrait.ID:
all_architecturesName: All architectures
Icon: 🏛️
Canonical:
FalsePytest decorators: @skip_all_architectures / @unless_all_architectures
Members (24 Architecture): AARCH64, ARM, ARMV6L, ARMV7L, ARMV8L, I386, I586, I686, LOONGARCH64, MIPS, MIPS64, MIPS64EL, MIPSEL, PPC, PPC64, PPC64LE, RISCV32, RISCV64, S390X, SPARC, SPARC64, WASM32, WASM64, X86_64
- extra_platforms.group_data.ALL_CI = Group(id='all_ci', name='All CI systems')¶
All recognized Continuous Integration systems.
Note
Caution
This group does not contain the
UNKNOWN_CItrait.
- extra_platforms.group_data.ALL_PLATFORMS: Group = Group(id='all_platforms', name='All platforms')¶
All recognized platforms.
Caution
This group does not contain the
UNKNOWN_PLATFORMtraits.ID:
all_platformsName: All platforms
Icon: ⚙️
Canonical:
FalsePytest decorators: @skip_all_platforms / @unless_all_platforms
Members (47 Platform): AIX, ALTLINUX, AMZN, ANDROID, ARCH, BUILDROOT, CACHYOS, CENTOS, CLOUDLINUX, CYGWIN, DEBIAN, EXHERBO, FEDORA, FREEBSD, GENTOO, GUIX, HURD, IBM_POWERKVM, KVMIBM, LINUXMINT, MACOS, MAGEIA, MANDRIVA, MIDNIGHTBSD, NETBSD, NOBARA, OPENBSD, OPENSUSE, ORACLE, PARALLELS, PIDORA, RASPBIAN, RHEL, ROCKY, SCIENTIFIC, SLACKWARE, SLES, SOLARIS, SUNOS, TUMBLEWEED, TUXEDO, UBUNTU, ULTRAMARINE, WINDOWS, WSL1, WSL2, XENSERVER
- extra_platforms.group_data.ALL_TRAITS = Group(id='all_traits', name='Any architectures, platforms and CI systems')¶
All recognized architectures, platforms and CI systems.
Caution
This group does not contain all
UNKNOWN_*traits.ID:
all_traitsName: Any architectures, platforms and CI systems
Icon: ⁕
Canonical:
FalsePytest decorators: @skip_all_traits / @unless_all_traits
Members (24 Architecture, 11 CI, 47 Platform): AARCH64, AIX, ALTLINUX, AMZN, ANDROID, ARCH, ARM, ARMV6L, ARMV7L, ARMV8L, AZURE_PIPELINES, BAMBOO, BUILDKITE, BUILDROOT, CACHYOS, CENTOS, CIRCLE_CI, CIRRUS_CI, CLOUDLINUX, CODEBUILD, CYGWIN, DEBIAN, EXHERBO, FEDORA, FREEBSD, GENTOO, GITHUB_CI, GITLAB_CI, GUIX, HEROKU_CI, HURD, I386, I586, I686, IBM_POWERKVM, KVMIBM, LINUXMINT, LOONGARCH64, MACOS, MAGEIA, MANDRIVA, MIDNIGHTBSD, MIPS, MIPS64, MIPS64EL, MIPSEL, NETBSD, NOBARA, OPENBSD, OPENSUSE, ORACLE, PARALLELS, PIDORA, PPC, PPC64, PPC64LE, RASPBIAN, RHEL, RISCV32, RISCV64, ROCKY, S390X, SCIENTIFIC, SLACKWARE, SLES, SOLARIS, SPARC, SPARC64, SUNOS, TEAMCITY, TRAVIS_CI, TUMBLEWEED, TUXEDO, UBUNTU, ULTRAMARINE, WASM32, WASM64, WINDOWS, WSL1, WSL2, X86_64, XENSERVER
- extra_platforms.group_data.ANY_ARM = Group(id='any_arm', name='Any ARM architecture')¶
All ARM-based architectures.
ID:
any_armName: Any ARM architecture
Icon: 📱
Canonical:
True⬥Pytest decorators: @skip_any_arm / @unless_any_arm
Members (5 Architecture): AARCH64, ARM, ARMV6L, ARMV7L, ARMV8L
- extra_platforms.group_data.ANY_MIPS = Group(id='any_mips', name='Any MIPS architecture')¶
All MIPS-based architectures.
ID:
any_mipsName: Any MIPS architecture
Icon: 🔲
Canonical:
True⬥Pytest decorators: @skip_any_mips / @unless_any_mips
Members (4 Architecture): MIPS, MIPS64, MIPS64EL, MIPSEL
- extra_platforms.group_data.ANY_SPARC = Group(id='any_sparc', name='Any SPARC architecture')¶
All SPARC-based architectures.
ID:
any_sparcName: Any SPARC architecture
Icon: ☀️
Canonical:
True⬥Pytest decorators: @skip_any_sparc / @unless_any_sparc
Members (2 Architecture): SPARC, SPARC64
- extra_platforms.group_data.ANY_WINDOWS = Group(id='any_windows', name='Any Windows')¶
All Windows operating systems.
ID:
any_windowsName: Any Windows
Icon: 🪟
Canonical:
True⬥Pytest decorators: @skip_any_windows / @unless_any_windows
- extra_platforms.group_data.ARCH_32_BIT = Group(id='arch_32_bit', name='32-bit architectures')¶
All 32-bit architectures.
- extra_platforms.group_data.ARCH_64_BIT = Group(id='arch_64_bit', name='64-bit architectures')¶
All 64-bit architectures.
ID:
arch_64_bitName: 64-bit architectures
Icon: ⁶⁴
Canonical:
FalsePytest decorators: @skip_arch_64_bit / @unless_arch_64_bit
Members (11 Architecture): AARCH64, LOONGARCH64, MIPS64, MIPS64EL, PPC64, PPC64LE, RISCV64, S390X, SPARC64, WASM64, X86_64
- extra_platforms.group_data.BSD = Group(id='bsd', name='Any BSD')¶
All BSD platforms.
Note
Are considered of this family (according Wikipedia):
386BSD (FreeBSD, NetBSD, OpenBSD, DragonFly BSD)
NeXTSTEP
Darwin (macOS, iOS, audioOS, iPadOS, tvOS, watchOS, bridgeOS)
SunOS
Ultrix
ID:
bsdName: Any BSD
Icon: 🅱️+
Canonical:
True⬥Pytest decorators: @skip_bsd / @unless_bsd
Members (6 Platform): FREEBSD, MACOS, MIDNIGHTBSD, NETBSD, OPENBSD, SUNOS
- extra_platforms.group_data.BSD_WITHOUT_MACOS = Group(id='bsd_without_macos', name='Any BSD excluding macOS')¶
All BSD platforms, without macOS.
This is useful to avoid macOS-specific workarounds on BSD platforms.
ID:
bsd_without_macosName: Any BSD excluding macOS
Icon: 🅱️
Canonical:
FalsePytest decorators: @skip_bsd_without_macos / @unless_bsd_without_macos
Members (5 Platform): FREEBSD, MIDNIGHTBSD, NETBSD, OPENBSD, SUNOS
- extra_platforms.group_data.IBM_MAINFRAME = Group(id='ibm_mainframe', name='IBM mainframe')¶
IBM mainframe architectures.
ID:
ibm_mainframeName: IBM mainframe
Icon: 🏢
Canonical:
True⬥Pytest decorators: @skip_ibm_mainframe / @unless_ibm_mainframe
Members (1 Architecture): S390X
- extra_platforms.group_data.LINUX = Group(id='linux', name='Any Linux distribution')¶
All distributions based on a Linux kernel.
ID:
linuxName: Any Linux distribution
Icon: 🐧
Canonical:
True⬥Pytest decorators: @skip_linux / @unless_linux
Members (34 Platform): ALTLINUX, AMZN, ANDROID, ARCH, BUILDROOT, CACHYOS, CENTOS, CLOUDLINUX, DEBIAN, EXHERBO, FEDORA, GENTOO, GUIX, IBM_POWERKVM, KVMIBM, LINUXMINT, MAGEIA, MANDRIVA, NOBARA, OPENSUSE, ORACLE, PARALLELS, PIDORA, RASPBIAN, RHEL, ROCKY, SCIENTIFIC, SLACKWARE, SLES, TUMBLEWEED, TUXEDO, UBUNTU, ULTRAMARINE, XENSERVER
- extra_platforms.group_data.LINUX_LAYERS = Group(id='linux_layers', name='Any Linux compatibility layers')¶
Interfaces that allows Linux binaries to run on a different host system.
ID:
linux_layersName: Any Linux compatibility layers
Icon: ≚
Canonical:
True⬥Pytest decorators: @skip_linux_layers / @unless_linux_layers
- extra_platforms.group_data.LINUX_LIKE = Group(id='linux_like', name='Any Linux and compatibility layers')¶
Sum of all Linux distributions and Linux compatibility layers.
ID:
linux_likeName: Any Linux and compatibility layers
Icon: 🐧+
Canonical:
FalsePytest decorators: @skip_linux_like / @unless_linux_like
Members (36 Platform): ALTLINUX, AMZN, ANDROID, ARCH, BUILDROOT, CACHYOS, CENTOS, CLOUDLINUX, DEBIAN, EXHERBO, FEDORA, GENTOO, GUIX, IBM_POWERKVM, KVMIBM, LINUXMINT, MAGEIA, MANDRIVA, NOBARA, OPENSUSE, ORACLE, PARALLELS, PIDORA, RASPBIAN, RHEL, ROCKY, SCIENTIFIC, SLACKWARE, SLES, TUMBLEWEED, TUXEDO, UBUNTU, ULTRAMARINE, WSL1, WSL2, XENSERVER
- extra_platforms.group_data.LOONGARCH = Group(id='loongarch', name='LoongArch')¶
LoongArch architecture.
ID:
loongarchName: LoongArch
Icon: 🐉
Canonical:
True⬥Pytest decorators: @skip_loongarch / @unless_loongarch
Members (1 Architecture): LOONGARCH64
- extra_platforms.group_data.OTHER_UNIX = Group(id='other_unix', name='Any other Unix')¶
All other Unix platforms.
Note
Are considered of this family (according Wikipedia):
Coherent
GNU/Hurd
HarmonyOS
LiteOS
LynxOS
Minix
MOS
OSF/1
QNX
BlackBerry 10
Research Unix
SerenityOS
ID:
other_unixName: Any other Unix
Icon: ⊎
Canonical:
True⬥Pytest decorators: @skip_other_unix / @unless_other_unix
- extra_platforms.group_data.POWERPC = Group(id='powerpc', name='PowerPC family')¶
All PowerPC-based architectures.
ID:
powerpcName: PowerPC family
Icon: ⚡
Canonical:
True⬥Pytest decorators: @skip_powerpc / @unless_powerpc
Members (3 Architecture): PPC, PPC64, PPC64LE
- extra_platforms.group_data.RISCV = Group(id='riscv', name='RISC-V family')¶
All RISC-V-based architectures.
ID:
riscvName: RISC-V family
Icon: Ⅴ
Canonical:
True⬥Pytest decorators: @skip_riscv / @unless_riscv
Members (2 Architecture): RISCV32, RISCV64
- extra_platforms.group_data.SYSTEM_V = Group(id='system_v', name='AT&T System Five')¶
All Unix platforms derived from AT&T System Five.
Note
Are considered of this family (according Wikipedia):
A/UX
AIX
HP-UX
IRIX
OpenServer
Solaris
OpenSolaris
Illumos
Tru64
UNIX
UnixWare
ID:
system_vName: AT&T System Five
Icon: 𝐕
Canonical:
True⬥Pytest decorators: @skip_system_v / @unless_system_v
- extra_platforms.group_data.UNIX = Group(id='unix', name='Any Unix')¶
All Unix-like operating systems and compatibility layers.
ID:
unixName: Any Unix
Icon: ⨷
Canonical:
FalsePytest decorators: @skip_unix / @unless_unix
Members (46 Platform): AIX, ALTLINUX, AMZN, ANDROID, ARCH, BUILDROOT, CACHYOS, CENTOS, CLOUDLINUX, CYGWIN, DEBIAN, EXHERBO, FEDORA, FREEBSD, GENTOO, GUIX, HURD, IBM_POWERKVM, KVMIBM, LINUXMINT, MACOS, MAGEIA, MANDRIVA, MIDNIGHTBSD, NETBSD, NOBARA, OPENBSD, OPENSUSE, ORACLE, PARALLELS, PIDORA, RASPBIAN, RHEL, ROCKY, SCIENTIFIC, SLACKWARE, SLES, SOLARIS, SUNOS, TUMBLEWEED, TUXEDO, UBUNTU, ULTRAMARINE, WSL1, WSL2, XENSERVER
- extra_platforms.group_data.UNIX_LAYERS = Group(id='unix_layers', name='Any Unix compatibility layers')¶
Interfaces that allows Unix binaries to run on a different host system.
Note
Are considered of this family (according Wikipedia):
Cygwin
Darling
Eunice
GNV
Interix
MachTen
Microsoft POSIX subsystem
MKS Toolkit
PASE
P.I.P.S.
PWS/VSE-AF
UNIX System Services
UserLAnd Technologies
Windows Services for UNIX
ID:
unix_layersName: Any Unix compatibility layers
Icon: ≛
Canonical:
True⬥Pytest decorators: @skip_unix_layers / @unless_unix_layers
- extra_platforms.group_data.UNIX_WITHOUT_MACOS = Group(id='unix_without_macos', name='Any Unix excluding macOS')¶
All Unix platforms, without macOS.
This is useful to avoid macOS-specific workarounds on Unix platforms.
ID:
unix_without_macosName: Any Unix excluding macOS
Icon: ⨂
Canonical:
FalsePytest decorators: @skip_unix_without_macos / @unless_unix_without_macos
Members (45 Platform): AIX, ALTLINUX, AMZN, ANDROID, ARCH, BUILDROOT, CACHYOS, CENTOS, CLOUDLINUX, CYGWIN, DEBIAN, EXHERBO, FEDORA, FREEBSD, GENTOO, GUIX, HURD, IBM_POWERKVM, KVMIBM, LINUXMINT, MAGEIA, MANDRIVA, MIDNIGHTBSD, NETBSD, NOBARA, OPENBSD, OPENSUSE, ORACLE, PARALLELS, PIDORA, RASPBIAN, RHEL, ROCKY, SCIENTIFIC, SLACKWARE, SLES, SOLARIS, SUNOS, TUMBLEWEED, TUXEDO, UBUNTU, ULTRAMARINE, WSL1, WSL2, XENSERVER
- extra_platforms.group_data.UNKNOWN = Group(id='unknown', name='Unknown')¶
Unknown or unrecognized traits.
ID:
unknownName: Unknown
Icon: ❓
Canonical:
True⬥Pytest decorators: @skip_unknown / @unless_unknown
Members (1 Architecture, 1 CI, 1 Platform): UNKNOWN_ARCHITECTURE, UNKNOWN_CI, UNKNOWN_PLATFORM
- extra_platforms.group_data.WEBASSEMBLY = Group(id='webassembly', name='WebAssembly')¶
WebAssembly architectures.
ID:
webassemblyName: WebAssembly
Icon: 🌐
Canonical:
True⬥Pytest decorators: @skip_webassembly / @unless_webassembly
Members (2 Architecture): WASM32, WASM64
- extra_platforms.group_data.X86 = Group(id='x86', name='x86 family')¶
All x86-based architectures (Intel-compatible).
ID:
x86Name: x86 family
Icon: 𝘅
Canonical:
True⬥Pytest decorators: @skip_x86 / @unless_x86
Members (4 Architecture): I386, I586, I686, X86_64