diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md index cb94c564..eef5f524 100644 --- a/.github/CODE_OF_CONDUCT.md +++ b/.github/CODE_OF_CONDUCT.md @@ -23,13 +23,13 @@ include: Examples of unacceptable behavior by participants include: - The use of sexualized language or imagery and unwelcome sexual attention or - advances + advances - Trolling, insulting/derogatory comments, and personal or political attacks - Public or private harassment - Publishing others' private information, such as a physical or electronic - address, without explicit permission + address, without explicit permission - Other conduct which could reasonably be considered inappropriate in a - professional setting + professional setting ## Our Responsibilities diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 13c3512b..6bcb58e7 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -37,7 +37,8 @@ jobs: - name: Generate documentation uses: compas-dev/compas-actions.docs@v5 with: - doc_url: https://gramaziokohler.github.io/compas_cadwork github_token: ${{ secrets.GITHUB_TOKEN }} python: '3.12' - use_conda: false + generator: mkdocs + extras: mkdocs + test_docs: false diff --git a/.gitignore b/.gitignore index 853913f3..c0e04311 100644 --- a/.gitignore +++ b/.gitignore @@ -94,6 +94,9 @@ ENV/ # Rope project settings .ropeproject +# PyCharm project settings +.idea/ + # mkdocs documentation /site diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index a5c1e258..b85fa48b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -8,6 +8,7 @@ repos: rev: v6.0.0 hooks: - id: check-yaml + args: [--unsafe] # For mkdocs.yml - id: check-toml - id: check-case-conflict - id: check-merge-conflict @@ -33,6 +34,7 @@ repos: - mdformat-gfm-alerts - mdformat-ruff - mdformat-tables + - mdformat-mkdocs args: [--number] - repo: https://github.com/astral-sh/uv-pre-commit diff --git a/CHANGELOG.md b/CHANGELOG.md index 55c887b5..bb0938cc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Switched project to Astral's uv project manager. - Deprecated `compas_cadwork.storage`, `compas_cadwork.datamodel`, `compas_cadwork.scene`, and `compas_cadwork.utilities`. +- Migrated documentation from Sphinx to MkDocs ### Removed diff --git a/LICENSE b/LICENSE index a4c919af..8831c097 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2024 Gramazio Kohler Research, ETH Zurich +Copyright (c) 2024-present Gramazio Kohler Research, ETH Zurich Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 1bc0fba6..f1cfc109 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ [![Twitter Follow](https://img.shields.io/twitter/follow/compas_dev?style=social)](https://twitter.com/compas_dev) [![Made with COMPAS](https://compas.dev/badge.svg)](https://compas.dev/) -![COMPAS Cadwork](https://raw.githubusercontent.com/gramaziokohler/compas_cadwork/refs/heads/main/compas_cadwork.jpg) +![COMPAS Cadwork](https://raw.githubusercontent.com/gramaziokohler/compas_cadwork/refs/heads/main/docs/assets/images/dome.jpg) COMPAS cadwork is an open-source Python package which allows you to harness the power of the COMPAS framework inside cadwork 3d. Make use of COMPAS' extensive geometry kernel, data structures, and algorithms to create, manipulate, and analyze your 3d models in cadwork. @@ -16,7 +16,7 @@ Gain access to the COMPAS ecosystem which includes a wide range of tools and lib ## Installation -> For the different installation options please see the [installation guide](https://gramaziokohler.github.io/compas_cadwork/latest/installation.html). +> For the different installation options please see the [complete documentation](https://gramaziokohler.github.io/compas_cadwork/). To install `compas_cadwork` directly to cadwork 3d, run: diff --git a/data/stand_w_drills.json b/data/stand_w_drills.json deleted file mode 100644 index b58ec588..00000000 --- a/data/stand_w_drills.json +++ /dev/null @@ -1 +0,0 @@ -{"dtype": "compas_timber.model/TimberModel", "guid": "88b7054b-d45e-427a-a67c-85e74e707e21", "data": {"materials": [], "elements": [{"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "5d1ce411-0d89-4556-8eed-0c7aa1b0a5b0", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "02e02ddf-776f-4274-8910-9e135c460e23", "data": {"yaxis": [0.0, 1.0, -0.0], "xaxis": [1.0, 0.0, 0.0], "point": [0.0, -2000.0, 2000.0]}}, "length": 3000.0, "name": "Beam", "transformation": null, "width": 120, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "f7b33241-4fe7-459f-93db-62783a2f2060", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "da489ccc-851e-4836-a94c-ab4243ecb69b", "data": {"yaxis": [1.0, -0.0, 0.0], "xaxis": [0.0, 0.0, 1.0], "point": [2004.9842139896571, 0.0, 0.0]}}, "length": 2000.0, "name": "Beam", "transformation": null, "width": 60, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "b7513706-6e00-413c-907e-658ad7724a1a", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "1b9728c7-54d9-4965-af30-bc0cfa517c2e", "data": {"yaxis": [0.0, -1.0, 0.0], "xaxis": [-1.0, 0.0, 0.0], "point": [3000.0, 0.0, 2000.0]}}, "length": 3000.0, "name": "Beam", "transformation": null, "width": 120, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "eeac7d91-3247-4596-9b5c-3d08d82b09d8", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "f8774078-b3bb-4c0e-908a-1054199b30e9", "data": {"yaxis": [1.0, 0.0, -0.0], "xaxis": [0.0, -1.0, 0.0], "point": [0.0, 0.0, 0.0]}}, "length": 1500.0, "name": "Beam", "transformation": null, "width": 120, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "4109bdf1-177a-42c4-ae4e-e9ede77fde08", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "2e2ddb43-1fee-47b7-910a-7368bd31c608", "data": {"yaxis": [1.0, -0.0, 0.0], "xaxis": [0.0, 0.0, 1.0], "point": [1500.0, 0.0, 0.0]}}, "length": 1000.0, "name": "Beam", "transformation": null, "width": 60, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "9e4e3e68-aaad-4a9b-87ad-b1ff22734789", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "63e3e7d0-ae5c-4792-a500-52174688766a", "data": {"yaxis": [1.0, -0.0, 0.0], "xaxis": [0.0, 0.0, 1.0], "point": [1500.0, 0.0, 1599.5716131249412]}}, "length": 400.42838687505878, "name": "Beam", "transformation": null, "width": 60, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "6d96ea5f-87fb-4830-8cf0-c1960f7655e7", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "cbd9e321-e0b5-4e5e-b3fe-c2cfaab7f7e4", "data": {"yaxis": [-0.0, 1.0, 0.0], "xaxis": [0.0, 0.0, -1.0], "point": [0.0, -500.0, 1500.0]}}, "length": 1500.0, "name": "Beam", "transformation": null, "width": 120, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "9865c454-94d0-4316-b0b6-6533e541e33d", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "9c073b5a-d028-4785-a011-57cabdb1c51f", "data": {"yaxis": [1.0, -0.0, -2.2737367544323206e-16], "xaxis": [2.2737367544323206e-16, 0.0, 1.0], "point": [2466.6690329793787, 0.0, 0.0]}}, "length": 2000.0, "name": "Beam", "transformation": null, "width": 60, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "7190b17d-0297-43b2-9db5-52d3f1d47a84", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "fd38ade7-72c9-4aa1-84fa-b858937693c3", "data": {"yaxis": [0.0, -1.0, 0.0], "xaxis": [-1.0, 0.0, 1.5087022325849322e-16], "point": [2004.9842139896571, 0.0, 1000.0]}}, "length": 1507.0811889345573, "name": "Beam", "transformation": null, "width": 120, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "b8cc12a4-649f-43f6-9b10-6eea19cbe6cc", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "7a921108-aaba-40e2-9152-4bfa2193e9ac", "data": {"yaxis": [0.0, 1.0, -0.0], "xaxis": [1.0, 0.0, 0.0], "point": [0.0, -1500.0, 0.0]}}, "length": 3000.0, "name": "Beam", "transformation": null, "width": 120, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "b2f95a63-e5f9-4e0d-9fb8-bb00b1a1f0d1", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "e6d2ebc8-1698-4b4e-9ac4-24a2af4622d7", "data": {"yaxis": [1.0, 3.0316490059097607e-16, -0.0], "xaxis": [3.0316490059097607e-16, -1.0, 0.0], "point": [2466.6690329793787, 0.0, 0.0]}}, "length": 1500.0, "name": "Beam", "transformation": null, "width": 60, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "b7745255-b6c7-41aa-a987-694f79782abf", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "37f1aa2e-0d74-4bcd-a1be-83aea8589661", "data": {"yaxis": [1.0, 0.0, -0.0], "xaxis": [0.0, -1.0, 0.0], "point": [2004.9842139896571, 0.0, 0.0]}}, "length": 1500.0, "name": "Beam", "transformation": null, "width": 60, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "102b73cd-f45c-402e-bf0c-134167c412a5", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "c5e4b7ba-6694-43d0-914d-c2d3139d46b3", "data": {"yaxis": [0.0, -1.0, 0.0], "xaxis": [-1.0, 0.0, 1.5087022325849322e-16], "point": [2004.9842139896571, 0.0, 1599.5716131249412]}}, "length": 1507.0811889345573, "name": "Beam", "transformation": null, "width": 120, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "a24c43d9-713f-4b76-a2cd-1032b6feee4d", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "dafdfb67-aecf-4d0f-a7b3-6f6f0dbf4bc5", "data": {"yaxis": [1.0, -0.0, -8.5265128291212024e-17], "xaxis": [8.5265128291212024e-17, 0.0, 1.0], "point": [497.9030250550997, 0.0, 0.0]}}, "length": 2000.0, "name": "Beam", "transformation": null, "width": 60, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "e09760f3-9b30-41df-bf99-0872048e2f17", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "83aabab2-cc09-40aa-aff8-b8fb48460db1", "data": {"yaxis": [1.0, 0.0, -0.0], "xaxis": [0.0, -1.0, 0.0], "point": [0.0, 0.0, 2000.0]}}, "length": 2000.0, "name": "Beam", "transformation": null, "width": 120, "features": [{"dtype": "compas_timber.elements/DrillFeature", "guid": "3f57955a-6ccc-4f19-9870-c08ea3e6ffc7", "data": {"diameter": 10.0, "length": 200.98919053554167, "line": {"dtype": "compas.geometry/Line", "guid": "9c75a6ad-2a62-4b34-ba48-83758e83ae26", "data": {"start": [97.886890790575094, -1727.4802204160628, 2036.4880467763051], "end": [-103.10229974496657, -1727.4802204160628, 2036.4880467763051]}}, "is_joinery": false}}, {"dtype": "compas_timber.elements/DrillFeature", "guid": "c1678027-34ee-4a6e-8f43-9876d0bc948d", "data": {"diameter": 10.0, "length": 200.98919053554167, "line": {"dtype": "compas.geometry/Line", "guid": "1203c87a-89fb-4413-890b-9c1bf3ab8e14", "data": {"start": [97.886890790575094, -1794.4554614832987, 2036.4880467763051], "end": [-103.10229974496657, -1794.4554614832987, 2036.4880467763051]}}, "is_joinery": false}}, {"dtype": "compas_timber.elements/DrillFeature", "guid": "f1f57c75-55a2-4e13-83eb-824fb0872d99", "data": {"diameter": 10.0, "length": 200.98919053554167, "line": {"dtype": "compas.geometry/Line", "guid": "57dcd2df-d553-4e0f-a552-ffff6aa0b168", "data": {"start": [97.886890790575094, -1794.4554614832987, 1983.5226364495038], "end": [-103.10229974496657, -1794.4554614832987, 1983.5226364495038]}}, "is_joinery": false}}, {"dtype": "compas_timber.elements/DrillFeature", "guid": "edd11350-b307-48ff-a030-c1f4ba41eff7", "data": {"diameter": 10.0, "length": 200.98919053554167, "line": {"dtype": "compas.geometry/Line", "guid": "7eea8f2c-c526-4287-af09-e98dce3d9499", "data": {"start": [97.886890790575094, -1727.4802204160628, 1983.5226364495038], "end": [-103.10229974496657, -1727.4802204160628, 1983.5226364495038]}}, "is_joinery": false}}, {"dtype": "compas_timber.elements/DrillFeature", "guid": "a399f206-bdb6-4a20-9479-eca064d88acb", "data": {"diameter": 10.0, "length": 200.98919053554167, "line": {"dtype": "compas.geometry/Line", "guid": "bc838943-ffe1-42ab-9316-23d7de826d85", "data": {"start": [97.886890790575094, -1865.1705903804796, 1983.5226364495038], "end": [-103.10229974496657, -1865.1705903804796, 1983.5226364495038]}}, "is_joinery": false}}, {"dtype": "compas_timber.elements/DrillFeature", "guid": "bd3db6ae-7575-4c60-8619-dd9c7fdb5191", "data": {"diameter": 10.0, "length": 200.98919053554167, "line": {"dtype": "compas.geometry/Line", "guid": "2c82e7b8-5e95-4ca8-abe3-a0a318697ed5", "data": {"start": [97.886890790575094, -1932.1458314477154, 1983.5226364495038], "end": [-103.10229974496657, -1932.1458314477154, 1983.5226364495038]}}, "is_joinery": false}}, {"dtype": "compas_timber.elements/DrillFeature", "guid": "d04af301-2527-4ac8-a7dc-3ef4f65e0898", "data": {"diameter": 10.0, "length": 200.98919053554167, "line": {"dtype": "compas.geometry/Line", "guid": "826c6266-95bb-4316-a000-8c2a6702ddff", "data": {"start": [97.886890790575094, -1932.1458314477154, 2036.4880467763051], "end": [-103.10229974496657, -1932.1458314477154, 2036.4880467763051]}}, "is_joinery": false}}, {"dtype": "compas_timber.elements/DrillFeature", "guid": "8c8185f0-5be1-4721-b10d-cc7e0e4bdb3e", "data": {"diameter": 10.0, "length": 200.98919053554167, "line": {"dtype": "compas.geometry/Line", "guid": "48f8cb38-98e1-4cd4-898c-634005671030", "data": {"start": [97.886890790575094, -1865.1705903804796, 2036.4880467763051], "end": [-103.10229974496657, -1865.1705903804796, 2036.4880467763051]}}, "is_joinery": false}}]}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "7b1c2f2d-fd89-4696-8e48-a47adda56651", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "6bdbbf3d-d54f-4e8f-9006-9b1c0fc0c6c4", "data": {"yaxis": [1.0, 0.0, -0.0], "xaxis": [0.0, -1.0, 0.0], "point": [497.9030250550997, 0.0, 0.0]}}, "length": 1500.0, "name": "Beam", "transformation": null, "width": 60, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "a740b3c3-a139-4c4f-a81d-5347062548aa", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "d5b4cbe3-e901-4363-b239-a99e4eb95407", "data": {"yaxis": [1.0, 0.0, -0.0], "xaxis": [0.0, -1.0, 0.0], "point": [3000.0, 0.0, 2000.0]}}, "length": 2000.0, "name": "Beam", "transformation": null, "width": 120, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "a11c58bf-0ba1-41ce-a686-d7a2a4d51998", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "3a726341-1916-406f-b0ef-ee86c981358c", "data": {"yaxis": [1.0, -0.0, 2.8391303276180702e-16], "xaxis": [-2.8391303276180702e-16, 0.0, 1.0], "point": [1022.8270086729295, 0.0, 1599.5716131249415]}}, "length": 400.42838687505855, "name": "Beam", "transformation": null, "width": 60, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "9b458d20-23a0-4c93-8f18-89dc06536ec6", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "aca3033a-aa6b-40b2-a25a-c0fa13b9136c", "data": {"yaxis": [1.0, 0.0, -0.0], "xaxis": [0.0, -1.0, 0.0], "point": [3000.0, 0.0, 0.0]}}, "length": 1500.0, "name": "Beam", "transformation": null, "width": 120, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "8642d54d-34bd-4edc-9fd2-443419411df8", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "d7fc7855-70ac-4c47-99b2-740c496708a8", "data": {"yaxis": [-0.0, 1.0, 0.0], "xaxis": [0.0, 0.0, -1.0], "point": [0.0, 0.0, 2000.0]}}, "length": 2000.0, "name": "Beam", "transformation": null, "width": 120, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "387a705b-8bb1-4c2b-ae52-9e28162a43ea", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "61db8400-2014-4cf1-b621-4f9a23c0168e", "data": {"yaxis": [-1.0000000000000002, 0.0, 0.0], "xaxis": [0.0, 0.70710678118654757, -0.70710678118654757], "point": [3000.0, -1000.0, 2000.0]}}, "length": 1414.2135623730951, "name": "Beam", "transformation": null, "width": 120, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "a186bd44-2673-421e-8a15-b96cd6fa9d3c", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "702ccc83-9eed-44d8-9da4-ab20820bbfde", "data": {"yaxis": [0.0, 1.0, -3.7895612573872009e-17], "xaxis": [0.0, -3.7895612573872009e-17, -1.0], "point": [3000.0, -500.0, 1500.0]}}, "length": 1500.0, "name": "Beam", "transformation": null, "width": 120, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "5a6a0ea8-c561-4883-bf6e-d7da5bf93983", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "6d3c01ba-bf42-4868-8dc6-f15c07f21020", "data": {"yaxis": [0.0, 1.0, -0.0], "xaxis": [1.0, 0.0, 0.0], "point": [0.0, 0.0, 0.0]}}, "length": 3000.0, "name": "Beam", "transformation": null, "width": 120, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "1cf1d057-869d-4461-bada-8fb1413ef7b9", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "e9a556f7-9980-4483-87da-0019ad00554d", "data": {"yaxis": [1.0, 0.0, -0.0], "xaxis": [0.0, -1.0, 0.0], "point": [1500.0, 0.0, 0.0]}}, "length": 1500.0, "name": "Beam", "transformation": null, "width": 60, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "3b9a4dc6-5372-4658-a520-391aef31762b", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "eaba5f69-7cd7-40f5-8736-23ac52043056", "data": {"yaxis": [-0.41480906296571191, 0.90990847961842192, -0.0], "xaxis": [0.90990847961842192, 0.41480906296571191, 0.0], "point": [1723.1898512721714, -1234.4051008146666, 2000.0]}}, "length": 1403.2292008788293, "name": "Beam", "transformation": null, "width": 60, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "760192c5-39ce-4c1d-82de-a6659bd70299", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "8c59350d-8845-43bd-8c73-c030923f833e", "data": {"yaxis": [0.62939362638372542, -0.77708665093896934, 0.0], "xaxis": [-0.77708665093896934, -0.62939362638372542, 0.0], "point": [1345.8575890394823, -532.80133673983539, 2000.0]}}, "length": 1731.9273049064166, "name": "Beam", "transformation": null, "width": 60, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "a345f409-d677-4cff-a1f2-fc7624382106", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "51bb4ad1-051f-4012-8bcc-64c779b433f6", "data": {"yaxis": [1.0, 0.0, -0.0], "xaxis": [0.0, -1.0, 0.0], "point": [1022.8270086729294, 0.0, 0.0]}}, "length": 1500.0, "name": "Beam", "transformation": null, "width": 60, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "2d15ea36-b2d3-4ad4-be4c-a165d6d0b48e", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "91b5085e-ed4c-470d-a5b4-02ce08f00753", "data": {"yaxis": [0.0, -1.0, 0.0], "xaxis": [0.0, 0.0, 1.0], "point": [3000.0, 0.0, 0.0]}}, "length": 2000.0, "name": "Beam", "transformation": null, "width": 120, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "dea1f3e5-df53-422b-bb25-cdb57bc90cd0", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "b3a51096-bb32-4ad4-8eba-a24ea8e73831", "data": {"yaxis": [1.0000000000000002, 0.0, -0.0], "xaxis": [0.0, -0.70710678118654757, 0.70710678118654757], "point": [0.0, 0.0, 1000.0]}}, "length": 1414.2135623730951, "name": "Beam", "transformation": null, "width": 120, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "d62d05a8-f7d2-42e0-bf75-d2e1d927f4c2", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "fa45db96-64e3-471c-8ca3-4e2de7fa9f14", "data": {"yaxis": [0.88070908080031696, 0.47365759256646656, -0.0], "xaxis": [0.47365759256646656, -0.88070908080031696, 0.0], "point": [1059.3096199336605, 0.0, 2000.0]}}, "length": 2270.8974434356492, "name": "Beam", "transformation": null, "width": 60, "features": []}}, {"dtype": "compas_timber.elements/Beam", "name": "Beam", "guid": "6a34aaea-72e3-435b-b4b3-7a78f07386fc", "data": {"height": 120, "frame": {"dtype": "compas.geometry/Frame", "guid": "64dc2457-4092-4d37-875a-4c38d759f2f6", "data": {"yaxis": [1.0, -0.0, 0.0], "xaxis": [0.0, 0.0, 1.0], "point": [1022.8270086729294, 0.0, 0.0]}}, "length": 1000.0000000000001, "name": "Beam", "transformation": null, "width": 60, "features": []}}], "graph": {"default_node_attributes": {"element": null, "y": 0.0, "x": 0.0, "z": 0.0}, "node": {"16": {"element": "a740b3c3-a139-4c4f-a81d-5347062548aa"}, "26": {"element": "7b1c2f2d-fd89-4696-8e48-a47adda56651"}, "15": {"element": "a11c58bf-0ba1-41ce-a686-d7a2a4d51998"}, "18": {"element": "5a6a0ea8-c561-4883-bf6e-d7da5bf93983"}, "25": {"element": "b8cc12a4-649f-43f6-9b10-6eea19cbe6cc"}, "28": {"element": "1cf1d057-869d-4461-bada-8fb1413ef7b9"}, "10": {"element": "f7b33241-4fe7-459f-93db-62783a2f2060"}, "30": {"element": "b2f95a63-e5f9-4e0d-9fb8-bb00b1a1f0d1"}, "20": {"element": "b7513706-6e00-413c-907e-658ad7724a1a"}, "17": {"element": "9b458d20-23a0-4c93-8f18-89dc06536ec6"}, "27": {"element": "a345f409-d677-4cff-a1f2-fc7624382106"}, "12": {"element": "4109bdf1-177a-42c4-ae4e-e9ede77fde08"}, "22": {"element": "e09760f3-9b30-41df-bf99-0872048e2f17"}, "19": {"element": "2d15ea36-b2d3-4ad4-be4c-a165d6d0b48e"}, "29": {"element": "b7745255-b6c7-41aa-a987-694f79782abf"}, "11": {"element": "a24c43d9-713f-4b76-a2cd-1032b6feee4d"}, "5": {"element": "387a705b-8bb1-4c2b-ae52-9e28162a43ea"}, "4": {"element": "760192c5-39ce-4c1d-82de-a6659bd70299"}, "7": {"element": "a186bd44-2673-421e-8a15-b96cd6fa9d3c"}, "6": {"element": "dea1f3e5-df53-422b-bb25-cdb57bc90cd0"}, "1": {"element": "7190b17d-0297-43b2-9db5-52d3f1d47a84"}, "0": {"element": "102b73cd-f45c-402e-bf0c-134167c412a5"}, "3": {"element": "3b9a4dc6-5372-4658-a520-391aef31762b"}, "2": {"element": "d62d05a8-f7d2-42e0-bf75-d2e1d927f4c2"}, "21": {"element": "8642d54d-34bd-4edc-9fd2-443419411df8"}, "9": {"element": "9865c454-94d0-4316-b0b6-6533e541e33d"}, "8": {"element": "6d96ea5f-87fb-4830-8cf0-c1960f7655e7"}, "14": {"element": "9e4e3e68-aaad-4a9b-87ad-b1ff22734789"}, "24": {"element": "eeac7d91-3247-4596-9b5c-3d08d82b09d8"}, "13": {"element": "6a34aaea-72e3-435b-b4b3-7a78f07386fc"}, "23": {"element": "5d1ce411-0d89-4556-8eed-0c7aa1b0a5b0"}}, "default_edge_attributes": {"interactions": null}, "max_node": 30, "attributes": {}, "edge": {"16": {}, "26": {"18": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "37ec391b-728f-4735-b516-ce5ba7a1a088", "data": {"cross_beam_guid": "5a6a0ea8-c561-4883-bf6e-d7da5bf93983", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "7b1c2f2d-fd89-4696-8e48-a47adda56651"}}]}, "25": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "61791814-ae81-4b35-99ad-513ceca0c391", "data": {"cross_beam_guid": "b8cc12a4-649f-43f6-9b10-6eea19cbe6cc", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "7b1c2f2d-fd89-4696-8e48-a47adda56651"}}]}}, "15": {"20": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "a0cead2d-f81c-468d-9297-e799338572f0", "data": {"cross_beam_guid": "b7513706-6e00-413c-907e-658ad7724a1a", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "a11c58bf-0ba1-41ce-a686-d7a2a4d51998"}}]}, "0": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "c2a9b821-7766-4882-9e25-4d4c8044c9a8", "data": {"cross_beam_guid": "102b73cd-f45c-402e-bf0c-134167c412a5", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "a11c58bf-0ba1-41ce-a686-d7a2a4d51998"}}]}}, "18": {"21": {"interactions": [{"dtype": "compas_timber.connections/LButtJoint", "name": "LButtJoint", "guid": "55fb23cb-8c81-4340-8431-d05b2ee19eed", "data": {"cross_beam_guid": "8642d54d-34bd-4edc-9fd2-443419411df8", "modify_cross": true, "mill_depth": 0, "birds_mouth": false, "small_beam_butts": false, "name": "LButtJoint", "reject_i": false, "main_beam_guid": "5a6a0ea8-c561-4883-bf6e-d7da5bf93983"}}]}, "17": {"interactions": [{"dtype": "compas_timber.connections/LButtJoint", "name": "LButtJoint", "guid": "2344d85f-5eaf-4887-9664-2be550b52294", "data": {"cross_beam_guid": "9b458d20-23a0-4c93-8f18-89dc06536ec6", "modify_cross": true, "mill_depth": 0, "birds_mouth": false, "small_beam_butts": false, "name": "LButtJoint", "reject_i": false, "main_beam_guid": "5a6a0ea8-c561-4883-bf6e-d7da5bf93983"}}]}}, "25": {}, "28": {"12": {"interactions": [{"dtype": "compas_timber.connections/LButtJoint", "name": "LButtJoint", "guid": "3c82c3d2-f7da-4a56-8b5e-6445cbc0917d", "data": {"cross_beam_guid": "4109bdf1-177a-42c4-ae4e-e9ede77fde08", "modify_cross": true, "mill_depth": 0, "birds_mouth": false, "small_beam_butts": false, "name": "LButtJoint", "reject_i": false, "main_beam_guid": "1cf1d057-869d-4461-bada-8fb1413ef7b9"}}]}, "18": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "e3d8e462-1e60-4fb1-a7a0-9ade15aa1705", "data": {"cross_beam_guid": "5a6a0ea8-c561-4883-bf6e-d7da5bf93983", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "1cf1d057-869d-4461-bada-8fb1413ef7b9"}}]}, "25": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "d1720629-4a7f-4e5c-8b6e-1dbd7013854e", "data": {"cross_beam_guid": "b8cc12a4-649f-43f6-9b10-6eea19cbe6cc", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "1cf1d057-869d-4461-bada-8fb1413ef7b9"}}]}}, "10": {"20": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "6286361c-2534-4340-9115-5c66500018b4", "data": {"cross_beam_guid": "b7513706-6e00-413c-907e-658ad7724a1a", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "f7b33241-4fe7-459f-93db-62783a2f2060"}}]}, "18": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "440573c2-bda7-49d6-bd33-7e73655938bd", "data": {"cross_beam_guid": "5a6a0ea8-c561-4883-bf6e-d7da5bf93983", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "f7b33241-4fe7-459f-93db-62783a2f2060"}}]}, "29": {"interactions": [{"dtype": "compas_timber.connections/LButtJoint", "name": "LButtJoint", "guid": "4c495fcd-4b70-4cdb-872a-607e671917d0", "data": {"cross_beam_guid": "b7745255-b6c7-41aa-a987-694f79782abf", "modify_cross": true, "mill_depth": 0, "birds_mouth": false, "small_beam_butts": false, "name": "LButtJoint", "reject_i": false, "main_beam_guid": "f7b33241-4fe7-459f-93db-62783a2f2060"}}]}}, "30": {"18": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "9f81aecb-4d02-422c-a3d4-40211131ca0b", "data": {"cross_beam_guid": "5a6a0ea8-c561-4883-bf6e-d7da5bf93983", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "b2f95a63-e5f9-4e0d-9fb8-bb00b1a1f0d1"}}]}, "25": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "d8c562c5-623c-4563-ace9-879c6704e17d", "data": {"cross_beam_guid": "b8cc12a4-649f-43f6-9b10-6eea19cbe6cc", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "b2f95a63-e5f9-4e0d-9fb8-bb00b1a1f0d1"}}]}}, "20": {"21": {"interactions": [{"dtype": "compas_timber.connections/LButtJoint", "name": "LButtJoint", "guid": "ce68587a-9d6a-4d56-841d-8f9472a1c9b6", "data": {"cross_beam_guid": "8642d54d-34bd-4edc-9fd2-443419411df8", "modify_cross": true, "mill_depth": 0, "birds_mouth": false, "small_beam_butts": false, "name": "LButtJoint", "reject_i": false, "main_beam_guid": "b7513706-6e00-413c-907e-658ad7724a1a"}}]}, "19": {"interactions": [{"dtype": "compas_timber.connections/LButtJoint", "name": "LButtJoint", "guid": "05b5a5c4-d03b-4fcc-bc1c-916d7f3ad83b", "data": {"cross_beam_guid": "2d15ea36-b2d3-4ad4-be4c-a165d6d0b48e", "modify_cross": true, "mill_depth": 0, "birds_mouth": false, "small_beam_butts": false, "name": "LButtJoint", "reject_i": false, "main_beam_guid": "b7513706-6e00-413c-907e-658ad7724a1a"}}]}, "22": {"interactions": [{"dtype": "compas_timber.connections/LButtJoint", "name": "LButtJoint", "guid": "57138fd0-c267-4bbf-a793-45c353049534", "data": {"cross_beam_guid": "e09760f3-9b30-41df-bf99-0872048e2f17", "modify_cross": true, "mill_depth": 0, "birds_mouth": false, "small_beam_butts": false, "name": "LButtJoint", "reject_i": false, "main_beam_guid": "b7513706-6e00-413c-907e-658ad7724a1a"}}]}, "16": {"interactions": [{"dtype": "compas_timber.connections/LButtJoint", "name": "LButtJoint", "guid": "06d8becc-7636-4551-bd43-5589689193df", "data": {"cross_beam_guid": "a740b3c3-a139-4c4f-a81d-5347062548aa", "modify_cross": true, "mill_depth": 0, "birds_mouth": false, "small_beam_butts": false, "name": "LButtJoint", "reject_i": false, "main_beam_guid": "b7513706-6e00-413c-907e-658ad7724a1a"}}]}}, "17": {"25": {"interactions": [{"dtype": "compas_timber.connections/LButtJoint", "name": "LButtJoint", "guid": "eccdba47-7d62-4202-a789-417a52385946", "data": {"cross_beam_guid": "b8cc12a4-649f-43f6-9b10-6eea19cbe6cc", "modify_cross": true, "mill_depth": 0, "birds_mouth": false, "small_beam_butts": false, "name": "LButtJoint", "reject_i": false, "main_beam_guid": "9b458d20-23a0-4c93-8f18-89dc06536ec6"}}]}}, "27": {"13": {"interactions": [{"dtype": "compas_timber.connections/LButtJoint", "name": "LButtJoint", "guid": "c8ff25c7-9581-4229-bf94-3e9c677c2ede", "data": {"cross_beam_guid": "6a34aaea-72e3-435b-b4b3-7a78f07386fc", "modify_cross": true, "mill_depth": 0, "birds_mouth": false, "small_beam_butts": false, "name": "LButtJoint", "reject_i": false, "main_beam_guid": "a345f409-d677-4cff-a1f2-fc7624382106"}}]}, "18": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "9d7c8eb3-181e-4fa2-8882-943432036cb0", "data": {"cross_beam_guid": "5a6a0ea8-c561-4883-bf6e-d7da5bf93983", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "a345f409-d677-4cff-a1f2-fc7624382106"}}]}, "25": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "80ea2728-fe4a-488c-b717-4a04d1cbdd42", "data": {"cross_beam_guid": "b8cc12a4-649f-43f6-9b10-6eea19cbe6cc", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "a345f409-d677-4cff-a1f2-fc7624382106"}}]}}, "12": {"1": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "1d934b84-9690-41ea-99f6-690ec972e6c6", "data": {"cross_beam_guid": "7190b17d-0297-43b2-9db5-52d3f1d47a84", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "4109bdf1-177a-42c4-ae4e-e9ede77fde08"}}]}, "18": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "8aee596b-25b6-4737-a344-a6183f0aba37", "data": {"cross_beam_guid": "5a6a0ea8-c561-4883-bf6e-d7da5bf93983", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "4109bdf1-177a-42c4-ae4e-e9ede77fde08"}}]}}, "22": {}, "19": {"18": {"interactions": [{"dtype": "compas_timber.connections/LButtJoint", "name": "LButtJoint", "guid": "90af9d37-df94-439c-94cf-f393f70340bf", "data": {"cross_beam_guid": "5a6a0ea8-c561-4883-bf6e-d7da5bf93983", "modify_cross": true, "mill_depth": 0, "birds_mouth": false, "small_beam_butts": false, "name": "LButtJoint", "reject_i": false, "main_beam_guid": "2d15ea36-b2d3-4ad4-be4c-a165d6d0b48e"}}]}, "16": {"interactions": [{"dtype": "compas_timber.connections/LButtJoint", "name": "LButtJoint", "guid": "36b26f8a-1be3-4465-8357-2d81dc5ba4d7", "data": {"cross_beam_guid": "a740b3c3-a139-4c4f-a81d-5347062548aa", "modify_cross": true, "mill_depth": 0, "birds_mouth": false, "small_beam_butts": false, "name": "LButtJoint", "reject_i": false, "main_beam_guid": "2d15ea36-b2d3-4ad4-be4c-a165d6d0b48e"}}]}, "17": {"interactions": [{"dtype": "compas_timber.connections/LButtJoint", "name": "LButtJoint", "guid": "502147d9-3f32-453b-9017-5301f19130b4", "data": {"cross_beam_guid": "9b458d20-23a0-4c93-8f18-89dc06536ec6", "modify_cross": true, "mill_depth": 0, "birds_mouth": false, "small_beam_butts": false, "name": "LButtJoint", "reject_i": false, "main_beam_guid": "2d15ea36-b2d3-4ad4-be4c-a165d6d0b48e"}}]}}, "29": {"18": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "2de391e8-ade0-43b4-b4a1-c5b92b60a5f9", "data": {"cross_beam_guid": "5a6a0ea8-c561-4883-bf6e-d7da5bf93983", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "b7745255-b6c7-41aa-a987-694f79782abf"}}]}, "25": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "5cc77429-60f4-4da7-8e00-526140d07eb8", "data": {"cross_beam_guid": "b8cc12a4-649f-43f6-9b10-6eea19cbe6cc", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "b7745255-b6c7-41aa-a987-694f79782abf"}}]}}, "11": {"26": {"interactions": [{"dtype": "compas_timber.connections/LButtJoint", "name": "LButtJoint", "guid": "ff164cf0-5074-4951-b4a5-a25fbec82142", "data": {"cross_beam_guid": "7b1c2f2d-fd89-4696-8e48-a47adda56651", "modify_cross": true, "mill_depth": 0, "birds_mouth": false, "small_beam_butts": false, "name": "LButtJoint", "reject_i": false, "main_beam_guid": "a24c43d9-713f-4b76-a2cd-1032b6feee4d"}}]}, "20": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "2c3bedd2-4db4-460b-901e-afd764cdb94c", "data": {"cross_beam_guid": "b7513706-6e00-413c-907e-658ad7724a1a", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "a24c43d9-713f-4b76-a2cd-1032b6feee4d"}}]}, "18": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "71752afe-70d0-41ea-a10e-242d96b58a13", "data": {"cross_beam_guid": "5a6a0ea8-c561-4883-bf6e-d7da5bf93983", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "a24c43d9-713f-4b76-a2cd-1032b6feee4d"}}]}}, "5": {"19": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "e36eab05-b75b-492c-85c2-7a1ff95178d6", "data": {"cross_beam_guid": "2d15ea36-b2d3-4ad4-be4c-a165d6d0b48e", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "387a705b-8bb1-4c2b-ae52-9e28162a43ea"}}]}, "16": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "9001465d-2f0b-4421-bb25-afb5da636814", "data": {"cross_beam_guid": "a740b3c3-a139-4c4f-a81d-5347062548aa", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "387a705b-8bb1-4c2b-ae52-9e28162a43ea"}}]}}, "4": {"22": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "5a374915-4c28-4045-9545-465d0f8b895c", "data": {"cross_beam_guid": "e09760f3-9b30-41df-bf99-0872048e2f17", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "760192c5-39ce-4c1d-82de-a6659bd70299"}}]}, "2": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "625c64d6-b3f3-424e-abdd-1575eae1b1f3", "data": {"cross_beam_guid": "d62d05a8-f7d2-42e0-bf75-d2e1d927f4c2", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "760192c5-39ce-4c1d-82de-a6659bd70299"}}]}}, "7": {"17": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "62fcbd35-6a01-407f-9add-651ea549c049", "data": {"cross_beam_guid": "9b458d20-23a0-4c93-8f18-89dc06536ec6", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "a186bd44-2673-421e-8a15-b96cd6fa9d3c"}}]}, "5": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "79a498e9-1027-4003-aec5-dd1ab5bbf8f8", "data": {"cross_beam_guid": "387a705b-8bb1-4c2b-ae52-9e28162a43ea", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "a186bd44-2673-421e-8a15-b96cd6fa9d3c"}}]}}, "6": {"21": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "2bbda4f9-78ad-4bc5-8dba-1f25ec724652", "data": {"cross_beam_guid": "8642d54d-34bd-4edc-9fd2-443419411df8", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "dea1f3e5-df53-422b-bb25-cdb57bc90cd0"}}]}, "22": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "6422faf6-36a0-4936-b91f-04557441021c", "data": {"cross_beam_guid": "e09760f3-9b30-41df-bf99-0872048e2f17", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "dea1f3e5-df53-422b-bb25-cdb57bc90cd0"}}]}}, "1": {"10": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "3432d58f-1986-4922-9165-39f3b9e1ca86", "data": {"cross_beam_guid": "f7b33241-4fe7-459f-93db-62783a2f2060", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "7190b17d-0297-43b2-9db5-52d3f1d47a84"}}]}, "11": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "01f1f039-b0d7-4b37-9ff1-ff1902a37702", "data": {"cross_beam_guid": "a24c43d9-713f-4b76-a2cd-1032b6feee4d", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "7190b17d-0297-43b2-9db5-52d3f1d47a84"}}]}}, "0": {"10": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "2a436c1b-f3f7-4cfb-b90b-9765f0fbad59", "data": {"cross_beam_guid": "f7b33241-4fe7-459f-93db-62783a2f2060", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "102b73cd-f45c-402e-bf0c-134167c412a5"}}]}, "11": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "cd4c8886-e8c0-4335-a6c0-d6e86a2a536e", "data": {"cross_beam_guid": "a24c43d9-713f-4b76-a2cd-1032b6feee4d", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "102b73cd-f45c-402e-bf0c-134167c412a5"}}]}}, "3": {"16": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "af354f80-1e27-4ecc-81ba-dfacf72a55c4", "data": {"cross_beam_guid": "a740b3c3-a139-4c4f-a81d-5347062548aa", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "3b9a4dc6-5372-4658-a520-391aef31762b"}}]}, "2": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "fd9974e9-06bc-4e07-a723-af952bbb26a7", "data": {"cross_beam_guid": "d62d05a8-f7d2-42e0-bf75-d2e1d927f4c2", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "3b9a4dc6-5372-4658-a520-391aef31762b"}}]}}, "2": {"20": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "f917137a-b687-4d77-b099-a05819dcdd72", "data": {"cross_beam_guid": "b7513706-6e00-413c-907e-658ad7724a1a", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "d62d05a8-f7d2-42e0-bf75-d2e1d927f4c2"}}]}, "23": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "dcc0bf9f-0967-4c33-bf59-bab5256251c7", "data": {"cross_beam_guid": "5d1ce411-0d89-4556-8eed-0c7aa1b0a5b0", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "d62d05a8-f7d2-42e0-bf75-d2e1d927f4c2"}}]}}, "21": {"22": {"interactions": [{"dtype": "compas_timber.connections/LButtJoint", "name": "LButtJoint", "guid": "af11b3c8-db1f-40a7-b09a-7fd14deeae4a", "data": {"cross_beam_guid": "e09760f3-9b30-41df-bf99-0872048e2f17", "modify_cross": true, "mill_depth": 0, "birds_mouth": false, "small_beam_butts": false, "name": "LButtJoint", "reject_i": false, "main_beam_guid": "8642d54d-34bd-4edc-9fd2-443419411df8"}}]}}, "9": {"30": {"interactions": [{"dtype": "compas_timber.connections/LButtJoint", "name": "LButtJoint", "guid": "bf4b87b6-fb1b-419b-8c29-5f29e369cb66", "data": {"cross_beam_guid": "b2f95a63-e5f9-4e0d-9fb8-bb00b1a1f0d1", "modify_cross": true, "mill_depth": 0, "birds_mouth": false, "small_beam_butts": false, "name": "LButtJoint", "reject_i": false, "main_beam_guid": "9865c454-94d0-4316-b0b6-6533e541e33d"}}]}, "20": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "22a71202-7712-4517-89a8-a55542b95f0c", "data": {"cross_beam_guid": "b7513706-6e00-413c-907e-658ad7724a1a", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "9865c454-94d0-4316-b0b6-6533e541e33d"}}]}, "18": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "56f976ed-6a3c-456d-8f7b-46c76f08b897", "data": {"cross_beam_guid": "5a6a0ea8-c561-4883-bf6e-d7da5bf93983", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "9865c454-94d0-4316-b0b6-6533e541e33d"}}]}}, "8": {"6": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "e326b46e-d054-4c7a-8e5f-1e87cf89f2b2", "data": {"cross_beam_guid": "dea1f3e5-df53-422b-bb25-cdb57bc90cd0", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "6d96ea5f-87fb-4830-8cf0-c1960f7655e7"}}]}, "24": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "d683a907-87e2-429d-a6b6-3f83605edfc8", "data": {"cross_beam_guid": "eeac7d91-3247-4596-9b5c-3d08d82b09d8", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "6d96ea5f-87fb-4830-8cf0-c1960f7655e7"}}]}}, "14": {"20": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "d96c5f79-542a-4a3f-897c-b6e5134f060a", "data": {"cross_beam_guid": "b7513706-6e00-413c-907e-658ad7724a1a", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "9e4e3e68-aaad-4a9b-87ad-b1ff22734789"}}]}, "0": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "491f59ab-ba1a-423e-a227-dbaaf2a9cba5", "data": {"cross_beam_guid": "102b73cd-f45c-402e-bf0c-134167c412a5", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "9e4e3e68-aaad-4a9b-87ad-b1ff22734789"}}]}}, "24": {"21": {"interactions": [{"dtype": "compas_timber.connections/LButtJoint", "name": "LButtJoint", "guid": "4ae5a1bc-ce81-4454-a9e1-8349c00d89ab", "data": {"cross_beam_guid": "8642d54d-34bd-4edc-9fd2-443419411df8", "modify_cross": true, "mill_depth": 0, "birds_mouth": false, "small_beam_butts": false, "name": "LButtJoint", "reject_i": false, "main_beam_guid": "eeac7d91-3247-4596-9b5c-3d08d82b09d8"}}]}, "18": {"interactions": [{"dtype": "compas_timber.connections/LButtJoint", "name": "LButtJoint", "guid": "dad65118-978b-4a7b-98d3-f37d5c99120d", "data": {"cross_beam_guid": "5a6a0ea8-c561-4883-bf6e-d7da5bf93983", "modify_cross": true, "mill_depth": 0, "birds_mouth": false, "small_beam_butts": false, "name": "LButtJoint", "reject_i": false, "main_beam_guid": "eeac7d91-3247-4596-9b5c-3d08d82b09d8"}}]}, "25": {"interactions": [{"dtype": "compas_timber.connections/LButtJoint", "name": "LButtJoint", "guid": "d7c95937-e916-47a5-ad48-4cebbd1f7865", "data": {"cross_beam_guid": "b8cc12a4-649f-43f6-9b10-6eea19cbe6cc", "modify_cross": true, "mill_depth": 0, "birds_mouth": false, "small_beam_butts": false, "name": "LButtJoint", "reject_i": false, "main_beam_guid": "eeac7d91-3247-4596-9b5c-3d08d82b09d8"}}]}}, "13": {"1": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "c527fef5-451e-47c5-9ed3-7b152befbf36", "data": {"cross_beam_guid": "7190b17d-0297-43b2-9db5-52d3f1d47a84", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "6a34aaea-72e3-435b-b4b3-7a78f07386fc"}}]}, "18": {"interactions": [{"dtype": "compas_timber.connections/TButtJoint", "name": "TButtJoint", "guid": "1b74a2ff-533b-4290-8586-4d99c44ccc18", "data": {"cross_beam_guid": "5a6a0ea8-c561-4883-bf6e-d7da5bf93983", "mill_depth": 0, "birds_mouth": false, "name": "TButtJoint", "main_beam_guid": "6a34aaea-72e3-435b-b4b3-7a78f07386fc"}}]}}, "23": {"22": {"interactions": [{"dtype": "compas_timber.connections/LButtJoint", "name": "LButtJoint", "guid": "54cc8192-80a4-4aeb-8b10-a1d03b4b70e6", "data": {"cross_beam_guid": "e09760f3-9b30-41df-bf99-0872048e2f17", "modify_cross": true, "mill_depth": 0, "birds_mouth": false, "small_beam_butts": false, "name": "LButtJoint", "reject_i": false, "main_beam_guid": "5d1ce411-0d89-4556-8eed-0c7aa1b0a5b0"}}]}, "16": {"interactions": [{"dtype": "compas_timber.connections/LButtJoint", "name": "LButtJoint", "guid": "79900462-0b8a-4795-9e03-4da28c716cc2", "data": {"cross_beam_guid": "a740b3c3-a139-4c4f-a81d-5347062548aa", "modify_cross": true, "mill_depth": 0, "birds_mouth": false, "small_beam_butts": false, "name": "LButtJoint", "reject_i": false, "main_beam_guid": "5d1ce411-0d89-4556-8eed-0c7aa1b0a5b0"}}]}}}}, "element_material": {}, "tree": {"attributes": {}, "root": {"frame": null, "name": "root", "attributes": {}, "children": [{"element": "102b73cd-f45c-402e-bf0c-134167c412a5"}, {"element": "7190b17d-0297-43b2-9db5-52d3f1d47a84"}, {"element": "d62d05a8-f7d2-42e0-bf75-d2e1d927f4c2"}, {"element": "3b9a4dc6-5372-4658-a520-391aef31762b"}, {"element": "760192c5-39ce-4c1d-82de-a6659bd70299"}, {"element": "387a705b-8bb1-4c2b-ae52-9e28162a43ea"}, {"element": "dea1f3e5-df53-422b-bb25-cdb57bc90cd0"}, {"element": "a186bd44-2673-421e-8a15-b96cd6fa9d3c"}, {"element": "6d96ea5f-87fb-4830-8cf0-c1960f7655e7"}, {"element": "9865c454-94d0-4316-b0b6-6533e541e33d"}, {"element": "f7b33241-4fe7-459f-93db-62783a2f2060"}, {"element": "a24c43d9-713f-4b76-a2cd-1032b6feee4d"}, {"element": "4109bdf1-177a-42c4-ae4e-e9ede77fde08"}, {"element": "6a34aaea-72e3-435b-b4b3-7a78f07386fc"}, {"element": "9e4e3e68-aaad-4a9b-87ad-b1ff22734789"}, {"element": "a11c58bf-0ba1-41ce-a686-d7a2a4d51998"}, {"element": "a740b3c3-a139-4c4f-a81d-5347062548aa"}, {"element": "9b458d20-23a0-4c93-8f18-89dc06536ec6"}, {"element": "5a6a0ea8-c561-4883-bf6e-d7da5bf93983"}, {"element": "2d15ea36-b2d3-4ad4-be4c-a165d6d0b48e"}, {"element": "b7513706-6e00-413c-907e-658ad7724a1a"}, {"element": "8642d54d-34bd-4edc-9fd2-443419411df8"}, {"element": "e09760f3-9b30-41df-bf99-0872048e2f17"}, {"element": "5d1ce411-0d89-4556-8eed-0c7aa1b0a5b0"}, {"element": "eeac7d91-3247-4596-9b5c-3d08d82b09d8"}, {"element": "b8cc12a4-649f-43f6-9b10-6eea19cbe6cc"}, {"element": "7b1c2f2d-fd89-4696-8e48-a47adda56651"}, {"element": "a345f409-d677-4cff-a1f2-fc7624382106"}, {"element": "1cf1d057-869d-4461-bada-8fb1413ef7b9"}, {"element": "b7745255-b6c7-41aa-a987-694f79782abf"}, {"element": "b2f95a63-e5f9-4e0d-9fb8-bb00b1a1f0d1"}]}}}} diff --git a/docs/_images/element_dimension.JPG b/docs/_images/element_dimension.JPG deleted file mode 100644 index 7076caaf..00000000 Binary files a/docs/_images/element_dimension.JPG and /dev/null differ diff --git a/docs/_images/half_dome.JPG b/docs/_images/half_dome.JPG deleted file mode 100644 index e7c77c6f..00000000 Binary files a/docs/_images/half_dome.JPG and /dev/null differ diff --git a/docs/_images/half_dome_texture.JPG b/docs/_images/half_dome_texture.JPG deleted file mode 100644 index f5db8470..00000000 Binary files a/docs/_images/half_dome_texture.JPG and /dev/null differ diff --git a/docs/_images/half_dome_viewer.JPG b/docs/_images/half_dome_viewer.JPG deleted file mode 100644 index dc7262f1..00000000 Binary files a/docs/_images/half_dome_viewer.JPG and /dev/null differ diff --git a/docs/_static/PLACEHOLDER b/docs/_static/PLACEHOLDER deleted file mode 100644 index 4ae84b3b..00000000 --- a/docs/_static/PLACEHOLDER +++ /dev/null @@ -1 +0,0 @@ -# container for static files, e.g. logo, banner images, javascript, stylesheets, ... diff --git a/docs/api.rst b/docs/api.rst deleted file mode 100644 index bf9926b2..00000000 --- a/docs/api.rst +++ /dev/null @@ -1,11 +0,0 @@ -******************************************************************************** -API Reference -******************************************************************************** - -.. toctree:: - :maxdepth: 1 - - api/compas_cadwork.conversions - api/compas_cadwork.datamodel - api/compas_cadwork.scene - api/compas_cadwork.utilities diff --git a/docs/api/compas_cadwork.conversions.md b/docs/api/compas_cadwork.conversions.md new file mode 100644 index 00000000..a870a19a --- /dev/null +++ b/docs/api/compas_cadwork.conversions.md @@ -0,0 +1 @@ +# ::: compas_cadwork.conversions diff --git a/docs/api/compas_cadwork.conversions.rst b/docs/api/compas_cadwork.conversions.rst deleted file mode 100644 index 8a630706..00000000 --- a/docs/api/compas_cadwork.conversions.rst +++ /dev/null @@ -1,17 +0,0 @@ -******************************************************************************** -compas_cadwork.conversions -******************************************************************************** - -.. currentmodule:: compas_cadwork.conversions - -Functions -========= - -.. autosummary:: - :toctree: generated/ - :nosignatures: - - point_to_cadwork - point_to_compas - vector_to_cadwork - vector_to_compas diff --git a/docs/api/compas_cadwork.datamodel.md b/docs/api/compas_cadwork.datamodel.md new file mode 100644 index 00000000..dc5f68e3 --- /dev/null +++ b/docs/api/compas_cadwork.datamodel.md @@ -0,0 +1 @@ +# ::: compas_cadwork.datamodel diff --git a/docs/api/compas_cadwork.datamodel.rst b/docs/api/compas_cadwork.datamodel.rst deleted file mode 100644 index 8d38e415..00000000 --- a/docs/api/compas_cadwork.datamodel.rst +++ /dev/null @@ -1,19 +0,0 @@ -******************************************************************************** -compas_cadwork.datamodel -******************************************************************************** - -.. currentmodule:: compas_cadwork.datamodel - -Classes -======= - -.. autosummary:: - :toctree: generated/ - :nosignatures: - - ElementGroupingType - ElementGroup - Element - - AnchorPoint - Dimension diff --git a/docs/api/compas_cadwork.elements.md b/docs/api/compas_cadwork.elements.md new file mode 100644 index 00000000..46a8d0bf --- /dev/null +++ b/docs/api/compas_cadwork.elements.md @@ -0,0 +1 @@ +# ::: compas_cadwork.elements diff --git a/docs/api/compas_cadwork.md b/docs/api/compas_cadwork.md new file mode 100644 index 00000000..23424481 --- /dev/null +++ b/docs/api/compas_cadwork.md @@ -0,0 +1 @@ +# ::: compas_cadwork diff --git a/docs/api/compas_cadwork.scene.md b/docs/api/compas_cadwork.scene.md new file mode 100644 index 00000000..9cc6be48 --- /dev/null +++ b/docs/api/compas_cadwork.scene.md @@ -0,0 +1 @@ +# ::: compas_cadwork.scene diff --git a/docs/api/compas_cadwork.scene.rst b/docs/api/compas_cadwork.scene.rst deleted file mode 100644 index e41ce789..00000000 --- a/docs/api/compas_cadwork.scene.rst +++ /dev/null @@ -1,17 +0,0 @@ -******************************************************************************** -compas_cadwork.scene -******************************************************************************** - -.. currentmodule:: compas_cadwork.scene - -Classes -======= - -.. autosummary:: - :toctree: generated/ - :nosignatures: - - CadworkSceneObject - Text3dSceneObject - LinearDimensionSceneObject - Camera diff --git a/docs/api/compas_cadwork.utilities.md b/docs/api/compas_cadwork.utilities.md new file mode 100644 index 00000000..beab9dd4 --- /dev/null +++ b/docs/api/compas_cadwork.utilities.md @@ -0,0 +1 @@ +# ::: compas_cadwork.utilities diff --git a/docs/api/compas_cadwork.utilities.rst b/docs/api/compas_cadwork.utilities.rst deleted file mode 100644 index 36689563..00000000 --- a/docs/api/compas_cadwork.utilities.rst +++ /dev/null @@ -1,47 +0,0 @@ -******************************************************************************** -compas_cadwork.utilities -******************************************************************************** - -.. currentmodule:: compas_cadwork.utilities - -Classes -========= - -.. autosummary:: - :toctree: generated/ - :nosignatures: - - IFCExporter - IFCExportSettings - -Functions -========= - -.. autosummary:: - :toctree: generated/ - :nosignatures: - - set_camera_view - get_plugin_home - get_filename - get_active_elements - get_element_groups - activate_elements - hide_elements - lock_elements - unlock_elements - show_all_elements - hide_all_elements - disable_autorefresh - enable_autorefresh - force_refresh - get_all_element_ids - get_all_elements - get_all_elements_with_attrib - remove_elements - save_project_file - zoom_active_elements - get_dimension_data - get_bounding_box_from_cadwork_object - get_dimensions - get_user_point diff --git a/docs/assets/images/beams-showcase.png b/docs/assets/images/beams-showcase.png new file mode 100644 index 00000000..8f91082d Binary files /dev/null and b/docs/assets/images/beams-showcase.png differ diff --git a/docs/_images/half_dome_trimmed.gif b/docs/assets/images/dome.gif similarity index 100% rename from docs/_images/half_dome_trimmed.gif rename to docs/assets/images/dome.gif diff --git a/compas_cadwork.jpg b/docs/assets/images/dome.jpg similarity index 100% rename from compas_cadwork.jpg rename to docs/assets/images/dome.jpg diff --git a/docs/assets/images/logo.png b/docs/assets/images/logo.png new file mode 100644 index 00000000..5dd158c8 Binary files /dev/null and b/docs/assets/images/logo.png differ diff --git a/docs/assets/images/panels-showcase.png b/docs/assets/images/panels-showcase.png new file mode 100644 index 00000000..0910f6f9 Binary files /dev/null and b/docs/assets/images/panels-showcase.png differ diff --git a/docs/assets/stylesheets/custom.css b/docs/assets/stylesheets/custom.css new file mode 100644 index 00000000..86aefac4 --- /dev/null +++ b/docs/assets/stylesheets/custom.css @@ -0,0 +1,3 @@ +:root > * { + --md-primary-fg-color: #0092d2; +} diff --git a/docs/conf.py b/docs/conf.py deleted file mode 100644 index 52ffa431..00000000 --- a/docs/conf.py +++ /dev/null @@ -1,166 +0,0 @@ -# flake8: noqa -# -*- coding: utf-8 -*- - -import sphinx_compas2_theme -from sphinx.writers import html -from sphinx.writers import html5 - -# -- General configuration ------------------------------------------------ - -project = "COMPAS cadwork" -copyright = "Gramazio Kohler Research" -author = "Gramazio Kohler Research, ETH Zurich" -organization = "gramaziokohler" -package = "compas_cadwork" - -master_doc = "index" -source_suffix = {".rst": "restructuredtext", ".md": "markdown"} -templates_path = sphinx_compas2_theme.get_autosummary_templates_path() -exclude_patterns = sphinx_compas2_theme.default_exclude_patterns -add_module_names = True -language = "en" - -latest_version = sphinx_compas2_theme.get_latest_version() - -if latest_version == "Unreleased": - release = "Unreleased" - version = "latest" -else: - release = latest_version - version = ".".join(release.split(".")[0:2]) - -# -- Extension configuration ------------------------------------------------ - -extensions = sphinx_compas2_theme.default_extensions - -# numpydoc options - -numpydoc_show_class_members = False -numpydoc_class_members_toctree = False -numpydoc_attributes_as_param_list = True -numpydoc_show_inherited_class_members = False - -# bibtex options - -# autodoc options - -autodoc_type_aliases = {} # type: ignore[var-annotated] -autodoc_typehints_description_target = "documented" -autodoc_mock_imports = sphinx_compas2_theme.default_mock_imports -autodoc_default_options = { - "undoc-members": True, - "show-inheritance": True, -} -autodoc_member_order = "groupwise" -autodoc_typehints = "description" -autodoc_class_signature = "separated" - -autoclass_content = "class" - - -def setup(app): - app.connect("autodoc-skip-member", sphinx_compas2_theme.skip) - - -# autosummary options - -autosummary_generate = True -autosummary_mock_imports = sphinx_compas2_theme.default_mock_imports - -# graph options - -# plot options - -plot_include_source = False -plot_html_show_source_link = False -plot_html_show_formats = False -plot_formats = ["png"] - -# intersphinx options - -intersphinx_mapping = { - "python": ("https://docs.python.org/", None), - "compas": ("https://compas.dev/compas/latest/", None), -} - -# linkcode - -linkcode_resolve = sphinx_compas2_theme.get_linkcode_resolve(organization, package) - -# extlinks - -extlinks = { - "rhino": ("https://developer.rhino3d.com/api/RhinoCommon/html/T_%s.htm", "%s"), - "blender": ("https://docs.blender.org/api/2.93/%s.html", "%s"), -} - -# from pytorch - -sphinx_compas2_theme.replace(html.HTMLTranslator) -sphinx_compas2_theme.replace(html5.HTML5Translator) - -# -- Options for HTML output ---------------------------------------------- - -html_theme = "sidebaronly" -html_title = project - -favicons = [ - { - "rel": "icon", - "href": "compas.ico", - } -] - -html_theme_options = { - "external_links": [ - {"name": "COMPAS Framework", "url": "https://compas.dev"}, - ], - "icon_links": [ - { - "name": "GitHub", - "url": f"https://github.com/{organization}/{package}", - "icon": "fa-brands fa-github", - "type": "fontawesome", - }, - { - "name": "Discourse", - "url": "http://forum.compas-framework.org/", - "icon": "fa-brands fa-discourse", - "type": "fontawesome", - }, - { - "name": "PyPI", - "url": f"https://pypi.org/project/{package}/", - "icon": "fa-brands fa-python", - "type": "fontawesome", - }, - ], - "switcher": { - "json_url": f"https://{organization}.github.io/{package}/versions.json", - "version_match": version, - }, - "logo": { - "image_light": "_static/compas_icon_white.png", - "image_dark": "_static/compas_icon_white.png", - "text": "COMPAS cadwork", - }, - "navigation_depth": 2, -} - -html_context = { - "github_url": "https://github.com", - "github_user": organization, - "github_repo": package, - "github_version": "main", - "doc_path": "docs", -} - -html_static_path = sphinx_compas2_theme.get_html_static_path() + ["_static"] -html_css_files = [] # type: ignore[var-annotated] -html_extra_path = [] # type: ignore[var-annotated] -html_last_updated_fmt = "" -html_copy_source = False -html_show_sourcelink = True -html_permalinks = False -html_permalinks_icon = "" -html_compact_lists = True diff --git a/docs/examples.rst b/docs/examples.rst deleted file mode 100644 index 49e87159..00000000 --- a/docs/examples.rst +++ /dev/null @@ -1,10 +0,0 @@ -******************************************************************************** -Examples -******************************************************************************** - -.. toctree:: - :maxdepth: 1 - :titlesonly: - :glob: - - examples/* diff --git a/docs/examples/Basic.1_api_examples.rst b/docs/examples/Basic.1_api_examples.rst deleted file mode 100644 index 0d2131c7..00000000 --- a/docs/examples/Basic.1_api_examples.rst +++ /dev/null @@ -1,3 +0,0 @@ -******************************************************************************** -Basic.1 API Example -******************************************************************************** diff --git a/docs/examples/Basic.2_comp_design.rst b/docs/examples/Basic.2_comp_design.rst deleted file mode 100644 index 05eac79e..00000000 --- a/docs/examples/Basic.2_comp_design.rst +++ /dev/null @@ -1,72 +0,0 @@ -******************************************************************************** -Basic.2 Computational Design -******************************************************************************** - -This is a simple example of how `compas_cadwork` can be used in a computational design workflow, utilizing COMPAS's pure Python geometry kernel. - -.. image:: ../_images/half_dome_trimmed.gif - :alt: Computational Design Example - -.. NOTE:: - This example uses COMPAS's digital timber extension `COMPAS Timber `_. - - -The followingn are the required imports - -.. code-block:: python - - from compas.datastructures import Mesh - from compas.geometry import Point, Line, Plane, Sphere, is_point_infrontof_plane - from compas.scene import Scene - - from compas_timber.elements import Beam - -First, we create a parametric sphere to use for our design, and then we create a mesh from the sphere. -The meshe's edges will become the beams. - -.. code-block:: python - - SPHERE_RADIUS = 3000 - SPHERE_CENTER = Point(0, 0, 0) - sphere = Sphere.from_point_and_radius(SPHERE_CENTER, SPHERE_RADIUS) - - MESH_RESOLUTION = 16 - mesh = Mesh.from_shape(sphere, u=MESH_RESOLUTION, v=MESH_RESOLUTION) - -Next, we create a plane that will be used to filter out the beams that are not in front of the plane. -We then iterate over the mesh's edges, creating beams from the edges that are in front of the plane. - -.. code-block:: python - - plane = Plane.worldXY() - plane.point.z -= 1 - - lines_and_normals = [] - for edge in mesh.edges(): - v1, v2 = edge - start = Point(**mesh.vertex[v1]) - end = Point(**mesh.vertex[v2]) - line = Line(start, end) - - if not is_point_infrontof_plane(line.midpoint, plane): - continue - - z_vector = mesh.vertex_normal(v1) - lines_and_normals.append((line, z_vector)) - -Finally, we create the beams from the lines and normals, and add them to a scene to visualize the design. - -.. code-block:: python - - BEAM_WIDTH = 80 - BEAM_HEIGHT = 140 - - beam_list = [] - for line, z_vector in lines_and_normals: - beam = Beam.from_centerline(line, BEAM_WIDTH, BEAM_HEIGHT, z_vector) - beam_list.append(beam) - - scene = Scene(context="cadwork") - for beam in beam_list: - scene.add(beam) - scene.draw() diff --git a/docs/examples/beams-showcase.md b/docs/examples/beams-showcase.md new file mode 100644 index 00000000..28f85530 --- /dev/null +++ b/docs/examples/beams-showcase.md @@ -0,0 +1,13 @@ +# Beams Showcase + +This simple examples shows you how to work with beams and programmatically creating them using the constructors from the `Beam` class. + +```python +--8<-- +examples/beams-showcase.py +--8<-- +``` + +If run successfully, you should get the following output in Cadwork 3d: + +![Expected output](../assets/images/beams-showcase.png) diff --git a/docs/examples/computational-design.md b/docs/examples/computational-design.md new file mode 100644 index 00000000..da787eea --- /dev/null +++ b/docs/examples/computational-design.md @@ -0,0 +1,72 @@ +# Computational Design + +This is a simple example of how `compas_cadwork` can fit into a computational design workflow using COMPAS' pure Python geometry kernel. + +![Computational design example](../assets/images/dome.gif) + +> [!NOTE] +> This example uses the COMPAS Timber extension: [COMPAS Timber](https://gramaziokohler.github.io/compas_timber/). + +The following are the required imports: + +```python +from compas.datastructures import Mesh +from compas.geometry import Line +from compas.geometry import Plane +from compas.geometry import Point +from compas.geometry import Sphere +from compas.geometry import is_point_infrontof_plane +from compas.scene import Scene + +from compas_timber.elements import Beam +``` + +First, we create a parametric sphere to use for our design, and then we create a mesh from the sphere. +The mesh's edges will become the beams: + +```python +SPHERE_RADIUS = 3000 +SPHERE_CENTER = Point(0, 0, 0) +sphere = Sphere.from_point_and_radius(SPHERE_CENTER, SPHERE_RADIUS) + +MESH_RESOLUTION = 16 +mesh = Mesh.from_shape(sphere, u=MESH_RESOLUTION, v=MESH_RESOLUTION) +``` + +Next, we create a plane that will be used to filter out the beams that are not in front of the plane. +We then iterate over the mesh's edges, creating beams from the edges that are in front of the plane: + +```python +plane = Plane.worldXY() +plane.point.z -= 1 + +lines_and_normals = [] +for edge in mesh.edges(): + v1, v2 = edge + start = Point(**mesh.vertex[v1]) + end = Point(**mesh.vertex[v2]) + line = Line(start, end) + + if not is_point_infrontof_plane(line.midpoint, plane): + continue + + z_vector = mesh.vertex_normal(v1) + lines_and_normals.append((line, z_vector)) +``` + +Finally, we create the beams from the lines and normals, and add them to a scene to visualize the design: + +```python +BEAM_WIDTH = 80 +BEAM_HEIGHT = 140 + +beam_list = [] +for line, z_vector in lines_and_normals: + beam = Beam.from_centerline(line, BEAM_WIDTH, BEAM_HEIGHT, z_vector) + beam_list.append(beam) + +scene = Scene(context="cadwork") +for beam in beam_list: + scene.add(beam) +scene.draw() +``` diff --git a/docs/examples/panels-showcase.md b/docs/examples/panels-showcase.md new file mode 100644 index 00000000..3acfc96a --- /dev/null +++ b/docs/examples/panels-showcase.md @@ -0,0 +1,13 @@ +# Panels Showcase + +This simple examples shows you how to work with panels and programmatically creating them using the constructors from the `Panel` class. + +```python +--8<-- +examples/panels-showcase.py +--8<-- +``` + +If run successfully, you should get the following output in Cadwork 3d: + +![Expected output](../assets/images/panels-showcase.png) diff --git a/docs/getting-started/index.md b/docs/getting-started/index.md new file mode 100644 index 00000000..ff1e9c36 --- /dev/null +++ b/docs/getting-started/index.md @@ -0,0 +1,9 @@ +# Getting Started + +This guide will walk you through the installation and setup process. +Whether you are an experienced developer or completely new to Python programming, this tutorial will help you get your environment ready. + +Depending on what you want to achieve in your project, you can use COMPAS cadwork in two different ways: + +1. [**Inside Cadwork's Python Shell**](shell.md): Best for quick scripting, automation of repetitive tasks, and running short code snippets directly inside the application. +2. [**In a Standalone Plugin**](plugin.md): Best for building full-featured, complex tools that can be distributed and shared with other people. diff --git a/docs/getting-started/plugin.md b/docs/getting-started/plugin.md new file mode 100644 index 00000000..8f30e7ea --- /dev/null +++ b/docs/getting-started/plugin.md @@ -0,0 +1,57 @@ +# Using COMPAS cadwork in a Plugin + +If you are developing a standalone Python plugin for Cadwork, it is highly recommended to keep your plugin's dependencies isolated in a **virtual environment**. + +## Step 1: Set up the plugin project + +Before adding COMPAS cadwork, initialize your standard plugin structure. +You can read how to create a basic plugin by following the steps in the [official Cadwork documentation](https://docs.cadwork.com/projects/cwapi3dpython/en/latest/get_started/). + +There are two primary ways to create and manage virtual environments. +Choose the approach that best fits your workflow. + +### Option A. Using a Project Manager (Recommended) + +Modern Python tools like [uv](https://docs.astral.sh/uv/) or [poetry](https://python-poetry.org) handle virtual environments cleanly. + +If you use **uv**, open your terminal, navigate to your plugin's root folder, and run: + +```bash +uv add compas-cadwork +``` + +This single command automatically initializes a virtual environment and installs the latest version of `compas-cadwork` into it. + +### Option B. Manual setup + +If you prefer to use standard built-in Python utilities without installing extra tools, you can create the environment manually. +Open your terminal, navigate to your plugin directory, and execute these commands sequentially: + +```ps1 +# 1. Create a virtual environment folder named '.venv' inside your plugin folder +python -m virtualenv .venv + +# 2. Activate the virtual environment +.venv\Scripts\activate + +# 3. Install (or upgrade) the library inside this local environment +pip install compas-cadwork --upgrade +``` + +## Step 2: Import COMPAS cadwork in Your Code + +Because Cadwork runs plugins from its own internal environment, you must explicitly point it to your plugin's local packages. +Add this snippet at the very top of your plugin's entrypoint Python file: + +```python +import sys +from pathlib import Path + +# Add your local virtual environment to Python's search path +deps_path = str(Path(__file__).parent / ".venv") +if deps_path not in sys.path: + sys.path.append(deps_path) + +# Now you can safely import the library +import compas_cadwork +``` diff --git a/docs/getting-started/shell.md b/docs/getting-started/shell.md new file mode 100644 index 00000000..2f58fd28 --- /dev/null +++ b/docs/getting-started/shell.md @@ -0,0 +1,56 @@ +# Using COMPAS cadwork from the Python Shell + +Cadwork 3d features a built-in Python shell plugin that lets you execute Python code directly within the running application. +To use COMPAS cadwork here, we need to install the library directly into Cadwork's integrated Python environment. + +## Prerequisites + +Before beginning, verify that you have the Python Shell available in your Cadwork environment. +If your Cadwork installation does not include the Python Shell, you can download and install it manually by following the instructions from the [official Cadwork Python documentation](https://docs.cadwork.com/projects/cwapi3dpython/en/latest/get_started/). + +## Step 1: Locate your Cadwork "site-packages" Directory + +Python libraries are stored in a specific folder called `site-packages`. +Because Cadwork uses its own self-contained Python instance, we must find the exact location of this folder on your computer. + +The path follows this standard pattern: + +```text +C:\Program Files\cadwork.dir\EXE_\Pclib.x64\python\site-packages +``` + +Find your specific version of Cadwork in the list below and copy the path: + +- **Cadwork 2024:** `C:\Program Files\cadwork.dir\EXE_30\Pclib.x64\python310\site-packages` +- **Cadwork 2025:** `C:\Program Files\cadwork.dir\EXE_2025\Pclib.x64\python312\site-packages` +- **Cadwork 2026:** `C:\Program Files\cadwork.dir\EXE_2026\Pclib.x64\python314\site-packages` + +## Step 2: Install the Library + +To install the package, we use `pip` (Python's built-in package manager). +We will use the `--target` flag to tell `pip` to install the library directly into the Cadwork folder you identified before instead of your computer's global Python space. + +1. Open a **PowerShell** terminal by pressing the Windows key, typing `powershell`, and hitting Enter. +2. Copy the command below, making sure to replace `` with the exact folder path from Step 1. +3. Press Enter to run the command. + +```bash +pip install compas-cadwork --target "" --upgrade +``` + +## Step 3: Verify the installation + +Double-check that the package was successfully installed and is accessible: + +1. Launch **cadwork 3d**. +2. Open the **Python Shell** plugin. +3. Paste or type the following line into the console and press Enter. + +```python +import compas_cadwork +``` + +If the console moves to the next line without throwing any error messages, the installation was a success! + +> [!TIP] +> Whenever you need to upgrade COMPAS cadwork to its latest version, repeat the same steps from before. diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 00000000..f30bb48e --- /dev/null +++ b/docs/index.md @@ -0,0 +1,8 @@ +# COMPAS cadwork + +![Featured image](assets/images/dome.jpg) + +COMPAS cadwork is an open-source Python package that brings the COMPAS framework into cadwork 3D. + +Make use of COMPAS' extensive geometry kernel, data structures, and algorithms to create, manipulate, and analyze your 3D models in cadwork. +Gain access to the COMPAS ecosystem which includes a wide range of tools and libraries engineered for the AEC industry. diff --git a/docs/index.rst b/docs/index.rst deleted file mode 100644 index be974ecc..00000000 --- a/docs/index.rst +++ /dev/null @@ -1,36 +0,0 @@ -******************************************************************************** -COMPAS cadwork -******************************************************************************** - -.. rst-class:: lead - - COMPAS cadwork is an open-source Python package which allows you to harness the power of the COMPAS framework inside cadwork 3d. - -.. figure:: ../compas_cadwork.jpg - :figclass: figure - :class: figure-img img-fluid - -.. rst-class:: lead - - Make use of COMPAS' extensive geometry kernel, data structures, and algorithms to create, manipulate, and analyze your 3d models in cadwork. - Gain access to the COMPAS ecosystem which includes a wide range of tools and libraries engineered for the AEC industry. - -Table of Contents -================= - -.. toctree:: - :maxdepth: 2 - :titlesonly: - - Introduction - installation - examples - api - license - - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` diff --git a/docs/installation.rst b/docs/installation.rst deleted file mode 100644 index c96f8ad7..00000000 --- a/docs/installation.rst +++ /dev/null @@ -1,105 +0,0 @@ -******************************************************************************** -Installation -******************************************************************************** - -.. NOTE:: - - To install `compas_cadwork`, you need to have `cadwork `_ and `Python3.10 `_ installed on your system. - - -.. NOTE:: - - There generally two ways one might use `compas_cadowrk` in cadwork. - - 1. Use it in cadwork's Python Console for some quick scripting. - 2. Develop a plugin that uses `compas_cadwork`. - - Depending on your needs, you can choose one of the following two ways to install `compas_cadwork`. - -Use in cadwork's Python Console -========================================================== - -.. NOTE:: - - If you are getting the following error trying to follow the method below - - `PermissionError: [WinError 5] Access is denied ...` - - This might be due to cadwork 3d running in the background. Make sure to close cadwork 3d before running the command again. - -The simplest way to use `compas_cadwork` in cadwork's Python Console is to install it to the python environment that's integrated with cadwork. - -One of these relevant paths is - -``C:\Program Files\cadwork.dir\EXE_30\Pclib.x64\python310\site-packages`` - -To install `compas_cadwork` to this path, open a terminal and run following commands - -.. code-block:: bash - - set CADWORK_SITE_PACKAGES="C:\Program Files\cadwork.dir\EXE_30\Pclib.x64\python310\site-packages" - - pip install compas_cadwork --target %CADWORK_SITE_PACKAGES% --upgrade - - -.. WARNING:: - - Following an update of cadwork 3d, packages installed to the location above might be removed. Make sure to reinstall `compas_cadwork` after an update. - - -Develop a plugin using `compas_cadwork` -========================================================== - -.. NOTE:: - - `` is used below as placeholder for the plugin's name. Make sure to replace it with the name of you plugin. - - -.. NOTE:: - - There are two paths where python plugins can be stored in cadwork. Choose one of them depending on your needs. - In the example below the chosen path is denoted as ``. - - - User plugin path: ``C:\Users\Public\Documents\cadwork\userprofil_30\3d\API.x64`` - - System plugin path: ``C:\ProgramData\cadwork\cadworkprofil_30\german\plugins`` - -To install `compas_cadwork` and use it in your own plugin development, it is recommended to create a virtual environment for your plugin and install `compas_cadwork` there. - -To create a virtual environment first install `virtualenv` - -.. code-block:: bash - - python -m pip install virtualenv - -Then create a virtual environment named `` - -.. code-block:: bash - - python -m virtualenv \ - - -Activate the virtual environment - -.. code-block:: bash - - \\Scripts\activate - - -Install `compas_cadwork` to the virtual environment - -.. code-block:: bash - - python -m pip install compas_cadwork --upgrade - - -The last step is to add the virtual environment to the python path in your main plugin module - -.. code-block:: python - - # \\.py - LIB = r"\\Lib\site-packages" - import sys - if LIB not in sys.path: - sys.path.append(LIB) - - # from here on you can import compas_cadwork diff --git a/docs/license.md b/docs/license.md new file mode 100644 index 00000000..0e8c6fca --- /dev/null +++ b/docs/license.md @@ -0,0 +1,3 @@ +# License + +--8<-- "LICENSE" diff --git a/docs/license.rst b/docs/license.rst deleted file mode 100644 index e6a80ce0..00000000 --- a/docs/license.rst +++ /dev/null @@ -1,5 +0,0 @@ -******************************************************************************** -License -******************************************************************************** - -.. literalinclude:: ../LICENSE diff --git a/examples/api_examples.py b/examples/api_examples.py deleted file mode 100644 index 72381adf..00000000 --- a/examples/api_examples.py +++ /dev/null @@ -1,101 +0,0 @@ -import os - - -HERE = os.path.dirname(__file__) -DATA = os.path.join(HERE, "data") - - -def find_top_corner_of_group_wall_with_name(target_group): - # find the wall element - import attribute_controller as ac - import cadwork - import element_controller as ec - import geometry_controller as gc - - grouping_type = ac.get_element_grouping_type() - if grouping_type == cadwork.element_grouping_type.subgroup: - get_group_name = ac.get_subgroup - else: - get_group_name = ac.get_group - - wall_element = None - element_ids = ec.get_all_identifiable_element_ids() - for e_id in element_ids: - group_name = get_group_name(e_id) - if target_group == group_name and (ac.is_framed_wall(e_id) or ac.is_floor(e_id) or ac.is_roof(e_id)): - wall_element = e_id - break - - if wall_element is None: - raise ValueError(f"Could not find wall element for group {target_group}") - - p1 = gc.get_p1(wall_element) - y_axis = gc.get_yl(wall_element) - width = gc.get_width(wall_element) - - shift_vector = y_axis * 0.5 * width - top_corner = p1 + shift_vector - return cadwork.point_3d(top_corner) - - -def find_top_corner_of_group_wall_with_name_2(target_group): - from compas_cadwork.conversions import point_to_cadwork - from compas_cadwork.utilities import get_element_groups - - groups = get_element_groups() - group = groups.get(target_group) - if group is None: - raise ValueError(f"Could not find wall element for group {target_group}") - - wall_element = group.wall_frame_element - - shift_vector = wall_element.frame.yaxis.scaled(0.5 * wall_element.width) - point = wall_element.frame.translated(shift_vector).point - return point_to_cadwork(point) - - -def side_as_surface(beam, side_index): # type: ignore[syntax] - # type: (int) -> compas.geometry.PlanarSurface - """Returns the requested side of the beam as a parametric planar surface. - Parameters - ---------- - side_index : int - The index of the reference side to be returned. 0 to 5. - """ - from compas.geometry import PlanarSurface - - # TODO: maybe this should be the default representation of the ref sides? - ref_side = beam.ref_sides[side_index] - if side_index in (0, 2): # top + bottom - xsize = beam.blank_length - ysize = beam.width - elif side_index in (1, 3): # sides - xsize = beam.blank_length - ysize = beam.height - elif side_index in (4, 5): # ends - xsize = beam.width - ysize = beam.height - return PlanarSurface(xsize, ysize, frame=ref_side, name=ref_side.name) - - -def beam_face_parametric_traverse(): - from compas.data import json_load - - # load model - PATH = os.path.join(DATA, "stand_w_drills.json") - model = json_load(PATH) - - # identify beam.. - import element_controller as ec - - from compas_cadwork.conversions import point_to_cadwork - - beam = model.beams[6] - ec.create_node(point_to_cadwork(beam.frame.point)) - - # create surface from face - surface = side_as_surface(beam, 0) - - point = surface.point_at(surface.xsize * 0.5, surface.ysize * 0.5) - - ec.create_node(point_to_cadwork(point)) diff --git a/examples/beams-showcase.py b/examples/beams-showcase.py new file mode 100644 index 00000000..970a01cc --- /dev/null +++ b/examples/beams-showcase.py @@ -0,0 +1,76 @@ +from functools import lru_cache +from math import cos +from math import pi +from math import radians +from math import sin + +from compas.geometry import Frame +from compas.geometry import Point +from compas.geometry import Polygon +from compas.geometry import Rotation +from compas.geometry import Vector + +from compas_cadwork.elements import Beam + + +def frame_with_point(frame: Frame, point: Point) -> Frame: + new_frame: Frame = frame.copy() + new_frame.point = point + return new_frame + + +@lru_cache +def create_hexagon_section(radius: float) -> Polygon: + points: list[Point] = [] + for i in range(6): + angle = i * (2 * pi / 6) + x = radius * cos(angle) + y = radius * sin(angle) + points.append(Point(x, y)) + return Polygon(points) + + +frame = Frame(Point(0, 0, 0), Vector(0, 1, 0), Vector(0, 0, 1)) + +for i in range(4): + # Circular beam + circular = Beam.circular( + frame=frame_with_point(frame, Point(0, 0, 1000)), + length=4000, + diameter=500, + ) + circular.name = f"Circular #{i}" + print(circular, circular.frame) + + # Rectangular beam + rectangular = Beam.rectangular( + frame=frame_with_point(frame, Point(0, 0, 3000)), + length=4000, + width=500, + height=350, + ) + rectangular.name = f"Rectangular #{i}" + print(rectangular, rectangular.frame) + + # Triangular beam + triangle_section = Polygon([(0, 0), (300, 0), (150, 259.8)]) + triangular = Beam.polygonal( + frame=frame_with_point(frame, Point(0, 0, 5000)), + length=4000, + section=triangle_section, + ) + triangular.name = f"Triangular #{i}" + print(triangular, triangular.frame) + + # Hexagonal beam + hexagon_section = create_hexagon_section(300) + hexagonal = Beam.polygonal( + frame=frame_with_point(frame, Point(0, 0, 8000)), + length=4000, + section=hexagon_section, + ) + hexagonal.name = f"Hexagonal #{i}" + print(hexagonal, hexagonal.frame) + + # Rotate frame along the Y-axis + frame = frame.transformed(Rotation.from_axis_and_angle(frame.yaxis, radians(-90), frame.point)) diff --git a/examples/panels-showcase.py b/examples/panels-showcase.py new file mode 100644 index 00000000..2afd8bda --- /dev/null +++ b/examples/panels-showcase.py @@ -0,0 +1,53 @@ +from functools import lru_cache +from math import cos +from math import pi +from math import sin + +from compas.geometry import Frame +from compas.geometry import Point +from compas.geometry import Polygon +from compas.geometry import Vector + +from compas_cadwork.elements import Panel + + +@lru_cache +def create_hexagon_outline(radius: float) -> Polygon: + points: list[Point] = [] + for i in range(6): + angle = i * (2 * pi / 6) + x = radius * cos(angle) + y = radius * sin(angle) + points.append(Point(x, y)) + return Polygon(points) + + +# Rectangular slab +rectangular_slab = Panel.rectangular( + frame=Frame(Point(0, 0, 1000), Vector(1, 0, 0), Vector(0, 1, 0)), + length=4000, + width=1000, + thickness=200, +) +rectangular_slab.name = "Rectangular slab" +print(rectangular_slab, rectangular_slab.frame) + +# Rectangular panel +rectangular_panel = Panel.rectangular( + frame=Frame(Point(0, -400, 1600), Vector(1, 0, 0), Vector(0, 0, 1)), + length=4000, + width=1000, + thickness=200, +) +rectangular_panel.name = "Rectangular panel" +print(rectangular_panel, rectangular_panel.frame) + +# Polygonal slab +hexagon_outline = create_hexagon_outline(1000) +polygonal_slab = Panel.polygonal( + frame=Frame(Point(0, 0, 0), Vector(0, 0, 1), Vector(0, 1, 0)), + outline=hexagon_outline, + thickness=200, +) +polygonal_slab.name = "Polygonal slab" +print(polygonal_slab, polygonal_slab.frame) diff --git a/mkdocs.yml b/mkdocs.yml new file mode 100644 index 00000000..f8d703ab --- /dev/null +++ b/mkdocs.yml @@ -0,0 +1,155 @@ +site_name: COMPAS cadwork +site_url: https://gramaziokohler.github.io/compas_cadwork/ +site_description: COMPAS package for integrating with cadwork. +repo_name: gramaziokohler +repo_url: https://github.com/gramaziokohler/compas_cadwork/ +edit_uri: blob/main/docs/ +copyright: Copyright © 2026, ETH Zurich - Gramazio Kohler Research + +extra: + homepage: https://gramaziokohler.github.io/compas_cadwork/ + version: + provider: mike + +theme: + name: material + palette: + - scheme: default + primary: indigo + accent: indigo + toggle: + icon: material/brightness-7 + name: Switch to dark mode + - scheme: slate + primary: indigo + accent: indigo + toggle: + icon: material/brightness-4 + name: Switch to light mode + font: + text: Roboto + code: Roboto Mono + logo: assets/images/logo.png + features: + - content.code.copy + - content.footnote.tooltips + - navigation.expand + - navigation.footer + - navigation.indexes + - navigation.sections + - navigation.top + - search.highlight + - search.suggest + - toc.follow + +extra_css: + - assets/stylesheets/custom.css + +markdown_extensions: + - abbr + - admonition + - attr_list + - callouts: + strip_period: no + - def_list + - footnotes + - md_in_html + - pymdownx.blocks.caption + - pymdownx.caret + - pymdownx.emoji: + emoji_index: !!python/name:material.extensions.emoji.twemoji + emoji_generator: !!python/name:material.extensions.emoji.to_svg + - pymdownx.highlight: + anchor_linenums: true + line_spans: __span + pygments_lang_class: true + - pymdownx.inlinehilite + - pymdownx.keys + - pymdownx.mark + - pymdownx.tasklist: + custom_checkbox: true + - pymdownx.tilde + - pymdownx.snippets: + check_paths: true + - toc: + permalink: "ยค" + - pymdownx.superfences: + custom_fences: + - name: mermaid + class: mermaid + format: !!python/name:mermaid2.fence_mermaid_custom + +plugins: + - search + - mermaid2 + - autorefs + - callouts + - mkdocstrings: + default_handler: python + handlers: + python: + paths: [src] + inventories: + - https://docs.python.org/3/objects.inv + - https://compas.dev/compas/latest/objects.inv + options: + allow_inspection: true + backlinks: tree + docstring_options: + ignore_init_summary: true + trim_doctest_flags: true + docstring_style: numpy + docstring_section_style: list + filters: public + group_by_category: true + heading_level: 2 + inheritance_diagram_direction: TD + inherited_members: false + line_length: 88 + merge_init_into_class: true + modernize_annotations: true + parameter_headings: false + preload_modules: [mkdocstrings, compas] + relative_crossrefs: true + scoped_crossrefs: true + separate_signature: true + show_bases: false + show_category_heading: true + show_docstring_attributes: true + show_docstring_functions: true + show_docstring_modules: false + show_if_no_docstring: false + show_inheritance_diagram: false + show_root_full_path: true + show_root_heading: true + show_signature: true + show_signature_annotations: true + show_signature_type_parameters: true + show_source: false + show_submodules: false + show_symbol_type_heading: true + show_symbol_type_toc: true + signature_crossrefs: true + summary: + modules: false + type_parameter_headings: true + unwrap_annotated: true + +nav: + - Home: index.md + - Getting Started: + - Overview: getting-started/index.md + - Cadwork's Python Shell: getting-started/shell.md + - Standalone Plugin: getting-started/plugin.md + - Examples: + - Beams Showcase: examples/beams-showcase.md + - Panels Showcase: examples/panels-showcase.md + - Computational Design: examples/computational-design.md + - API Reference: + - compas_cadwork: api/compas_cadwork.md + - compas_cadwork.conversions: api/compas_cadwork.conversions.md + - compas_cadwork.datamodel: api/compas_cadwork.datamodel.md + - compas_cadwork.elements: api/compas_cadwork.elements.md + - compas_cadwork.scene: api/compas_cadwork.scene.md + - compas_cadwork.utilities: api/compas_cadwork.utilities.md + - License: license.md diff --git a/pyproject.toml b/pyproject.toml index ab3d8b76..0b58732a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -5,9 +5,10 @@ requires = ["hatchling"] [dependency-groups] dev = [ "bump-my-version>=1.3.0", - "compas-invocations2>=1.1.2", + "compas_invocations2[mkdocs]>=1.1.1", "cwapi3d==32.443.10", "invoke>=3.0.3", + "mkdocs-callouts>=1.16.1", "pre-commit>=4.6.0", "pytest>=9.0.3", "sphinx-compas2-theme>=0.1.10" diff --git a/tasks.py b/tasks.py index cc76cea7..0b9db951 100644 --- a/tasks.py +++ b/tasks.py @@ -1,7 +1,7 @@ from pathlib import Path from compas_invocations2.build import prepare_changelog -from compas_invocations2.docs import docs +from compas_invocations2.mkdocs import docs from compas_invocations2.tests import test from compas_invocations2.tests import testdocs from invoke.collection import Collection diff --git a/uv.lock b/uv.lock index b437958f..799133db 100644 --- a/uv.lock +++ b/uv.lock @@ -63,6 +63,19 @@ wheels = [ {url = "https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35", size = 10196845, upload-time = "2026-02-01T12:30:53.445Z"} ] +[[package]] +name = "backrefs" +sdist = {url = "https://files.pythonhosted.org/packages/5e/a7/a7dd63622beef68cc0d3c3c36d472e143dd95443d5ebf14cd1a5b4dfbf11/backrefs-7.0.tar.gz", hash = "sha256:4989bb9e1e99eb23647c7160ed51fb21d0b41b5d200f2d3017da41e023097e82", size = 7012453, upload-time = "2026-04-28T16:28:04.215Z"} +source = {registry = "https://pypi.org/simple"} +version = "7.0" +wheels = [ + {url = "https://files.pythonhosted.org/packages/d4/39/39a31d7eae729ea14ed10c3ccef79371197177b9355a86cb3525709e8502/backrefs-7.0-py310-none-any.whl", hash = "sha256:b57cd227ea556b0aed3dc9b8da4628db4eabc0402c6d7fcfc69283a93955f7e9", size = 380824, upload-time = "2026-04-28T16:27:55.647Z"}, + {url = "https://files.pythonhosted.org/packages/c9/b5/9302644225ba7dfa934a2ff2b9c7bb85701313a90dddb3dfaf693fa5bae2/backrefs-7.0-py311-none-any.whl", hash = "sha256:a0fa7360c63509e9e077e174ef4e6d3c21c8db94189b9d957289ae6d794b9475", size = 392626, upload-time = "2026-04-28T16:27:57.42Z"}, + {url = "https://files.pythonhosted.org/packages/36/da/87912ddec6e06feffbaa3d7aa18fc6352bee2e8f1fee185d7d1690f8f4e8/backrefs-7.0-py312-none-any.whl", hash = "sha256:ca42ce6a49ace3d75684dfa9937f3373902a63284ecb385ce36d15e5dcb41c12", size = 398537, upload-time = "2026-04-28T16:27:58.913Z"}, + {url = "https://files.pythonhosted.org/packages/00/bb/90ba423612b6aa0adccc6b1874bcd4a9b44b660c0c16f346611e00f64ac3/backrefs-7.0-py313-none-any.whl", hash = "sha256:f2c52955d631b9e1ac4cd56209f0a3a946d592b98e7790e77699339ae01c102a", size = 400491, upload-time = "2026-04-28T16:28:00.928Z"}, + {url = "https://files.pythonhosted.org/packages/3e/5c/fb93d3092640a24dfb7bd7727a24016d7c01774ca013e60efd3f683c8002/backrefs-7.0-py314-none-any.whl", hash = "sha256:a6448b28180e3ca01134c9cf09dcebafad8531072e09903c5451748a05f24bc9", size = 412349, upload-time = "2026-04-28T16:28:02.412Z"} +] + [[package]] dependencies = [ {name = "soupsieve"}, @@ -244,9 +257,10 @@ source = {editable = "."} [package.dev-dependencies] dev = [ {name = "bump-my-version"}, - {name = "compas-invocations2"}, + {name = "compas-invocations2", extra = ["mkdocs"]}, {name = "cwapi3d"}, {name = "invoke"}, + {name = "mkdocs-callouts"}, {name = "pre-commit"}, {name = "pytest"}, {name = "sphinx-compas2-theme"} @@ -261,9 +275,10 @@ requires-dist = [ [package.metadata.requires-dev] dev = [ {name = "bump-my-version", specifier = ">=1.3.0"}, - {name = "compas-invocations2", specifier = ">=1.1.2"}, + {name = "compas-invocations2", extras = ["mkdocs"], specifier = ">=1.1.1"}, {name = "cwapi3d", specifier = "==32.443.10"}, {name = "invoke", specifier = ">=3.0.3"}, + {name = "mkdocs-callouts", specifier = ">=1.16.1"}, {name = "pre-commit", specifier = ">=4.6.0"}, {name = "pytest", specifier = ">=9.0.3"}, {name = "sphinx-compas2-theme", specifier = ">=0.1.10"} @@ -275,11 +290,30 @@ dependencies = [ {name = "tomlkit"} ] name = "compas-invocations2" -sdist = {url = "https://files.pythonhosted.org/packages/59/cc/575bea307d39a0236d1eaa0cfa5cf7a3a666e10b33ed53e18267d1349fc3/compas_invocations2-1.1.2.tar.gz", hash = "sha256:bc597fd967298bd74e897e11641b3ac74611d8cca17a911007961406915ba1fa", size = 14045, upload-time = "2026-06-15T08:05:16.86Z"} +sdist = {url = "https://files.pythonhosted.org/packages/f1/aa/2ac6b710169e8adc1aeb6b7e212e7ad48071b17e79de2c13ad76f7413f15/compas_invocations2-1.1.1.tar.gz", hash = "sha256:49c24e1aa642336c2270254de704f714324acce5f1a12f3781b48ff0d83d1336", size = 13855, upload-time = "2026-06-04T15:40:30.82Z"} source = {registry = "https://pypi.org/simple"} -version = "1.1.2" +version = "1.1.1" wheels = [ - {url = "https://files.pythonhosted.org/packages/be/50/ba007e6f1c77d0cb117e5e8dd00822906940cb54c52bc029f6f9af0ec661/compas_invocations2-1.1.2-py3-none-any.whl", hash = "sha256:60bb7ef0011892bf7ebb58c65a946e4be67f6c7c4e19545420de77592b9a17c5", size = 14283, upload-time = "2026-06-15T08:05:15.785Z"} + {url = "https://files.pythonhosted.org/packages/b8/60/fd9668caa32ef7d5721cb382129a493844bf5de0d3b9decb6c17da220951/compas_invocations2-1.1.1-py3-none-any.whl", hash = "sha256:e6f3f61719347fb9bf2d23a712bf65419af5ad4c2d5aca14323bf7c59a1fc816", size = 14168, upload-time = "2026-06-04T15:40:29.793Z"} +] + +[package.optional-dependencies] +mkdocs = [ + {name = "markdown-callouts"}, + {name = "markdown-exec"}, + {name = "mike"}, + {name = "mkdocs"}, + {name = "mkdocs-autorefs"}, + {name = "mkdocs-coverage"}, + {name = "mkdocs-git-revision-date-localized-plugin"}, + {name = "mkdocs-llmstxt"}, + {name = "mkdocs-material"}, + {name = "mkdocs-mermaid2-plugin"}, + {name = "mkdocs-minify-plugin"}, + {name = "mkdocs-redirects"}, + {name = "mkdocs-section-index"}, + {name = "mkdocstrings", extra = ["python"]}, + {name = "pydantic"} ] [[package]] @@ -309,6 +343,12 @@ wheels = [ {url = "https://files.pythonhosted.org/packages/e2/7b/82896f3acabdf6fa2421dd4f962096e5b7da94df10aa3ae0262b9984c8b3/compas_timber-1.0.6-py3-none-any.whl", hash = "sha256:07650738e90fea8b576ae182fe314846653e42c3b3f4a0b72f3e5bb050ad1231", size = 307201, upload-time = "2026-05-12T12:10:52.141Z"} ] +[[package]] +name = "csscompressor" +sdist = {url = "https://files.pythonhosted.org/packages/f1/2a/8c3ac3d8bc94e6de8d7ae270bb5bc437b210bb9d6d9e46630c98f4abd20c/csscompressor-0.9.5.tar.gz", hash = "sha256:afa22badbcf3120a4f392e4d22f9fff485c044a1feda4a950ecc5eba9dd31a05", size = 237808, upload-time = "2017-11-26T21:13:08.238Z"} +source = {registry = "https://pypi.org/simple"} +version = "0.9.5" + [[package]] name = "cwapi3d" sdist = {url = "https://files.pythonhosted.org/packages/a9/75/bc2fcdd5d6d53dbcdc3dde5706b6f93e5afc17f1c3a5eda432343298e052/cwapi3d-32.443.10.tar.gz", hash = "sha256:8ab1ae640be39b3abbacfef29ba15f016717ab6cdba52aff1f4cbfe3c13c4267", size = 71970, upload-time = "2026-05-01T13:13:39.841Z"} @@ -336,6 +376,15 @@ wheels = [ {url = "https://files.pythonhosted.org/packages/93/69/e391bd51bc08ed9141ecd899a0ddb61ab6465309f1eb470905c0c8868081/docutils-0.19-py3-none-any.whl", hash = "sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc", size = 570472, upload-time = "2022-07-05T20:17:26.388Z"} ] +[[package]] +name = "editorconfig" +sdist = {url = "https://files.pythonhosted.org/packages/88/3a/a61d9a1f319a186b05d14df17daea42fcddea63c213bcd61a929fb3a6796/editorconfig-0.17.1.tar.gz", hash = "sha256:23c08b00e8e08cc3adcddb825251c497478df1dada6aefeb01e626ad37303745", size = 14695, upload-time = "2025-06-09T08:21:37.097Z"} +source = {registry = "https://pypi.org/simple"} +version = "0.17.1" +wheels = [ + {url = "https://files.pythonhosted.org/packages/96/fd/a40c621ff207f3ce8e484aa0fc8ba4eb6e3ecf52e15b42ba764b457a9550/editorconfig-0.17.1-py3-none-any.whl", hash = "sha256:1eda9c2c0db8c16dbd50111b710572a5e6de934e39772de1959d41f64fc17c82", size = 16360, upload-time = "2025-06-09T08:21:35.654Z"} +] + [[package]] name = "filelock" sdist = {url = "https://files.pythonhosted.org/packages/b5/fe/997687a931ab51049acce6fa1f23e8f01216374ea81374ddee763c493db5/filelock-3.29.0.tar.gz", hash = "sha256:69974355e960702e789734cb4871f884ea6fe50bd8404051a3530bc07809cf90", size = 57571, upload-time = "2026-04-19T15:39:10.068Z"} @@ -345,6 +394,51 @@ wheels = [ {url = "https://files.pythonhosted.org/packages/81/47/dd9a212ef6e343a6857485ffe25bba537304f1913bdbed446a23f7f592e1/filelock-3.29.0-py3-none-any.whl", hash = "sha256:96f5f6344709aa1572bbf631c640e4ebeeb519e08da902c39a001882f30ac258", size = 39812, upload-time = "2026-04-19T15:39:08.752Z"} ] +[[package]] +dependencies = [ + {name = "python-dateutil"} +] +name = "ghp-import" +sdist = {url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943, upload-time = "2022-05-02T15:47:16.11Z"} +source = {registry = "https://pypi.org/simple"} +version = "2.1.0" +wheels = [ + {url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034, upload-time = "2022-05-02T15:47:14.552Z"} +] + +[[package]] +dependencies = [ + {name = "smmap"} +] +name = "gitdb" +sdist = {url = "https://files.pythonhosted.org/packages/72/94/63b0fc47eb32792c7ba1fe1b694daec9a63620db1e313033d18140c2320a/gitdb-4.0.12.tar.gz", hash = "sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571", size = 394684, upload-time = "2025-01-02T07:20:46.413Z"} +source = {registry = "https://pypi.org/simple"} +version = "4.0.12" +wheels = [ + {url = "https://files.pythonhosted.org/packages/a0/61/5c78b91c3143ed5c14207f463aecfc8f9dbb5092fb2869baf37c273b2705/gitdb-4.0.12-py3-none-any.whl", hash = "sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf", size = 62794, upload-time = "2025-01-02T07:20:43.624Z"} +] + +[[package]] +dependencies = [ + {name = "gitdb"} +] +name = "gitpython" +sdist = {url = "https://files.pythonhosted.org/packages/33/f6/354ae6491228b5eb40e10d89c4d13c651fe1cf7556e35ebdded50cff57ce/gitpython-3.1.50.tar.gz", hash = "sha256:80da2d12504d52e1f998772dc5baf6e553f8d2fcfe1fcc226c9d9a2ee3372dcc", size = 219798, upload-time = "2026-05-06T04:01:26.571Z"} +source = {registry = "https://pypi.org/simple"} +version = "3.1.50" +wheels = [ + {url = "https://files.pythonhosted.org/packages/20/7a/1c6e3562dfd8950adbb11ffbc65d21e7c89d01a6e4f137fa981056de25c5/gitpython-3.1.50-py3-none-any.whl", hash = "sha256:d352abe2908d07355014abdd21ddf798c2a961469239afec4962e9da884858f9", size = 212507, upload-time = "2026-05-06T04:01:23.799Z"} +] + +[[package]] +name = "griffelib" +sdist = {url = "https://files.pythonhosted.org/packages/9d/82/74f4a3310cdabfbb10da554c3a672847f1ed33c6f61dd472681ce7f1fe67/griffelib-2.0.2.tar.gz", hash = "sha256:3cf20b3bc470e83763ffbf236e0076b1211bac1bc67de13daf494640f2de707e", size = 166461, upload-time = "2026-03-27T11:34:51.091Z"} +source = {registry = "https://pypi.org/simple"} +version = "2.0.2" +wheels = [ + {url = "https://files.pythonhosted.org/packages/11/8c/c9138d881c79aa0ea9ed83cbd58d5ca75624378b38cee225dcf5c42cc91f/griffelib-2.0.2-py3-none-any.whl", hash = "sha256:925c857658fb1ba40c0772c37acbc2ab650bd794d9c1b9726922e36ea4117ea1", size = 142357, upload-time = "2026-03-27T11:34:46.275Z"} +] + [[package]] name = "h11" sdist = {url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z"} @@ -354,6 +448,14 @@ wheels = [ {url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z"} ] +[[package]] +name = "htmlmin2" +source = {registry = "https://pypi.org/simple"} +version = "0.1.13" +wheels = [ + {url = "https://files.pythonhosted.org/packages/be/31/a76f4bfa885f93b8167cb4c85cf32b54d1f64384d0b897d45bc6d19b7b45/htmlmin2-0.1.13-py3-none-any.whl", hash = "sha256:75609f2a42e64f7ce57dbff28a39890363bde9e7e5885db633317efbdf8c79a2", size = 34486, upload-time = "2023-03-14T21:28:30.388Z"} +] + [[package]] dependencies = [ {name = "certifi"}, @@ -439,6 +541,25 @@ wheels = [ {url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z"} ] +[[package]] +dependencies = [ + {name = "editorconfig"}, + {name = "six"} +] +name = "jsbeautifier" +sdist = {url = "https://files.pythonhosted.org/packages/ea/98/d6cadf4d5a1c03b2136837a435682418c29fdeb66be137128544cecc5b7a/jsbeautifier-1.15.4.tar.gz", hash = "sha256:5bb18d9efb9331d825735fbc5360ee8f1aac5e52780042803943aa7f854f7592", size = 75257, upload-time = "2025-02-27T17:53:53.252Z"} +source = {registry = "https://pypi.org/simple"} +version = "1.15.4" +wheels = [ + {url = "https://files.pythonhosted.org/packages/2d/14/1c65fccf8413d5f5c6e8425f84675169654395098000d8bddc4e9d3390e1/jsbeautifier-1.15.4-py3-none-any.whl", hash = "sha256:72f65de312a3f10900d7685557f84cb61a9733c50dcc27271a39f5b0051bf528", size = 94707, upload-time = "2025-02-27T17:53:46.152Z"} +] + +[[package]] +name = "jsmin" +sdist = {url = "https://files.pythonhosted.org/packages/5e/73/e01e4c5e11ad0494f4407a3f623ad4d87714909f50b17a06ed121034ff6e/jsmin-3.0.1.tar.gz", hash = "sha256:c0959a121ef94542e807a674142606f7e90214a2b3d1eb17300244bbb5cc2bfc", size = 13925, upload-time = "2022-01-16T20:35:59.13Z"} +source = {registry = "https://pypi.org/simple"} +version = "3.0.1" + [[package]] dependencies = [ {name = "attrs"}, @@ -475,16 +596,62 @@ wheels = [ {url = "https://files.pythonhosted.org/packages/b5/40/23569737873cc9637fd488606347e9dd92b9fa37ba4fcda1f98ee5219a97/latexcodec-3.0.1-py3-none-any.whl", hash = "sha256:a9eb8200bff693f0437a69581f7579eb6bca25c4193515c09900ce76451e452e", size = 18532, upload-time = "2025-06-17T18:47:30.726Z"} ] +[[package]] +name = "markdown" +sdist = {url = "https://files.pythonhosted.org/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950", size = 368805, upload-time = "2026-02-09T14:57:26.942Z"} +source = {registry = "https://pypi.org/simple"} +version = "3.10.2" +wheels = [ + {url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180, upload-time = "2026-02-09T14:57:25.787Z"} +] + +[[package]] +dependencies = [ + {name = "markdown"} +] +name = "markdown-callouts" +sdist = {url = "https://files.pythonhosted.org/packages/87/73/ae5aa379f6f7fea9d0bf4cba888f9a31d451d90f80033ae60ae3045770d5/markdown_callouts-0.4.0.tar.gz", hash = "sha256:7ed2c90486967058a73a547781121983839522d67041ae52c4979616f1b2b746", size = 9768, upload-time = "2024-01-22T23:18:18.513Z"} +source = {registry = "https://pypi.org/simple"} +version = "0.4.0" +wheels = [ + {url = "https://files.pythonhosted.org/packages/1d/b5/7b0a0a52c82bfccd830af2a8cc8add1c5bc932e0204922434954a631dd51/markdown_callouts-0.4.0-py3-none-any.whl", hash = "sha256:ed0da38f29158d93116a0d0c6ecaf9df90b37e0d989b5337d678ee6e6d6550b7", size = 7108, upload-time = "2024-01-22T23:18:17.465Z"} +] + +[[package]] +dependencies = [ + {name = "pymdown-extensions"} +] +name = "markdown-exec" +sdist = {url = "https://files.pythonhosted.org/packages/96/73/1f20927d075c83c0e2bc814d3b8f9bd254d919069f78c5423224b4407944/markdown_exec-1.12.1.tar.gz", hash = "sha256:eee8ba0df99a5400092eeda80212ba3968f3cbbf3a33f86f1cd25161538e6534", size = 78105, upload-time = "2025-11-11T19:25:05.44Z"} +source = {registry = "https://pypi.org/simple"} +version = "1.12.1" +wheels = [ + {url = "https://files.pythonhosted.org/packages/ea/22/7b684ddb01b423b79eaba9726954bbe559540d510abc7a72a84d8eee1b26/markdown_exec-1.12.1-py3-none-any.whl", hash = "sha256:a645dce411fee297f5b4a4169c245ec51e20061d5b71e225bef006e87f3e465f", size = 38046, upload-time = "2025-11-11T19:25:03.878Z"} +] + [[package]] dependencies = [ {name = "mdurl"} ] name = "markdown-it-py" -sdist = {url = "https://files.pythonhosted.org/packages/06/ff/7841249c247aa650a76b9ee4bbaeae59370dc8bfd2f6c01f3630c35eb134/markdown_it_py-4.2.0.tar.gz", hash = "sha256:04a21681d6fbb623de53f6f364d352309d4094dd4194040a10fd51833e418d49", size = 82454, upload-time = "2026-05-07T12:08:28.36Z"} +sdist = {url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload-time = "2023-06-03T06:41:14.443Z"} +source = {registry = "https://pypi.org/simple"} +version = "3.0.0" +wheels = [ + {url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload-time = "2023-06-03T06:41:11.019Z"} +] + +[[package]] +dependencies = [ + {name = "beautifulsoup4"}, + {name = "six"} +] +name = "markdownify" +sdist = {url = "https://files.pythonhosted.org/packages/3f/bc/c8c8eea5335341306b0fa7e1cb33c5e1c8d24ef70ddd684da65f41c49c92/markdownify-1.2.2.tar.gz", hash = "sha256:b274f1b5943180b031b699b199cbaeb1e2ac938b75851849a31fd0c3d6603d09", size = 18816, upload-time = "2025-11-16T19:21:18.565Z"} source = {registry = "https://pypi.org/simple"} -version = "4.2.0" +version = "1.2.2" wheels = [ - {url = "https://files.pythonhosted.org/packages/b3/81/4da04ced5a082363ecfa159c010d200ecbd959ae410c10c0264a38cac0f5/markdown_it_py-4.2.0-py3-none-any.whl", hash = "sha256:9f7ebbcd14fe59494226453aed97c1070d83f8d24b6fc3a3bcf9a38092641c4a", size = 91687, upload-time = "2026-05-07T12:08:27.182Z"} + {url = "https://files.pythonhosted.org/packages/43/ce/f1e3e9d959db134cedf06825fae8d5b294bd368aacdd0831a3975b7c4d55/markdownify-1.2.2-py3-none-any.whl", hash = "sha256:3f02d3cc52714084d6e589f70397b6fc9f2f3a8531481bf35e8cc39f975e186a", size = 15724, upload-time = "2025-11-16T19:21:17.622Z"} ] [[package]] @@ -550,6 +717,31 @@ wheels = [ {url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z"} ] +[[package]] +dependencies = [ + {name = "markdown-it-py"} +] +name = "mdformat" +sdist = {url = "https://files.pythonhosted.org/packages/fc/eb/b5cbf2484411af039a3d4aeb53a5160fae25dd8c84af6a4243bc2f3fedb3/mdformat-0.7.22.tar.gz", hash = "sha256:eef84fa8f233d3162734683c2a8a6222227a229b9206872e6139658d99acb1ea", size = 34610, upload-time = "2025-01-30T18:00:51.418Z"} +source = {registry = "https://pypi.org/simple"} +version = "0.7.22" +wheels = [ + {url = "https://files.pythonhosted.org/packages/f2/6f/94a7344f6d634fe3563bea8b33bccedee37f2726f7807e9a58440dc91627/mdformat-0.7.22-py3-none-any.whl", hash = "sha256:61122637c9e1d9be1329054f3fa216559f0d1f722b7919b060a8c2a4ae1850e5", size = 34447, upload-time = "2025-01-30T18:00:48.708Z"} +] + +[[package]] +dependencies = [ + {name = "mdformat"}, + {name = "wcwidth"} +] +name = "mdformat-tables" +sdist = {url = "https://files.pythonhosted.org/packages/64/fc/995ba209096bdebdeb8893d507c7b32b7e07d9a9f2cdc2ec07529947794b/mdformat_tables-1.0.0.tar.gz", hash = "sha256:a57db1ac17c4a125da794ef45539904bb8a9592e80557d525e1f169c96daa2c8", size = 6106, upload-time = "2024-08-23T23:41:33.413Z"} +source = {registry = "https://pypi.org/simple"} +version = "1.0.0" +wheels = [ + {url = "https://files.pythonhosted.org/packages/2a/37/d78e37d14323da3f607cd1af7daf262cb87fe614a245c15ad03bb03a2706/mdformat_tables-1.0.0-py3-none-any.whl", hash = "sha256:94cd86126141b2adc3b04c08d1441eb1272b36c39146bab078249a41c7240a9a", size = 5104, upload-time = "2024-08-23T23:41:31.863Z"} +] + [[package]] name = "mdurl" sdist = {url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z"} @@ -559,6 +751,260 @@ wheels = [ {url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z"} ] +[[package]] +name = "mergedeep" +sdist = {url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661, upload-time = "2021-02-05T18:55:30.623Z"} +source = {registry = "https://pypi.org/simple"} +version = "1.3.4" +wheels = [ + {url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354, upload-time = "2021-02-05T18:55:29.583Z"} +] + +[[package]] +dependencies = [ + {name = "jinja2"}, + {name = "mkdocs"}, + {name = "pyparsing"}, + {name = "pyyaml"}, + {name = "pyyaml-env-tag"}, + {name = "verspec"} +] +name = "mike" +sdist = {url = "https://files.pythonhosted.org/packages/b4/47/fa87e9d56bef16cdfe34b059a437e8c6f7ec6f1b9c378871c3cf95ebea9c/mike-2.2.0.tar.gz", hash = "sha256:1e3858e32c0f125aac14432fc7848434358f9ae0962c5c5cde387ad47f6ad25e", size = 38450, upload-time = "2026-04-14T04:59:03.944Z"} +source = {registry = "https://pypi.org/simple"} +version = "2.2.0" +wheels = [ + {url = "https://files.pythonhosted.org/packages/76/8e/56ccb09c7232a55403a7637caa21922f3b65901a37f5e8bdb405d0de0946/mike-2.2.0-py3-none-any.whl", hash = "sha256:e1f4981c1152eec7c2490a3401142292cc47d686194188416db2648fdfe1d040", size = 34026, upload-time = "2026-04-14T04:59:02.602Z"} +] + +[[package]] +dependencies = [ + {name = "click"}, + {name = "colorama", marker = "sys_platform == 'win32'"}, + {name = "ghp-import"}, + {name = "jinja2"}, + {name = "markdown"}, + {name = "markupsafe"}, + {name = "mergedeep"}, + {name = "mkdocs-get-deps"}, + {name = "packaging"}, + {name = "pathspec"}, + {name = "pyyaml"}, + {name = "pyyaml-env-tag"}, + {name = "watchdog"} +] +name = "mkdocs" +sdist = {url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159, upload-time = "2024-08-30T12:24:06.899Z"} +source = {registry = "https://pypi.org/simple"} +version = "1.6.1" +wheels = [ + {url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451, upload-time = "2024-08-30T12:24:05.054Z"} +] + +[[package]] +dependencies = [ + {name = "markdown"}, + {name = "markupsafe"}, + {name = "mkdocs"} +] +name = "mkdocs-autorefs" +sdist = {url = "https://files.pythonhosted.org/packages/52/c0/f641843de3f612a6b48253f39244165acff36657a91cc903633d456ae1ac/mkdocs_autorefs-1.4.4.tar.gz", hash = "sha256:d54a284f27a7346b9c38f1f852177940c222da508e66edc816a0fa55fc6da197", size = 56588, upload-time = "2026-02-10T15:23:55.105Z"} +source = {registry = "https://pypi.org/simple"} +version = "1.4.4" +wheels = [ + {url = "https://files.pythonhosted.org/packages/28/de/a3e710469772c6a89595fc52816da05c1e164b4c866a89e3cb82fb1b67c5/mkdocs_autorefs-1.4.4-py3-none-any.whl", hash = "sha256:834ef5408d827071ad1bc69e0f39704fa34c7fc05bc8e1c72b227dfdc5c76089", size = 25530, upload-time = "2026-02-10T15:23:53.817Z"} +] + +[[package]] +name = "mkdocs-callouts" +sdist = {url = "https://files.pythonhosted.org/packages/28/29/9c7c71cc63b9cc77b00eb551c9cae721c5fd6cacb30da66367b15e98c5d1/mkdocs_callouts-1.16.1.tar.gz", hash = "sha256:ca15e9e56c212450bd1b9712ef8033809b624212bfdc6415ecd95c9f6262e932", size = 11937, upload-time = "2026-05-13T21:45:55.428Z"} +source = {registry = "https://pypi.org/simple"} +version = "1.16.1" +wheels = [ + {url = "https://files.pythonhosted.org/packages/a7/29/a80a22182011f53808dc0a01dc782bd1adf025f651e8962d15ef942c445b/mkdocs_callouts-1.16.1-py3-none-any.whl", hash = "sha256:3956c1a79623f85d50e5ddc1cacf68ddbc8c5c9faffa14e85aa312be5e603aeb", size = 8701, upload-time = "2026-05-13T21:45:54.445Z"} +] + +[[package]] +dependencies = [ + {name = "mkdocs"} +] +name = "mkdocs-coverage" +sdist = {url = "https://files.pythonhosted.org/packages/ed/99/3dc73a10a97b3b2f1071051987e0653b0de16b284ab669e5060c819c2609/mkdocs_coverage-2.0.0.tar.gz", hash = "sha256:628568ae5364eec06581bd6d7d83a56f9682a57350e73f07c298d5e104c7f69a", size = 31167, upload-time = "2025-09-11T12:14:05.947Z"} +source = {registry = "https://pypi.org/simple"} +version = "2.0.0" +wheels = [ + {url = "https://files.pythonhosted.org/packages/90/b7/463c1c3ecc4c2e7bcb73bdc348ab356553ded0e39d25e6f1eee9c6f9c431/mkdocs_coverage-2.0.0-py3-none-any.whl", hash = "sha256:7df7449811ecea1802d42344d925a34eac9a084f22d3140bae234fad8cefa1ad", size = 6890, upload-time = "2025-09-11T12:14:03.7Z"} +] + +[[package]] +dependencies = [ + {name = "mergedeep"}, + {name = "platformdirs"}, + {name = "pyyaml"} +] +name = "mkdocs-get-deps" +sdist = {url = "https://files.pythonhosted.org/packages/ce/25/b3cccb187655b9393572bde9b09261d267c3bf2f2cdabe347673be5976a6/mkdocs_get_deps-0.2.2.tar.gz", hash = "sha256:8ee8d5f316cdbbb2834bc1df6e69c08fe769a83e040060de26d3c19fad3599a1", size = 11047, upload-time = "2026-03-10T02:46:33.632Z"} +source = {registry = "https://pypi.org/simple"} +version = "0.2.2" +wheels = [ + {url = "https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl", hash = "sha256:e7878cbeac04860b8b5e0ca31d3abad3df9411a75a32cde82f8e44b6c16ff650", size = 9555, upload-time = "2026-03-10T02:46:32.256Z"} +] + +[[package]] +dependencies = [ + {name = "babel"}, + {name = "gitpython"}, + {name = "mkdocs"}, + {name = "tzdata", marker = "sys_platform == 'win32'"} +] +name = "mkdocs-git-revision-date-localized-plugin" +sdist = {url = "https://files.pythonhosted.org/packages/8e/99/8067eb7d1652767ee8e5474010647dd5a8e464e0ca8c783b5cac135a2043/mkdocs_git_revision_date_localized_plugin-1.5.3.tar.gz", hash = "sha256:873444b54cab4d47c69bd6e85da05ef5fbe81fee27e64508114c46a0e4f81e37", size = 451961, upload-time = "2026-06-01T08:32:09.416Z"} +source = {registry = "https://pypi.org/simple"} +version = "1.5.3" +wheels = [ + {url = "https://files.pythonhosted.org/packages/57/d0/cbe85158dc091219fd5134bf6d724d30b1f2005ee1d0dabaaa41416bee78/mkdocs_git_revision_date_localized_plugin-1.5.3-py3-none-any.whl", hash = "sha256:cd96e432de6a7e59b31c7041574b22f84179c8636835419ff458877ecfaaaf05", size = 26156, upload-time = "2026-06-01T08:32:07.765Z"} +] + +[[package]] +dependencies = [ + {name = "beautifulsoup4"}, + {name = "markdownify"}, + {name = "mdformat"}, + {name = "mdformat-tables"} +] +name = "mkdocs-llmstxt" +sdist = {url = "https://files.pythonhosted.org/packages/7f/f5/4c31cdffa7c09bf48d8c7a50d8342dc100abac98ac4150826bc11afc0c9f/mkdocs_llmstxt-0.5.0.tar.gz", hash = "sha256:b2fa9e6d68df41d7467e948a4745725b6c99434a36b36204857dbd7bb3dfe041", size = 33909, upload-time = "2025-11-20T14:02:24.861Z"} +source = {registry = "https://pypi.org/simple"} +version = "0.5.0" +wheels = [ + {url = "https://files.pythonhosted.org/packages/ad/2b/82928cc9e8d9269cd79e7ebf015efdc4945e6c646e86ec1d4dba1707f215/mkdocs_llmstxt-0.5.0-py3-none-any.whl", hash = "sha256:753c699913d2d619a9072604b26b6dc9f5fb6d257d9b107857f80c8a0b787533", size = 12040, upload-time = "2025-11-20T14:02:23.483Z"} +] + +[[package]] +dependencies = [ + {name = "babel"}, + {name = "backrefs"}, + {name = "colorama"}, + {name = "jinja2"}, + {name = "markdown"}, + {name = "mkdocs"}, + {name = "mkdocs-material-extensions"}, + {name = "paginate"}, + {name = "pygments"}, + {name = "pymdown-extensions"}, + {name = "requests"} +] +name = "mkdocs-material" +sdist = {url = "https://files.pythonhosted.org/packages/45/29/6d2bcf41ae40802c4beda2432396fff97b8456fb496371d1bc7aad6512ec/mkdocs_material-9.7.6.tar.gz", hash = "sha256:00bdde50574f776d328b1862fe65daeaf581ec309bd150f7bff345a098c64a69", size = 4097959, upload-time = "2026-03-19T15:41:58.161Z"} +source = {registry = "https://pypi.org/simple"} +version = "9.7.6" +wheels = [ + {url = "https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl", hash = "sha256:71b84353921b8ea1ba84fe11c50912cc512da8fe0881038fcc9a0761c0e635ba", size = 9305470, upload-time = "2026-03-19T15:41:55.217Z"} +] + +[[package]] +name = "mkdocs-material-extensions" +sdist = {url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847, upload-time = "2023-11-22T19:09:45.208Z"} +source = {registry = "https://pypi.org/simple"} +version = "1.3.1" +wheels = [ + {url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728, upload-time = "2023-11-22T19:09:43.465Z"} +] + +[[package]] +dependencies = [ + {name = "beautifulsoup4"}, + {name = "jsbeautifier"}, + {name = "mkdocs"}, + {name = "pymdown-extensions"}, + {name = "requests"}, + {name = "setuptools"} +] +name = "mkdocs-mermaid2-plugin" +sdist = {url = "https://files.pythonhosted.org/packages/2a/6d/308f443a558b6a97ce55782658174c0d07c414405cfc0a44d36ad37e36f9/mkdocs_mermaid2_plugin-1.2.3.tar.gz", hash = "sha256:fb6f901d53e5191e93db78f93f219cad926ccc4d51e176271ca5161b6cc5368c", size = 16220, upload-time = "2025-10-17T19:38:53.047Z"} +source = {registry = "https://pypi.org/simple"} +version = "1.2.3" +wheels = [ + {url = "https://files.pythonhosted.org/packages/1a/4b/6fd6dd632019b7f522f1b1f794ab6115cd79890330986614be56fd18f0eb/mkdocs_mermaid2_plugin-1.2.3-py3-none-any.whl", hash = "sha256:33f60c582be623ed53829a96e19284fc7f1b74a1dbae78d4d2e47fe00c3e190d", size = 17299, upload-time = "2025-10-17T19:38:51.874Z"} +] + +[[package]] +dependencies = [ + {name = "csscompressor"}, + {name = "htmlmin2"}, + {name = "jsmin"}, + {name = "mkdocs"} +] +name = "mkdocs-minify-plugin" +sdist = {url = "https://files.pythonhosted.org/packages/52/67/fe4b77e7a8ae7628392e28b14122588beaf6078b53eb91c7ed000fd158ac/mkdocs-minify-plugin-0.8.0.tar.gz", hash = "sha256:bc11b78b8120d79e817308e2b11539d790d21445eb63df831e393f76e52e753d", size = 8366, upload-time = "2024-01-29T16:11:32.982Z"} +source = {registry = "https://pypi.org/simple"} +version = "0.8.0" +wheels = [ + {url = "https://files.pythonhosted.org/packages/1b/cd/2e8d0d92421916e2ea4ff97f10a544a9bd5588eb747556701c983581df13/mkdocs_minify_plugin-0.8.0-py3-none-any.whl", hash = "sha256:5fba1a3f7bd9a2142c9954a6559a57e946587b21f133165ece30ea145c66aee6", size = 6723, upload-time = "2024-01-29T16:11:31.851Z"} +] + +[[package]] +dependencies = [ + {name = "mkdocs"}, + {name = "properdocs"} +] +name = "mkdocs-redirects" +sdist = {url = "https://files.pythonhosted.org/packages/73/25/49725f78ca5d3026b09973f7a2b3a8b179cc2e8c15e43d5a13bc79f6b274/mkdocs_redirects-1.2.3.tar.gz", hash = "sha256:5e980330999299729a2d6a125347d1af78023d68a23681a4de3053ce7dfe2e51", size = 7712, upload-time = "2026-03-28T13:57:41.766Z"} +source = {registry = "https://pypi.org/simple"} +version = "1.2.3" +wheels = [ + {url = "https://files.pythonhosted.org/packages/c6/90/871b1cddc01d2ba1637b858eeeabc2e3013dc8df591306b5567b98ef0870/mkdocs_redirects-1.2.3-py3-none-any.whl", hash = "sha256:ec7312fff462d03ec16395d0c001006a418f8d0c21cdf2b47ff11cf839dc3ce0", size = 6245, upload-time = "2026-03-28T13:57:40.466Z"} +] + +[[package]] +dependencies = [ + {name = "mkdocs"}, + {name = "properdocs"} +] +name = "mkdocs-section-index" +sdist = {url = "https://files.pythonhosted.org/packages/f1/e2/64d0f3f054ca8efe61e706006ff5f0d49ad99620c62c2e04818573391c33/mkdocs_section_index-0.3.12.tar.gz", hash = "sha256:285635bf86c643b0fc7a343053d7a818049817bff4408f52b80c4367bd5e7268", size = 14946, upload-time = "2026-04-16T19:20:00.953Z"} +source = {registry = "https://pypi.org/simple"} +version = "0.3.12" +wheels = [ + {url = "https://files.pythonhosted.org/packages/b0/4d/a330cab5e055d45e924cec69da54a3d8ed37643964f8d1fa1a772b496273/mkdocs_section_index-0.3.12-py3-none-any.whl", hash = "sha256:a1100039546beb4ebef63ce6fc91f3195fb9c0c3763105d4d3d7cd31e0a046eb", size = 8932, upload-time = "2026-04-16T19:19:59.741Z"} +] + +[[package]] +dependencies = [ + {name = "jinja2"}, + {name = "markdown"}, + {name = "markupsafe"}, + {name = "mkdocs"}, + {name = "mkdocs-autorefs"}, + {name = "pymdown-extensions"} +] +name = "mkdocstrings" +sdist = {url = "https://files.pythonhosted.org/packages/1d/5d/f888d4d3eb31359b327bc9b17a212d6ef03fe0b0682fbb3fc2cb849fb12b/mkdocstrings-1.0.4.tar.gz", hash = "sha256:3969a6515b77db65fd097b53c1b7aa4ae840bd71a2ee62a6a3e89503446d7172", size = 100088, upload-time = "2026-04-15T09:16:53.376Z"} +source = {registry = "https://pypi.org/simple"} +version = "1.0.4" +wheels = [ + {url = "https://files.pythonhosted.org/packages/6e/94/be70f8ee9c45f2f62b39a1f0e9303bc20e138a8f3b8e50ffd89498e177e1/mkdocstrings-1.0.4-py3-none-any.whl", hash = "sha256:63464b4b29053514f32a1dbbf604e52876d5e638111b0c295ab7ed3cac73ca9b", size = 35560, upload-time = "2026-04-15T09:16:51.436Z"} +] + +[package.optional-dependencies] +python = [ + {name = "mkdocstrings-python"} +] + +[[package]] +dependencies = [ + {name = "griffelib"}, + {name = "mkdocs-autorefs"}, + {name = "mkdocstrings"} +] +name = "mkdocstrings-python" +sdist = {url = "https://files.pythonhosted.org/packages/a4/b4/5fed370d8ebd96e4e399460a7146ae989263f16588b05a6facd6dbd51e60/mkdocstrings_python-2.0.4.tar.gz", hash = "sha256:58c73c5d358e64e9b1673447663f4a2f8a8941e392e225fc0a0c893758cc452f", size = 199219, upload-time = "2026-06-05T08:13:01.819Z"} +source = {registry = "https://pypi.org/simple"} +version = "2.0.4" +wheels = [ + {url = "https://files.pythonhosted.org/packages/5e/e3/00ec594aef5f55522e6d373bc2ac53e53a8f5e9ae32f2d6854b0de4270f3/mkdocstrings_python-2.0.4-py3-none-any.whl", hash = "sha256:fd87c173e1e719a85997b6d4f852cdc55f36710e0ed08da3a7bd9abe79c9db00", size = 104790, upload-time = "2026-06-05T08:13:00.393Z"} +] + [[package]] name = "networkx" sdist = {url = "https://files.pythonhosted.org/packages/6a/51/63fe664f3908c97be9d2e4f1158eb633317598cfa6e1fc14af5383f17512/networkx-3.6.1.tar.gz", hash = "sha256:26b7c357accc0c8cde558ad486283728b65b6a95d85ee1cd66bafab4c8168509", size = 2517025, upload-time = "2025-12-08T17:02:39.908Z"} @@ -659,6 +1105,24 @@ wheels = [ {url = "https://files.pythonhosted.org/packages/df/b2/87e62e8c3e2f4b32e5fe99e0b86d576da1312593b39f47d8ceef365e95ed/packaging-26.2-py3-none-any.whl", hash = "sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e", size = 100195, upload-time = "2026-04-24T20:15:22.081Z"} ] +[[package]] +name = "paginate" +sdist = {url = "https://files.pythonhosted.org/packages/ec/46/68dde5b6bc00c1296ec6466ab27dddede6aec9af1b99090e1107091b3b84/paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", size = 19252, upload-time = "2024-08-25T14:17:24.139Z"} +source = {registry = "https://pypi.org/simple"} +version = "0.5.7" +wheels = [ + {url = "https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591", size = 13746, upload-time = "2024-08-25T14:17:22.55Z"} +] + +[[package]] +name = "pathspec" +sdist = {url = "https://files.pythonhosted.org/packages/5a/82/42f767fc1c1143d6fd36efb827202a2d997a375e160a71eb2888a925aac1/pathspec-1.1.1.tar.gz", hash = "sha256:17db5ecd524104a120e173814c90367a96a98d07c45b2e10c2f3919fff91bf5a", size = 135180, upload-time = "2026-04-27T01:46:08.907Z"} +source = {registry = "https://pypi.org/simple"} +version = "1.1.1" +wheels = [ + {url = "https://files.pythonhosted.org/packages/f1/d9/7fb5aa316bc299258e68c73ba3bddbc499654a07f151cba08f6153988714/pathspec-1.1.1-py3-none-any.whl", hash = "sha256:a00ce642f577bf7f473932318056212bc4f8bfdf53128c78bbd5af0b9b20b189", size = 57328, upload-time = "2026-04-27T01:46:07.06Z"} +] + [[package]] name = "platformdirs" sdist = {url = "https://files.pythonhosted.org/packages/9f/4a/0883b8e3802965322523f0b200ecf33d31f10991d0401162f4b23c698b42/platformdirs-4.9.6.tar.gz", hash = "sha256:3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a", size = 29400, upload-time = "2026-04-09T00:04:10.812Z"} @@ -705,6 +1169,29 @@ wheels = [ {url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955", size = 391431, upload-time = "2025-08-27T15:23:59.498Z"} ] +[[package]] +dependencies = [ + {name = "click"}, + {name = "colorama", marker = "sys_platform == 'win32'"}, + {name = "ghp-import"}, + {name = "jinja2"}, + {name = "markdown"}, + {name = "markupsafe"}, + {name = "packaging"}, + {name = "pathspec"}, + {name = "platformdirs"}, + {name = "pyyaml"}, + {name = "pyyaml-env-tag"}, + {name = "watchdog"} +] +name = "properdocs" +sdist = {url = "https://files.pythonhosted.org/packages/ec/29/f27a4e1eddf72ed3db6e47818fbafe6debbf09fd7051f9c1a007239b46ef/properdocs-1.6.7.tar.gz", hash = "sha256:adc7b16e562890af0e098a7e5b02e3a81c20894a87d6a28d345c9300de73c26e", size = 276141, upload-time = "2026-03-20T20:07:48.167Z"} +source = {registry = "https://pypi.org/simple"} +version = "1.6.7" +wheels = [ + {url = "https://files.pythonhosted.org/packages/bd/4d/fc923f5c85318ee8cc903566dc4e0ebe41b2dfc1d2ecf5546db232397ed6/properdocs-1.6.7-py3-none-any.whl", hash = "sha256:6fa0cfa2e01bf338f684892c8a506cf70ea88ae7f3479c933b6fa20168101cbd", size = 225406, upload-time = "2026-03-20T20:07:46.875Z"} +] + [[package]] dependencies = [ {name = "latexcodec"}, @@ -875,6 +1362,28 @@ wheels = [ {url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z"} ] +[[package]] +dependencies = [ + {name = "markdown"}, + {name = "pyyaml"} +] +name = "pymdown-extensions" +sdist = {url = "https://files.pythonhosted.org/packages/9e/26/d1015444da4d952a1ca487a236b522eb979766f0295a0bd0c5fc089989a9/pymdown_extensions-10.21.3.tar.gz", hash = "sha256:72cfcf55f07aea0d4af2c4f11dd4e52466ddfb1bb819673146398e0bd3a77354", size = 854140, upload-time = "2026-05-13T12:57:32.267Z"} +source = {registry = "https://pypi.org/simple"} +version = "10.21.3" +wheels = [ + {url = "https://files.pythonhosted.org/packages/7e/85/545a951eecc270fcd688288c600017e2050a1aacb56c711d208586d3e470/pymdown_extensions-10.21.3-py3-none-any.whl", hash = "sha256:d7a5d08014fc571e80ca21dd6f854e31f94c489800350564d55d15b3c41e76b6", size = 269002, upload-time = "2026-05-13T12:57:30.296Z"} +] + +[[package]] +name = "pyparsing" +sdist = {url = "https://files.pythonhosted.org/packages/f3/91/9c6ee907786a473bf81c5f53cf703ba0957b23ab84c264080fb5a450416f/pyparsing-3.3.2.tar.gz", hash = "sha256:c777f4d763f140633dcb6d8a3eda953bf7a214dc4eff598413c070bcdc117cbc", size = 6851574, upload-time = "2026-01-21T03:57:59.36Z"} +source = {registry = "https://pypi.org/simple"} +version = "3.3.2" +wheels = [ + {url = "https://files.pythonhosted.org/packages/10/bd/c038d7cc38edc1aa5bf91ab8068b63d4308c66c4c8bb3cbba7dfbc049f9c/pyparsing-3.3.2-py3-none-any.whl", hash = "sha256:850ba148bd908d7e2411587e247a1e4f0327839c40e2e5e6d05a007ecc69911d", size = 122781, upload-time = "2026-01-21T03:57:55.912Z"} +] + [[package]] dependencies = [ {name = "colorama", marker = "sys_platform == 'win32'"}, @@ -903,6 +1412,18 @@ wheels = [ {url = "https://files.pythonhosted.org/packages/5a/cc/06253936f4a7fa2e0f48dfe6d851d9c56df896a9ab09ac019d70b760619c/pytest_mock-3.15.1-py3-none-any.whl", hash = "sha256:0a25e2eb88fe5168d535041d09a4529a188176ae608a6d249ee65abc0949630d", size = 10095, upload-time = "2025-09-16T16:37:25.734Z"} ] +[[package]] +dependencies = [ + {name = "six"} +] +name = "python-dateutil" +sdist = {url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z"} +source = {registry = "https://pypi.org/simple"} +version = "2.9.0.post0" +wheels = [ + {url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z"} +] + [[package]] dependencies = [ {name = "filelock"}, @@ -971,6 +1492,18 @@ wheels = [ {url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z"} ] +[[package]] +dependencies = [ + {name = "pyyaml"} +] +name = "pyyaml-env-tag" +sdist = {url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737, upload-time = "2025-05-13T15:24:01.64Z"} +source = {registry = "https://pypi.org/simple"} +version = "1.1" +wheels = [ + {url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload-time = "2025-05-13T15:23:59.629Z"} +] + [[package]] dependencies = [ {name = "prompt-toolkit"} @@ -1266,6 +1799,24 @@ wheels = [ {url = "https://files.pythonhosted.org/packages/9a/f6/f09272a71976dfc138129b8faf435d064a811ae2f708cb147dccdf7aacdb/shapely-2.1.2-cp314-cp314t-win_amd64.whl", hash = "sha256:0036ac886e0923417932c2e6369b6c52e38e0ff5d9120b90eef5cd9a5fc5cae9", size = 1796682, upload-time = "2025-09-24T13:51:39.233Z"} ] +[[package]] +name = "six" +sdist = {url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z"} +source = {registry = "https://pypi.org/simple"} +version = "1.17.0" +wheels = [ + {url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z"} +] + +[[package]] +name = "smmap" +sdist = {url = "https://files.pythonhosted.org/packages/1f/ea/49c993d6dfdd7338c9b1000a0f36817ed7ec84577ae2e52f890d1a4ff909/smmap-5.0.3.tar.gz", hash = "sha256:4d9debb8b99007ae47165abc08670bd74cb74b5227dda7f643eccc4e9eb5642c", size = 22506, upload-time = "2026-03-09T03:43:26.1Z"} +source = {registry = "https://pypi.org/simple"} +version = "5.0.3" +wheels = [ + {url = "https://files.pythonhosted.org/packages/c1/d4/59e74daffcb57a07668852eeeb6035af9f32cbfd7a1d2511f17d2fe6a738/smmap-5.0.3-py3-none-any.whl", hash = "sha256:c106e05d5a61449cf6ba9a1e650227ecfb141590d2a98412103ff35d89fc7b2f", size = 24390, upload-time = "2026-03-09T03:43:24.361Z"} +] + [[package]] name = "snowballstemmer" sdist = {url = "https://files.pythonhosted.org/packages/75/a7/9810d872919697c9d01295633f5d574fb416d47e535f258272ca1f01f447/snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895", size = 105575, upload-time = "2025-05-09T16:34:51.843Z"} @@ -1539,6 +2090,15 @@ wheels = [ {url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z"} ] +[[package]] +name = "tzdata" +sdist = {url = "https://files.pythonhosted.org/packages/ba/19/1b9b0e29f30c6d35cb345486df41110984ea67ae69dddbc0e8a100999493/tzdata-2026.2.tar.gz", hash = "sha256:9173fde7d80d9018e02a662e168e5a2d04f87c41ea174b139fbef642eda62d10", size = 198254, upload-time = "2026-04-24T15:22:08.651Z"} +source = {registry = "https://pypi.org/simple"} +version = "2026.2" +wheels = [ + {url = "https://files.pythonhosted.org/packages/ce/e4/dccd7f47c4b64213ac01ef921a1337ee6e30e8c6466046018326977efd95/tzdata-2026.2-py2.py3-none-any.whl", hash = "sha256:bbe9af844f658da81a5f95019480da3a89415801f6cc966806612cc7169bffe7", size = 349321, upload-time = "2026-04-24T15:22:05.876Z"} +] + [[package]] name = "urllib3" sdist = {url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z"} @@ -1548,6 +2108,15 @@ wheels = [ {url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z"} ] +[[package]] +name = "verspec" +sdist = {url = "https://files.pythonhosted.org/packages/e7/44/8126f9f0c44319b2efc65feaad589cadef4d77ece200ae3c9133d58464d0/verspec-0.1.0.tar.gz", hash = "sha256:c4504ca697b2056cdb4bfa7121461f5a0e81809255b41c03dda4ba823637c01e", size = 27123, upload-time = "2020-11-30T02:24:09.646Z"} +source = {registry = "https://pypi.org/simple"} +version = "0.1.0" +wheels = [ + {url = "https://files.pythonhosted.org/packages/a4/ce/3b6fee91c85626eaf769d617f1be9d2e15c1cca027bbdeb2e0d751469355/verspec-0.1.0-py3-none-any.whl", hash = "sha256:741877d5633cc9464c45a469ae2a31e801e6dbbaa85b9675d481cda100f11c31", size = 19640, upload-time = "2020-11-30T02:24:08.387Z"} +] + [[package]] dependencies = [ {name = "distlib"},