Skip to main content

pyarx

pyarx is a modern, declarative, Python-based IDL (Interface Definition Language) and compiler designed to translate software architectures, interfaces, and data types into standardized, fully-conforming Adaptive AUTOSAR ARXML and JSON Schema representations.

Instead of writing thousands of lines of verbose, low-level XML or using highly boilerplate metamodel scripts, you can specify your entire system in clean, readable Python and compile it instantly.


Elegant Declarative API

pyarx uses native Python 3 subclassing and type annotations to declare structured types, enumerations, service interfaces, events, and methods.

from typing import Optional, Annotated
import enum
import dataclasses
from pyarx import (
    Struct,
    Enum,
    ServiceInterface,
    UInt16,
    Float32,
    Array,
    Vector,
    event,
    field,
    raises,
    namespace,
)

# 1. Standard Python Enums are supported natively
class SystemStatus(enum.Enum):
    OK = 0
    DEGRADED = 1
    CRITICAL = 2

# 2. Modern struct type declaration with limits and defaults
class GpsLocation(Struct):
    latitude: Annotated[Float32, "min=-90.0", "max=90.0", "unit=deg"]
    longitude: Annotated[Float32, "min=-180.0", "max=180.0", "unit=deg"]
    altitude: Float32 = 0.0

# 3. Standard dataclasses are automatically mapped to Structs
@dataclasses.dataclass
class CabinClimate:
    target_temp: float = 22.0
    fan_speed: int = 3
    air_quality: Optional[Annotated[int, "min=0", "max=500"]] = None

# 4. Service Interfaces with Events, Fields, and Methods
@namespace("car.comfort", cpp="car::comfort::service")
class CabinService(ServiceInterface):
    
    # Publish-Subscribe Event payload
    @event
    def on_climate_changed(self) -> CabinClimate:
        pass

    # Constrained field with notifications
    @field(min=0, max=100, unit="%", has_notifier=True)
    def ambient_brightness(self) -> UInt16:
        pass

    # Method showcasing arrays/vectors and standard types
    def SetRecentRoutes(self, routes: Vector[GpsLocation, 10]) -> bool:
        pass

Key Features

  • Standard Python Type Support: Declare your IDL fields and structures directly with standard library @dataclass, NamedTuple, and enum.Enum classes. Under the hood, pyarx automatically wraps them as AUTOSAR compliant structs and enums.
  • Flexible Arrays & Bounded/Unbounded Vectors: Multiple syntax choices are supported out of the box:
    • Fixed-Size Arrays: Array[T, size], Array(T, size=N)
    • Bounded Vectors: Vector[T, max_size], Vector(T, max_size=M)
    • Unbounded Vectors: Vector[T], list[T], List[T], or compact literal [T]
  • Optional Types: Use Optional[T] or PEP 604 T | None. These are parsed and serialized as <IS-OPTIONAL>true</IS-OPTIONAL> in ARXML (Adaptive SOME/IP TLV compliant) and "is_optional": true in JSON.
  • Annotated Constraints: Unpack PEP 593 typing.Annotated[BaseType, "min=X", "max=Y", "unit=Z", "default=W"] directly.
  • C++ Namespacing: Support for specifying namespaces inside models using _namespace_ / _cpp_namespace_ attributes, or with decorators @namespace("car.adas", cpp="car::adas") and @cpp_namespace("...").
  • Conforming Multi-Format Emitters:
    • ARXML: Generates standard-compliant AUTOSAR Adaptive system descriptions.
    • JSON Schema: Generates clean, structured JSON schemas.

Project Structure

  • src/pyarx/:
    • types.py: AUTOSAR primitives, dynamic standard-type converters, and resolve_type.
    • interfaces.py: Service Interface decoration logic, events, fields, methods, and application errors.
    • emitters.py: Translation layers for ARXML and JSON.
    • compiler.py: Recursive compilation driver.
    • cli.py: Entrypoint for command-line compilations.
  • examples/: Full recursive showcase models (e.g. examples/car/) and compile script.
  • tests/: Comprehensive unit tests confirming parser features, validation, and emitter schemas.

Quick Installation

You can install pyarx directly from GitHub using pip:

pip install git+https://github.com/pyarxlab/pyarx.git

Development & Usage

Setup Environment

# Create and activate virtual environment
python3 -m venv .venv
source .venv/bin/activate

# Install package in editable mode with development dependencies
pip install -e ".[dev]"

Running Tests

pytest

Compiling Models

You can compile a directory package (recursively scanning all Python submodules) or a single .py file into ARXML or JSON using either the Python API or the Command Line Interface.

Via CLI:

# Compile package recursively to ARXML (defaults to saving as car.arxml in CWD)
pyarx arxml ./examples/car

# Compile a single Python IDL file to ARXML (defaults to saving as powertrain.arxml in CWD)
pyarx arxml ./examples/car/powertrain.py

# Compile package recursively to JSON (defaults to saving as car.json in CWD)
pyarx json ./examples/car

# Specify an explicit output path
pyarx arxml ./examples/car/powertrain.py -o ./powertrain_system.arxml

Via Python API:

from pyarx import compile_package

# Recursively crawl and compile a package directory to ARXML
arxml_content = compile_package("examples/car", format="arxml")

with open("car_system.arxml", "w") as f:
    f.write(arxml_content)

Disclaimer

This project is provided “as is” without warranty of any kind.

Support

This is an independent project maintained in my personal time.
Support is best-effort only.

Release files for pyarxlab 0.2.11

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyarxlab 0.2.11
File Size Uploaded
pyarxlab-0.2.11.tar.gz 10.8 MB Details

Built distribution (wheel)

Table of built distributions (wheels) for pyarxlab 0.2.11
File Interpreter ABI Platform
pyarxlab-0.2.11-py3-none-any.whl Python 3 none any Details

Total release size: 21.8 MB

Release files / pyarxlab-0.2.11.tar.gz

Download URL pyarxlab-0.2.11.tar.gz
Size 10.8 MB
Tags Source
SHA-256 checksum
How to use checksums
52533733ebe303e12e0abce329eb9a61b048e68e38d45ac0a902c6c28abfc083
BLAKE2b-256 checksum
How to use checksums
dfd91c56ef646f1d86c585cd6433bd7fe48c3c415e520bbd9e46f2fd6fe83fd7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.3

Release files / pyarxlab-0.2.11-py3-none-any.whl

Download URL pyarxlab-0.2.11-py3-none-any.whl
Size 11.0 MB
Tags Python 3
SHA-256 checksum
How to use checksums
b594ea4b33c4b17dad14469c2febd3bf6ac7872ffa360c9c53d07e52980da71e
BLAKE2b-256 checksum
How to use checksums
ecbfd003e7db7ef293925a96e4c19f8c5395b9943f4a0fc4454525bba9fc8842
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.3

Release history Release notifications | RSS feed

0.2.12

2 release files

This release

0.2.11 This release

2 release files

0.2.9

2 release files

0.2.8

2 release files

0.2.7

2 release files

0.2.6

2 release files

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page