Skip to content

Commit 29500a2

Browse files
committed
Initial version
0 parents  commit 29500a2

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

54 files changed

+50970
-0
lines changed

.github/workflows/main.yml

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
name: CI
2+
3+
on:
4+
push:
5+
branches:
6+
- "**"
7+
tags:
8+
- 'v*'
9+
pull_request:
10+
branches:
11+
- "**"
12+
13+
jobs:
14+
test:
15+
runs-on: ubuntu-latest
16+
17+
strategy:
18+
matrix:
19+
python-version:
20+
- "3.8"
21+
- "3.9"
22+
- "3.10"
23+
- "3.11"
24+
- "3.12"
25+
26+
steps:
27+
- name: Checkout code
28+
uses: actions/checkout@v4
29+
30+
- name: Install uv
31+
uses: astral-sh/setup-uv@v5
32+
with:
33+
# Install a specific version of uv.
34+
enable-cache: true
35+
version: "0.6.12"
36+
python-version: ${{ matrix.python-version }}
37+
38+
- name: Install the project
39+
run: uv sync --dev
40+
41+
- name: Run tests with coverage
42+
run: |
43+
uv run pytest --cov=simple_simulation --cov-report=xml --cov-report=html --cov-report=term-missing | tee pytest-coverage.log
44+
exit_code=${PIPESTATUS[0]}
45+
exit $exit_code
46+
47+
- name: Upload coverage files
48+
uses: actions/upload-artifact@v4
49+
if: ${{ matrix.python-version == '3.8' }}
50+
with:
51+
name: coverage-files
52+
path: |
53+
coverage.xml
54+
pytest-coverage.log
55+
htmlcov/
56+
compression-level: 9
57+
58+
lint-and-format:
59+
runs-on: ubuntu-latest
60+
61+
steps:
62+
- name: Checkout code
63+
uses: actions/checkout@v4
64+
with:
65+
fetch-depth: 2
66+
67+
- name: Install uv
68+
uses: astral-sh/setup-uv@v5
69+
with:
70+
# Install a specific version of uv.
71+
enable-cache: true
72+
version: "0.6.12"
73+
74+
- name: "Set up Python"
75+
uses: actions/setup-python@v5
76+
with:
77+
python-version-file: ".python-version"
78+
79+
- name: Install the project
80+
run: uv sync --dev
81+
82+
- name: Run pre-commit hooks
83+
run: |
84+
uv run pre-commit run --all-files || (
85+
git config --global user.name "github-actions[bot]"
86+
git config --global user.email "github-actions[bot]@users.noreply.github.com"
87+
git add .
88+
git commit -m "Apply Ruff formatting"
89+
git push
90+
)

.gitignore

Lines changed: 168 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,168 @@
1+
# Byte-compiled / optimized / DLL files
2+
__pycache__/
3+
*.py[cod]
4+
*$py.class
5+
6+
# C extensions
7+
*.so
8+
9+
# Distribution / packaging
10+
.Python
11+
build/
12+
develop-eggs/
13+
dist/
14+
downloads/
15+
eggs/
16+
.eggs/
17+
lib/
18+
lib64/
19+
parts/
20+
sdist/
21+
var/
22+
wheels/
23+
share/python-wheels/
24+
*.egg-info/
25+
.installed.cfg
26+
*.egg
27+
MANIFEST
28+
29+
# PyInstaller
30+
# Usually these files are written by a python script from a template
31+
# before PyInstaller builds the exe, so as to inject date/other infos into it.
32+
*.manifest
33+
*.spec
34+
35+
# Installer logs
36+
pip-log.txt
37+
pip-delete-this-directory.txt
38+
39+
# Unit test / coverage reports
40+
htmlcov/
41+
.tox/
42+
.nox/
43+
.coverage
44+
.coverage.*
45+
.cache
46+
nosetests.xml
47+
coverage.xml
48+
*.cover
49+
*.py,cover
50+
.hypothesis/
51+
.pytest_cache/
52+
cover/
53+
54+
# Translations
55+
*.mo
56+
*.pot
57+
58+
# Django stuff:
59+
*.log
60+
local_settings.py
61+
db.sqlite3
62+
db.sqlite3-journal
63+
64+
# Flask stuff:
65+
instance/
66+
.webassets-cache
67+
68+
# Scrapy stuff:
69+
.scrapy
70+
71+
# Sphinx documentation
72+
docs/_build/
73+
74+
# PyBuilder
75+
.pybuilder/
76+
target/
77+
78+
# Jupyter Notebook
79+
.ipynb_checkpoints
80+
81+
# IPython
82+
profile_default/
83+
ipython_config.py
84+
85+
# pyenv
86+
# For a library or package, you might want to ignore these files since the code is
87+
# intended to run in multiple environments; otherwise, check them in:
88+
# .python-version
89+
90+
# pipenv
91+
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92+
# However, in case of collaboration, if having platform-specific dependencies or dependencies
93+
# having no cross-platform support, pipenv may install dependencies that don't work, or not
94+
# install all needed dependencies.
95+
#Pipfile.lock
96+
97+
# poetry
98+
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
99+
# This is especially recommended for binary packages to ensure reproducibility, and is more
100+
# commonly ignored for libraries.
101+
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
102+
#poetry.lock
103+
104+
# pdm
105+
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
106+
#pdm.lock
107+
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
108+
# in version control.
109+
# https://pdm.fming.dev/#use-with-ide
110+
.pdm.toml
111+
112+
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
113+
__pypackages__/
114+
115+
# Celery stuff
116+
celerybeat-schedule
117+
celerybeat.pid
118+
119+
# SageMath parsed files
120+
*.sage.py
121+
122+
# Environments
123+
.env
124+
.venv
125+
env/
126+
venv/
127+
ENV/
128+
env.bak/
129+
venv.bak/
130+
131+
# Spyder project settings
132+
.spyderproject
133+
.spyproject
134+
135+
# Rope project settings
136+
.ropeproject
137+
138+
# mkdocs documentation
139+
/site
140+
141+
# mypy
142+
.mypy_cache/
143+
.dmypy.json
144+
dmypy.json
145+
146+
# Pyre type checker
147+
.pyre/
148+
149+
# pytype static type analyzer
150+
.pytype/
151+
152+
# Cython debug symbols
153+
cython_debug/
154+
155+
# PyCharm
156+
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
157+
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
158+
# and can be added to the global gitignore or merged into this file. For a more nuclear
159+
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
160+
.idea/
161+
162+
data/
163+
results/
164+
test/**/test_results/
165+
coinhsl/
166+
*.prof
167+
examples/*.gif
168+
examples/**/*.mp4

.gitlab-ci.yml

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
image:
2+
name: ubuntu:24.04
3+
4+
stages:
5+
- lint
6+
- test
7+
- package
8+
9+
lint:
10+
stage: lint
11+
before_script:
12+
- apt-get update && apt-get install -y curl build-essential clang
13+
- curl -LsSf https://astral.sh/uv/install.sh | sh
14+
- source $HOME/.local/bin/env
15+
- uv sync --all-extras --dev
16+
script:
17+
- uv run ruff check --output-format=gitlab --output-file=codequality.json || uv run ruff check --output-format=concise --output-file=codequality.txt || uv run ruff check --output-format=concise
18+
artifacts:
19+
paths:
20+
- public
21+
- codequality.*
22+
reports:
23+
codequality: codequality.json
24+
when: always
25+
expire_in: '30 days'
26+
27+
test:
28+
stage: test
29+
before_script:
30+
- apt-get update && apt-get install -y curl build-essential clang
31+
- curl -LsSf https://astral.sh/uv/install.sh | sh
32+
- source $HOME/.local/bin/env
33+
- uv sync --dev
34+
- apt-get update && apt-get install -y build-essential cmake git python3-dev python3-numpy libavcodec-dev libavformat-dev libswscale-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev libgtk-3-dev libpng-dev libjpeg-dev libopenexr-dev libtiff-dev libwebp-dev libopencv-dev x264 libx264-dev libssl-dev ffmpeg # install all opencv dependencies
35+
script:
36+
- uv run pytest --junitxml=report.xml --cov=simple_simulation --cov-report=xml --cov-report=html --cov-report=term-missing test
37+
- uv run pycobertura show --format html --output coverage_cobertura.html coverage.xml
38+
artifacts:
39+
when: always
40+
expire_in: "30 days"
41+
reports:
42+
junit: report.xml
43+
coverage_report:
44+
coverage_format: cobertura
45+
path: coverage.xml
46+
paths:
47+
- coverage.xml
48+
- htmlcov
49+
- coverage_cobertura.html
50+
51+
package:
52+
stage: package
53+
only:
54+
- tags
55+
before_script:
56+
- apt-get update && apt-get install -y curl build-essential clang
57+
- curl -LsSf https://astral.sh/uv/install.sh | sh
58+
- source $HOME/.local/bin/env
59+
- uv sync --all-extras --group=build
60+
script:
61+
- uv run -m build
62+
- TWINE_PASSWORD=${CI_JOB_TOKEN} TWINE_USERNAME=gitlab-ci-token uv run -m twine upload --verbose --repository-url ${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/pypi dist/*
63+
rules:

.pre-commit-config.yaml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
minimum_pre_commit_version: "3.5.0"
2+
3+
repos:
4+
- repo: https://github.com/astral-sh/ruff-pre-commit
5+
# Ruff version.
6+
rev: v0.9.10
7+
hooks:
8+
# Run the linter.
9+
- id: ruff
10+
types_or: [ python, pyi ]
11+
args: [ --fix ]
12+
# Run the formatter.
13+
- id: ruff-format
14+
types_or: [ python, pyi ]

.python-version

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
3.8

LICENSE

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
MIT License
2+
3+
Copyright (c) 2025 Institute for Automotive Engineering RWTH Aachen University
4+
5+
Permission is hereby granted, free of charge, to any person obtaining a copy
6+
of this software and associated documentation files (the "Software"), to deal
7+
in the Software without restriction, including without limitation the rights
8+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9+
copies of the Software, and to permit persons to whom the Software is
10+
furnished to do so, subject to the following conditions:
11+
12+
The above copyright notice and this permission notice shall be included in all
13+
copies or substantial portions of the Software.
14+
15+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21+
SOFTWARE.

0 commit comments

Comments
 (0)