Skip to content

Commit 9c15d4b

Browse files
committed
Initial version
0 parents  commit 9c15d4b

Some content is hidden

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

55 files changed

+50966
-0
lines changed

.github/workflows/main.yml

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

.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)