diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index a25b1d31..19a951d8 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -10,6 +10,9 @@ on: workflow_dispatch: +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + jobs: find-tag: @@ -56,12 +59,32 @@ jobs: - run: pixi run sphinx-build -M linkcheck . _build -W --keep-going -a -q continue-on-error: true + test-latest: + runs-on: windows-latest + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: prefix-dev/setup-pixi@v0.8.1 + with: + cache: true + cache-write: ${{ github.event_name == 'push' && github.ref_name == 'master' }} + environments: test + activate-environment: true + + - name: Test Snippets + if: ${{ !github.event.pull_request.head.repo.fork && github.repository == 'anybody/tutorials' }} + run: pytest + env: + RLM_LICENSE: ${{ secrets.LICENSE_TEST_SERVER }} + RLM_LICENSE_PASSWORD: ${{ secrets.LICENSE_TEST_SERVER_PASSWORD }} build-latest: runs-on: ubuntu-latest - needs: [find-tag, link-check] + needs: [link-check, test-latest] steps: - uses: actions/checkout@v4 diff --git a/.gitignore b/.gitignore index 6cde1e8f..b7f9d672 100644 --- a/.gitignore +++ b/.gitignore @@ -3,4 +3,5 @@ _build/ *.docx *.pyc# pixi environments .pixi +__pycache__ diff --git a/A_Getting_started_anyscript/Downloads/demo.lesson2.any b/A_Getting_started_anyscript/Downloads/demo.lesson2.any index 3d572d15..c06ae363 100644 --- a/A_Getting_started_anyscript/Downloads/demo.lesson2.any +++ b/A_Getting_started_anyscript/Downloads/demo.lesson2.any @@ -1,7 +1,6 @@ // Todo: Write a small description of your model here Main = { - // The actual body model goes in this folder AnyFolder ArmModel = { @@ -10,17 +9,16 @@ Main = { // Todo: Add points for grounding of the model here - }; // Global reference frame - - // Todo. Add the model elements such as + }; + + // Todo: Add the model elements such as // segments, joints, and muscles here. - }; // ArmModel - + }; // The study: Operations to be performed on the model AnyBodyStudy ArmStudy = { AnyFolder &Model = .ArmModel; Gravity = {0.0, -9.81, 0.0}; }; -}; // Main \ No newline at end of file +}; \ No newline at end of file diff --git a/A_Getting_started_anyscript/Downloads/demo.lesson3.any b/A_Getting_started_anyscript/Downloads/demo.lesson3.any index 4e2023ed..54337643 100644 --- a/A_Getting_started_anyscript/Downloads/demo.lesson3.any +++ b/A_Getting_started_anyscript/Downloads/demo.lesson3.any @@ -1,95 +1,87 @@ -// Todo: Write a small description of your model here + // Todo: Write a small description of your model here Main = { - // The actual body model goes in this folder AnyFolder ArmModel = { - + // Global Reference Frame AnyFixedRefFrame GlobalRef = { - // Todo: Add points for grounding of the model here - }; // Global reference frame - // Segments - AnyFolder Segs = { - AnySeg UpperArm = - { - r0 = {0.3, 0, 0}; - //rDot0 = {0, 0, 0}; - //Axes0 = {{0, 0, 0}, {0, 0, 0}, {0, 0, 0}}; - //omega0 = {0, 0, 0}; - Mass = 2; - Jii = {0.001, 0.01, 0.01}; - //Jij = {0, 0, 0}; - //sCoM = {0, 0, 0}; - AnyDrawSeg drw = {}; - AnyRefNode ShoulderNode = { - sRel = {-0.2,0,0}; - }; - AnyRefNode ElbowNode = { - sRel = {0.2,0,0}; - }; - AnyRefNode DeltodeusA = { - sRel = {-0.1,0,0.02}; - }; - AnyRefNode DeltodeusB = { - sRel = {-0.1,0,-0.02}; - }; - AnyRefNode Brachialis = { - sRel = {0.1,0,0.01}; - }; - AnyRefNode BicepsShort = { - sRel = {-0.1,0,0.03}; - }; - AnyRefNode Brachioradialis = { - sRel = {0.05,0,0.02}; - }; - AnyRefNode TricepsShort = { - sRel = {-0.1,0,-0.01}; - }; - - }; //UpperArm - AnySeg ForeArm = { - r0 = {0, 0.3, 0}; - Axes0 =RotMat(-90*pi/180, z); + }; // Global Reference Frame - Mass = 2.0; - Jii = {0.001,0.01,0.01}; - AnyRefNode ElbowNode = { - sRel = {-0.2,0,0}; - }; - AnyRefNode HandNode = { - sRel = {0.2,0,0}; - }; - AnyRefNode Brachialis = { - sRel = {-0.1,0,0.02}; - }; - AnyRefNode Brachioradialis = { - sRel = {0.0,0,0.02}; - }; - AnyRefNode Biceps = { - sRel = {-0.15,0,0.01}; - }; - AnyRefNode Triceps = { - sRel = {-0.25,0,-0.05}; - }; - AnyDrawSeg DrwSeg = {}; - }; // ForeArm - - }; // Segs folder - - // Todo. Add the model elements such as - // segments, joints, and muscles here. + // Segments + AnyFolder Segs = { - }; // ArmModel - - // The study: Operations to be performed on the model + //UpperArm + AnySeg UpperArm = { + r0 = {0.0, 0.3, 0.0}; + Axes0 = RotMat(-90*pi/180, z); + Mass = 2; + Jii = {0.001, 0.01, 0.01}; + AnyDrawSeg drw = {}; + AnyRefNode ShoulderNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode ElbowNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode DeltodeusA = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode DeltodeusB = { + sRel = {-0.1,0,-0.02}; + }; + AnyRefNode Brachialis = { + sRel = {0.1,0,0.01}; + }; + AnyRefNode BicepsShort = { + sRel = {-0.1,0,0.03}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.05,0,0.02}; + }; + AnyRefNode TricepsShort = { + sRel = {-0.1,0,-0.01}; + }; + }; //UpperArm + + // ForeArm + AnySeg ForeArm = { + r0 = {0.3, 0.0, 0.0}; + Mass = 2.0; + Jii = {0.001,0.01,0.01}; + AnyRefNode ElbowNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode HandNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode Brachialis = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.0,0,0.02}; + }; + AnyRefNode Biceps = { + sRel = {-0.15,0,0.01}; + }; + AnyRefNode Triceps = { + sRel = {-0.25,0,-0.05}; + }; + AnyDrawSeg DrwSeg = {}; + }; // ForeArm + + // Todo: Add the model elements such as + // segments, joints, and muscles here. + + }; // Segs folder + + }; // The study: Operations to be performed on the model + // ArmModel AnyBodyStudy ArmStudy = { AnyFolder &Model = .ArmModel; Gravity = {0.0, -9.81, 0.0}; }; - -}; // Main - +}; \ No newline at end of file diff --git a/A_Getting_started_anyscript/Downloads/demo.lesson4.any b/A_Getting_started_anyscript/Downloads/demo.lesson4.any index 6e5f6b0c..8980201e 100644 --- a/A_Getting_started_anyscript/Downloads/demo.lesson4.any +++ b/A_Getting_started_anyscript/Downloads/demo.lesson4.any @@ -91,8 +91,8 @@ Main = { }; // Segs folder + // Joints AnyFolder Jnts = { - //--------------------------------- AnyRevoluteJoint Shoulder = { Axis = z; diff --git a/A_Getting_started_anyscript/Snippets/lesson1/snip.NewModel.main-1.any b/A_Getting_started_anyscript/Snippets/lesson1/snip.NewModel.main-1.any new file mode 100644 index 00000000..aee98e16 --- /dev/null +++ b/A_Getting_started_anyscript/Snippets/lesson1/snip.NewModel.main-1.any @@ -0,0 +1,26 @@ +// Todo: Write a small description of your model here + +Main = { + //# BEGIN SNIPPET 1 + // The actual body model goes in this folder + AnyFolder §ArmModel§ = { + + // Global Reference Frame + AnyFixedRefFrame GlobalRef = { + + // Todo: Add points for grounding of the model here + + }; + + // Todo: Add the model elements such as + // segments, joints, and muscles here. + + }; + //# END SNIPPET 1 + // The study: Operations to be performed on the model + AnyBodyStudy ArmStudy = { + AnyFolder &Model = .ArmModel; + Gravity = {0.0, -9.81, 0.0}; + }; + +}; \ No newline at end of file diff --git a/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-1.any b/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-1.any new file mode 100644 index 00000000..28e89c43 --- /dev/null +++ b/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-1.any @@ -0,0 +1,25 @@ + // Todo: Write a small description of your model here + +Main = { +//# BEGIN SNIPPET 1 +// The actual body model goes in this folder +AnyFolder ArmModel = { + + // Global Reference Frame + AnyFixedRefFrame GlobalRef = { + // Todo: Add points for grounding of the model here + }; + + §// Segments + AnyFolder Segs = { + }; // Segs folder § + +}; + //# END SNIPPET 1 + // The study: Operations to be performed on the model + AnyBodyStudy ArmStudy = { + AnyFolder &Model = .ArmModel; + Gravity = {0.0, -9.81, 0.0}; + }; + +}; \ No newline at end of file diff --git a/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-2.any b/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-2.any new file mode 100644 index 00000000..9b169bf9 --- /dev/null +++ b/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-2.any @@ -0,0 +1,43 @@ +//expect_errors = ["''", "Model loading skipped"] + +// Todo: Write a small description of your model here + +Main = { +// The actual body model goes in this folder +AnyFolder ArmModel = { + + // Global Reference Frame + AnyFixedRefFrame GlobalRef = { + // Todo: Add points for grounding of the model here + }; + + //# BEGIN SNIPPET 1 + // Segments + AnyFolder Segs = { + §AnySeg = { + //viewRefFrame.Visible = Off; + //viewNodes.Visible = Off; + //r0 = {0.0, 0.0, 0.0}; + //rDot0 = {0.0, 0.0, 0.0}; + //Axes0 = {{1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}}; + //omega0 = {0.0, 0.0, 0.0}; + Mass = 0.0; + Jii = {0.0, 0.0, 0.0}; + //Jij = {0.0, 0.0, 0.0}; + //sCoM = {0.0, 0.0, 0.0}; + //JaboutCoMOnOff = Off; + //viewInertia.Visible = Off; + //AnyInertia & = ; + //AnyInertia & = ; You can make any number of AnyInertia objects! + };§ + }; // Segs folder + //# END SNIPPET 1 + +}; + // The study: Operations to be performed on the model + AnyBodyStudy ArmStudy = { + AnyFolder &Model = .ArmModel; + Gravity = {0.0, -9.81, 0.0}; + }; + +}; \ No newline at end of file diff --git a/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-3.any b/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-3.any new file mode 100644 index 00000000..d8ed2799 --- /dev/null +++ b/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-3.any @@ -0,0 +1,32 @@ + // Todo: Write a small description of your model here + +Main = { +// The actual body model goes in this folder +AnyFolder ArmModel = { + + // Global Reference Frame + AnyFixedRefFrame GlobalRef = { + // Todo: Add points for grounding of the model here + }; + + + // Segments + AnyFolder Segs = { + //# BEGIN SNIPPET 1 +AnySeg §UpperArm§ = { + //r0 = {0.0, 0.0, 0.0}; + //Axes0 = {{1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}}; + Mass = §2§; + Jii = {§0.001, 0.01, 0.01§}; +}; §//UpperArm§ + //# END SNIPPET 1 + }; // Segs folder + +}; + // The study: Operations to be performed on the model + AnyBodyStudy ArmStudy = { + AnyFolder &Model = .ArmModel; + Gravity = {0.0, -9.81, 0.0}; + }; + +}; \ No newline at end of file diff --git a/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-4.any b/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-4.any new file mode 100644 index 00000000..cdc5cd90 --- /dev/null +++ b/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-4.any @@ -0,0 +1,33 @@ + // Todo: Write a small description of your model here + +Main = { +// The actual body model goes in this folder +AnyFolder ArmModel = { + + // Global Reference Frame + AnyFixedRefFrame GlobalRef = { + // Todo: Add points for grounding of the model here + }; + + + // Segments + AnyFolder Segs = { + //# BEGIN SNIPPET 1 +AnySeg UpperArm = { + //r0 = {0.0, 0.0, 0.0}; + //Axes0 = {{1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}}; + Mass = 2; + Jii = {0.001, 0.01, 0.01}; + §AnyDrawSeg drw = {};§ +}; //UpperArm + //# END SNIPPET 1 + }; // Segs folder + +}; + // The study: Operations to be performed on the model + AnyBodyStudy ArmStudy = { + AnyFolder &Model = .ArmModel; + Gravity = {0.0, -9.81, 0.0}; + }; + +}; \ No newline at end of file diff --git a/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-5.any b/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-5.any new file mode 100644 index 00000000..690302db --- /dev/null +++ b/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-5.any @@ -0,0 +1,57 @@ + // Todo: Write a small description of your model here + +Main = { +// The actual body model goes in this folder +AnyFolder ArmModel = { + + // Global Reference Frame + AnyFixedRefFrame GlobalRef = { + // Todo: Add points for grounding of the model here + }; + + + // Segments + AnyFolder Segs = { + //# BEGIN SNIPPET 1 +AnySeg UpperArm = { + //r0 = {0.0, 0.0, 0.0}; + //Axes0 = {{1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}}; + Mass = 2; + Jii = {0.001, 0.01, 0.01}; + AnyDrawSeg drw = {}; + §AnyRefNode ShoulderNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode ElbowNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode DeltodeusA = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode DeltodeusB = { + sRel = {-0.1,0,-0.02}; + }; + AnyRefNode Brachialis = { + sRel = {0.1,0,0.01}; + }; + AnyRefNode BicepsShort = { + sRel = {-0.1,0,0.03}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.05,0,0.02}; + }; + AnyRefNode TricepsShort = { + sRel = {-0.1,0,-0.01}; + };§ +}; //UpperArm + //# END SNIPPET 1 + }; // Segs folder + +}; + // The study: Operations to be performed on the model + AnyBodyStudy ArmStudy = { + AnyFolder &Model = .ArmModel; + Gravity = {0.0, -9.81, 0.0}; + }; + +}; \ No newline at end of file diff --git a/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-6.any b/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-6.any new file mode 100644 index 00000000..72b1607d --- /dev/null +++ b/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-6.any @@ -0,0 +1,82 @@ + // Todo: Write a small description of your model here + +Main = { +// The actual body model goes in this folder +AnyFolder ArmModel = { + + // Global Reference Frame + AnyFixedRefFrame GlobalRef = { + // Todo: Add points for grounding of the model here + }; + + + // Segments + AnyFolder Segs = { + AnySeg UpperArm = { + //r0 = {0.0, 0.0, 0.0}; + //Axes0 = {{1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}}; + Mass = 2; + Jii = {0.001, 0.01, 0.01}; + AnyDrawSeg drw = {}; + §AnyRefNode ShoulderNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode ElbowNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode DeltodeusA = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode DeltodeusB = { + sRel = {-0.1,0,-0.02}; + }; + AnyRefNode Brachialis = { + sRel = {0.1,0,0.01}; + }; + AnyRefNode BicepsShort = { + sRel = {-0.1,0,0.03}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.05,0,0.02}; + }; + AnyRefNode TricepsShort = { + sRel = {-0.1,0,-0.01}; + };§ + }; //UpperArm + + //# BEGIN SNIPPET 1 + §AnySeg ForeArm = { + Mass = 2.0; + Jii = {0.001,0.01,0.01}; + AnyRefNode ElbowNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode HandNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode Brachialis = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.0,0,0.02}; + }; + AnyRefNode Biceps = { + sRel = {-0.15,0,0.01}; + }; + AnyRefNode Triceps = { + sRel = {-0.25,0,-0.05}; + }; + AnyDrawSeg DrwSeg = {}; + }; // ForeArm§ + +}; // Segs folder + //# END SNIPPET 1 + +}; + // The study: Operations to be performed on the model + AnyBodyStudy ArmStudy = { + AnyFolder &Model = .ArmModel; + Gravity = {0.0, -9.81, 0.0}; + }; + +}; \ No newline at end of file diff --git a/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-7.any b/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-7.any new file mode 100644 index 00000000..ecbf54d2 --- /dev/null +++ b/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-7.any @@ -0,0 +1,85 @@ + // Todo: Write a small description of your model here + +Main = { +// The actual body model goes in this folder +AnyFolder ArmModel = { + + // Global Reference Frame + AnyFixedRefFrame GlobalRef = { + // Todo: Add points for grounding of the model here + }; + + + // Segments + AnyFolder Segs = { + //# BEGIN SNIPPET 1 +AnySeg UpperArm = { + §r0 = {0.0, 0.3, 0.0};§ + //Axes0 = {{1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}}; + Mass = 2; + Jii = {0.001, 0.01, 0.01}; + AnyDrawSeg drw = {}; + //# END SNIPPET 1 + §AnyRefNode ShoulderNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode ElbowNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode DeltodeusA = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode DeltodeusB = { + sRel = {-0.1,0,-0.02}; + }; + AnyRefNode Brachialis = { + sRel = {0.1,0,0.01}; + }; + AnyRefNode BicepsShort = { + sRel = {-0.1,0,0.03}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.05,0,0.02}; + }; + AnyRefNode TricepsShort = { + sRel = {-0.1,0,-0.01}; + };§ + }; //UpperArm + + //# BEGIN SNIPPET 2 +AnySeg ForeArm = { + §r0 = {0.3, 0.0, 0.0};§ + Mass = 2.0; + Jii = {0.001,0.01,0.01}; + //# END SNIPPET 2 + AnyRefNode ElbowNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode HandNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode Brachialis = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.0,0,0.02}; + }; + AnyRefNode Biceps = { + sRel = {-0.15,0,0.01}; + }; + AnyRefNode Triceps = { + sRel = {-0.25,0,-0.05}; + }; + AnyDrawSeg DrwSeg = {}; + }; // ForeArm + + }; // Segs folder + +}; + // The study: Operations to be performed on the model + AnyBodyStudy ArmStudy = { + AnyFolder &Model = .ArmModel; + Gravity = {0.0, -9.81, 0.0}; + }; + +}; \ No newline at end of file diff --git a/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-8.any b/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-8.any new file mode 100644 index 00000000..5f816b55 --- /dev/null +++ b/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-8.any @@ -0,0 +1,83 @@ + // Todo: Write a small description of your model here + +Main = { +// The actual body model goes in this folder +AnyFolder ArmModel = { + + // Global Reference Frame + AnyFixedRefFrame GlobalRef = { + // Todo: Add points for grounding of the model here + }; + + + // Segments + AnyFolder Segs = { + //# BEGIN SNIPPET 1 +AnySeg UpperArm = { + r0 = {0.0, 0.3, 0.0}; + §Axes0 = {{1.0, 0.0, 0.0}, {0.0, 1.0, 0.0}, {0.0, 0.0, 1.0}};§ + //# END SNIPPET 1 + Mass = 2; + Jii = {0.001, 0.01, 0.01}; + AnyDrawSeg drw = {}; + §AnyRefNode ShoulderNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode ElbowNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode DeltodeusA = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode DeltodeusB = { + sRel = {-0.1,0,-0.02}; + }; + AnyRefNode Brachialis = { + sRel = {0.1,0,0.01}; + }; + AnyRefNode BicepsShort = { + sRel = {-0.1,0,0.03}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.05,0,0.02}; + }; + AnyRefNode TricepsShort = { + sRel = {-0.1,0,-0.01}; + };§ + }; //UpperArm + + AnySeg ForeArm = { + r0 = {0.3, 0.0, 0.0}; + Mass = 2.0; + Jii = {0.001,0.01,0.01}; + AnyRefNode ElbowNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode HandNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode Brachialis = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.0,0,0.02}; + }; + AnyRefNode Biceps = { + sRel = {-0.15,0,0.01}; + }; + AnyRefNode Triceps = { + sRel = {-0.25,0,-0.05}; + }; + AnyDrawSeg DrwSeg = {}; + }; // ForeArm + + }; // Segs folder + +}; + // The study: Operations to be performed on the model + AnyBodyStudy ArmStudy = { + AnyFolder &Model = .ArmModel; + Gravity = {0.0, -9.81, 0.0}; + }; + +}; \ No newline at end of file diff --git a/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-9.any b/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-9.any new file mode 100644 index 00000000..281ec33b --- /dev/null +++ b/A_Getting_started_anyscript/Snippets/lesson2/snip.NewModel.main-9.any @@ -0,0 +1,84 @@ + // Todo: Write a small description of your model here + +Main = { + // The actual body model goes in this folder + AnyFolder ArmModel = { + + // Global Reference Frame + AnyFixedRefFrame GlobalRef = { + // Todo: Add points for grounding of the model here + }; + + + // Segments + AnyFolder Segs = { + //# BEGIN SNIPPET 1 +AnySeg UpperArm = { + r0 = {0.0, 0.3, 0.0}; + §Axes0 = RotMat(-90*pi/180, z);§ + //# END SNIPPET 1 + Mass = 2; + Jii = {0.001, 0.01, 0.01}; + AnyDrawSeg drw = {}; + §AnyRefNode ShoulderNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode ElbowNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode DeltodeusA = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode DeltodeusB = { + sRel = {-0.1,0,-0.02}; + }; + AnyRefNode Brachialis = { + sRel = {0.1,0,0.01}; + }; + AnyRefNode BicepsShort = { + sRel = {-0.1,0,0.03}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.05,0,0.02}; + }; + AnyRefNode TricepsShort = { + sRel = {-0.1,0,-0.01}; + };§ + }; //UpperArm + + // ForeArm + AnySeg ForeArm = { + r0 = {0.3, 0.0, 0.0}; + Mass = 2.0; + Jii = {0.001,0.01,0.01}; + AnyRefNode ElbowNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode HandNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode Brachialis = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.0,0,0.02}; + }; + AnyRefNode Biceps = { + sRel = {-0.15,0,0.01}; + }; + AnyRefNode Triceps = { + sRel = {-0.25,0,-0.05}; + }; + AnyDrawSeg DrwSeg = {}; + }; // ForeArm + + }; // Segs folder + +}; + // The study: Operations to be performed on the model + AnyBodyStudy ArmStudy = { + AnyFolder &Model = .ArmModel; + Gravity = {0.0, -9.81, 0.0}; + }; + +}; \ No newline at end of file diff --git a/A_Getting_started_anyscript/Snippets/lesson3/snip.NewModel.main-1.any b/A_Getting_started_anyscript/Snippets/lesson3/snip.NewModel.main-1.any new file mode 100644 index 00000000..1aec2c75 --- /dev/null +++ b/A_Getting_started_anyscript/Snippets/lesson3/snip.NewModel.main-1.any @@ -0,0 +1,89 @@ + // Todo: Write a small description of your model here + +Main = { + // The actual body model goes in this folder + AnyFolder ArmModel = { + + //# BEGIN SNIPPET 1 +// Global Reference Frame +AnyFixedRefFrame GlobalRef = { + // Todo: Add points for grounding of the model here + +}; // Global Reference Frame + //# END SNIPPET 1 + + // Segments + AnyFolder Segs = { + + //UpperArm + AnySeg UpperArm = { + r0 = {0.0, 0.3, 0.0}; + Axes0 = RotMat(-90*pi/180, z); + Mass = 2; + Jii = {0.001, 0.01, 0.01}; + AnyDrawSeg drw = {}; + AnyRefNode ShoulderNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode ElbowNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode DeltodeusA = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode DeltodeusB = { + sRel = {-0.1,0,-0.02}; + }; + AnyRefNode Brachialis = { + sRel = {0.1,0,0.01}; + }; + AnyRefNode BicepsShort = { + sRel = {-0.1,0,0.03}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.05,0,0.02}; + }; + AnyRefNode TricepsShort = { + sRel = {-0.1,0,-0.01}; + }; + }; //UpperArm + + // ForeArm + AnySeg ForeArm = { + r0 = {0.3, 0.0, 0.0}; + Mass = 2.0; + Jii = {0.001,0.01,0.01}; + AnyRefNode ElbowNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode HandNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode Brachialis = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.0,0,0.02}; + }; + AnyRefNode Biceps = { + sRel = {-0.15,0,0.01}; + }; + AnyRefNode Triceps = { + sRel = {-0.25,0,-0.05}; + }; + AnyDrawSeg DrwSeg = {}; + }; // ForeArm + + // Todo: Add the model elements such as + // segments, joints, and muscles here. + + }; // Segs folder + + }; // The study: Operations to be performed on the model + // ArmModel + AnyBodyStudy ArmStudy = { + AnyFolder &Model = .ArmModel; + Gravity = {0.0, -9.81, 0.0}; + }; + +}; \ No newline at end of file diff --git a/A_Getting_started_anyscript/Snippets/lesson3/snip.NewModel.main-2.any b/A_Getting_started_anyscript/Snippets/lesson3/snip.NewModel.main-2.any new file mode 100644 index 00000000..eefba148 --- /dev/null +++ b/A_Getting_started_anyscript/Snippets/lesson3/snip.NewModel.main-2.any @@ -0,0 +1,104 @@ + // Todo: Write a small description of your model here + +Main = { + // The actual body model goes in this folder + AnyFolder ArmModel = { + + //# BEGIN SNIPPET 1 +// Global Reference Frame +AnyFixedRefFrame GlobalRef = { + §AnyDrawRefFrame DrwGlobalRef = {}; + + AnyRefNode Shoulder = { + sRel = {0,0,0}; + }; + AnyRefNode DeltodeusA = { + sRel = {0.05,0,0}; + }; + AnyRefNode DeltodeusB = { + sRel = {-0.05,0,0}; + }; + AnyRefNode BicepsLong = { + sRel = {0.1,0,0}; + }; + AnyRefNode TricepsLong = { + sRel = {-0.1,0,0}; + };§ +}; // Global Reference Frame + //# END SNIPPET 1 + + // Segments + AnyFolder Segs = { + + //UpperArm + AnySeg UpperArm = { + r0 = {0.0, 0.3, 0.0}; + Axes0 = RotMat(-90*pi/180, z); + Mass = 2; + Jii = {0.001, 0.01, 0.01}; + AnyDrawSeg drw = {}; + AnyRefNode ShoulderNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode ElbowNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode DeltodeusA = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode DeltodeusB = { + sRel = {-0.1,0,-0.02}; + }; + AnyRefNode Brachialis = { + sRel = {0.1,0,0.01}; + }; + AnyRefNode BicepsShort = { + sRel = {-0.1,0,0.03}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.05,0,0.02}; + }; + AnyRefNode TricepsShort = { + sRel = {-0.1,0,-0.01}; + }; + }; //UpperArm + + // ForeArm + AnySeg ForeArm = { + r0 = {0.3, 0.0, 0.0}; + Mass = 2.0; + Jii = {0.001,0.01,0.01}; + AnyRefNode ElbowNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode HandNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode Brachialis = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.0,0,0.02}; + }; + AnyRefNode Biceps = { + sRel = {-0.15,0,0.01}; + }; + AnyRefNode Triceps = { + sRel = {-0.25,0,-0.05}; + }; + AnyDrawSeg DrwSeg = {}; + }; // ForeArm + + // Todo: Add the model elements such as + // segments, joints, and muscles here. + + }; // Segs folder + + }; // The study: Operations to be performed on the model + // ArmModel + AnyBodyStudy ArmStudy = { + AnyFolder &Model = .ArmModel; + Gravity = {0.0, -9.81, 0.0}; + }; + +}; \ No newline at end of file diff --git a/A_Getting_started_anyscript/Snippets/lesson3/snip.NewModel.main-3.any b/A_Getting_started_anyscript/Snippets/lesson3/snip.NewModel.main-3.any new file mode 100644 index 00000000..183dfc26 --- /dev/null +++ b/A_Getting_started_anyscript/Snippets/lesson3/snip.NewModel.main-3.any @@ -0,0 +1,107 @@ + // Todo: Write a small description of your model here + +Main = { + // The actual body model goes in this folder + AnyFolder ArmModel = { + + // Global Reference Frame + AnyFixedRefFrame GlobalRef = { + //# BEGIN SNIPPET 1 +AnyDrawRefFrame DrwGlobalRef = { + §ScaleXYZ = {0.1, 0.1, 0.1}; + RGB = {0,1,0};§ +}; +//# END SNIPPET 1 + + AnyRefNode Shoulder = { + sRel = {0,0,0}; + }; + AnyRefNode DeltodeusA = { + sRel = {0.05,0,0}; + }; + AnyRefNode DeltodeusB = { + sRel = {-0.05,0,0}; + }; + AnyRefNode BicepsLong = { + sRel = {0.1,0,0}; + }; + AnyRefNode TricepsLong = { + sRel = {-0.1,0,0}; + }; + }; // Global Reference Frame + + // Segments + AnyFolder Segs = { + + //UpperArm + AnySeg UpperArm = { + r0 = {0.0, 0.3, 0.0}; + Axes0 = RotMat(-90*pi/180, z); + Mass = 2; + Jii = {0.001, 0.01, 0.01}; + AnyDrawSeg drw = {}; + AnyRefNode ShoulderNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode ElbowNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode DeltodeusA = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode DeltodeusB = { + sRel = {-0.1,0,-0.02}; + }; + AnyRefNode Brachialis = { + sRel = {0.1,0,0.01}; + }; + AnyRefNode BicepsShort = { + sRel = {-0.1,0,0.03}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.05,0,0.02}; + }; + AnyRefNode TricepsShort = { + sRel = {-0.1,0,-0.01}; + }; + }; //UpperArm + + // ForeArm + AnySeg ForeArm = { + r0 = {0.3, 0.0, 0.0}; + Mass = 2.0; + Jii = {0.001,0.01,0.01}; + AnyRefNode ElbowNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode HandNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode Brachialis = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.0,0,0.02}; + }; + AnyRefNode Biceps = { + sRel = {-0.15,0,0.01}; + }; + AnyRefNode Triceps = { + sRel = {-0.25,0,-0.05}; + }; + AnyDrawSeg DrwSeg = {}; + }; // ForeArm + + // Todo: Add the model elements such as + // segments, joints, and muscles here. + + }; // Segs folder + + }; // The study: Operations to be performed on the model + // ArmModel + AnyBodyStudy ArmStudy = { + AnyFolder &Model = .ArmModel; + Gravity = {0.0, -9.81, 0.0}; + }; + +}; \ No newline at end of file diff --git a/A_Getting_started_anyscript/Snippets/lesson3/snip.NewModel.main-4.any b/A_Getting_started_anyscript/Snippets/lesson3/snip.NewModel.main-4.any new file mode 100644 index 00000000..00274069 --- /dev/null +++ b/A_Getting_started_anyscript/Snippets/lesson3/snip.NewModel.main-4.any @@ -0,0 +1,118 @@ + // Todo: Write a small description of your model here + +Main = { + // The actual body model goes in this folder + AnyFolder ArmModel = { + + // Global Reference Frame + AnyFixedRefFrame GlobalRef = { + AnyDrawRefFrame DrwGlobalRef = { + ScaleXYZ = {0.1, 0.1, 0.1}; + RGB = {0,1,0}; + }; + + AnyRefNode Shoulder = { + sRel = {0,0,0}; + }; + AnyRefNode DeltodeusA = { + sRel = {0.05,0,0}; + }; + AnyRefNode DeltodeusB = { + sRel = {-0.05,0,0}; + }; + AnyRefNode BicepsLong = { + sRel = {0.1,0,0}; + }; + AnyRefNode TricepsLong = { + sRel = {-0.1,0,0}; + }; + }; // Global Reference Frame + + // Segments + AnyFolder Segs = { + + //UpperArm + AnySeg UpperArm = { + r0 = {0.0, 0.3, 0.0}; + Axes0 = RotMat(-90*pi/180, z); + Mass = 2; + Jii = {0.001, 0.01, 0.01}; + AnyDrawSeg drw = {}; + AnyRefNode ShoulderNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode ElbowNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode DeltodeusA = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode DeltodeusB = { + sRel = {-0.1,0,-0.02}; + }; + AnyRefNode Brachialis = { + sRel = {0.1,0,0.01}; + }; + AnyRefNode BicepsShort = { + sRel = {-0.1,0,0.03}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.05,0,0.02}; + }; + AnyRefNode TricepsShort = { + sRel = {-0.1,0,-0.01}; + }; + }; //UpperArm + + // ForeArm + AnySeg ForeArm = { + r0 = {0.3, 0.0, 0.0}; + Mass = 2.0; + Jii = {0.001,0.01,0.01}; + AnyRefNode ElbowNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode HandNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode Brachialis = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.0,0,0.02}; + }; + AnyRefNode Biceps = { + sRel = {-0.15,0,0.01}; + }; + AnyRefNode Triceps = { + sRel = {-0.25,0,-0.05}; + }; + AnyDrawSeg DrwSeg = {}; +//# BEGIN SNIPPET 1 + }; // ForeArm +}; // Segs folder + +§ +// Joints +AnyFolder Jnts = { + + //--------------------------------- + AnyRevoluteJoint Shoulder = { + + AnyRefNode &GroundNode = ..GlobalRef.Shoulder; + AnyRefNode &UpperArmNode = ..Segs.UpperArm.ShoulderNode; + + Axis = z; + + }; // Shoulder joint +}; // Jnts folder§ +//# END SNIPPET 1 + + }; // The study: Operations to be performed on the model + // ArmModel + AnyBodyStudy ArmStudy = { + AnyFolder &Model = .ArmModel; + Gravity = {0.0, -9.81, 0.0}; + }; + +}; \ No newline at end of file diff --git a/A_Getting_started_anyscript/Snippets/lesson3/snip.NewModel.main-5.any b/A_Getting_started_anyscript/Snippets/lesson3/snip.NewModel.main-5.any new file mode 100644 index 00000000..64afba98 --- /dev/null +++ b/A_Getting_started_anyscript/Snippets/lesson3/snip.NewModel.main-5.any @@ -0,0 +1,116 @@ + // Todo: Write a small description of your model here + +Main = { + // The actual body model goes in this folder + AnyFolder ArmModel = { + + // Global Reference Frame + AnyFixedRefFrame GlobalRef = { + AnyDrawRefFrame DrwGlobalRef = { + ScaleXYZ = {0.1, 0.1, 0.1}; + RGB = {0,1,0}; + }; + + AnyRefNode Shoulder = { + sRel = {0,0,0}; + }; + AnyRefNode DeltodeusA = { + sRel = {0.05,0,0}; + }; + AnyRefNode DeltodeusB = { + sRel = {-0.05,0,0}; + }; + AnyRefNode BicepsLong = { + sRel = {0.1,0,0}; + }; + AnyRefNode TricepsLong = { + sRel = {-0.1,0,0}; + }; + }; // Global Reference Frame + + // Segments + AnyFolder Segs = { + + //UpperArm + AnySeg UpperArm = { + r0 = {0.0, 0.3, 0.0}; + Axes0 = RotMat(-90*pi/180, z); + Mass = 2; + Jii = {0.001, 0.01, 0.01}; + AnyDrawSeg drw = {}; + AnyRefNode ShoulderNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode ElbowNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode DeltodeusA = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode DeltodeusB = { + sRel = {-0.1,0,-0.02}; + }; + AnyRefNode Brachialis = { + sRel = {0.1,0,0.01}; + }; + AnyRefNode BicepsShort = { + sRel = {-0.1,0,0.03}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.05,0,0.02}; + }; + AnyRefNode TricepsShort = { + sRel = {-0.1,0,-0.01}; + }; + }; //UpperArm + + // ForeArm + AnySeg ForeArm = { + r0 = {0.3, 0.0, 0.0}; + Mass = 2.0; + Jii = {0.001,0.01,0.01}; + AnyRefNode ElbowNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode HandNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode Brachialis = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.0,0,0.02}; + }; + AnyRefNode Biceps = { + sRel = {-0.15,0,0.01}; + }; + AnyRefNode Triceps = { + sRel = {-0.25,0,-0.05}; + }; + AnyDrawSeg DrwSeg = {}; + }; // ForeArm +}; // Segs folder + + +// Joints +AnyFolder Jnts = { + + //--------------------------------- + AnyRevoluteJoint Shoulder = { +//# BEGIN SNIPPET 1 +AnyRefNode &GroundNode = ..GlobalRef.Shoulder; +AnyRefNode &UpperArmNode = ..Segs.UpperArm.ShoulderNode; +//# END SNIPPET 1 + Axis = z; + + }; // Shoulder joint +}; // Jnts folder + + }; // The study: Operations to be performed on the model + // ArmModel + AnyBodyStudy ArmStudy = { + AnyFolder &Model = .ArmModel; + Gravity = {0.0, -9.81, 0.0}; + }; + +}; \ No newline at end of file diff --git a/A_Getting_started_anyscript/Snippets/lesson3/snip.NewModel.main-6.any b/A_Getting_started_anyscript/Snippets/lesson3/snip.NewModel.main-6.any new file mode 100644 index 00000000..930da3e1 --- /dev/null +++ b/A_Getting_started_anyscript/Snippets/lesson3/snip.NewModel.main-6.any @@ -0,0 +1,116 @@ + // Todo: Write a small description of your model here + +Main = { + // The actual body model goes in this folder + AnyFolder ArmModel = { + + // Global Reference Frame + AnyFixedRefFrame GlobalRef = { + AnyDrawRefFrame DrwGlobalRef = { + ScaleXYZ = {0.1, 0.1, 0.1}; + RGB = {0,1,0}; + }; + + AnyRefNode Shoulder = { + sRel = {0,0,0}; + }; + AnyRefNode DeltodeusA = { + sRel = {0.05,0,0}; + }; + AnyRefNode DeltodeusB = { + sRel = {-0.05,0,0}; + }; + AnyRefNode BicepsLong = { + sRel = {0.1,0,0}; + }; + AnyRefNode TricepsLong = { + sRel = {-0.1,0,0}; + }; + }; // Global Reference Frame + + // Segments + AnyFolder Segs = { + + //UpperArm + AnySeg UpperArm = { + r0 = {0.0, 0.3, 0.0}; + Axes0 = RotMat(-90*pi/180, z); + Mass = 2; + Jii = {0.001, 0.01, 0.01}; + AnyDrawSeg drw = {}; + AnyRefNode ShoulderNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode ElbowNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode DeltodeusA = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode DeltodeusB = { + sRel = {-0.1,0,-0.02}; + }; + AnyRefNode Brachialis = { + sRel = {0.1,0,0.01}; + }; + AnyRefNode BicepsShort = { + sRel = {-0.1,0,0.03}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.05,0,0.02}; + }; + AnyRefNode TricepsShort = { + sRel = {-0.1,0,-0.01}; + }; + }; //UpperArm + + // ForeArm + AnySeg ForeArm = { + r0 = {0.3, 0.0, 0.0}; + Mass = 2.0; + Jii = {0.001,0.01,0.01}; + AnyRefNode ElbowNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode HandNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode Brachialis = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.0,0,0.02}; + }; + AnyRefNode Biceps = { + sRel = {-0.15,0,0.01}; + }; + AnyRefNode Triceps = { + sRel = {-0.25,0,-0.05}; + }; + AnyDrawSeg DrwSeg = {}; + }; // ForeArm +}; // Segs folder + + +// Joints +AnyFolder Jnts = { + + //--------------------------------- + AnyRevoluteJoint Shoulder = { + + AnyRefNode &GroundNode = ..GlobalRef.Shoulder; + AnyRefNode &UpperArmNode = ..Segs.UpperArm.ShoulderNode; +//# BEGIN SNIPPET 1 +Axis = z; +//# END SNIPPET 1 + }; // Shoulder joint +}; // Jnts folder + + }; // The study: Operations to be performed on the model + // ArmModel + AnyBodyStudy ArmStudy = { + AnyFolder &Model = .ArmModel; + Gravity = {0.0, -9.81, 0.0}; + }; + +}; \ No newline at end of file diff --git a/A_Getting_started_anyscript/Snippets/lesson3/snip.NewModel.main-7.any b/A_Getting_started_anyscript/Snippets/lesson3/snip.NewModel.main-7.any new file mode 100644 index 00000000..d9fa4212 --- /dev/null +++ b/A_Getting_started_anyscript/Snippets/lesson3/snip.NewModel.main-7.any @@ -0,0 +1,121 @@ +//expect_errors = ["';' unexpected", "Model loading skipped"] + +// Todo: Write a small description of your model here + +Main = { + // The actual body model goes in this folder + AnyFolder ArmModel = { + + // Global Reference Frame + AnyFixedRefFrame GlobalRef = { + AnyDrawRefFrame DrwGlobalRef = { + ScaleXYZ = {0.1, 0.1, 0.1}; + RGB = {0,1,0}; + }; + + AnyRefNode Shoulder = { + sRel = {0,0,0}; + }; + AnyRefNode DeltodeusA = { + sRel = {0.05,0,0}; + }; + AnyRefNode DeltodeusB = { + sRel = {-0.05,0,0}; + }; + AnyRefNode BicepsLong = { + sRel = {0.1,0,0}; + }; + AnyRefNode TricepsLong = { + sRel = {-0.1,0,0}; + }; + }; // Global Reference Frame + + // Segments + AnyFolder Segs = { + + //UpperArm + AnySeg UpperArm = { + r0 = {0.0, 0.3, 0.0}; + Axes0 = RotMat(-90*pi/180, z); + Mass = 2; + Jii = {0.001, 0.01, 0.01}; + AnyDrawSeg drw = {}; + AnyRefNode ShoulderNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode ElbowNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode DeltodeusA = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode DeltodeusB = { + sRel = {-0.1,0,-0.02}; + }; + AnyRefNode Brachialis = { + sRel = {0.1,0,0.01}; + }; + AnyRefNode BicepsShort = { + sRel = {-0.1,0,0.03}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.05,0,0.02}; + }; + AnyRefNode TricepsShort = { + sRel = {-0.1,0,-0.01}; + }; + }; //UpperArm + + // ForeArm + AnySeg ForeArm = { + r0 = {0.3, 0.0, 0.0}; + Mass = 2.0; + Jii = {0.001,0.01,0.01}; + AnyRefNode ElbowNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode HandNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode Brachialis = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.0,0,0.02}; + }; + AnyRefNode Biceps = { + sRel = {-0.15,0,0.01}; + }; + AnyRefNode Triceps = { + sRel = {-0.25,0,-0.05}; + }; + AnyDrawSeg DrwSeg = {}; + }; // ForeArm +}; // Segs folder + +//# BEGIN SNIPPET 1 +// Joints +AnyFolder Jnts = { + //--------------------------------- + AnyRevoluteJoint Shoulder = { + AnyRefNode &GroundNode = ..GlobalRef.Shoulder; + AnyRefNode &UpperArmNode = ..Segs.UpperArm.ShoulderNode; + Axis = z; + }; // Shoulder joint + + §AnyRevoluteJoint Elbow = { + Axis = z; + AnyRefNode &UpperArmNode = ; + AnyRefNode &ForeArmNode = ; + }; // Elbow joint§ +}; // Jnts folder +//# END SNIPPET 1 + + }; // The study: Operations to be performed on the model + // ArmModel + AnyBodyStudy ArmStudy = { + AnyFolder &Model = .ArmModel; + Gravity = {0.0, -9.81, 0.0}; + }; + +}; \ No newline at end of file diff --git a/A_Getting_started_anyscript/Snippets/lesson3/snip.NewModel.main-8.any b/A_Getting_started_anyscript/Snippets/lesson3/snip.NewModel.main-8.any new file mode 100644 index 00000000..8486648a --- /dev/null +++ b/A_Getting_started_anyscript/Snippets/lesson3/snip.NewModel.main-8.any @@ -0,0 +1,119 @@ + // Todo: Write a small description of your model here + +Main = { + // The actual body model goes in this folder + AnyFolder ArmModel = { + + // Global Reference Frame + AnyFixedRefFrame GlobalRef = { + AnyDrawRefFrame DrwGlobalRef = { + ScaleXYZ = {0.1, 0.1, 0.1}; + RGB = {0,1,0}; + }; + + AnyRefNode Shoulder = { + sRel = {0,0,0}; + }; + AnyRefNode DeltodeusA = { + sRel = {0.05,0,0}; + }; + AnyRefNode DeltodeusB = { + sRel = {-0.05,0,0}; + }; + AnyRefNode BicepsLong = { + sRel = {0.1,0,0}; + }; + AnyRefNode TricepsLong = { + sRel = {-0.1,0,0}; + }; + }; // Global Reference Frame + + // Segments + AnyFolder Segs = { + + //UpperArm + AnySeg UpperArm = { + r0 = {0.0, 0.3, 0.0}; + Axes0 = RotMat(-90*pi/180, z); + Mass = 2; + Jii = {0.001, 0.01, 0.01}; + AnyDrawSeg drw = {}; + AnyRefNode ShoulderNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode ElbowNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode DeltodeusA = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode DeltodeusB = { + sRel = {-0.1,0,-0.02}; + }; + AnyRefNode Brachialis = { + sRel = {0.1,0,0.01}; + }; + AnyRefNode BicepsShort = { + sRel = {-0.1,0,0.03}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.05,0,0.02}; + }; + AnyRefNode TricepsShort = { + sRel = {-0.1,0,-0.01}; + }; + }; //UpperArm + + // ForeArm + AnySeg ForeArm = { + r0 = {0.3, 0.0, 0.0}; + Mass = 2.0; + Jii = {0.001,0.01,0.01}; + AnyRefNode ElbowNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode HandNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode Brachialis = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.0,0,0.02}; + }; + AnyRefNode Biceps = { + sRel = {-0.15,0,0.01}; + }; + AnyRefNode Triceps = { + sRel = {-0.25,0,-0.05}; + }; + AnyDrawSeg DrwSeg = {}; + }; // ForeArm +}; // Segs folder + +// Joints +AnyFolder Jnts = { + //--------------------------------- + AnyRevoluteJoint Shoulder = { + AnyRefNode &GroundNode = ..GlobalRef.Shoulder; + AnyRefNode &UpperArmNode = ..Segs.UpperArm.ShoulderNode; + Axis = z; + }; // Shoulder joint + +//# BEGIN SNIPPET 1 +AnyRevoluteJoint Elbow = { + Axis = z; + AnyRefNode &UpperArmNode = §Main.ArmModel.Segs.UpperArm.ElbowNode§; + AnyRefNode &ForeArmNode = §Main.ArmModel.Segs.ForeArm.ElbowNode§; +}; // Elbow joint +//# END SNIPPET 1 +}; // Jnts folder + + }; // The study: Operations to be performed on the model + // ArmModel + AnyBodyStudy ArmStudy = { + AnyFolder &Model = .ArmModel; + Gravity = {0.0, -9.81, 0.0}; + }; + +}; \ No newline at end of file diff --git a/A_Getting_started_anyscript/Snippets/lesson4/snip.NewModel.main-1.any b/A_Getting_started_anyscript/Snippets/lesson4/snip.NewModel.main-1.any new file mode 100644 index 00000000..8980201e --- /dev/null +++ b/A_Getting_started_anyscript/Snippets/lesson4/snip.NewModel.main-1.any @@ -0,0 +1,119 @@ +// Todo: Write a small description of your model here + +Main = { + + // The actual body model goes in this folder + AnyFolder ArmModel = { + + // Global Reference Frame + AnyFixedRefFrame GlobalRef = { + + AnyDrawRefFrame DrwGlobalRef = { + ScaleXYZ = {0.1, 0.1, 0.1}; + RGB = {0,1,0}; + }; + AnyRefNode Shoulder = { + sRel = {0,0,0}; + }; + AnyRefNode DeltodeusA = { + sRel = {0.05,0,0}; + }; + AnyRefNode DeltodeusB = { + sRel = {-0.05,0,0}; + }; + AnyRefNode BicepsLong = { + sRel = {0.1,0,0}; + }; + AnyRefNode TricepsLong = { + sRel = {-0.1,0,0}; + }; + }; // Global reference frame + + // Segments + AnyFolder Segs = { + AnySeg UpperArm = { + r0 = {0, 0.3, 0}; + Axes0 =RotMat(-90*pi/180, z); + Mass = 2; + Jii = {0.001, 0.01, 0.01}; + AnyDrawSeg drw = {}; + + AnyRefNode ShoulderNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode ElbowNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode DeltodeusA = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode DeltodeusB = { + sRel = {-0.1,0,-0.02}; + }; + AnyRefNode Brachialis = { + sRel = {0.1,0,0.01}; + }; + AnyRefNode BicepsShort = { + sRel = {-0.1,0,0.03}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.05,0,0.02}; + }; + AnyRefNode TricepsShort = { + sRel = {-0.1,0,-0.01}; + }; + }; // UpperArm + + AnySeg ForeArm = { + r0 = {0.3, 0, 0}; + Mass = 2.0; + Jii = {0.001,0.01,0.01}; + AnyRefNode ElbowNode = { + sRel = {-0.2,0,0}; + }; + AnyRefNode HandNode = { + sRel = {0.2,0,0}; + }; + AnyRefNode Brachialis = { + sRel = {-0.1,0,0.02}; + }; + AnyRefNode Brachioradialis = { + sRel = {0.0,0,0.02}; + }; + AnyRefNode Biceps = { + sRel = {-0.15,0,0.01}; + }; + AnyRefNode Triceps = { + sRel = {-0.25,0,-0.05}; + }; + AnyDrawSeg DrwSeg = {}; + }; // ForeArm + + }; // Segs folder + + // Joints + AnyFolder Jnts = { + //--------------------------------- + AnyRevoluteJoint Shoulder = { + Axis = z; + AnyRefNode &GroundNode = ..GlobalRef.Shoulder; + AnyRefNode &UpperArmNode = ..Segs.UpperArm.ShoulderNode; + }; // Shoulder joint + + AnyRevoluteJoint Elbow = { + Axis = z; + AnyRefNode &UpperArmNode = Main.ArmModel.Segs.UpperArm.ElbowNode; + AnyRefNode &ForeArmNode = Main.ArmModel.Segs.ForeArm.ElbowNode; + }; // Elbow joint + + }; // Jnts folder + + }; // MyModel + + // The study: Operations to be performed on the model + AnyBodyStudy ArmStudy = { + AnyFolder &Model = .ArmModel; + Gravity = {0.0, -9.81, 0.0}; + }; + +}; // Main diff --git a/A_Getting_started_anyscript/lesson1.md b/A_Getting_started_anyscript/lesson1.md index 1208875f..34c2ce58 100644 --- a/A_Getting_started_anyscript/lesson1.md +++ b/A_Getting_started_anyscript/lesson1.md @@ -23,65 +23,61 @@ for your model, based on a built-in template. Let's have a look at what the system has generated for you. If you ignore most of the text and comments (green lines beginning with {literal}`//`), the overall structure of the model looks like this: +:::{admonition} tl;dr +:class: tip margin dropdown +When you load the model, the name +assigned to a pair of braces, and all the contents between the braces will show up as +folders and sub-folders in the Model Tree. + +The code creates two objects - `MyModel` & `MyStudy` - which perform very +specific functions, which depend on the pre-preprogrammed object types (`AnyFolder` & `AnyBodyStudy`) +used to create these objects. These inbuilt object types are also known as CLASSES. +::: + ```AnyScriptDoc Main = {   AnyFolder MyModel = { -   }; // MyModel +   };   AnyBodyStudy MyStudy = {   }; -}; // Main +}; ``` -What you see is a hierarchy of braces - the outermost pair of braces is named "Main". -Everything else in the model goes between these braces. - -**When you load the model, the name -assigned to a pair of braces, and all the contents between the braces will show up as -folders and sub-folders in the Model Tree.** -**The code creates two objects - "MyModel" & "MyStudy" - which perform very -specific functions, which depend on the pre-preprogrammed object templates** (`AnyFolder` & `AnyBodyStudy`) -**used to create these objects. These inbuilt object templates are also known as CLASSES.** +What you see is a hierarchy of braces - the outermost pair of braces is named `Main = {`. +Everything else in the model goes between these braces. -"MyModel" (of type `AnyFolder`) is simply an +"MyModel" (of class type `AnyFolder`) is simply an organizational folder for containing the entire model you are going to build. Let us change the folder name "MyModel" to "ArmModel". -The object named "MyStudy" (of type `AnyBodyStudy`) is a collection of +The object named "MyStudy" (of class type `AnyBodyStudy`) is a collection of simulation tasks that you want to perform with your model. The {doc}`Study of Studies <../A_study_of_studies/intro>` tutorial contains much more information on simulation studies. -:::{warning} -Rename "MyStudy" to "ArmModelStudy", and replace all occurences of "MyModel" with "ArmModel". -All changes to your model will be highlighted in red hereon. +:::{attention} +:class: margin +All changes you need to do in your model will be highlighted in red in future tutorials. ::: -## What does this file contain so far? - -```AnyScriptDoc - // The actual body model goes in this folder -  AnyFolder §ArmModel§ = { - - // Global Reference Frame -  AnyFixedRefFrame GlobalRef = { +**👉 Now** reename `MyStudy` to `ArmModelStudy`, and replace all occurences of `MyModel` with `ArmModel`. -   // Todo: Add points for grounding -   // of the model here -}; // Global reference frame -   // Todo. Add the model elements such as -   // segments, joints, and muscles here. +## What does this file contain so far? -}; // §ArmModel§ +```{literalinclude} Snippets/lesson1/snip.NewModel.main-1.any +:language: AnyScriptDoc +:start-after: //# BEGIN SNIPPET 1 +:end-before: //# END SNIPPET 1 ``` -Within "ArmModel" is an object named "GlobalRef", created with the `AnyFixedRefFrame` class. This object is the global reference frame for your model. +Within `ArmModel = {}` is an object named `GlobalRef`, created with the `AnyFixedRefFrame` class. This object is the global reference frame for your model. -You will notice "to do" comments inside the braces, to which we will return later. +You will notice "Todo:" comments inside the braces, to which we will return later. :::{note} The model objects that you create henceforth must be placed within the "ArmModel" folder and should go between its @@ -96,7 +92,7 @@ refer to {ref}`this section ` from a previous tutorial. You may get message similar to the one below, in the Output Window. ```none -Loading Main : "C:\\...\\NewModel.main.any" +Loading Main : "C:\..\NewModel.main.any" Scanning... Parsing... Constructing model tree... @@ -105,7 +101,8 @@ Evaluating constants... Configuring model... Evaluating model... Loaded successfully. -Elapsed Time : 0.063000 +Elapsed Time : 0.030000 + ``` ## Basic troubleshooting @@ -113,15 +110,21 @@ Elapsed Time : 0.063000 If you mistype something, you will get an error message. A common mistake is to forget a semicolon somewhere. Try removing a semicolon and re-load the model, which may give you an error message like this: +:::{attention} +:class: margin +The error messages may look different depending on which semi-colon you removed. +Missing semicolons can be tricky, so keep that in mind. +::: + ```none ERROR(SCR.PRS11) : C:\\...\\NewModel.main.any(26) : 'EOF' unexpected Model loading skipped ``` -**The message contains clickable links for both error code and the location of the error in your file. Upon clicking the file link, the text cursor +The message contains clickable links for both error code and the location of the error in your file. Upon clicking the file link, the text cursor jumps to the exact problematic line in the file. Remember that an error can sometimes be caused by something you mistyped earlier -in the file.** +in the file. -Clicking the error code, e.g: ERROR(SCR.PRS11) opens a pop-up window with a complete explanation: +Clicking the error code, e.g: `ERROR(SCR.PRS11)` opens a pop-up window with a complete explanation: ```{image} _static/lesson1/image5.png ``` diff --git a/A_Getting_started_anyscript/lesson2.md b/A_Getting_started_anyscript/lesson2.md index a4c2b8c3..a6a0bafc 100644 --- a/A_Getting_started_anyscript/lesson2.md +++ b/A_Getting_started_anyscript/lesson2.md @@ -31,23 +31,11 @@ the segments are treated as rigid elements which represent human bones as well a We shall start by defining a folder for the segments. Please add the following text to your model (new text marked in red): -```AnyScriptDoc -// The actual body model goes in this folder -AnyFolder ArmModel = { -  // Global Reference Frame -  AnyFixedRefFrame GlobalRef = { - -  // Todo: Add points for grounding -  // of the model here - - }; // Global reference frame - -  §// Segments -  AnyFolder Segs = { -  }; // Segs folder§ - -}; // ArmModel +```{literalinclude} Snippets/lesson2/snip.NewModel.main-1.any +:language: AnyScriptDoc +:start-after: //# BEGIN SNIPPET 1 +:end-before: //# END SNIPPET 1 ``` Load the model by clicking the {{ Load_button_image }} icon or the @@ -69,21 +57,10 @@ double-click it to insert its template into your text editor.** You should get this: -```AnyScriptDoc -// Segments -AnyFolder Segs = { -  §AnySeg = -  { -    //r0 = {0, 0, 0}; -    //rDot0 = {0, 0, 0}; -    //Axes0 = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}; -    //omega0 = {0, 0, 0}; -    Mass = 0; -    Jii = {0, 0, 0}; -    //Jij = {0, 0, 0}; -    //sCoM = {0, 0, 0}; -  };§ -}; // Segs folder +```{literalinclude} Snippets/lesson2/snip.NewModel.main-2.any +:language: AnyScriptDoc +:start-after: //# BEGIN SNIPPET 1 +:end-before: //# END SNIPPET 1 ``` Every object in AnyBody defined by some properties that are both mandatory (the @@ -97,13 +74,10 @@ You can however change this by editing the properties `sCoM` and `Jij`. Go to "H Let us rename the segment as "UpperArm" and set its {literal}`Mass = 2` and {literal}`Jii = {0.001, 0.01, 0.01}`: -```AnyScriptDoc -AnySeg §UpperArm§ = { -  //r0 = {0, 0, 0}; -  //Axes0 = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}; -  Mass = §2§; -  Jii = {§0.001, 0.01, 0.01§}; -}; §//UpperArm§ +```{literalinclude} Snippets/lesson2/snip.NewModel.main-3.any +:language: AnyScriptDoc +:start-after: //# BEGIN SNIPPET 1 +:end-before: //# END SNIPPET 1 ``` Load the model again and notice the warnings you get. Amongst other messages: @@ -118,19 +92,15 @@ It therefore cannot evaluate the model's kinematics.** We will take care of this To make something visible in AnyBody, you have to add a drawing object which defines visibility: -```AnyScriptDoc -AnySeg UpperArm = { -  //r0 = {0, 0, 0}; -  //Axes0 = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}; -  Mass = 2; -  Jii = {0.001, 0.01, 0.01}; -  §AnyDrawSeg drw = {};§ -}; // UpperArm +```{literalinclude} Snippets/lesson2/snip.NewModel.main-4.any +:language: AnyScriptDoc +:start-after: //# BEGIN SNIPPET 1 +:end-before: //# END SNIPPET 1 ``` Reload the model, and look at the Model View (you might have to press -the {{ Zoom_button_image }} button to locate your segment) . The segment is displayed as an ellipsoid whose dimensions capture the -mass distribution represented by Jii. Changing any one component of Jii will alter the shape of the ellipse. +the {{ Zoom_button_image }} button to locate your segment). The segment is displayed as an ellipsoid whose dimensions capture the +mass distribution represented by `Jii`. Changing any one component of `Jii` will alter the shape of the ellipse. ## Adding point nodes to a segment @@ -142,38 +112,10 @@ nodes defined in most AMMR models.** For this model, copy and paste the following lines into your file: -```AnyScriptDoc -AnySeg UpperArm = { -  //r0 = {0, 0, 0}; -  //Axes0 = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}; -  Mass = 2; -  Jii = {0.001, 0.01, 0.01}; -  AnyDrawSeg drw = {}; -  §AnyRefNode ShoulderNode = { -    sRel = {-0.2,0,0}; -  }; -  AnyRefNode ElbowNode = { -    sRel = {0.2,0,0}; -  }; -  AnyRefNode DeltodeusA = { -    sRel = {-0.1,0,0.02}; -  }; -  AnyRefNode DeltodeusB = { -    sRel = {-0.1,0,-0.02}; -  }; -  AnyRefNode Brachialis = { -    sRel = {0.1,0,0.01}; -  }; -  AnyRefNode BicepsShort = { -    sRel = {-0.1,0,0.03}; -  }; -  AnyRefNode Brachioradialis = { -    sRel = {0.05,0,0.02}; -  }; -  AnyRefNode TricepsShort = { -    sRel = {-0.1,0,-0.01}; -  };§ -}; // UpperArm +```{literalinclude} Snippets/lesson2/snip.NewModel.main-5.any +:language: AnyScriptDoc +:start-after: //# BEGIN SNIPPET 1 +:end-before: //# END SNIPPET 1 ``` ```{image} _static/lesson2/image4.png @@ -186,32 +128,10 @@ yellow pins. You will now add a forearm segment to the mechanism by copy-pasting these lines into the "Segs" folder: -```AnyScriptDoc -    §AnySeg ForeArm = { -      Mass = 2.0; -      Jii = {0.001,0.01,0.01}; -      AnyRefNode ElbowNode = { -        sRel = {-0.2,0,0}; -      }; -      AnyRefNode HandNode = { -        sRel = {0.2,0,0}; -      }; -      AnyRefNode Brachialis = { -        sRel = {-0.1,0,0.02}; -      }; -      AnyRefNode Brachioradialis = { -        sRel = {0.0,0,0.02}; -      }; -      AnyRefNode Biceps = { -        sRel = {-0.15,0,0.01}; -      }; -      AnyRefNode Triceps = { -        sRel = {-0.25,0,-0.05}; -      }; -      AnyDrawSeg DrwSeg = {}; -   }; // ForeArm§ - -}; // Segs folder +```{literalinclude} Snippets/lesson2/snip.NewModel.main-6.any +:language: AnyScriptDoc +:start-after: //# BEGIN SNIPPET 1 +:end-before: //# END SNIPPET 1 ``` **When you reload the model, you may not see the forearm immediately @@ -223,24 +143,20 @@ r0 (translation w.r.t global frame at load-time) and Axes0 (rotation matrix w.r. **Remember that your simulation, will only use these load-time positions as an initial guess, on the way to enforcing specified motions and constraints (such as joints between segments). More on this in the next lesson.** -For now, let us first change r0 - the global position of the segment at load-time. +For now, let us first change `r0` - the global position of the segment at load-time. -```AnyScriptDoc -AnySeg UpperArm = { -  §r0 = {0, 0.3, 0};§ -  //Axes0 = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}; -  Mass = 2; -  Jii = {0.001, 0.01, 0.01}; -  AnyDrawSeg drw = {}; +```{literalinclude} Snippets/lesson2/snip.NewModel.main-7.any +:language: AnyScriptDoc +:start-after: //# BEGIN SNIPPET 1 +:end-before: //# END SNIPPET 1 ``` and -```AnyScriptDoc -AnySeg ForeArm = { -  §r0 = {0.3, 0, 0};§ -  Mass = 2.0; -  Jii = {0.001,0.01,0.01}; +```{literalinclude} Snippets/lesson2/snip.NewModel.main-7.any +:language: AnyScriptDoc +:start-after: //# BEGIN SNIPPET 2 +:end-before: //# END SNIPPET 2 ``` This will clearly separate the segments in your Model View: @@ -251,18 +167,18 @@ This will clearly separate the segments in your Model View: ## Rotation matrices in AnyBody To improve the visual impression of the arm segments at load time, we will set -the Axes0 property, which is really a rotation matrix. +the `Axes0` property, which is really a rotation matrix. -You UpperArm segment currently looks like this: +Your UpperArm segment currently looks like this: -```AnyScriptDoc -AnySeg UpperArm = { -  r0 = {0, 0.3, 0}; -  §Axes0 = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};§ +```{literalinclude} Snippets/lesson2/snip.NewModel.main-8.any +:language: AnyScriptDoc +:start-after: //# BEGIN SNIPPET 1 +:end-before: //# END SNIPPET 1 ``` :::{note} -Note that matrices in AnyBody are arranged row-wise, so {1, 0, 0} in Axes0 is the +Note that matrices in AnyBody are arranged row-wise, so {1, 0, 0} in `Axes0` is the first row of a 3x3 matrix. ::: @@ -272,10 +188,10 @@ the exact expressions for all 9 components of the 3x3 Axes0 matrix. **An easier solution is to use a standard function named "RotMat", which returns a rotation matrix corresponding to a given axis and rotation angle. Therefore, we can specify:** -```AnyScriptDoc -AnySeg UpperArm = { -  r0 = {0, 0.3, 0}; -  §Axes0 = RotMat(-90*pi/180, z);§ +```{literalinclude} Snippets/lesson2/snip.NewModel.main-9.any +:language: AnyScriptDoc +:start-after: //# BEGIN SNIPPET 1 +:end-before: //# END SNIPPET 1 ``` When you reload again, you will see that the UpperArm rotated diff --git a/A_Getting_started_anyscript/lesson3.md b/A_Getting_started_anyscript/lesson3.md index 543b0f17..cc14006c 100644 --- a/A_Getting_started_anyscript/lesson3.md +++ b/A_Getting_started_anyscript/lesson3.md @@ -26,6 +26,7 @@ You can think of joints in two different ways: two independent segments in AnyBody, they will have 2 x 6 = 12 degrees of freedom in total. + Joints in AnyBody take away (or constrain) some of these degrees of freedom with the different joint types (e.g. revolute, spherical, prismatic etc.) differing only in the number and type of degrees of freedom they constrain. @@ -34,13 +35,10 @@ differing only in the number and type of degrees of freedom they constrain. Every model needs a global reference frame to serve as a ground reference point for measuring positions & orientations from. It is already defined in the model template that you originally used, and is shown below: -```AnyScriptDoc -AnyFixedRefFrame GlobalRef = { - -   // Todo: Add points for grounding -   // of the model here - -}; // Global reference frame +```{literalinclude} Snippets/lesson3/snip.NewModel.main-1.any +:language: AnyScriptDoc +:start-after: //# BEGIN SNIPPET 1 +:end-before: //# END SNIPPET 1 ``` **Just like with segments, you can add point nodes to the global reference frame for attaching joints and muscles. There is however no @@ -49,26 +47,10 @@ concept of mass associated with this frame.** You will now add some nodes to the global frame by copy-pasting the following lines into your model (Alternatively use the class inserter and then copy-paste the class properties alone): -```AnyScriptDoc - AnyFixedRefFrame GlobalRef = { -  §AnyDrawRefFrame DrwGlobalRef = {}; - -   AnyRefNode Shoulder = { -     sRel = {0,0,0}; -   }; -   AnyRefNode DeltodeusA = { -     sRel = {0.05,0,0}; -   }; -   AnyRefNode DeltodeusB = { -     sRel = {-0.05,0,0}; -   }; -   AnyRefNode BicepsLong = { -     sRel = {0.1,0,0}; -   }; -   AnyRefNode TricepsLong = { -     sRel = {-0.1,0,0}; -   };§ -}; // Global reference frame +```{literalinclude} Snippets/lesson3/snip.NewModel.main-2.any +:language: AnyScriptDoc +:start-after: //# BEGIN SNIPPET 1 +:end-before: //# END SNIPPET 1 ``` The first line, "`AnyDrawRefFrame` ..." merely displays the global @@ -78,11 +60,10 @@ system. Let us scale down the display size and change its color to distinguish it from the yellow segments: -```AnyScriptDoc -AnyDrawRefFrame DrwGlobalRef = { -  §ScaleXYZ = {0.1, 0.1, 0.1}; -  RGB = {0,1,0};§ -}; +```{literalinclude} Snippets/lesson3/snip.NewModel.main-3.any +:language: AnyScriptDoc +:start-after: //# BEGIN SNIPPET 1 +:end-before: //# END SNIPPET 1 ``` ## Creating a revolute joint @@ -91,23 +72,10 @@ We can now connect the upper arm to the global reference frame through a shoulde For this planar 2-D model, where we simplify the shoulder as a simple revolute joint (also known as a hinge joint). We create a new `AnyFolder` object, to contain all joints in the model: -```AnyScriptDoc -    }; // LowerArm -  }; // Segs folder - -§AnyFolder Jnts = { - -    //--------------------------------- -    AnyRevoluteJoint Shoulder = { - -      AnyRefNode &GroundNode = ..GlobalRef.Shoulder; -      AnyRefNode &UpperArmNode = ..Segs.UpperArm.ShoulderNode; - - Axis = z; - -   }; // Shoulder joint - -}; // Jnts folder§ +```{literalinclude} Snippets/lesson3/snip.NewModel.main-4.any +:language: AnyScriptDoc +:start-after: //# BEGIN SNIPPET 1 +:end-before: //# END SNIPPET 1 ``` The `AnyRevoluteJoint` class creates a revolute joint object connecting two nodes on different segments. @@ -119,14 +87,15 @@ The `AnyRevoluteJoint` class creates a revolute joint object connecting two node The `AnyRevoluteJoint` object named "Shoulder", needs to know which nodes on each segment to connect. For this purpose, we have the lines: -```AnyScriptDoc -AnyRefNode &GroundNode = ..GlobalRef.Shoulder; -AnyRefNode &UpperArmNode = ..Segs.UpperArm.ShoulderNode; +```{literalinclude} Snippets/lesson3/snip.NewModel.main-5.any +:language: AnyScriptDoc +:start-after: //# BEGIN SNIPPET 1 +:end-before: //# END SNIPPET 1 ``` -**They refer to two nodes that we created earlier, located on the "GlobalRef" and "UpperArm" +**They refer to two nodes that we created earlier, located on the `GlobalRef` and `UpperArm` segments. Notice the two dots in front of the names. They signify that -the "GlobalRef" and "Segs" folders are defined two levels outside the folder +the `GlobalRef` and `Segs` folders are defined two levels outside the folder we are writing into, in the model tree.** If you neglected the two dots, then AnyBody would search for the two objects in the "Shoulder" folder and fail @@ -152,8 +121,10 @@ sure that the definition is correct. We then have: -```AnyScriptDoc -Axis = z; +```{literalinclude} Snippets/lesson3/snip.NewModel.main-6.any +:language: AnyScriptDoc +:start-after: //# BEGIN SNIPPET 1 +:end-before: //# END SNIPPET 1 ``` **Every node on a rigid body segment has its own reference frame which moves along with the segment. @@ -186,21 +157,10 @@ We will next add a revolute elbow joint. While the definition is similar to the you will learn to use a handy tool to define the references. Copy-paste the skeleton of the elbow joint as follows: -```AnyScriptDoc -AnyFolder Jnts = { -       //--------------------------------- - AnyRevoluteJoint Shoulder = { - Axis = z; - AnyRefNode &GroundNode = ..GlobalRef.Shoulder; - AnyRefNode &UpperArmNode = ..Segs.UpperArm.ShoulderNode; - }; // Shoulder joint - - §AnyRevoluteJoint Elbow = { - Axis = z; - AnyRefNode &UpperArmNode = ; - AnyRefNode &ForeArmNode = ; - }; // Elbow joint§ -}; // Jnts folder +```{literalinclude} Snippets/lesson3/snip.NewModel.main-7.any +:language: AnyScriptDoc +:start-after: //# BEGIN SNIPPET 1 +:end-before: //# END SNIPPET 1 ``` The node references within "Elbow" are not pointing at @@ -224,12 +184,10 @@ into the Elbow joint definition where you placed the cursor.** Repeat the process to expand the ForeArm segment and insert its ElbowNode in the line below to obtain this: -```AnyScriptDoc -AnyRevoluteJoint Elbow = { -  Axis = z; -  AnyRefNode &UpperArmNode = §Main.ArmModel.Segs.UpperArm.ElbowNode§; -  AnyRefNode &ForeArmNode = §Main.ArmModel.Segs.ForeArm.ElbowNode§; -}; // Elbow joint +```{literalinclude} Snippets/lesson3/snip.NewModel.main-8.any +:language: AnyScriptDoc +:start-after: //# BEGIN SNIPPET 1 +:end-before: //# END SNIPPET 1 ``` It seems like everything is connected now, but we still get this diff --git a/conf.py b/conf.py index 73dc4c0f..0f0c6ae9 100644 --- a/conf.py +++ b/conf.py @@ -120,6 +120,7 @@ def tagged_commit(): "galleries/*", ".pixi", "EXLCLUDED_*", + ".pytest_cache", ] diff --git a/conftest.py b/conftest.py new file mode 100644 index 00000000..64f7839f --- /dev/null +++ b/conftest.py @@ -0,0 +1,20 @@ +from anypytools.pytest_plugin import AnyTestFile +import re + + +# import debugpy +# debugpy.listen(5679) +# print("Waiting for debugger attach") +# debugpy.wait_for_client() + +MAIN_REGEX = re.compile(r"Main\s*=\s*{") + +def pytest_collect_file(file_path, parent): + """ Add hook to collect Snippets files for testing""" + if file_path.suffix == ".any": + if "Snippet" in file_path.parts[-3]: + return AnyTestFile.from_parent(parent, path=file_path) + # if "Downloads" in file_path.parts[-2]: + # content = file_path.read_text() + # if MAIN_REGEX.search(content): + # return AnyTestFile.from_parent(parent, path=file_path) \ No newline at end of file diff --git a/pixi.lock b/pixi.lock index 808e7ae5..e656bb42 100644 --- a/pixi.lock +++ b/pixi.lock @@ -3,6 +3,7 @@ environments: default: channels: - url: https://conda.anaconda.org/conda-forge/ + - url: https://conda.anaconda.org/anybody/ packages: linux-64: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 @@ -40,8 +41,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.53.1-py311h61187de_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.10-h36c2ea0_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/linux-64/glib-2.80.3-h8a4344b_1.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.80.3-h73ef956_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glib-2.80.3-h315aac3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.80.3-h8fdd7da_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h59595ed_1003.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-9.0.0-hda332d3_1.conda @@ -51,7 +52,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.2.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.4.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-8.18.1-pyh707e725_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda @@ -70,7 +72,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.1.0-h77fa898_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.1.0-h69a702a_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.1.0-hc5f4f2c_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.80.3-h8a4344b_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.80.3-h315aac3_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.1.0-h77fa898_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda @@ -92,24 +94,25 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/make-4.3-hd18ef5c_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py311h459d7ec_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.9.1-py311h74b4f7c_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.9.2-py311h74b4f7c_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/myst-parser-4.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h59595ed_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.0.1-py311hed25524_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.1.0-py311hed25524_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.1-h4bc722e_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.54.0-h4c5309f_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-h0f59acf_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-10.4.0-py311h82a398c_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.43.2-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.47-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 @@ -122,15 +125,16 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyphen-0.16.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.9-hb806964_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.11-4_cp311.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.11-5_cp311.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py311h61187de_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-72.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-72.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda @@ -175,7 +179,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xproto-7.0.31-h7f98852_1007.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-h4ab18f5_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py311h5cd10c7_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda @@ -213,8 +217,8 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/fonttools-4.53.1-py311he736701_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.12.1-hdaf720e_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/fribidi-1.0.10-h8d14728_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/glib-2.80.3-h7025463_1.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/glib-tools-2.80.3-h4394cf3_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/glib-2.80.3-h7025463_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/glib-tools-2.80.3-h4394cf3_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/graphite2-1.3.13-h63175ca_1003.conda - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-9.0.0-h2bedf89_1.conda @@ -224,8 +228,9 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/icu-75.1-he0c23c2_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.2.0-pyha770c72_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/intel-openmp-2024.2.0-h57928b3_980.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.4.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/intel-openmp-2024.2.1-h57928b3_1083.conda - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-8.18.1-pyh7428d3b_3.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda @@ -240,11 +245,11 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.21-h2466b09_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.2-h63175ca_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.80.3-h7025463_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.80.3-h7025463_2.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.11.1-default_h8125262_1000.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.17-hcfcfb64_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libintl-0.22.5-h5728263_2.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/libintl-devel-0.22.5-h5728263_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libintl-0.22.5-h5728263_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libintl-devel-0.22.5-h5728263_3.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.0.0-hcfcfb64_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.9.0-23_win64_mkl.conda - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.43-h19919ed_0.conda @@ -265,7 +270,7 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/make-4.3-h3d2af85_1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-2.1.5-py311ha68e1ae_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.9.1-py311h8f1b1e4_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.9.2-py311h8f1b1e4_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda @@ -273,16 +278,17 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/myst-parser-4.0.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.0.1-py311h35ffc71_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.1.0-py311h35ffc71_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.2-h3d672ee_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.1-h2466b09_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pango-1.54.0-hbb871f6_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pango-1.54.0-hbb871f6_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.44-h3d7b363_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.44-h3d7b363_2.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/pillow-10.4.0-py311h5592be9_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pixman-0.43.4-h63175ca_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.47-pyha770c72_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-hcd874cb_1001.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/pthreads-win32-2.9.1-hfa6e2cd_3.tar.bz2 @@ -295,14 +301,15 @@ environments: - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pyphen-0.16.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh0701188_6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.2-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.11.9-h631f459_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.11-4_cp311.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.11-5_cp311.conda - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.2-py311he736701_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/qhull-2020.2-hc790b64_5.conda - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-72.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-72.2.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda @@ -344,7 +351,376 @@ environments: - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.3-hcd874cb_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h8ffe710_2.tar.bz2 - - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.19.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.1-h2466b09_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py311h53056dc_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda + test: + channels: + - url: https://conda.anaconda.org/conda-forge/ + - url: https://conda.anaconda.org/anybody/ + packages: + linux-64: + - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_gnu.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py311hb755f60_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2024.7.4-hbcca054_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.0-hebfffa5_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.7.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/cffi-1.17.0-py311ha8e6434_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.2.1-py311h9547e67_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cssselect2-0.2.1-pyh9f0ad1d_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/expat-2.6.2-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.53.1-py311h61187de_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/fribidi-1.0.10-h36c2ea0_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/glib-2.80.3-h315aac3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.80.3-h8fdd7da_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h59595ed_1003.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-9.0.0-hda332d3_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/html5lib-1.1-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-75.1-he02047a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.4.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-8.18.1-pyh707e725_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py311h9547e67_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-hf3520f5_7.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-23_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.1.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-23_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.21-h4bc722e_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.6.2-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-14.1.0-h77fa898_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-14.1.0-h69a702a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-14.1.0-hc5f4f2c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.80.3-h315aac3_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libgomp-14.1.0-h77fa898_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-23_linux64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.27-pthreads_hac2b453_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.43-h2797004_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsass-0.22.0-py311hb755f60_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.46.0-hde9e2c9_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-14.1.0-hc0a3c3a_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-h46a8edc_4.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.4.0-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.16-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libxcrypt-4.4.36-hd590300_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.1-h4ab18f5_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/livereload-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/make-4.3-hd18ef5c_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.5-py311h459d7ec_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.9.2-py311h74b4f7c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/myst-parser-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.1.0-py311hed25524_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.2-h488ebb8_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.3.1-h4bc722e_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pango-1.54.0-h4c5309f_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pexpect-4.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/pillow-10.4.0-py311h82a398c_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.43.2-h59595ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.47-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/ptyprocess-0.7.0-pyhd3deb0d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.15.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydyf-0.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments_anyscript-1.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyphen-0.16.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.9-hb806964_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.11-5_cp311.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.2-py311h61187de_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/qhull-2020.2-h434a139_5.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-72.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-7.3.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-autobuild-2021.3.14-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-book-theme-1.1.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.6.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-simplepdf-1.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-togglebutton-0.3.2-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-youtube-1.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxext-opengraph-0.9.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/tornado-6.4.1-py311h331c9d8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/weasyprint-62.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-h7f98852_1002.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.1-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.4-h7391055_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.9-hb711507_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxdmcp-1.1.3-h7f98852_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.4-h0b41bf4_2.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hd590300_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-renderproto-0.11.1-h7f98852_1002.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xextproto-7.3.0-h0b41bf4_1003.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-xproto-7.0.31-h7f98852_1007.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.1-h4ab18f5_1.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstandard-0.23.0-py311h5cd10c7_0.conda + - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.6-ha6fb4c9_0.conda + win-64: + - conda: https://conda.anaconda.org/conda-forge/noarch/accessible-pygments-0.0.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.16-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/anybody/win-64/anybodycon-8.1.0beta1.docmarker-h9490d1a_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/anypytools-1.12.2-py311h1ea47a8_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/asttokens-2.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/babel-2.14.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/beautifulsoup4-4.12.3-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-1.1.0-hcfcfb64_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-bin-1.1.0-hcfcfb64_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.1.0-py311h12c1d0e_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/bzip2-1.0.8-h2466b09_7.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2024.7.4-h56e8100_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/cairo-1.18.0-h32b962e_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/certifi-2024.7.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/cffi-1.17.0-py311he736701_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/contourpy-1.2.1-py311h005e61a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/cssselect2-0.2.1-pyh9f0ad1d_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.5-py311hda3d55a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/decorator-5.1.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/docutils-0.21.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/executing-2.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/expat-2.6.2-h63175ca_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fontconfig-2.14.2-hbde0cde_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/fonttools-4.53.1-py311he736701_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/freetype-2.12.1-hdaf720e_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/fribidi-1.0.10-h8d14728_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/glib-2.80.3-h7025463_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/glib-tools-2.80.3-h4394cf3_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/graphite2-1.3.13-h63175ca_1003.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/h2-4.1.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/h5py-3.11.0-nompi_py311h67016bb_102.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/harfbuzz-9.0.0-h2bedf89_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/hdf5-1.14.3-nompi_h2b43c12_105.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/hpack-4.0.0-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/html5lib-1.1-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/hyperframe-6.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/icu-75.1-he0c23c2_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/idna-3.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.4.0-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ipython-8.18.1-pyh7428d3b_3.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jedi-0.19.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.4.5-py311h005e61a_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/krb5-1.21.3-hdf4eb48_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lcms2-2.16-h67d730c_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libaec-1.1.3-h63175ca_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libblas-3.9.0-23_win64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.1.0-hcfcfb64_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlidec-1.1.0-hcfcfb64_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libbrotlienc-1.1.0-hcfcfb64_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.9.0-23_win64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.9.1-h18fefc2_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.21-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libexpat-2.6.2-h63175ca_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libflang-5.0.0-h6538335_20180525.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/libglib-2.80.3-h7025463_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libiconv-1.17-hcfcfb64_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libintl-0.22.5-h5728263_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libintl-devel-0.22.5-h5728263_3.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.0.0-hcfcfb64_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.9.0-23_win64_openblas.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libopenblas-0.3.27-pthreads_hf0a32cb_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libpng-1.6.43-h19919ed_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsass-0.22.0-py311h12c1d0e_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.46.0-h2466b09_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.0-h7dfc565_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libtiff-4.6.0-hb151862_4.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libwebp-base-1.4.0-hcfcfb64_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libxcb-1.16-hcd874cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/libzlib-1.3.1-h2466b09_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/linkify-it-py-2.0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/livereload-2.7.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/llvm-meta-5.0.0-0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libgfortran-5.3.0-6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-core-5.3.0-7.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/make-4.3-h3d2af85_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/markdown-it-py-3.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/markupsafe-2.1.5-py311ha68e1ae_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.9.2-py311h8f1b1e4_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/matplotlib-inline-0.1.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdit-py-plugins-0.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/mdurl-0.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/myst-parser-4.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/numpy-2.1.0-py311h35ffc71_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.2-h3d672ee_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/openmp-5.0.0-vc14_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/openssl-3.3.1-h2466b09_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-24.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pango-1.54.0-hbb871f6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/parso-0.8.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.44-h3d7b363_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pickleshare-0.7.5-py_1003.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/pillow-10.4.0-py311h5592be9_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pixman-0.43.4-h63175ca_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/prompt-toolkit-3.0.47-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pthread-stubs-0.4-hcd874cb_1001.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pure_eval-0.2.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pycparser-2.22-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydata-sphinx-theme-0.15.4-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pydoe-0.3.8-py_1.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pydyf-0.11.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments-2.18.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pygments_anyscript-1.4.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pyphen-0.16.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh0701188_6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python-3.11.9-h631f459_0_cpython.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.11-5_cp311.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pytz-2024.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pywin32-306-py311h12c1d0e_2.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/pyyaml-6.0.2-py311he736701_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/qhull-2020.2-hc790b64_5.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/requests-2.32.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/scipy-1.14.0-py311hd4686c6_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-72.2.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/soupsieve-2.5-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-7.3.7-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-autobuild-2021.3.14-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-book-theme-1.1.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-design-0.6.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-simplepdf-1.6.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinx-togglebutton-0.3.2-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.1.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-2.0.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.10-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-youtube-1.4.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/sphinxext-opengraph-0.9.1-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.2-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tinycss2-1.3.0-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/tk-8.6.13-h5226925_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/tornado-6.4.1-py311he736701_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.5-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/traitlets-5.14.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.12.2-pyha770c72_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2024a-h0c530f3_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/uc-micro-py-1.0.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/urllib3-2.2.2-pyhd8ed1ab_1.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc-14.3-h8a93ad2_20.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vc14_runtime-14.40.33810-ha82c5b3_20.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/vs2015_runtime-14.40.33810-h3bf8584_20.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wcwidth-0.2.13-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/weasyprint-62.3-pyhd8ed1ab_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/webencodings-0.5.1-pyhd8ed1ab_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyhd8ed1ab_6.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.11-hcd874cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.3-hcd874cb_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/xz-5.2.6-h8d14728_0.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/win-64/yaml-0.2.5-h8ffe710_2.tar.bz2 + - conda: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.0-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zlib-1.3.1-h2466b09_1.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstandard-0.23.0-py311h53056dc_0.conda - conda: https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.6-h0ea2cb4_0.conda @@ -409,6 +785,44 @@ packages: license_family: BSD size: 18365 timestamp: 1704848898483 +- kind: conda + name: anybodycon + version: 8.1.0beta1.docmarker + build: h9490d1a_0 + subdir: win-64 + url: https://conda.anaconda.org/anybody/win-64/anybodycon-8.1.0beta1.docmarker-h9490d1a_0.conda + sha256: 3679488a330b11199b8815bb6cb9f60e1b49bb555ef3a0f173b17bee6ff1f57f + md5: 351dcf291a59a5ff70fa38e99f508ff6 + depends: + - vc14_runtime + - python >=3.11,<3.13 + - nomkl + arch: x86_64 + platform: win + size: 166489850 + timestamp: 1724235785571 +- kind: conda + name: anypytools + version: 1.12.2 + build: py311h1ea47a8_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/anypytools-1.12.2-py311h1ea47a8_0.conda + sha256: e650792402b694e25b6ba667f08c45238b9fd990bab4f0a32cf27558ba0f5eb0 + md5: a8f6998cf9cf269d8310d060be27c093 + depends: + - h5py >=2.5 + - pydoe + - pygments_anyscript + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + - pywin32 + - scipy >=0.15 + - setuptools + - tqdm + license: MIT + license_family: MIT + size: 3356710 + timestamp: 1719973651042 - kind: conda name: asttokens version: 2.4.1 @@ -628,6 +1042,38 @@ packages: license: ISC size: 154853 timestamp: 1720077432978 +- kind: conda + name: cached-property + version: 1.5.2 + build: hd8ed1ab_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/cached-property-1.5.2-hd8ed1ab_1.tar.bz2 + sha256: 561e6660f26c35d137ee150187d89767c988413c978e1b712d53f27ddf70ea17 + md5: 9b347a7ec10940d3f7941ff6c460b551 + depends: + - cached_property >=1.5.2,<1.5.3.0a0 + license: BSD-3-Clause + license_family: BSD + size: 4134 + timestamp: 1615209571450 +- kind: conda + name: cached_property + version: 1.5.2 + build: pyha770c72_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/cached_property-1.5.2-pyha770c72_1.tar.bz2 + sha256: 6dbf7a5070cc43d90a1e4c2ec0c541c69d8e30a0e25f50ce9f6e4a432e42c5d7 + md5: 576d629e47797577ab0f1b351297ef4a + depends: + - python >=3.6 + license: BSD-3-Clause + license_family: BSD + size: 11065 + timestamp: 1615209567874 - kind: conda name: cairo version: 1.18.0 @@ -714,6 +1160,7 @@ packages: - python >=3.11,<3.12.0a0 - python_abi 3.11.* *_cp311 license: MIT + license_family: MIT size: 301038 timestamp: 1723018486310 - kind: conda @@ -732,6 +1179,7 @@ packages: - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: MIT + license_family: MIT size: 296665 timestamp: 1723018946784 - kind: conda @@ -833,6 +1281,24 @@ packages: license_family: BSD size: 13458 timestamp: 1696677888423 +- kind: conda + name: debugpy + version: 1.8.5 + build: py311hda3d55a_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/debugpy-1.8.5-py311hda3d55a_0.conda + sha256: 8bc117279ae16b54d2c20bc4b3a143f7e5e78bec47efc6b1113db90ed0928ebc + md5: 46e12a3c90c3ef378858771901c5fca8 + depends: + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + size: 3249864 + timestamp: 1722924149906 - kind: conda name: decorator version: 5.1.1 @@ -1147,76 +1613,80 @@ packages: - kind: conda name: glib version: 2.80.3 - build: h7025463_1 - build_number: 1 + build: h315aac3_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/glib-2.80.3-h315aac3_2.conda + sha256: 20e138ea8d5e59cb62f06b2ddadbfaf155125b64ea2d3a959e119ffc0be245f1 + md5: 00e0da7e4fceb5449f3ddd2bf6b2c351 + depends: + - __glibc >=2.17,<3.0.a0 + - glib-tools 2.80.3 h8fdd7da_2 + - libffi >=3.4,<4.0a0 + - libgcc-ng >=12 + - libglib 2.80.3 h315aac3_2 + - packaging + - python * + license: LGPL-2.1-or-later + size: 598736 + timestamp: 1723208884591 +- kind: conda + name: glib + version: 2.80.3 + build: h7025463_2 + build_number: 2 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/glib-2.80.3-h7025463_1.conda - sha256: 892d784d7a8c7444004109734dcf71d11ded0d1dc06d3dfc14227576993239a5 - md5: 13ce8fd2eb07f41c7108f7ad7bb0062e + url: https://conda.anaconda.org/conda-forge/win-64/glib-2.80.3-h7025463_2.conda + sha256: bcc56ad2ebbf2aeec0cfd090b647dd9aa03d4ccb8373cb9e20e14fd7b544a868 + md5: 4ebfa8926666cec3e35c5d36cadf1300 depends: - - glib-tools 2.80.3 h4394cf3_1 + - glib-tools 2.80.3 h4394cf3_2 - libffi >=3.4,<4.0a0 - - libglib 2.80.3 h7025463_1 + - libglib 2.80.3 h7025463_2 - libintl >=0.22.5,<1.0a0 - libintl-devel + - packaging - python * - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: LGPL-2.1-or-later - size: 572358 - timestamp: 1720335131283 -- kind: conda - name: glib - version: 2.80.3 - build: h8a4344b_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/glib-2.80.3-h8a4344b_1.conda - sha256: 51db16c42f0f07aa9d4f922a629d8f68fe3b2590917b8282b7e8ab5ced45c0f6 - md5: a3acc4920c9ca19cb6b295028d606477 - depends: - - glib-tools 2.80.3 h73ef956_1 - - libffi >=3.4,<4.0a0 - - libgcc-ng >=12 - - libglib 2.80.3 h8a4344b_1 - - python * - license: LGPL-2.1-or-later - size: 599204 - timestamp: 1720334967965 + size: 572862 + timestamp: 1723209506632 - kind: conda name: glib-tools version: 2.80.3 - build: h4394cf3_1 - build_number: 1 + build: h4394cf3_2 + build_number: 2 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/glib-tools-2.80.3-h4394cf3_1.conda - sha256: 0bc71e397b49c622a224b4ecdef338ec215d037d0e385a5870afd5a96197399d - md5: 12d270a5f8b8ae0a9536c1960f21e0aa + url: https://conda.anaconda.org/conda-forge/win-64/glib-tools-2.80.3-h4394cf3_2.conda + sha256: 286e485ad6236820e801aa0dc8d7bd7136c90117a56e253174abcd964d886344 + md5: 74d89cea4821e638dd76a533019f3c35 depends: - - libglib 2.80.3 h7025463_1 + - libglib 2.80.3 h7025463_2 - libintl >=0.22.5,<1.0a0 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: LGPL-2.1-or-later - size: 95020 - timestamp: 1720335074003 + size: 94871 + timestamp: 1723209457216 - kind: conda name: glib-tools version: 2.80.3 - build: h73ef956_1 - build_number: 1 + build: h8fdd7da_2 + build_number: 2 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.80.3-h73ef956_1.conda - sha256: 1cbaa71af8ed506c158e345e3f951b4f36506f96e957b9486dea5eaca86252b2 - md5: 99701cdc9a25a333d15265d1d243b2dc + url: https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.80.3-h8fdd7da_2.conda + sha256: 073fd2b01bf7ee4197016a3507fc3dae75628277f2a21f295cdccbd9c1e3e9de + md5: 9958a1f8faba35260e6b68e3a7bc88d6 depends: + - __glibc >=2.17,<3.0.a0 - libgcc-ng >=12 - - libglib 2.80.3 h8a4344b_1 + - libglib 2.80.3 h315aac3_2 license: LGPL-2.1-or-later - size: 113361 - timestamp: 1720334924695 + size: 114261 + timestamp: 1723208849301 - kind: conda name: graphite2 version: 1.3.13 @@ -1267,6 +1737,28 @@ packages: license_family: MIT size: 46754 timestamp: 1634280590080 +- kind: conda + name: h5py + version: 3.11.0 + build: nompi_py311h67016bb_102 + build_number: 102 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/h5py-3.11.0-nompi_py311h67016bb_102.conda + sha256: e331d7c693b11040d803d519533fd325963260beb018a027f745318010134bcc + md5: 6939e0903d4d14bce968077ea98227a3 + depends: + - cached-property + - hdf5 >=1.14.3,<1.14.4.0a0 + - numpy >=1.19,<3 + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-3-Clause + license_family: BSD + size: 966438 + timestamp: 1717665542410 - kind: conda name: harfbuzz version: 9.0.0 @@ -1311,6 +1803,27 @@ packages: license_family: MIT size: 1603653 timestamp: 1721186240105 +- kind: conda + name: hdf5 + version: 1.14.3 + build: nompi_h2b43c12_105 + build_number: 105 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/hdf5-1.14.3-nompi_h2b43c12_105.conda + sha256: 56c803607a64b5117a8b4bcfdde722e4fa40970ddc4c61224b0981cbb70fb005 + md5: 5788de34381caf624b78c4981618dc0a + depends: + - libaec >=1.1.3,<2.0a0 + - libcurl >=8.8.0,<9.0a0 + - libzlib >=1.2.13,<2.0a0 + - openssl >=3.3.1,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-3-Clause + license_family: BSD + size: 2039111 + timestamp: 1717587493910 - kind: conda name: hpack version: 4.0.0 @@ -1422,33 +1935,48 @@ packages: timestamp: 1656939625410 - kind: conda name: importlib-metadata - version: 8.2.0 + version: 8.4.0 build: pyha770c72_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.2.0-pyha770c72_0.conda - sha256: 15dd2beba1c6f780fec6c5351bbce815d27a29561f422fe830133c995ef90b8a - md5: c261d14fc7f49cdd403868998a18c318 + url: https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-8.4.0-pyha770c72_0.conda + sha256: 02c95f6f62675012e0b2ab945eba6fc14fa6a693c17bced3554db7b62d586f0c + md5: 6e3dbc422d3749ad72659243d6ac8b2b depends: - python >=3.8 - zipp >=0.5 license: Apache-2.0 license_family: APACHE - size: 28110 - timestamp: 1721856614564 + size: 28338 + timestamp: 1724187329246 +- kind: conda + name: iniconfig + version: 2.0.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda + sha256: 38740c939b668b36a50ef455b077e8015b8c9cf89860d421b3fff86048f49666 + md5: f800d2da156d08e289b14e87e43c1ae5 + depends: + - python >=3.7 + license: MIT + license_family: MIT + size: 11101 + timestamp: 1673103208955 - kind: conda name: intel-openmp - version: 2024.2.0 - build: h57928b3_980 - build_number: 980 + version: 2024.2.1 + build: h57928b3_1083 + build_number: 1083 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/intel-openmp-2024.2.0-h57928b3_980.conda - sha256: e3ddfb67e0a922868e68f83d0b56755ff1c280ffa959a0c5ee6a922aaf7022b0 - md5: 9c28c39e64871a0adef7d1195bd58655 + url: https://conda.anaconda.org/conda-forge/win-64/intel-openmp-2024.2.1-h57928b3_1083.conda + sha256: 0fd2b0b84c854029041b0ede8f4c2369242ee92acc0092f8407b1fe9238a8209 + md5: 2d89243bfb53652c182a7c73182cce4f license: LicenseRef-IntelSimplifiedSoftwareOct2022 license_family: Proprietary - size: 1860328 - timestamp: 1721088141110 + size: 1852356 + timestamp: 1723739573141 - kind: conda name: ipython version: 8.18.1 @@ -1574,6 +2102,23 @@ packages: license_family: BSD size: 73273 timestamp: 1695380140676 +- kind: conda + name: krb5 + version: 1.21.3 + build: hdf4eb48_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/krb5-1.21.3-hdf4eb48_0.conda + sha256: 18e8b3430d7d232dad132f574268f56b3eb1a19431d6d5de8c53c29e6c18fa81 + md5: 31aec030344e962fbd7dbbbbd68e60a9 + depends: + - openssl >=3.3.1,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: MIT + license_family: MIT + size: 712034 + timestamp: 1719463874284 - kind: conda name: lcms2 version: '2.16' @@ -1653,6 +2198,22 @@ packages: license_family: Apache size: 194365 timestamp: 1657977692274 +- kind: conda + name: libaec + version: 1.1.3 + build: h63175ca_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libaec-1.1.3-h63175ca_0.conda + sha256: f5c293d3cfc00f71dfdb64bd65ab53625565f8778fc2d5790575bef238976ebf + md5: 8723000f6ffdbdaef16025f0a01b64c5 + depends: + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-2-Clause + license_family: BSD + size: 32567 + timestamp: 1711021603471 - kind: conda name: libblas version: 3.9.0 @@ -1694,6 +2255,28 @@ packages: license_family: BSD size: 5192100 timestamp: 1721689573083 +- kind: conda + name: libblas + version: 3.9.0 + build: 23_win64_openblas + build_number: 23 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libblas-3.9.0-23_win64_openblas.conda + sha256: f06339ecdce886021e13c71dd69ae3981c3d120b14abeb6ddc4b5658fb4b188f + md5: 726ff0d87228ca49113f70032db8ea74 + depends: + - libopenblas 0.3.27 pthreads_hf0a32cb_1 + constrains: + - libcblas 3.9.0 23_win64_openblas + - blas * openblas + - liblapacke 3.9.0 23_win64_openblas + - liblapack 3.9.0 23_win64_openblas + track_features: + - blas_openblas + license: BSD-3-Clause + license_family: BSD + size: 3976094 + timestamp: 1721689728129 - kind: conda name: libbrotlicommon version: 1.1.0 @@ -1832,6 +2415,46 @@ packages: license_family: BSD size: 5191981 timestamp: 1721689628480 +- kind: conda + name: libcblas + version: 3.9.0 + build: 23_win64_openblas + build_number: 23 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libcblas-3.9.0-23_win64_openblas.conda + sha256: 3281f4ccb05db11ab29305fee5d5d4dafc354c0a364721e41a03f21dac3b5ffc + md5: 06543fc90ce9572b8cf8d714e0d23b0e + depends: + - libblas 3.9.0 23_win64_openblas + constrains: + - liblapack 3.9.0 23_win64_openblas + - liblapacke 3.9.0 23_win64_openblas + - blas * openblas + track_features: + - blas_openblas + license: BSD-3-Clause + license_family: BSD + size: 3976316 + timestamp: 1721689785919 +- kind: conda + name: libcurl + version: 8.9.1 + build: h18fefc2_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libcurl-8.9.1-h18fefc2_0.conda + sha256: 024be133aed5f100c0b222761e747cc27a2bdf94af51947ad5f70e88cf824988 + md5: 099a1016d23baa4f41148a985351a7a8 + depends: + - krb5 >=1.21.3,<1.22.0a0 + - libssh2 >=1.11.0,<2.0a0 + - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: curl + license_family: MIT + size: 339298 + timestamp: 1722440239161 - kind: conda name: libdeflate version: '1.21' @@ -1924,6 +2547,25 @@ packages: license_family: MIT size: 42063 timestamp: 1636489106777 +- kind: conda + name: libflang + version: 5.0.0 + build: h6538335_20180525 + build_number: 20180525 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libflang-5.0.0-h6538335_20180525.tar.bz2 + sha256: 0b893b511190332320f4a3e3d6424fbd350271ffbca34eb25b5cd8bc451f1a05 + md5: 9f473a344e18668e99a93f7e21a54b69 + depends: + - openmp 5.0.0 + - vc >=14,<15.0a0 + arch: x86_64 + platform: win + track_features: + - flang + license: Apache 2.0 + size: 531143 + timestamp: 1527899216421 - kind: conda name: libgcc-ng version: 14.1.0 @@ -1974,46 +2616,47 @@ packages: - kind: conda name: libglib version: 2.80.3 - build: h7025463_1 - build_number: 1 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libglib-2.80.3-h7025463_1.conda - sha256: cae4f5ab6c64512aa6ae9f5c808f9b0aaea19496ddeab3720c118ad0809f7733 - md5: 53c80e0ed9a3905ca7047c03756a5caa + build: h315aac3_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.80.3-h315aac3_2.conda + sha256: 7470e664b780b91708bed356cc634874dfc3d6f17cbf884a1d6f5d6d59c09f91 + md5: b0143a3e98136a680b728fdf9b42a258 depends: + - __glibc >=2.17,<3.0.a0 - libffi >=3.4,<4.0a0 + - libgcc-ng >=12 - libiconv >=1.17,<2.0a0 - - libintl >=0.22.5,<1.0a0 - libzlib >=1.3.1,<2.0a0 - pcre2 >=10.44,<10.45.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 constrains: - - glib 2.80.3 *_1 + - glib 2.80.3 *_2 license: LGPL-2.1-or-later - size: 3743922 - timestamp: 1720334986136 + size: 3922900 + timestamp: 1723208802469 - kind: conda name: libglib version: 2.80.3 - build: h8a4344b_1 - build_number: 1 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.80.3-h8a4344b_1.conda - sha256: 5f5854a7cee117d115009d8f22a70d5f9e28f09cb6e453e8f1dd712e354ecec9 - md5: 6ea440297aacee4893f02ad759e6ffbc + build: h7025463_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libglib-2.80.3-h7025463_2.conda + sha256: 1461eb3b10814630acd1f3a11fc47dbb81c46a4f1f32ed389e3ae050a09c4903 + md5: b60894793e7e4a555027bfb4e4ed1d54 depends: - libffi >=3.4,<4.0a0 - - libgcc-ng >=12 - libiconv >=1.17,<2.0a0 + - libintl >=0.22.5,<1.0a0 - libzlib >=1.3.1,<2.0a0 - pcre2 >=10.44,<10.45.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 constrains: - - glib 2.80.3 *_1 + - glib 2.80.3 *_2 license: LGPL-2.1-or-later - size: 3886207 - timestamp: 1720334852370 + size: 3726738 + timestamp: 1723209368854 - kind: conda name: libgomp version: 14.1.0 @@ -2080,32 +2723,32 @@ packages: - kind: conda name: libintl version: 0.22.5 - build: h5728263_2 - build_number: 2 + build: h5728263_3 + build_number: 3 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libintl-0.22.5-h5728263_2.conda - sha256: 1b95335af0a3e278b31e16667fa4e51d1c3f5e22d394d982539dfd5d34c5ae19 - md5: aa622c938af057adc119f8b8eecada01 + url: https://conda.anaconda.org/conda-forge/win-64/libintl-0.22.5-h5728263_3.conda + sha256: c7e4600f28bcada8ea81456a6530c2329312519efcf0c886030ada38976b0511 + md5: 2cf0cf76cc15d360dfa2f17fd6cf9772 depends: - libiconv >=1.17,<2.0a0 license: LGPL-2.1-or-later - size: 95745 - timestamp: 1712516102666 + size: 95568 + timestamp: 1723629479451 - kind: conda name: libintl-devel version: 0.22.5 - build: h5728263_2 - build_number: 2 + build: h5728263_3 + build_number: 3 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/libintl-devel-0.22.5-h5728263_2.conda - sha256: 6164fd51abfc7294477c58da77ee1ff9ebc63b9a33404b646407f7fbc3cc7d0d - md5: a2ad82fae23975e4ccbfab2847d31d48 + url: https://conda.anaconda.org/conda-forge/win-64/libintl-devel-0.22.5-h5728263_3.conda + sha256: be1f3c48bc750bca7e68955d57180dfd826d6f9fa7eb32994f6cb61b813f9a6a + md5: 7537784e9e35399234d4007f45cdb744 depends: - libiconv >=1.17,<2.0a0 - - libintl 0.22.5 h5728263_2 + - libintl 0.22.5 h5728263_3 license: LGPL-2.1-or-later - size: 40772 - timestamp: 1712516363413 + size: 40746 + timestamp: 1723629745649 - kind: conda name: libjpeg-turbo version: 3.0.0 @@ -2178,6 +2821,27 @@ packages: license_family: BSD size: 5191980 timestamp: 1721689666180 +- kind: conda + name: liblapack + version: 3.9.0 + build: 23_win64_openblas + build_number: 23 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/liblapack-3.9.0-23_win64_openblas.conda + sha256: bb5e626c47baa9ef54c1a296fb211b3e0f5675192e1d143ee4acc3604cb19bd9 + md5: 01c0e2ac92fd5466a1e468a524b52cfb + depends: + - libblas 3.9.0 23_win64_openblas + constrains: + - libcblas 3.9.0 23_win64_openblas + - liblapacke 3.9.0 23_win64_openblas + - blas * openblas + track_features: + - blas_openblas + license: BSD-3-Clause + license_family: BSD + size: 3973839 + timestamp: 1721689818555 - kind: conda name: libnsl version: 2.0.1 @@ -2211,6 +2875,26 @@ packages: license_family: BSD size: 5563053 timestamp: 1720426334043 +- kind: conda + name: libopenblas + version: 0.3.27 + build: pthreads_hf0a32cb_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libopenblas-0.3.27-pthreads_hf0a32cb_1.conda + sha256: 4e66ab8a83ac2464aa32c8886c7507b8c4ae030c3eedbb5833710dcaf5249713 + md5: 52610e910dd5f1ab578abae44fa19ca3 + depends: + - libflang >=5.0.0,<6.0.0.a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + constrains: + - openblas >=0.3.27,<0.3.28.0a0 + license: BSD-3-Clause + license_family: BSD + size: 3967835 + timestamp: 1720443575226 - kind: conda name: libpng version: 1.6.43 @@ -2309,6 +2993,24 @@ packages: license: Unlicense size: 865346 timestamp: 1718050628718 +- kind: conda + name: libssh2 + version: 1.11.0 + build: h7dfc565_0 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/libssh2-1.11.0-h7dfc565_0.conda + sha256: 813fd04eed2a2d5d9c36e53c554f9c1f08e9324e2922bd60c9c52dbbed2dbcec + md5: dc262d03aae04fe26825062879141a41 + depends: + - libzlib >=1.2.13,<2.0.0a0 + - openssl >=3.1.1,<4.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-3-Clause + license_family: BSD + size: 266806 + timestamp: 1685838242099 - kind: conda name: libstdcxx-ng version: 14.1.0 @@ -2552,6 +3254,18 @@ packages: license_family: BSD size: 25951 timestamp: 1719215280117 +- kind: conda + name: llvm-meta + version: 5.0.0 + build: '0' + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/llvm-meta-5.0.0-0.tar.bz2 + sha256: 090bbeacc3297ff579b53f55ad184f05c30e316fe9d5d7df63df1d2ad4578b79 + md5: 213b5b5ad34008147a824460e50a691c + license: BSD-3-Clause + license_family: BSD + size: 2667 - kind: conda name: m2w64-gcc-libgfortran version: 5.3.0 @@ -2715,13 +3429,12 @@ packages: timestamp: 1706900632904 - kind: conda name: matplotlib-base - version: 3.9.1 - build: py311h74b4f7c_2 - build_number: 2 + version: 3.9.2 + build: py311h74b4f7c_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.9.1-py311h74b4f7c_2.conda - sha256: d35b8a68d6d803d4977ccf3354abe14a0d1037c06f7519701c0c3247265d489a - md5: e4a26e6bd32d4af38492ba68caaa16d1 + url: https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.9.2-py311h74b4f7c_0.conda + sha256: a914061120a15618dacefc7268fca6c2e77631c801f58a5771f40f77ed200943 + md5: de8e36c9792f14eed7e11e672f03fbf0 depends: - __glibc >=2.17,<3.0.a0 - certifi >=2020.06.20 @@ -2744,17 +3457,16 @@ packages: - tk >=8.6.13,<8.7.0a0 license: PSF-2.0 license_family: PSF - size: 7989076 - timestamp: 1722732854413 + size: 7969549 + timestamp: 1723759628089 - kind: conda name: matplotlib-base - version: 3.9.1 - build: py311h8f1b1e4_2 - build_number: 2 + version: 3.9.2 + build: py311h8f1b1e4_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.9.1-py311h8f1b1e4_2.conda - sha256: 5643316fa74d20a209243dfcd02e333bdebe5a2f343db43489562cae764771d4 - md5: 7c6a0537db86a1e478bcad40dc28e1fd + url: https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.9.2-py311h8f1b1e4_0.conda + sha256: bf130261a7754c2ec72750c1b61ccbcaed11f43af8e98912838dc4b71aa346cd + md5: 6d82670756b404ffb0fc6b693db08e21 depends: - certifi >=2020.06.20 - contourpy >=1.0.1 @@ -2776,8 +3488,8 @@ packages: - vc14_runtime >=14.29.30139 license: PSF-2.0 license_family: PSF - size: 7867717 - timestamp: 1722733881215 + size: 7874159 + timestamp: 1723760590514 - kind: conda name: matplotlib-inline version: 0.1.7 @@ -2901,14 +3613,29 @@ packages: license: X11 AND BSD-3-Clause size: 887465 timestamp: 1715194722503 +- kind: conda + name: nomkl + version: '1.0' + build: h5ca1d4c_0 + subdir: noarch + noarch: generic + url: https://conda.anaconda.org/conda-forge/noarch/nomkl-1.0-h5ca1d4c_0.tar.bz2 + sha256: d38542a151a90417065c1a234866f97fd1ea82a81de75ecb725955ab78f88b4b + md5: 9a66894dfd07c4510beb6b3f9672ccc0 + constrains: + - mkl <0.a0 + license: BSD-3-Clause + license_family: BSD + size: 3843 + timestamp: 1582593857545 - kind: conda name: numpy - version: 2.0.1 + version: 2.1.0 build: py311h35ffc71_0 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/numpy-2.0.1-py311h35ffc71_0.conda - sha256: 7faee51c39f959e4ff368aaf01abf669fff3018743adfd3f66ce01059bd53834 - md5: e0b858cb640bfa2cd2bae81112a948d5 + url: https://conda.anaconda.org/conda-forge/win-64/numpy-2.1.0-py311h35ffc71_0.conda + sha256: 7c1bd45085c96b550d06cdfbd9f9475c35d17721fe4ffb986531e304284e07ba + md5: 6e6bf7b95bae97164f683eced6654eba depends: - libblas >=3.9.0,<4.0a0 - libcblas >=3.9.0,<4.0a0 @@ -2922,16 +3649,16 @@ packages: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD - size: 7585972 - timestamp: 1721966967701 + size: 7614558 + timestamp: 1724036087088 - kind: conda name: numpy - version: 2.0.1 + version: 2.1.0 build: py311hed25524_0 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.0.1-py311hed25524_0.conda - sha256: 57508c96084565eb95abfdf5710de924afb157a8d1f2f7e5d3defcbce0200e1f - md5: 7448c8d94dfb4dfa3db1437d8adaf2cd + url: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.1.0-py311hed25524_0.conda + sha256: 8b10c80236517a03dd79bf878a0199da2f41ad4b058983423c760ea529716496 + md5: 8de4feabb34ab837dc7e5703affbe89e depends: - __glibc >=2.17,<3.0.a0 - libblas >=3.9.0,<4.0a0 @@ -2945,8 +3672,8 @@ packages: - numpy-base <0a0 license: BSD-3-Clause license_family: BSD - size: 8901206 - timestamp: 1721966240264 + size: 8982976 + timestamp: 1724035372918 - kind: conda name: openjpeg version: 2.5.2 @@ -2984,6 +3711,22 @@ packages: license_family: BSD size: 341592 timestamp: 1709159244431 +- kind: conda + name: openmp + version: 5.0.0 + build: vc14_1 + build_number: 1 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/openmp-5.0.0-vc14_1.tar.bz2 + sha256: 05c19170938b589f59049679d4e0679c98160fecc6fd1bf721b0f4980bd235dd + md5: 8284c925330fa53668ade00db3c9e787 + depends: + - llvm-meta 5.0.0|5.0.0.* + - vc 14.* + arch: x86_64 + platform: win + license: NCSA + size: 590466 - kind: conda name: openssl version: 3.3.1 @@ -3063,12 +3806,12 @@ packages: - kind: conda name: pango version: 1.54.0 - build: hbb871f6_1 - build_number: 1 + build: hbb871f6_2 + build_number: 2 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/pango-1.54.0-hbb871f6_1.conda - sha256: ca1189be471fb73ef742b2e61d345dde885c62ad4c256940984c02073fd1c0e1 - md5: bf639fd83deb4404ac988ae927f61e9e + url: https://conda.anaconda.org/conda-forge/win-64/pango-1.54.0-hbb871f6_2.conda + sha256: 90327dd606f78ae9c881e285f85bc2b0f57d11c807be58ee3f690742354918b2 + md5: 409c0b778deee649c025b7106549a24f depends: - cairo >=1.18.0,<2.0a0 - fontconfig >=2.14.2,<3.0a0 @@ -3076,14 +3819,14 @@ packages: - freetype >=2.12.1,<3.0a0 - fribidi >=1.0.10,<2.0a0 - harfbuzz >=9.0.0,<10.0a0 - - libglib >=2.80.2,<3.0a0 + - libglib >=2.80.3,<3.0a0 - libpng >=1.6.43,<1.7.0a0 - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 license: LGPL-2.1-or-later - size: 450735 - timestamp: 1719840158791 + size: 450610 + timestamp: 1723832834434 - kind: conda name: parso version: 0.8.4 @@ -3102,37 +3845,40 @@ packages: - kind: conda name: pcre2 version: '10.44' - build: h0f59acf_0 - subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-h0f59acf_0.conda - sha256: 90646ad0d8f9d0fd896170c4f3d754e88c4ba0eaf856c24d00842016f644baab - md5: 3914f7ac1761dce57102c72ca7c35d01 + build: h3d7b363_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.44-h3d7b363_2.conda + sha256: f4a12cbf8a7c5bfa2592b9dc92b492c438781898e5b02f397979b0be6e1b5851 + md5: a3a3baddcfb8c80db84bec3cb7746fb8 depends: - bzip2 >=1.0.8,<2.0a0 - - libgcc-ng >=12 - libzlib >=1.3.1,<2.0a0 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 license: BSD-3-Clause license_family: BSD - size: 955778 - timestamp: 1718466128333 + size: 820831 + timestamp: 1723489427046 - kind: conda name: pcre2 version: '10.44' - build: h3d7b363_0 - subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/pcre2-10.44-h3d7b363_0.conda - sha256: 44351611091ed72c4682ad23e53d7874334757298ff0ebb2acd769359ae82ab3 - md5: 007d07ab5027e0bf49f6fa660a9f89a0 + build: hba22ea6_2 + build_number: 2 + subdir: linux-64 + url: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.44-hba22ea6_2.conda + sha256: 1087716b399dab91cc9511d6499036ccdc53eb29a288bebcb19cf465c51d7c0d + md5: df359c09c41cd186fffb93a2d87aa6f5 depends: + - __glibc >=2.17,<3.0.a0 - bzip2 >=1.0.8,<2.0a0 + - libgcc-ng >=12 - libzlib >=1.3.1,<2.0a0 - - ucrt >=10.0.20348.0 - - vc >=14.2,<15 - - vc14_runtime >=14.29.30139 license: BSD-3-Clause license_family: BSD - size: 816867 - timestamp: 1718466930248 + size: 952308 + timestamp: 1723488734144 - kind: conda name: pexpect version: 4.9.0 @@ -3245,6 +3991,21 @@ packages: license_family: MIT size: 461854 timestamp: 1709239971654 +- kind: conda + name: pluggy + version: 1.5.0 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pluggy-1.5.0-pyhd8ed1ab_0.conda + sha256: 33eaa3359948a260ebccf9cdc2fd862cea5a6029783289e13602d8e634cd9a26 + md5: d3483c8fc2dc2cc3f5cf43e26d60cabf + depends: + - python >=3.8 + license: MIT + license_family: MIT + size: 23815 + timestamp: 1713667175451 - kind: conda name: prompt-toolkit version: 3.0.47 @@ -3374,6 +4135,23 @@ packages: license_family: BSD size: 1393462 timestamp: 1719344980505 +- kind: conda + name: pydoe + version: 0.3.8 + build: py_1 + build_number: 1 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pydoe-0.3.8-py_1.tar.bz2 + sha256: 4616364442c3c0c91188ae8b04d3146f21e8826e55e120835d910844e4dbe38e + md5: 6aeffd34a05a050c9b01c86de859c459 + depends: + - numpy >=1.8 + - python + - scipy >=0.13 + license: BSD 3-Clause + size: 13421 + timestamp: 1531166118644 - kind: conda name: pydyf version: 0.11.0 @@ -3484,6 +4262,29 @@ packages: license_family: BSD size: 18981 timestamp: 1661604969727 +- kind: conda + name: pytest + version: 8.3.2 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/pytest-8.3.2-pyhd8ed1ab_0.conda + sha256: 72c84a3cd9fe82835a88e975fd2a0dbf2071d1c423ea4f79e7930578c1014873 + md5: e010a224b90f1f623a917c35addbb924 + depends: + - colorama + - exceptiongroup >=1.0.0rc8 + - iniconfig + - packaging + - pluggy <2,>=1.5 + - python >=3.8 + - tomli >=1 + constrains: + - pytest-faulthandler >=2 + license: MIT + license_family: MIT + size: 257671 + timestamp: 1721923749407 - kind: conda name: python version: 3.11.9 @@ -3559,33 +4360,33 @@ packages: - kind: conda name: python_abi version: '3.11' - build: 4_cp311 - build_number: 4 + build: 5_cp311 + build_number: 5 subdir: linux-64 - url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.11-4_cp311.conda - sha256: 0be3ac1bf852d64f553220c7e6457e9c047dfb7412da9d22fbaa67e60858b3cf - md5: d786502c97404c94d7d58d258a445a65 + url: https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.11-5_cp311.conda + sha256: 2660b8059b3ee854bc5d3c6b1fce946e5bd2fe8fbca7827de2c5885ead6209de + md5: 139a8d40c8a2f430df31048949e450de constrains: - python 3.11.* *_cpython license: BSD-3-Clause license_family: BSD - size: 6385 - timestamp: 1695147338551 + size: 6211 + timestamp: 1723823324668 - kind: conda name: python_abi version: '3.11' - build: 4_cp311 - build_number: 4 + build: 5_cp311 + build_number: 5 subdir: win-64 - url: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.11-4_cp311.conda - sha256: 67c2aade3e2160642eec0742384e766b20c766055e3d99335681e3e05d88ed7b - md5: 70513332c71b56eace4ee6441e66c012 + url: https://conda.anaconda.org/conda-forge/win-64/python_abi-3.11-5_cp311.conda + sha256: 9b210e5807dd9c9ed71ff192a95f1872da597ddd10e7cefec93a922fe22e598a + md5: 895b873644c11ccc0ab7dba2d8513ae6 constrains: - python 3.11.* *_cpython license: BSD-3-Clause license_family: BSD - size: 6755 - timestamp: 1695147711935 + size: 6707 + timestamp: 1723823225752 - kind: conda name: pytz version: '2024.1' @@ -3601,6 +4402,25 @@ packages: license_family: MIT size: 188538 timestamp: 1706886944988 +- kind: conda + name: pywin32 + version: '306' + build: py311h12c1d0e_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/pywin32-306-py311h12c1d0e_2.conda + sha256: 79d942817bdaf384602113e5fcb9158dc45cae4044bed308918a5db97f141fdb + md5: 25df0fc55722ea1a94494f41302e2d1c + depends: + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: PSF-2.0 + license_family: PSF + size: 6124285 + timestamp: 1695974706892 - kind: conda name: pyyaml version: 6.0.2 @@ -3707,21 +4527,46 @@ packages: license_family: APACHE size: 58810 timestamp: 1717057174842 +- kind: conda + name: scipy + version: 1.14.0 + build: py311hd4686c6_2 + build_number: 2 + subdir: win-64 + url: https://conda.anaconda.org/conda-forge/win-64/scipy-1.14.0-py311hd4686c6_2.conda + sha256: f1b6fb111f21bcaa9bcbf420699522c369351406c57205f578e9e0257f3aa90d + md5: 7dfaff2e99648c216dad8fe895675a7c + depends: + - libblas >=3.9.0,<4.0a0 + - libcblas >=3.9.0,<4.0a0 + - liblapack >=3.9.0,<4.0a0 + - numpy >=1.23.5,<2.3 + - numpy >=1.19,<3 + - numpy >=1.23.5 + - python >=3.11,<3.12.0a0 + - python_abi 3.11.* *_cp311 + - ucrt >=10.0.20348.0 + - vc >=14.2,<15 + - vc14_runtime >=14.29.30139 + license: BSD-3-Clause + license_family: BSD + size: 16186599 + timestamp: 1723856944524 - kind: conda name: setuptools - version: 72.1.0 + version: 72.2.0 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/setuptools-72.1.0-pyhd8ed1ab_0.conda - sha256: d239e7f1b1a5617eeadda4e91183592f5a15219e97e16bc721d7b0597ee89a80 - md5: e06d4c26df4f958a8d38696f2c344d15 + url: https://conda.anaconda.org/conda-forge/noarch/setuptools-72.2.0-pyhd8ed1ab_0.conda + sha256: 0252f6570de8ff29d489958fc7826677a518061b1aa5e1828a427eec8a7928a4 + md5: 1462aa8b243aad09ef5d0841c745eb89 depends: - python >=3.8 license: MIT license_family: MIT - size: 1462612 - timestamp: 1722586785703 + size: 1459799 + timestamp: 1724163617860 - kind: conda name: six version: 1.16.0 @@ -4167,6 +5012,21 @@ packages: license_family: Apache size: 860084 timestamp: 1717723311673 +- kind: conda + name: tqdm + version: 4.66.5 + build: pyhd8ed1ab_0 + subdir: noarch + noarch: python + url: https://conda.anaconda.org/conda-forge/noarch/tqdm-4.66.5-pyhd8ed1ab_0.conda + sha256: f2384902cef72048b0e9bad5c03d7a843de02ba6bc8618a9ecab6ff81a131312 + md5: c6e94fc2b2ec71ea33fe7c7da259acb4 + depends: + - colorama + - python >=3.7 + license: MPL-2.0 or MIT + size: 89519 + timestamp: 1722737568509 - kind: conda name: traitlets version: 5.14.3 @@ -4638,19 +5498,19 @@ packages: timestamp: 1641347623319 - kind: conda name: zipp - version: 3.19.2 + version: 3.20.0 build: pyhd8ed1ab_0 subdir: noarch noarch: python - url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.19.2-pyhd8ed1ab_0.conda - sha256: e3e9c8501f581bfdc4700b83ea283395e237ec6b9b5cbfbedb556e1da6f4fdc9 - md5: 49808e59df5535116f6878b2a820d6f4 + url: https://conda.anaconda.org/conda-forge/noarch/zipp-3.20.0-pyhd8ed1ab_0.conda + sha256: 72fa72af24006e37a9f027d6d9f407369edcbd9bbb93db299820eb63ea07e404 + md5: 05b6bcb391b5be17374f7ad0aeedc479 depends: - python >=3.8 license: MIT license_family: MIT - size: 20917 - timestamp: 1718013395428 + size: 20857 + timestamp: 1723591347715 - kind: conda name: zlib version: 1.3.1 diff --git a/pixi.toml b/pixi.toml index 2cf19aba..398e559d 100644 --- a/pixi.toml +++ b/pixi.toml @@ -3,7 +3,7 @@ name = "anybody-tutorial" version = "0.1.0" description = "Add a short description here" authors = ["Morten Enemark Lund "] -channels = ["conda-forge"] +channels = ["conda-forge", "anybody"] platforms = ["win-64","linux-64"] [tasks] @@ -35,3 +35,17 @@ myst-parser = ">=4.0.0,<5" jinja2 = ">=3.1.4,<3.2" tomli = ">=2.0.1,<2.1" sphinx-book-theme = ">=1.1.3,<2" +pytest = ">=8.3.2,<9" + + +[feature.test.target.win-64.dependencies] +pytest = "*" +anypytools = "*" +debugpy = "*" +anybodycon = "8.1.0beta1.docmarker" + +[feature.test.target.win-64.tasks] +pytest = "pytest" + +[environments.test] +features = ["test"]