jaxsim 0.7.1.dev18__tar.gz → 0.7.1.dev28__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/.github/workflows/gpu_benchmark.yml +19 -14
  2. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/PKG-INFO +1 -1
  3. jaxsim-0.7.1.dev28/pixi.lock +3 -0
  4. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/pyproject.toml +1 -0
  5. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/_version.py +2 -2
  6. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim.egg-info/PKG-INFO +1 -1
  7. jaxsim-0.7.1.dev18/pixi.lock +0 -3
  8. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/.devcontainer/Dockerfile +0 -0
  9. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/.devcontainer/devcontainer.json +0 -0
  10. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/.gitattributes +0 -0
  11. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/.github/CODEOWNERS +0 -0
  12. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/.github/dependabot.yml +0 -0
  13. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/.github/release.yml +0 -0
  14. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/.github/workflows/ci_cd.yml +0 -0
  15. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/.github/workflows/pixi.yml +0 -0
  16. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/.github/workflows/read_the_docs.yml +0 -0
  17. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/.gitignore +0 -0
  18. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/.pre-commit-config.yaml +0 -0
  19. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/.readthedocs.yaml +0 -0
  20. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/CONTRIBUTING.md +0 -0
  21. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/LICENSE +0 -0
  22. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/README.md +0 -0
  23. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/docs/Makefile +0 -0
  24. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/docs/conf.py +0 -0
  25. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/docs/examples.rst +0 -0
  26. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/docs/guide/configuration.rst +0 -0
  27. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/docs/guide/install.rst +0 -0
  28. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/docs/index.rst +0 -0
  29. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/docs/make.bat +0 -0
  30. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/docs/modules/api.rst +0 -0
  31. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/docs/modules/math.rst +0 -0
  32. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/docs/modules/mujoco.rst +0 -0
  33. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/docs/modules/parsers.rst +0 -0
  34. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/docs/modules/rbda.rst +0 -0
  35. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/docs/modules/typing.rst +0 -0
  36. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/docs/modules/utils.rst +0 -0
  37. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/environment.yml +0 -0
  38. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/examples/.gitattributes +0 -0
  39. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/examples/.gitignore +0 -0
  40. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/examples/README.md +0 -0
  41. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/examples/assets/build_cartpole_urdf.py +0 -0
  42. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/examples/assets/cartpole.urdf +0 -0
  43. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/examples/jaxsim_as_multibody_dynamics_library.ipynb +0 -0
  44. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/examples/jaxsim_as_physics_engine.ipynb +0 -0
  45. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/examples/jaxsim_as_physics_engine_advanced.ipynb +0 -0
  46. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/examples/jaxsim_for_robot_controllers.ipynb +0 -0
  47. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/setup.cfg +0 -0
  48. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/__init__.py +0 -0
  49. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/api/__init__.py +0 -0
  50. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/api/actuation_model.py +0 -0
  51. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/api/com.py +0 -0
  52. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/api/common.py +0 -0
  53. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/api/contact.py +0 -0
  54. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/api/data.py +0 -0
  55. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/api/frame.py +0 -0
  56. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/api/integrators.py +0 -0
  57. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/api/joint.py +0 -0
  58. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/api/kin_dyn_parameters.py +0 -0
  59. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/api/link.py +0 -0
  60. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/api/model.py +0 -0
  61. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/api/ode.py +0 -0
  62. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/api/references.py +0 -0
  63. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/exceptions.py +0 -0
  64. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/logging.py +0 -0
  65. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/math/__init__.py +0 -0
  66. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/math/adjoint.py +0 -0
  67. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/math/cross.py +0 -0
  68. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/math/inertia.py +0 -0
  69. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/math/joint_model.py +0 -0
  70. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/math/quaternion.py +0 -0
  71. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/math/rotation.py +0 -0
  72. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/math/skew.py +0 -0
  73. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/math/transform.py +0 -0
  74. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/math/utils.py +0 -0
  75. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/mujoco/__init__.py +0 -0
  76. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/mujoco/__main__.py +0 -0
  77. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/mujoco/loaders.py +0 -0
  78. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/mujoco/model.py +0 -0
  79. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/mujoco/utils.py +0 -0
  80. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/mujoco/visualizer.py +0 -0
  81. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/parsers/__init__.py +0 -0
  82. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/parsers/descriptions/__init__.py +0 -0
  83. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/parsers/descriptions/collision.py +0 -0
  84. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/parsers/descriptions/joint.py +0 -0
  85. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/parsers/descriptions/link.py +0 -0
  86. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/parsers/descriptions/model.py +0 -0
  87. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/parsers/kinematic_graph.py +0 -0
  88. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/parsers/rod/__init__.py +0 -0
  89. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/parsers/rod/meshes.py +0 -0
  90. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/parsers/rod/parser.py +0 -0
  91. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/parsers/rod/utils.py +0 -0
  92. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/rbda/__init__.py +0 -0
  93. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/rbda/aba.py +0 -0
  94. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/rbda/actuation/__init__.py +0 -0
  95. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/rbda/actuation/common.py +0 -0
  96. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/rbda/collidable_points.py +0 -0
  97. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/rbda/contacts/__init__.py +0 -0
  98. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/rbda/contacts/common.py +0 -0
  99. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/rbda/contacts/relaxed_rigid.py +0 -0
  100. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/rbda/contacts/rigid.py +0 -0
  101. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/rbda/contacts/soft.py +0 -0
  102. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/rbda/crba.py +0 -0
  103. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/rbda/forward_kinematics.py +0 -0
  104. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/rbda/jacobian.py +0 -0
  105. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/rbda/rnea.py +0 -0
  106. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/rbda/utils.py +0 -0
  107. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/terrain/__init__.py +0 -0
  108. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/terrain/terrain.py +0 -0
  109. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/typing.py +0 -0
  110. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/utils/__init__.py +0 -0
  111. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/utils/jaxsim_dataclass.py +0 -0
  112. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/utils/tracing.py +0 -0
  113. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim/utils/wrappers.py +0 -0
  114. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim.egg-info/SOURCES.txt +0 -0
  115. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim.egg-info/dependency_links.txt +0 -0
  116. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim.egg-info/requires.txt +0 -0
  117. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/src/jaxsim.egg-info/top_level.txt +0 -0
  118. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/tests/__init__.py +0 -0
  119. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/tests/conftest.py +0 -0
  120. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/tests/test_actuation.py +0 -0
  121. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/tests/test_api_com.py +0 -0
  122. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/tests/test_api_contact.py +0 -0
  123. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/tests/test_api_data.py +0 -0
  124. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/tests/test_api_frame.py +0 -0
  125. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/tests/test_api_joint.py +0 -0
  126. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/tests/test_api_link.py +0 -0
  127. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/tests/test_api_model.py +0 -0
  128. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/tests/test_api_model_hw_parametrization.py +0 -0
  129. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/tests/test_automatic_differentiation.py +0 -0
  130. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/tests/test_benchmark.py +0 -0
  131. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/tests/test_exceptions.py +0 -0
  132. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/tests/test_meshes.py +0 -0
  133. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/tests/test_pytree.py +0 -0
  134. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/tests/test_simulations.py +0 -0
  135. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/tests/test_visualizer.py +0 -0
  136. {jaxsim-0.7.1.dev18 → jaxsim-0.7.1.dev28}/tests/utils_idyntree.py +0 -0
@@ -16,29 +16,28 @@ jobs:
16
16
  benchmark:
17
17
  runs-on: self-hosted
18
18
  container:
19
- image: ghcr.io/nvidia/jax@sha256:fdc493f32727405514caaecd9f0ea508a56cf645424cc66e03fedd8141c493bb
20
- options: --rm --gpus all --ipc=host --ulimit memlock=-1 --ulimit stack=67108864
19
+ image: ghcr.io/prefix-dev/pixi:0.46.0-noble@sha256:c12bcbe8ba5dfd71867495d3471b95a6993b79cc7de7eafec016f8f59e4e4961
20
+ options: --rm --gpus all --ipc=host --ulimit memlock=-1 --ulimit stack=67108864 -e "TERM=xterm-256color"
21
21
 
22
22
  steps:
23
+ - name: Install Git and Git-LFS
24
+ run: |
25
+ apt update && apt install -y git git-lfs
26
+
23
27
  - name: Checkout repository
24
28
  uses: actions/checkout@v4
29
+ with:
30
+ lfs: true
31
+ fetch-depth: 0
25
32
 
26
- - name: Set up environment
27
- run: |
28
- pip install .[all]
29
-
30
- - name: Install Gazebo SDF
33
+ - name: Fetch pixi.lock from LFS
31
34
  run: |
32
- apt update && apt install -y lsb-release wget
33
- sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'
34
- wget http://packages.osrfoundation.org/gazebo.key -O - | apt-key add -
35
- apt-get update
36
- apt install -y libsdformat14-dev libsdformat14
35
+ git config --global safe.directory /__w/jaxsim/jaxsim
36
+ git lfs checkout pixi.lock
37
37
 
38
38
  - name: Get main branch SHA
39
39
  id: get-main-branch-sha
40
40
  run: |
41
- git config --global --add safe.directory /__w/jaxsim/jaxsim
42
41
  SHA=$(git rev-parse origin/main)
43
42
  echo "sha=$SHA" >> $GITHUB_OUTPUT
44
43
 
@@ -49,9 +48,15 @@ jobs:
49
48
  path: ./cache
50
49
  key: ${{ steps.get-main-branch-sha.outputs.sha }}-${{ runner.os }}-benchmark
51
50
 
51
+ - name: Ensure version file is written
52
+ run: |
53
+ pixi run --frozen --environment gpu python -m setuptools_scm --force-write-version-file
54
+
52
55
  - name: Run benchmark and store result
53
56
  run: |
54
- pytest tests/test_benchmark.py --gpu-only --batch-size 128 --benchmark-only --benchmark-json output.json
57
+ pixi run --frozen --environment gpu benchmark --batch-size 128 --benchmark-json output.json
58
+ env:
59
+ PY_COLORS: "1"
55
60
 
56
61
  - name: Compare benchmark results with main branch
57
62
  uses: benchmark-action/github-action-benchmark@v1.20.4
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jaxsim
3
- Version: 0.7.1.dev18
3
+ Version: 0.7.1.dev28
4
4
  Summary: A differentiable physics engine and multibody dynamics library for control and robot learning.
5
5
  Author-email: Diego Ferigo <dgferigo@gmail.com>, Filippo Luca Ferretti <filippoluca.ferretti@outlook.com>
6
6
  Maintainer-email: Filippo Luca Ferretti <filippo.ferretti@iit.it>, Alessandro Croci <alessandro.croci@iit.it>
@@ -0,0 +1,3 @@
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cd22e2f700d17caf1b56d5896009d715c3412de25b7fd9361197dba51061a38a
3
+ size 493834
@@ -262,6 +262,7 @@ pytest = "*"
262
262
  pytest-benchmark = "*"
263
263
  pytest-icdiff = "*"
264
264
  robot_descriptions = ">=1.16.0"
265
+ setuptools_scm = ">=8.3.1,<9"
265
266
 
266
267
  # ----------------
267
268
  # feature.examples
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '0.7.1.dev18'
21
- __version_tuple__ = version_tuple = (0, 7, 1, 'dev18')
20
+ __version__ = version = '0.7.1.dev28'
21
+ __version_tuple__ = version_tuple = (0, 7, 1, 'dev28')
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: jaxsim
3
- Version: 0.7.1.dev18
3
+ Version: 0.7.1.dev28
4
4
  Summary: A differentiable physics engine and multibody dynamics library for control and robot learning.
5
5
  Author-email: Diego Ferigo <dgferigo@gmail.com>, Filippo Luca Ferretti <filippoluca.ferretti@outlook.com>
6
6
  Maintainer-email: Filippo Luca Ferretti <filippo.ferretti@iit.it>, Alessandro Croci <alessandro.croci@iit.it>
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:6f90d0084533761c9d9eca88087a5ab53994efee72ecaa2e3efcd91790633d95
3
- size 493137
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes