Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
ed52992
Documentation to the OpenAlea guidelines: doc/ (renamed from docs/), …
GeraultTr Nov 2, 2026
c9256a7
FspmTF.jl, the Julia codec (bindings/julia/FspmTF): the GLB container…
GeraultTr Nov 2, 2026
f7e1d80
Python codec: the buffer's byteLength counts the binary chunk's paddi…
GeraultTr Nov 2, 2026
f738c5d
FspmTF.jl under the MIT licence, as VirtualPlantLab
GeraultTr Nov 2, 2026
7ea08e8
FspmTF.jl, MTGs from other platforms' graphs: ids from 0 or sparse nu…
GeraultTr Nov 2, 2026
f94f227
The C++ codec (bindings/cpp): the GLB container, the data model, read…
GeraultTr Nov 2, 2026
2b7a6a1
FspmTF.jl and VirtualPlantLab's own graphs: package extensions for Pl…
GeraultTr Nov 2, 2026
36e9c8a
The Java codec (bindings/java: Java 17, Maven, Jackson): the GLB cont…
GeraultTr Nov 2, 2026
f986f28
Each binding under its platform's licence: bindings/cpp GPL-3.0 (CPla…
GeraultTr Nov 2, 2026
70f9479
Specification 0.2 (draft, additive): from the bindings' points as the…
GeraultTr Nov 2, 2026
92c98d5
FspmTF.jl to specification 0.2: missing values in integer, text and b…
GeraultTr Nov 2, 2026
b660357
The C++ codec to specification 0.2: a column's missing mask (integers…
GeraultTr Nov 2, 2026
f969cc3
FspmTF.jl, MTG attributes named as a reserved column (e.g. order) are…
GeraultTr Nov 2, 2026
596adef
The Java codec to specification 0.2: a column's missing mask (integer…
GeraultTr Nov 2, 2026
5f5a2a7
Reading the specification (doc/reading_the_specification.md): what sp…
GeraultTr Nov 2, 2026
2142d98
CPlantBox's adapter: a soil solver's values per cell (add_cell_values…
GeraultTr Nov 2, 2026
9333fac
The reserved column order renamed sibling_order (D-14, user): order u…
GeraultTr Nov 2, 2026
632a2e0
GroIMP's fspm-TF plugin (bindings/java/groimp-plugin, GroIMP 3.0, D-8…
GeraultTr Nov 2, 2026
879f0a6
Coupling platforms (specification §11, draft for 0.3, D-13): partial …
GeraultTr Nov 3, 2026
b5e6a60
Specification 0.3 (draft) and coupling's next steps: frames say 0.3 (…
GeraultTr Nov 3, 2026
ef8fec0
Frame views (specification §8.1, draft for 0.3): views.json, an optio…
GeraultTr Nov 3, 2026
fcd2620
Lazy reading (read(path, lazy=True)): the file mapped in memory, its …
GeraultTr Nov 3, 2026
4f355eb
Docs in line with 0.3: the spec's §3 names update (partial frames); t…
GeraultTr Nov 3, 2026
754f400
Selection by scale in ParaView: the macros select_at_scale (SCALE, MO…
GeraultTr Nov 3, 2026
d063831
Selection by scale as a filter of the plugin (fspm-TF Select at scale…
GeraultTr Nov 3, 2026
203ecad
check_in_paraview --design finds the sections layer by its source (a …
GeraultTr Nov 4, 2026
a4f94f4
Renamed fspm-TF to encoding3d everywhere: the Python package openalea…
GeraultTr Nov 4, 2026
d3f91fe
check_in_paraview: the picked item shown in a render view before its …
GeraultTr Nov 4, 2026
e20c4e1
ParaView: the plugin is plugin_encoding3d.py and draws each layer at …
GeraultTr Nov 4, 2026
2b495f5
Put Back (and Show In Panel after Isolate) shows the legends Isolate …
GeraultTr Nov 5, 2026
295ba13
The ParaView reader's Time Unit (days by default): the frames' times …
GeraultTr Nov 5, 2026
0ce7e27
encoding3d depends on no platform: the CI jobs installing CPlantBox, …
GeraultTr Nov 5, 2026
64633c0
Tutorial 1, encoding3d on its own (tutorials/01_encoding3d_alone): a …
GeraultTr Nov 5, 2026
6d2d6a7
Tutorials 2a (metafspm: a scene recorded as frames, read by encoding3…
GeraultTr Nov 5, 2026
77cdd32
Tutorial 2c (CPlantBox: a plant with shoot and roots written day by d…
GeraultTr Nov 5, 2026
3364017
Tutorial 2d (GroIMP: node classes with managed fields, a plant grown …
GeraultTr Nov 5, 2026
a1e9a72
Tutorial 3 (metafspm and VirtualPlantLab on one plant: metafspm's sug…
GeraultTr Nov 5, 2026
968e570
Tutorial 4, four platforms on one plant: CPlantBox's roots and GroIMP…
GeraultTr Nov 5, 2026
4d88aaa
Tutorial 2d: the frames drawable: GroIMP's graph module has no geomet…
GeraultTr Nov 5, 2026
7390978
Specification 0.4: instance sets of shared templates (template, trans…
GeraultTr Nov 6, 2026
51f84cb
ParaView plugin: instance sets drawn as their placed templates (their…
GeraultTr Nov 6, 2026
0ccef8c
Docs of 0.4: Instances, derived fields and archives (reading, evaluat…
GeraultTr Nov 6, 2026
9e6d7b7
A part new to a write is encoded once: its key taken from the bytes t…
GeraultTr Nov 6, 2026
0c14cea
ParaView README: a layer coloured by a derived field is coloured once…
GeraultTr Nov 6, 2026
406b696
check_in_paraview.py --instances screenshots INDEX: the instances che…
GeraultTr Nov 6, 2026
75eb714
paraview/README: the instances check on a run
GeraultTr Nov 6, 2026
aac078c
Conformance of instances for every codec: archives/ (the instances se…
GeraultTr Nov 7, 2026
d2618b4
C++ codec reads and writes 0.4: instance sets (vectors, derived field…
GeraultTr Nov 7, 2026
bf6b810
Java codec reads and writes 0.4: instance sets (vectors, derived fiel…
GeraultTr Nov 7, 2026
c8a6122
Julia codec reads and writes 0.4: instance sets (vectors, derived fie…
GeraultTr Nov 7, 2026
2349c6f
Docs of 0.4 in every codec: implementations (the four codecs on 0.4, …
GeraultTr Nov 7, 2026
956648f
ParaView plugin on large frames: a hidden instances layer an empty bl…
GeraultTr Nov 9, 2026
ae8fa3f
Docs of the plugin's fixes: README (hidden instances layers, All Inst…
GeraultTr Nov 9, 2026
0b0ea57
A checked pack, then the folder removed: pack(keep_folder=False) writ…
GeraultTr Nov 9, 2026
44b4030
Tutorials 2a and 3 on metafspm release2026's API: the toy components …
GeraultTr Nov 9, 2026
00061c0
A frame written without copies: write streams the GLB piece by piece …
GeraultTr Nov 10, 2026
1be33e2
Conformance's shared parts committed: conformance/instances/parts/ wa…
GeraultTr Nov 10, 2026
ef227ab
The development plans and logs in .devplan/, ignored
GeraultTr Nov 10, 2026
5684d9a
update_badges
GeraultTr Nov 10, 2026
9a1aabe
Conda tests as CI runs them: scipy in the test extra (the instances' …
GeraultTr Nov 10, 2026
c70df4c
glTF without empty children: a part's root node (or a frame's of no d…
GeraultTr Nov 10, 2026
053c143
required_jobs
GeraultTr Nov 10, 2026
f184b46
CI installs what the Python tests import: scipy for the validate job …
GeraultTr Nov 10, 2026
8039cda
The validate job's generated-files check leaves out the evaluated val…
GeraultTr Nov 10, 2026
1a55fdb
enforce source branch and standard name for OpenAlea CI
GeraultTr Nov 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
37 changes: 23 additions & 14 deletions .github/actions/conformance/action.yml
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
# Checks a codec against fspm-TF's conformance files, in a codec's own CI, once the codec has run:
# Checks a codec against encoding3d's conformance files, in a codec's own CI, once the codec has run:
#
# - uses: ./.github/actions/conformance (in this repository; elsewhere openalea/fspm-TF/.github/actions/conformance@main)
# - uses: ./.github/actions/conformance (in this repository; elsewhere openalea/encoding3d/.github/actions/conformance@main)
# with:
# dumps: out/dumps # what the codec read: one JSON dump per conformance GLB, x.json for x.expected.json
# written: out/written # what the codec wrote: the conformance scenes, as .glb files (optional)
# written: out/written # what the codec wrote: the conformance scenes, as .glb files (optional), and
# # archives (.fspm.zip) when the codec packs
# instances: "true" # "false" for a codec reading 0.3 only: no instances (0.4) and archives
#
# Reading passes when every dump equals its expected values; writing, when every written file passes fspm-tf validate
# and Khronos' glTF-Validator with no error.
name: fspm-TF conformance
# Reading passes when every dump equals its expected values (the dumps' layout: conformance/README.md); writing, when
# every written file passes encoding3d validate and Khronos' glTF-Validator with no error.
name: encoding3d conformance
description: Compare a codec's reading of the conformance files with their expected values, and validate what it wrote
inputs:
dumps:
Expand All @@ -17,8 +19,12 @@ inputs:
description: the folder of the .glb files the codec wrote for the conformance scenes (empty to skip)
required: false
default: ""
fspm-tf:
description: the path of an fspm-TF checkout (its conformance folder and Python package)
instances:
description: whether the codec reads 0.4's instances and archives (their dumps compared); "false" skips them
required: false
default: "true"
encoding3d:
description: the path of an encoding3d checkout (its conformance folder and Python package)
required: false
default: "."
gltf-validator:
Expand All @@ -31,20 +37,23 @@ runs:
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install openalea.fspm_tf
- name: Install openalea.encoding3d
shell: bash
run: python -m pip install numpy jsonschema "${{ inputs.fspm-tf }}"
run: python -m pip install numpy jsonschema "${{ inputs.encoding3d }}"
- name: Reading
shell: bash
run: fspm-tf compare-all "${{ inputs.dumps }}" "${{ inputs.fspm-tf }}/conformance"
- name: Writing, fspm-TF validator
run: encoding3d compare-all "${{ inputs.dumps }}" "${{ inputs.encoding3d }}/conformance" ${{ inputs.instances == 'false' && '--skip-instances' || '' }}
- name: Writing, encoding3d validator
if: inputs.written != ''
shell: bash
run: find "${{ inputs.written }}" -name "*.glb" -print0 | xargs -0 fspm-tf validate
run: find "${{ inputs.written }}" \( -name "*.glb" -o -name "*.fspm.zip" \) -print0 | xargs -0 encoding3d validate
- name: Writing, Khronos' glTF-Validator
if: inputs.written != '' && runner.os == 'Linux'
shell: bash
run: |
curl -sSL -o validator.tar.xz "https://github.com/KhronosGroup/glTF-Validator/releases/download/${{ inputs.gltf-validator }}/gltf_validator-${{ inputs.gltf-validator }}-linux64.tar.xz"
tar xf validator.tar.xz gltf_validator
find "${{ inputs.written }}" -name "*.glb" -print0 | xargs -0 -n1 ./gltf_validator
find "${{ inputs.written }}" -name "*.glb" -print0 | xargs -0 -n1 ./gltf_validator || {
# each file's issues are in its report beside it: print the errors
find "${{ inputs.written }}" -name "*.report.json" -exec python -c "import json, sys; report = json.load(open(sys.argv[1])); [print(sys.argv[1], m['code'], m.get('pointer', ''), m['message']) for m in report['issues']['messages'] if m['severity'] == 0]" {} \;
exit 1; }
11 changes: 11 additions & 0 deletions .github/workflows/conda-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,14 @@ jobs:
secrets:
anaconda_token: ${{ secrets.ANACONDA_TOKEN }}

ci-ok:
name: CI OK
needs: build
if: always() # run even if build failed/cancelled, otherwise it'd be "skipped" (= passes!)
runs-on: ubuntu-latest
steps:
- name: Check all OpenAlea CI jobs succeeded
run: |
echo "build result: ${{ needs.build.result }}"
[ "${{ needs.build.result }}" = "success" ]

30 changes: 18 additions & 12 deletions .github/workflows/conformance.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# The conformance files are valid glTF for every viewer (Khronos' glTF-Validator) and valid fspm-TF (our validator)
# The conformance files are valid glTF for every viewer (Khronos' glTF-Validator) and valid encoding3d (our validator)
name: Conformance

on:
Expand All @@ -17,22 +17,24 @@ jobs:
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install openalea.fspm_tf (its dependencies, conda-only in pyproject.toml, given here), and VTK for the ParaView reader's tests
run: python -m pip install numpy jsonschema pytest vtk .
- name: Install openalea.encoding3d (its dependencies, conda-only in pyproject.toml, given here), and VTK for the ParaView reader's tests
run: python -m pip install numpy jsonschema scipy pytest pyzmq vtk .
- name: Tests, the ParaView reader's conversion included
run: pytest bindings/python/test -v
- name: The committed files are the generated ones
run: |
python conformance/generate.py
git diff --exit-code -- conformance
- name: fspm-TF validator
run: fspm-tf validate conformance/*.glb conformance/growing_sequence/scene.fspm.json
# the evaluated values' last digits follow the platform's BLAS: test_conformance compares them within the
# protocol's 1e-12; every other file must be what the generator writes, byte for byte
git diff --exit-code -- conformance ':(exclude)conformance/instances/*.evaluated.json'
- name: encoding3d validator
run: encoding3d validate conformance/*.glb conformance/growing_sequence/scene.fspm.json conformance/instances/scene.fspm.json conformance/instances/embedded.glb conformance/archives/*.fspm.zip
- name: Khronos glTF-Validator
run: |
curl -sSL -o validator.tar.xz "https://github.com/KhronosGroup/glTF-Validator/releases/download/${GLTF_VALIDATOR}/gltf_validator-${GLTF_VALIDATOR}-linux64.tar.xz"
tar xf validator.tar.xz gltf_validator
for file in conformance/*.glb conformance/growing_sequence/*.glb; do
./gltf_validator "$file" || exit 1
for file in conformance/*.glb conformance/growing_sequence/*.glb conformance/instances/*.glb conformance/instances/parts/*.glb; do
./gltf_validator "$file" || { python -c "import json, sys; report = json.load(open(sys.argv[1])); [print(sys.argv[1], m['code'], m.get('pointer', ''), m['message']) for m in report['issues']['messages'] if m['severity'] == 0]" "${file}.report.json"; exit 1; }
done

docs:
Expand All @@ -42,10 +44,14 @@ jobs:
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install openalea.fspm_tf and the documentation's tools
run: python -m pip install numpy jsonschema sphinx pydata-sphinx-theme myst-parser sphinx-favicon sphinx-copybutton .
- name: Install openalea.encoding3d and the documentation's tools
run: |
sudo apt-get install -y pandoc
python -m pip install numpy jsonschema pytest sphinx ".[doc]"
- name: The notebooks run
run: python -m pytest --nbmake doc/notebooks tutorials/01_encoding3d_alone
- name: Build the documentation, warnings as errors
run: python -m sphinx -b html docs docs/_build -W --keep-going
run: python -m sphinx -b html doc doc/_build -W --keep-going

# The reference codec through the action other codecs use: its dumps of the conformance files, and the files it writes
python-codec-conformance:
Expand All @@ -57,7 +63,7 @@ jobs:
python-version: "3.12"
- name: Dump and write the conformance scenes with the Python codec
run: |
python -m pip install numpy jsonschema .
python -m pip install numpy jsonschema scipy .
python bindings/python/conformance_run.py conformance out
- uses: ./.github/actions/conformance
with:
Expand Down
51 changes: 51 additions & 0 deletions .github/workflows/cpp-codec.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# The C++ codec (bindings/cpp): its tests on Linux, macOS and Windows; the conformance check other codecs run (its
# dumps of the conformance files compared with their expected values, the files it writes validated); the coupling
# conformance sessions. No platform: CPlantBox's adapter (bindings/cpp/cplantbox), a proposal for CPlantBox, is tested
# by hand (bindings/cpp/cplantbox/README.md). OpenAlea's conda CI builds the Python package only.
name: C++ codec

on:
push:
branches:
- main
pull_request:

jobs:
test:
name: ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v4
- name: Configure (nlohmann_json fetched)
run: cmake -S bindings/cpp -B build -DCMAKE_BUILD_TYPE=Release
- name: Build
run: cmake --build build --config Release
- name: Tests
run: ctest --test-dir build -C Release --output-on-failure

conformance:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Dump and write the conformance scenes with the C++ codec
run: |
cmake -S bindings/cpp -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --target encoding3d_conformance_run
./build/encoding3d_conformance_run conformance out
- uses: ./.github/actions/conformance
with:
dumps: out/dumps
written: out/written
# the coupling conformance sessions (specification §9, §11): the C++ participant, over ZeroMQ (libzmq) and a folder
- name: The coupling conformance sessions
run: |
sudo apt-get install -y -q libzmq3-dev
cmake -S bindings/cpp -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build --target encoding3d_coupling_conformance
python -m pip install numpy jsonschema pyzmq .
encoding3d couple-conformance conformance/coupling --participant "$PWD/build/encoding3d_coupling_conformance"

19 changes: 19 additions & 0 deletions .github/workflows/enforce-source-branch.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: Enforce source branch

on:
pull_request:
branches:
- main

jobs:
check-source-branch:
runs-on: ubuntu-latest
steps:
- name: Check PR source branch
run: |
if [ "${{ github.head_ref }}" != "develop" ]; then
echo "❌ PRs to main must originate from the 'develop' branch."
echo " This PR is from: ${{ github.head_ref }}"
exit 1
fi
echo "✅ Source branch is 'develop'. OK."
53 changes: 53 additions & 0 deletions .github/workflows/java-codec.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
# The Java codec (bindings/java): its tests on Linux, macOS and Windows; the conformance check other codecs run; the
# coupling conformance sessions. No platform: GroIMP's adapter and plugin (bindings/java/groimp, groimp-plugin),
# proposals for GroIMP, are tested by hand (their README.md). OpenAlea's conda CI builds the Python package only.
name: Java codec

on:
push:
branches:
- main
pull_request:

jobs:
test:
name: ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"
cache: maven
- name: Tests, the conformance files included
run: mvn -B -f bindings/java/pom.xml verify

conformance:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: "17"
cache: maven
- name: Dump and write the conformance scenes with the Java codec
run: |
mvn -B -q -f bindings/java/pom.xml package -DskipTests dependency:copy-dependencies -DincludeScope=runtime
java -cp "bindings/java/target/encoding3d-0.1.0.jar:bindings/java/target/dependency/*" org.openalea.encoding3d.ConformanceRun conformance out
- uses: ./.github/actions/conformance
with:
dumps: out/dumps
written: out/written
# the coupling conformance sessions (specification §9, §11): the Java participant, over ZeroMQ (JeroMQ) and a folder
- name: The coupling conformance sessions
run: |
python -m pip install pyzmq
encoding3d couple-conformance conformance/coupling --participant \
"java -cp $PWD/bindings/java/target/encoding3d-0.1.0.jar:$PWD/bindings/java/target/dependency/* org.openalea.encoding3d.coupling.ConformanceParticipant"

86 changes: 86 additions & 0 deletions .github/workflows/julia-codec.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# The Julia codec (bindings/julia/encoding3d): its tests, on the oldest supported Julia and the latest release, and the
# conformance check other codecs run (its dumps of the conformance files compared with their expected values, the files
# it writes validated by encoding3d validate and Khronos' glTF-Validator); its coupling participant. No platform: the
# package extensions for VirtualPlantLab (PlantGraphs, PlantGeomTurtle) and MTG.jl, proposals for those platforms, are
# tested by hand in their own projects (test/plantgraphs, test/multiscaletreegraph; bindings/julia/README.md). OpenAlea's
# conda CI builds the Python package only.
name: Julia codec

on:
push:
branches:
- main
pull_request:

jobs:
test:
name: Julia ${{ matrix.julia-version }}, ${{ matrix.os }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
julia-version: ["1.10", "1"]
os: [ubuntu-latest]
include:
- julia-version: "1"
os: windows-latest
- julia-version: "1"
os: macos-latest
steps:
- uses: actions/checkout@v4
- uses: julia-actions/setup-julia@v2
with:
version: ${{ matrix.julia-version }}
- uses: julia-actions/cache@v2
- uses: julia-actions/julia-buildpkg@v1
with:
project: bindings/julia/encoding3d
- uses: julia-actions/julia-runtest@v1
with:
project: bindings/julia/encoding3d

conformance:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: julia-actions/setup-julia@v2
with:
version: "1"
- uses: julia-actions/cache@v2
- name: Dump and write the conformance scenes with the Julia codec
run: |
julia --project=bindings/julia/encoding3d -e 'using Pkg; Pkg.instantiate()'
julia --project=bindings/julia/encoding3d bindings/julia/conformance_run.jl conformance out
- uses: ./.github/actions/conformance
with:
dumps: out/dumps
written: out/written

# encoding3d.jl as a participant of coupling sessions run by the Python coordinator (specification §11), over ZeroMQ
# and over a folder
coupling:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: julia-actions/setup-julia@v2
with:
version: "1"
- uses: julia-actions/cache@v2
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: The Python coordinator
run: pip install -e . numpy pytest pyzmq jsonschema
- name: A Julia project with encoding3d and ZMQ
run: |
mkdir -p coupling-env
julia --project=coupling-env -e 'using Pkg; Pkg.develop(path="bindings/julia/encoding3d"); Pkg.add("ZMQ")'
- name: The coupling tests, with the Julia participant
env:
ENCODING3D_JULIA: julia --project=coupling-env
run: pytest -v bindings/python/test/test_coupling.py
- name: The coupling conformance sessions, the Julia participant
run: |
julia --project=coupling-env -e 'using Pkg; Pkg.add("JSON")'
encoding3d couple-conformance conformance/coupling --participant \
"julia --project=$PWD/coupling-env $PWD/bindings/julia/coupling_conformance.jl"
9 changes: 7 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ env/
downloads/
eggs/
parts/
!conformance/instances/parts/
bin/
var/
sdist/
Expand Down Expand Up @@ -111,10 +112,14 @@ test/*.png
examples/**/outputs/

/dev*.md
/.devplan/

# glTF-Validator reports
*.report.json

# the documentation build, and its pages generated from spec/vocabulary
docs/_build/
docs/_generated/
doc/_build/
doc/_generated/

# Julia: environments resolved locally (the codec is a library: no committed manifest)
bindings/julia/**/Manifest*.toml
2 changes: 1 addition & 1 deletion .readthedocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,4 @@ conda:
environment: conda/environment.yml

sphinx:
configuration: docs/conf.py
configuration: doc/conf.py
Loading
Loading