diff --git a/docs/en/_toc.yml b/docs/en/_toc.yml
index 516d0ccd..936b112a 100644
--- a/docs/en/_toc.yml
+++ b/docs/en/_toc.yml
@@ -35,6 +35,7 @@ parts:
title: Typical Problems
- caption: Release Note
chapters:
+ - file: releases/jijmodeling-2.5.0
- file: releases/jijmodeling-2.4.1
- file: releases/jijmodeling-2.4.0
- file: releases/jijmodeling-2.3.2
diff --git a/docs/en/advanced/generation.ipynb b/docs/en/advanced/generation.ipynb
index b5a13869..4010a6fc 100644
--- a/docs/en/advanced/generation.ipynb
+++ b/docs/en/advanced/generation.ipynb
@@ -43,17 +43,17 @@
"id": "34020325-4747-42ce-ab64-4114e871dca0",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:29.173976Z",
- "iopub.status.busy": "2026-03-24T02:05:29.173922Z",
- "iopub.status.idle": "2026-03-24T02:05:29.226519Z",
- "shell.execute_reply": "2026-03-24T02:05:29.226149Z"
+ "iopub.execute_input": "2026-06-04T02:50:29.958298Z",
+ "iopub.status.busy": "2026-06-04T02:50:29.957998Z",
+ "iopub.status.idle": "2026-06-04T02:50:30.029414Z",
+ "shell.execute_reply": "2026-06-04T02:50:30.029023Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
- "{'B': 3, 'A': 4}"
+ "{'A': 5, 'B': 3}"
]
},
"execution_count": 1,
@@ -93,17 +93,17 @@
"id": "9ea06ded-9bc5-4eb9-85c7-837538a5940b",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:29.227611Z",
- "iopub.status.busy": "2026-03-24T02:05:29.227545Z",
- "iopub.status.idle": "2026-03-24T02:05:29.229816Z",
- "shell.execute_reply": "2026-03-24T02:05:29.229508Z"
+ "iopub.execute_input": "2026-06-04T02:50:30.030492Z",
+ "iopub.status.busy": "2026-06-04T02:50:30.030442Z",
+ "iopub.status.idle": "2026-06-04T02:50:30.032725Z",
+ "shell.execute_reply": "2026-06-04T02:50:30.032370Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
- "{'B': 5, 'A': 89}"
+ "{'B': 5, 'A': 66}"
]
},
"execution_count": 2,
@@ -129,17 +129,17 @@
"id": "8fedb42a-12d2-41f6-b3de-c989ea1aa4ab",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:29.230837Z",
- "iopub.status.busy": "2026-03-24T02:05:29.230782Z",
- "iopub.status.idle": "2026-03-24T02:05:29.233098Z",
- "shell.execute_reply": "2026-03-24T02:05:29.232823Z"
+ "iopub.execute_input": "2026-06-04T02:50:30.033607Z",
+ "iopub.status.busy": "2026-06-04T02:50:30.033556Z",
+ "iopub.status.idle": "2026-06-04T02:50:30.035445Z",
+ "shell.execute_reply": "2026-06-04T02:50:30.035127Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
- "{'B': 4, 'A': 68}"
+ "{'A': 78, 'B': 3}"
]
},
"execution_count": 3,
@@ -167,17 +167,17 @@
"id": "19a45cfe-40de-4e5e-9cad-62114b225b09",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:29.234144Z",
- "iopub.status.busy": "2026-03-24T02:05:29.234093Z",
- "iopub.status.idle": "2026-03-24T02:05:29.282052Z",
- "shell.execute_reply": "2026-03-24T02:05:29.281678Z"
+ "iopub.execute_input": "2026-06-04T02:50:30.036186Z",
+ "iopub.status.busy": "2026-06-04T02:50:30.036144Z",
+ "iopub.status.idle": "2026-06-04T02:50:30.102466Z",
+ "shell.execute_reply": "2026-06-04T02:50:30.102067Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
- "{'A': array([3, 9, 9, 4, 6, 9, 9, 9, 6, 8], dtype=object)}"
+ "{'A': array([1, 7, 9, 9, 5, 9, 9, 7, 4, 6], dtype=object)}"
]
},
"execution_count": 4,
@@ -209,19 +209,18 @@
"id": "ac97241e-47bd-4b5b-b8f6-49d5ddb43254",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:29.282996Z",
- "iopub.status.busy": "2026-03-24T02:05:29.282922Z",
- "iopub.status.idle": "2026-03-24T02:05:29.312705Z",
- "shell.execute_reply": "2026-03-24T02:05:29.312400Z"
+ "iopub.execute_input": "2026-06-04T02:50:30.103512Z",
+ "iopub.status.busy": "2026-06-04T02:50:30.103449Z",
+ "iopub.status.idle": "2026-06-04T02:50:30.155520Z",
+ "shell.execute_reply": "2026-06-04T02:50:30.155220Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
- "{'A': array([-7.170054915922748, 4.5286379717568614, -0.7378605301076355,\n",
- " -9.881771095294587, -6.66134733378656, -9.639830308073524,\n",
- " 7.636033231278233, -7.2784681900176595, 2.46134220723353],\n",
+ "{'A': array([-5.815946180687299, 9.389031074526667, -2.4827675577336272,\n",
+ " -7.263302071169142, -5.2497517062747745, 1.9978528278141283],\n",
" dtype=object)}"
]
},
@@ -314,7 +313,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.11"
+ "version": "3.11.14"
}
},
"nbformat": 4,
diff --git a/docs/en/advanced/named_expr.ipynb b/docs/en/advanced/named_expr.ipynb
index ab1edde4..d1a85062 100644
--- a/docs/en/advanced/named_expr.ipynb
+++ b/docs/en/advanced/named_expr.ipynb
@@ -44,10 +44,10 @@
"id": "2ac9c9d4",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:30.709402Z",
- "iopub.status.busy": "2026-03-24T02:05:30.709347Z",
- "iopub.status.idle": "2026-03-24T02:05:30.900832Z",
- "shell.execute_reply": "2026-03-24T02:05:30.900063Z"
+ "iopub.execute_input": "2026-06-04T02:50:31.212571Z",
+ "iopub.status.busy": "2026-06-04T02:50:31.212430Z",
+ "iopub.status.idle": "2026-06-04T02:50:31.451485Z",
+ "shell.execute_reply": "2026-06-04T02:50:31.451115Z"
}
},
"outputs": [
@@ -61,7 +61,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"Knapsack (Unnamed)\", sense=MAXIMIZE, objective=sum(w.len_at(0).map(lambda (i: natural): v[i] * x[i])), constraints={Weight: [Constraint(name=\"Weight\", sense=LESS_THAN_EQUAL, left=sum(w.len_at(0).map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Float)),],})"
+ "Problem(name=\"Knapsack (Unnamed)\", sense=MAXIMIZE, objective=sum(set(w.len_at(0)).map(lambda (i: natural): v[i] * x[i])), constraints={Weight: [Constraint(name=\"Weight\", sense=LESS_THAN_EQUAL, left=sum(set(w.len_at(0)).map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Float)),],})"
]
},
"execution_count": 1,
@@ -106,10 +106,10 @@
"id": "eef87a2e",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:30.902082Z",
- "iopub.status.busy": "2026-03-24T02:05:30.901973Z",
- "iopub.status.idle": "2026-03-24T02:05:31.067538Z",
- "shell.execute_reply": "2026-03-24T02:05:31.067176Z"
+ "iopub.execute_input": "2026-06-04T02:50:31.452647Z",
+ "iopub.status.busy": "2026-06-04T02:50:31.452582Z",
+ "iopub.status.idle": "2026-06-04T02:50:31.671476Z",
+ "shell.execute_reply": "2026-06-04T02:50:31.671182Z"
}
},
"outputs": [
@@ -123,7 +123,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"Knapsack\", sense=MAXIMIZE, objective=sum(N.map(lambda (i: natural): v[i] * x[i])), constraints={Weight: [Constraint(name=\"Weight\", sense=LESS_THAN_EQUAL, left=sum(N.map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Float)),],})"
+ "Problem(name=\"Knapsack\", sense=MAXIMIZE, objective=sum(set(N).map(lambda (i: natural): v[i] * x[i])), constraints={Weight: [Constraint(name=\"Weight\", sense=LESS_THAN_EQUAL, left=sum(set(N).map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Float)),],})"
]
},
"execution_count": 2,
@@ -172,10 +172,10 @@
"id": "a1980058",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:31.068706Z",
- "iopub.status.busy": "2026-03-24T02:05:31.068645Z",
- "iopub.status.idle": "2026-03-24T02:05:32.352063Z",
- "shell.execute_reply": "2026-03-24T02:05:32.351689Z"
+ "iopub.execute_input": "2026-06-04T02:50:31.672753Z",
+ "iopub.status.busy": "2026-06-04T02:50:31.672694Z",
+ "iopub.status.idle": "2026-06-04T02:50:32.106917Z",
+ "shell.execute_reply": "2026-06-04T02:50:32.106485Z"
}
},
"outputs": [],
@@ -227,10 +227,10 @@
"id": "de325406",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:32.353639Z",
- "iopub.status.busy": "2026-03-24T02:05:32.353384Z",
- "iopub.status.idle": "2026-03-24T02:05:32.400433Z",
- "shell.execute_reply": "2026-03-24T02:05:32.400104Z"
+ "iopub.execute_input": "2026-06-04T02:50:32.108307Z",
+ "iopub.status.busy": "2026-06-04T02:50:32.108205Z",
+ "iopub.status.idle": "2026-06-04T02:50:32.163790Z",
+ "shell.execute_reply": "2026-06-04T02:50:32.163453Z"
}
},
"outputs": [
@@ -238,7 +238,7 @@
"data": {
"text/latex": [
"$$\\begin{array}{rl}\n",
- "\\text{Problem}\\colon &\\text{Scalar}\\\\\\displaystyle \\min &\\displaystyle 0\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{Array}}\\left[5;\\left\\{0, 1\\right\\}\\right]&\\quad &1\\text{-dim binary variable}\\\\\\end{alignedat}\\\\&\\\\&\\text{Named Expressions:}\\\\&\\qquad \\begin{alignedat}{2}scalar&=\\sum _{\\vec{\\imath }}{{{\\left(x\\right)}}_{\\vec{\\imath }}}&\\quad &\\in \\left\\{0, 1\\right\\}\\\\&&&\\text{\\texttt{save\\_{}in\\_{}ommx=True}}\\\\\\end{alignedat}\\end{array}\n",
+ "\\text{Problem}\\colon &\\text{Scalar}\\\\\\displaystyle \\min &\\displaystyle 0\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{Array}}\\left[5;\\left\\{0, 1\\right\\}\\right]&\\quad &1\\text{-dim binary variable}\\\\\\end{alignedat}\\\\&\\\\&\\text{Named Expressions:}\\\\&\\qquad \\begin{alignedat}{2}scalar&=\\sum _{\\vec{\\imath }}{{{\\left(x\\right)}}_{\\vec{\\imath }}}&\\quad &\\in \\mathbb{N}\\\\&&&\\text{\\texttt{save\\_{}in\\_{}ommx=True}}\\\\\\end{alignedat}\\end{array}\n",
"$$"
],
"text/plain": [
@@ -265,10 +265,10 @@
"id": "b86892f7",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:32.401429Z",
- "iopub.status.busy": "2026-03-24T02:05:32.401375Z",
- "iopub.status.idle": "2026-03-24T02:05:32.536699Z",
- "shell.execute_reply": "2026-03-24T02:05:32.536396Z"
+ "iopub.execute_input": "2026-06-04T02:50:32.164889Z",
+ "iopub.status.busy": "2026-06-04T02:50:32.164839Z",
+ "iopub.status.idle": "2026-06-04T02:50:32.316842Z",
+ "shell.execute_reply": "2026-06-04T02:50:32.316496Z"
}
},
"outputs": [
@@ -304,10 +304,10 @@
"id": "f2859f29",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:32.537878Z",
- "iopub.status.busy": "2026-03-24T02:05:32.537817Z",
- "iopub.status.idle": "2026-03-24T02:05:32.623433Z",
- "shell.execute_reply": "2026-03-24T02:05:32.623068Z"
+ "iopub.execute_input": "2026-06-04T02:50:32.317865Z",
+ "iopub.status.busy": "2026-06-04T02:50:32.317811Z",
+ "iopub.status.idle": "2026-06-04T02:50:32.417636Z",
+ "shell.execute_reply": "2026-06-04T02:50:32.417256Z"
}
},
"outputs": [
@@ -354,10 +354,10 @@
"id": "6051c494",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:32.624428Z",
- "iopub.status.busy": "2026-03-24T02:05:32.624367Z",
- "iopub.status.idle": "2026-03-24T02:05:32.629533Z",
- "shell.execute_reply": "2026-03-24T02:05:32.629140Z"
+ "iopub.execute_input": "2026-06-04T02:50:32.418594Z",
+ "iopub.status.busy": "2026-06-04T02:50:32.418540Z",
+ "iopub.status.idle": "2026-06-04T02:50:32.425628Z",
+ "shell.execute_reply": "2026-06-04T02:50:32.425397Z"
}
},
"outputs": [],
@@ -371,10 +371,10 @@
"id": "276ffb44",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:32.630573Z",
- "iopub.status.busy": "2026-03-24T02:05:32.630508Z",
- "iopub.status.idle": "2026-03-24T02:05:32.649968Z",
- "shell.execute_reply": "2026-03-24T02:05:32.649557Z"
+ "iopub.execute_input": "2026-06-04T02:50:32.426680Z",
+ "iopub.status.busy": "2026-06-04T02:50:32.426632Z",
+ "iopub.status.idle": "2026-06-04T02:50:32.460138Z",
+ "shell.execute_reply": "2026-06-04T02:50:32.459869Z"
}
},
"outputs": [
@@ -401,10 +401,10 @@
"id": "69a09dfa",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:32.650995Z",
- "iopub.status.busy": "2026-03-24T02:05:32.650942Z",
- "iopub.status.idle": "2026-03-24T02:05:32.658867Z",
- "shell.execute_reply": "2026-03-24T02:05:32.658578Z"
+ "iopub.execute_input": "2026-06-04T02:50:32.461213Z",
+ "iopub.status.busy": "2026-06-04T02:50:32.461158Z",
+ "iopub.status.idle": "2026-06-04T02:50:32.473307Z",
+ "shell.execute_reply": "2026-06-04T02:50:32.473008Z"
}
},
"outputs": [
@@ -431,10 +431,10 @@
"id": "c3d56b52",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:32.659946Z",
- "iopub.status.busy": "2026-03-24T02:05:32.659887Z",
- "iopub.status.idle": "2026-03-24T02:05:32.675976Z",
- "shell.execute_reply": "2026-03-24T02:05:32.675660Z"
+ "iopub.execute_input": "2026-06-04T02:50:32.474413Z",
+ "iopub.status.busy": "2026-06-04T02:50:32.474358Z",
+ "iopub.status.idle": "2026-06-04T02:50:32.501844Z",
+ "shell.execute_reply": "2026-06-04T02:50:32.501553Z"
}
},
"outputs": [
@@ -479,10 +479,10 @@
"id": "d5d13841",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:32.677059Z",
- "iopub.status.busy": "2026-03-24T02:05:32.677004Z",
- "iopub.status.idle": "2026-03-24T02:05:32.871249Z",
- "shell.execute_reply": "2026-03-24T02:05:32.870949Z"
+ "iopub.execute_input": "2026-06-04T02:50:32.502958Z",
+ "iopub.status.busy": "2026-06-04T02:50:32.502909Z",
+ "iopub.status.idle": "2026-06-04T02:50:32.772263Z",
+ "shell.execute_reply": "2026-06-04T02:50:32.771953Z"
}
},
"outputs": [
@@ -496,7 +496,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"Knapsack\", sense=MAXIMIZE, objective=sum(N.map(lambda (i: natural): v[i] * x[i])), constraints={Weight: [Constraint(name=\"Weight\", sense=LESS_THAN_EQUAL, left=total_weight, right=W, shape=Scalar(Float)),],})"
+ "Problem(name=\"Knapsack\", sense=MAXIMIZE, objective=sum(set(N).map(lambda (i: natural): v[i] * x[i])), constraints={Weight: [Constraint(name=\"Weight\", sense=LESS_THAN_EQUAL, left=total_weight, right=W, shape=Scalar(Float)),],})"
]
},
"execution_count": 11,
@@ -541,10 +541,10 @@
"id": "dba7ad0a",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:32.872464Z",
- "iopub.status.busy": "2026-03-24T02:05:32.872404Z",
- "iopub.status.idle": "2026-03-24T02:05:33.214174Z",
- "shell.execute_reply": "2026-03-24T02:05:33.213701Z"
+ "iopub.execute_input": "2026-06-04T02:50:32.773389Z",
+ "iopub.status.busy": "2026-06-04T02:50:32.773330Z",
+ "iopub.status.idle": "2026-06-04T02:50:32.861765Z",
+ "shell.execute_reply": "2026-06-04T02:50:32.861356Z"
}
},
"outputs": [],
@@ -566,10 +566,10 @@
"id": "2e3710ba",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:33.215352Z",
- "iopub.status.busy": "2026-03-24T02:05:33.215291Z",
- "iopub.status.idle": "2026-03-24T02:05:33.225769Z",
- "shell.execute_reply": "2026-03-24T02:05:33.225449Z"
+ "iopub.execute_input": "2026-06-04T02:50:32.862919Z",
+ "iopub.status.busy": "2026-06-04T02:50:32.862860Z",
+ "iopub.status.idle": "2026-06-04T02:50:32.870131Z",
+ "shell.execute_reply": "2026-06-04T02:50:32.869691Z"
}
},
"outputs": [
@@ -675,10 +675,10 @@
"id": "37c9e656",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:33.226786Z",
- "iopub.status.busy": "2026-03-24T02:05:33.226736Z",
- "iopub.status.idle": "2026-03-24T02:05:33.491441Z",
- "shell.execute_reply": "2026-03-24T02:05:33.491017Z"
+ "iopub.execute_input": "2026-06-04T02:50:32.871349Z",
+ "iopub.status.busy": "2026-06-04T02:50:32.871294Z",
+ "iopub.status.idle": "2026-06-04T02:50:33.156660Z",
+ "shell.execute_reply": "2026-06-04T02:50:33.156339Z"
}
},
"outputs": [
@@ -723,7 +723,7 @@
"
\n",
" \n",
" | 0 | \n",
- " 46.0 | \n",
+ " 45.0 | \n",
" {0, 1, 2, 3, 4, 5} | \n",
" total_weight | \n",
" [] | \n",
@@ -737,7 +737,7 @@
"text/plain": [
" value used_ids name subscripts \\\n",
"id \n",
- "0 46.0 {0, 1, 2, 3, 4, 5} total_weight [] \n",
+ "0 45.0 {0, 1, 2, 3, 4, 5} total_weight [] \n",
"\n",
" description parameters.subscripts \n",
"id \n",
@@ -791,7 +791,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.11"
+ "version": "3.11.14"
}
},
"nbformat": 4,
diff --git a/docs/en/advanced/serialize.ipynb b/docs/en/advanced/serialize.ipynb
index 30d626b0..4a5cd463 100644
--- a/docs/en/advanced/serialize.ipynb
+++ b/docs/en/advanced/serialize.ipynb
@@ -16,10 +16,10 @@
"id": "545186b3-caf3-4c92-a0a9-c7515923bffd",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:34.913506Z",
- "iopub.status.busy": "2026-03-24T02:05:34.913412Z",
- "iopub.status.idle": "2026-03-24T02:05:34.958083Z",
- "shell.execute_reply": "2026-03-24T02:05:34.957577Z"
+ "iopub.execute_input": "2026-06-04T02:50:34.335806Z",
+ "iopub.status.busy": "2026-06-04T02:50:34.335677Z",
+ "iopub.status.idle": "2026-06-04T02:50:34.397052Z",
+ "shell.execute_reply": "2026-06-04T02:50:34.396623Z"
}
},
"outputs": [],
@@ -48,10 +48,10 @@
"id": "271e3da1-63a5-448e-ab1a-ccff3476b945",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:34.959384Z",
- "iopub.status.busy": "2026-03-24T02:05:34.959313Z",
- "iopub.status.idle": "2026-03-24T02:05:34.964237Z",
- "shell.execute_reply": "2026-03-24T02:05:34.963959Z"
+ "iopub.execute_input": "2026-06-04T02:50:34.398262Z",
+ "iopub.status.busy": "2026-06-04T02:50:34.398199Z",
+ "iopub.status.idle": "2026-06-04T02:50:34.399892Z",
+ "shell.execute_reply": "2026-06-04T02:50:34.399572Z"
}
},
"outputs": [],
@@ -79,7 +79,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.11"
+ "version": "3.11.14"
}
},
"nbformat": 4,
diff --git a/docs/en/basics/expressions.ipynb b/docs/en/basics/expressions.ipynb
index 9aa0da52..065fa335 100644
--- a/docs/en/basics/expressions.ipynb
+++ b/docs/en/basics/expressions.ipynb
@@ -25,10 +25,10 @@
"id": "e511a2c6",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:51.250049Z",
- "iopub.status.busy": "2026-04-16T07:03:51.249843Z",
- "iopub.status.idle": "2026-04-16T07:03:51.285753Z",
- "shell.execute_reply": "2026-04-16T07:03:51.284748Z"
+ "iopub.execute_input": "2026-06-04T02:50:22.904659Z",
+ "iopub.status.busy": "2026-06-04T02:50:22.904395Z",
+ "iopub.status.idle": "2026-06-04T02:50:22.920392Z",
+ "shell.execute_reply": "2026-06-04T02:50:22.919816Z"
}
},
"outputs": [],
@@ -58,10 +58,10 @@
"id": "fdd9d4ad",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:51.288701Z",
- "iopub.status.busy": "2026-04-16T07:03:51.288546Z",
- "iopub.status.idle": "2026-04-16T07:03:51.623277Z",
- "shell.execute_reply": "2026-04-16T07:03:51.622658Z"
+ "iopub.execute_input": "2026-06-04T02:50:22.921690Z",
+ "iopub.status.busy": "2026-06-04T02:50:22.921630Z",
+ "iopub.status.idle": "2026-06-04T02:50:23.127114Z",
+ "shell.execute_reply": "2026-06-04T02:50:23.117768Z"
},
"label": "test-problem"
},
@@ -182,10 +182,10 @@
"id": "e38e46d8",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:51.625014Z",
- "iopub.status.busy": "2026-04-16T07:03:51.624895Z",
- "iopub.status.idle": "2026-04-16T07:03:51.673186Z",
- "shell.execute_reply": "2026-04-16T07:03:51.672645Z"
+ "iopub.execute_input": "2026-06-04T02:50:23.144619Z",
+ "iopub.status.busy": "2026-06-04T02:50:23.144482Z",
+ "iopub.status.idle": "2026-06-04T02:50:23.189023Z",
+ "shell.execute_reply": "2026-06-04T02:50:23.188679Z"
}
},
"outputs": [
@@ -225,10 +225,10 @@
"id": "e7874eab",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:51.674685Z",
- "iopub.status.busy": "2026-04-16T07:03:51.674553Z",
- "iopub.status.idle": "2026-04-16T07:03:51.752515Z",
- "shell.execute_reply": "2026-04-16T07:03:51.751337Z"
+ "iopub.execute_input": "2026-06-04T02:50:23.190112Z",
+ "iopub.status.busy": "2026-06-04T02:50:23.190056Z",
+ "iopub.status.idle": "2026-06-04T02:50:23.203916Z",
+ "shell.execute_reply": "2026-06-04T02:50:23.203603Z"
}
},
"outputs": [
@@ -238,13 +238,13 @@
"text": [
"Traceback (most recent last):\n",
" while inferring the type of expression `x + Located { inner: \"hoge\", src_span: NoSrcSpan }',\n",
- " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_62910/594888127.py\", line 3, col 19-29\n",
+ " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_4482/594888127.py\", line 3, col 19-29\n",
" while inferring the type of expression `x + Located { inner: \"hoge\", src_span: NoSrcSpan }',\n",
- " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_62910/594888127.py\", line 3, col 19-29\n",
+ " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_4482/594888127.py\", line 3, col 19-29\n",
" while checking if types `binary!' and `Literal[\"hoge\"]' can be combined with numeric operator `Add',\n",
- " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_62910/594888127.py\", line 3, col 19-29\n",
+ " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_4482/594888127.py\", line 3, col 19-29\n",
"\n",
- "File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_62910/594888127.py\", line 3, col 19-29:\n",
+ "File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_4482/594888127.py\", line 3, col 19-29:\n",
"\n",
" 3 | problem.infer(x + \"hoge\")\n",
" ^^^^^^^^^^\n",
@@ -319,10 +319,10 @@
"id": "dc85ae1d",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:51.754458Z",
- "iopub.status.busy": "2026-04-16T07:03:51.754333Z",
- "iopub.status.idle": "2026-04-16T07:03:53.730095Z",
- "shell.execute_reply": "2026-04-16T07:03:53.729682Z"
+ "iopub.execute_input": "2026-06-04T02:50:23.205001Z",
+ "iopub.status.busy": "2026-06-04T02:50:23.204949Z",
+ "iopub.status.idle": "2026-06-04T02:50:23.497727Z",
+ "shell.execute_reply": "2026-06-04T02:50:23.497384Z"
}
},
"outputs": [
@@ -384,10 +384,10 @@
"id": "4cdd5152",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:53.731292Z",
- "iopub.status.busy": "2026-04-16T07:03:53.731198Z",
- "iopub.status.idle": "2026-04-16T07:03:53.749974Z",
- "shell.execute_reply": "2026-04-16T07:03:53.749636Z"
+ "iopub.execute_input": "2026-06-04T02:50:23.499191Z",
+ "iopub.status.busy": "2026-06-04T02:50:23.499100Z",
+ "iopub.status.idle": "2026-06-04T02:50:23.515515Z",
+ "shell.execute_reply": "2026-06-04T02:50:23.515202Z"
}
},
"outputs": [
@@ -415,10 +415,10 @@
"id": "28d877b6",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:53.751054Z",
- "iopub.status.busy": "2026-04-16T07:03:53.750995Z",
- "iopub.status.idle": "2026-04-16T07:03:53.881347Z",
- "shell.execute_reply": "2026-04-16T07:03:53.880994Z"
+ "iopub.execute_input": "2026-06-04T02:50:23.516867Z",
+ "iopub.status.busy": "2026-06-04T02:50:23.516806Z",
+ "iopub.status.idle": "2026-06-04T02:50:23.552444Z",
+ "shell.execute_reply": "2026-06-04T02:50:23.552110Z"
}
},
"outputs": [
@@ -446,10 +446,10 @@
"id": "f96d34c7",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:53.882501Z",
- "iopub.status.busy": "2026-04-16T07:03:53.882436Z",
- "iopub.status.idle": "2026-04-16T07:03:53.936561Z",
- "shell.execute_reply": "2026-04-16T07:03:53.936045Z"
+ "iopub.execute_input": "2026-06-04T02:50:23.553594Z",
+ "iopub.status.busy": "2026-06-04T02:50:23.553529Z",
+ "iopub.status.idle": "2026-06-04T02:50:23.578468Z",
+ "shell.execute_reply": "2026-06-04T02:50:23.576969Z"
}
},
"outputs": [
@@ -477,10 +477,10 @@
"id": "5adad4bc",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:53.937974Z",
- "iopub.status.busy": "2026-04-16T07:03:53.937884Z",
- "iopub.status.idle": "2026-04-16T07:03:54.072652Z",
- "shell.execute_reply": "2026-04-16T07:03:54.072134Z"
+ "iopub.execute_input": "2026-06-04T02:50:23.581255Z",
+ "iopub.status.busy": "2026-06-04T02:50:23.581165Z",
+ "iopub.status.idle": "2026-06-04T02:50:23.611463Z",
+ "shell.execute_reply": "2026-06-04T02:50:23.611142Z"
}
},
"outputs": [
@@ -508,10 +508,10 @@
"id": "6ab268e5",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:54.073869Z",
- "iopub.status.busy": "2026-04-16T07:03:54.073777Z",
- "iopub.status.idle": "2026-04-16T07:03:54.155655Z",
- "shell.execute_reply": "2026-04-16T07:03:54.155126Z"
+ "iopub.execute_input": "2026-06-04T02:50:23.612965Z",
+ "iopub.status.busy": "2026-06-04T02:50:23.612869Z",
+ "iopub.status.idle": "2026-06-04T02:50:23.638648Z",
+ "shell.execute_reply": "2026-06-04T02:50:23.638243Z"
}
},
"outputs": [
@@ -547,10 +547,10 @@
"id": "75aa08e2",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:54.157695Z",
- "iopub.status.busy": "2026-04-16T07:03:54.157496Z",
- "iopub.status.idle": "2026-04-16T07:03:54.180138Z",
- "shell.execute_reply": "2026-04-16T07:03:54.179701Z"
+ "iopub.execute_input": "2026-06-04T02:50:23.639831Z",
+ "iopub.status.busy": "2026-06-04T02:50:23.639774Z",
+ "iopub.status.idle": "2026-06-04T02:50:23.655826Z",
+ "shell.execute_reply": "2026-06-04T02:50:23.655457Z"
}
},
"outputs": [
@@ -560,13 +560,13 @@
"text": [
"Traceback (most recent last):\n",
" while inferring the type of expression `S * y',\n",
- " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_62910/2932800859.py\", line 3, col 19-24\n",
+ " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_4482/2932800859.py\", line 3, col 19-24\n",
" while inferring the type of expression `S * y',\n",
- " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_62910/2932800859.py\", line 3, col 19-24\n",
+ " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_4482/2932800859.py\", line 3, col 19-24\n",
" while checking if types `TotalDict[N; float]' and `Array[N, M; int!]' can be combined with numeric operator `Mul',\n",
- " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_62910/2932800859.py\", line 3, col 19-24\n",
+ " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_4482/2932800859.py\", line 3, col 19-24\n",
"\n",
- "File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_62910/2932800859.py\", line 3, col 19-24:\n",
+ "File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_4482/2932800859.py\", line 3, col 19-24:\n",
"\n",
" 3 | problem.infer(S * y)\n",
" ^^^^^\n",
@@ -589,10 +589,10 @@
"id": "17c3299c",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:54.181246Z",
- "iopub.status.busy": "2026-04-16T07:03:54.181178Z",
- "iopub.status.idle": "2026-04-16T07:03:54.201250Z",
- "shell.execute_reply": "2026-04-16T07:03:54.200873Z"
+ "iopub.execute_input": "2026-06-04T02:50:23.656985Z",
+ "iopub.status.busy": "2026-06-04T02:50:23.656925Z",
+ "iopub.status.idle": "2026-06-04T02:50:23.673397Z",
+ "shell.execute_reply": "2026-06-04T02:50:23.672977Z"
}
},
"outputs": [
@@ -602,13 +602,13 @@
"text": [
"Traceback (most recent last):\n",
" while inferring the type of expression `y + z',\n",
- " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_62910/3762455632.py\", line 3, col 19-24\n",
+ " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_4482/3762455632.py\", line 3, col 19-24\n",
" while inferring the type of expression `y + z',\n",
- " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_62910/3762455632.py\", line 3, col 19-24\n",
+ " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_4482/3762455632.py\", line 3, col 19-24\n",
" while checking if types `Array[N, M; int!]' and `Array[N, M, N; float!]' can be combined with numeric operator `Add',\n",
- " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_62910/3762455632.py\", line 3, col 19-24\n",
+ " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_4482/3762455632.py\", line 3, col 19-24\n",
"\n",
- "File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_62910/3762455632.py\", line 3, col 19-24:\n",
+ "File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_4482/3762455632.py\", line 3, col 19-24:\n",
"\n",
" 3 | problem.infer(y + z)\n",
" ^^^^^\n",
@@ -642,10 +642,10 @@
"id": "8654fb78",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:54.203129Z",
- "iopub.status.busy": "2026-04-16T07:03:54.202957Z",
- "iopub.status.idle": "2026-04-16T07:03:54.564392Z",
- "shell.execute_reply": "2026-04-16T07:03:54.563929Z"
+ "iopub.execute_input": "2026-06-04T02:50:23.674937Z",
+ "iopub.status.busy": "2026-06-04T02:50:23.674864Z",
+ "iopub.status.idle": "2026-06-04T02:50:23.750103Z",
+ "shell.execute_reply": "2026-06-04T02:50:23.749726Z"
}
},
"outputs": [
@@ -695,10 +695,10 @@
"id": "58b52480",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:54.565751Z",
- "iopub.status.busy": "2026-04-16T07:03:54.565661Z",
- "iopub.status.idle": "2026-04-16T07:03:54.844680Z",
- "shell.execute_reply": "2026-04-16T07:03:54.844197Z"
+ "iopub.execute_input": "2026-06-04T02:50:23.751107Z",
+ "iopub.status.busy": "2026-06-04T02:50:23.751052Z",
+ "iopub.status.idle": "2026-06-04T02:50:23.827769Z",
+ "shell.execute_reply": "2026-06-04T02:50:23.827403Z"
}
},
"outputs": [
@@ -750,10 +750,10 @@
"id": "ba29b19b",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:54.845879Z",
- "iopub.status.busy": "2026-04-16T07:03:54.845808Z",
- "iopub.status.idle": "2026-04-16T07:03:54.860047Z",
- "shell.execute_reply": "2026-04-16T07:03:54.859485Z"
+ "iopub.execute_input": "2026-06-04T02:50:23.828830Z",
+ "iopub.status.busy": "2026-06-04T02:50:23.828780Z",
+ "iopub.status.idle": "2026-06-04T02:50:23.837565Z",
+ "shell.execute_reply": "2026-06-04T02:50:23.837282Z"
}
},
"outputs": [
@@ -819,14 +819,14 @@
},
{
"cell_type": "code",
- "execution_count": 17,
+ "execution_count": 16,
"id": "6c81d662",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:55.024305Z",
- "iopub.status.busy": "2026-04-16T07:03:55.024197Z",
- "iopub.status.idle": "2026-04-16T07:03:55.241419Z",
- "shell.execute_reply": "2026-04-16T07:03:55.240558Z"
+ "iopub.execute_input": "2026-06-04T02:50:23.838440Z",
+ "iopub.status.busy": "2026-06-04T02:50:23.838393Z",
+ "iopub.status.idle": "2026-06-04T02:50:23.865758Z",
+ "shell.execute_reply": "2026-06-04T02:50:23.865421Z"
}
},
"outputs": [
@@ -839,7 +839,7 @@
"Comparison[binary!, Array[N, M; int!]]"
]
},
- "execution_count": 17,
+ "execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
@@ -850,14 +850,14 @@
},
{
"cell_type": "code",
- "execution_count": 18,
+ "execution_count": 17,
"id": "b43188e5",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:55.243486Z",
- "iopub.status.busy": "2026-04-16T07:03:55.243268Z",
- "iopub.status.idle": "2026-04-16T07:03:55.270778Z",
- "shell.execute_reply": "2026-04-16T07:03:55.269975Z"
+ "iopub.execute_input": "2026-06-04T02:50:23.866686Z",
+ "iopub.status.busy": "2026-06-04T02:50:23.866636Z",
+ "iopub.status.idle": "2026-06-04T02:50:23.880945Z",
+ "shell.execute_reply": "2026-06-04T02:50:23.880668Z"
}
},
"outputs": [
@@ -870,7 +870,7 @@
"bool"
]
},
- "execution_count": 18,
+ "execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
@@ -881,14 +881,14 @@
},
{
"cell_type": "code",
- "execution_count": 19,
+ "execution_count": 18,
"id": "49d90ad4",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:55.272857Z",
- "iopub.status.busy": "2026-04-16T07:03:55.272767Z",
- "iopub.status.idle": "2026-04-16T07:03:55.708341Z",
- "shell.execute_reply": "2026-04-16T07:03:55.707270Z"
+ "iopub.execute_input": "2026-06-04T02:50:23.881894Z",
+ "iopub.status.busy": "2026-06-04T02:50:23.881848Z",
+ "iopub.status.idle": "2026-06-04T02:50:23.923914Z",
+ "shell.execute_reply": "2026-06-04T02:50:23.923540Z"
}
},
"outputs": [
@@ -901,7 +901,7 @@
"Comparison[Array[N, M; float!], Array[N, M; float!]]"
]
},
- "execution_count": 19,
+ "execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
@@ -948,14 +948,14 @@
},
{
"cell_type": "code",
- "execution_count": 20,
+ "execution_count": 19,
"id": "c4eff827",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:55.712425Z",
- "iopub.status.busy": "2026-04-16T07:03:55.712281Z",
- "iopub.status.idle": "2026-04-16T07:03:56.171638Z",
- "shell.execute_reply": "2026-04-16T07:03:56.171245Z"
+ "iopub.execute_input": "2026-06-04T02:50:23.924937Z",
+ "iopub.status.busy": "2026-06-04T02:50:23.924884Z",
+ "iopub.status.idle": "2026-06-04T02:50:24.082990Z",
+ "shell.execute_reply": "2026-06-04T02:50:24.082574Z"
}
},
"outputs": [
@@ -963,7 +963,7 @@
"data": {
"text/latex": [
"$$\\begin{array}{rl}\n",
- "\\text{Problem}\\colon &\\text{Index and Keys Example}\\\\\\displaystyle \\min &\\displaystyle 0\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathop{\\mathtt{keys}}\\left(S\\right);\\left\\{0, 1\\right\\}\\right]&\\quad &\\text{a dictionary of }\\text{binary}\\text{ variables with key }\\mathop{\\mathtt{keys}}\\left(S\\right)\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}N&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\S&\\in \\mathop{\\mathrm{PartialDict}}\\left[N\\times L;\\mathbb{R}\\right]&\\quad &\\text{A partial dictionary of placeholders with keys }N\\times L\\text{, values in }\\mathbb{R}\\\\\\end{alignedat}\\\\&\\\\&\\text{Category Labels:}\\\\&\\qquad \\begin{array}{rl}\n",
+ "\\text{Problem}\\colon &\\text{Index and Keys Example}\\\\\\displaystyle \\min &\\displaystyle 0\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathop{\\mathtt{keys}}\\left(S\\right);\\left\\{0, 1\\right\\}\\right]&\\quad &\\text{a dictionary of }\\text{binary}\\text{ variables with key }\\mathop{\\mathtt{keys}}\\left(S\\right)\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}N&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\S&\\in \\mathop{\\mathrm{PartialDict}}\\left[\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in \\left\\{0,\\ldots ,N-1\\right\\},j\\in L\\right\\};\\mathbb{R}\\right]&\\quad &\\text{A partial dictionary of placeholders with keys }\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in \\left\\{0,\\ldots ,N-1\\right\\},j\\in L\\right\\}\\text{, values in }\\mathbb{R}\\\\\\end{alignedat}\\\\&\\\\&\\text{Category Labels:}\\\\&\\qquad \\begin{array}{rl}\n",
"L&\\text{Category Label}\\end{array}\n",
"\\end{array}\n",
"$$"
@@ -972,7 +972,7 @@
"Problem(name=\"Index and Keys Example\", sense=MINIMIZE, objective=0, constraints=[])"
]
},
- "execution_count": 20,
+ "execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
@@ -1047,14 +1047,14 @@
},
{
"cell_type": "code",
- "execution_count": 21,
+ "execution_count": 20,
"id": "1b8b9adc",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:56.172815Z",
- "iopub.status.busy": "2026-04-16T07:03:56.172757Z",
- "iopub.status.idle": "2026-04-16T07:03:56.567134Z",
- "shell.execute_reply": "2026-04-16T07:03:56.566711Z"
+ "iopub.execute_input": "2026-06-04T02:50:24.084007Z",
+ "iopub.status.busy": "2026-06-04T02:50:24.083951Z",
+ "iopub.status.idle": "2026-06-04T02:50:24.193734Z",
+ "shell.execute_reply": "2026-06-04T02:50:24.193454Z"
}
},
"outputs": [
@@ -1069,7 +1069,7 @@
"Problem(name=\"Sum Example\", sense=MINIMIZE, objective=sum(set(N).map(lambda (i: natural): a[i] * x[i])), constraints=[])"
]
},
- "execution_count": 21,
+ "execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
@@ -1101,14 +1101,14 @@
},
{
"cell_type": "code",
- "execution_count": 22,
+ "execution_count": 21,
"id": "49336545",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:56.568437Z",
- "iopub.status.busy": "2026-04-16T07:03:56.568380Z",
- "iopub.status.idle": "2026-04-16T07:03:56.698518Z",
- "shell.execute_reply": "2026-04-16T07:03:56.698103Z"
+ "iopub.execute_input": "2026-06-04T02:50:24.194923Z",
+ "iopub.status.busy": "2026-06-04T02:50:24.194868Z",
+ "iopub.status.idle": "2026-06-04T02:50:24.226006Z",
+ "shell.execute_reply": "2026-06-04T02:50:24.225748Z"
}
},
"outputs": [
@@ -1144,14 +1144,14 @@
},
{
"cell_type": "code",
- "execution_count": 23,
+ "execution_count": 22,
"id": "e35b793f",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:56.699627Z",
- "iopub.status.busy": "2026-04-16T07:03:56.699556Z",
- "iopub.status.idle": "2026-04-16T07:03:57.210870Z",
- "shell.execute_reply": "2026-04-16T07:03:57.210208Z"
+ "iopub.execute_input": "2026-06-04T02:50:24.226974Z",
+ "iopub.status.busy": "2026-06-04T02:50:24.226917Z",
+ "iopub.status.idle": "2026-06-04T02:50:24.324702Z",
+ "shell.execute_reply": "2026-06-04T02:50:24.324303Z"
}
},
"outputs": [
@@ -1166,7 +1166,7 @@
"Problem(name=\"Sum Example (Plain)\", sense=MINIMIZE, objective=sum(N.map(lambda (i: natural): a[i] * x[i])), constraints=[])"
]
},
- "execution_count": 23,
+ "execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
@@ -1191,14 +1191,14 @@
},
{
"cell_type": "code",
- "execution_count": 24,
+ "execution_count": 23,
"id": "a48f127c",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:57.212717Z",
- "iopub.status.busy": "2026-04-16T07:03:57.212570Z",
- "iopub.status.idle": "2026-04-16T07:03:57.769718Z",
- "shell.execute_reply": "2026-04-16T07:03:57.768569Z"
+ "iopub.execute_input": "2026-06-04T02:50:24.325753Z",
+ "iopub.status.busy": "2026-06-04T02:50:24.325699Z",
+ "iopub.status.idle": "2026-06-04T02:50:24.425816Z",
+ "shell.execute_reply": "2026-06-04T02:50:24.425509Z"
}
},
"outputs": [
@@ -1210,10 +1210,10 @@
"$$"
],
"text/plain": [
- "Problem(name=\"Sum Example (Plain, Alt)\", sense=MINIMIZE, objective=sum(N.map(lambda (i: natural): a[i] * x[i])), constraints=[])"
+ "Problem(name=\"Sum Example (Plain, Alt)\", sense=MINIMIZE, objective=sum(set(N).map(lambda (i: natural): a[i] * x[i])), constraints=[])"
]
},
- "execution_count": 24,
+ "execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
@@ -1249,14 +1249,14 @@
},
{
"cell_type": "code",
- "execution_count": 25,
+ "execution_count": 24,
"id": "788d6c0f",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:57.775980Z",
- "iopub.status.busy": "2026-04-16T07:03:57.775613Z",
- "iopub.status.idle": "2026-04-16T07:03:58.473966Z",
- "shell.execute_reply": "2026-04-16T07:03:58.472860Z"
+ "iopub.execute_input": "2026-06-04T02:50:24.427027Z",
+ "iopub.status.busy": "2026-06-04T02:50:24.426970Z",
+ "iopub.status.idle": "2026-06-04T02:50:24.577056Z",
+ "shell.execute_reply": "2026-06-04T02:50:24.576738Z"
}
},
"outputs": [
@@ -1271,7 +1271,7 @@
"Problem(name=\"Even Sum Example\", sense=MINIMIZE, objective=sum(set(N.filter(lambda i: i % 2 == 0)).map(lambda (i: natural): a[i] * x[i])), constraints=[])"
]
},
- "execution_count": 25,
+ "execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
@@ -1298,14 +1298,14 @@
},
{
"cell_type": "code",
- "execution_count": 26,
+ "execution_count": 25,
"id": "718ac630",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:58.475915Z",
- "iopub.status.busy": "2026-04-16T07:03:58.475714Z",
- "iopub.status.idle": "2026-04-16T07:03:58.995704Z",
- "shell.execute_reply": "2026-04-16T07:03:58.994840Z"
+ "iopub.execute_input": "2026-06-04T02:50:24.578230Z",
+ "iopub.status.busy": "2026-06-04T02:50:24.578175Z",
+ "iopub.status.idle": "2026-06-04T02:50:24.716151Z",
+ "shell.execute_reply": "2026-06-04T02:50:24.715740Z"
}
},
"outputs": [
@@ -1317,10 +1317,10 @@
"$$"
],
"text/plain": [
- "Problem(name=\"Even Sum Example (Plain)\", sense=MINIMIZE, objective=sum(N.filter(lambda i: i % 2 == 0).map(lambda (i: natural): a[i] * x[i])), constraints=[])"
+ "Problem(name=\"Even Sum Example (Plain)\", sense=MINIMIZE, objective=sum(set(N.filter(lambda i: i % 2 == 0)).map(lambda (i: natural): a[i] * x[i])), constraints=[])"
]
},
- "execution_count": 26,
+ "execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
@@ -1350,14 +1350,14 @@
},
{
"cell_type": "code",
- "execution_count": 27,
+ "execution_count": 26,
"id": "c5cf959f",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:58.996950Z",
- "iopub.status.busy": "2026-04-16T07:03:58.996858Z",
- "iopub.status.idle": "2026-04-16T07:03:59.925280Z",
- "shell.execute_reply": "2026-04-16T07:03:59.924874Z"
+ "iopub.execute_input": "2026-06-04T02:50:24.717102Z",
+ "iopub.status.busy": "2026-06-04T02:50:24.717049Z",
+ "iopub.status.idle": "2026-06-04T02:50:24.875894Z",
+ "shell.execute_reply": "2026-06-04T02:50:24.875552Z"
}
},
"outputs": [
@@ -1372,7 +1372,7 @@
"Problem(name=\"Double Sum Example\", sense=MINIMIZE, objective=sum(set(N.flat_map(lambda (i: natural): M.map(lambda (j: natural): (i, j)))).map(lambda ((i, j): Tuple[natural, natural]): Q[i, j])), constraints=[])"
]
},
- "execution_count": 27,
+ "execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
@@ -1400,14 +1400,14 @@
},
{
"cell_type": "code",
- "execution_count": 28,
+ "execution_count": 27,
"id": "54bec6e0",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:03:59.926786Z",
- "iopub.status.busy": "2026-04-16T07:03:59.926705Z",
- "iopub.status.idle": "2026-04-16T07:04:01.216521Z",
- "shell.execute_reply": "2026-04-16T07:04:01.215347Z"
+ "iopub.execute_input": "2026-06-04T02:50:24.877112Z",
+ "iopub.status.busy": "2026-06-04T02:50:24.877054Z",
+ "iopub.status.idle": "2026-06-04T02:50:25.014738Z",
+ "shell.execute_reply": "2026-06-04T02:50:25.014390Z"
}
},
"outputs": [
@@ -1422,7 +1422,7 @@
"Problem(name=\"Double Sum Example (Alt)\", sense=MINIMIZE, objective=sum(set(set((N, M))).map(lambda ((i, j): Tuple[natural, natural]): Q[i, j])), constraints=[])"
]
},
- "execution_count": 28,
+ "execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
@@ -1450,14 +1450,14 @@
},
{
"cell_type": "code",
- "execution_count": 29,
+ "execution_count": 28,
"id": "7bd1e8b4",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:01.220142Z",
- "iopub.status.busy": "2026-04-16T07:04:01.219966Z",
- "iopub.status.idle": "2026-04-16T07:04:01.710462Z",
- "shell.execute_reply": "2026-04-16T07:04:01.710067Z"
+ "iopub.execute_input": "2026-06-04T02:50:25.015874Z",
+ "iopub.status.busy": "2026-06-04T02:50:25.015824Z",
+ "iopub.status.idle": "2026-06-04T02:50:25.152224Z",
+ "shell.execute_reply": "2026-06-04T02:50:25.151823Z"
}
},
"outputs": [
@@ -1472,7 +1472,7 @@
"Problem(name=\"Double Sum Example (Alt)\", sense=MINIMIZE, objective=sum(set((N, M)).map(lambda ((i, j): Tuple[natural, natural]): Q[i, j])), constraints=[])"
]
},
- "execution_count": 29,
+ "execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
@@ -1502,14 +1502,14 @@
},
{
"cell_type": "code",
- "execution_count": 30,
+ "execution_count": 29,
"id": "b37473be",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:01.711565Z",
- "iopub.status.busy": "2026-04-16T07:04:01.711505Z",
- "iopub.status.idle": "2026-04-16T07:04:02.364653Z",
- "shell.execute_reply": "2026-04-16T07:04:02.364212Z"
+ "iopub.execute_input": "2026-06-04T02:50:25.153210Z",
+ "iopub.status.busy": "2026-06-04T02:50:25.153159Z",
+ "iopub.status.idle": "2026-06-04T02:50:25.360696Z",
+ "shell.execute_reply": "2026-06-04T02:50:25.360287Z"
}
},
"outputs": [
@@ -1524,7 +1524,7 @@
"Problem(name=\"Filtered Double Sum Example\", sense=MINIMIZE, objective=sum(set(N.flat_map(lambda (i: natural): M.map(lambda (j: natural): (i, j))).filter(lambda (i, j): (i + j) % 2 == 0)).map(lambda ((i, j): Tuple[natural, natural]): Q[i, j])), constraints=[])"
]
},
- "execution_count": 30,
+ "execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
@@ -1557,14 +1557,14 @@
},
{
"cell_type": "code",
- "execution_count": 31,
+ "execution_count": 30,
"id": "cc27b233",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:02.365890Z",
- "iopub.status.busy": "2026-04-16T07:04:02.365829Z",
- "iopub.status.idle": "2026-04-16T07:04:02.966887Z",
- "shell.execute_reply": "2026-04-16T07:04:02.966497Z"
+ "iopub.execute_input": "2026-06-04T02:50:25.361739Z",
+ "iopub.status.busy": "2026-06-04T02:50:25.361687Z",
+ "iopub.status.idle": "2026-06-04T02:50:25.523378Z",
+ "shell.execute_reply": "2026-06-04T02:50:25.523087Z"
}
},
"outputs": [
@@ -1576,10 +1576,10 @@
"$$"
],
"text/plain": [
- "Problem(name=\"Filtered Double Sum Example (Plain)\", sense=MINIMIZE, objective=sum(set((N, M)).filter(lambda (i, j): (i + j) % 2 == 0).map(lambda ((i, j): Tuple[natural, natural]): Q[i, j])), constraints=[])"
+ "Problem(name=\"Filtered Double Sum Example (Plain)\", sense=MINIMIZE, objective=sum(set(set((N, M)).filter(lambda (i, j): (i + j) % 2 == 0)).map(lambda ((i, j): Tuple[natural, natural]): Q[i, j])), constraints=[])"
]
},
- "execution_count": 31,
+ "execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
@@ -1607,14 +1607,14 @@
},
{
"cell_type": "code",
- "execution_count": 32,
+ "execution_count": 31,
"id": "38abd485",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:02.968231Z",
- "iopub.status.busy": "2026-04-16T07:04:02.968167Z",
- "iopub.status.idle": "2026-04-16T07:04:03.250766Z",
- "shell.execute_reply": "2026-04-16T07:04:03.250361Z"
+ "iopub.execute_input": "2026-06-04T02:50:25.524554Z",
+ "iopub.status.busy": "2026-06-04T02:50:25.524498Z",
+ "iopub.status.idle": "2026-06-04T02:50:25.632401Z",
+ "shell.execute_reply": "2026-06-04T02:50:25.632122Z"
}
},
"outputs": [
@@ -1624,10 +1624,10 @@
"$$\\sum _{i=0}^{N-1}{\\sum _{\\substack{j=0\\\\\\left(i+j\\right)\\bmod 2=0}}^{M-1}{{Q}_{i,j}}}$$"
],
"text/plain": [
- "Expression(sum(N.flat_map(lambda i: M.map(lambda j: (i, j))).filter(lambda (i, j): (i + j) % 2 == 0).map(lambda (i, j): Q[i, j])))"
+ "Expression(sum(set(N.flat_map(lambda i: M.map(lambda j: (i, j))).filter(lambda (i, j): (i + j) % 2 == 0)).map(lambda (i, j): Q[i, j])))"
]
},
- "execution_count": 32,
+ "execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
diff --git a/docs/en/basics/instance_generation.ipynb b/docs/en/basics/instance_generation.ipynb
index 1e3eb7fe..31b51bdd 100644
--- a/docs/en/basics/instance_generation.ipynb
+++ b/docs/en/basics/instance_generation.ipynb
@@ -30,10 +30,10 @@
"id": "2c684576",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:14.106336Z",
- "iopub.status.busy": "2026-03-24T02:05:14.106269Z",
- "iopub.status.idle": "2026-03-24T02:05:14.479929Z",
- "shell.execute_reply": "2026-03-24T02:05:14.479587Z"
+ "iopub.execute_input": "2026-06-04T02:50:15.758033Z",
+ "iopub.status.busy": "2026-06-04T02:50:15.757796Z",
+ "iopub.status.idle": "2026-06-04T02:50:16.329492Z",
+ "shell.execute_reply": "2026-06-04T02:50:16.329081Z"
}
},
"outputs": [
@@ -43,11 +43,11 @@
"$$\\begin{array}{rl}\n",
"\\text{Problem}\\colon &\\text{Knapsack with Synergy}\\\\\\displaystyle \\max &\\displaystyle \\sum _{i=0}^{N-1}{{v}_{i}\\cdot {x}_{i}}+\\sum _{\\left\\langle i,j\\right\\rangle \\in \\mathop{\\mathtt{keys}}\\left(s\\right)}{{s}_{i,j}\\cdot {x}_{i}\\cdot {x}_{j}}\\\\&\\\\\\text{s.t.}&\\\\&\\begin{aligned}\n",
"\\text{weight}&\\quad \\displaystyle \\sum _{i=0}^{N-1}{{w}_{i}\\cdot {x}_{i}}\\leq W\\end{aligned}\n",
- "\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{Array}}\\left[N;\\left\\{0, 1\\right\\}\\right]&\\quad &1\\text{-dim binary variable}\\\\&&&\\text{Item selection variables}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}N&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\s&\\in \\mathop{\\mathrm{PartialDict}}\\left[N\\times N;\\mathbb{R}\\right]&\\quad &\\text{A partial dictionary of placeholders with keys }N\\times N\\text{, values in }\\mathbb{R}\\\\&&&\\text{Synergy bonus between items}\\\\&&&\\\\v&\\in \\mathop{\\mathrm{Array}}\\left[N;\\mathbb{R}\\right]&\\quad &1\\text{-dimensional array of placeholders with elements in }\\mathbb{R}\\\\&&&\\text{Values of the items}\\\\&&&\\\\W&\\in \\mathbb{R}&\\quad &\\text{A scalar placeholder in }\\mathbb{R}\\\\&&&\\text{Weight limit of the problem}\\\\&&&\\\\w&\\in \\mathop{\\mathrm{Array}}\\left[N;\\mathbb{R}\\right]&\\quad &1\\text{-dimensional array of placeholders with elements in }\\mathbb{R}\\\\&&&\\text{Weights of the items}\\\\\\end{alignedat}\\end{array}\n",
+ "\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{Array}}\\left[N;\\left\\{0, 1\\right\\}\\right]&\\quad &1\\text{-dim binary variable}\\\\&&&\\text{Item selection variables}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}N&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\s&\\in \\mathop{\\mathrm{PartialDict}}\\left[\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in \\left\\{0,\\ldots ,N-1\\right\\},j\\in \\left\\{0,\\ldots ,N-1\\right\\}\\right\\};\\mathbb{R}\\right]&\\quad &\\text{A partial dictionary of placeholders with keys }\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in \\left\\{0,\\ldots ,N-1\\right\\},j\\in \\left\\{0,\\ldots ,N-1\\right\\}\\right\\}\\text{, values in }\\mathbb{R}\\\\&&&\\text{Synergy bonus between items}\\\\&&&\\\\v&\\in \\mathop{\\mathrm{Array}}\\left[N;\\mathbb{R}\\right]&\\quad &1\\text{-dimensional array of placeholders with elements in }\\mathbb{R}\\\\&&&\\text{Values of the items}\\\\&&&\\\\W&\\in \\mathbb{R}&\\quad &\\text{A scalar placeholder in }\\mathbb{R}\\\\&&&\\text{Weight limit of the problem}\\\\&&&\\\\w&\\in \\mathop{\\mathrm{Array}}\\left[N;\\mathbb{R}\\right]&\\quad &1\\text{-dimensional array of placeholders with elements in }\\mathbb{R}\\\\&&&\\text{Weights of the items}\\\\\\end{alignedat}\\end{array}\n",
"$$"
],
"text/plain": [
- "Problem(name=\"Knapsack with Synergy\", sense=MAXIMIZE, objective=sum(N.map(lambda (i: natural): v[i] * x[i])) + sum(s.keys().map(lambda ((i, j): ElementOf[set((N, N))]): s[i, j] * x[i] * x[j])), constraints={weight: [Constraint(name=\"weight\", sense=LESS_THAN_EQUAL, left=sum(N.map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Float)),],})"
+ "Problem(name=\"Knapsack with Synergy\", sense=MAXIMIZE, objective=sum(set(N).map(lambda (i: natural): v[i] * x[i])) + sum(set(s.keys()).map(lambda ((i, j): ElementOf[set((N, N))]): s[i, j] * x[i] * x[j])), constraints={weight: [Constraint(name=\"weight\", sense=LESS_THAN_EQUAL, left=sum(set(N).map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Float)),],})"
]
},
"execution_count": 1,
@@ -109,10 +109,10 @@
"id": "0a5c6de3",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:14.481204Z",
- "iopub.status.busy": "2026-03-24T02:05:14.481103Z",
- "iopub.status.idle": "2026-03-24T02:05:14.483607Z",
- "shell.execute_reply": "2026-03-24T02:05:14.483299Z"
+ "iopub.execute_input": "2026-06-04T02:50:16.330577Z",
+ "iopub.status.busy": "2026-06-04T02:50:16.330493Z",
+ "iopub.status.idle": "2026-06-04T02:50:16.332797Z",
+ "shell.execute_reply": "2026-06-04T02:50:16.332455Z"
}
},
"outputs": [],
@@ -163,10 +163,10 @@
"id": "ee4308f1",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:14.484698Z",
- "iopub.status.busy": "2026-03-24T02:05:14.484640Z",
- "iopub.status.idle": "2026-03-24T02:05:15.313963Z",
- "shell.execute_reply": "2026-03-24T02:05:15.313614Z"
+ "iopub.execute_input": "2026-06-04T02:50:16.333761Z",
+ "iopub.status.busy": "2026-06-04T02:50:16.333714Z",
+ "iopub.status.idle": "2026-06-04T02:50:16.629273Z",
+ "shell.execute_reply": "2026-06-04T02:50:16.628987Z"
}
},
"outputs": [
@@ -248,10 +248,10 @@
"id": "6b03e399",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:15.315112Z",
- "iopub.status.busy": "2026-03-24T02:05:15.315011Z",
- "iopub.status.idle": "2026-03-24T02:05:15.320236Z",
- "shell.execute_reply": "2026-03-24T02:05:15.319907Z"
+ "iopub.execute_input": "2026-06-04T02:50:16.630407Z",
+ "iopub.status.busy": "2026-06-04T02:50:16.630319Z",
+ "iopub.status.idle": "2026-06-04T02:50:16.635989Z",
+ "shell.execute_reply": "2026-06-04T02:50:16.635692Z"
}
},
"outputs": [
@@ -455,10 +455,10 @@
"id": "59256385",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:15.321269Z",
- "iopub.status.busy": "2026-03-24T02:05:15.321214Z",
- "iopub.status.idle": "2026-03-24T02:05:15.326594Z",
- "shell.execute_reply": "2026-03-24T02:05:15.326281Z"
+ "iopub.execute_input": "2026-06-04T02:50:16.636952Z",
+ "iopub.status.busy": "2026-06-04T02:50:16.636899Z",
+ "iopub.status.idle": "2026-06-04T02:50:16.638724Z",
+ "shell.execute_reply": "2026-06-04T02:50:16.638352Z"
}
},
"outputs": [
@@ -492,10 +492,10 @@
"id": "201474f3",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:15.327716Z",
- "iopub.status.busy": "2026-03-24T02:05:15.327656Z",
- "iopub.status.idle": "2026-03-24T02:05:15.712228Z",
- "shell.execute_reply": "2026-03-24T02:05:15.711893Z"
+ "iopub.execute_input": "2026-06-04T02:50:16.639551Z",
+ "iopub.status.busy": "2026-06-04T02:50:16.639502Z",
+ "iopub.status.idle": "2026-06-04T02:50:16.753278Z",
+ "shell.execute_reply": "2026-06-04T02:50:16.752891Z"
}
},
"outputs": [],
@@ -555,10 +555,10 @@
"id": "90434a42",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:15.713668Z",
- "iopub.status.busy": "2026-03-24T02:05:15.713595Z",
- "iopub.status.idle": "2026-03-24T02:05:15.737562Z",
- "shell.execute_reply": "2026-03-24T02:05:15.737202Z"
+ "iopub.execute_input": "2026-06-04T02:50:16.754467Z",
+ "iopub.status.busy": "2026-06-04T02:50:16.754408Z",
+ "iopub.status.idle": "2026-06-04T02:50:16.791947Z",
+ "shell.execute_reply": "2026-06-04T02:50:16.791670Z"
}
},
"outputs": [
@@ -630,10 +630,10 @@
"id": "135be9f2",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:15.738711Z",
- "iopub.status.busy": "2026-03-24T02:05:15.738644Z",
- "iopub.status.idle": "2026-03-24T02:05:15.791763Z",
- "shell.execute_reply": "2026-03-24T02:05:15.791431Z"
+ "iopub.execute_input": "2026-06-04T02:50:16.793129Z",
+ "iopub.status.busy": "2026-06-04T02:50:16.793072Z",
+ "iopub.status.idle": "2026-06-04T02:50:16.812568Z",
+ "shell.execute_reply": "2026-06-04T02:50:16.812228Z"
}
},
"outputs": [
@@ -818,7 +818,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.11"
+ "version": "3.11.14"
}
},
"nbformat": 4,
diff --git a/docs/en/basics/modeling.ipynb b/docs/en/basics/modeling.ipynb
index d22916f9..b6d804ba 100644
--- a/docs/en/basics/modeling.ipynb
+++ b/docs/en/basics/modeling.ipynb
@@ -17,10 +17,10 @@
"id": "b08e6532",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:18.322485Z",
- "iopub.status.busy": "2026-03-24T02:05:18.322275Z",
- "iopub.status.idle": "2026-03-24T02:05:18.331695Z",
- "shell.execute_reply": "2026-03-24T02:05:18.331323Z"
+ "iopub.execute_input": "2026-06-04T02:50:19.041237Z",
+ "iopub.status.busy": "2026-06-04T02:50:19.041010Z",
+ "iopub.status.idle": "2026-06-04T02:50:19.059305Z",
+ "shell.execute_reply": "2026-06-04T02:50:19.058864Z"
}
},
"outputs": [],
@@ -55,10 +55,10 @@
"id": "ae36f6cb",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:18.332840Z",
- "iopub.status.busy": "2026-03-24T02:05:18.332782Z",
- "iopub.status.idle": "2026-03-24T02:05:18.383874Z",
- "shell.execute_reply": "2026-03-24T02:05:18.383231Z"
+ "iopub.execute_input": "2026-06-04T02:50:19.060431Z",
+ "iopub.status.busy": "2026-06-04T02:50:19.060374Z",
+ "iopub.status.idle": "2026-06-04T02:50:19.113880Z",
+ "shell.execute_reply": "2026-06-04T02:50:19.113482Z"
}
},
"outputs": [
@@ -100,10 +100,10 @@
"id": "2f314ff6",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:18.384853Z",
- "iopub.status.busy": "2026-03-24T02:05:18.384791Z",
- "iopub.status.idle": "2026-03-24T02:05:18.406343Z",
- "shell.execute_reply": "2026-03-24T02:05:18.406018Z"
+ "iopub.execute_input": "2026-06-04T02:50:19.114956Z",
+ "iopub.status.busy": "2026-06-04T02:50:19.114904Z",
+ "iopub.status.idle": "2026-06-04T02:50:19.139144Z",
+ "shell.execute_reply": "2026-06-04T02:50:19.138808Z"
}
},
"outputs": [
@@ -135,8 +135,7 @@
"id": "e4aecaa3",
"metadata": {},
"source": [
- "You can see that the existing term was not replaced; instead, $y$ was added and the new objective is $x + y$.\n",
- "If you might need to remove objective terms later, keep a list of terms in Python and set the objective from that list when needed.\n",
+ "You can see that the existing term is not replaced; instead, $y$ is added and the new objective is $x + y$.\n",
"\n",
":::{admonition} Subtracting terms from the objective\n",
":class: tip\n",
@@ -144,19 +143,65 @@
"Since JijModeling 2.3.1, you can also \"subtract\" scalar {py:class}`~jijmodeling.Expression` objects from the objective by using the {py:meth}`-= ` operator on a {py:class}`~jijmodeling.Problem`.\n",
":::\n",
"\n",
- "As a more practical example, let's set the objective for the knapsack problem."
+ ":::{admonition} Replacing the objective\n",
+ ":class: tip\n",
+ "Since JijModeling 2.5.0, you can assign an expression directly to `Problem.objective` to discard the previous objective and replace it with a new one.\n",
+ ":::"
]
},
{
"cell_type": "code",
"execution_count": 4,
+ "id": "065c9053",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-04T02:50:19.140173Z",
+ "iopub.status.busy": "2026-06-04T02:50:19.140120Z",
+ "iopub.status.idle": "2026-06-04T02:50:19.159880Z",
+ "shell.execute_reply": "2026-06-04T02:50:19.159476Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$\\begin{array}{rl}\n",
+ "\\text{Problem}\\colon &\\text{Sample}\\\\\\displaystyle \\min &\\displaystyle y\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\left\\{0, 1\\right\\}&\\quad &0\\text{-dim binary variable}\\\\y&\\in \\left\\{0, 1\\right\\}&\\quad &0\\text{-dim binary variable}\\\\\\end{alignedat}\\end{array}\n",
+ "$$"
+ ],
+ "text/plain": [
+ "Problem(name=\"Sample\", sense=MINIMIZE, objective=y, constraints=[])"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "problem.objective = y\n",
+ "\n",
+ "problem"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ec35952c",
+ "metadata": {},
+ "source": [
+ "As a more practical example, let's set the objective for the knapsack problem."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
"id": "71a3019e",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:18.407562Z",
- "iopub.status.busy": "2026-03-24T02:05:18.407499Z",
- "iopub.status.idle": "2026-03-24T02:05:18.505954Z",
- "shell.execute_reply": "2026-03-24T02:05:18.505541Z"
+ "iopub.execute_input": "2026-06-04T02:50:19.160847Z",
+ "iopub.status.busy": "2026-06-04T02:50:19.160793Z",
+ "iopub.status.idle": "2026-06-04T02:50:19.288070Z",
+ "shell.execute_reply": "2026-06-04T02:50:19.287785Z"
}
},
"outputs": [
@@ -168,10 +213,10 @@
"$$"
],
"text/plain": [
- "Problem(name=\"Knapsack Problem\", sense=MAXIMIZE, objective=sum(N.map(lambda (i: natural): v[i] * x[i])), constraints=[])"
+ "Problem(name=\"Knapsack Problem\", sense=MAXIMIZE, objective=sum(set(N).map(lambda (i: natural): v[i] * x[i])), constraints=[])"
]
},
- "execution_count": 4,
+ "execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
@@ -227,14 +272,14 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": 6,
"id": "ec207a7d",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:18.507453Z",
- "iopub.status.busy": "2026-03-24T02:05:18.507378Z",
- "iopub.status.idle": "2026-03-24T02:05:18.646245Z",
- "shell.execute_reply": "2026-03-24T02:05:18.645925Z"
+ "iopub.execute_input": "2026-06-04T02:50:19.289257Z",
+ "iopub.status.busy": "2026-06-04T02:50:19.289201Z",
+ "iopub.status.idle": "2026-06-04T02:50:19.433001Z",
+ "shell.execute_reply": "2026-06-04T02:50:19.432684Z"
}
},
"outputs": [
@@ -248,10 +293,10 @@
"$$"
],
"text/plain": [
- "Problem(name=\"Knapsack Problem\", sense=MAXIMIZE, objective=sum(N.map(lambda (i: natural): v[i] * x[i])), constraints={weight: [Constraint(name=\"weight\", sense=LESS_THAN_EQUAL, left=sum(N.map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Float)),],})"
+ "Problem(name=\"Knapsack Problem\", sense=MAXIMIZE, objective=sum(set(N).map(lambda (i: natural): v[i] * x[i])), constraints={weight: [Constraint(name=\"weight\", sense=LESS_THAN_EQUAL, left=sum(set(N).map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Float)),],})"
]
},
- "execution_count": 5,
+ "execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
@@ -323,14 +368,14 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": 7,
"id": "e9d70317",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:18.647477Z",
- "iopub.status.busy": "2026-03-24T02:05:18.647411Z",
- "iopub.status.idle": "2026-03-24T02:05:19.025472Z",
- "shell.execute_reply": "2026-03-24T02:05:19.025070Z"
+ "iopub.execute_input": "2026-06-04T02:50:19.434342Z",
+ "iopub.status.busy": "2026-06-04T02:50:19.434283Z",
+ "iopub.status.idle": "2026-06-04T02:50:20.104180Z",
+ "shell.execute_reply": "2026-06-04T02:50:20.103796Z"
}
},
"outputs": [
@@ -340,16 +385,16 @@
"$$\\begin{array}{rl}\n",
"\\text{Problem}\\colon &\\text{TSP, Decorated}\\\\\\displaystyle \\min &\\displaystyle \\sum _{t=0}^{\\#C-1}{\\sum _{i\\in C}{\\sum _{j\\in C}{{d}_{i,j}\\cdot {x}_{t,i}\\cdot {x}_{\\left(t+1\\right)\\bmod \\#C,j}}}}\\\\&\\\\\\text{s.t.}&\\\\&\\begin{aligned}\n",
"\\text{one city}&\\quad \\displaystyle \\sum _{i\\in C}{{x}_{t,i}}=1\\quad \\forall t\\;\\text{s.t.}\\;t\\in \\left\\{0,\\ldots ,\\#C-1\\right\\}\\\\\\text{one time}&\\quad \\displaystyle \\sum _{t=0}^{\\#C-1}{{x}_{t,i}}=1\\quad \\forall i\\;\\text{s.t.}\\;i\\in C\\end{aligned}\n",
- "\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\#C\\times C;\\left\\{0, 1\\right\\}\\right]&\\quad &\\text{a dictionary of }\\text{binary}\\text{ variables with key }\\#C\\times C\\\\&&&\\text{$x_{t,i} = 1$ if City $i$ is visited at time $t$}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}d&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathrm{C}\\times \\mathrm{C};\\mathbb{R}\\right]&\\quad &\\text{A total dictionary of placeholders with keys }\\left(\\mathrm{C},\\mathrm{C}\\right)\\text{, values in }\\mathbb{R}\\\\&&&\\text{distance between cities}\\\\\\end{alignedat}\\\\&\\\\&\\text{Category Labels:}\\\\&\\qquad \\begin{array}{rl}\n",
+ "\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in \\left\\{0,\\ldots ,\\#C-1\\right\\},j\\in C\\right\\};\\left\\{0, 1\\right\\}\\right]&\\quad &\\text{a dictionary of }\\text{binary}\\text{ variables with key }\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in \\left\\{0,\\ldots ,\\#C-1\\right\\},j\\in C\\right\\}\\\\&&&\\text{$x_{t,i} = 1$ if City $i$ is visited at time $t$}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}d&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathrm{C}\\times \\mathrm{C};\\mathbb{R}\\right]&\\quad &\\text{A total dictionary of placeholders with keys }\\left(\\mathrm{C},\\mathrm{C}\\right)\\text{, values in }\\mathbb{R}\\\\&&&\\text{distance between cities}\\\\\\end{alignedat}\\\\&\\\\&\\text{Category Labels:}\\\\&\\qquad \\begin{array}{rl}\n",
"C&\\text{Labels of Cities}\\end{array}\n",
"\\end{array}\n",
"$$"
],
"text/plain": [
- "Problem(name=\"TSP, Decorated\", sense=MINIMIZE, objective=sum(C.count().flat_map(lambda (t: natural): C.map(lambda (i: CategoryLabel(\"C\")): (t, i))).flat_map(lambda ((t, i): Tuple[natural, CategoryLabel(\"C\")]): C.map(lambda (j: CategoryLabel(\"C\")): (t, i, j))).map(lambda ((t, i, j): Tuple[natural, CategoryLabel(\"C\"), CategoryLabel(\"C\")]): d[i, j] * x[t, i] * x[(t + 1) % C.count(), j])), constraints={one city: [Constraint(name=\"one city\", , lambda t: sum(C.map(lambda (i: CategoryLabel(\"C\")): x[t, i])) == 1, domain=set(C.count())),],one time: [Constraint(name=\"one time\", , lambda i: sum(C.count().map(lambda (t: natural): x[t, i])) == 1, domain=C),],})"
+ "Problem(name=\"TSP, Decorated\", sense=MINIMIZE, objective=sum(set(C.count().flat_map(lambda (t: natural): C.map(lambda (i: CategoryLabel(\"C\")): (t, i))).flat_map(lambda ((t, i): Tuple[natural, CategoryLabel(\"C\")]): C.map(lambda (j: CategoryLabel(\"C\")): (t, i, j)))).map(lambda ((t, i, j): Tuple[natural, CategoryLabel(\"C\"), CategoryLabel(\"C\")]): d[i, j] * x[t, i] * x[(t + 1) % C.count(), j])), constraints={one city: [Constraint(name=\"one city\", , lambda t: sum(set(C).map(lambda (i: CategoryLabel(\"C\")): x[t, i])) == 1, domain=set(C.count())),],one time: [Constraint(name=\"one time\", , lambda i: sum(set(C.count()).map(lambda (t: natural): x[t, i])) == 1, domain=C),],})"
]
},
- "execution_count": 6,
+ "execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
@@ -391,14 +436,14 @@
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": 8,
"id": "a4643a1c",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:19.026595Z",
- "iopub.status.busy": "2026-03-24T02:05:19.026530Z",
- "iopub.status.idle": "2026-03-24T02:05:19.343648Z",
- "shell.execute_reply": "2026-03-24T02:05:19.343340Z"
+ "iopub.execute_input": "2026-06-04T02:50:20.105295Z",
+ "iopub.status.busy": "2026-06-04T02:50:20.105237Z",
+ "iopub.status.idle": "2026-06-04T02:50:20.678690Z",
+ "shell.execute_reply": "2026-06-04T02:50:20.678279Z"
}
},
"outputs": [
@@ -408,16 +453,16 @@
"$$\\begin{array}{rl}\n",
"\\text{Problem}\\colon &\\text{TSP, Decorated}\\\\\\displaystyle \\min &\\displaystyle \\sum _{t=0}^{\\#C-1}{\\sum _{i\\in C}{\\sum _{j\\in C}{{d}_{i,j}\\cdot {x}_{t,i}\\cdot {x}_{\\left(t+1\\right)\\bmod \\#C,j}}}}\\\\&\\\\\\text{s.t.}&\\\\&\\begin{aligned}\n",
"\\text{one city}&\\quad \\displaystyle \\sum _{i\\in C}{{x}_{t,i}}=1\\quad \\forall t\\;\\text{s.t.}\\;t\\in \\left\\{0,\\ldots ,\\#C-1\\right\\}\\\\\\text{one time}&\\quad \\displaystyle \\sum _{t=0}^{\\#C-1}{{x}_{t,i}}=1\\quad \\forall i\\;\\text{s.t.}\\;i\\in C\\end{aligned}\n",
- "\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\#C\\times C;\\left\\{0, 1\\right\\}\\right]&\\quad &\\text{a dictionary of }\\text{binary}\\text{ variables with key }\\#C\\times C\\\\&&&\\text{$x_{t,i} = 1$ if City $i$ is visited at time $t$}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}d&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathrm{C}\\times \\mathrm{C};\\mathbb{R}\\right]&\\quad &\\text{A total dictionary of placeholders with keys }\\left(\\mathrm{C},\\mathrm{C}\\right)\\text{, values in }\\mathbb{R}\\\\&&&\\text{distance between cities}\\\\\\end{alignedat}\\\\&\\\\&\\text{Category Labels:}\\\\&\\qquad \\begin{array}{rl}\n",
+ "\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in \\left\\{0,\\ldots ,\\#C-1\\right\\},j\\in C\\right\\};\\left\\{0, 1\\right\\}\\right]&\\quad &\\text{a dictionary of }\\text{binary}\\text{ variables with key }\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in \\left\\{0,\\ldots ,\\#C-1\\right\\},j\\in C\\right\\}\\\\&&&\\text{$x_{t,i} = 1$ if City $i$ is visited at time $t$}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}d&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathrm{C}\\times \\mathrm{C};\\mathbb{R}\\right]&\\quad &\\text{A total dictionary of placeholders with keys }\\left(\\mathrm{C},\\mathrm{C}\\right)\\text{, values in }\\mathbb{R}\\\\&&&\\text{distance between cities}\\\\\\end{alignedat}\\\\&\\\\&\\text{Category Labels:}\\\\&\\qquad \\begin{array}{rl}\n",
"C&\\text{Labels of Cities}\\end{array}\n",
"\\end{array}\n",
"$$"
],
"text/plain": [
- "Problem(name=\"TSP, Decorated\", sense=MINIMIZE, objective=sum(set((C.count(), C, C)).map(lambda ((t, i, j): Tuple[natural, CategoryLabel(\"C\"), CategoryLabel(\"C\")]): d[i, j] * x[t, i] * x[(t + 1) % C.count(), j])), constraints={one city: [Constraint(name=\"one city\", , lambda t: sum(C.map(lambda (i: CategoryLabel(\"C\")): x[t, i])) == 1, domain=set(C.count())),],one time: [Constraint(name=\"one time\", , lambda i: sum(C.count().map(lambda (t: natural): x[t, i])) == 1, domain=C),],})"
+ "Problem(name=\"TSP, Decorated\", sense=MINIMIZE, objective=sum(set(set((C.count(), C, C))).map(lambda ((t, i, j): Tuple[natural, CategoryLabel(\"C\"), CategoryLabel(\"C\")]): d[i, j] * x[t, i] * x[(t + 1) % C.count(), j])), constraints={one city: [Constraint(name=\"one city\", , lambda t: sum(set(C).map(lambda (i: CategoryLabel(\"C\")): x[t, i])) == 1, domain=set(C.count())),],one time: [Constraint(name=\"one time\", , lambda i: sum(set(C.count()).map(lambda (t: natural): x[t, i])) == 1, domain=C),],})"
]
},
- "execution_count": 7,
+ "execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
@@ -467,14 +512,14 @@
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": 9,
"id": "8070e0c3",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:19.344979Z",
- "iopub.status.busy": "2026-03-24T02:05:19.344921Z",
- "iopub.status.idle": "2026-03-24T02:05:19.584042Z",
- "shell.execute_reply": "2026-03-24T02:05:19.583600Z"
+ "iopub.execute_input": "2026-06-04T02:50:20.679753Z",
+ "iopub.status.busy": "2026-06-04T02:50:20.679699Z",
+ "iopub.status.idle": "2026-06-04T02:50:21.092080Z",
+ "shell.execute_reply": "2026-06-04T02:50:21.091682Z"
}
},
"outputs": [
@@ -483,15 +528,15 @@
"text/latex": [
"$$\\begin{array}{rl}\n",
"\\text{Problem}\\colon &\\text{TSP, Decorated}\\\\\\displaystyle \\min &\\displaystyle \\sum _{t=0}^{N-1}{\\sum _{i=0}^{N-1}{\\sum _{j=0}^{N-1}{{d}_{i,j}\\cdot {x}_{t,i}\\cdot {x}_{\\left(t+1\\right)\\bmod N,j}}}}\\\\&\\\\\\text{s.t.}&\\\\&\\begin{aligned}\n",
- "\\text{one city}&\\quad \\displaystyle x.\\mathop{\\mathtt{sum}}\\left(\\mathtt{axis}=\\left[1\\right]\\right)=1\\\\\\text{one time}&\\quad \\displaystyle x.\\mathop{\\mathtt{sum}}\\left(\\mathtt{axis}=\\left[0\\right]\\right)=1\\end{aligned}\n",
+ "\\text{one city}&\\quad \\displaystyle {x.\\mathop{\\mathtt{sum}}\\left(\\mathtt{axis}=\\left[1\\right]\\right)}_{i}=1\\quad \\forall i\\;\\text{s.t.}\\;i\\in \\left\\{0,\\ldots ,N-1\\right\\}\\\\\\text{one time}&\\quad \\displaystyle {x.\\mathop{\\mathtt{sum}}\\left(\\mathtt{axis}=\\left[0\\right]\\right)}_{i}=1\\quad \\forall i\\;\\text{s.t.}\\;i\\in \\left\\{0,\\ldots ,N-1\\right\\}\\end{aligned}\n",
"\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{Array}}\\left[N\\times N;\\left\\{0, 1\\right\\}\\right]&\\quad &2\\text{-dim binary variable}\\\\&&&\\text{$x_{t,i} = 1$ if City $i$ is visited at time $t$}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}d&\\in \\mathop{\\mathrm{Array}}\\left[N\\times N;\\mathbb{R}\\right]&\\quad &2\\text{-dimensional array of placeholders with elements in }\\mathbb{R}\\\\&&&\\text{distance between cities}\\\\&&&\\\\N&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\&&&\\text{Number of cities}\\\\\\end{alignedat}\\end{array}\n",
"$$"
],
"text/plain": [
- "Problem(name=\"TSP, Decorated\", sense=MINIMIZE, objective=sum(N.flat_map(lambda (t: natural): N.map(lambda (i: natural): (t, i))).flat_map(lambda ((t, i): Tuple[natural, natural]): N.map(lambda (j: natural): (t, i, j))).map(lambda ((t, i, j): Tuple[natural, natural, natural]): d[i, j] * x[t, i] * x[(t + 1) % N, j])), constraints={one city: [Constraint(name=\"one city\", sense=EQUAL, left=x.sum(1), right=1, shape=TensorLikeVsScalar { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: Some(SetStyle { element: None, kind: Natural }), subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_47870/4051608972.py\", start: SrcLoc { line: 4, column: 8 }, end: SrcLoc { line: 6, column: 5 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_47870/4051608972.py\", start: SrcLoc { line: 4, column: 8 }, end: SrcLoc { line: 6, column: 5 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Binary }, src_span: NoSrcSpan } }), scalar: Binary }),],one time: [Constraint(name=\"one time\", sense=EQUAL, left=x.sum(0), right=1, shape=TensorLikeVsScalar { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: Some(SetStyle { element: None, kind: Natural }), subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_47870/4051608972.py\", start: SrcLoc { line: 4, column: 8 }, end: SrcLoc { line: 6, column: 5 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_47870/4051608972.py\", start: SrcLoc { line: 4, column: 8 }, end: SrcLoc { line: 6, column: 5 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Binary }, src_span: NoSrcSpan } }), scalar: Binary }),],})"
+ "Problem(name=\"TSP, Decorated\", sense=MINIMIZE, objective=sum(set(N.flat_map(lambda (t: natural): N.map(lambda (i: natural): (t, i))).flat_map(lambda ((t, i): Tuple[natural, natural]): N.map(lambda (j: natural): (t, i, j)))).map(lambda ((t, i, j): Tuple[natural, natural, natural]): d[i, j] * x[t, i] * x[(t + 1) % N, j])), constraints={one city: [Constraint(name=\"one city\", sense=EQUAL, left=x.sum(1), right=1, shape=TensorLikeVsScalar { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: Some(SetStyle { element: None, kind: Natural }), subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_4385/4051608972.py\", start: SrcLoc { line: 4, column: 8 }, end: SrcLoc { line: 6, column: 5 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_4385/4051608972.py\", start: SrcLoc { line: 4, column: 8 }, end: SrcLoc { line: 6, column: 5 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Natural }, src_span: NoSrcSpan } }), scalar: Natural }),],one time: [Constraint(name=\"one time\", sense=EQUAL, left=x.sum(0), right=1, shape=TensorLikeVsScalar { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: Some(SetStyle { element: None, kind: Natural }), subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_4385/4051608972.py\", start: SrcLoc { line: 4, column: 8 }, end: SrcLoc { line: 6, column: 5 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_4385/4051608972.py\", start: SrcLoc { line: 4, column: 8 }, end: SrcLoc { line: 6, column: 5 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Natural }, src_span: NoSrcSpan } }), scalar: Natural }),],})"
]
},
- "execution_count": 8,
+ "execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
@@ -530,27 +575,27 @@
},
{
"cell_type": "code",
- "execution_count": 9,
+ "execution_count": 10,
"id": "bd709223",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:19.585023Z",
- "iopub.status.busy": "2026-03-24T02:05:19.584971Z",
- "iopub.status.idle": "2026-03-24T02:05:19.599318Z",
- "shell.execute_reply": "2026-03-24T02:05:19.598886Z"
+ "iopub.execute_input": "2026-06-04T02:50:21.093183Z",
+ "iopub.status.busy": "2026-06-04T02:50:21.093121Z",
+ "iopub.status.idle": "2026-06-04T02:50:21.115502Z",
+ "shell.execute_reply": "2026-06-04T02:50:21.115165Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
- "$$\\mathop{\\mathrm{Array}}\\left[N;\\left\\{0, 1\\right\\}\\right]$$"
+ "$$\\mathop{\\mathrm{Array}}\\left[N;\\mathbb{N}\\right]$$"
],
"text/plain": [
- "Array[N; binary!]"
+ "Array[N; natural!]"
]
},
- "execution_count": 9,
+ "execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
@@ -582,14 +627,14 @@
},
{
"cell_type": "code",
- "execution_count": 10,
+ "execution_count": 11,
"id": "e62303cb",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:19.600528Z",
- "iopub.status.busy": "2026-03-24T02:05:19.600471Z",
- "iopub.status.idle": "2026-03-24T02:05:19.833831Z",
- "shell.execute_reply": "2026-03-24T02:05:19.833421Z"
+ "iopub.execute_input": "2026-06-04T02:50:21.116656Z",
+ "iopub.status.busy": "2026-06-04T02:50:21.116596Z",
+ "iopub.status.idle": "2026-06-04T02:50:21.393329Z",
+ "shell.execute_reply": "2026-06-04T02:50:21.392926Z"
}
},
"outputs": [
@@ -606,7 +651,7 @@
"Problem(name=\"Possibly Overlapping Constraints\", sense=MINIMIZE, objective=0, constraints={constr: [Constraint(name=\"constr\", , lambda i: x[i] >= 1, domain=set(N)),Constraint(name=\"constr\", , lambda i: x[i] <= 2, domain=set(M)),],})"
]
},
- "execution_count": 10,
+ "execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
@@ -635,14 +680,14 @@
},
{
"cell_type": "code",
- "execution_count": 11,
+ "execution_count": 12,
"id": "b442d9b0",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:19.834787Z",
- "iopub.status.busy": "2026-03-24T02:05:19.834731Z",
- "iopub.status.idle": "2026-03-24T02:05:21.196547Z",
- "shell.execute_reply": "2026-03-24T02:05:21.196113Z"
+ "iopub.execute_input": "2026-06-04T02:50:21.394436Z",
+ "iopub.status.busy": "2026-06-04T02:50:21.394383Z",
+ "iopub.status.idle": "2026-06-04T02:50:21.688809Z",
+ "shell.execute_reply": "2026-06-04T02:50:21.688403Z"
}
},
"outputs": [
@@ -754,7 +799,7 @@
"5 <=0 Linear {5} constr [5] "
]
},
- "execution_count": 11,
+ "execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
@@ -778,14 +823,14 @@
},
{
"cell_type": "code",
- "execution_count": 12,
+ "execution_count": 13,
"id": "9a608594",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:21.197683Z",
- "iopub.status.busy": "2026-03-24T02:05:21.197558Z",
- "iopub.status.idle": "2026-03-24T02:05:21.220036Z",
- "shell.execute_reply": "2026-03-24T02:05:21.219654Z"
+ "iopub.execute_input": "2026-06-04T02:50:21.689924Z",
+ "iopub.status.busy": "2026-06-04T02:50:21.689832Z",
+ "iopub.status.idle": "2026-06-04T02:50:21.715698Z",
+ "shell.execute_reply": "2026-06-04T02:50:21.715459Z"
}
},
"outputs": [
@@ -795,9 +840,9 @@
"text": [
"Traceback (most recent last):\n",
" while evaluating problem `Problem(name=\"Possibly Overlapping Constraints\", sense=MINIMIZE, objective=0, constraints={constr: [Constraint(name=\"constr\", , lambda i: x[i] >= 1, domain=set(N)),Constraint(name=\"constr\", , lambda i: x[i] <= 2, domain=set(M)),],})',\n",
- " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_47870/316836703.py\", line 1, col 2-55\n",
+ " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_4385/316836703.py\", line 1, col 2-55\n",
"\n",
- "File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_47870/316836703.py\", line 1, col 2-55:\n",
+ "File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_4385/316836703.py\", line 1, col 2-55:\n",
"\n",
" 1 | @jm.Problem.define(\"Possibly Overlapping Constraints\")\n",
" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
@@ -825,14 +870,14 @@
},
{
"cell_type": "code",
- "execution_count": 13,
+ "execution_count": 14,
"id": "92176ef9",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:21.221047Z",
- "iopub.status.busy": "2026-03-24T02:05:21.220992Z",
- "iopub.status.idle": "2026-03-24T02:05:21.263953Z",
- "shell.execute_reply": "2026-03-24T02:05:21.263607Z"
+ "iopub.execute_input": "2026-06-04T02:50:21.716834Z",
+ "iopub.status.busy": "2026-06-04T02:50:21.716788Z",
+ "iopub.status.idle": "2026-06-04T02:50:21.790146Z",
+ "shell.execute_reply": "2026-06-04T02:50:21.789782Z"
}
},
"outputs": [
@@ -842,18 +887,18 @@
"text": [
"Traceback (most recent last):\n",
" while adding constraint 'constr',\n",
- " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_47870/2812696639.py\", line 7, col 9-56\n",
+ " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_4385/2812696639.py\", line 7, col 9-56\n",
"\n",
- "File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_47870/2812696639.py\", line 7, col 9-56:\n",
+ "File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_4385/2812696639.py\", line 7, col 9-56:\n",
"\n",
" 7 | problem += problem.Constraint(\"constr\", x <= 2)\n",
" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
"\n",
"Constraint 'constr' has conflicting definition!\n",
" existing: Constraint(name=\"constr\", sense=GREATER_THAN_EQUAL, left=x, right=1, shape=Scalar(Integer))\n",
- " defined at: File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_47870/2812696639.py\", line 6, col 20-56\n",
+ " defined at: File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_4385/2812696639.py\", line 6, col 20-56\n",
" new: Constraint(name=\"constr\", sense=LESS_THAN_EQUAL, left=x, right=2, shape=Scalar(Integer))\n",
- " defined at: File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_47870/2812696639.py\", line 7, col 20-56\n"
+ " defined at: File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_4385/2812696639.py\", line 7, col 20-56\n"
]
}
],
@@ -897,7 +942,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.11"
+ "version": "3.11.14"
}
},
"nbformat": 4,
diff --git a/docs/en/basics/overview.ipynb b/docs/en/basics/overview.ipynb
index 623e870a..27abde48 100644
--- a/docs/en/basics/overview.ipynb
+++ b/docs/en/basics/overview.ipynb
@@ -47,7 +47,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.11"
+ "version": "3.11.14"
}
},
"nbformat": 4,
diff --git a/docs/en/basics/problem.ipynb b/docs/en/basics/problem.ipynb
index 632c008e..4a5abc63 100644
--- a/docs/en/basics/problem.ipynb
+++ b/docs/en/basics/problem.ipynb
@@ -22,10 +22,10 @@
"id": "7b8759ae",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:27.724684Z",
- "iopub.status.busy": "2026-03-24T02:05:27.724622Z",
- "iopub.status.idle": "2026-03-24T02:05:27.729576Z",
- "shell.execute_reply": "2026-03-24T02:05:27.729251Z"
+ "iopub.execute_input": "2026-06-04T02:50:28.758395Z",
+ "iopub.status.busy": "2026-06-04T02:50:28.758346Z",
+ "iopub.status.idle": "2026-06-04T02:50:28.764627Z",
+ "shell.execute_reply": "2026-06-04T02:50:28.764168Z"
}
},
"outputs": [],
@@ -50,10 +50,10 @@
"id": "ee62b49c",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:27.730719Z",
- "iopub.status.busy": "2026-03-24T02:05:27.730660Z",
- "iopub.status.idle": "2026-03-24T02:05:27.759990Z",
- "shell.execute_reply": "2026-03-24T02:05:27.759672Z"
+ "iopub.execute_input": "2026-06-04T02:50:28.766261Z",
+ "iopub.status.busy": "2026-06-04T02:50:28.766176Z",
+ "iopub.status.idle": "2026-06-04T02:50:28.795683Z",
+ "shell.execute_reply": "2026-06-04T02:50:28.795255Z"
}
},
"outputs": [],
@@ -82,10 +82,10 @@
"id": "7e0217ec",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:27.761139Z",
- "iopub.status.busy": "2026-03-24T02:05:27.761071Z",
- "iopub.status.idle": "2026-03-24T02:05:27.779979Z",
- "shell.execute_reply": "2026-03-24T02:05:27.779590Z"
+ "iopub.execute_input": "2026-06-04T02:50:28.796829Z",
+ "iopub.status.busy": "2026-06-04T02:50:28.796770Z",
+ "iopub.status.idle": "2026-06-04T02:50:28.814272Z",
+ "shell.execute_reply": "2026-06-04T02:50:28.813900Z"
}
},
"outputs": [
@@ -127,10 +127,10 @@
"id": "be7ff8c0",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:27.781157Z",
- "iopub.status.busy": "2026-03-24T02:05:27.781094Z",
- "iopub.status.idle": "2026-03-24T02:05:27.801351Z",
- "shell.execute_reply": "2026-03-24T02:05:27.800946Z"
+ "iopub.execute_input": "2026-06-04T02:50:28.815283Z",
+ "iopub.status.busy": "2026-06-04T02:50:28.815228Z",
+ "iopub.status.idle": "2026-06-04T02:50:28.836198Z",
+ "shell.execute_reply": "2026-06-04T02:50:28.835861Z"
}
},
"outputs": [
@@ -195,10 +195,10 @@
"id": "abd131df",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:27.802391Z",
- "iopub.status.busy": "2026-03-24T02:05:27.802334Z",
- "iopub.status.idle": "2026-03-24T02:05:27.805407Z",
- "shell.execute_reply": "2026-03-24T02:05:27.804630Z"
+ "iopub.execute_input": "2026-06-04T02:50:28.837173Z",
+ "iopub.status.busy": "2026-06-04T02:50:28.837120Z",
+ "iopub.status.idle": "2026-06-04T02:50:28.838937Z",
+ "shell.execute_reply": "2026-06-04T02:50:28.838670Z"
}
},
"outputs": [
@@ -236,10 +236,10 @@
"id": "eecf1bff",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:27.807325Z",
- "iopub.status.busy": "2026-03-24T02:05:27.807233Z",
- "iopub.status.idle": "2026-03-24T02:05:27.839924Z",
- "shell.execute_reply": "2026-03-24T02:05:27.839463Z"
+ "iopub.execute_input": "2026-06-04T02:50:28.839872Z",
+ "iopub.status.busy": "2026-06-04T02:50:28.839817Z",
+ "iopub.status.idle": "2026-06-04T02:50:28.872833Z",
+ "shell.execute_reply": "2026-06-04T02:50:28.872507Z"
}
},
"outputs": [
@@ -280,10 +280,10 @@
"id": "d3d912cf",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:27.841184Z",
- "iopub.status.busy": "2026-03-24T02:05:27.841105Z",
- "iopub.status.idle": "2026-03-24T02:05:27.868184Z",
- "shell.execute_reply": "2026-03-24T02:05:27.867818Z"
+ "iopub.execute_input": "2026-06-04T02:50:28.873806Z",
+ "iopub.status.busy": "2026-06-04T02:50:28.873756Z",
+ "iopub.status.idle": "2026-06-04T02:50:28.904861Z",
+ "shell.execute_reply": "2026-06-04T02:50:28.904531Z"
}
},
"outputs": [
@@ -355,7 +355,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.11"
+ "version": "3.11.14"
}
},
"nbformat": 4,
diff --git a/docs/en/basics/variables.ipynb b/docs/en/basics/variables.ipynb
index c6159392..57c67d73 100644
--- a/docs/en/basics/variables.ipynb
+++ b/docs/en/basics/variables.ipynb
@@ -17,10 +17,10 @@
"id": "6c5a391b",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:07.767010Z",
- "iopub.status.busy": "2026-04-06T08:34:07.766768Z",
- "iopub.status.idle": "2026-04-06T08:34:07.782300Z",
- "shell.execute_reply": "2026-04-06T08:34:07.781874Z"
+ "iopub.execute_input": "2026-06-04T02:50:26.701466Z",
+ "iopub.status.busy": "2026-06-04T02:50:26.701403Z",
+ "iopub.status.idle": "2026-06-04T02:50:26.707203Z",
+ "shell.execute_reply": "2026-06-04T02:50:26.706826Z"
}
},
"outputs": [],
@@ -89,10 +89,10 @@
"id": "051961dc",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:07.783709Z",
- "iopub.status.busy": "2026-04-06T08:34:07.783621Z",
- "iopub.status.idle": "2026-04-06T08:34:07.971950Z",
- "shell.execute_reply": "2026-04-06T08:34:07.971484Z"
+ "iopub.execute_input": "2026-06-04T02:50:26.708467Z",
+ "iopub.status.busy": "2026-06-04T02:50:26.708412Z",
+ "iopub.status.idle": "2026-06-04T02:50:26.795471Z",
+ "shell.execute_reply": "2026-06-04T02:50:26.795108Z"
}
},
"outputs": [
@@ -151,10 +151,10 @@
"id": "4e178bbc",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:07.973072Z",
- "iopub.status.busy": "2026-04-06T08:34:07.972990Z",
- "iopub.status.idle": "2026-04-06T08:34:08.055172Z",
- "shell.execute_reply": "2026-04-06T08:34:08.054791Z"
+ "iopub.execute_input": "2026-06-04T02:50:26.796523Z",
+ "iopub.status.busy": "2026-06-04T02:50:26.796467Z",
+ "iopub.status.idle": "2026-06-04T02:50:26.861222Z",
+ "shell.execute_reply": "2026-06-04T02:50:26.860959Z"
}
},
"outputs": [
@@ -244,10 +244,10 @@
"id": "ce6cc419",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:08.056308Z",
- "iopub.status.busy": "2026-04-06T08:34:08.056246Z",
- "iopub.status.idle": "2026-04-06T08:34:08.154710Z",
- "shell.execute_reply": "2026-04-06T08:34:08.154322Z"
+ "iopub.execute_input": "2026-06-04T02:50:26.862370Z",
+ "iopub.status.busy": "2026-06-04T02:50:26.862313Z",
+ "iopub.status.idle": "2026-06-04T02:50:26.924375Z",
+ "shell.execute_reply": "2026-06-04T02:50:26.924052Z"
}
},
"outputs": [
@@ -289,10 +289,10 @@
"id": "1f668218",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:08.155903Z",
- "iopub.status.busy": "2026-04-06T08:34:08.155832Z",
- "iopub.status.idle": "2026-04-06T08:34:08.218475Z",
- "shell.execute_reply": "2026-04-06T08:34:08.218152Z"
+ "iopub.execute_input": "2026-06-04T02:50:26.925410Z",
+ "iopub.status.busy": "2026-06-04T02:50:26.925357Z",
+ "iopub.status.idle": "2026-06-04T02:50:26.990025Z",
+ "shell.execute_reply": "2026-06-04T02:50:26.989741Z"
}
},
"outputs": [
@@ -352,10 +352,10 @@
"id": "b84e1374",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:08.219741Z",
- "iopub.status.busy": "2026-04-06T08:34:08.219671Z",
- "iopub.status.idle": "2026-04-06T08:34:08.222777Z",
- "shell.execute_reply": "2026-04-06T08:34:08.222463Z"
+ "iopub.execute_input": "2026-06-04T02:50:26.991264Z",
+ "iopub.status.busy": "2026-06-04T02:50:26.991205Z",
+ "iopub.status.idle": "2026-06-04T02:50:26.993082Z",
+ "shell.execute_reply": "2026-06-04T02:50:26.992775Z"
}
},
"outputs": [
@@ -380,10 +380,10 @@
"id": "d3a9f52b",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:08.223834Z",
- "iopub.status.busy": "2026-04-06T08:34:08.223774Z",
- "iopub.status.idle": "2026-04-06T08:34:08.226224Z",
- "shell.execute_reply": "2026-04-06T08:34:08.225934Z"
+ "iopub.execute_input": "2026-06-04T02:50:26.993900Z",
+ "iopub.status.busy": "2026-06-04T02:50:26.993857Z",
+ "iopub.status.idle": "2026-06-04T02:50:26.995483Z",
+ "shell.execute_reply": "2026-06-04T02:50:26.995171Z"
}
},
"outputs": [
@@ -501,10 +501,10 @@
"id": "5f2e4dc8",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:08.227250Z",
- "iopub.status.busy": "2026-04-06T08:34:08.227187Z",
- "iopub.status.idle": "2026-04-06T08:34:08.299835Z",
- "shell.execute_reply": "2026-04-06T08:34:08.299402Z"
+ "iopub.execute_input": "2026-06-04T02:50:26.996500Z",
+ "iopub.status.busy": "2026-06-04T02:50:26.996453Z",
+ "iopub.status.idle": "2026-06-04T02:50:27.037169Z",
+ "shell.execute_reply": "2026-06-04T02:50:27.036803Z"
}
},
"outputs": [
@@ -558,10 +558,10 @@
"id": "4ce83fe1",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:08.300975Z",
- "iopub.status.busy": "2026-04-06T08:34:08.300916Z",
- "iopub.status.idle": "2026-04-06T08:34:08.349222Z",
- "shell.execute_reply": "2026-04-06T08:34:08.348834Z"
+ "iopub.execute_input": "2026-06-04T02:50:27.038147Z",
+ "iopub.status.busy": "2026-06-04T02:50:27.038097Z",
+ "iopub.status.idle": "2026-06-04T02:50:27.089793Z",
+ "shell.execute_reply": "2026-06-04T02:50:27.089440Z"
}
},
"outputs": [
@@ -659,10 +659,10 @@
"id": "7333a2d6",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:08.350358Z",
- "iopub.status.busy": "2026-04-06T08:34:08.350292Z",
- "iopub.status.idle": "2026-04-06T08:34:08.402718Z",
- "shell.execute_reply": "2026-04-06T08:34:08.402382Z"
+ "iopub.execute_input": "2026-06-04T02:50:27.090831Z",
+ "iopub.status.busy": "2026-06-04T02:50:27.090782Z",
+ "iopub.status.idle": "2026-06-04T02:50:27.145896Z",
+ "shell.execute_reply": "2026-06-04T02:50:27.145526Z"
}
},
"outputs": [
@@ -718,10 +718,10 @@
"id": "34184cce",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:08.404100Z",
- "iopub.status.busy": "2026-04-06T08:34:08.403923Z",
- "iopub.status.idle": "2026-04-06T08:34:08.503497Z",
- "shell.execute_reply": "2026-04-06T08:34:08.503095Z"
+ "iopub.execute_input": "2026-06-04T02:50:27.146818Z",
+ "iopub.status.busy": "2026-06-04T02:50:27.146770Z",
+ "iopub.status.idle": "2026-06-04T02:50:27.204021Z",
+ "shell.execute_reply": "2026-06-04T02:50:27.203663Z"
}
},
"outputs": [
@@ -778,10 +778,10 @@
"id": "ffa2feec",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:08.504651Z",
- "iopub.status.busy": "2026-04-06T08:34:08.504580Z",
- "iopub.status.idle": "2026-04-06T08:34:08.552528Z",
- "shell.execute_reply": "2026-04-06T08:34:08.552117Z"
+ "iopub.execute_input": "2026-06-04T02:50:27.204992Z",
+ "iopub.status.busy": "2026-06-04T02:50:27.204946Z",
+ "iopub.status.idle": "2026-06-04T02:50:27.255490Z",
+ "shell.execute_reply": "2026-06-04T02:50:27.255137Z"
}
},
"outputs": [
@@ -839,10 +839,10 @@
"id": "f93d902b",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:08.553759Z",
- "iopub.status.busy": "2026-04-06T08:34:08.553695Z",
- "iopub.status.idle": "2026-04-06T08:34:08.720127Z",
- "shell.execute_reply": "2026-04-06T08:34:08.719708Z"
+ "iopub.execute_input": "2026-06-04T02:50:27.256485Z",
+ "iopub.status.busy": "2026-06-04T02:50:27.256429Z",
+ "iopub.status.idle": "2026-06-04T02:50:27.401382Z",
+ "shell.execute_reply": "2026-06-04T02:50:27.401095Z"
}
},
"outputs": [
@@ -854,7 +854,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"Partially determined shape\", sense=MINIMIZE, objective=sum(a.len_at(0).flat_map(lambda (i: natural): c.len_at(1).map(lambda (j: natural): (i, j))).map(lambda ((i, j): Tuple[natural, natural]): a[i] * c[i, j] * x[i, j])), constraints=[])"
+ "Problem(name=\"Partially determined shape\", sense=MINIMIZE, objective=sum(set(a.len_at(0).flat_map(lambda (i: natural): c.len_at(1).map(lambda (j: natural): (i, j)))).map(lambda ((i, j): Tuple[natural, natural]): a[i] * c[i, j] * x[i, j])), constraints=[])"
]
},
"execution_count": 13,
@@ -970,10 +970,10 @@
"id": "f86e9eac",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:08.721315Z",
- "iopub.status.busy": "2026-04-06T08:34:08.721253Z",
- "iopub.status.idle": "2026-04-06T08:34:08.741837Z",
- "shell.execute_reply": "2026-04-06T08:34:08.741464Z"
+ "iopub.execute_input": "2026-06-04T02:50:27.402664Z",
+ "iopub.status.busy": "2026-06-04T02:50:27.402611Z",
+ "iopub.status.idle": "2026-06-04T02:50:27.422532Z",
+ "shell.execute_reply": "2026-06-04T02:50:27.422225Z"
}
},
"outputs": [
@@ -1017,10 +1017,10 @@
"id": "470c7514",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:08.742967Z",
- "iopub.status.busy": "2026-04-06T08:34:08.742909Z",
- "iopub.status.idle": "2026-04-06T08:34:08.800254Z",
- "shell.execute_reply": "2026-04-06T08:34:08.799816Z"
+ "iopub.execute_input": "2026-06-04T02:50:27.423539Z",
+ "iopub.status.busy": "2026-06-04T02:50:27.423484Z",
+ "iopub.status.idle": "2026-06-04T02:50:27.444123Z",
+ "shell.execute_reply": "2026-06-04T02:50:27.443801Z"
}
},
"outputs": [
@@ -1085,10 +1085,10 @@
"id": "955b0199",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:08.801395Z",
- "iopub.status.busy": "2026-04-06T08:34:08.801334Z",
- "iopub.status.idle": "2026-04-06T08:34:08.855565Z",
- "shell.execute_reply": "2026-04-06T08:34:08.855175Z"
+ "iopub.execute_input": "2026-06-04T02:50:27.445131Z",
+ "iopub.status.busy": "2026-06-04T02:50:27.445082Z",
+ "iopub.status.idle": "2026-06-04T02:50:27.584223Z",
+ "shell.execute_reply": "2026-06-04T02:50:27.583859Z"
}
},
"outputs": [
@@ -1096,7 +1096,7 @@
"data": {
"text/latex": [
"$$\\begin{array}{rl}\n",
- "\\text{Problem}\\colon &\\text{Dec Var Keys demonstration}\\\\\\displaystyle \\min &\\displaystyle 0\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{TotalDict}}\\left[L\\times N;\\left\\{0, 1\\right\\}\\right]&\\quad &\\text{a dictionary of }\\text{binary}\\text{ variables with key }L\\times N\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}N&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\\\end{alignedat}\\\\&\\\\&\\text{Category Labels:}\\\\&\\qquad \\begin{array}{rl}\n",
+ "\\text{Problem}\\colon &\\text{Dec Var Keys demonstration}\\\\\\displaystyle \\min &\\displaystyle 0\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in L,j\\in \\left\\{0,\\ldots ,N-1\\right\\}\\right\\};\\left\\{0, 1\\right\\}\\right]&\\quad &\\text{a dictionary of }\\text{binary}\\text{ variables with key }\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in L,j\\in \\left\\{0,\\ldots ,N-1\\right\\}\\right\\}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}N&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\\\end{alignedat}\\\\&\\\\&\\text{Category Labels:}\\\\&\\qquad \\begin{array}{rl}\n",
"L&\\text{Category Label}\\end{array}\n",
"\\end{array}\n",
"$$"
@@ -1173,10 +1173,10 @@
"id": "b3e88831",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:08.856767Z",
- "iopub.status.busy": "2026-04-06T08:34:08.856700Z",
- "iopub.status.idle": "2026-04-06T08:34:08.983512Z",
- "shell.execute_reply": "2026-04-06T08:34:08.982892Z"
+ "iopub.execute_input": "2026-06-04T02:50:27.585466Z",
+ "iopub.status.busy": "2026-06-04T02:50:27.585414Z",
+ "iopub.status.idle": "2026-06-04T02:50:27.655095Z",
+ "shell.execute_reply": "2026-06-04T02:50:27.654777Z"
}
},
"outputs": [
@@ -1230,10 +1230,10 @@
"id": "4a1d9f04",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:08.985313Z",
- "iopub.status.busy": "2026-04-06T08:34:08.985147Z",
- "iopub.status.idle": "2026-04-06T08:34:09.040495Z",
- "shell.execute_reply": "2026-04-06T08:34:09.040100Z"
+ "iopub.execute_input": "2026-06-04T02:50:27.656296Z",
+ "iopub.status.busy": "2026-06-04T02:50:27.656222Z",
+ "iopub.status.idle": "2026-06-04T02:50:27.708700Z",
+ "shell.execute_reply": "2026-06-04T02:50:27.708340Z"
}
},
"outputs": [
diff --git a/docs/en/introduction.ipynb b/docs/en/introduction.ipynb
index 42178b73..7c70b128 100644
--- a/docs/en/introduction.ipynb
+++ b/docs/en/introduction.ipynb
@@ -73,10 +73,10 @@
"id": "bf93e55f",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:12.168227Z",
- "iopub.status.busy": "2026-03-24T02:05:12.168162Z",
- "iopub.status.idle": "2026-03-24T02:05:12.357614Z",
- "shell.execute_reply": "2026-03-24T02:05:12.357091Z"
+ "iopub.execute_input": "2026-06-04T02:50:14.282082Z",
+ "iopub.status.busy": "2026-06-04T02:50:14.281577Z",
+ "iopub.status.idle": "2026-06-04T02:50:14.561437Z",
+ "shell.execute_reply": "2026-06-04T02:50:14.561144Z"
}
},
"outputs": [
@@ -90,7 +90,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"Knapsack Problem\", sense=MAXIMIZE, objective=sum(N.map(lambda (i: natural): v[i] * x[i])), constraints={weight: [Constraint(name=\"weight\", sense=LESS_THAN_EQUAL, left=sum(N.map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Float), description=\"Total weight does not exceed the capacity\"),],})"
+ "Problem(name=\"Knapsack Problem\", sense=MAXIMIZE, objective=sum(set(N).map(lambda (i: natural): v[i] * x[i])), constraints={weight: [Constraint(name=\"weight\", sense=LESS_THAN_EQUAL, left=sum(set(N).map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Float), description=\"Total weight does not exceed the capacity\"),],})"
]
},
"execution_count": 1,
@@ -146,10 +146,10 @@
"id": "3e35cee2",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:12.359106Z",
- "iopub.status.busy": "2026-03-24T02:05:12.359026Z",
- "iopub.status.idle": "2026-03-24T02:05:12.396417Z",
- "shell.execute_reply": "2026-03-24T02:05:12.395851Z"
+ "iopub.execute_input": "2026-06-04T02:50:14.562913Z",
+ "iopub.status.busy": "2026-06-04T02:50:14.562854Z",
+ "iopub.status.idle": "2026-06-04T02:50:14.617715Z",
+ "shell.execute_reply": "2026-06-04T02:50:14.617425Z"
}
},
"outputs": [],
@@ -174,10 +174,10 @@
"id": "d7c62729",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:12.397937Z",
- "iopub.status.busy": "2026-03-24T02:05:12.397860Z",
- "iopub.status.idle": "2026-03-24T02:05:12.441146Z",
- "shell.execute_reply": "2026-03-24T02:05:12.440785Z"
+ "iopub.execute_input": "2026-06-04T02:50:14.619005Z",
+ "iopub.status.busy": "2026-06-04T02:50:14.618949Z",
+ "iopub.status.idle": "2026-06-04T02:50:14.692637Z",
+ "shell.execute_reply": "2026-06-04T02:50:14.692337Z"
}
},
"outputs": [],
@@ -219,17 +219,17 @@
"id": "05305f86",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:12.442451Z",
- "iopub.status.busy": "2026-03-24T02:05:12.442393Z",
- "iopub.status.idle": "2026-03-24T02:05:12.444506Z",
- "shell.execute_reply": "2026-03-24T02:05:12.444040Z"
+ "iopub.execute_input": "2026-06-04T02:50:14.694006Z",
+ "iopub.status.busy": "2026-06-04T02:50:14.693946Z",
+ "iopub.status.idle": "2026-06-04T02:50:14.695784Z",
+ "shell.execute_reply": "2026-06-04T02:50:14.695499Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
- "'2.3.1'"
+ "'2.5.0'"
]
},
"execution_count": 4,
@@ -289,7 +289,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.11"
+ "version": "3.11.14"
}
},
"nbformat": 4,
diff --git a/docs/en/quickstart/openjij.ipynb b/docs/en/quickstart/openjij.ipynb
index da31c033..c2cf9607 100644
--- a/docs/en/quickstart/openjij.ipynb
+++ b/docs/en/quickstart/openjij.ipynb
@@ -94,10 +94,10 @@
"id": "a9c293f9",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:54.140257Z",
- "iopub.status.busy": "2026-03-24T02:05:54.140176Z",
- "iopub.status.idle": "2026-03-24T02:05:54.344261Z",
- "shell.execute_reply": "2026-03-24T02:05:54.343870Z"
+ "iopub.execute_input": "2026-06-04T02:51:02.439272Z",
+ "iopub.status.busy": "2026-06-04T02:51:02.439203Z",
+ "iopub.status.idle": "2026-06-04T02:51:02.701928Z",
+ "shell.execute_reply": "2026-06-04T02:51:02.701586Z"
}
},
"outputs": [
@@ -111,7 +111,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"Knapsack\", sense=MAXIMIZE, objective=sum(N.map(lambda (i: natural): v[i] * x[i])), constraints={Weight Limit: [Constraint(name=\"Weight Limit\", sense=LESS_THAN_EQUAL, left=sum(N.map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Natural)),],})"
+ "Problem(name=\"Knapsack\", sense=MAXIMIZE, objective=sum(set(N).map(lambda (i: natural): v[i] * x[i])), constraints={Weight Limit: [Constraint(name=\"Weight Limit\", sense=LESS_THAN_EQUAL, left=sum(set(N).map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Natural)),],})"
]
},
"execution_count": 1,
@@ -169,10 +169,10 @@
"id": "4e5f7ef5",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:54.345358Z",
- "iopub.status.busy": "2026-03-24T02:05:54.345291Z",
- "iopub.status.idle": "2026-03-24T02:05:54.347068Z",
- "shell.execute_reply": "2026-03-24T02:05:54.346754Z"
+ "iopub.execute_input": "2026-06-04T02:51:02.703414Z",
+ "iopub.status.busy": "2026-06-04T02:51:02.703345Z",
+ "iopub.status.idle": "2026-06-04T02:51:02.705164Z",
+ "shell.execute_reply": "2026-06-04T02:51:02.704887Z"
}
},
"outputs": [],
@@ -201,10 +201,10 @@
"id": "ec59b351",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:54.348084Z",
- "iopub.status.busy": "2026-03-24T02:05:54.348028Z",
- "iopub.status.idle": "2026-03-24T02:05:55.318686Z",
- "shell.execute_reply": "2026-03-24T02:05:55.318251Z"
+ "iopub.execute_input": "2026-06-04T02:51:02.706496Z",
+ "iopub.status.busy": "2026-06-04T02:51:02.706426Z",
+ "iopub.status.idle": "2026-06-04T02:51:03.579539Z",
+ "shell.execute_reply": "2026-06-04T02:51:03.579088Z"
}
},
"outputs": [],
@@ -238,10 +238,10 @@
"id": "89191aba",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:55.319966Z",
- "iopub.status.busy": "2026-03-24T02:05:55.319862Z",
- "iopub.status.idle": "2026-03-24T02:05:55.608844Z",
- "shell.execute_reply": "2026-03-24T02:05:55.608370Z"
+ "iopub.execute_input": "2026-06-04T02:51:03.580745Z",
+ "iopub.status.busy": "2026-06-04T02:51:03.580654Z",
+ "iopub.status.idle": "2026-06-04T02:51:03.865751Z",
+ "shell.execute_reply": "2026-06-04T02:51:03.865422Z"
}
},
"outputs": [],
@@ -272,10 +272,10 @@
"id": "7dbff4db",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:55.609979Z",
- "iopub.status.busy": "2026-03-24T02:05:55.609862Z",
- "iopub.status.idle": "2026-03-24T02:05:55.618691Z",
- "shell.execute_reply": "2026-03-24T02:05:55.617915Z"
+ "iopub.execute_input": "2026-06-04T02:51:03.866959Z",
+ "iopub.status.busy": "2026-06-04T02:51:03.866864Z",
+ "iopub.status.idle": "2026-06-04T02:51:03.875919Z",
+ "shell.execute_reply": "2026-06-04T02:51:03.875565Z"
}
},
"outputs": [
@@ -322,19 +322,19 @@
" 1 | \n",
" x | \n",
" [1] | \n",
- " 1.0 | \n",
+ " 0.0 | \n",
"
\n",
" \n",
" | 2 | \n",
" x | \n",
" [2] | \n",
- " 1.0 | \n",
+ " 0.0 | \n",
"
\n",
" \n",
" | 3 | \n",
" x | \n",
" [3] | \n",
- " 0.0 | \n",
+ " 1.0 | \n",
"
\n",
" \n",
" | 4 | \n",
@@ -356,9 +356,9 @@
" name subscripts value\n",
"id \n",
"0 x [0] 1.0\n",
- "1 x [1] 1.0\n",
- "2 x [2] 1.0\n",
- "3 x [3] 0.0\n",
+ "1 x [1] 0.0\n",
+ "2 x [2] 0.0\n",
+ "3 x [3] 1.0\n",
"4 x [4] 0.0\n",
"5 x [5] 0.0"
]
@@ -413,7 +413,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.11"
+ "version": "3.11.14"
}
},
"nbformat": 4,
diff --git a/docs/en/quickstart/scip.ipynb b/docs/en/quickstart/scip.ipynb
index 46b9e789..c7a9c55f 100644
--- a/docs/en/quickstart/scip.ipynb
+++ b/docs/en/quickstart/scip.ipynb
@@ -94,10 +94,10 @@
"id": "0e58428f",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:57.033597Z",
- "iopub.status.busy": "2026-03-24T02:05:57.033524Z",
- "iopub.status.idle": "2026-03-24T02:05:57.220613Z",
- "shell.execute_reply": "2026-03-24T02:05:57.220137Z"
+ "iopub.execute_input": "2026-06-04T02:51:05.051422Z",
+ "iopub.status.busy": "2026-06-04T02:51:05.051303Z",
+ "iopub.status.idle": "2026-06-04T02:51:05.297581Z",
+ "shell.execute_reply": "2026-06-04T02:51:05.297172Z"
}
},
"outputs": [
@@ -111,7 +111,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"Knapsack\", sense=MAXIMIZE, objective=sum(N.map(lambda (i: natural): v[i] * x[i])), constraints={Weight Limit: [Constraint(name=\"Weight Limit\", sense=LESS_THAN_EQUAL, left=sum(N.map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Natural)),],})"
+ "Problem(name=\"Knapsack\", sense=MAXIMIZE, objective=sum(set(N).map(lambda (i: natural): v[i] * x[i])), constraints={Weight Limit: [Constraint(name=\"Weight Limit\", sense=LESS_THAN_EQUAL, left=sum(set(N).map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Natural)),],})"
]
},
"execution_count": 1,
@@ -169,10 +169,10 @@
"id": "9065e4c7",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:57.221770Z",
- "iopub.status.busy": "2026-03-24T02:05:57.221702Z",
- "iopub.status.idle": "2026-03-24T02:05:57.223631Z",
- "shell.execute_reply": "2026-03-24T02:05:57.223262Z"
+ "iopub.execute_input": "2026-06-04T02:51:05.298794Z",
+ "iopub.status.busy": "2026-06-04T02:51:05.298738Z",
+ "iopub.status.idle": "2026-06-04T02:51:05.300399Z",
+ "shell.execute_reply": "2026-06-04T02:51:05.300125Z"
}
},
"outputs": [],
@@ -201,10 +201,10 @@
"id": "c7014264",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:57.224565Z",
- "iopub.status.busy": "2026-03-24T02:05:57.224511Z",
- "iopub.status.idle": "2026-03-24T02:05:57.823423Z",
- "shell.execute_reply": "2026-03-24T02:05:57.823067Z"
+ "iopub.execute_input": "2026-06-04T02:51:05.301325Z",
+ "iopub.status.busy": "2026-06-04T02:51:05.301272Z",
+ "iopub.status.idle": "2026-06-04T02:51:05.605029Z",
+ "shell.execute_reply": "2026-06-04T02:51:05.604526Z"
}
},
"outputs": [],
@@ -238,10 +238,10 @@
"id": "deeb53b7",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:57.824990Z",
- "iopub.status.busy": "2026-03-24T02:05:57.824880Z",
- "iopub.status.idle": "2026-03-24T02:05:57.897273Z",
- "shell.execute_reply": "2026-03-24T02:05:57.896862Z"
+ "iopub.execute_input": "2026-06-04T02:51:05.606240Z",
+ "iopub.status.busy": "2026-06-04T02:51:05.606157Z",
+ "iopub.status.idle": "2026-06-04T02:51:05.687394Z",
+ "shell.execute_reply": "2026-06-04T02:51:05.687021Z"
}
},
"outputs": [
@@ -276,10 +276,10 @@
"id": "bc247e30",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:57.898343Z",
- "iopub.status.busy": "2026-03-24T02:05:57.898246Z",
- "iopub.status.idle": "2026-03-24T02:05:57.903584Z",
- "shell.execute_reply": "2026-03-24T02:05:57.903279Z"
+ "iopub.execute_input": "2026-06-04T02:51:05.688474Z",
+ "iopub.status.busy": "2026-06-04T02:51:05.688380Z",
+ "iopub.status.idle": "2026-06-04T02:51:05.693394Z",
+ "shell.execute_reply": "2026-06-04T02:51:05.693048Z"
}
},
"outputs": [
@@ -406,7 +406,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.11"
+ "version": "3.11.14"
}
},
"nbformat": 4,
diff --git a/docs/en/references/cheat_sheet.ipynb b/docs/en/references/cheat_sheet.ipynb
index 888467c0..ec41ca12 100644
--- a/docs/en/references/cheat_sheet.ipynb
+++ b/docs/en/references/cheat_sheet.ipynb
@@ -14,10 +14,10 @@
"id": "58e0d17d",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:49.138769Z",
- "iopub.status.busy": "2026-03-24T02:05:49.138673Z",
- "iopub.status.idle": "2026-03-24T02:05:49.144634Z",
- "shell.execute_reply": "2026-03-24T02:05:49.144172Z"
+ "iopub.execute_input": "2026-06-04T02:50:56.214176Z",
+ "iopub.status.busy": "2026-06-04T02:50:56.213274Z",
+ "iopub.status.idle": "2026-06-04T02:50:56.227045Z",
+ "shell.execute_reply": "2026-06-04T02:50:56.226652Z"
}
},
"outputs": [],
@@ -49,10 +49,10 @@
"id": "1fa8bcb8",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:49.145935Z",
- "iopub.status.busy": "2026-03-24T02:05:49.145870Z",
- "iopub.status.idle": "2026-03-24T02:05:49.208435Z",
- "shell.execute_reply": "2026-03-24T02:05:49.208052Z"
+ "iopub.execute_input": "2026-06-04T02:50:56.228380Z",
+ "iopub.status.busy": "2026-06-04T02:50:56.228309Z",
+ "iopub.status.idle": "2026-06-04T02:50:56.397625Z",
+ "shell.execute_reply": "2026-06-04T02:50:56.396714Z"
}
},
"outputs": [
@@ -95,10 +95,10 @@
"id": "01dbd1aa",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:49.209566Z",
- "iopub.status.busy": "2026-03-24T02:05:49.209508Z",
- "iopub.status.idle": "2026-03-24T02:05:49.247617Z",
- "shell.execute_reply": "2026-03-24T02:05:49.247212Z"
+ "iopub.execute_input": "2026-06-04T02:50:56.399475Z",
+ "iopub.status.busy": "2026-06-04T02:50:56.399314Z",
+ "iopub.status.idle": "2026-06-04T02:50:56.449986Z",
+ "shell.execute_reply": "2026-06-04T02:50:56.449602Z"
}
},
"outputs": [
@@ -150,10 +150,10 @@
"id": "e544f20f",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:49.248803Z",
- "iopub.status.busy": "2026-03-24T02:05:49.248745Z",
- "iopub.status.idle": "2026-03-24T02:05:49.300815Z",
- "shell.execute_reply": "2026-03-24T02:05:49.300523Z"
+ "iopub.execute_input": "2026-06-04T02:50:56.451162Z",
+ "iopub.status.busy": "2026-06-04T02:50:56.451107Z",
+ "iopub.status.idle": "2026-06-04T02:50:56.518079Z",
+ "shell.execute_reply": "2026-06-04T02:50:56.517682Z"
}
},
"outputs": [
@@ -197,10 +197,10 @@
"id": "b987d8a2",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:49.302089Z",
- "iopub.status.busy": "2026-03-24T02:05:49.302028Z",
- "iopub.status.idle": "2026-03-24T02:05:49.360395Z",
- "shell.execute_reply": "2026-03-24T02:05:49.360096Z"
+ "iopub.execute_input": "2026-06-04T02:50:56.519061Z",
+ "iopub.status.busy": "2026-06-04T02:50:56.519007Z",
+ "iopub.status.idle": "2026-06-04T02:50:56.600839Z",
+ "shell.execute_reply": "2026-06-04T02:50:56.600496Z"
}
},
"outputs": [
@@ -253,10 +253,10 @@
"id": "16f43d5e",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:49.361838Z",
- "iopub.status.busy": "2026-03-24T02:05:49.361761Z",
- "iopub.status.idle": "2026-03-24T02:05:49.435051Z",
- "shell.execute_reply": "2026-03-24T02:05:49.434653Z"
+ "iopub.execute_input": "2026-06-04T02:50:56.601921Z",
+ "iopub.status.busy": "2026-06-04T02:50:56.601870Z",
+ "iopub.status.idle": "2026-06-04T02:50:56.691581Z",
+ "shell.execute_reply": "2026-06-04T02:50:56.691216Z"
}
},
"outputs": [
@@ -300,10 +300,10 @@
"id": "8e08a289",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:49.436176Z",
- "iopub.status.busy": "2026-03-24T02:05:49.436111Z",
- "iopub.status.idle": "2026-03-24T02:05:49.509020Z",
- "shell.execute_reply": "2026-03-24T02:05:49.508680Z"
+ "iopub.execute_input": "2026-06-04T02:50:56.692626Z",
+ "iopub.status.busy": "2026-06-04T02:50:56.692568Z",
+ "iopub.status.idle": "2026-06-04T02:50:56.792894Z",
+ "shell.execute_reply": "2026-06-04T02:50:56.792594Z"
}
},
"outputs": [
@@ -315,7 +315,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"SumAlongSet\", sense=MINIMIZE, objective=sum(C.map(lambda (i: natural): x[i])), constraints=[])"
+ "Problem(name=\"SumAlongSet\", sense=MINIMIZE, objective=sum(set(C).map(lambda (i: natural): x[i])), constraints=[])"
]
},
"execution_count": 7,
@@ -356,10 +356,10 @@
"id": "cb70d54b",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:49.510225Z",
- "iopub.status.busy": "2026-03-24T02:05:49.510162Z",
- "iopub.status.idle": "2026-03-24T02:05:49.583409Z",
- "shell.execute_reply": "2026-03-24T02:05:49.583111Z"
+ "iopub.execute_input": "2026-06-04T02:50:56.794264Z",
+ "iopub.status.busy": "2026-06-04T02:50:56.794205Z",
+ "iopub.status.idle": "2026-06-04T02:50:56.895649Z",
+ "shell.execute_reply": "2026-06-04T02:50:56.895286Z"
}
},
"outputs": [
@@ -403,10 +403,10 @@
"id": "99bccede",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:49.584536Z",
- "iopub.status.busy": "2026-03-24T02:05:49.584478Z",
- "iopub.status.idle": "2026-03-24T02:05:49.663348Z",
- "shell.execute_reply": "2026-03-24T02:05:49.662945Z"
+ "iopub.execute_input": "2026-06-04T02:50:56.896858Z",
+ "iopub.status.busy": "2026-06-04T02:50:56.896792Z",
+ "iopub.status.idle": "2026-06-04T02:50:57.023995Z",
+ "shell.execute_reply": "2026-06-04T02:50:57.023528Z"
}
},
"outputs": [
@@ -418,7 +418,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"SumAlongEdgeSet\", sense=MINIMIZE, objective=sum(E.map(lambda ((i, j): Tuple[natural, natural]): x[i] * x[j])), constraints=[])"
+ "Problem(name=\"SumAlongEdgeSet\", sense=MINIMIZE, objective=sum(set(E).map(lambda ((i, j): Tuple[natural, natural]): x[i] * x[j])), constraints=[])"
]
},
"execution_count": 9,
@@ -459,10 +459,10 @@
"id": "0c7a84b9",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:49.664450Z",
- "iopub.status.busy": "2026-03-24T02:05:49.664393Z",
- "iopub.status.idle": "2026-03-24T02:05:49.785497Z",
- "shell.execute_reply": "2026-03-24T02:05:49.785171Z"
+ "iopub.execute_input": "2026-06-04T02:50:57.025005Z",
+ "iopub.status.busy": "2026-06-04T02:50:57.024953Z",
+ "iopub.status.idle": "2026-06-04T02:50:57.199721Z",
+ "shell.execute_reply": "2026-06-04T02:50:57.199437Z"
}
},
"outputs": [
@@ -509,10 +509,10 @@
"id": "2099890c",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:49.786631Z",
- "iopub.status.busy": "2026-03-24T02:05:49.786573Z",
- "iopub.status.idle": "2026-03-24T02:05:49.910277Z",
- "shell.execute_reply": "2026-03-24T02:05:49.909994Z"
+ "iopub.execute_input": "2026-06-04T02:50:57.200932Z",
+ "iopub.status.busy": "2026-06-04T02:50:57.200881Z",
+ "iopub.status.idle": "2026-06-04T02:50:57.434731Z",
+ "shell.execute_reply": "2026-06-04T02:50:57.434312Z"
}
},
"outputs": [
@@ -524,7 +524,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"ConditionalSum\", sense=MINIMIZE, objective=sum(N.flat_map(lambda (i: natural): N.map(lambda (j: natural): (i, j))).filter(lambda (i, j): i > j).map(lambda ((i, j): Tuple[natural, natural]): J[i, j] * x[i] * x[j])), constraints=[])"
+ "Problem(name=\"ConditionalSum\", sense=MINIMIZE, objective=sum(set(N.flat_map(lambda (i: natural): N.map(lambda (j: natural): (i, j))).filter(lambda (i, j): i > j)).map(lambda ((i, j): Tuple[natural, natural]): J[i, j] * x[i] * x[j])), constraints=[])"
]
},
"execution_count": 11,
@@ -565,10 +565,10 @@
"id": "b0c6a474",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:49.911529Z",
- "iopub.status.busy": "2026-03-24T02:05:49.911466Z",
- "iopub.status.idle": "2026-03-24T02:05:50.007014Z",
- "shell.execute_reply": "2026-03-24T02:05:50.006612Z"
+ "iopub.execute_input": "2026-06-04T02:50:57.435813Z",
+ "iopub.status.busy": "2026-06-04T02:50:57.435760Z",
+ "iopub.status.idle": "2026-06-04T02:50:57.573730Z",
+ "shell.execute_reply": "2026-06-04T02:50:57.573289Z"
}
},
"outputs": [
@@ -614,10 +614,10 @@
"id": "ffd9b043",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:50.008161Z",
- "iopub.status.busy": "2026-03-24T02:05:50.008096Z",
- "iopub.status.idle": "2026-03-24T02:05:50.111449Z",
- "shell.execute_reply": "2026-03-24T02:05:50.111109Z"
+ "iopub.execute_input": "2026-06-04T02:50:57.574821Z",
+ "iopub.status.busy": "2026-06-04T02:50:57.574767Z",
+ "iopub.status.idle": "2026-06-04T02:50:57.722420Z",
+ "shell.execute_reply": "2026-06-04T02:50:57.721985Z"
}
},
"outputs": [
@@ -629,7 +629,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"NonDiagonalSum\", sense=MINIMIZE, objective=sum(N.flat_map(lambda (i: natural): N.map(lambda (j: natural): (i, j))).filter(lambda (i, j): i != j).map(lambda ((i, j): Tuple[natural, natural]): J[i, j])), constraints=[])"
+ "Problem(name=\"NonDiagonalSum\", sense=MINIMIZE, objective=sum(set(N.flat_map(lambda (i: natural): N.map(lambda (j: natural): (i, j))).filter(lambda (i, j): i != j)).map(lambda ((i, j): Tuple[natural, natural]): J[i, j])), constraints=[])"
]
},
"execution_count": 13,
@@ -669,10 +669,10 @@
"id": "5136e06e",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:50.112733Z",
- "iopub.status.busy": "2026-03-24T02:05:50.112670Z",
- "iopub.status.idle": "2026-03-24T02:05:50.189751Z",
- "shell.execute_reply": "2026-03-24T02:05:50.189365Z"
+ "iopub.execute_input": "2026-06-04T02:50:57.723607Z",
+ "iopub.status.busy": "2026-06-04T02:50:57.723547Z",
+ "iopub.status.idle": "2026-06-04T02:50:57.824869Z",
+ "shell.execute_reply": "2026-06-04T02:50:57.824540Z"
}
},
"outputs": [
@@ -717,10 +717,10 @@
"id": "22097eb3",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:50.190859Z",
- "iopub.status.busy": "2026-03-24T02:05:50.190800Z",
- "iopub.status.idle": "2026-03-24T02:05:50.294869Z",
- "shell.execute_reply": "2026-03-24T02:05:50.294439Z"
+ "iopub.execute_input": "2026-06-04T02:50:57.826009Z",
+ "iopub.status.busy": "2026-06-04T02:50:57.825955Z",
+ "iopub.status.idle": "2026-06-04T02:50:57.976202Z",
+ "shell.execute_reply": "2026-06-04T02:50:57.975750Z"
}
},
"outputs": [
@@ -732,7 +732,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"DependentSum\", sense=MINIMIZE, objective=sum(M.flat_map(lambda (i: natural): a[i].map(lambda (j: natural): (i, j))).map(lambda ((i, j): Tuple[natural, natural]): x[j])), constraints=[])"
+ "Problem(name=\"DependentSum\", sense=MINIMIZE, objective=sum(set(M.flat_map(lambda (i: natural): a[i].map(lambda (j: natural): (i, j)))).map(lambda ((i, j): Tuple[natural, natural]): x[j])), constraints=[])"
]
},
"execution_count": 15,
@@ -776,10 +776,10 @@
"id": "4c24379f",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:50.296177Z",
- "iopub.status.busy": "2026-03-24T02:05:50.296114Z",
- "iopub.status.idle": "2026-03-24T02:05:50.365231Z",
- "shell.execute_reply": "2026-03-24T02:05:50.364897Z"
+ "iopub.execute_input": "2026-06-04T02:50:57.977263Z",
+ "iopub.status.busy": "2026-06-04T02:50:57.977216Z",
+ "iopub.status.idle": "2026-06-04T02:50:58.061532Z",
+ "shell.execute_reply": "2026-06-04T02:50:58.061218Z"
}
},
"outputs": [
@@ -793,7 +793,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"OneHot\", sense=MINIMIZE, objective=0, constraints={onehot: [Constraint(name=\"onehot\", sense=EQUAL, left=sum(x), right=1, shape=Scalar(Binary)),],})"
+ "Problem(name=\"OneHot\", sense=MINIMIZE, objective=0, constraints={onehot: [Constraint(name=\"onehot\", sense=EQUAL, left=sum(x), right=1, shape=Scalar(Natural)),],})"
]
},
"execution_count": 16,
@@ -824,10 +824,10 @@
"id": "73fff5dc",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:50.366462Z",
- "iopub.status.busy": "2026-03-24T02:05:50.366397Z",
- "iopub.status.idle": "2026-03-24T02:05:50.467014Z",
- "shell.execute_reply": "2026-03-24T02:05:50.465641Z"
+ "iopub.execute_input": "2026-06-04T02:50:58.062624Z",
+ "iopub.status.busy": "2026-06-04T02:50:58.062567Z",
+ "iopub.status.idle": "2026-06-04T02:50:58.174144Z",
+ "shell.execute_reply": "2026-06-04T02:50:58.173793Z"
}
},
"outputs": [
@@ -841,7 +841,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"OneHot\", sense=MINIMIZE, objective=0, constraints={onehot: [Constraint(name=\"onehot\", sense=EQUAL, left=sum(x), right=1, shape=Scalar(Binary)),],})"
+ "Problem(name=\"OneHot\", sense=MINIMIZE, objective=0, constraints={onehot: [Constraint(name=\"onehot\", sense=EQUAL, left=sum(x), right=1, shape=Scalar(Natural)),],})"
]
},
"execution_count": 17,
@@ -881,10 +881,10 @@
"id": "28999f5f",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:50.473756Z",
- "iopub.status.busy": "2026-03-24T02:05:50.473630Z",
- "iopub.status.idle": "2026-03-24T02:05:50.574785Z",
- "shell.execute_reply": "2026-03-24T02:05:50.574354Z"
+ "iopub.execute_input": "2026-06-04T02:50:58.175374Z",
+ "iopub.status.busy": "2026-06-04T02:50:58.175321Z",
+ "iopub.status.idle": "2026-06-04T02:50:58.266036Z",
+ "shell.execute_reply": "2026-06-04T02:50:58.265713Z"
}
},
"outputs": [
@@ -930,10 +930,10 @@
"id": "7091b61a",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:50.576009Z",
- "iopub.status.busy": "2026-03-24T02:05:50.575942Z",
- "iopub.status.idle": "2026-03-24T02:05:50.655183Z",
- "shell.execute_reply": "2026-03-24T02:05:50.654590Z"
+ "iopub.execute_input": "2026-06-04T02:50:58.267190Z",
+ "iopub.status.busy": "2026-06-04T02:50:58.267134Z",
+ "iopub.status.idle": "2026-06-04T02:50:58.401428Z",
+ "shell.execute_reply": "2026-06-04T02:50:58.400823Z"
}
},
"outputs": [
@@ -988,10 +988,10 @@
"id": "db92c346",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:50.656805Z",
- "iopub.status.busy": "2026-03-24T02:05:50.656716Z",
- "iopub.status.idle": "2026-03-24T02:05:50.753056Z",
- "shell.execute_reply": "2026-03-24T02:05:50.752741Z"
+ "iopub.execute_input": "2026-06-04T02:50:58.403203Z",
+ "iopub.status.busy": "2026-06-04T02:50:58.403116Z",
+ "iopub.status.idle": "2026-06-04T02:50:58.563882Z",
+ "shell.execute_reply": "2026-06-04T02:50:58.563581Z"
}
},
"outputs": [
@@ -1000,12 +1000,12 @@
"text/latex": [
"$$\\begin{array}{rl}\n",
"\\text{Problem}\\colon &\\text{2D K-Hot}\\\\\\displaystyle \\min &\\displaystyle 0\\\\&\\\\\\text{s.t.}&\\\\&\\begin{aligned}\n",
- "\\text{2d k-hot}&\\quad \\displaystyle x.\\mathop{\\mathtt{sum}}\\left(\\mathtt{axis}=\\left[1\\right]\\right)=K\\end{aligned}\n",
+ "\\text{2d k-hot}&\\quad \\displaystyle {x.\\mathop{\\mathtt{sum}}\\left(\\mathtt{axis}=\\left[1\\right]\\right)}_{i}={K}_{i}\\quad \\forall i\\;\\text{s.t.}\\;i\\in \\left\\{0,\\ldots ,N-1\\right\\}\\end{aligned}\n",
"\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{Array}}\\left[N\\times M;\\left\\{0, 1\\right\\}\\right]&\\quad &2\\text{-dim binary variable}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}K&\\in \\mathop{\\mathrm{Array}}\\left[(-);\\mathbb{N}\\right]&\\quad &1\\text{-dimensional array of placeholders with elements in }\\mathbb{N}\\\\M&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\\\end{alignedat}\\\\&\\\\&\\text{Named Expressions:}\\\\&\\qquad \\begin{alignedat}{2}N&=\\mathop{\\mathtt{len\\_{}at}}\\left(K,0\\right)&\\quad &\\in \\mathbb{N}\\\\\\end{alignedat}\\end{array}\n",
"$$"
],
"text/plain": [
- "Problem(name=\"2D K-Hot\", sense=MINIMIZE, objective=0, constraints={2d k-hot: [Constraint(name=\"2d k-hot\", sense=EQUAL, left=x.sum(1), right=K, shape=SameTensorLike { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_49545/1184867636.py\", start: SrcLoc { line: 5, column: 4 }, end: SrcLoc { line: 5, column: 40 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_49545/1184867636.py\", start: SrcLoc { line: 5, column: 4 }, end: SrcLoc { line: 5, column: 40 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Natural }, src_span: NoSrcSpan } }), scalar: Natural }),],})"
+ "Problem(name=\"2D K-Hot\", sense=MINIMIZE, objective=0, constraints={2d k-hot: [Constraint(name=\"2d k-hot\", sense=EQUAL, left=x.sum(1), right=K, shape=SameTensorLike { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_5522/1184867636.py\", start: SrcLoc { line: 5, column: 4 }, end: SrcLoc { line: 5, column: 40 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_5522/1184867636.py\", start: SrcLoc { line: 5, column: 4 }, end: SrcLoc { line: 5, column: 40 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Natural }, src_span: NoSrcSpan } }), scalar: Natural }),],})"
]
},
"execution_count": 20,
@@ -1038,10 +1038,10 @@
"id": "60016a39",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:50.754176Z",
- "iopub.status.busy": "2026-03-24T02:05:50.754110Z",
- "iopub.status.idle": "2026-03-24T02:05:50.855294Z",
- "shell.execute_reply": "2026-03-24T02:05:50.854844Z"
+ "iopub.execute_input": "2026-06-04T02:50:58.565131Z",
+ "iopub.status.busy": "2026-06-04T02:50:58.565072Z",
+ "iopub.status.idle": "2026-06-04T02:50:58.725785Z",
+ "shell.execute_reply": "2026-06-04T02:50:58.725491Z"
}
},
"outputs": [
@@ -1050,12 +1050,12 @@
"text/latex": [
"$$\\begin{array}{rl}\n",
"\\text{Problem}\\colon &\\text{2D K-Hot}\\\\\\displaystyle \\min &\\displaystyle 0\\\\&\\\\\\text{s.t.}&\\\\&\\begin{aligned}\n",
- "\\text{2d k-hot}&\\quad \\displaystyle x.\\mathop{\\mathtt{sum}}\\left(\\mathtt{axis}=\\left[1\\right]\\right)=K\\end{aligned}\n",
+ "\\text{2d k-hot}&\\quad \\displaystyle {x.\\mathop{\\mathtt{sum}}\\left(\\mathtt{axis}=\\left[1\\right]\\right)}_{i}={K}_{i}\\quad \\forall i\\;\\text{s.t.}\\;i\\in \\left\\{0,\\ldots ,N-1\\right\\}\\end{aligned}\n",
"\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{Array}}\\left[N\\times M;\\left\\{0, 1\\right\\}\\right]&\\quad &2\\text{-dim binary variable}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}K&\\in \\mathop{\\mathrm{Array}}\\left[(-);\\mathbb{N}\\right]&\\quad &1\\text{-dimensional array of placeholders with elements in }\\mathbb{N}\\\\M&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\\\end{alignedat}\\\\&\\\\&\\text{Named Expressions:}\\\\&\\qquad \\begin{alignedat}{2}N&=\\mathop{\\mathtt{len\\_{}at}}\\left(K,0\\right)&\\quad &\\in \\mathbb{N}\\\\\\end{alignedat}\\end{array}\n",
"$$"
],
"text/plain": [
- "Problem(name=\"2D K-Hot\", sense=MINIMIZE, objective=0, constraints={2d k-hot: [Constraint(name=\"2d k-hot\", sense=EQUAL, left=x.sum(1), right=K, shape=SameTensorLike { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_49545/1629874504.py\", start: SrcLoc { line: 6, column: 8 }, end: SrcLoc { line: 6, column: 39 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_49545/1629874504.py\", start: SrcLoc { line: 6, column: 8 }, end: SrcLoc { line: 6, column: 39 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Natural }, src_span: NoSrcSpan } }), scalar: Natural }),],})"
+ "Problem(name=\"2D K-Hot\", sense=MINIMIZE, objective=0, constraints={2d k-hot: [Constraint(name=\"2d k-hot\", sense=EQUAL, left=x.sum(1), right=K, shape=SameTensorLike { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_5522/1629874504.py\", start: SrcLoc { line: 6, column: 8 }, end: SrcLoc { line: 6, column: 39 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_5522/1629874504.py\", start: SrcLoc { line: 6, column: 8 }, end: SrcLoc { line: 6, column: 39 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Natural }, src_span: NoSrcSpan } }), scalar: Natural }),],})"
]
},
"execution_count": 21,
@@ -1097,10 +1097,10 @@
"id": "8dbef935",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:50.856482Z",
- "iopub.status.busy": "2026-03-24T02:05:50.856419Z",
- "iopub.status.idle": "2026-03-24T02:05:51.037052Z",
- "shell.execute_reply": "2026-03-24T02:05:51.036766Z"
+ "iopub.execute_input": "2026-06-04T02:50:58.726995Z",
+ "iopub.status.busy": "2026-06-04T02:50:58.726938Z",
+ "iopub.status.idle": "2026-06-04T02:50:59.066308Z",
+ "shell.execute_reply": "2026-06-04T02:50:59.065942Z"
}
},
"outputs": [
@@ -1150,10 +1150,10 @@
"id": "ccce502f",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:51.038413Z",
- "iopub.status.busy": "2026-03-24T02:05:51.038340Z",
- "iopub.status.idle": "2026-03-24T02:05:51.220940Z",
- "shell.execute_reply": "2026-03-24T02:05:51.220510Z"
+ "iopub.execute_input": "2026-06-04T02:50:59.067431Z",
+ "iopub.status.busy": "2026-06-04T02:50:59.067375Z",
+ "iopub.status.idle": "2026-06-04T02:50:59.303655Z",
+ "shell.execute_reply": "2026-06-04T02:50:59.303356Z"
}
},
"outputs": [
@@ -1167,7 +1167,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"KHotOverSet\", sense=MINIMIZE, objective=0, constraints={k-hot_constraint: [Constraint(name=\"k-hot_constraint\", , lambda a: sum(C[a].map(lambda (i: natural): x[i])) == K[a], domain=set(M)),],})"
+ "Problem(name=\"KHotOverSet\", sense=MINIMIZE, objective=0, constraints={k-hot_constraint: [Constraint(name=\"k-hot_constraint\", , lambda a: sum(set(C[a]).map(lambda (i: natural): x[i])) == K[a], domain=set(M)),],})"
]
},
"execution_count": 23,
@@ -1212,10 +1212,10 @@
"id": "3f12d8d7",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:51.222576Z",
- "iopub.status.busy": "2026-03-24T02:05:51.222483Z",
- "iopub.status.idle": "2026-03-24T02:05:51.314397Z",
- "shell.execute_reply": "2026-03-24T02:05:51.313970Z"
+ "iopub.execute_input": "2026-06-04T02:50:59.304991Z",
+ "iopub.status.busy": "2026-06-04T02:50:59.304936Z",
+ "iopub.status.idle": "2026-06-04T02:50:59.418310Z",
+ "shell.execute_reply": "2026-06-04T02:50:59.417959Z"
}
},
"outputs": [
@@ -1262,10 +1262,10 @@
"id": "d4b89527",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:51.315599Z",
- "iopub.status.busy": "2026-03-24T02:05:51.315536Z",
- "iopub.status.idle": "2026-03-24T02:05:51.412830Z",
- "shell.execute_reply": "2026-03-24T02:05:51.412389Z"
+ "iopub.execute_input": "2026-06-04T02:50:59.419502Z",
+ "iopub.status.busy": "2026-06-04T02:50:59.419446Z",
+ "iopub.status.idle": "2026-06-04T02:50:59.551122Z",
+ "shell.execute_reply": "2026-06-04T02:50:59.550651Z"
}
},
"outputs": [
@@ -1321,10 +1321,10 @@
"id": "632c4d8c",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:51.414267Z",
- "iopub.status.busy": "2026-03-24T02:05:51.414180Z",
- "iopub.status.idle": "2026-03-24T02:05:51.569044Z",
- "shell.execute_reply": "2026-03-24T02:05:51.568650Z"
+ "iopub.execute_input": "2026-06-04T02:50:59.552451Z",
+ "iopub.status.busy": "2026-06-04T02:50:59.552385Z",
+ "iopub.status.idle": "2026-06-04T02:50:59.812194Z",
+ "shell.execute_reply": "2026-06-04T02:50:59.811823Z"
}
},
"outputs": [
@@ -1333,12 +1333,12 @@
"text/latex": [
"$$\\begin{array}{rl}\n",
"\\text{Problem}\\colon &\\text{SOS-1}\\\\\\displaystyle \\min &\\displaystyle 0\\\\&\\\\\\text{s.t.}&\\\\&\\begin{aligned}\n",
- "\\text{Big-M}&\\quad \\displaystyle a\\leq M\\cdot x\\\\\\text{SOS1}&\\quad \\displaystyle \\sum _{\\vec{\\imath }}{{{\\left(x\\right)}}_{\\vec{\\imath }}}\\leq 1\\end{aligned}\n",
+ "\\text{Big-M}&\\quad \\displaystyle {a}_{i}\\leq {\\left(M\\cdot x\\right)}_{i}\\quad \\forall i\\;\\text{s.t.}\\;i\\in \\left\\{0,\\ldots ,N-1\\right\\}\\\\\\text{SOS1}&\\quad \\displaystyle \\sum _{\\vec{\\imath }}{{{\\left(x\\right)}}_{\\vec{\\imath }}}\\leq 1\\end{aligned}\n",
"\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}a&\\in \\mathop{\\mathrm{Array}}\\left[N;\\mathbb{R}\\right]\\;\\left(0\\leq {a}_{i}\\leq {M}_{i}\\right)&\\quad &1\\text{-dim continuous variable}\\\\x&\\in \\mathop{\\mathrm{Array}}\\left[N;\\left\\{0, 1\\right\\}\\right]&\\quad &1\\text{-dim binary variable}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}M&\\in \\mathop{\\mathrm{Array}}\\left[N;\\mathbb{R}\\right]&\\quad &1\\text{-dimensional array of placeholders with elements in }\\mathbb{R}\\\\N&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\\\end{alignedat}\\end{array}\n",
"$$"
],
"text/plain": [
- "Problem(name=\"SOS-1\", sense=MINIMIZE, objective=0, constraints={Big-M: [Constraint(name=\"Big-M\", sense=LESS_THAN_EQUAL, left=a, right=M * x, shape=SameTensorLike { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: Some(SetStyle { element: None, kind: Natural }), subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_49545/1199227916.py\", start: SrcLoc { line: 2, column: 4 }, end: SrcLoc { line: 2, column: 24 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_49545/1199227916.py\", start: SrcLoc { line: 2, column: 4 }, end: SrcLoc { line: 2, column: 24 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Float }, src_span: NoSrcSpan } }), scalar: Float }),],SOS1: [Constraint(name=\"SOS1\", sense=LESS_THAN_EQUAL, left=sum(x), right=1, shape=Scalar(Binary)),],})"
+ "Problem(name=\"SOS-1\", sense=MINIMIZE, objective=0, constraints={Big-M: [Constraint(name=\"Big-M\", sense=LESS_THAN_EQUAL, left=a, right=M * x, shape=SameTensorLike { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: Some(SetStyle { element: None, kind: Natural }), subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_5522/1199227916.py\", start: SrcLoc { line: 2, column: 4 }, end: SrcLoc { line: 2, column: 24 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_5522/1199227916.py\", start: SrcLoc { line: 2, column: 4 }, end: SrcLoc { line: 2, column: 24 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Float }, src_span: NoSrcSpan } }), scalar: Float }),],SOS1: [Constraint(name=\"SOS1\", sense=LESS_THAN_EQUAL, left=sum(x), right=1, shape=Scalar(Natural)),],})"
]
},
"execution_count": 26,
@@ -1372,10 +1372,10 @@
"id": "cfcc2cf8",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:51.570194Z",
- "iopub.status.busy": "2026-03-24T02:05:51.570136Z",
- "iopub.status.idle": "2026-03-24T02:05:51.730890Z",
- "shell.execute_reply": "2026-03-24T02:05:51.730482Z"
+ "iopub.execute_input": "2026-06-04T02:50:59.814231Z",
+ "iopub.status.busy": "2026-06-04T02:50:59.814133Z",
+ "iopub.status.idle": "2026-06-04T02:51:00.071507Z",
+ "shell.execute_reply": "2026-06-04T02:51:00.071073Z"
}
},
"outputs": [
@@ -1384,12 +1384,12 @@
"text/latex": [
"$$\\begin{array}{rl}\n",
"\\text{Problem}\\colon &\\text{SOS-1}\\\\\\displaystyle \\min &\\displaystyle 0\\\\&\\\\\\text{s.t.}&\\\\&\\begin{aligned}\n",
- "\\text{Big-M}&\\quad \\displaystyle a\\leq M\\cdot x\\\\\\text{SOS1}&\\quad \\displaystyle \\sum _{\\vec{\\imath }}{{{\\left(x\\right)}}_{\\vec{\\imath }}}\\leq 1\\end{aligned}\n",
+ "\\text{Big-M}&\\quad \\displaystyle {a}_{i}\\leq {\\left(M\\cdot x\\right)}_{i}\\quad \\forall i\\;\\text{s.t.}\\;i\\in \\left\\{0,\\ldots ,N-1\\right\\}\\\\\\text{SOS1}&\\quad \\displaystyle \\sum _{\\vec{\\imath }}{{{\\left(x\\right)}}_{\\vec{\\imath }}}\\leq 1\\end{aligned}\n",
"\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}a&\\in \\mathop{\\mathrm{Array}}\\left[N;\\mathbb{R}\\right]\\;\\left(0\\leq {a}_{i}\\leq {M}_{i}\\right)&\\quad &1\\text{-dim continuous variable}\\\\x&\\in \\mathop{\\mathrm{Array}}\\left[N;\\left\\{0, 1\\right\\}\\right]&\\quad &1\\text{-dim binary variable}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}M&\\in \\mathop{\\mathrm{Array}}\\left[N;\\mathbb{R}\\right]&\\quad &1\\text{-dimensional array of placeholders with elements in }\\mathbb{R}\\\\N&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\\\end{alignedat}\\end{array}\n",
"$$"
],
"text/plain": [
- "Problem(name=\"SOS-1\", sense=MINIMIZE, objective=0, constraints={Big-M: [Constraint(name=\"Big-M\", sense=LESS_THAN_EQUAL, left=a, right=M * x, shape=SameTensorLike { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: Some(SetStyle { element: None, kind: Natural }), subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_49545/3596302424.py\", start: SrcLoc { line: 3, column: 8 }, end: SrcLoc { line: 3, column: 25 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_49545/3596302424.py\", start: SrcLoc { line: 3, column: 8 }, end: SrcLoc { line: 3, column: 25 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Float }, src_span: NoSrcSpan } }), scalar: Float }),],SOS1: [Constraint(name=\"SOS1\", sense=LESS_THAN_EQUAL, left=sum(x), right=1, shape=Scalar(Binary)),],})"
+ "Problem(name=\"SOS-1\", sense=MINIMIZE, objective=0, constraints={Big-M: [Constraint(name=\"Big-M\", sense=LESS_THAN_EQUAL, left=a, right=M * x, shape=SameTensorLike { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: Some(SetStyle { element: None, kind: Natural }), subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_5522/3596302424.py\", start: SrcLoc { line: 3, column: 8 }, end: SrcLoc { line: 3, column: 25 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_5522/3596302424.py\", start: SrcLoc { line: 3, column: 8 }, end: SrcLoc { line: 3, column: 25 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Float }, src_span: NoSrcSpan } }), scalar: Float }),],SOS1: [Constraint(name=\"SOS1\", sense=LESS_THAN_EQUAL, left=sum(x), right=1, shape=Scalar(Natural)),],})"
]
},
"execution_count": 27,
@@ -1432,10 +1432,10 @@
"id": "29ed161b",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:51.732007Z",
- "iopub.status.busy": "2026-03-24T02:05:51.731947Z",
- "iopub.status.idle": "2026-03-24T02:05:51.983084Z",
- "shell.execute_reply": "2026-03-24T02:05:51.982595Z"
+ "iopub.execute_input": "2026-06-04T02:51:00.072938Z",
+ "iopub.status.busy": "2026-06-04T02:51:00.072867Z",
+ "iopub.status.idle": "2026-06-04T02:51:00.387069Z",
+ "shell.execute_reply": "2026-06-04T02:51:00.386761Z"
}
},
"outputs": [
@@ -1490,10 +1490,10 @@
"id": "01df2009",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:51.984105Z",
- "iopub.status.busy": "2026-03-24T02:05:51.984039Z",
- "iopub.status.idle": "2026-03-24T02:05:52.267729Z",
- "shell.execute_reply": "2026-03-24T02:05:52.267301Z"
+ "iopub.execute_input": "2026-06-04T02:51:00.388135Z",
+ "iopub.status.busy": "2026-06-04T02:51:00.388075Z",
+ "iopub.status.idle": "2026-06-04T02:51:00.776223Z",
+ "shell.execute_reply": "2026-06-04T02:51:00.775890Z"
}
},
"outputs": [
@@ -1558,7 +1558,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.11"
+ "version": "3.11.14"
}
},
"nbformat": 4,
diff --git a/docs/en/references/migration_guide_to_jijmodeling2.ipynb b/docs/en/references/migration_guide_to_jijmodeling2.ipynb
index ac8ca450..e8b12518 100644
--- a/docs/en/references/migration_guide_to_jijmodeling2.ipynb
+++ b/docs/en/references/migration_guide_to_jijmodeling2.ipynb
@@ -123,10 +123,10 @@
"id": "07073ecc",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:43.321800Z",
- "iopub.status.busy": "2026-03-24T02:05:43.321690Z",
- "iopub.status.idle": "2026-03-24T02:05:43.798175Z",
- "shell.execute_reply": "2026-03-24T02:05:43.797789Z"
+ "iopub.execute_input": "2026-06-04T02:50:50.168536Z",
+ "iopub.status.busy": "2026-06-04T02:50:50.168354Z",
+ "iopub.status.idle": "2026-06-04T02:50:50.729844Z",
+ "shell.execute_reply": "2026-06-04T02:50:50.729556Z"
}
},
"outputs": [
@@ -140,7 +140,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"TSP\", sense=MINIMIZE, objective=sum(N.flat_map(lambda (i: natural): N.map(lambda (j: natural): (i, j))).flat_map(lambda ((i, j): Tuple[natural, natural]): N.map(lambda (t: natural): (i, j, t))).map(lambda ((i, j, t): Tuple[natural, natural, natural]): d[i, j] * x[i, t] * x[j, (t + 1) % N])), constraints={one-city: [Constraint(name=\"one-city\", , lambda t: sum(N.map(lambda (i: natural): x[i, t])) == 1, domain=set(N), description=\"Exactly one city is visited at each time step\"),],one-time: [Constraint(name=\"one-time\", , lambda i: sum(N.map(lambda (t: natural): x[i, t])) == 1, domain=set(N), description=\"Each city is visited exactly once\"),],})"
+ "Problem(name=\"TSP\", sense=MINIMIZE, objective=sum(set(N.flat_map(lambda (i: natural): N.map(lambda (j: natural): (i, j))).flat_map(lambda ((i, j): Tuple[natural, natural]): N.map(lambda (t: natural): (i, j, t)))).map(lambda ((i, j, t): Tuple[natural, natural, natural]): d[i, j] * x[i, t] * x[j, (t + 1) % N])), constraints={one-city: [Constraint(name=\"one-city\", , lambda t: sum(set(N).map(lambda (i: natural): x[i, t])) == 1, domain=set(N), description=\"Exactly one city is visited at each time step\"),],one-time: [Constraint(name=\"one-time\", , lambda i: sum(set(N).map(lambda (t: natural): x[i, t])) == 1, domain=set(N), description=\"Each city is visited exactly once\"),],})"
]
},
"execution_count": 1,
@@ -192,10 +192,10 @@
"id": "a735444a",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:43.799604Z",
- "iopub.status.busy": "2026-03-24T02:05:43.799490Z",
- "iopub.status.idle": "2026-03-24T02:05:44.480146Z",
- "shell.execute_reply": "2026-03-24T02:05:44.479708Z"
+ "iopub.execute_input": "2026-06-04T02:50:50.731155Z",
+ "iopub.status.busy": "2026-06-04T02:50:50.731072Z",
+ "iopub.status.idle": "2026-06-04T02:50:51.096492Z",
+ "shell.execute_reply": "2026-06-04T02:50:51.096053Z"
}
},
"outputs": [
@@ -372,10 +372,10 @@
"id": "1ff67480",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:44.481185Z",
- "iopub.status.busy": "2026-03-24T02:05:44.481084Z",
- "iopub.status.idle": "2026-03-24T02:05:44.483291Z",
- "shell.execute_reply": "2026-03-24T02:05:44.482927Z"
+ "iopub.execute_input": "2026-06-04T02:50:51.097446Z",
+ "iopub.status.busy": "2026-06-04T02:50:51.097356Z",
+ "iopub.status.idle": "2026-06-04T02:50:51.099304Z",
+ "shell.execute_reply": "2026-06-04T02:50:51.098971Z"
}
},
"outputs": [
@@ -408,10 +408,10 @@
"id": "e436bcac",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:44.484201Z",
- "iopub.status.busy": "2026-03-24T02:05:44.484151Z",
- "iopub.status.idle": "2026-03-24T02:05:44.821125Z",
- "shell.execute_reply": "2026-03-24T02:05:44.820732Z"
+ "iopub.execute_input": "2026-06-04T02:50:51.100182Z",
+ "iopub.status.busy": "2026-06-04T02:50:51.100132Z",
+ "iopub.status.idle": "2026-06-04T02:50:51.255245Z",
+ "shell.execute_reply": "2026-06-04T02:50:51.254851Z"
}
},
"outputs": [],
@@ -710,10 +710,10 @@
"id": "4248c879",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:44.822546Z",
- "iopub.status.busy": "2026-03-24T02:05:44.822476Z",
- "iopub.status.idle": "2026-03-24T02:05:44.888743Z",
- "shell.execute_reply": "2026-03-24T02:05:44.888343Z"
+ "iopub.execute_input": "2026-06-04T02:50:51.256469Z",
+ "iopub.status.busy": "2026-06-04T02:50:51.256412Z",
+ "iopub.status.idle": "2026-06-04T02:50:51.351705Z",
+ "shell.execute_reply": "2026-06-04T02:50:51.351413Z"
}
},
"outputs": [
@@ -725,7 +725,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"SimpleSum\", sense=MINIMIZE, objective=sum(N.map(lambda (i: natural): x[i])), constraints=[])"
+ "Problem(name=\"SimpleSum\", sense=MINIMIZE, objective=sum(set(N).map(lambda (i: natural): x[i])), constraints=[])"
]
},
"execution_count": 5,
@@ -784,10 +784,10 @@
"id": "70c79151",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:44.889952Z",
- "iopub.status.busy": "2026-03-24T02:05:44.889891Z",
- "iopub.status.idle": "2026-03-24T02:05:44.978267Z",
- "shell.execute_reply": "2026-03-24T02:05:44.977914Z"
+ "iopub.execute_input": "2026-06-04T02:50:51.352903Z",
+ "iopub.status.busy": "2026-06-04T02:50:51.352843Z",
+ "iopub.status.idle": "2026-06-04T02:50:51.494409Z",
+ "shell.execute_reply": "2026-06-04T02:50:51.493973Z"
}
},
"outputs": [
@@ -799,7 +799,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"WeightedSum\", sense=MINIMIZE, objective=sum(N.map(lambda (i: natural): a[i] * x[i])), constraints=[])"
+ "Problem(name=\"WeightedSum\", sense=MINIMIZE, objective=sum(set(N).map(lambda (i: natural): a[i] * x[i])), constraints=[])"
]
},
"execution_count": 6,
@@ -852,10 +852,10 @@
"id": "a4897d4a",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:44.979404Z",
- "iopub.status.busy": "2026-03-24T02:05:44.979343Z",
- "iopub.status.idle": "2026-03-24T02:05:45.071099Z",
- "shell.execute_reply": "2026-03-24T02:05:45.070806Z"
+ "iopub.execute_input": "2026-06-04T02:50:51.495538Z",
+ "iopub.status.busy": "2026-06-04T02:50:51.495474Z",
+ "iopub.status.idle": "2026-06-04T02:50:51.624174Z",
+ "shell.execute_reply": "2026-06-04T02:50:51.623811Z"
}
},
"outputs": [
@@ -867,7 +867,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"SumAlongSet\", sense=MINIMIZE, objective=sum(C.map(lambda (i: natural): x[i])), constraints=[])"
+ "Problem(name=\"SumAlongSet\", sense=MINIMIZE, objective=sum(set(C).map(lambda (i: natural): x[i])), constraints=[])"
]
},
"execution_count": 7,
@@ -920,10 +920,10 @@
"id": "bbb6f2fc",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:45.072441Z",
- "iopub.status.busy": "2026-03-24T02:05:45.072369Z",
- "iopub.status.idle": "2026-03-24T02:05:45.163873Z",
- "shell.execute_reply": "2026-03-24T02:05:45.163453Z"
+ "iopub.execute_input": "2026-06-04T02:50:51.625208Z",
+ "iopub.status.busy": "2026-06-04T02:50:51.625145Z",
+ "iopub.status.idle": "2026-06-04T02:50:51.754842Z",
+ "shell.execute_reply": "2026-06-04T02:50:51.754444Z"
}
},
"outputs": [
@@ -935,7 +935,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"EdgeSum\", sense=MINIMIZE, objective=sum(E.map(lambda ((i, j): Tuple[natural, natural]): x[i] * x[j])), constraints=[])"
+ "Problem(name=\"EdgeSum\", sense=MINIMIZE, objective=sum(set(E).map(lambda ((i, j): Tuple[natural, natural]): x[i] * x[j])), constraints=[])"
]
},
"execution_count": 8,
@@ -981,10 +981,10 @@
"id": "8407f344",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:45.164965Z",
- "iopub.status.busy": "2026-03-24T02:05:45.164904Z",
- "iopub.status.idle": "2026-03-24T02:05:45.284771Z",
- "shell.execute_reply": "2026-03-24T02:05:45.284467Z"
+ "iopub.execute_input": "2026-06-04T02:50:51.755888Z",
+ "iopub.status.busy": "2026-06-04T02:50:51.755833Z",
+ "iopub.status.idle": "2026-06-04T02:50:51.929172Z",
+ "shell.execute_reply": "2026-06-04T02:50:51.928825Z"
}
},
"outputs": [
@@ -996,7 +996,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"EdgeSumRows\", sense=MINIMIZE, objective=sum(E.rows().map(lambda ((l, r): Array[2; natural]): x[l] * x[r])), constraints=[])"
+ "Problem(name=\"EdgeSumRows\", sense=MINIMIZE, objective=sum(set(E.rows()).map(lambda ((l, r): Array[2; natural]): x[l] * x[r])), constraints=[])"
]
},
"execution_count": 9,
@@ -1049,10 +1049,10 @@
"id": "0d391b43",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:45.286019Z",
- "iopub.status.busy": "2026-03-24T02:05:45.285964Z",
- "iopub.status.idle": "2026-03-24T02:05:45.434244Z",
- "shell.execute_reply": "2026-03-24T02:05:45.433890Z"
+ "iopub.execute_input": "2026-06-04T02:50:51.930261Z",
+ "iopub.status.busy": "2026-06-04T02:50:51.930208Z",
+ "iopub.status.idle": "2026-06-04T02:50:52.165288Z",
+ "shell.execute_reply": "2026-06-04T02:50:52.164812Z"
}
},
"outputs": [
@@ -1064,7 +1064,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"ConditionalSum\", sense=MINIMIZE, objective=sum(N.flat_map(lambda (i: natural): N.map(lambda (j: natural): (i, j))).filter(lambda (i, j): i > j).map(lambda ((i, j): Tuple[natural, natural]): J[i, j] * x[i] * x[j])), constraints=[])"
+ "Problem(name=\"ConditionalSum\", sense=MINIMIZE, objective=sum(set(N.flat_map(lambda (i: natural): N.map(lambda (j: natural): (i, j))).filter(lambda (i, j): i > j)).map(lambda ((i, j): Tuple[natural, natural]): J[i, j] * x[i] * x[j])), constraints=[])"
]
},
"execution_count": 10,
@@ -1102,10 +1102,10 @@
"id": "e3050e27",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:45.435289Z",
- "iopub.status.busy": "2026-03-24T02:05:45.435233Z",
- "iopub.status.idle": "2026-03-24T02:05:45.703773Z",
- "shell.execute_reply": "2026-03-24T02:05:45.703350Z"
+ "iopub.execute_input": "2026-06-04T02:50:52.166704Z",
+ "iopub.status.busy": "2026-06-04T02:50:52.166631Z",
+ "iopub.status.idle": "2026-06-04T02:50:52.393011Z",
+ "shell.execute_reply": "2026-06-04T02:50:52.392455Z"
}
},
"outputs": [
@@ -1117,7 +1117,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"ConditionalSum\", sense=MINIMIZE, objective=sum(N.flat_map(lambda (i: natural): i.map(lambda (j: natural): (i, j))).map(lambda ((i, j): Tuple[natural, natural]): J[i, j] * x[i] * x[j])), constraints=[])"
+ "Problem(name=\"ConditionalSum\", sense=MINIMIZE, objective=sum(set(N.flat_map(lambda (i: natural): i.map(lambda (j: natural): (i, j)))).map(lambda ((i, j): Tuple[natural, natural]): J[i, j] * x[i] * x[j])), constraints=[])"
]
},
"execution_count": 11,
@@ -1155,10 +1155,10 @@
"id": "d4636310",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:45.704909Z",
- "iopub.status.busy": "2026-03-24T02:05:45.704842Z",
- "iopub.status.idle": "2026-03-24T02:05:46.234851Z",
- "shell.execute_reply": "2026-03-24T02:05:46.234033Z"
+ "iopub.execute_input": "2026-06-04T02:50:52.394361Z",
+ "iopub.status.busy": "2026-06-04T02:50:52.394290Z",
+ "iopub.status.idle": "2026-06-04T02:50:53.436123Z",
+ "shell.execute_reply": "2026-06-04T02:50:53.435717Z"
}
},
"outputs": [
@@ -1168,13 +1168,13 @@
"$$\\begin{array}{rl}\n",
"\\text{Problem}\\colon &\\text{QuadraticKnapsackLogistics}\\\\\\displaystyle \\max &\\displaystyle \\sum _{j\\in J}{\\sum _{\\left\\langle i,k\\right\\rangle \\in \\mathop{\\mathtt{keys}}\\left(s\\right)}{{s}_{i,k}\\cdot {x}_{i,j}\\cdot {x}_{k,j}}}+\\sum _{i\\in I}{\\sum _{j\\in J}{{r}_{i}\\cdot {x}_{i,j}}}\\\\&\\\\\\text{s.t.}&\\\\&\\begin{aligned}\n",
"\\text{parcel\\_{}assign}&\\quad \\displaystyle \\sum _{j\\in J}{{x}_{i,j}}=1\\quad \\forall i\\;\\text{s.t.}\\;i\\in I\\\\\\text{truck\\_{}capacity}&\\quad \\displaystyle \\sum _{i\\in I}{{w}_{i}\\cdot {x}_{i,j}}\\leq {C}_{j}\\quad \\forall j\\;\\text{s.t.}\\;j\\in J\\end{aligned}\n",
- "\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{TotalDict}}\\left[I\\times J;\\left\\{0, 1\\right\\}\\right]&\\quad &\\text{a dictionary of }\\text{binary}\\text{ variables with key }I\\times J\\\\&&&\\text{x[i,j] = 1 if parcel i is assigned to truck j, else 0}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}C&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathrm{J};\\mathbb{Z}\\right]&\\quad &\\text{A total dictionary of placeholders with keys }\\mathrm{J}\\text{, values in }\\mathbb{Z}\\\\&&&\\text{The capacity of each truck}\\\\&&&\\\\r&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathrm{I};\\mathbb{Z}\\right]&\\quad &\\text{A total dictionary of placeholders with keys }\\mathrm{I}\\text{, values in }\\mathbb{Z}\\\\&&&\\text{The base revenue of each parcel}\\\\&&&\\\\s&\\in \\mathop{\\mathrm{PartialDict}}\\left[\\mathrm{I}\\times \\mathrm{I};\\mathbb{Z}\\right]&\\quad &\\text{A partial dictionary of placeholders with keys }\\left(\\mathrm{I},\\mathrm{I}\\right)\\text{, values in }\\mathbb{Z}\\\\&&&\\text{The synergy bonus between pairs of parcels}\\\\&&&\\\\w&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathrm{I};\\mathbb{Z}\\right]&\\quad &\\text{A total dictionary of placeholders with keys }\\mathrm{I}\\text{, values in }\\mathbb{Z}\\\\&&&\\text{The weight of each parcel}\\\\\\end{alignedat}\\\\&\\\\&\\text{Category Labels:}\\\\&\\qquad \\begin{array}{rl}\n",
+ "\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in I,j\\in J\\right\\};\\left\\{0, 1\\right\\}\\right]&\\quad &\\text{a dictionary of }\\text{binary}\\text{ variables with key }\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in I,j\\in J\\right\\}\\\\&&&\\text{x[i,j] = 1 if parcel i is assigned to truck j, else 0}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}C&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathrm{J};\\mathbb{Z}\\right]&\\quad &\\text{A total dictionary of placeholders with keys }\\mathrm{J}\\text{, values in }\\mathbb{Z}\\\\&&&\\text{The capacity of each truck}\\\\&&&\\\\r&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathrm{I};\\mathbb{Z}\\right]&\\quad &\\text{A total dictionary of placeholders with keys }\\mathrm{I}\\text{, values in }\\mathbb{Z}\\\\&&&\\text{The base revenue of each parcel}\\\\&&&\\\\s&\\in \\mathop{\\mathrm{PartialDict}}\\left[\\mathrm{I}\\times \\mathrm{I};\\mathbb{Z}\\right]&\\quad &\\text{A partial dictionary of placeholders with keys }\\left(\\mathrm{I},\\mathrm{I}\\right)\\text{, values in }\\mathbb{Z}\\\\&&&\\text{The synergy bonus between pairs of parcels}\\\\&&&\\\\w&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathrm{I};\\mathbb{Z}\\right]&\\quad &\\text{A total dictionary of placeholders with keys }\\mathrm{I}\\text{, values in }\\mathbb{Z}\\\\&&&\\text{The weight of each parcel}\\\\\\end{alignedat}\\\\&\\\\&\\text{Category Labels:}\\\\&\\qquad \\begin{array}{rl}\n",
"I&\\text{The labels of parcels}\\\\J&\\text{The labels of trucks}\\end{array}\n",
"\\end{array}\n",
"$$"
],
"text/plain": [
- "Problem(name=\"QuadraticKnapsackLogistics\", sense=MAXIMIZE, objective=sum(J.flat_map(lambda (j: CategoryLabel(\"J\")): s.keys().map(lambda ((i, k): Tuple[CategoryLabel(\"I\"), CategoryLabel(\"I\")]): (j, i, k))).map(lambda ((j, i, k): Tuple[CategoryLabel(\"J\"), CategoryLabel(\"I\"), CategoryLabel(\"I\")]): s[i, k] * x[i, j] * x[k, j])) + sum(I.flat_map(lambda (i: CategoryLabel(\"I\")): J.map(lambda (j: CategoryLabel(\"J\")): (i, j))).map(lambda ((i, j): Tuple[CategoryLabel(\"I\"), CategoryLabel(\"J\")]): r[i] * x[i, j])), constraints={parcel_assign: [Constraint(name=\"parcel_assign\", , lambda i: sum(J.map(lambda (j: CategoryLabel(\"J\")): x[i, j])) == 1, domain=I),],truck_capacity: [Constraint(name=\"truck_capacity\", , lambda j: sum(I.map(lambda (i: CategoryLabel(\"I\")): w[i] * x[i, j])) <= C[j], domain=J),],})"
+ "Problem(name=\"QuadraticKnapsackLogistics\", sense=MAXIMIZE, objective=sum(set(J.flat_map(lambda (j: CategoryLabel(\"J\")): s.keys().map(lambda ((i, k): Tuple[CategoryLabel(\"I\"), CategoryLabel(\"I\")]): (j, i, k)))).map(lambda ((j, i, k): Tuple[CategoryLabel(\"J\"), CategoryLabel(\"I\"), CategoryLabel(\"I\")]): s[i, k] * x[i, j] * x[k, j])) + sum(set(I.flat_map(lambda (i: CategoryLabel(\"I\")): J.map(lambda (j: CategoryLabel(\"J\")): (i, j)))).map(lambda ((i, j): Tuple[CategoryLabel(\"I\"), CategoryLabel(\"J\")]): r[i] * x[i, j])), constraints={parcel_assign: [Constraint(name=\"parcel_assign\", , lambda i: sum(set(J).map(lambda (j: CategoryLabel(\"J\")): x[i, j])) == 1, domain=I),],truck_capacity: [Constraint(name=\"truck_capacity\", , lambda j: sum(set(I).map(lambda (i: CategoryLabel(\"I\")): w[i] * x[i, j])) <= C[j], domain=J),],})"
]
},
"execution_count": 12,
@@ -1257,10 +1257,10 @@
"id": "164f130e",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:46.236868Z",
- "iopub.status.busy": "2026-03-24T02:05:46.236694Z",
- "iopub.status.idle": "2026-03-24T02:05:46.762020Z",
- "shell.execute_reply": "2026-03-24T02:05:46.761647Z"
+ "iopub.execute_input": "2026-06-04T02:50:53.437215Z",
+ "iopub.status.busy": "2026-06-04T02:50:53.437156Z",
+ "iopub.status.idle": "2026-06-04T02:50:53.909945Z",
+ "shell.execute_reply": "2026-06-04T02:50:53.909532Z"
}
},
"outputs": [],
@@ -1318,10 +1318,10 @@
"id": "60c7c648",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:46.764301Z",
- "iopub.status.busy": "2026-03-24T02:05:46.764158Z",
- "iopub.status.idle": "2026-03-24T02:05:46.857048Z",
- "shell.execute_reply": "2026-03-24T02:05:46.856713Z"
+ "iopub.execute_input": "2026-06-04T02:50:53.911140Z",
+ "iopub.status.busy": "2026-06-04T02:50:53.911082Z",
+ "iopub.status.idle": "2026-06-04T02:50:54.049181Z",
+ "shell.execute_reply": "2026-06-04T02:50:54.048828Z"
}
},
"outputs": [
@@ -1335,7 +1335,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"OneHot\", sense=MINIMIZE, objective=0, constraints={onehot: [Constraint(name=\"onehot\", sense=EQUAL, left=sum(x), right=1, shape=Scalar(Binary)),],})"
+ "Problem(name=\"OneHot\", sense=MINIMIZE, objective=0, constraints={onehot: [Constraint(name=\"onehot\", sense=EQUAL, left=sum(x), right=1, shape=Scalar(Natural)),],})"
]
},
"execution_count": 14,
@@ -1384,10 +1384,10 @@
"id": "c141cc39",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:46.858358Z",
- "iopub.status.busy": "2026-03-24T02:05:46.858294Z",
- "iopub.status.idle": "2026-03-24T02:05:47.052041Z",
- "shell.execute_reply": "2026-03-24T02:05:47.051690Z"
+ "iopub.execute_input": "2026-06-04T02:50:54.050211Z",
+ "iopub.status.busy": "2026-06-04T02:50:54.050152Z",
+ "iopub.status.idle": "2026-06-04T02:50:54.325223Z",
+ "shell.execute_reply": "2026-06-04T02:50:54.324864Z"
}
},
"outputs": [
@@ -1401,7 +1401,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"KHotOverSet\", sense=MINIMIZE, objective=0, constraints={k-hot_constraint: [Constraint(name=\"k-hot_constraint\", , lambda a: sum(C[a].map(lambda (i: natural): x[i])) == K[a], domain=set(M)),],})"
+ "Problem(name=\"KHotOverSet\", sense=MINIMIZE, objective=0, constraints={k-hot_constraint: [Constraint(name=\"k-hot_constraint\", , lambda a: sum(set(C[a]).map(lambda (i: natural): x[i])) == K[a], domain=set(M)),],})"
]
},
"execution_count": 15,
@@ -1466,10 +1466,10 @@
"id": "63466e33",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:47.053191Z",
- "iopub.status.busy": "2026-03-24T02:05:47.053134Z",
- "iopub.status.idle": "2026-03-24T02:05:47.619735Z",
- "shell.execute_reply": "2026-03-24T02:05:47.619326Z"
+ "iopub.execute_input": "2026-06-04T02:50:54.326490Z",
+ "iopub.status.busy": "2026-06-04T02:50:54.326427Z",
+ "iopub.status.idle": "2026-06-04T02:50:54.672700Z",
+ "shell.execute_reply": "2026-06-04T02:50:54.672328Z"
}
},
"outputs": [
@@ -1766,10 +1766,10 @@
"id": "66f48d43",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:47.621016Z",
- "iopub.status.busy": "2026-03-24T02:05:47.620953Z",
- "iopub.status.idle": "2026-03-24T02:05:47.748264Z",
- "shell.execute_reply": "2026-03-24T02:05:47.747608Z"
+ "iopub.execute_input": "2026-06-04T02:50:54.673921Z",
+ "iopub.status.busy": "2026-06-04T02:50:54.673862Z",
+ "iopub.status.idle": "2026-06-04T02:50:54.868410Z",
+ "shell.execute_reply": "2026-06-04T02:50:54.868102Z"
}
},
"outputs": [
@@ -1781,7 +1781,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"My Problem\", sense=MINIMIZE, objective=sum(N.filter(lambda i: i % 2 == 0).flat_map(lambda (i: natural): i.map(lambda (j: natural): (i, j))).map(lambda ((i, j): Tuple[natural, natural]): x[i, j])), constraints=[])"
+ "Problem(name=\"My Problem\", sense=MINIMIZE, objective=sum(set(N.filter(lambda i: i % 2 == 0).flat_map(lambda (i: natural): i.map(lambda (j: natural): (i, j)))).map(lambda ((i, j): Tuple[natural, natural]): x[i, j])), constraints=[])"
]
},
"execution_count": 17,
@@ -1813,10 +1813,10 @@
"id": "35080ca8",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:47.749365Z",
- "iopub.status.busy": "2026-03-24T02:05:47.749301Z",
- "iopub.status.idle": "2026-03-24T02:05:47.850728Z",
- "shell.execute_reply": "2026-03-24T02:05:47.850339Z"
+ "iopub.execute_input": "2026-06-04T02:50:54.869465Z",
+ "iopub.status.busy": "2026-06-04T02:50:54.869406Z",
+ "iopub.status.idle": "2026-06-04T02:50:55.011219Z",
+ "shell.execute_reply": "2026-06-04T02:50:55.010853Z"
}
},
"outputs": [
@@ -1883,7 +1883,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.11"
+ "version": "3.11.14"
}
},
"nbformat": 4,
diff --git a/docs/en/releases/jijmodeling-2.5.0.ipynb b/docs/en/releases/jijmodeling-2.5.0.ipynb
new file mode 100644
index 00000000..410635ea
--- /dev/null
+++ b/docs/en/releases/jijmodeling-2.5.0.ipynb
@@ -0,0 +1,647 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# JijModeling 2.5.0 Release Notes"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## Feature Enhancements"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Comprehension syntax for `jm.min`, `jm.max`, and `jm.set` in the Decorator API\n",
+ "\n",
+ "Previously, when using the Decorator API, only {py:func}`jm.sum ` and {py:func}`jm.prod ` accepted a comprehension (Python generator) expression as their single argument.\n",
+ "\n",
+ "Starting with this version, unary calls to {py:func}`jm.min `, {py:func}`jm.max `, and {py:func}`jm.set ` also accept comprehension expressions in the same way."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "32793934",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-04T03:14:23.700701Z",
+ "iopub.status.busy": "2026-06-04T03:14:23.700648Z",
+ "iopub.status.idle": "2026-06-04T03:14:23.968395Z",
+ "shell.execute_reply": "2026-06-04T03:14:23.967965Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$\\begin{array}{rl}\n",
+ "\\text{Problem}\\colon &\\text{min/max/set comprehension example}\\\\\\displaystyle \\min &\\displaystyle \\min _{i=0}^{N-1}{{x}_{i}}+\\max _{\\substack{i=0\\\\i\\neq 0}}^{N-1}{{x}_{i}}\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{Array}}\\left[N;\\left\\{0, 1\\right\\}\\right]&\\quad &1\\text{-dim binary variable}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}N&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\\\end{alignedat}\\end{array}\n",
+ "$$"
+ ],
+ "text/plain": [
+ "Problem(name=\"min/max/set comprehension example\", sense=MINIMIZE, objective=min(set(N).map(lambda (i: natural): x[i])) + max(set(set(set(N.filter(lambda i: i != 0)).map(lambda (i: natural): i))).map(lambda (i: natural): x[i])), constraints=[])"
+ ]
+ },
+ "execution_count": 1,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import jijmodeling as jm\n",
+ "\n",
+ "\n",
+ "@jm.Problem.define(\"min/max/set comprehension example\")\n",
+ "def problem(problem: jm.DecoratedProblem):\n",
+ " N = problem.Length()\n",
+ " x = problem.BinaryVar(shape=N)\n",
+ "\n",
+ " nonzero = jm.set(i for i in N if i != 0)\n",
+ " problem += jm.min(x[i] for i in N) + jm.max(x[i] for i in nonzero)\n",
+ "\n",
+ "\n",
+ "problem"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "be77d5e2",
+ "metadata": {},
+ "source": [
+ "### Math output: More readable constraint indices\n",
+ "\n",
+ "Constraints created by directly comparing dictionaries or arrays are now rendered in $\\LaTeX$ output using $\\forall$, improving readability."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "cc7c29a2",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-04T03:14:23.969505Z",
+ "iopub.status.busy": "2026-06-04T03:14:23.969441Z",
+ "iopub.status.idle": "2026-06-04T03:14:24.724589Z",
+ "shell.execute_reply": "2026-06-04T03:14:24.724175Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$\\begin{array}{rl}\n",
+ "\\text{Problem}\\colon &\\text{container-vs-scalar-comp}\\\\\\displaystyle \\min &\\displaystyle 0\\\\&\\\\\\text{s.t.}&\\\\&\\begin{aligned}\n",
+ "\\text{dict-vs-dict}&\\quad \\displaystyle {y}_{i,j}\\leq {z}_{i,j}\\quad \\forall \\left(i,j\\right)\\;\\text{s.t.}\\;i\\in L,j\\in \\left\\{0,\\ldots ,N-1-1\\right\\}\\\\\\text{dict-vs-scalar}&\\quad \\displaystyle {y}_{i,j}\\leq 5\\quad \\forall \\left(i,j\\right)\\;\\text{s.t.}\\;i\\in L,j\\in \\left\\{0,\\ldots ,N-1-1\\right\\}\\\\\\text{scalar-vs-tensor}&\\quad \\displaystyle {x}_{i}\\geq 1\\quad \\forall i\\;\\text{s.t.}\\;i\\in \\left\\{0,\\ldots ,N-1\\right\\}\\\\\\text{tensor-vs-tensor}&\\quad \\displaystyle {x}_{i}\\leq {x}_{i}\\quad \\forall i\\;\\text{s.t.}\\;i\\in \\left\\{0,\\ldots ,N-1\\right\\}\\end{aligned}\n",
+ "\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{Array}}\\left[N;\\left\\{0, 1\\right\\}\\right]&\\quad &1\\text{-dim binary variable}\\\\y&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in L,j\\in N-1\\right\\};\\left\\{0, 1\\right\\}\\right]&\\quad &\\text{a dictionary of }\\text{binary}\\text{ variables with key }\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in L,j\\in N-1\\right\\}\\\\z&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in L,j\\in N-1\\right\\};\\left\\{0, 1\\right\\}\\right]&\\quad &\\text{a dictionary of }\\text{binary}\\text{ variables with key }\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in L,j\\in N-1\\right\\}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}N&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\\\end{alignedat}\\\\&\\\\&\\text{Category Labels:}\\\\&\\qquad \\begin{array}{rl}\n",
+ "L&\\text{Category Label}\\end{array}\n",
+ "\\end{array}\n",
+ "$$"
+ ],
+ "text/plain": [
+ "Problem(name=\"container-vs-scalar-comp\", sense=MINIMIZE, objective=0, constraints={dict-vs-dict: [Constraint(name=\"dict-vs-dict\", sense=LESS_THAN_EQUAL, left=y, right=z, shape=SameTotalDict { key: Located { inner: ElementOf { set: Located { inner: ToSet { operand: Located { inner: Tuple { components: [Located { inner: IterCategoryLabels { name: \"L\", ext: WithType { type_: Set { element: Located { inner: CategoryLabel { name: Located { inner: \"L\", src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) }, Located { inner: OverloadedBinaryNumeric { operator: Located { inner: Sub, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 9, column: 40 }, end: SrcLoc { line: 9, column: 45 } }) }, lhs: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: Some(SetStyle { element: None, kind: Natural }), subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 6, column: 8 }, end: SrcLoc { line: 6, column: 25 } }) }, rhs: Located { inner: Literal { literal: Located { inner: Integer { value: Located { inner: 1, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 9, column: 40 }, end: SrcLoc { line: 9, column: 45 } }) }, ext: WithType { type_: Scalar { mode: Static, kind: Binary }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: NoSrcSpan }, ext: WithType { type_: Scalar { mode: Static, kind: Binary }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 9, column: 40 }, end: SrcLoc { line: 9, column: 45 } }) }, ext: WithTypeAndDictionary { type_: Scalar { mode: Static, kind: Natural }, dictionary: Scalar, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 9, column: 40 }, end: SrcLoc { line: 9, column: 45 } }) }], ext: WithType { type_: Tuple { components: [Located { inner: Set { element: Located { inner: CategoryLabel { name: Located { inner: \"L\", src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }, src_span: NoSrcSpan }, Located { inner: Scalar { mode: Static, kind: Natural }, src_span: NoSrcSpan }] }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) }, ext: WithTypeAndDictionary { type_: Set { element: Located { inner: Tuple { components: [Located { inner: CategoryLabel { name: Located { inner: \"L\", src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }, src_span: NoSrcSpan }, Located { inner: Scalar { mode: Static, kind: Natural }, src_span: NoSrcSpan }] }, src_span: NoSrcSpan } }, dictionary: Product { component_dicts: [Set(CategoryLabel { name: Located { inner: \"L\", src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }), FromNatural] }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }, src_span: NoSrcSpan }, value: Located { inner: Scalar { mode: Dynamic, kind: Binary }, src_span: NoSrcSpan }, scalar: Binary }),],dict-vs-scalar: [Constraint(name=\"dict-vs-scalar\", sense=LESS_THAN_EQUAL, left=y, right=5, shape=TotalDictVsScalar { key: Located { inner: ElementOf { set: Located { inner: ToSet { operand: Located { inner: Tuple { components: [Located { inner: IterCategoryLabels { name: \"L\", ext: WithType { type_: Set { element: Located { inner: CategoryLabel { name: Located { inner: \"L\", src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) }, Located { inner: OverloadedBinaryNumeric { operator: Located { inner: Sub, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 9, column: 40 }, end: SrcLoc { line: 9, column: 45 } }) }, lhs: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: Some(SetStyle { element: None, kind: Natural }), subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 6, column: 8 }, end: SrcLoc { line: 6, column: 25 } }) }, rhs: Located { inner: Literal { literal: Located { inner: Integer { value: Located { inner: 1, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 9, column: 40 }, end: SrcLoc { line: 9, column: 45 } }) }, ext: WithType { type_: Scalar { mode: Static, kind: Binary }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: NoSrcSpan }, ext: WithType { type_: Scalar { mode: Static, kind: Binary }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 9, column: 40 }, end: SrcLoc { line: 9, column: 45 } }) }, ext: WithTypeAndDictionary { type_: Scalar { mode: Static, kind: Natural }, dictionary: Scalar, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 9, column: 40 }, end: SrcLoc { line: 9, column: 45 } }) }], ext: WithType { type_: Tuple { components: [Located { inner: Set { element: Located { inner: CategoryLabel { name: Located { inner: \"L\", src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }, src_span: NoSrcSpan }, Located { inner: Scalar { mode: Static, kind: Natural }, src_span: NoSrcSpan }] }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) }, ext: WithTypeAndDictionary { type_: Set { element: Located { inner: Tuple { components: [Located { inner: CategoryLabel { name: Located { inner: \"L\", src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }, src_span: NoSrcSpan }, Located { inner: Scalar { mode: Static, kind: Natural }, src_span: NoSrcSpan }] }, src_span: NoSrcSpan } }, dictionary: Product { component_dicts: [Set(CategoryLabel { name: Located { inner: \"L\", src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }), FromNatural] }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }, src_span: NoSrcSpan }, value: Located { inner: Scalar { mode: Dynamic, kind: Binary }, src_span: NoSrcSpan }, scalar: Natural }),],scalar-vs-tensor: [Constraint(name=\"scalar-vs-tensor\", sense=GREATER_THAN_EQUAL, left=x, right=1, shape=TensorLikeVsScalar { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: Some(SetStyle { element: None, kind: Natural }), subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 6, column: 8 }, end: SrcLoc { line: 6, column: 25 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 6, column: 8 }, end: SrcLoc { line: 6, column: 25 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Binary }, src_span: NoSrcSpan } }), scalar: Binary }),],tensor-vs-tensor: [Constraint(name=\"tensor-vs-tensor\", sense=LESS_THAN_EQUAL, left=x, right=x, shape=SameTensorLike { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: Some(SetStyle { element: None, kind: Natural }), subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 6, column: 8 }, end: SrcLoc { line: 6, column: 25 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_43978/4122996662.py\", start: SrcLoc { line: 6, column: 8 }, end: SrcLoc { line: 6, column: 25 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Binary }, src_span: NoSrcSpan } }), scalar: Binary }),],})"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import jijmodeling as jm\n",
+ "\n",
+ "\n",
+ "@jm.Problem.define(\"container-vs-scalar-comp\")\n",
+ "def problem(problem: jm.DecoratedProblem):\n",
+ " N = problem.Natural()\n",
+ " L = problem.CategoryLabel()\n",
+ " x = problem.BinaryVar(shape=N)\n",
+ " y = problem.BinaryVar(dict_keys=(L, N - 1))\n",
+ " z = problem.BinaryVar(dict_keys=(L, N - 1))\n",
+ "\n",
+ " problem += problem.Constraint(\"scalar-vs-tensor\", 1 <= x)\n",
+ " problem += problem.Constraint(\"tensor-vs-tensor\", x <= x)\n",
+ " problem += problem.Constraint(\"dict-vs-scalar\", y <= 5)\n",
+ " problem += problem.Constraint(\"dict-vs-dict\", y <= z)\n",
+ "\n",
+ "\n",
+ "problem"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8ffaa668",
+ "metadata": {},
+ "source": [
+ "### Bounded naturals and category labels are now allowed as a `Placeholder` `dtype`\n",
+ "\n",
+ "The `dtype` argument of {py:meth}`Problem.Placeholder ` (and its shorthands such as `Graph`, `PartialDict`, and `TotalDict`) used to be limited to a `jm.DataType`, a NumPy scalar type, or a tuple built out of those.\n",
+ "Starting with this version, `dtype` additionally accepts:\n",
+ "\n",
+ "- a natural-number expression `n`, declaring that the values are natural numbers strictly less than `n` (i.e. drawn from $\\{0, 1, \\dots, n - 1\\}$); the bound `n` may also be a Python integer literal or another placeholder/named expression of natural-number type.\n",
+ "- a {py:class}`~jijmodeling.CategoryLabel` `L`, declaring that the values are labels drawn from `L`.\n",
+ "- a tuple `(T, T, ...)` whose components are any of the above (or any other accepted `dtype`).\n",
+ "\n",
+ "Along with the additions on `dtype` as described above, the shorthand constructors {py:meth}`Problem.Natural ` (and its aliases: {py:meth}`Problem.Length ` and {py:meth}`Problem.Dim `) now also accept a `less_than=natexpr` keyword argument. This declares the same bounded-natural type placeholder variable as `Placeholder(dtype=natexpr)`, while more clearly communicating the intent of it being a scalar natural placeholder:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "f9fbbd9e",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-04T03:14:24.725749Z",
+ "iopub.status.busy": "2026-06-04T03:14:24.725686Z",
+ "iopub.status.idle": "2026-06-04T03:14:24.797481Z",
+ "shell.execute_reply": "2026-06-04T03:14:24.797110Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$\\begin{array}{rl}\n",
+ "\\text{Problem}\\colon &\\text{bounded natural shorthand}\\\\\\displaystyle \\min &\\displaystyle {x}_{i}\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{Array}}\\left[N;\\left\\{0, 1\\right\\}\\right]&\\quad &1\\text{-dim binary variable}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}i&\\in N&\\quad &\\text{A scalar placeholder in }N\\\\N&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\\\end{alignedat}\\end{array}\n",
+ "$$"
+ ],
+ "text/plain": [
+ "Problem(name=\"bounded natural shorthand\", sense=MINIMIZE, objective=x[i], constraints=[])"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import jijmodeling as jm\n",
+ "\n",
+ "problem = jm.Problem(\"bounded natural shorthand\")\n",
+ "N = problem.Natural(\"N\")\n",
+ "i = problem.Natural(\"i\", less_than=N)\n",
+ "x = problem.BinaryVar(\"x\", shape=(N,))\n",
+ "problem += x[i]\n",
+ "\n",
+ "problem"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f3bc6378",
+ "metadata": {},
+ "source": [
+ "The same keyword argument is available in the Decorator API:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "d351d778",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-04T03:14:24.798593Z",
+ "iopub.status.busy": "2026-06-04T03:14:24.798534Z",
+ "iopub.status.idle": "2026-06-04T03:14:24.873968Z",
+ "shell.execute_reply": "2026-06-04T03:14:24.873598Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$\\begin{array}{rl}\n",
+ "\\text{Problem}\\colon &\\text{bounded natural shorthand in Decorator API}\\\\\\displaystyle \\min &\\displaystyle {x}_{i}\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{Array}}\\left[N;\\left\\{0, 1\\right\\}\\right]&\\quad &1\\text{-dim binary variable}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}i&\\in N&\\quad &\\text{A scalar placeholder in }N\\\\N&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\\\end{alignedat}\\end{array}\n",
+ "$$"
+ ],
+ "text/plain": [
+ "Problem(name=\"bounded natural shorthand in Decorator API\", sense=MINIMIZE, objective=x[i], constraints=[])"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "@jm.Problem.define(\"bounded natural shorthand in Decorator API\")\n",
+ "def problem(problem: jm.DecoratedProblem):\n",
+ " N = problem.Length()\n",
+ " i = problem.Dim(less_than=N)\n",
+ " x = problem.BinaryVar(shape=(N,))\n",
+ " problem += x[i]\n",
+ "\n",
+ "\n",
+ "problem"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "48e01c2e",
+ "metadata": {},
+ "source": [
+ "For a more complex example, consider the following optimization problem involving an undirected graph $G = (V, E)$. Previously, edge endpoints had to be declared as plain naturals; with this release you can express the intent that they must lie in $[0, V)$:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "bd4e7945",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-04T03:14:24.874913Z",
+ "iopub.status.busy": "2026-06-04T03:14:24.874854Z",
+ "iopub.status.idle": "2026-06-04T03:14:25.079884Z",
+ "shell.execute_reply": "2026-06-04T03:14:25.079570Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$\\begin{array}{rl}\n",
+ "\\text{Problem}\\colon &\\text{max cut}\\\\\\displaystyle \\max &\\displaystyle \\sum _{\\left\\langle u,v\\right\\rangle \\in E}{{\\left({x}_{u}-{x}_{v}\\right)}^{2}}\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{Array}}\\left[V;\\left\\{0, 1\\right\\}\\right]&\\quad &1\\text{-dim binary variable}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}E&\\in \\mathop{\\mathrm{Array}}\\left[(-);V\\times V\\right]&\\quad &1\\text{-dimensional array of placeholders with elements in }V\\times V\\\\V&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\\\end{alignedat}\\end{array}\n",
+ "$$"
+ ],
+ "text/plain": [
+ "Problem(name=\"max cut\", sense=MAXIMIZE, objective=sum(E.map(lambda ((u, v): Tuple[V, V]): (x[u] - x[v]) ** 2)), constraints=[])"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import jijmodeling as jm\n",
+ "\n",
+ "problem = jm.Problem(\"max cut\", sense=jm.ProblemSense.MAXIMIZE)\n",
+ "V = problem.Natural(\"V\")\n",
+ "# We can now say that each entry of `E` is a pair of vertices in [0, V)\n",
+ "# (previously we had to write dtype=(jm.DataType.Natural, jm.DataType.Natural)).\n",
+ "# Alternatively, we may write this as problem.graph(\"E\", dtype=V)\n",
+ "E = problem.Placeholder(\"E\", dtype=(V, V), ndim=1)\n",
+ "x = problem.BinaryVar(\"x\", shape=(V,))\n",
+ "problem += jm.map(lambda u, v: (x[u] - x[v]) ** 2, E).sum()\n",
+ "\n",
+ "problem"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "82d88a43",
+ "metadata": {},
+ "source": [
+ "When the vertices of a graph are named rather than indexed, a {py:class}`~jijmodeling.CategoryLabel` can now be used directly as the `dtype`.\n",
+ "Here is the same problem, written with {py:meth}`Problem.Graph`, but on a graph whose vertices are identified by labels rather than integer indices:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "282beebb",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-04T03:14:25.080968Z",
+ "iopub.status.busy": "2026-06-04T03:14:25.080890Z",
+ "iopub.status.idle": "2026-06-04T03:14:25.637898Z",
+ "shell.execute_reply": "2026-06-04T03:14:25.637535Z"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "problem = jm.Problem(\"max cut on a labeled graph\", sense=jm.ProblemSense.MAXIMIZE)\n",
+ "L = problem.CategoryLabel(\"L\")\n",
+ "edges = problem.Graph(\"edges\", dtype=L)\n",
+ "x = problem.BinaryVar(\"x\", dict_keys=L)\n",
+ "problem += jm.map(lambda u, v: (x[u] - x[v]) ** 2, edges).sum()\n",
+ "\n",
+ "compiler = jm.Compiler.from_problem(\n",
+ " problem,\n",
+ " {\n",
+ " \"L\": [\"A\", \"B\", \"C\"],\n",
+ " \"edges\": [(\"A\", \"B\"), (\"B\", \"C\"), (\"C\", \"A\")],\n",
+ " },\n",
+ ")\n",
+ "instance = compiler.eval_problem(problem)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "b3c0355a",
+ "metadata": {},
+ "source": [
+ "When a value supplied through the instance data is not consistent with the declared `dtype` (for example a vertex index $\\geq V$, or a label not in `L`), the compiler will report an out-of-range error instead of silently accepting the value."
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "set-objective-assignment",
+ "metadata": {},
+ "source": [
+ "### Objective functions can now be replaced by assignment\n",
+ "\n",
+ "In this version, you can now replace the objective function directly by assigning to {py:attr}`Problem.objective `.\n",
+ "The same `problem.objective = ...` syntax is also available for {py:class}`~jijmodeling.DecoratedProblem`.\n",
+ "\n",
+ "For example, you can replace an already-defined objective with another expression, or explicitly reset it with `problem.objective = 0`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "id": "set-objective-assignment-example",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-04T03:14:25.639089Z",
+ "iopub.status.busy": "2026-06-04T03:14:25.638983Z",
+ "iopub.status.idle": "2026-06-04T03:14:25.709430Z",
+ "shell.execute_reply": "2026-06-04T03:14:25.709093Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$\\begin{array}{rl}\n",
+ "\\text{Problem}\\colon &\\text{set objective example}\\\\\\displaystyle \\min &\\displaystyle z\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\left\\{0, 1\\right\\}&\\quad &0\\text{-dim binary variable}\\\\y&\\in \\left\\{0, 1\\right\\}&\\quad &0\\text{-dim binary variable}\\\\z&\\in \\left\\{0, 1\\right\\}&\\quad &0\\text{-dim binary variable}\\\\\\end{alignedat}\\end{array}\n",
+ "$$"
+ ],
+ "text/plain": [
+ "Problem(name=\"set objective example\", sense=MINIMIZE, objective=z, constraints=[])"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import jijmodeling as jm\n",
+ "\n",
+ "problem = jm.Problem(\"set objective example\")\n",
+ "x = problem.BinaryVar(\"x\")\n",
+ "y = problem.BinaryVar(\"y\")\n",
+ "\n",
+ "problem.objective = x\n",
+ "problem.objective = y\n",
+ "problem.objective = 0\n",
+ "\n",
+ "\n",
+ "@problem.update\n",
+ "def _(problem: jm.DecoratedProblem):\n",
+ " z = problem.BinaryVar()\n",
+ " problem.objective = z\n",
+ "\n",
+ "\n",
+ "problem"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "ff2502fc",
+ "metadata": {},
+ "source": [
+ "### Generating dictionaries with generator functions\n",
+ "\n",
+ "Starting with this version, the {py:func}`~jijmodeling.gendict` function can be used to generate dictionaries by specifying a set of keys and a generator function.\n",
+ "This is similar to the array version {py:func}`~jijmodeling.genarray`, and to NumPy's {py:func}`~numpy.fromfunction`."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "d4ea0168",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-04T03:14:25.710355Z",
+ "iopub.status.busy": "2026-06-04T03:14:25.710297Z",
+ "iopub.status.idle": "2026-06-04T03:14:25.811912Z",
+ "shell.execute_reply": "2026-06-04T03:14:25.811322Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$\\begin{array}{rl}\n",
+ "\\text{Problem}\\colon &\\text{gendict example}\\\\\\displaystyle \\min &\\displaystyle 0\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathrm{K};\\left\\{0, 1\\right\\}\\right]&\\quad &\\text{a dictionary of }\\text{binary}\\text{ variables with key }K\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}a&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathrm{K};\\mathbb{R}\\right]&\\quad &\\text{A total dictionary of placeholders with keys }\\mathrm{K}\\text{, values in }\\mathbb{R}\\\\\\end{alignedat}\\\\&\\\\&\\text{Category Labels:}\\\\&\\qquad \\begin{array}{rl}\n",
+ "K&\\text{Category Label}\\end{array}\n",
+ "\\\\&\\\\&\\text{Named Expressions:}\\\\&\\qquad \\begin{alignedat}{2}Sums&=\\mathop{\\mathtt{gen\\_{}dict}}\\left(\\lambda \\left(k\\in \\mathrm{K}\\right)\\ldotp {a}_{k}\\cdot {x}_{k},K\\right)&\\quad &\\in \\mathop{\\mathrm{TotalDict}}\\left[K;\\mathbb{R}\\right]\\\\\\end{alignedat}\\end{array}\n",
+ "$$"
+ ],
+ "text/plain": [
+ "Problem(name=\"gendict example\", sense=MINIMIZE, objective=0, constraints=[])"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import jijmodeling as jm\n",
+ "\n",
+ "\n",
+ "problem = jm.Problem(\"gendict example\")\n",
+ "K = problem.CategoryLabel(\"K\")\n",
+ "a = problem.Float(\"a\", dict_keys=K)\n",
+ "x = problem.BinaryVar(\"x\", dict_keys=K)\n",
+ "Sums = problem.NamedExpr(\"Sums\", jm.gendict(K, lambda k: a[k] * x[k]))\n",
+ "\n",
+ "\n",
+ "problem"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "01bc6a3f",
+ "metadata": {},
+ "source": [
+ "Like `genarray`, using comprehensions is supported when using the Decorator API, but only one `for .. in ...` clause is allowed in a comprehension."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "95007f63",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-04T03:14:25.813151Z",
+ "iopub.status.busy": "2026-06-04T03:14:25.813091Z",
+ "iopub.status.idle": "2026-06-04T03:14:25.910339Z",
+ "shell.execute_reply": "2026-06-04T03:14:25.909980Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$\\begin{array}{rl}\n",
+ "\\text{Problem}\\colon &\\text{gendict example}\\\\\\displaystyle \\min &\\displaystyle 0\\end{array}\n",
+ "$$"
+ ],
+ "text/plain": [
+ "Problem(name=\"gendict example\", sense=MINIMIZE, objective=0, constraints=[])"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "@jm.Problem.define(\"gendict example\")\n",
+ "def problem(problem):\n",
+ " problem = jm.Problem(\"gendict example\")\n",
+ " K = problem.CategoryLabel(\"K\")\n",
+ " a = problem.Float(\"a\", dict_keys=K)\n",
+ " x = problem.BinaryVar(\"x\", dict_keys=K)\n",
+ " Sums = problem.NamedExpr(\"Sums\", jm.gendict(a[k] * x[k] for k in K))\n",
+ "\n",
+ "\n",
+ "problem"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "bug-fixes",
+ "metadata": {},
+ "source": [
+ "## Bug Fixes"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8bbdb161",
+ "metadata": {},
+ "source": [
+ "### Fix bug where operations between subscript elements and numeric types failed\n",
+ "\n",
+ "Fixed an issue where numeric operations on `Constraint` subscript elements, as shown below, were incorrectly treated as type errors."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "55a7ce10",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-04T03:14:25.911462Z",
+ "iopub.status.busy": "2026-06-04T03:14:25.911410Z",
+ "iopub.status.idle": "2026-06-04T03:14:26.055197Z",
+ "shell.execute_reply": "2026-06-04T03:14:26.054864Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$\\begin{array}{rl}\n",
+ "\\text{Problem}\\colon &\\text{Example}\\\\\\displaystyle \\min &\\displaystyle 0\\\\&\\\\\\text{s.t.}&\\\\&\\begin{aligned}\n",
+ "\\text{c}&\\quad \\displaystyle k\\cdot x\\leq 0\\quad \\forall k\\;\\text{s.t.}\\;k\\in K\\end{aligned}\n",
+ "\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\left\\{0, 1\\right\\}&\\quad &0\\text{-dim binary variable}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}K&\\in \\mathop{\\mathrm{Array}}\\left[(-);\\mathbb{R}\\right]&\\quad &1\\text{-dimensional array of placeholders with elements in }\\mathbb{R}\\\\\\end{alignedat}\\end{array}\n",
+ "$$"
+ ],
+ "text/plain": [
+ "Problem(name=\"Example\", sense=MINIMIZE, objective=0, constraints={c: [Constraint(name=\"c\", , lambda k: k * x <= 0, domain=set(K)),],})"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import jijmodeling as jm\n",
+ "\n",
+ "\n",
+ "@jm.Problem.define(\"Example\")\n",
+ "def problem(problem: jm.DecoratedProblem):\n",
+ " K = problem.Float(ndim=1)\n",
+ " x = problem.BinaryVar()\n",
+ " problem += problem.Constraint(\"c\", [k * x <= 0 for k in K])\n",
+ "\n",
+ "\n",
+ "problem"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "98fed1a5",
+ "metadata": {},
+ "source": [
+ "### Improved math rendering for expressions involving `product` and `filter`\n",
+ "\n",
+ "Previously, expressions involving `product` and `filter` could be rendered as overly complex formulas in some cases. They are now displayed in a more readable form using comprehension-style notation."
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "fc510cb5",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-04T03:14:26.056375Z",
+ "iopub.status.busy": "2026-06-04T03:14:26.056311Z",
+ "iopub.status.idle": "2026-06-04T03:14:26.170598Z",
+ "shell.execute_reply": "2026-06-04T03:14:26.170268Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in \\left\\{0,\\ldots ,N-1\\right\\},j\\in \\left\\{0,\\ldots ,M-1\\right\\},i=j\\right\\}$$"
+ ],
+ "text/plain": [
+ "Expression(set((N, M)).filter(lambda (i, j): i == j))"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import jijmodeling as jm\n",
+ "\n",
+ "problem = jm.Problem(\"product and filter example\")\n",
+ "N = problem.Natural(\"N\")\n",
+ "M = problem.Natural(\"M\")\n",
+ "x = problem.BinaryVar(\"x\", shape=(N, M))\n",
+ "jm.product(N, M).filter(lambda i, j: i == j)"
+ ]
+ }
+ ],
+ "metadata": {
+ "jupytext": {
+ "default_lexer": "ipython3"
+ },
+ "kernelspec": {
+ "display_name": ".venv",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.11.14"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/docs/ja/_toc.yml b/docs/ja/_toc.yml
index 2e6d73ec..dbe6e716 100644
--- a/docs/ja/_toc.yml
+++ b/docs/ja/_toc.yml
@@ -36,6 +36,7 @@ parts:
title: 典型問題集
- caption: Release Notes
chapters:
+ - file: releases/jijmodeling-2.5.0
- file: releases/jijmodeling-2.4.1
- file: releases/jijmodeling-2.4.0
- file: releases/jijmodeling-2.3.2
diff --git a/docs/ja/advanced/generation.ipynb b/docs/ja/advanced/generation.ipynb
index d9f383eb..e38a9915 100644
--- a/docs/ja/advanced/generation.ipynb
+++ b/docs/ja/advanced/generation.ipynb
@@ -40,17 +40,17 @@
"id": "34020325-4747-42ce-ab64-4114e871dca0",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:40.949446Z",
- "iopub.status.busy": "2026-03-24T02:04:40.949109Z",
- "iopub.status.idle": "2026-03-24T02:04:41.010745Z",
- "shell.execute_reply": "2026-03-24T02:04:41.010319Z"
+ "iopub.execute_input": "2026-06-04T02:49:39.212159Z",
+ "iopub.status.busy": "2026-06-04T02:49:39.212089Z",
+ "iopub.status.idle": "2026-06-04T02:49:39.279588Z",
+ "shell.execute_reply": "2026-06-04T02:49:39.279162Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
- "{'A': 6, 'B': 1}"
+ "{'B': 1, 'A': 1}"
]
},
"execution_count": 1,
@@ -90,17 +90,17 @@
"id": "9ea06ded-9bc5-4eb9-85c7-837538a5940b",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:41.011898Z",
- "iopub.status.busy": "2026-03-24T02:04:41.011838Z",
- "iopub.status.idle": "2026-03-24T02:04:41.014289Z",
- "shell.execute_reply": "2026-03-24T02:04:41.013956Z"
+ "iopub.execute_input": "2026-06-04T02:49:39.280822Z",
+ "iopub.status.busy": "2026-06-04T02:49:39.280766Z",
+ "iopub.status.idle": "2026-06-04T02:49:39.282907Z",
+ "shell.execute_reply": "2026-06-04T02:49:39.282590Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
- "{'B': 6, 'A': 81}"
+ "{'A': 64, 'B': 9}"
]
},
"execution_count": 2,
@@ -126,17 +126,17 @@
"id": "8fedb42a-12d2-41f6-b3de-c989ea1aa4ab",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:41.015385Z",
- "iopub.status.busy": "2026-03-24T02:04:41.015329Z",
- "iopub.status.idle": "2026-03-24T02:04:41.017678Z",
- "shell.execute_reply": "2026-03-24T02:04:41.017370Z"
+ "iopub.execute_input": "2026-06-04T02:49:39.283752Z",
+ "iopub.status.busy": "2026-06-04T02:49:39.283704Z",
+ "iopub.status.idle": "2026-06-04T02:49:39.285558Z",
+ "shell.execute_reply": "2026-06-04T02:49:39.285283Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
- "{'A': 69, 'B': 1}"
+ "{'B': 3, 'A': 96}"
]
},
"execution_count": 3,
@@ -164,17 +164,17 @@
"id": "19a45cfe-40de-4e5e-9cad-62114b225b09",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:41.018524Z",
- "iopub.status.busy": "2026-03-24T02:04:41.018472Z",
- "iopub.status.idle": "2026-03-24T02:04:41.071480Z",
- "shell.execute_reply": "2026-03-24T02:04:41.071114Z"
+ "iopub.execute_input": "2026-06-04T02:49:39.286439Z",
+ "iopub.status.busy": "2026-06-04T02:49:39.286397Z",
+ "iopub.status.idle": "2026-06-04T02:49:39.357918Z",
+ "shell.execute_reply": "2026-06-04T02:49:39.357583Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
- "{'A': array([1, 8, 4, 6, 7, 3, 8, 9, 6, 3], dtype=object)}"
+ "{'A': array([9, 5, 6, 9, 6, 1, 8, 1, 2, 3], dtype=object)}"
]
},
"execution_count": 4,
@@ -206,18 +206,18 @@
"id": "ac97241e-47bd-4b5b-b8f6-49d5ddb43254",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:41.072644Z",
- "iopub.status.busy": "2026-03-24T02:04:41.072558Z",
- "iopub.status.idle": "2026-03-24T02:04:41.103176Z",
- "shell.execute_reply": "2026-03-24T02:04:41.102769Z"
+ "iopub.execute_input": "2026-06-04T02:49:39.358992Z",
+ "iopub.status.busy": "2026-06-04T02:49:39.358912Z",
+ "iopub.status.idle": "2026-06-04T02:49:39.414891Z",
+ "shell.execute_reply": "2026-06-04T02:49:39.414576Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
- "{'A': array([7.922440851203646, -2.2362166205229705, -1.187315801401505,\n",
- " 3.8729629770943053, 7.164100076039116], dtype=object)}"
+ "{'A': array([8.695305222150136, 3.42523979686813, 4.812904660791846,\n",
+ " 8.42347332514177], dtype=object)}"
]
},
"execution_count": 5,
@@ -303,7 +303,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.11"
+ "version": "3.11.14"
}
},
"nbformat": 4,
diff --git a/docs/ja/advanced/named_expr.ipynb b/docs/ja/advanced/named_expr.ipynb
index 5ad1b565..460cbeb3 100644
--- a/docs/ja/advanced/named_expr.ipynb
+++ b/docs/ja/advanced/named_expr.ipynb
@@ -44,10 +44,10 @@
"id": "fa9c461b",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:42.375128Z",
- "iopub.status.busy": "2026-03-24T02:04:42.374891Z",
- "iopub.status.idle": "2026-03-24T02:04:42.556974Z",
- "shell.execute_reply": "2026-03-24T02:04:42.556630Z"
+ "iopub.execute_input": "2026-06-04T02:49:41.020930Z",
+ "iopub.status.busy": "2026-06-04T02:49:41.020870Z",
+ "iopub.status.idle": "2026-06-04T02:49:41.260528Z",
+ "shell.execute_reply": "2026-06-04T02:49:41.260233Z"
}
},
"outputs": [
@@ -61,7 +61,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"Knapsack (Unnamed)\", sense=MAXIMIZE, objective=sum(w.len_at(0).map(lambda (i: natural): v[i] * x[i])), constraints={Weight: [Constraint(name=\"Weight\", sense=LESS_THAN_EQUAL, left=sum(w.len_at(0).map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Float)),],})"
+ "Problem(name=\"Knapsack (Unnamed)\", sense=MAXIMIZE, objective=sum(set(w.len_at(0)).map(lambda (i: natural): v[i] * x[i])), constraints={Weight: [Constraint(name=\"Weight\", sense=LESS_THAN_EQUAL, left=sum(set(w.len_at(0)).map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Float)),],})"
]
},
"execution_count": 1,
@@ -106,10 +106,10 @@
"id": "225fa821",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:42.558188Z",
- "iopub.status.busy": "2026-03-24T02:04:42.558125Z",
- "iopub.status.idle": "2026-03-24T02:04:42.720393Z",
- "shell.execute_reply": "2026-03-24T02:04:42.719977Z"
+ "iopub.execute_input": "2026-06-04T02:49:41.261834Z",
+ "iopub.status.busy": "2026-06-04T02:49:41.261774Z",
+ "iopub.status.idle": "2026-06-04T02:49:41.492731Z",
+ "shell.execute_reply": "2026-06-04T02:49:41.492388Z"
}
},
"outputs": [
@@ -123,7 +123,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"Knapsack\", sense=MAXIMIZE, objective=sum(N.map(lambda (i: natural): v[i] * x[i])), constraints={Weight: [Constraint(name=\"Weight\", sense=LESS_THAN_EQUAL, left=sum(N.map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Float)),],})"
+ "Problem(name=\"Knapsack\", sense=MAXIMIZE, objective=sum(set(N).map(lambda (i: natural): v[i] * x[i])), constraints={Weight: [Constraint(name=\"Weight\", sense=LESS_THAN_EQUAL, left=sum(set(N).map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Float)),],})"
]
},
"execution_count": 2,
@@ -172,10 +172,10 @@
"id": "21904726",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:42.721549Z",
- "iopub.status.busy": "2026-03-24T02:04:42.721491Z",
- "iopub.status.idle": "2026-03-24T02:04:43.863718Z",
- "shell.execute_reply": "2026-03-24T02:04:43.863251Z"
+ "iopub.execute_input": "2026-06-04T02:49:41.494004Z",
+ "iopub.status.busy": "2026-06-04T02:49:41.493944Z",
+ "iopub.status.idle": "2026-06-04T02:49:42.107794Z",
+ "shell.execute_reply": "2026-06-04T02:49:42.107373Z"
}
},
"outputs": [],
@@ -227,10 +227,10 @@
"id": "eb75269d",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:43.865210Z",
- "iopub.status.busy": "2026-03-24T02:04:43.865074Z",
- "iopub.status.idle": "2026-03-24T02:04:43.911678Z",
- "shell.execute_reply": "2026-03-24T02:04:43.911374Z"
+ "iopub.execute_input": "2026-06-04T02:49:42.109062Z",
+ "iopub.status.busy": "2026-06-04T02:49:42.108959Z",
+ "iopub.status.idle": "2026-06-04T02:49:42.168074Z",
+ "shell.execute_reply": "2026-06-04T02:49:42.167739Z"
}
},
"outputs": [
@@ -238,7 +238,7 @@
"data": {
"text/latex": [
"$$\\begin{array}{rl}\n",
- "\\text{Problem}\\colon &\\text{Scalar}\\\\\\displaystyle \\min &\\displaystyle 0\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{Array}}\\left[5;\\left\\{0, 1\\right\\}\\right]&\\quad &1\\text{-dim binary variable}\\\\\\end{alignedat}\\\\&\\\\&\\text{Named Expressions:}\\\\&\\qquad \\begin{alignedat}{2}scalar&=\\sum _{\\vec{\\imath }}{{{\\left(x\\right)}}_{\\vec{\\imath }}}&\\quad &\\in \\left\\{0, 1\\right\\}\\\\&&&\\text{\\texttt{save\\_{}in\\_{}ommx=True}}\\\\\\end{alignedat}\\end{array}\n",
+ "\\text{Problem}\\colon &\\text{Scalar}\\\\\\displaystyle \\min &\\displaystyle 0\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{Array}}\\left[5;\\left\\{0, 1\\right\\}\\right]&\\quad &1\\text{-dim binary variable}\\\\\\end{alignedat}\\\\&\\\\&\\text{Named Expressions:}\\\\&\\qquad \\begin{alignedat}{2}scalar&=\\sum _{\\vec{\\imath }}{{{\\left(x\\right)}}_{\\vec{\\imath }}}&\\quad &\\in \\mathbb{N}\\\\&&&\\text{\\texttt{save\\_{}in\\_{}ommx=True}}\\\\\\end{alignedat}\\end{array}\n",
"$$"
],
"text/plain": [
@@ -264,10 +264,10 @@
"id": "f7b3b6f6",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:43.912811Z",
- "iopub.status.busy": "2026-03-24T02:04:43.912747Z",
- "iopub.status.idle": "2026-03-24T02:04:44.067702Z",
- "shell.execute_reply": "2026-03-24T02:04:44.067275Z"
+ "iopub.execute_input": "2026-06-04T02:49:42.169122Z",
+ "iopub.status.busy": "2026-06-04T02:49:42.169062Z",
+ "iopub.status.idle": "2026-06-04T02:49:42.328031Z",
+ "shell.execute_reply": "2026-06-04T02:49:42.327624Z"
}
},
"outputs": [
@@ -302,10 +302,10 @@
"id": "de572788",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:44.068809Z",
- "iopub.status.busy": "2026-03-24T02:04:44.068747Z",
- "iopub.status.idle": "2026-03-24T02:04:44.182892Z",
- "shell.execute_reply": "2026-03-24T02:04:44.182488Z"
+ "iopub.execute_input": "2026-06-04T02:49:42.328977Z",
+ "iopub.status.busy": "2026-06-04T02:49:42.328920Z",
+ "iopub.status.idle": "2026-06-04T02:49:42.433280Z",
+ "shell.execute_reply": "2026-06-04T02:49:42.433002Z"
}
},
"outputs": [
@@ -351,10 +351,10 @@
"id": "e269beca",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:44.185843Z",
- "iopub.status.busy": "2026-03-24T02:04:44.185711Z",
- "iopub.status.idle": "2026-03-24T02:04:44.193369Z",
- "shell.execute_reply": "2026-03-24T02:04:44.193003Z"
+ "iopub.execute_input": "2026-06-04T02:49:42.434505Z",
+ "iopub.status.busy": "2026-06-04T02:49:42.434453Z",
+ "iopub.status.idle": "2026-06-04T02:49:42.441760Z",
+ "shell.execute_reply": "2026-06-04T02:49:42.441503Z"
}
},
"outputs": [],
@@ -368,10 +368,10 @@
"id": "0e6ecc43",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:44.194486Z",
- "iopub.status.busy": "2026-03-24T02:04:44.194424Z",
- "iopub.status.idle": "2026-03-24T02:04:44.217104Z",
- "shell.execute_reply": "2026-03-24T02:04:44.216777Z"
+ "iopub.execute_input": "2026-06-04T02:49:42.442807Z",
+ "iopub.status.busy": "2026-06-04T02:49:42.442748Z",
+ "iopub.status.idle": "2026-06-04T02:49:42.475441Z",
+ "shell.execute_reply": "2026-06-04T02:49:42.475082Z"
}
},
"outputs": [
@@ -398,10 +398,10 @@
"id": "54225607",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:44.218549Z",
- "iopub.status.busy": "2026-03-24T02:04:44.218465Z",
- "iopub.status.idle": "2026-03-24T02:04:44.234275Z",
- "shell.execute_reply": "2026-03-24T02:04:44.233610Z"
+ "iopub.execute_input": "2026-06-04T02:49:42.476345Z",
+ "iopub.status.busy": "2026-06-04T02:49:42.476298Z",
+ "iopub.status.idle": "2026-06-04T02:49:42.488952Z",
+ "shell.execute_reply": "2026-06-04T02:49:42.488631Z"
}
},
"outputs": [
@@ -428,10 +428,10 @@
"id": "6b752e2b",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:44.236620Z",
- "iopub.status.busy": "2026-03-24T02:04:44.236540Z",
- "iopub.status.idle": "2026-03-24T02:04:44.260785Z",
- "shell.execute_reply": "2026-03-24T02:04:44.260296Z"
+ "iopub.execute_input": "2026-06-04T02:49:42.489877Z",
+ "iopub.status.busy": "2026-06-04T02:49:42.489831Z",
+ "iopub.status.idle": "2026-06-04T02:49:42.518566Z",
+ "shell.execute_reply": "2026-06-04T02:49:42.518190Z"
}
},
"outputs": [
@@ -476,10 +476,10 @@
"id": "defa81a9",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:44.262455Z",
- "iopub.status.busy": "2026-03-24T02:04:44.262374Z",
- "iopub.status.idle": "2026-03-24T02:04:44.523826Z",
- "shell.execute_reply": "2026-03-24T02:04:44.523286Z"
+ "iopub.execute_input": "2026-06-04T02:49:42.519603Z",
+ "iopub.status.busy": "2026-06-04T02:49:42.519557Z",
+ "iopub.status.idle": "2026-06-04T02:49:42.808298Z",
+ "shell.execute_reply": "2026-06-04T02:49:42.807922Z"
}
},
"outputs": [
@@ -493,7 +493,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"Knapsack\", sense=MAXIMIZE, objective=sum(N.map(lambda (i: natural): v[i] * x[i])), constraints={Weight: [Constraint(name=\"Weight\", sense=LESS_THAN_EQUAL, left=total_weight, right=W, shape=Scalar(Float)),],})"
+ "Problem(name=\"Knapsack\", sense=MAXIMIZE, objective=sum(set(N).map(lambda (i: natural): v[i] * x[i])), constraints={Weight: [Constraint(name=\"Weight\", sense=LESS_THAN_EQUAL, left=total_weight, right=W, shape=Scalar(Float)),],})"
]
},
"execution_count": 11,
@@ -538,10 +538,10 @@
"id": "9c8d7f15",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:44.525216Z",
- "iopub.status.busy": "2026-03-24T02:04:44.525127Z",
- "iopub.status.idle": "2026-03-24T02:04:44.907968Z",
- "shell.execute_reply": "2026-03-24T02:04:44.906899Z"
+ "iopub.execute_input": "2026-06-04T02:49:42.809333Z",
+ "iopub.status.busy": "2026-06-04T02:49:42.809276Z",
+ "iopub.status.idle": "2026-06-04T02:49:42.897053Z",
+ "shell.execute_reply": "2026-06-04T02:49:42.896598Z"
}
},
"outputs": [],
@@ -563,10 +563,10 @@
"id": "19f45fef",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:44.909993Z",
- "iopub.status.busy": "2026-03-24T02:04:44.909890Z",
- "iopub.status.idle": "2026-03-24T02:04:44.921316Z",
- "shell.execute_reply": "2026-03-24T02:04:44.920680Z"
+ "iopub.execute_input": "2026-06-04T02:49:42.898236Z",
+ "iopub.status.busy": "2026-06-04T02:49:42.898178Z",
+ "iopub.status.idle": "2026-06-04T02:49:42.907293Z",
+ "shell.execute_reply": "2026-06-04T02:49:42.906962Z"
}
},
"outputs": [
@@ -672,10 +672,10 @@
"id": "f78cf116",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:44.922518Z",
- "iopub.status.busy": "2026-03-24T02:04:44.922450Z",
- "iopub.status.idle": "2026-03-24T02:04:45.521929Z",
- "shell.execute_reply": "2026-03-24T02:04:45.521624Z"
+ "iopub.execute_input": "2026-06-04T02:49:42.908189Z",
+ "iopub.status.busy": "2026-06-04T02:49:42.908142Z",
+ "iopub.status.idle": "2026-06-04T02:49:43.198165Z",
+ "shell.execute_reply": "2026-06-04T02:49:43.197840Z"
}
},
"outputs": [
@@ -720,7 +720,7 @@
" \n",
" \n",
" | 0 | \n",
- " 46.0 | \n",
+ " 45.0 | \n",
" {0, 1, 2, 3, 4, 5} | \n",
" total_weight | \n",
" [] | \n",
@@ -734,7 +734,7 @@
"text/plain": [
" value used_ids name subscripts \\\n",
"id \n",
- "0 46.0 {0, 1, 2, 3, 4, 5} total_weight [] \n",
+ "0 45.0 {0, 1, 2, 3, 4, 5} total_weight [] \n",
"\n",
" description parameters.subscripts \n",
"id \n",
@@ -788,7 +788,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.11"
+ "version": "3.11.14"
}
},
"nbformat": 4,
diff --git a/docs/ja/advanced/serialize.ipynb b/docs/ja/advanced/serialize.ipynb
index c889da90..78d238b7 100644
--- a/docs/ja/advanced/serialize.ipynb
+++ b/docs/ja/advanced/serialize.ipynb
@@ -16,10 +16,10 @@
"id": "b5807c3d-8bd3-4d3e-92bd-6cfa802cd625",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:46.910294Z",
- "iopub.status.busy": "2026-03-24T02:04:46.910240Z",
- "iopub.status.idle": "2026-03-24T02:04:46.952123Z",
- "shell.execute_reply": "2026-03-24T02:04:46.951739Z"
+ "iopub.execute_input": "2026-06-04T02:49:44.360966Z",
+ "iopub.status.busy": "2026-06-04T02:49:44.360838Z",
+ "iopub.status.idle": "2026-06-04T02:49:44.418566Z",
+ "shell.execute_reply": "2026-06-04T02:49:44.418161Z"
}
},
"outputs": [],
@@ -48,10 +48,10 @@
"id": "fb7345c2-2252-4c3a-ae46-9e6318a4fa9a",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:46.953331Z",
- "iopub.status.busy": "2026-03-24T02:04:46.953275Z",
- "iopub.status.idle": "2026-03-24T02:04:46.958699Z",
- "shell.execute_reply": "2026-03-24T02:04:46.958422Z"
+ "iopub.execute_input": "2026-06-04T02:49:44.419866Z",
+ "iopub.status.busy": "2026-06-04T02:49:44.419803Z",
+ "iopub.status.idle": "2026-06-04T02:49:44.424309Z",
+ "shell.execute_reply": "2026-06-04T02:49:44.423975Z"
}
},
"outputs": [],
@@ -79,7 +79,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.11"
+ "version": "3.11.14"
}
},
"nbformat": 4,
diff --git a/docs/ja/basics/expressions.ipynb b/docs/ja/basics/expressions.ipynb
index 3007ff72..ff8aa8be 100644
--- a/docs/ja/basics/expressions.ipynb
+++ b/docs/ja/basics/expressions.ipynb
@@ -25,10 +25,10 @@
"id": "a065d0ee",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:04.740233Z",
- "iopub.status.busy": "2026-04-16T07:04:04.740139Z",
- "iopub.status.idle": "2026-04-16T07:04:04.768519Z",
- "shell.execute_reply": "2026-04-16T07:04:04.764810Z"
+ "iopub.execute_input": "2026-06-04T02:49:31.633340Z",
+ "iopub.status.busy": "2026-06-04T02:49:31.633084Z",
+ "iopub.status.idle": "2026-06-04T02:49:31.646686Z",
+ "shell.execute_reply": "2026-06-04T02:49:31.645836Z"
}
},
"outputs": [],
@@ -57,10 +57,10 @@
"id": "beaddc39",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:04.775259Z",
- "iopub.status.busy": "2026-04-16T07:04:04.774997Z",
- "iopub.status.idle": "2026-04-16T07:04:05.036085Z",
- "shell.execute_reply": "2026-04-16T07:04:05.035587Z"
+ "iopub.execute_input": "2026-06-04T02:49:31.648009Z",
+ "iopub.status.busy": "2026-06-04T02:49:31.647920Z",
+ "iopub.status.idle": "2026-06-04T02:49:31.753151Z",
+ "shell.execute_reply": "2026-06-04T02:49:31.752828Z"
},
"label": "test-problem"
},
@@ -177,10 +177,10 @@
"id": "e73538ae",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:05.037667Z",
- "iopub.status.busy": "2026-04-16T07:04:05.037573Z",
- "iopub.status.idle": "2026-04-16T07:04:05.092196Z",
- "shell.execute_reply": "2026-04-16T07:04:05.091774Z"
+ "iopub.execute_input": "2026-06-04T02:49:31.754195Z",
+ "iopub.status.busy": "2026-06-04T02:49:31.754143Z",
+ "iopub.status.idle": "2026-06-04T02:49:31.782889Z",
+ "shell.execute_reply": "2026-06-04T02:49:31.782464Z"
}
},
"outputs": [
@@ -220,10 +220,10 @@
"id": "b525d6c0",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:05.093666Z",
- "iopub.status.busy": "2026-04-16T07:04:05.093586Z",
- "iopub.status.idle": "2026-04-16T07:04:05.112806Z",
- "shell.execute_reply": "2026-04-16T07:04:05.112344Z"
+ "iopub.execute_input": "2026-06-04T02:49:31.783952Z",
+ "iopub.status.busy": "2026-06-04T02:49:31.783879Z",
+ "iopub.status.idle": "2026-06-04T02:49:31.818278Z",
+ "shell.execute_reply": "2026-06-04T02:49:31.817632Z"
}
},
"outputs": [
@@ -233,13 +233,13 @@
"text": [
"Traceback (most recent last):\n",
" while inferring the type of expression `x + Located { inner: \"hoge\", src_span: NoSrcSpan }',\n",
- " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_63555/2391251849.py\", line 3, col 19-29\n",
+ " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_2790/2391251849.py\", line 3, col 19-29\n",
" while inferring the type of expression `x + Located { inner: \"hoge\", src_span: NoSrcSpan }',\n",
- " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_63555/2391251849.py\", line 3, col 19-29\n",
+ " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_2790/2391251849.py\", line 3, col 19-29\n",
" while checking if types `binary!' and `Literal[\"hoge\"]' can be combined with numeric operator `Add',\n",
- " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_63555/2391251849.py\", line 3, col 19-29\n",
+ " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_2790/2391251849.py\", line 3, col 19-29\n",
"\n",
- "File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_63555/2391251849.py\", line 3, col 19-29:\n",
+ "File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_2790/2391251849.py\", line 3, col 19-29:\n",
"\n",
" 3 | problem.infer(x + \"hoge\")\n",
" ^^^^^^^^^^\n",
@@ -312,10 +312,10 @@
"id": "5de5e593",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:05.114276Z",
- "iopub.status.busy": "2026-04-16T07:04:05.114194Z",
- "iopub.status.idle": "2026-04-16T07:04:06.402997Z",
- "shell.execute_reply": "2026-04-16T07:04:06.402602Z"
+ "iopub.execute_input": "2026-06-04T02:49:31.819446Z",
+ "iopub.status.busy": "2026-06-04T02:49:31.819363Z",
+ "iopub.status.idle": "2026-06-04T02:49:32.121916Z",
+ "shell.execute_reply": "2026-06-04T02:49:32.121482Z"
}
},
"outputs": [
@@ -371,10 +371,10 @@
"id": "3aa8e74d",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:06.404250Z",
- "iopub.status.busy": "2026-04-16T07:04:06.404156Z",
- "iopub.status.idle": "2026-04-16T07:04:06.420719Z",
- "shell.execute_reply": "2026-04-16T07:04:06.420340Z"
+ "iopub.execute_input": "2026-06-04T02:49:32.123052Z",
+ "iopub.status.busy": "2026-06-04T02:49:32.122973Z",
+ "iopub.status.idle": "2026-06-04T02:49:32.137865Z",
+ "shell.execute_reply": "2026-06-04T02:49:32.137590Z"
}
},
"outputs": [
@@ -402,10 +402,10 @@
"id": "f7348dfe",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:06.421767Z",
- "iopub.status.busy": "2026-04-16T07:04:06.421713Z",
- "iopub.status.idle": "2026-04-16T07:04:06.511448Z",
- "shell.execute_reply": "2026-04-16T07:04:06.511111Z"
+ "iopub.execute_input": "2026-06-04T02:49:32.138984Z",
+ "iopub.status.busy": "2026-06-04T02:49:32.138936Z",
+ "iopub.status.idle": "2026-06-04T02:49:32.166617Z",
+ "shell.execute_reply": "2026-06-04T02:49:32.166341Z"
}
},
"outputs": [
@@ -433,10 +433,10 @@
"id": "200cbd4b",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:06.512517Z",
- "iopub.status.busy": "2026-04-16T07:04:06.512458Z",
- "iopub.status.idle": "2026-04-16T07:04:06.607426Z",
- "shell.execute_reply": "2026-04-16T07:04:06.606963Z"
+ "iopub.execute_input": "2026-06-04T02:49:32.167602Z",
+ "iopub.status.busy": "2026-06-04T02:49:32.167540Z",
+ "iopub.status.idle": "2026-06-04T02:49:32.189346Z",
+ "shell.execute_reply": "2026-06-04T02:49:32.188984Z"
}
},
"outputs": [
@@ -464,10 +464,10 @@
"id": "e9405fa6",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:06.608524Z",
- "iopub.status.busy": "2026-04-16T07:04:06.608464Z",
- "iopub.status.idle": "2026-04-16T07:04:06.703975Z",
- "shell.execute_reply": "2026-04-16T07:04:06.703612Z"
+ "iopub.execute_input": "2026-06-04T02:49:32.190348Z",
+ "iopub.status.busy": "2026-06-04T02:49:32.190303Z",
+ "iopub.status.idle": "2026-06-04T02:49:32.218367Z",
+ "shell.execute_reply": "2026-06-04T02:49:32.218045Z"
}
},
"outputs": [
@@ -495,10 +495,10 @@
"id": "1dff7e02",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:06.705222Z",
- "iopub.status.busy": "2026-04-16T07:04:06.705161Z",
- "iopub.status.idle": "2026-04-16T07:04:06.795627Z",
- "shell.execute_reply": "2026-04-16T07:04:06.795268Z"
+ "iopub.execute_input": "2026-06-04T02:49:32.219327Z",
+ "iopub.status.busy": "2026-06-04T02:49:32.219273Z",
+ "iopub.status.idle": "2026-06-04T02:49:32.240363Z",
+ "shell.execute_reply": "2026-06-04T02:49:32.240092Z"
}
},
"outputs": [
@@ -534,10 +534,10 @@
"id": "7a5b888f",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:06.796819Z",
- "iopub.status.busy": "2026-04-16T07:04:06.796744Z",
- "iopub.status.idle": "2026-04-16T07:04:06.816870Z",
- "shell.execute_reply": "2026-04-16T07:04:06.816344Z"
+ "iopub.execute_input": "2026-06-04T02:49:32.241444Z",
+ "iopub.status.busy": "2026-06-04T02:49:32.241395Z",
+ "iopub.status.idle": "2026-06-04T02:49:32.255023Z",
+ "shell.execute_reply": "2026-06-04T02:49:32.254752Z"
}
},
"outputs": [
@@ -547,13 +547,13 @@
"text": [
"Traceback (most recent last):\n",
" while inferring the type of expression `S * y',\n",
- " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_63555/3719066850.py\", line 3, col 19-24\n",
+ " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_2790/3719066850.py\", line 3, col 19-24\n",
" while inferring the type of expression `S * y',\n",
- " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_63555/3719066850.py\", line 3, col 19-24\n",
+ " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_2790/3719066850.py\", line 3, col 19-24\n",
" while checking if types `TotalDict[N; float]' and `Array[N, M; int!]' can be combined with numeric operator `Mul',\n",
- " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_63555/3719066850.py\", line 3, col 19-24\n",
+ " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_2790/3719066850.py\", line 3, col 19-24\n",
"\n",
- "File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_63555/3719066850.py\", line 3, col 19-24:\n",
+ "File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_2790/3719066850.py\", line 3, col 19-24:\n",
"\n",
" 3 | problem.infer(S * y)\n",
" ^^^^^\n",
@@ -576,10 +576,10 @@
"id": "7bf01863",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:06.819579Z",
- "iopub.status.busy": "2026-04-16T07:04:06.819047Z",
- "iopub.status.idle": "2026-04-16T07:04:06.842386Z",
- "shell.execute_reply": "2026-04-16T07:04:06.842098Z"
+ "iopub.execute_input": "2026-06-04T02:49:32.256028Z",
+ "iopub.status.busy": "2026-06-04T02:49:32.255977Z",
+ "iopub.status.idle": "2026-06-04T02:49:32.270069Z",
+ "shell.execute_reply": "2026-06-04T02:49:32.269802Z"
}
},
"outputs": [
@@ -589,13 +589,13 @@
"text": [
"Traceback (most recent last):\n",
" while inferring the type of expression `y + z',\n",
- " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_63555/3550267328.py\", line 3, col 19-24\n",
+ " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_2790/3550267328.py\", line 3, col 19-24\n",
" while inferring the type of expression `y + z',\n",
- " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_63555/3550267328.py\", line 3, col 19-24\n",
+ " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_2790/3550267328.py\", line 3, col 19-24\n",
" while checking if types `Array[N, M; int!]' and `Array[N, M, N; float!]' can be combined with numeric operator `Add',\n",
- " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_63555/3550267328.py\", line 3, col 19-24\n",
+ " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_2790/3550267328.py\", line 3, col 19-24\n",
"\n",
- "File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_63555/3550267328.py\", line 3, col 19-24:\n",
+ "File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_2790/3550267328.py\", line 3, col 19-24:\n",
"\n",
" 3 | problem.infer(y + z)\n",
" ^^^^^\n",
@@ -629,10 +629,10 @@
"id": "8caa0e4b",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:06.843768Z",
- "iopub.status.busy": "2026-04-16T07:04:06.843710Z",
- "iopub.status.idle": "2026-04-16T07:04:07.112763Z",
- "shell.execute_reply": "2026-04-16T07:04:07.112429Z"
+ "iopub.execute_input": "2026-06-04T02:49:32.271050Z",
+ "iopub.status.busy": "2026-06-04T02:49:32.271004Z",
+ "iopub.status.idle": "2026-06-04T02:49:32.339579Z",
+ "shell.execute_reply": "2026-06-04T02:49:32.339351Z"
}
},
"outputs": [
@@ -682,10 +682,10 @@
"id": "eec6742a",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:07.114983Z",
- "iopub.status.busy": "2026-04-16T07:04:07.114893Z",
- "iopub.status.idle": "2026-04-16T07:04:07.380626Z",
- "shell.execute_reply": "2026-04-16T07:04:07.380075Z"
+ "iopub.execute_input": "2026-06-04T02:49:32.340713Z",
+ "iopub.status.busy": "2026-06-04T02:49:32.340665Z",
+ "iopub.status.idle": "2026-06-04T02:49:32.426221Z",
+ "shell.execute_reply": "2026-06-04T02:49:32.425836Z"
}
},
"outputs": [
@@ -737,10 +737,10 @@
"id": "0683580a",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:07.381879Z",
- "iopub.status.busy": "2026-04-16T07:04:07.381817Z",
- "iopub.status.idle": "2026-04-16T07:04:07.395525Z",
- "shell.execute_reply": "2026-04-16T07:04:07.394961Z"
+ "iopub.execute_input": "2026-06-04T02:49:32.427368Z",
+ "iopub.status.busy": "2026-06-04T02:49:32.427307Z",
+ "iopub.status.idle": "2026-06-04T02:49:32.436284Z",
+ "shell.execute_reply": "2026-06-04T02:49:32.435933Z"
}
},
"outputs": [
@@ -804,14 +804,14 @@
},
{
"cell_type": "code",
- "execution_count": 17,
+ "execution_count": 16,
"id": "19d6caee",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:07.515824Z",
- "iopub.status.busy": "2026-04-16T07:04:07.515737Z",
- "iopub.status.idle": "2026-04-16T07:04:07.623423Z",
- "shell.execute_reply": "2026-04-16T07:04:07.622939Z"
+ "iopub.execute_input": "2026-06-04T02:49:32.437265Z",
+ "iopub.status.busy": "2026-06-04T02:49:32.437216Z",
+ "iopub.status.idle": "2026-06-04T02:49:32.465052Z",
+ "shell.execute_reply": "2026-06-04T02:49:32.464744Z"
}
},
"outputs": [
@@ -824,7 +824,7 @@
"Comparison[binary!, Array[N, M; int!]]"
]
},
- "execution_count": 17,
+ "execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
@@ -835,14 +835,14 @@
},
{
"cell_type": "code",
- "execution_count": 18,
+ "execution_count": 17,
"id": "0829b0d0",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:07.624679Z",
- "iopub.status.busy": "2026-04-16T07:04:07.624605Z",
- "iopub.status.idle": "2026-04-16T07:04:07.642826Z",
- "shell.execute_reply": "2026-04-16T07:04:07.642439Z"
+ "iopub.execute_input": "2026-06-04T02:49:32.466205Z",
+ "iopub.status.busy": "2026-06-04T02:49:32.466145Z",
+ "iopub.status.idle": "2026-06-04T02:49:32.480981Z",
+ "shell.execute_reply": "2026-06-04T02:49:32.480575Z"
}
},
"outputs": [
@@ -855,7 +855,7 @@
"bool"
]
},
- "execution_count": 18,
+ "execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
@@ -866,14 +866,14 @@
},
{
"cell_type": "code",
- "execution_count": 19,
+ "execution_count": 18,
"id": "98865e29",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:07.644241Z",
- "iopub.status.busy": "2026-04-16T07:04:07.644068Z",
- "iopub.status.idle": "2026-04-16T07:04:07.882949Z",
- "shell.execute_reply": "2026-04-16T07:04:07.882562Z"
+ "iopub.execute_input": "2026-06-04T02:49:32.481909Z",
+ "iopub.status.busy": "2026-06-04T02:49:32.481861Z",
+ "iopub.status.idle": "2026-06-04T02:49:32.522651Z",
+ "shell.execute_reply": "2026-06-04T02:49:32.522249Z"
}
},
"outputs": [
@@ -886,7 +886,7 @@
"Comparison[Array[N, M; float!], Array[N, M; float!]]"
]
},
- "execution_count": 19,
+ "execution_count": 18,
"metadata": {},
"output_type": "execute_result"
}
@@ -931,14 +931,14 @@
},
{
"cell_type": "code",
- "execution_count": 20,
+ "execution_count": 19,
"id": "6e97e0ff",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:07.884099Z",
- "iopub.status.busy": "2026-04-16T07:04:07.884041Z",
- "iopub.status.idle": "2026-04-16T07:04:08.231863Z",
- "shell.execute_reply": "2026-04-16T07:04:08.231547Z"
+ "iopub.execute_input": "2026-06-04T02:49:32.523638Z",
+ "iopub.status.busy": "2026-06-04T02:49:32.523586Z",
+ "iopub.status.idle": "2026-06-04T02:49:32.679506Z",
+ "shell.execute_reply": "2026-06-04T02:49:32.679208Z"
}
},
"outputs": [
@@ -946,7 +946,7 @@
"data": {
"text/latex": [
"$$\\begin{array}{rl}\n",
- "\\text{Problem}\\colon &\\text{Index and Keys Example}\\\\\\displaystyle \\min &\\displaystyle 0\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathop{\\mathtt{keys}}\\left(S\\right);\\left\\{0, 1\\right\\}\\right]&\\quad &\\text{a dictionary of }\\text{binary}\\text{ variables with key }\\mathop{\\mathtt{keys}}\\left(S\\right)\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}N&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\S&\\in \\mathop{\\mathrm{PartialDict}}\\left[N\\times L;\\mathbb{R}\\right]&\\quad &\\text{A partial dictionary of placeholders with keys }N\\times L\\text{, values in }\\mathbb{R}\\\\\\end{alignedat}\\\\&\\\\&\\text{Category Labels:}\\\\&\\qquad \\begin{array}{rl}\n",
+ "\\text{Problem}\\colon &\\text{Index and Keys Example}\\\\\\displaystyle \\min &\\displaystyle 0\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathop{\\mathtt{keys}}\\left(S\\right);\\left\\{0, 1\\right\\}\\right]&\\quad &\\text{a dictionary of }\\text{binary}\\text{ variables with key }\\mathop{\\mathtt{keys}}\\left(S\\right)\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}N&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\S&\\in \\mathop{\\mathrm{PartialDict}}\\left[\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in \\left\\{0,\\ldots ,N-1\\right\\},j\\in L\\right\\};\\mathbb{R}\\right]&\\quad &\\text{A partial dictionary of placeholders with keys }\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in \\left\\{0,\\ldots ,N-1\\right\\},j\\in L\\right\\}\\text{, values in }\\mathbb{R}\\\\\\end{alignedat}\\\\&\\\\&\\text{Category Labels:}\\\\&\\qquad \\begin{array}{rl}\n",
"L&\\text{Category Label}\\end{array}\n",
"\\end{array}\n",
"$$"
@@ -955,7 +955,7 @@
"Problem(name=\"Index and Keys Example\", sense=MINIMIZE, objective=0, constraints=[])"
]
},
- "execution_count": 20,
+ "execution_count": 19,
"metadata": {},
"output_type": "execute_result"
}
@@ -1028,14 +1028,14 @@
},
{
"cell_type": "code",
- "execution_count": 21,
+ "execution_count": 20,
"id": "17eb39a1",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:08.233129Z",
- "iopub.status.busy": "2026-04-16T07:04:08.233060Z",
- "iopub.status.idle": "2026-04-16T07:04:08.686641Z",
- "shell.execute_reply": "2026-04-16T07:04:08.686282Z"
+ "iopub.execute_input": "2026-06-04T02:49:32.680642Z",
+ "iopub.status.busy": "2026-06-04T02:49:32.680586Z",
+ "iopub.status.idle": "2026-06-04T02:49:32.794909Z",
+ "shell.execute_reply": "2026-06-04T02:49:32.794595Z"
}
},
"outputs": [
@@ -1050,7 +1050,7 @@
"Problem(name=\"Sum Example\", sense=MINIMIZE, objective=sum(set(N).map(lambda (i: natural): a[i] * x[i])), constraints=[])"
]
},
- "execution_count": 21,
+ "execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
@@ -1082,14 +1082,14 @@
},
{
"cell_type": "code",
- "execution_count": 22,
+ "execution_count": 21,
"id": "dffc0a7b",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:08.687870Z",
- "iopub.status.busy": "2026-04-16T07:04:08.687791Z",
- "iopub.status.idle": "2026-04-16T07:04:08.737062Z",
- "shell.execute_reply": "2026-04-16T07:04:08.736722Z"
+ "iopub.execute_input": "2026-06-04T02:49:32.796075Z",
+ "iopub.status.busy": "2026-06-04T02:49:32.796016Z",
+ "iopub.status.idle": "2026-06-04T02:49:32.826766Z",
+ "shell.execute_reply": "2026-06-04T02:49:32.826411Z"
}
},
"outputs": [
@@ -1125,14 +1125,14 @@
},
{
"cell_type": "code",
- "execution_count": 23,
+ "execution_count": 22,
"id": "15434b93",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:08.738170Z",
- "iopub.status.busy": "2026-04-16T07:04:08.738115Z",
- "iopub.status.idle": "2026-04-16T07:04:09.149340Z",
- "shell.execute_reply": "2026-04-16T07:04:09.148064Z"
+ "iopub.execute_input": "2026-06-04T02:49:32.827903Z",
+ "iopub.status.busy": "2026-06-04T02:49:32.827854Z",
+ "iopub.status.idle": "2026-06-04T02:49:32.924734Z",
+ "shell.execute_reply": "2026-06-04T02:49:32.924379Z"
}
},
"outputs": [
@@ -1147,7 +1147,7 @@
"Problem(name=\"Sum Example (Plain)\", sense=MINIMIZE, objective=sum(N.map(lambda (i: natural): a[i] * x[i])), constraints=[])"
]
},
- "execution_count": 23,
+ "execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
@@ -1172,14 +1172,14 @@
},
{
"cell_type": "code",
- "execution_count": 24,
+ "execution_count": 23,
"id": "0112b897",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:09.150683Z",
- "iopub.status.busy": "2026-04-16T07:04:09.150617Z",
- "iopub.status.idle": "2026-04-16T07:04:09.548851Z",
- "shell.execute_reply": "2026-04-16T07:04:09.548325Z"
+ "iopub.execute_input": "2026-06-04T02:49:32.925741Z",
+ "iopub.status.busy": "2026-06-04T02:49:32.925683Z",
+ "iopub.status.idle": "2026-06-04T02:49:33.048818Z",
+ "shell.execute_reply": "2026-06-04T02:49:33.048107Z"
}
},
"outputs": [
@@ -1191,10 +1191,10 @@
"$$"
],
"text/plain": [
- "Problem(name=\"Sum Example (Plain, Alt)\", sense=MINIMIZE, objective=sum(N.map(lambda (i: natural): a[i] * x[i])), constraints=[])"
+ "Problem(name=\"Sum Example (Plain, Alt)\", sense=MINIMIZE, objective=sum(set(N).map(lambda (i: natural): a[i] * x[i])), constraints=[])"
]
},
- "execution_count": 24,
+ "execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
@@ -1227,14 +1227,14 @@
},
{
"cell_type": "code",
- "execution_count": 25,
+ "execution_count": 24,
"id": "84a0a84c",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:09.550085Z",
- "iopub.status.busy": "2026-04-16T07:04:09.550015Z",
- "iopub.status.idle": "2026-04-16T07:04:10.030400Z",
- "shell.execute_reply": "2026-04-16T07:04:10.029923Z"
+ "iopub.execute_input": "2026-06-04T02:49:33.051356Z",
+ "iopub.status.busy": "2026-06-04T02:49:33.051111Z",
+ "iopub.status.idle": "2026-06-04T02:49:33.257297Z",
+ "shell.execute_reply": "2026-06-04T02:49:33.256962Z"
}
},
"outputs": [
@@ -1249,7 +1249,7 @@
"Problem(name=\"Even Sum Example\", sense=MINIMIZE, objective=sum(set(N.filter(lambda i: i % 2 == 0)).map(lambda (i: natural): a[i] * x[i])), constraints=[])"
]
},
- "execution_count": 25,
+ "execution_count": 24,
"metadata": {},
"output_type": "execute_result"
}
@@ -1276,14 +1276,14 @@
},
{
"cell_type": "code",
- "execution_count": 26,
+ "execution_count": 25,
"id": "1e520da7",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:10.031620Z",
- "iopub.status.busy": "2026-04-16T07:04:10.031566Z",
- "iopub.status.idle": "2026-04-16T07:04:10.530312Z",
- "shell.execute_reply": "2026-04-16T07:04:10.516385Z"
+ "iopub.execute_input": "2026-06-04T02:49:33.258478Z",
+ "iopub.status.busy": "2026-06-04T02:49:33.258424Z",
+ "iopub.status.idle": "2026-06-04T02:49:33.416765Z",
+ "shell.execute_reply": "2026-06-04T02:49:33.416419Z"
}
},
"outputs": [
@@ -1295,10 +1295,10 @@
"$$"
],
"text/plain": [
- "Problem(name=\"Even Sum Example (Plain)\", sense=MINIMIZE, objective=sum(N.filter(lambda i: i % 2 == 0).map(lambda (i: natural): a[i] * x[i])), constraints=[])"
+ "Problem(name=\"Even Sum Example (Plain)\", sense=MINIMIZE, objective=sum(set(N.filter(lambda i: i % 2 == 0)).map(lambda (i: natural): a[i] * x[i])), constraints=[])"
]
},
- "execution_count": 26,
+ "execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
@@ -1328,14 +1328,14 @@
},
{
"cell_type": "code",
- "execution_count": 27,
+ "execution_count": 26,
"id": "28b8bad3",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:10.534229Z",
- "iopub.status.busy": "2026-04-16T07:04:10.533832Z",
- "iopub.status.idle": "2026-04-16T07:04:11.091517Z",
- "shell.execute_reply": "2026-04-16T07:04:11.091121Z"
+ "iopub.execute_input": "2026-06-04T02:49:33.417937Z",
+ "iopub.status.busy": "2026-06-04T02:49:33.417881Z",
+ "iopub.status.idle": "2026-06-04T02:49:33.576687Z",
+ "shell.execute_reply": "2026-06-04T02:49:33.576362Z"
}
},
"outputs": [
@@ -1350,7 +1350,7 @@
"Problem(name=\"Double Sum Example\", sense=MINIMIZE, objective=sum(set(N.flat_map(lambda (i: natural): M.map(lambda (j: natural): (i, j)))).map(lambda ((i, j): Tuple[natural, natural]): Q[i, j])), constraints=[])"
]
},
- "execution_count": 27,
+ "execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
@@ -1378,14 +1378,14 @@
},
{
"cell_type": "code",
- "execution_count": 28,
+ "execution_count": 27,
"id": "385cb7b1",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:11.092772Z",
- "iopub.status.busy": "2026-04-16T07:04:11.092711Z",
- "iopub.status.idle": "2026-04-16T07:04:11.573549Z",
- "shell.execute_reply": "2026-04-16T07:04:11.573230Z"
+ "iopub.execute_input": "2026-06-04T02:49:33.577819Z",
+ "iopub.status.busy": "2026-06-04T02:49:33.577764Z",
+ "iopub.status.idle": "2026-06-04T02:49:33.716040Z",
+ "shell.execute_reply": "2026-06-04T02:49:33.715666Z"
}
},
"outputs": [
@@ -1400,7 +1400,7 @@
"Problem(name=\"Double Sum Example (Alt)\", sense=MINIMIZE, objective=sum(set(set((N, M))).map(lambda ((i, j): Tuple[natural, natural]): Q[i, j])), constraints=[])"
]
},
- "execution_count": 28,
+ "execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
@@ -1428,14 +1428,14 @@
},
{
"cell_type": "code",
- "execution_count": 29,
+ "execution_count": 28,
"id": "710245ee",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:11.574879Z",
- "iopub.status.busy": "2026-04-16T07:04:11.574810Z",
- "iopub.status.idle": "2026-04-16T07:04:12.098044Z",
- "shell.execute_reply": "2026-04-16T07:04:12.097699Z"
+ "iopub.execute_input": "2026-06-04T02:49:33.717321Z",
+ "iopub.status.busy": "2026-06-04T02:49:33.717264Z",
+ "iopub.status.idle": "2026-06-04T02:49:33.850140Z",
+ "shell.execute_reply": "2026-06-04T02:49:33.849737Z"
}
},
"outputs": [
@@ -1450,7 +1450,7 @@
"Problem(name=\"Double Sum Example (Alt)\", sense=MINIMIZE, objective=sum(set((N, M)).map(lambda ((i, j): Tuple[natural, natural]): Q[i, j])), constraints=[])"
]
},
- "execution_count": 29,
+ "execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
@@ -1480,14 +1480,14 @@
},
{
"cell_type": "code",
- "execution_count": 30,
+ "execution_count": 29,
"id": "3362f83d",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:12.099290Z",
- "iopub.status.busy": "2026-04-16T07:04:12.099216Z",
- "iopub.status.idle": "2026-04-16T07:04:13.001106Z",
- "shell.execute_reply": "2026-04-16T07:04:13.000669Z"
+ "iopub.execute_input": "2026-06-04T02:49:33.851135Z",
+ "iopub.status.busy": "2026-06-04T02:49:33.851076Z",
+ "iopub.status.idle": "2026-06-04T02:49:34.052101Z",
+ "shell.execute_reply": "2026-06-04T02:49:34.051739Z"
}
},
"outputs": [
@@ -1502,7 +1502,7 @@
"Problem(name=\"Filtered Double Sum Example\", sense=MINIMIZE, objective=sum(set(N.flat_map(lambda (i: natural): M.map(lambda (j: natural): (i, j))).filter(lambda (i, j): (i + j) % 2 == 0)).map(lambda ((i, j): Tuple[natural, natural]): Q[i, j])), constraints=[])"
]
},
- "execution_count": 30,
+ "execution_count": 29,
"metadata": {},
"output_type": "execute_result"
}
@@ -1535,14 +1535,14 @@
},
{
"cell_type": "code",
- "execution_count": 31,
+ "execution_count": 30,
"id": "7c2e2ab9",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:13.002348Z",
- "iopub.status.busy": "2026-04-16T07:04:13.002288Z",
- "iopub.status.idle": "2026-04-16T07:04:13.610579Z",
- "shell.execute_reply": "2026-04-16T07:04:13.609824Z"
+ "iopub.execute_input": "2026-06-04T02:49:34.053226Z",
+ "iopub.status.busy": "2026-06-04T02:49:34.053166Z",
+ "iopub.status.idle": "2026-06-04T02:49:34.218018Z",
+ "shell.execute_reply": "2026-06-04T02:49:34.217626Z"
}
},
"outputs": [
@@ -1554,10 +1554,10 @@
"$$"
],
"text/plain": [
- "Problem(name=\"Filtered Double Sum Example (Plain)\", sense=MINIMIZE, objective=sum(set((N, M)).filter(lambda (i, j): (i + j) % 2 == 0).map(lambda ((i, j): Tuple[natural, natural]): Q[i, j])), constraints=[])"
+ "Problem(name=\"Filtered Double Sum Example (Plain)\", sense=MINIMIZE, objective=sum(set(set((N, M)).filter(lambda (i, j): (i + j) % 2 == 0)).map(lambda ((i, j): Tuple[natural, natural]): Q[i, j])), constraints=[])"
]
},
- "execution_count": 31,
+ "execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
@@ -1585,14 +1585,14 @@
},
{
"cell_type": "code",
- "execution_count": 32,
+ "execution_count": 31,
"id": "2027a720",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-16T07:04:13.612856Z",
- "iopub.status.busy": "2026-04-16T07:04:13.612757Z",
- "iopub.status.idle": "2026-04-16T07:04:13.993722Z",
- "shell.execute_reply": "2026-04-16T07:04:13.993261Z"
+ "iopub.execute_input": "2026-06-04T02:49:34.219137Z",
+ "iopub.status.busy": "2026-06-04T02:49:34.219076Z",
+ "iopub.status.idle": "2026-06-04T02:49:34.336602Z",
+ "shell.execute_reply": "2026-06-04T02:49:34.336222Z"
}
},
"outputs": [
@@ -1602,10 +1602,10 @@
"$$\\sum _{i=0}^{N-1}{\\sum _{\\substack{j=0\\\\\\left(i+j\\right)\\bmod 2=0}}^{M-1}{{Q}_{i,j}}}$$"
],
"text/plain": [
- "Expression(sum(N.flat_map(lambda i: M.map(lambda j: (i, j))).filter(lambda (i, j): (i + j) % 2 == 0).map(lambda (i, j): Q[i, j])))"
+ "Expression(sum(set(N.flat_map(lambda i: M.map(lambda j: (i, j))).filter(lambda (i, j): (i + j) % 2 == 0)).map(lambda (i, j): Q[i, j])))"
]
},
- "execution_count": 32,
+ "execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
diff --git a/docs/ja/basics/instance_generation.ipynb b/docs/ja/basics/instance_generation.ipynb
index 3184d81e..380744ea 100644
--- a/docs/ja/basics/instance_generation.ipynb
+++ b/docs/ja/basics/instance_generation.ipynb
@@ -30,10 +30,10 @@
"id": "2fbc556e",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:17.722025Z",
- "iopub.status.busy": "2026-03-24T02:04:17.721838Z",
- "iopub.status.idle": "2026-03-24T02:04:18.093380Z",
- "shell.execute_reply": "2026-03-24T02:04:18.092879Z"
+ "iopub.execute_input": "2026-06-04T02:49:23.099686Z",
+ "iopub.status.busy": "2026-06-04T02:49:23.099628Z",
+ "iopub.status.idle": "2026-06-04T02:49:24.094796Z",
+ "shell.execute_reply": "2026-06-04T02:49:24.094449Z"
}
},
"outputs": [
@@ -43,11 +43,11 @@
"$$\\begin{array}{rl}\n",
"\\text{Problem}\\colon &\\text{Knapsack with Synergy}\\\\\\displaystyle \\max &\\displaystyle \\sum _{i=0}^{N-1}{{v}_{i}\\cdot {x}_{i}}+\\sum _{\\left\\langle i,j\\right\\rangle \\in \\mathop{\\mathtt{keys}}\\left(s\\right)}{{s}_{i,j}\\cdot {x}_{i}\\cdot {x}_{j}}\\\\&\\\\\\text{s.t.}&\\\\&\\begin{aligned}\n",
"\\text{weight}&\\quad \\displaystyle \\sum _{i=0}^{N-1}{{w}_{i}\\cdot {x}_{i}}\\leq W\\end{aligned}\n",
- "\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{Array}}\\left[N;\\left\\{0, 1\\right\\}\\right]&\\quad &1\\text{-dim binary variable}\\\\&&&\\text{Item selection variables}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}N&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\s&\\in \\mathop{\\mathrm{PartialDict}}\\left[N\\times N;\\mathbb{R}\\right]&\\quad &\\text{A partial dictionary of placeholders with keys }N\\times N\\text{, values in }\\mathbb{R}\\\\&&&\\text{Synergy bonus between items}\\\\&&&\\\\v&\\in \\mathop{\\mathrm{Array}}\\left[N;\\mathbb{R}\\right]&\\quad &1\\text{-dimensional array of placeholders with elements in }\\mathbb{R}\\\\&&&\\text{Values of the items}\\\\&&&\\\\W&\\in \\mathbb{R}&\\quad &\\text{A scalar placeholder in }\\mathbb{R}\\\\&&&\\text{Weight limit of the problem}\\\\&&&\\\\w&\\in \\mathop{\\mathrm{Array}}\\left[N;\\mathbb{R}\\right]&\\quad &1\\text{-dimensional array of placeholders with elements in }\\mathbb{R}\\\\&&&\\text{Weights of the items}\\\\\\end{alignedat}\\end{array}\n",
+ "\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{Array}}\\left[N;\\left\\{0, 1\\right\\}\\right]&\\quad &1\\text{-dim binary variable}\\\\&&&\\text{Item selection variables}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}N&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\s&\\in \\mathop{\\mathrm{PartialDict}}\\left[\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in \\left\\{0,\\ldots ,N-1\\right\\},j\\in \\left\\{0,\\ldots ,N-1\\right\\}\\right\\};\\mathbb{R}\\right]&\\quad &\\text{A partial dictionary of placeholders with keys }\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in \\left\\{0,\\ldots ,N-1\\right\\},j\\in \\left\\{0,\\ldots ,N-1\\right\\}\\right\\}\\text{, values in }\\mathbb{R}\\\\&&&\\text{Synergy bonus between items}\\\\&&&\\\\v&\\in \\mathop{\\mathrm{Array}}\\left[N;\\mathbb{R}\\right]&\\quad &1\\text{-dimensional array of placeholders with elements in }\\mathbb{R}\\\\&&&\\text{Values of the items}\\\\&&&\\\\W&\\in \\mathbb{R}&\\quad &\\text{A scalar placeholder in }\\mathbb{R}\\\\&&&\\text{Weight limit of the problem}\\\\&&&\\\\w&\\in \\mathop{\\mathrm{Array}}\\left[N;\\mathbb{R}\\right]&\\quad &1\\text{-dimensional array of placeholders with elements in }\\mathbb{R}\\\\&&&\\text{Weights of the items}\\\\\\end{alignedat}\\end{array}\n",
"$$"
],
"text/plain": [
- "Problem(name=\"Knapsack with Synergy\", sense=MAXIMIZE, objective=sum(N.map(lambda (i: natural): v[i] * x[i])) + sum(s.keys().map(lambda ((i, j): ElementOf[set((N, N))]): s[i, j] * x[i] * x[j])), constraints={weight: [Constraint(name=\"weight\", sense=LESS_THAN_EQUAL, left=sum(N.map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Float)),],})"
+ "Problem(name=\"Knapsack with Synergy\", sense=MAXIMIZE, objective=sum(set(N).map(lambda (i: natural): v[i] * x[i])) + sum(set(s.keys()).map(lambda ((i, j): ElementOf[set((N, N))]): s[i, j] * x[i] * x[j])), constraints={weight: [Constraint(name=\"weight\", sense=LESS_THAN_EQUAL, left=sum(set(N).map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Float)),],})"
]
},
"execution_count": 1,
@@ -109,10 +109,10 @@
"id": "df329286",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:18.094670Z",
- "iopub.status.busy": "2026-03-24T02:04:18.094567Z",
- "iopub.status.idle": "2026-03-24T02:04:18.096930Z",
- "shell.execute_reply": "2026-03-24T02:04:18.096592Z"
+ "iopub.execute_input": "2026-06-04T02:49:24.096676Z",
+ "iopub.status.busy": "2026-06-04T02:49:24.096564Z",
+ "iopub.status.idle": "2026-06-04T02:49:24.098931Z",
+ "shell.execute_reply": "2026-06-04T02:49:24.098533Z"
}
},
"outputs": [],
@@ -161,10 +161,10 @@
"id": "3688cb57",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:18.098095Z",
- "iopub.status.busy": "2026-03-24T02:04:18.098029Z",
- "iopub.status.idle": "2026-03-24T02:04:19.247847Z",
- "shell.execute_reply": "2026-03-24T02:04:19.247578Z"
+ "iopub.execute_input": "2026-06-04T02:49:24.099965Z",
+ "iopub.status.busy": "2026-06-04T02:49:24.099902Z",
+ "iopub.status.idle": "2026-06-04T02:49:24.875268Z",
+ "shell.execute_reply": "2026-06-04T02:49:24.874869Z"
}
},
"outputs": [
@@ -246,10 +246,10 @@
"id": "6988c9e0",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:19.248932Z",
- "iopub.status.busy": "2026-03-24T02:04:19.248836Z",
- "iopub.status.idle": "2026-03-24T02:04:19.254342Z",
- "shell.execute_reply": "2026-03-24T02:04:19.254093Z"
+ "iopub.execute_input": "2026-06-04T02:49:24.876378Z",
+ "iopub.status.busy": "2026-06-04T02:49:24.876280Z",
+ "iopub.status.idle": "2026-06-04T02:49:24.881506Z",
+ "shell.execute_reply": "2026-06-04T02:49:24.881137Z"
}
},
"outputs": [
@@ -453,10 +453,10 @@
"id": "ecc3b474",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:19.255357Z",
- "iopub.status.busy": "2026-03-24T02:04:19.255305Z",
- "iopub.status.idle": "2026-03-24T02:04:19.257207Z",
- "shell.execute_reply": "2026-03-24T02:04:19.256957Z"
+ "iopub.execute_input": "2026-06-04T02:49:24.882436Z",
+ "iopub.status.busy": "2026-06-04T02:49:24.882376Z",
+ "iopub.status.idle": "2026-06-04T02:49:24.884776Z",
+ "shell.execute_reply": "2026-06-04T02:49:24.884440Z"
}
},
"outputs": [
@@ -489,10 +489,10 @@
"id": "fbfe4e07",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:19.258170Z",
- "iopub.status.busy": "2026-03-24T02:04:19.258115Z",
- "iopub.status.idle": "2026-03-24T02:04:19.633389Z",
- "shell.execute_reply": "2026-03-24T02:04:19.632966Z"
+ "iopub.execute_input": "2026-06-04T02:49:24.885665Z",
+ "iopub.status.busy": "2026-06-04T02:49:24.885617Z",
+ "iopub.status.idle": "2026-06-04T02:49:25.007399Z",
+ "shell.execute_reply": "2026-06-04T02:49:25.006916Z"
}
},
"outputs": [],
@@ -540,10 +540,10 @@
"id": "4cd5670d",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:19.634599Z",
- "iopub.status.busy": "2026-03-24T02:04:19.634535Z",
- "iopub.status.idle": "2026-03-24T02:04:19.657061Z",
- "shell.execute_reply": "2026-03-24T02:04:19.656707Z"
+ "iopub.execute_input": "2026-06-04T02:49:25.008513Z",
+ "iopub.status.busy": "2026-06-04T02:49:25.008460Z",
+ "iopub.status.idle": "2026-06-04T02:49:25.047537Z",
+ "shell.execute_reply": "2026-06-04T02:49:25.047168Z"
}
},
"outputs": [
@@ -607,10 +607,10 @@
"id": "6695be16",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:19.658220Z",
- "iopub.status.busy": "2026-03-24T02:04:19.658157Z",
- "iopub.status.idle": "2026-03-24T02:04:19.759410Z",
- "shell.execute_reply": "2026-03-24T02:04:19.759069Z"
+ "iopub.execute_input": "2026-06-04T02:49:25.048564Z",
+ "iopub.status.busy": "2026-06-04T02:49:25.048509Z",
+ "iopub.status.idle": "2026-06-04T02:49:25.116796Z",
+ "shell.execute_reply": "2026-06-04T02:49:25.116420Z"
}
},
"outputs": [
@@ -786,7 +786,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.11"
+ "version": "3.11.14"
}
},
"nbformat": 4,
diff --git a/docs/ja/basics/modeling.ipynb b/docs/ja/basics/modeling.ipynb
index 4fb2d210..45acf6e9 100644
--- a/docs/ja/basics/modeling.ipynb
+++ b/docs/ja/basics/modeling.ipynb
@@ -17,10 +17,10 @@
"id": "9fd7135f",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:22.183004Z",
- "iopub.status.busy": "2026-03-24T02:04:22.182943Z",
- "iopub.status.idle": "2026-03-24T02:04:22.188766Z",
- "shell.execute_reply": "2026-03-24T02:04:22.188482Z"
+ "iopub.execute_input": "2026-06-04T02:49:27.474578Z",
+ "iopub.status.busy": "2026-06-04T02:49:27.474391Z",
+ "iopub.status.idle": "2026-06-04T02:49:27.487522Z",
+ "shell.execute_reply": "2026-06-04T02:49:27.486694Z"
}
},
"outputs": [],
@@ -53,10 +53,10 @@
"id": "4183f019",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:22.190098Z",
- "iopub.status.busy": "2026-03-24T02:04:22.190042Z",
- "iopub.status.idle": "2026-03-24T02:04:22.311617Z",
- "shell.execute_reply": "2026-03-24T02:04:22.311221Z"
+ "iopub.execute_input": "2026-06-04T02:49:27.490398Z",
+ "iopub.status.busy": "2026-06-04T02:49:27.490294Z",
+ "iopub.status.idle": "2026-06-04T02:49:27.677887Z",
+ "shell.execute_reply": "2026-06-04T02:49:27.677558Z"
}
},
"outputs": [
@@ -68,7 +68,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"Knapsack Problem\", sense=MAXIMIZE, objective=sum(N.map(lambda (i: natural): v[i] * x[i])), constraints=[])"
+ "Problem(name=\"Knapsack Problem\", sense=MAXIMIZE, objective=sum(set(N).map(lambda (i: natural): v[i] * x[i])), constraints=[])"
]
},
"execution_count": 2,
@@ -115,10 +115,10 @@
"id": "742666cc",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:22.312593Z",
- "iopub.status.busy": "2026-03-24T02:04:22.312541Z",
- "iopub.status.idle": "2026-03-24T02:04:22.337986Z",
- "shell.execute_reply": "2026-03-24T02:04:22.337551Z"
+ "iopub.execute_input": "2026-06-04T02:49:27.679072Z",
+ "iopub.status.busy": "2026-06-04T02:49:27.679010Z",
+ "iopub.status.idle": "2026-06-04T02:49:27.711229Z",
+ "shell.execute_reply": "2026-06-04T02:49:27.710915Z"
}
},
"outputs": [
@@ -160,10 +160,10 @@
"id": "c0381225",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:22.339052Z",
- "iopub.status.busy": "2026-03-24T02:04:22.338997Z",
- "iopub.status.idle": "2026-03-24T02:04:22.360171Z",
- "shell.execute_reply": "2026-03-24T02:04:22.359757Z"
+ "iopub.execute_input": "2026-06-04T02:49:27.712590Z",
+ "iopub.status.busy": "2026-06-04T02:49:27.712519Z",
+ "iopub.status.idle": "2026-06-04T02:49:27.739819Z",
+ "shell.execute_reply": "2026-06-04T02:49:27.738659Z"
}
},
"outputs": [
@@ -195,8 +195,7 @@
"id": "b31b1155",
"metadata": {},
"source": [
- "既存の項が置き換えられたのではなく、$y$ が加算され $x + y$ が新たな目的関数となっていることが分かります。\n",
- "目的関数の項を削除したい場合、目的関数の項の一覧を(Python の)リストなどで持っておき、あとからそれを使って目的関数を設定するなどするとよいでしょう。\n",
+ "既存の項が置き換えられるのではなく、$y$ が加算され $x + y$ が新たな目的関数となっていることが分かります。\n",
"\n",
":::{admonition} 目的関数から項を「引く」操作\n",
":class: tip\n",
@@ -204,6 +203,52 @@
"JijModeling 2.3.1 以降では、{py:class}`~jijmodeling.Problem` に対して {py:meth}`-= ` 演算子を使うことで、数値型の {py:class}`~jijmodeling.Expression` オブジェクトを目的関数から「引く」こともできます。\n",
":::\n",
"\n",
+ ":::{admonition} 目的関数の置き換え\n",
+ ":class: tip\n",
+ "JijModeling 2.5.0 以降では、`Problem.objective` に直接式を代入することで、これまでの目的関数を捨て、新しい目的関数で置き換えることができます。\n",
+ ":::"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "d4d454f4",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-04T02:49:27.741191Z",
+ "iopub.status.busy": "2026-06-04T02:49:27.741128Z",
+ "iopub.status.idle": "2026-06-04T02:49:27.764932Z",
+ "shell.execute_reply": "2026-06-04T02:49:27.764617Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$\\begin{array}{rl}\n",
+ "\\text{Problem}\\colon &\\text{Sample}\\\\\\displaystyle \\min &\\displaystyle y\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\left\\{0, 1\\right\\}&\\quad &0\\text{-dim binary variable}\\\\y&\\in \\left\\{0, 1\\right\\}&\\quad &0\\text{-dim binary variable}\\\\\\end{alignedat}\\end{array}\n",
+ "$$"
+ ],
+ "text/plain": [
+ "Problem(name=\"Sample\", sense=MINIMIZE, objective=y, constraints=[])"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "problem.objective = y\n",
+ "\n",
+ "problem"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "398ffa17",
+ "metadata": {},
+ "source": [
"## 制約条件の設定\n",
"\n",
"制約条件の追加も同様に {py:meth}`+= ` 演算子を使って行います。\n",
@@ -227,14 +272,14 @@
},
{
"cell_type": "code",
- "execution_count": 5,
+ "execution_count": 6,
"id": "897c3ce3",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:22.361156Z",
- "iopub.status.busy": "2026-03-24T02:04:22.361104Z",
- "iopub.status.idle": "2026-03-24T02:04:22.480471Z",
- "shell.execute_reply": "2026-03-24T02:04:22.480123Z"
+ "iopub.execute_input": "2026-06-04T02:49:27.766256Z",
+ "iopub.status.busy": "2026-06-04T02:49:27.766198Z",
+ "iopub.status.idle": "2026-06-04T02:49:27.912378Z",
+ "shell.execute_reply": "2026-06-04T02:49:27.911955Z"
}
},
"outputs": [
@@ -248,10 +293,10 @@
"$$"
],
"text/plain": [
- "Problem(name=\"Knapsack Problem\", sense=MAXIMIZE, objective=sum(N.map(lambda (i: natural): v[i] * x[i])), constraints={weight: [Constraint(name=\"weight\", sense=LESS_THAN_EQUAL, left=sum(N.map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Float)),],})"
+ "Problem(name=\"Knapsack Problem\", sense=MAXIMIZE, objective=sum(set(N).map(lambda (i: natural): v[i] * x[i])), constraints={weight: [Constraint(name=\"weight\", sense=LESS_THAN_EQUAL, left=sum(set(N).map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Float)),],})"
]
},
- "execution_count": 5,
+ "execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
@@ -320,14 +365,14 @@
},
{
"cell_type": "code",
- "execution_count": 6,
+ "execution_count": 7,
"id": "bcaea850",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:22.481601Z",
- "iopub.status.busy": "2026-03-24T02:04:22.481541Z",
- "iopub.status.idle": "2026-03-24T02:04:22.865508Z",
- "shell.execute_reply": "2026-03-24T02:04:22.865057Z"
+ "iopub.execute_input": "2026-06-04T02:49:27.913625Z",
+ "iopub.status.busy": "2026-06-04T02:49:27.913562Z",
+ "iopub.status.idle": "2026-06-04T02:49:28.684956Z",
+ "shell.execute_reply": "2026-06-04T02:49:28.684625Z"
}
},
"outputs": [
@@ -337,16 +382,16 @@
"$$\\begin{array}{rl}\n",
"\\text{Problem}\\colon &\\text{TSP, Decorated}\\\\\\displaystyle \\min &\\displaystyle \\sum _{t=0}^{\\#C-1}{\\sum _{i\\in C}{\\sum _{j\\in C}{{d}_{i,j}\\cdot {x}_{t,i}\\cdot {x}_{\\left(t+1\\right)\\bmod \\#C,j}}}}\\\\&\\\\\\text{s.t.}&\\\\&\\begin{aligned}\n",
"\\text{one city}&\\quad \\displaystyle \\sum _{i\\in C}{{x}_{t,i}}=1\\quad \\forall t\\;\\text{s.t.}\\;t\\in \\left\\{0,\\ldots ,\\#C-1\\right\\}\\\\\\text{one time}&\\quad \\displaystyle \\sum _{t=0}^{\\#C-1}{{x}_{t,i}}=1\\quad \\forall i\\;\\text{s.t.}\\;i\\in C\\end{aligned}\n",
- "\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\#C\\times C;\\left\\{0, 1\\right\\}\\right]&\\quad &\\text{a dictionary of }\\text{binary}\\text{ variables with key }\\#C\\times C\\\\&&&\\text{$x_{t,i} = 1$ if City $i$ is visited at time $t$}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}d&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathrm{C}\\times \\mathrm{C};\\mathbb{R}\\right]&\\quad &\\text{A total dictionary of placeholders with keys }\\left(\\mathrm{C},\\mathrm{C}\\right)\\text{, values in }\\mathbb{R}\\\\&&&\\text{distance between cities}\\\\\\end{alignedat}\\\\&\\\\&\\text{Category Labels:}\\\\&\\qquad \\begin{array}{rl}\n",
+ "\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in \\left\\{0,\\ldots ,\\#C-1\\right\\},j\\in C\\right\\};\\left\\{0, 1\\right\\}\\right]&\\quad &\\text{a dictionary of }\\text{binary}\\text{ variables with key }\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in \\left\\{0,\\ldots ,\\#C-1\\right\\},j\\in C\\right\\}\\\\&&&\\text{$x_{t,i} = 1$ if City $i$ is visited at time $t$}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}d&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathrm{C}\\times \\mathrm{C};\\mathbb{R}\\right]&\\quad &\\text{A total dictionary of placeholders with keys }\\left(\\mathrm{C},\\mathrm{C}\\right)\\text{, values in }\\mathbb{R}\\\\&&&\\text{distance between cities}\\\\\\end{alignedat}\\\\&\\\\&\\text{Category Labels:}\\\\&\\qquad \\begin{array}{rl}\n",
"C&\\text{Labels of Cities}\\end{array}\n",
"\\end{array}\n",
"$$"
],
"text/plain": [
- "Problem(name=\"TSP, Decorated\", sense=MINIMIZE, objective=sum(C.count().flat_map(lambda (t: natural): C.map(lambda (i: CategoryLabel(\"C\")): (t, i))).flat_map(lambda ((t, i): Tuple[natural, CategoryLabel(\"C\")]): C.map(lambda (j: CategoryLabel(\"C\")): (t, i, j))).map(lambda ((t, i, j): Tuple[natural, CategoryLabel(\"C\"), CategoryLabel(\"C\")]): d[i, j] * x[t, i] * x[(t + 1) % C.count(), j])), constraints={one city: [Constraint(name=\"one city\", , lambda t: sum(C.map(lambda (i: CategoryLabel(\"C\")): x[t, i])) == 1, domain=set(C.count())),],one time: [Constraint(name=\"one time\", , lambda i: sum(C.count().map(lambda (t: natural): x[t, i])) == 1, domain=C),],})"
+ "Problem(name=\"TSP, Decorated\", sense=MINIMIZE, objective=sum(set(C.count().flat_map(lambda (t: natural): C.map(lambda (i: CategoryLabel(\"C\")): (t, i))).flat_map(lambda ((t, i): Tuple[natural, CategoryLabel(\"C\")]): C.map(lambda (j: CategoryLabel(\"C\")): (t, i, j)))).map(lambda ((t, i, j): Tuple[natural, CategoryLabel(\"C\"), CategoryLabel(\"C\")]): d[i, j] * x[t, i] * x[(t + 1) % C.count(), j])), constraints={one city: [Constraint(name=\"one city\", , lambda t: sum(set(C).map(lambda (i: CategoryLabel(\"C\")): x[t, i])) == 1, domain=set(C.count())),],one time: [Constraint(name=\"one time\", , lambda i: sum(set(C.count()).map(lambda (t: natural): x[t, i])) == 1, domain=C),],})"
]
},
- "execution_count": 6,
+ "execution_count": 7,
"metadata": {},
"output_type": "execute_result"
}
@@ -387,14 +432,14 @@
},
{
"cell_type": "code",
- "execution_count": 7,
+ "execution_count": 8,
"id": "3824401e",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:22.866574Z",
- "iopub.status.busy": "2026-03-24T02:04:22.866516Z",
- "iopub.status.idle": "2026-03-24T02:04:23.241303Z",
- "shell.execute_reply": "2026-03-24T02:04:23.240727Z"
+ "iopub.execute_input": "2026-06-04T02:49:28.686134Z",
+ "iopub.status.busy": "2026-06-04T02:49:28.686072Z",
+ "iopub.status.idle": "2026-06-04T02:49:29.284164Z",
+ "shell.execute_reply": "2026-06-04T02:49:29.283873Z"
}
},
"outputs": [
@@ -404,16 +449,16 @@
"$$\\begin{array}{rl}\n",
"\\text{Problem}\\colon &\\text{TSP, Decorated}\\\\\\displaystyle \\min &\\displaystyle \\sum _{t=0}^{\\#C-1}{\\sum _{i\\in C}{\\sum _{j\\in C}{{d}_{i,j}\\cdot {x}_{t,i}\\cdot {x}_{\\left(t+1\\right)\\bmod \\#C,j}}}}\\\\&\\\\\\text{s.t.}&\\\\&\\begin{aligned}\n",
"\\text{one city}&\\quad \\displaystyle \\sum _{i\\in C}{{x}_{t,i}}=1\\quad \\forall t\\;\\text{s.t.}\\;t\\in \\left\\{0,\\ldots ,\\#C-1\\right\\}\\\\\\text{one time}&\\quad \\displaystyle \\sum _{t=0}^{\\#C-1}{{x}_{t,i}}=1\\quad \\forall i\\;\\text{s.t.}\\;i\\in C\\end{aligned}\n",
- "\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\#C\\times C;\\left\\{0, 1\\right\\}\\right]&\\quad &\\text{a dictionary of }\\text{binary}\\text{ variables with key }\\#C\\times C\\\\&&&\\text{$x_{t,i} = 1$ if City $i$ is visited at time $t$}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}d&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathrm{C}\\times \\mathrm{C};\\mathbb{R}\\right]&\\quad &\\text{A total dictionary of placeholders with keys }\\left(\\mathrm{C},\\mathrm{C}\\right)\\text{, values in }\\mathbb{R}\\\\&&&\\text{distance between cities}\\\\\\end{alignedat}\\\\&\\\\&\\text{Category Labels:}\\\\&\\qquad \\begin{array}{rl}\n",
+ "\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in \\left\\{0,\\ldots ,\\#C-1\\right\\},j\\in C\\right\\};\\left\\{0, 1\\right\\}\\right]&\\quad &\\text{a dictionary of }\\text{binary}\\text{ variables with key }\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in \\left\\{0,\\ldots ,\\#C-1\\right\\},j\\in C\\right\\}\\\\&&&\\text{$x_{t,i} = 1$ if City $i$ is visited at time $t$}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}d&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathrm{C}\\times \\mathrm{C};\\mathbb{R}\\right]&\\quad &\\text{A total dictionary of placeholders with keys }\\left(\\mathrm{C},\\mathrm{C}\\right)\\text{, values in }\\mathbb{R}\\\\&&&\\text{distance between cities}\\\\\\end{alignedat}\\\\&\\\\&\\text{Category Labels:}\\\\&\\qquad \\begin{array}{rl}\n",
"C&\\text{Labels of Cities}\\end{array}\n",
"\\end{array}\n",
"$$"
],
"text/plain": [
- "Problem(name=\"TSP, Decorated\", sense=MINIMIZE, objective=sum(set((C.count(), C, C)).map(lambda ((t, i, j): Tuple[natural, CategoryLabel(\"C\"), CategoryLabel(\"C\")]): d[i, j] * x[t, i] * x[(t + 1) % C.count(), j])), constraints={one city: [Constraint(name=\"one city\", , lambda t: sum(C.map(lambda (i: CategoryLabel(\"C\")): x[t, i])) == 1, domain=set(C.count())),],one time: [Constraint(name=\"one time\", , lambda i: sum(C.count().map(lambda (t: natural): x[t, i])) == 1, domain=C),],})"
+ "Problem(name=\"TSP, Decorated\", sense=MINIMIZE, objective=sum(set(set((C.count(), C, C))).map(lambda ((t, i, j): Tuple[natural, CategoryLabel(\"C\"), CategoryLabel(\"C\")]): d[i, j] * x[t, i] * x[(t + 1) % C.count(), j])), constraints={one city: [Constraint(name=\"one city\", , lambda t: sum(set(C).map(lambda (i: CategoryLabel(\"C\")): x[t, i])) == 1, domain=set(C.count())),],one time: [Constraint(name=\"one time\", , lambda i: sum(set(C.count()).map(lambda (t: natural): x[t, i])) == 1, domain=C),],})"
]
},
- "execution_count": 7,
+ "execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
@@ -463,14 +508,14 @@
},
{
"cell_type": "code",
- "execution_count": 8,
+ "execution_count": 9,
"id": "563e6dfe",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:23.243100Z",
- "iopub.status.busy": "2026-03-24T02:04:23.242948Z",
- "iopub.status.idle": "2026-03-24T02:04:23.759638Z",
- "shell.execute_reply": "2026-03-24T02:04:23.758654Z"
+ "iopub.execute_input": "2026-06-04T02:49:29.285402Z",
+ "iopub.status.busy": "2026-06-04T02:49:29.285345Z",
+ "iopub.status.idle": "2026-06-04T02:49:29.682781Z",
+ "shell.execute_reply": "2026-06-04T02:49:29.682480Z"
}
},
"outputs": [
@@ -479,15 +524,15 @@
"text/latex": [
"$$\\begin{array}{rl}\n",
"\\text{Problem}\\colon &\\text{TSP, Decorated}\\\\\\displaystyle \\min &\\displaystyle \\sum _{t=0}^{N-1}{\\sum _{i=0}^{N-1}{\\sum _{j=0}^{N-1}{{d}_{i,j}\\cdot {x}_{t,i}\\cdot {x}_{\\left(t+1\\right)\\bmod N,j}}}}\\\\&\\\\\\text{s.t.}&\\\\&\\begin{aligned}\n",
- "\\text{one city}&\\quad \\displaystyle x.\\mathop{\\mathtt{sum}}\\left(\\mathtt{axis}=\\left[1\\right]\\right)=1\\\\\\text{one time}&\\quad \\displaystyle x.\\mathop{\\mathtt{sum}}\\left(\\mathtt{axis}=\\left[0\\right]\\right)=1\\end{aligned}\n",
+ "\\text{one city}&\\quad \\displaystyle {x.\\mathop{\\mathtt{sum}}\\left(\\mathtt{axis}=\\left[1\\right]\\right)}_{i}=1\\quad \\forall i\\;\\text{s.t.}\\;i\\in \\left\\{0,\\ldots ,N-1\\right\\}\\\\\\text{one time}&\\quad \\displaystyle {x.\\mathop{\\mathtt{sum}}\\left(\\mathtt{axis}=\\left[0\\right]\\right)}_{i}=1\\quad \\forall i\\;\\text{s.t.}\\;i\\in \\left\\{0,\\ldots ,N-1\\right\\}\\end{aligned}\n",
"\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{Array}}\\left[N\\times N;\\left\\{0, 1\\right\\}\\right]&\\quad &2\\text{-dim binary variable}\\\\&&&\\text{$x_{t,i} = 1$ if City $i$ is visited at time $t$}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}d&\\in \\mathop{\\mathrm{Array}}\\left[N\\times N;\\mathbb{R}\\right]&\\quad &2\\text{-dimensional array of placeholders with elements in }\\mathbb{R}\\\\&&&\\text{distance between cities}\\\\&&&\\\\N&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\&&&\\text{Number of cities}\\\\\\end{alignedat}\\end{array}\n",
"$$"
],
"text/plain": [
- "Problem(name=\"TSP, Decorated\", sense=MINIMIZE, objective=sum(N.flat_map(lambda (t: natural): N.map(lambda (i: natural): (t, i))).flat_map(lambda ((t, i): Tuple[natural, natural]): N.map(lambda (j: natural): (t, i, j))).map(lambda ((t, i, j): Tuple[natural, natural, natural]): d[i, j] * x[t, i] * x[(t + 1) % N, j])), constraints={one city: [Constraint(name=\"one city\", sense=EQUAL, left=x.sum(1), right=1, shape=TensorLikeVsScalar { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: Some(SetStyle { element: None, kind: Natural }), subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44964/1513282866.py\", start: SrcLoc { line: 4, column: 8 }, end: SrcLoc { line: 6, column: 5 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44964/1513282866.py\", start: SrcLoc { line: 4, column: 8 }, end: SrcLoc { line: 6, column: 5 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Binary }, src_span: NoSrcSpan } }), scalar: Binary }),],one time: [Constraint(name=\"one time\", sense=EQUAL, left=x.sum(0), right=1, shape=TensorLikeVsScalar { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: Some(SetStyle { element: None, kind: Natural }), subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44964/1513282866.py\", start: SrcLoc { line: 4, column: 8 }, end: SrcLoc { line: 6, column: 5 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44964/1513282866.py\", start: SrcLoc { line: 4, column: 8 }, end: SrcLoc { line: 6, column: 5 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Binary }, src_span: NoSrcSpan } }), scalar: Binary }),],})"
+ "Problem(name=\"TSP, Decorated\", sense=MINIMIZE, objective=sum(set(N.flat_map(lambda (t: natural): N.map(lambda (i: natural): (t, i))).flat_map(lambda ((t, i): Tuple[natural, natural]): N.map(lambda (j: natural): (t, i, j)))).map(lambda ((t, i, j): Tuple[natural, natural, natural]): d[i, j] * x[t, i] * x[(t + 1) % N, j])), constraints={one city: [Constraint(name=\"one city\", sense=EQUAL, left=x.sum(1), right=1, shape=TensorLikeVsScalar { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: Some(SetStyle { element: None, kind: Natural }), subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_2660/1513282866.py\", start: SrcLoc { line: 4, column: 8 }, end: SrcLoc { line: 6, column: 5 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_2660/1513282866.py\", start: SrcLoc { line: 4, column: 8 }, end: SrcLoc { line: 6, column: 5 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Natural }, src_span: NoSrcSpan } }), scalar: Natural }),],one time: [Constraint(name=\"one time\", sense=EQUAL, left=x.sum(0), right=1, shape=TensorLikeVsScalar { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: Some(SetStyle { element: None, kind: Natural }), subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_2660/1513282866.py\", start: SrcLoc { line: 4, column: 8 }, end: SrcLoc { line: 6, column: 5 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_2660/1513282866.py\", start: SrcLoc { line: 4, column: 8 }, end: SrcLoc { line: 6, column: 5 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Natural }, src_span: NoSrcSpan } }), scalar: Natural }),],})"
]
},
- "execution_count": 8,
+ "execution_count": 9,
"metadata": {},
"output_type": "execute_result"
}
@@ -525,27 +570,27 @@
},
{
"cell_type": "code",
- "execution_count": 9,
+ "execution_count": 10,
"id": "464f8394",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:23.761621Z",
- "iopub.status.busy": "2026-03-24T02:04:23.761508Z",
- "iopub.status.idle": "2026-03-24T02:04:23.784763Z",
- "shell.execute_reply": "2026-03-24T02:04:23.783190Z"
+ "iopub.execute_input": "2026-06-04T02:49:29.684022Z",
+ "iopub.status.busy": "2026-06-04T02:49:29.683969Z",
+ "iopub.status.idle": "2026-06-04T02:49:29.705009Z",
+ "shell.execute_reply": "2026-06-04T02:49:29.704655Z"
}
},
"outputs": [
{
"data": {
"text/latex": [
- "$$\\mathop{\\mathrm{Array}}\\left[N;\\left\\{0, 1\\right\\}\\right]$$"
+ "$$\\mathop{\\mathrm{Array}}\\left[N;\\mathbb{N}\\right]$$"
],
"text/plain": [
- "Array[N; binary!]"
+ "Array[N; natural!]"
]
},
- "execution_count": 9,
+ "execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
@@ -576,14 +621,14 @@
},
{
"cell_type": "code",
- "execution_count": 10,
+ "execution_count": 11,
"id": "2a324e3f",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:23.786767Z",
- "iopub.status.busy": "2026-03-24T02:04:23.786691Z",
- "iopub.status.idle": "2026-03-24T02:04:24.101294Z",
- "shell.execute_reply": "2026-03-24T02:04:24.100547Z"
+ "iopub.execute_input": "2026-06-04T02:49:29.705977Z",
+ "iopub.status.busy": "2026-06-04T02:49:29.705927Z",
+ "iopub.status.idle": "2026-06-04T02:49:29.983968Z",
+ "shell.execute_reply": "2026-06-04T02:49:29.983624Z"
}
},
"outputs": [
@@ -600,7 +645,7 @@
"Problem(name=\"Possibly Overlapping Constraints\", sense=MINIMIZE, objective=0, constraints={constr: [Constraint(name=\"constr\", , lambda i: x[i] >= 1, domain=set(N)),Constraint(name=\"constr\", , lambda i: x[i] <= 2, domain=set(M)),],})"
]
},
- "execution_count": 10,
+ "execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
@@ -629,14 +674,14 @@
},
{
"cell_type": "code",
- "execution_count": 11,
+ "execution_count": 12,
"id": "6fad67a9",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:24.102725Z",
- "iopub.status.busy": "2026-03-24T02:04:24.102644Z",
- "iopub.status.idle": "2026-03-24T02:04:26.951388Z",
- "shell.execute_reply": "2026-03-24T02:04:26.950336Z"
+ "iopub.execute_input": "2026-06-04T02:49:29.985053Z",
+ "iopub.status.busy": "2026-06-04T02:49:29.984999Z",
+ "iopub.status.idle": "2026-06-04T02:49:30.337633Z",
+ "shell.execute_reply": "2026-06-04T02:49:30.337285Z"
}
},
"outputs": [
@@ -748,7 +793,7 @@
"5 <=0 Linear {5} constr [5] "
]
},
- "execution_count": 11,
+ "execution_count": 12,
"metadata": {},
"output_type": "execute_result"
}
@@ -772,14 +817,14 @@
},
{
"cell_type": "code",
- "execution_count": 12,
+ "execution_count": 13,
"id": "6d36675b",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:26.956946Z",
- "iopub.status.busy": "2026-03-24T02:04:26.956617Z",
- "iopub.status.idle": "2026-03-24T02:04:27.008328Z",
- "shell.execute_reply": "2026-03-24T02:04:27.006957Z"
+ "iopub.execute_input": "2026-06-04T02:49:30.338684Z",
+ "iopub.status.busy": "2026-06-04T02:49:30.338602Z",
+ "iopub.status.idle": "2026-06-04T02:49:30.365276Z",
+ "shell.execute_reply": "2026-06-04T02:49:30.364933Z"
}
},
"outputs": [
@@ -789,9 +834,9 @@
"text": [
"Traceback (most recent last):\n",
" while evaluating problem `Problem(name=\"Possibly Overlapping Constraints\", sense=MINIMIZE, objective=0, constraints={constr: [Constraint(name=\"constr\", , lambda i: x[i] >= 1, domain=set(N)),Constraint(name=\"constr\", , lambda i: x[i] <= 2, domain=set(M)),],})',\n",
- " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44964/316836703.py\", line 1, col 2-55\n",
+ " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_2660/316836703.py\", line 1, col 2-55\n",
"\n",
- "File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44964/316836703.py\", line 1, col 2-55:\n",
+ "File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_2660/316836703.py\", line 1, col 2-55:\n",
"\n",
" 1 | @jm.Problem.define(\"Possibly Overlapping Constraints\")\n",
" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
@@ -819,14 +864,14 @@
},
{
"cell_type": "code",
- "execution_count": 13,
+ "execution_count": 14,
"id": "0fc6cb95",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:27.014057Z",
- "iopub.status.busy": "2026-03-24T02:04:27.013741Z",
- "iopub.status.idle": "2026-03-24T02:04:27.106031Z",
- "shell.execute_reply": "2026-03-24T02:04:27.104721Z"
+ "iopub.execute_input": "2026-06-04T02:49:30.366220Z",
+ "iopub.status.busy": "2026-06-04T02:49:30.366174Z",
+ "iopub.status.idle": "2026-06-04T02:49:30.443069Z",
+ "shell.execute_reply": "2026-06-04T02:49:30.442678Z"
}
},
"outputs": [
@@ -836,18 +881,18 @@
"text": [
"Traceback (most recent last):\n",
" while adding constraint 'constr',\n",
- " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44964/2812696639.py\", line 7, col 9-56\n",
+ " defined at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_2660/2812696639.py\", line 7, col 9-56\n",
"\n",
- "File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44964/2812696639.py\", line 7, col 9-56:\n",
+ "File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_2660/2812696639.py\", line 7, col 9-56:\n",
"\n",
" 7 | problem += problem.Constraint(\"constr\", x <= 2)\n",
" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
"\n",
"Constraint 'constr' has conflicting definition!\n",
" existing: Constraint(name=\"constr\", sense=GREATER_THAN_EQUAL, left=x, right=1, shape=Scalar(Integer))\n",
- " defined at: File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44964/2812696639.py\", line 6, col 20-56\n",
+ " defined at: File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_2660/2812696639.py\", line 6, col 20-56\n",
" new: Constraint(name=\"constr\", sense=LESS_THAN_EQUAL, left=x, right=2, shape=Scalar(Integer))\n",
- " defined at: File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44964/2812696639.py\", line 7, col 20-56\n"
+ " defined at: File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_2660/2812696639.py\", line 7, col 20-56\n"
]
}
],
@@ -891,7 +936,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.11"
+ "version": "3.11.14"
}
},
"nbformat": 4,
diff --git a/docs/ja/basics/overview.ipynb b/docs/ja/basics/overview.ipynb
index 7ee2fb16..c6eae46a 100644
--- a/docs/ja/basics/overview.ipynb
+++ b/docs/ja/basics/overview.ipynb
@@ -46,7 +46,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.11"
+ "version": "3.11.14"
}
},
"nbformat": 4,
diff --git a/docs/ja/basics/problem.ipynb b/docs/ja/basics/problem.ipynb
index b087dc9b..964f1532 100644
--- a/docs/ja/basics/problem.ipynb
+++ b/docs/ja/basics/problem.ipynb
@@ -22,10 +22,10 @@
"id": "165d3368",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:39.481235Z",
- "iopub.status.busy": "2026-03-24T02:04:39.481151Z",
- "iopub.status.idle": "2026-03-24T02:04:39.486579Z",
- "shell.execute_reply": "2026-03-24T02:04:39.486251Z"
+ "iopub.execute_input": "2026-06-04T02:49:37.877181Z",
+ "iopub.status.busy": "2026-06-04T02:49:37.877001Z",
+ "iopub.status.idle": "2026-06-04T02:49:37.888798Z",
+ "shell.execute_reply": "2026-06-04T02:49:37.886233Z"
}
},
"outputs": [],
@@ -50,10 +50,10 @@
"id": "10c85d99",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:39.487662Z",
- "iopub.status.busy": "2026-03-24T02:04:39.487606Z",
- "iopub.status.idle": "2026-03-24T02:04:39.516261Z",
- "shell.execute_reply": "2026-03-24T02:04:39.515799Z"
+ "iopub.execute_input": "2026-06-04T02:49:37.891611Z",
+ "iopub.status.busy": "2026-06-04T02:49:37.891419Z",
+ "iopub.status.idle": "2026-06-04T02:49:37.934037Z",
+ "shell.execute_reply": "2026-06-04T02:49:37.933616Z"
}
},
"outputs": [],
@@ -82,10 +82,10 @@
"id": "a04e9459",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:39.517575Z",
- "iopub.status.busy": "2026-03-24T02:04:39.517510Z",
- "iopub.status.idle": "2026-03-24T02:04:39.536172Z",
- "shell.execute_reply": "2026-03-24T02:04:39.535834Z"
+ "iopub.execute_input": "2026-06-04T02:49:37.935734Z",
+ "iopub.status.busy": "2026-06-04T02:49:37.935661Z",
+ "iopub.status.idle": "2026-06-04T02:49:37.960094Z",
+ "shell.execute_reply": "2026-06-04T02:49:37.959739Z"
}
},
"outputs": [
@@ -127,10 +127,10 @@
"id": "797e7f58",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:39.537333Z",
- "iopub.status.busy": "2026-03-24T02:04:39.537273Z",
- "iopub.status.idle": "2026-03-24T02:04:39.557293Z",
- "shell.execute_reply": "2026-03-24T02:04:39.556897Z"
+ "iopub.execute_input": "2026-06-04T02:49:37.961712Z",
+ "iopub.status.busy": "2026-06-04T02:49:37.961567Z",
+ "iopub.status.idle": "2026-06-04T02:49:37.991128Z",
+ "shell.execute_reply": "2026-06-04T02:49:37.990592Z"
}
},
"outputs": [
@@ -194,10 +194,10 @@
"id": "ca78cfdb",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:39.558405Z",
- "iopub.status.busy": "2026-03-24T02:04:39.558346Z",
- "iopub.status.idle": "2026-03-24T02:04:39.560278Z",
- "shell.execute_reply": "2026-03-24T02:04:39.559963Z"
+ "iopub.execute_input": "2026-06-04T02:49:37.992437Z",
+ "iopub.status.busy": "2026-06-04T02:49:37.992361Z",
+ "iopub.status.idle": "2026-06-04T02:49:38.000920Z",
+ "shell.execute_reply": "2026-06-04T02:49:37.994941Z"
}
},
"outputs": [
@@ -234,10 +234,10 @@
"id": "168be19a",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:39.561288Z",
- "iopub.status.busy": "2026-03-24T02:04:39.561235Z",
- "iopub.status.idle": "2026-03-24T02:04:39.587958Z",
- "shell.execute_reply": "2026-03-24T02:04:39.587593Z"
+ "iopub.execute_input": "2026-06-04T02:49:38.004299Z",
+ "iopub.status.busy": "2026-06-04T02:49:38.003997Z",
+ "iopub.status.idle": "2026-06-04T02:49:38.058205Z",
+ "shell.execute_reply": "2026-06-04T02:49:38.057733Z"
}
},
"outputs": [
@@ -280,10 +280,10 @@
"id": "ee0af68e",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:39.589019Z",
- "iopub.status.busy": "2026-03-24T02:04:39.588961Z",
- "iopub.status.idle": "2026-03-24T02:04:39.614115Z",
- "shell.execute_reply": "2026-03-24T02:04:39.613797Z"
+ "iopub.execute_input": "2026-06-04T02:49:38.059826Z",
+ "iopub.status.busy": "2026-06-04T02:49:38.059678Z",
+ "iopub.status.idle": "2026-06-04T02:49:38.108375Z",
+ "shell.execute_reply": "2026-06-04T02:49:38.107993Z"
}
},
"outputs": [
@@ -355,7 +355,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.11"
+ "version": "3.11.14"
}
},
"nbformat": 4,
diff --git a/docs/ja/basics/variables.ipynb b/docs/ja/basics/variables.ipynb
index d3d162c8..4f7315d4 100644
--- a/docs/ja/basics/variables.ipynb
+++ b/docs/ja/basics/variables.ipynb
@@ -17,10 +17,10 @@
"id": "e89bdd5d",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:09.993119Z",
- "iopub.status.busy": "2026-04-06T08:34:09.993046Z",
- "iopub.status.idle": "2026-04-06T08:34:09.998434Z",
- "shell.execute_reply": "2026-04-06T08:34:09.998003Z"
+ "iopub.execute_input": "2026-06-04T02:49:35.641716Z",
+ "iopub.status.busy": "2026-06-04T02:49:35.641586Z",
+ "iopub.status.idle": "2026-06-04T02:49:35.649045Z",
+ "shell.execute_reply": "2026-06-04T02:49:35.648747Z"
}
},
"outputs": [],
@@ -89,10 +89,10 @@
"id": "86f46b5b",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:09.999579Z",
- "iopub.status.busy": "2026-04-06T08:34:09.999517Z",
- "iopub.status.idle": "2026-04-06T08:34:10.133620Z",
- "shell.execute_reply": "2026-04-06T08:34:10.133214Z"
+ "iopub.execute_input": "2026-06-04T02:49:35.650332Z",
+ "iopub.status.busy": "2026-06-04T02:49:35.650274Z",
+ "iopub.status.idle": "2026-06-04T02:49:35.738977Z",
+ "shell.execute_reply": "2026-06-04T02:49:35.738535Z"
}
},
"outputs": [
@@ -150,10 +150,10 @@
"id": "de5af628",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:10.134906Z",
- "iopub.status.busy": "2026-04-06T08:34:10.134832Z",
- "iopub.status.idle": "2026-04-06T08:34:10.197613Z",
- "shell.execute_reply": "2026-04-06T08:34:10.197310Z"
+ "iopub.execute_input": "2026-06-04T02:49:35.740183Z",
+ "iopub.status.busy": "2026-06-04T02:49:35.740121Z",
+ "iopub.status.idle": "2026-06-04T02:49:35.807332Z",
+ "shell.execute_reply": "2026-06-04T02:49:35.806932Z"
}
},
"outputs": [
@@ -242,10 +242,10 @@
"id": "150009c4",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:10.198875Z",
- "iopub.status.busy": "2026-04-06T08:34:10.198814Z",
- "iopub.status.idle": "2026-04-06T08:34:10.293965Z",
- "shell.execute_reply": "2026-04-06T08:34:10.293618Z"
+ "iopub.execute_input": "2026-06-04T02:49:35.808378Z",
+ "iopub.status.busy": "2026-06-04T02:49:35.808322Z",
+ "iopub.status.idle": "2026-06-04T02:49:35.870920Z",
+ "shell.execute_reply": "2026-06-04T02:49:35.870544Z"
}
},
"outputs": [
@@ -287,10 +287,10 @@
"id": "076c2f07",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:10.295227Z",
- "iopub.status.busy": "2026-04-06T08:34:10.295151Z",
- "iopub.status.idle": "2026-04-06T08:34:10.357962Z",
- "shell.execute_reply": "2026-04-06T08:34:10.357507Z"
+ "iopub.execute_input": "2026-06-04T02:49:35.872029Z",
+ "iopub.status.busy": "2026-06-04T02:49:35.871970Z",
+ "iopub.status.idle": "2026-06-04T02:49:35.937162Z",
+ "shell.execute_reply": "2026-06-04T02:49:35.936876Z"
}
},
"outputs": [
@@ -347,10 +347,10 @@
"id": "243ddb11",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:10.359094Z",
- "iopub.status.busy": "2026-04-06T08:34:10.359010Z",
- "iopub.status.idle": "2026-04-06T08:34:10.361043Z",
- "shell.execute_reply": "2026-04-06T08:34:10.360635Z"
+ "iopub.execute_input": "2026-06-04T02:49:35.938325Z",
+ "iopub.status.busy": "2026-06-04T02:49:35.938270Z",
+ "iopub.status.idle": "2026-06-04T02:49:35.940048Z",
+ "shell.execute_reply": "2026-06-04T02:49:35.939809Z"
}
},
"outputs": [
@@ -375,10 +375,10 @@
"id": "f3fb46c2",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:10.361973Z",
- "iopub.status.busy": "2026-04-06T08:34:10.361884Z",
- "iopub.status.idle": "2026-04-06T08:34:10.364038Z",
- "shell.execute_reply": "2026-04-06T08:34:10.363644Z"
+ "iopub.execute_input": "2026-06-04T02:49:35.940874Z",
+ "iopub.status.busy": "2026-06-04T02:49:35.940830Z",
+ "iopub.status.idle": "2026-06-04T02:49:35.942469Z",
+ "shell.execute_reply": "2026-06-04T02:49:35.942162Z"
}
},
"outputs": [
@@ -495,10 +495,10 @@
"id": "4fd8cbae",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:10.366194Z",
- "iopub.status.busy": "2026-04-06T08:34:10.365976Z",
- "iopub.status.idle": "2026-04-06T08:34:10.442843Z",
- "shell.execute_reply": "2026-04-06T08:34:10.442376Z"
+ "iopub.execute_input": "2026-06-04T02:49:35.943322Z",
+ "iopub.status.busy": "2026-06-04T02:49:35.943272Z",
+ "iopub.status.idle": "2026-06-04T02:49:35.984358Z",
+ "shell.execute_reply": "2026-06-04T02:49:35.984031Z"
}
},
"outputs": [
@@ -552,10 +552,10 @@
"id": "472b0803",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:10.443939Z",
- "iopub.status.busy": "2026-04-06T08:34:10.443868Z",
- "iopub.status.idle": "2026-04-06T08:34:10.490118Z",
- "shell.execute_reply": "2026-04-06T08:34:10.489617Z"
+ "iopub.execute_input": "2026-06-04T02:49:35.985412Z",
+ "iopub.status.busy": "2026-06-04T02:49:35.985361Z",
+ "iopub.status.idle": "2026-06-04T02:49:36.037107Z",
+ "shell.execute_reply": "2026-06-04T02:49:36.036763Z"
}
},
"outputs": [
@@ -653,10 +653,10 @@
"id": "1c058d80",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:10.491180Z",
- "iopub.status.busy": "2026-04-06T08:34:10.491120Z",
- "iopub.status.idle": "2026-04-06T08:34:10.567887Z",
- "shell.execute_reply": "2026-04-06T08:34:10.567546Z"
+ "iopub.execute_input": "2026-06-04T02:49:36.038177Z",
+ "iopub.status.busy": "2026-06-04T02:49:36.038126Z",
+ "iopub.status.idle": "2026-06-04T02:49:36.093224Z",
+ "shell.execute_reply": "2026-06-04T02:49:36.092859Z"
}
},
"outputs": [
@@ -712,10 +712,10 @@
"id": "c45d2550",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:10.568936Z",
- "iopub.status.busy": "2026-04-06T08:34:10.568883Z",
- "iopub.status.idle": "2026-04-06T08:34:10.626649Z",
- "shell.execute_reply": "2026-04-06T08:34:10.626178Z"
+ "iopub.execute_input": "2026-06-04T02:49:36.094300Z",
+ "iopub.status.busy": "2026-06-04T02:49:36.094247Z",
+ "iopub.status.idle": "2026-06-04T02:49:36.150986Z",
+ "shell.execute_reply": "2026-06-04T02:49:36.150671Z"
}
},
"outputs": [
@@ -771,10 +771,10 @@
"id": "e456d0b6",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:10.627746Z",
- "iopub.status.busy": "2026-04-06T08:34:10.627677Z",
- "iopub.status.idle": "2026-04-06T08:34:10.674813Z",
- "shell.execute_reply": "2026-04-06T08:34:10.674421Z"
+ "iopub.execute_input": "2026-06-04T02:49:36.152154Z",
+ "iopub.status.busy": "2026-06-04T02:49:36.152100Z",
+ "iopub.status.idle": "2026-06-04T02:49:36.203361Z",
+ "shell.execute_reply": "2026-06-04T02:49:36.203078Z"
}
},
"outputs": [
@@ -831,10 +831,10 @@
"id": "b1c1fef6",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:10.675970Z",
- "iopub.status.busy": "2026-04-06T08:34:10.675914Z",
- "iopub.status.idle": "2026-04-06T08:34:10.842981Z",
- "shell.execute_reply": "2026-04-06T08:34:10.842445Z"
+ "iopub.execute_input": "2026-06-04T02:49:36.204520Z",
+ "iopub.status.busy": "2026-06-04T02:49:36.204462Z",
+ "iopub.status.idle": "2026-06-04T02:49:36.428845Z",
+ "shell.execute_reply": "2026-06-04T02:49:36.428521Z"
}
},
"outputs": [
@@ -846,7 +846,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"Partially determined shape\", sense=MINIMIZE, objective=sum(a.len_at(0).flat_map(lambda (i: natural): c.len_at(1).map(lambda (j: natural): (i, j))).map(lambda ((i, j): Tuple[natural, natural]): a[i] * c[i, j] * x[i, j])), constraints=[])"
+ "Problem(name=\"Partially determined shape\", sense=MINIMIZE, objective=sum(set(a.len_at(0).flat_map(lambda (i: natural): c.len_at(1).map(lambda (j: natural): (i, j)))).map(lambda ((i, j): Tuple[natural, natural]): a[i] * c[i, j] * x[i, j])), constraints=[])"
]
},
"execution_count": 13,
@@ -962,10 +962,10 @@
"id": "687f3eb0",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:10.844855Z",
- "iopub.status.busy": "2026-04-06T08:34:10.844737Z",
- "iopub.status.idle": "2026-04-06T08:34:10.905863Z",
- "shell.execute_reply": "2026-04-06T08:34:10.905483Z"
+ "iopub.execute_input": "2026-06-04T02:49:36.431482Z",
+ "iopub.status.busy": "2026-06-04T02:49:36.431384Z",
+ "iopub.status.idle": "2026-06-04T02:49:36.453497Z",
+ "shell.execute_reply": "2026-06-04T02:49:36.453139Z"
}
},
"outputs": [
@@ -1009,10 +1009,10 @@
"id": "bd19e62f",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:10.907050Z",
- "iopub.status.busy": "2026-04-06T08:34:10.906987Z",
- "iopub.status.idle": "2026-04-06T08:34:10.929814Z",
- "shell.execute_reply": "2026-04-06T08:34:10.929401Z"
+ "iopub.execute_input": "2026-06-04T02:49:36.454704Z",
+ "iopub.status.busy": "2026-06-04T02:49:36.454643Z",
+ "iopub.status.idle": "2026-06-04T02:49:36.477846Z",
+ "shell.execute_reply": "2026-06-04T02:49:36.477396Z"
}
},
"outputs": [
@@ -1077,10 +1077,10 @@
"id": "ef6bbbbb",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:10.930938Z",
- "iopub.status.busy": "2026-04-06T08:34:10.930878Z",
- "iopub.status.idle": "2026-04-06T08:34:10.980611Z",
- "shell.execute_reply": "2026-04-06T08:34:10.980184Z"
+ "iopub.execute_input": "2026-06-04T02:49:36.479035Z",
+ "iopub.status.busy": "2026-06-04T02:49:36.478975Z",
+ "iopub.status.idle": "2026-06-04T02:49:36.623080Z",
+ "shell.execute_reply": "2026-06-04T02:49:36.622595Z"
}
},
"outputs": [
@@ -1088,7 +1088,7 @@
"data": {
"text/latex": [
"$$\\begin{array}{rl}\n",
- "\\text{Problem}\\colon &\\text{Dec Var Keys demonstration}\\\\\\displaystyle \\min &\\displaystyle 0\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{TotalDict}}\\left[L\\times N;\\left\\{0, 1\\right\\}\\right]&\\quad &\\text{a dictionary of }\\text{binary}\\text{ variables with key }L\\times N\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}N&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\\\end{alignedat}\\\\&\\\\&\\text{Category Labels:}\\\\&\\qquad \\begin{array}{rl}\n",
+ "\\text{Problem}\\colon &\\text{Dec Var Keys demonstration}\\\\\\displaystyle \\min &\\displaystyle 0\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in L,j\\in \\left\\{0,\\ldots ,N-1\\right\\}\\right\\};\\left\\{0, 1\\right\\}\\right]&\\quad &\\text{a dictionary of }\\text{binary}\\text{ variables with key }\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in L,j\\in \\left\\{0,\\ldots ,N-1\\right\\}\\right\\}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}N&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\\\end{alignedat}\\\\&\\\\&\\text{Category Labels:}\\\\&\\qquad \\begin{array}{rl}\n",
"L&\\text{Category Label}\\end{array}\n",
"\\end{array}\n",
"$$"
@@ -1165,10 +1165,10 @@
"id": "c79c1ab2",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:10.981958Z",
- "iopub.status.busy": "2026-04-06T08:34:10.981873Z",
- "iopub.status.idle": "2026-04-06T08:34:11.097960Z",
- "shell.execute_reply": "2026-04-06T08:34:11.095711Z"
+ "iopub.execute_input": "2026-06-04T02:49:36.624065Z",
+ "iopub.status.busy": "2026-06-04T02:49:36.624008Z",
+ "iopub.status.idle": "2026-06-04T02:49:36.697047Z",
+ "shell.execute_reply": "2026-06-04T02:49:36.696736Z"
}
},
"outputs": [
@@ -1222,10 +1222,10 @@
"id": "9ff00f79",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-04-06T08:34:11.099447Z",
- "iopub.status.busy": "2026-04-06T08:34:11.099343Z",
- "iopub.status.idle": "2026-04-06T08:34:11.151088Z",
- "shell.execute_reply": "2026-04-06T08:34:11.150637Z"
+ "iopub.execute_input": "2026-06-04T02:49:36.698338Z",
+ "iopub.status.busy": "2026-06-04T02:49:36.698258Z",
+ "iopub.status.idle": "2026-06-04T02:49:36.752096Z",
+ "shell.execute_reply": "2026-06-04T02:49:36.751764Z"
}
},
"outputs": [
diff --git a/docs/ja/introduction.ipynb b/docs/ja/introduction.ipynb
index f9d3296d..b7b94789 100644
--- a/docs/ja/introduction.ipynb
+++ b/docs/ja/introduction.ipynb
@@ -71,10 +71,10 @@
"id": "74189d5c",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:15.205105Z",
- "iopub.status.busy": "2026-03-24T02:04:15.205042Z",
- "iopub.status.idle": "2026-03-24T02:04:16.572981Z",
- "shell.execute_reply": "2026-03-24T02:04:16.572590Z"
+ "iopub.execute_input": "2026-06-04T02:49:21.391242Z",
+ "iopub.status.busy": "2026-06-04T02:49:21.391112Z",
+ "iopub.status.idle": "2026-06-04T02:49:21.714160Z",
+ "shell.execute_reply": "2026-06-04T02:49:21.713753Z"
}
},
"outputs": [
@@ -88,7 +88,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"Knapsack Problem\", sense=MAXIMIZE, objective=sum(N.map(lambda (i: natural): v[i] * x[i])), constraints={weight: [Constraint(name=\"weight\", sense=LESS_THAN_EQUAL, left=sum(N.map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Float), description=\"重さの総和が耐荷重を越えない\"),],})"
+ "Problem(name=\"Knapsack Problem\", sense=MAXIMIZE, objective=sum(set(N).map(lambda (i: natural): v[i] * x[i])), constraints={weight: [Constraint(name=\"weight\", sense=LESS_THAN_EQUAL, left=sum(set(N).map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Float), description=\"重さの総和が耐荷重を越えない\"),],})"
]
},
"execution_count": 1,
@@ -144,10 +144,10 @@
"id": "9eba20ff",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:16.574176Z",
- "iopub.status.busy": "2026-03-24T02:04:16.574107Z",
- "iopub.status.idle": "2026-03-24T02:04:16.605709Z",
- "shell.execute_reply": "2026-03-24T02:04:16.605332Z"
+ "iopub.execute_input": "2026-06-04T02:49:21.715379Z",
+ "iopub.status.busy": "2026-06-04T02:49:21.715322Z",
+ "iopub.status.idle": "2026-06-04T02:49:21.769996Z",
+ "shell.execute_reply": "2026-06-04T02:49:21.769601Z"
}
},
"outputs": [],
@@ -172,10 +172,10 @@
"id": "f3a2b9c7",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:16.606904Z",
- "iopub.status.busy": "2026-03-24T02:04:16.606845Z",
- "iopub.status.idle": "2026-03-24T02:04:16.646075Z",
- "shell.execute_reply": "2026-03-24T02:04:16.645787Z"
+ "iopub.execute_input": "2026-06-04T02:49:21.771259Z",
+ "iopub.status.busy": "2026-06-04T02:49:21.771207Z",
+ "iopub.status.idle": "2026-06-04T02:49:21.847282Z",
+ "shell.execute_reply": "2026-06-04T02:49:21.846870Z"
}
},
"outputs": [],
@@ -217,17 +217,17 @@
"id": "94580011",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:16.647281Z",
- "iopub.status.busy": "2026-03-24T02:04:16.647225Z",
- "iopub.status.idle": "2026-03-24T02:04:16.649129Z",
- "shell.execute_reply": "2026-03-24T02:04:16.648825Z"
+ "iopub.execute_input": "2026-06-04T02:49:21.848402Z",
+ "iopub.status.busy": "2026-06-04T02:49:21.848348Z",
+ "iopub.status.idle": "2026-06-04T02:49:21.850188Z",
+ "shell.execute_reply": "2026-06-04T02:49:21.849864Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
- "'2.3.1'"
+ "'2.5.0'"
]
},
"execution_count": 4,
@@ -287,7 +287,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.11"
+ "version": "3.11.14"
}
},
"nbformat": 4,
diff --git a/docs/ja/quickstart/openjij.ipynb b/docs/ja/quickstart/openjij.ipynb
index aee9b398..62277903 100644
--- a/docs/ja/quickstart/openjij.ipynb
+++ b/docs/ja/quickstart/openjij.ipynb
@@ -94,10 +94,10 @@
"id": "32b82373",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:06.962341Z",
- "iopub.status.busy": "2026-03-24T02:05:06.962258Z",
- "iopub.status.idle": "2026-03-24T02:05:07.169469Z",
- "shell.execute_reply": "2026-03-24T02:05:07.168917Z"
+ "iopub.execute_input": "2026-06-04T02:50:10.476453Z",
+ "iopub.status.busy": "2026-06-04T02:50:10.476322Z",
+ "iopub.status.idle": "2026-06-04T02:50:10.726353Z",
+ "shell.execute_reply": "2026-06-04T02:50:10.725791Z"
}
},
"outputs": [
@@ -111,7 +111,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"Knapsack\", sense=MAXIMIZE, objective=sum(N.map(lambda (i: natural): v[i] * x[i])), constraints={重量制限: [Constraint(name=\"重量制限\", sense=LESS_THAN_EQUAL, left=sum(N.map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Natural)),],})"
+ "Problem(name=\"Knapsack\", sense=MAXIMIZE, objective=sum(set(N).map(lambda (i: natural): v[i] * x[i])), constraints={重量制限: [Constraint(name=\"重量制限\", sense=LESS_THAN_EQUAL, left=sum(set(N).map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Natural)),],})"
]
},
"execution_count": 1,
@@ -169,10 +169,10 @@
"id": "65d15a95",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:07.170703Z",
- "iopub.status.busy": "2026-03-24T02:05:07.170637Z",
- "iopub.status.idle": "2026-03-24T02:05:07.172767Z",
- "shell.execute_reply": "2026-03-24T02:05:07.172304Z"
+ "iopub.execute_input": "2026-06-04T02:50:10.728033Z",
+ "iopub.status.busy": "2026-06-04T02:50:10.727950Z",
+ "iopub.status.idle": "2026-06-04T02:50:10.729814Z",
+ "shell.execute_reply": "2026-06-04T02:50:10.729407Z"
}
},
"outputs": [],
@@ -201,10 +201,10 @@
"id": "dc31f40f",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:07.173836Z",
- "iopub.status.busy": "2026-03-24T02:05:07.173767Z",
- "iopub.status.idle": "2026-03-24T02:05:08.081426Z",
- "shell.execute_reply": "2026-03-24T02:05:08.080927Z"
+ "iopub.execute_input": "2026-06-04T02:50:10.731267Z",
+ "iopub.status.busy": "2026-06-04T02:50:10.731160Z",
+ "iopub.status.idle": "2026-06-04T02:50:11.020033Z",
+ "shell.execute_reply": "2026-06-04T02:50:11.019614Z"
}
},
"outputs": [],
@@ -238,10 +238,10 @@
"id": "a715a29a",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:08.082681Z",
- "iopub.status.busy": "2026-03-24T02:05:08.082558Z",
- "iopub.status.idle": "2026-03-24T02:05:08.459229Z",
- "shell.execute_reply": "2026-03-24T02:05:08.458766Z"
+ "iopub.execute_input": "2026-06-04T02:50:11.021264Z",
+ "iopub.status.busy": "2026-06-04T02:50:11.021177Z",
+ "iopub.status.idle": "2026-06-04T02:50:11.308051Z",
+ "shell.execute_reply": "2026-06-04T02:50:11.307582Z"
}
},
"outputs": [],
@@ -272,10 +272,10 @@
"id": "19debd1b",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:08.460468Z",
- "iopub.status.busy": "2026-03-24T02:05:08.460373Z",
- "iopub.status.idle": "2026-03-24T02:05:08.470105Z",
- "shell.execute_reply": "2026-03-24T02:05:08.469582Z"
+ "iopub.execute_input": "2026-06-04T02:50:11.309464Z",
+ "iopub.status.busy": "2026-06-04T02:50:11.309383Z",
+ "iopub.status.idle": "2026-06-04T02:50:11.315492Z",
+ "shell.execute_reply": "2026-06-04T02:50:11.315167Z"
}
},
"outputs": [
@@ -316,7 +316,7 @@
" 0 | \n",
" x | \n",
" [0] | \n",
- " 1.0 | \n",
+ " 0.0 | \n",
"
\n",
" \n",
" | 1 | \n",
@@ -340,7 +340,7 @@
" 4 | \n",
" x | \n",
" [4] | \n",
- " 0.0 | \n",
+ " 1.0 | \n",
"
\n",
" \n",
" | 5 | \n",
@@ -355,11 +355,11 @@
"text/plain": [
" name subscripts value\n",
"id \n",
- "0 x [0] 1.0\n",
+ "0 x [0] 0.0\n",
"1 x [1] 0.0\n",
"2 x [2] 0.0\n",
"3 x [3] 1.0\n",
- "4 x [4] 0.0\n",
+ "4 x [4] 1.0\n",
"5 x [5] 0.0"
]
},
@@ -413,7 +413,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.11"
+ "version": "3.11.14"
}
},
"nbformat": 4,
diff --git a/docs/ja/quickstart/scip.ipynb b/docs/ja/quickstart/scip.ipynb
index 424ad008..789cf879 100644
--- a/docs/ja/quickstart/scip.ipynb
+++ b/docs/ja/quickstart/scip.ipynb
@@ -94,10 +94,10 @@
"id": "cf6f5d6e",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:09.855622Z",
- "iopub.status.busy": "2026-03-24T02:05:09.855545Z",
- "iopub.status.idle": "2026-03-24T02:05:10.036882Z",
- "shell.execute_reply": "2026-03-24T02:05:10.036496Z"
+ "iopub.execute_input": "2026-06-04T02:50:12.468615Z",
+ "iopub.status.busy": "2026-06-04T02:50:12.468545Z",
+ "iopub.status.idle": "2026-06-04T02:50:12.717527Z",
+ "shell.execute_reply": "2026-06-04T02:50:12.717173Z"
}
},
"outputs": [
@@ -111,7 +111,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"Knapsack\", sense=MAXIMIZE, objective=sum(N.map(lambda (i: natural): v[i] * x[i])), constraints={重量制限: [Constraint(name=\"重量制限\", sense=LESS_THAN_EQUAL, left=sum(N.map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Natural)),],})"
+ "Problem(name=\"Knapsack\", sense=MAXIMIZE, objective=sum(set(N).map(lambda (i: natural): v[i] * x[i])), constraints={重量制限: [Constraint(name=\"重量制限\", sense=LESS_THAN_EQUAL, left=sum(set(N).map(lambda (i: natural): w[i] * x[i])), right=W, shape=Scalar(Natural)),],})"
]
},
"execution_count": 1,
@@ -169,10 +169,10 @@
"id": "4fbe5bb8",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:10.038214Z",
- "iopub.status.busy": "2026-03-24T02:05:10.038151Z",
- "iopub.status.idle": "2026-03-24T02:05:10.040028Z",
- "shell.execute_reply": "2026-03-24T02:05:10.039702Z"
+ "iopub.execute_input": "2026-06-04T02:50:12.718672Z",
+ "iopub.status.busy": "2026-06-04T02:50:12.718611Z",
+ "iopub.status.idle": "2026-06-04T02:50:12.720300Z",
+ "shell.execute_reply": "2026-06-04T02:50:12.720017Z"
}
},
"outputs": [],
@@ -201,10 +201,10 @@
"id": "42561c0b",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:10.040949Z",
- "iopub.status.busy": "2026-03-24T02:05:10.040896Z",
- "iopub.status.idle": "2026-03-24T02:05:10.651143Z",
- "shell.execute_reply": "2026-03-24T02:05:10.650790Z"
+ "iopub.execute_input": "2026-06-04T02:50:12.721174Z",
+ "iopub.status.busy": "2026-06-04T02:50:12.721124Z",
+ "iopub.status.idle": "2026-06-04T02:50:13.004029Z",
+ "shell.execute_reply": "2026-06-04T02:50:13.003717Z"
}
},
"outputs": [],
@@ -238,10 +238,10 @@
"id": "557ed3a4",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:10.652545Z",
- "iopub.status.busy": "2026-03-24T02:05:10.652442Z",
- "iopub.status.idle": "2026-03-24T02:05:10.722754Z",
- "shell.execute_reply": "2026-03-24T02:05:10.722390Z"
+ "iopub.execute_input": "2026-06-04T02:50:13.005328Z",
+ "iopub.status.busy": "2026-06-04T02:50:13.005238Z",
+ "iopub.status.idle": "2026-06-04T02:50:13.075289Z",
+ "shell.execute_reply": "2026-06-04T02:50:13.074876Z"
}
},
"outputs": [
@@ -276,10 +276,10 @@
"id": "a5afa9c8",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:10.723995Z",
- "iopub.status.busy": "2026-03-24T02:05:10.723897Z",
- "iopub.status.idle": "2026-03-24T02:05:10.729677Z",
- "shell.execute_reply": "2026-03-24T02:05:10.729303Z"
+ "iopub.execute_input": "2026-06-04T02:50:13.076293Z",
+ "iopub.status.busy": "2026-06-04T02:50:13.076207Z",
+ "iopub.status.idle": "2026-06-04T02:50:13.080906Z",
+ "shell.execute_reply": "2026-06-04T02:50:13.080597Z"
}
},
"outputs": [
@@ -406,7 +406,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.11"
+ "version": "3.11.14"
}
},
"nbformat": 4,
diff --git a/docs/ja/references/cheat_sheet.ipynb b/docs/ja/references/cheat_sheet.ipynb
index ad2e07e0..f89a2f5d 100644
--- a/docs/ja/references/cheat_sheet.ipynb
+++ b/docs/ja/references/cheat_sheet.ipynb
@@ -14,10 +14,10 @@
"id": "d4a18618",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:01.429331Z",
- "iopub.status.busy": "2026-03-24T02:05:01.429269Z",
- "iopub.status.idle": "2026-03-24T02:05:01.438422Z",
- "shell.execute_reply": "2026-03-24T02:05:01.438044Z"
+ "iopub.execute_input": "2026-06-04T02:50:05.216438Z",
+ "iopub.status.busy": "2026-06-04T02:50:05.216292Z",
+ "iopub.status.idle": "2026-06-04T02:50:05.227738Z",
+ "shell.execute_reply": "2026-06-04T02:50:05.227079Z"
}
},
"outputs": [],
@@ -49,10 +49,10 @@
"id": "79e10997",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:01.440036Z",
- "iopub.status.busy": "2026-03-24T02:05:01.439958Z",
- "iopub.status.idle": "2026-03-24T02:05:01.544052Z",
- "shell.execute_reply": "2026-03-24T02:05:01.543307Z"
+ "iopub.execute_input": "2026-06-04T02:50:05.229970Z",
+ "iopub.status.busy": "2026-06-04T02:50:05.229817Z",
+ "iopub.status.idle": "2026-06-04T02:50:05.299932Z",
+ "shell.execute_reply": "2026-06-04T02:50:05.299562Z"
}
},
"outputs": [
@@ -95,10 +95,10 @@
"id": "0b287866",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:01.545904Z",
- "iopub.status.busy": "2026-03-24T02:05:01.545790Z",
- "iopub.status.idle": "2026-03-24T02:05:01.613176Z",
- "shell.execute_reply": "2026-03-24T02:05:01.611337Z"
+ "iopub.execute_input": "2026-06-04T02:50:05.301069Z",
+ "iopub.status.busy": "2026-06-04T02:50:05.301012Z",
+ "iopub.status.idle": "2026-06-04T02:50:05.348556Z",
+ "shell.execute_reply": "2026-06-04T02:50:05.348202Z"
}
},
"outputs": [
@@ -150,10 +150,10 @@
"id": "ed7db663",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:01.615861Z",
- "iopub.status.busy": "2026-03-24T02:05:01.615567Z",
- "iopub.status.idle": "2026-03-24T02:05:01.693506Z",
- "shell.execute_reply": "2026-03-24T02:05:01.693054Z"
+ "iopub.execute_input": "2026-06-04T02:50:05.349772Z",
+ "iopub.status.busy": "2026-06-04T02:50:05.349716Z",
+ "iopub.status.idle": "2026-06-04T02:50:05.418664Z",
+ "shell.execute_reply": "2026-06-04T02:50:05.418281Z"
}
},
"outputs": [
@@ -197,10 +197,10 @@
"id": "45474fb8",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:01.695344Z",
- "iopub.status.busy": "2026-03-24T02:05:01.695262Z",
- "iopub.status.idle": "2026-03-24T02:05:01.753298Z",
- "shell.execute_reply": "2026-03-24T02:05:01.752745Z"
+ "iopub.execute_input": "2026-06-04T02:50:05.419778Z",
+ "iopub.status.busy": "2026-06-04T02:50:05.419718Z",
+ "iopub.status.idle": "2026-06-04T02:50:05.491592Z",
+ "shell.execute_reply": "2026-06-04T02:50:05.491322Z"
}
},
"outputs": [
@@ -253,10 +253,10 @@
"id": "08771e03",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:01.755210Z",
- "iopub.status.busy": "2026-03-24T02:05:01.755126Z",
- "iopub.status.idle": "2026-03-24T02:05:01.878464Z",
- "shell.execute_reply": "2026-03-24T02:05:01.877614Z"
+ "iopub.execute_input": "2026-06-04T02:50:05.492834Z",
+ "iopub.status.busy": "2026-06-04T02:50:05.492781Z",
+ "iopub.status.idle": "2026-06-04T02:50:05.584539Z",
+ "shell.execute_reply": "2026-06-04T02:50:05.584176Z"
}
},
"outputs": [
@@ -300,10 +300,10 @@
"id": "eff6ac1d",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:01.880046Z",
- "iopub.status.busy": "2026-03-24T02:05:01.879916Z",
- "iopub.status.idle": "2026-03-24T02:05:01.973491Z",
- "shell.execute_reply": "2026-03-24T02:05:01.973065Z"
+ "iopub.execute_input": "2026-06-04T02:50:05.585657Z",
+ "iopub.status.busy": "2026-06-04T02:50:05.585599Z",
+ "iopub.status.idle": "2026-06-04T02:50:05.686685Z",
+ "shell.execute_reply": "2026-06-04T02:50:05.686325Z"
}
},
"outputs": [
@@ -315,7 +315,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"SumAlongSet\", sense=MINIMIZE, objective=sum(C.map(lambda (i: natural): x[i])), constraints=[])"
+ "Problem(name=\"SumAlongSet\", sense=MINIMIZE, objective=sum(set(C).map(lambda (i: natural): x[i])), constraints=[])"
]
},
"execution_count": 7,
@@ -356,10 +356,10 @@
"id": "3088b3ca",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:01.974620Z",
- "iopub.status.busy": "2026-03-24T02:05:01.974558Z",
- "iopub.status.idle": "2026-03-24T02:05:02.056888Z",
- "shell.execute_reply": "2026-03-24T02:05:02.056548Z"
+ "iopub.execute_input": "2026-06-04T02:50:05.687751Z",
+ "iopub.status.busy": "2026-06-04T02:50:05.687692Z",
+ "iopub.status.idle": "2026-06-04T02:50:05.793280Z",
+ "shell.execute_reply": "2026-06-04T02:50:05.792648Z"
}
},
"outputs": [
@@ -403,10 +403,10 @@
"id": "547a6ead",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:02.058019Z",
- "iopub.status.busy": "2026-03-24T02:05:02.057960Z",
- "iopub.status.idle": "2026-03-24T02:05:02.140216Z",
- "shell.execute_reply": "2026-03-24T02:05:02.139888Z"
+ "iopub.execute_input": "2026-06-04T02:50:05.794990Z",
+ "iopub.status.busy": "2026-06-04T02:50:05.794909Z",
+ "iopub.status.idle": "2026-06-04T02:50:05.908975Z",
+ "shell.execute_reply": "2026-06-04T02:50:05.908590Z"
}
},
"outputs": [
@@ -418,7 +418,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"SumAlongEdgeSet\", sense=MINIMIZE, objective=sum(E.map(lambda ((i, j): Tuple[natural, natural]): x[i] * x[j])), constraints=[])"
+ "Problem(name=\"SumAlongEdgeSet\", sense=MINIMIZE, objective=sum(set(E).map(lambda ((i, j): Tuple[natural, natural]): x[i] * x[j])), constraints=[])"
]
},
"execution_count": 9,
@@ -459,10 +459,10 @@
"id": "cfdecd72",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:02.141314Z",
- "iopub.status.busy": "2026-03-24T02:05:02.141259Z",
- "iopub.status.idle": "2026-03-24T02:05:02.322713Z",
- "shell.execute_reply": "2026-03-24T02:05:02.321830Z"
+ "iopub.execute_input": "2026-06-04T02:50:05.910084Z",
+ "iopub.status.busy": "2026-06-04T02:50:05.910028Z",
+ "iopub.status.idle": "2026-06-04T02:50:06.082466Z",
+ "shell.execute_reply": "2026-06-04T02:50:06.082157Z"
}
},
"outputs": [
@@ -509,10 +509,10 @@
"id": "28c3c3b5",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:02.323836Z",
- "iopub.status.busy": "2026-03-24T02:05:02.323757Z",
- "iopub.status.idle": "2026-03-24T02:05:02.477603Z",
- "shell.execute_reply": "2026-03-24T02:05:02.477115Z"
+ "iopub.execute_input": "2026-06-04T02:50:06.083500Z",
+ "iopub.status.busy": "2026-06-04T02:50:06.083449Z",
+ "iopub.status.idle": "2026-06-04T02:50:06.274392Z",
+ "shell.execute_reply": "2026-06-04T02:50:06.274003Z"
}
},
"outputs": [
@@ -524,7 +524,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"ConditionalSum\", sense=MINIMIZE, objective=sum(N.flat_map(lambda (i: natural): N.map(lambda (j: natural): (i, j))).filter(lambda (i, j): i > j).map(lambda ((i, j): Tuple[natural, natural]): J[i, j] * x[i] * x[j])), constraints=[])"
+ "Problem(name=\"ConditionalSum\", sense=MINIMIZE, objective=sum(set(N.flat_map(lambda (i: natural): N.map(lambda (j: natural): (i, j))).filter(lambda (i, j): i > j)).map(lambda ((i, j): Tuple[natural, natural]): J[i, j] * x[i] * x[j])), constraints=[])"
]
},
"execution_count": 11,
@@ -565,10 +565,10 @@
"id": "1d285a01",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:02.478786Z",
- "iopub.status.busy": "2026-03-24T02:05:02.478725Z",
- "iopub.status.idle": "2026-03-24T02:05:02.587107Z",
- "shell.execute_reply": "2026-03-24T02:05:02.586705Z"
+ "iopub.execute_input": "2026-06-04T02:50:06.275485Z",
+ "iopub.status.busy": "2026-06-04T02:50:06.275430Z",
+ "iopub.status.idle": "2026-06-04T02:50:06.409426Z",
+ "shell.execute_reply": "2026-06-04T02:50:06.409038Z"
}
},
"outputs": [
@@ -614,10 +614,10 @@
"id": "7d1c8a03",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:02.588091Z",
- "iopub.status.busy": "2026-03-24T02:05:02.588039Z",
- "iopub.status.idle": "2026-03-24T02:05:02.740181Z",
- "shell.execute_reply": "2026-03-24T02:05:02.739815Z"
+ "iopub.execute_input": "2026-06-04T02:50:06.410517Z",
+ "iopub.status.busy": "2026-06-04T02:50:06.410462Z",
+ "iopub.status.idle": "2026-06-04T02:50:06.560991Z",
+ "shell.execute_reply": "2026-06-04T02:50:06.560705Z"
}
},
"outputs": [
@@ -629,7 +629,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"NonDiagonalSum\", sense=MINIMIZE, objective=sum(N.flat_map(lambda (i: natural): N.map(lambda (j: natural): (i, j))).filter(lambda (i, j): i != j).map(lambda ((i, j): Tuple[natural, natural]): J[i, j])), constraints=[])"
+ "Problem(name=\"NonDiagonalSum\", sense=MINIMIZE, objective=sum(set(N.flat_map(lambda (i: natural): N.map(lambda (j: natural): (i, j))).filter(lambda (i, j): i != j)).map(lambda ((i, j): Tuple[natural, natural]): J[i, j])), constraints=[])"
]
},
"execution_count": 13,
@@ -669,10 +669,10 @@
"id": "75703ca2",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:02.741675Z",
- "iopub.status.busy": "2026-03-24T02:05:02.741453Z",
- "iopub.status.idle": "2026-03-24T02:05:02.901239Z",
- "shell.execute_reply": "2026-03-24T02:05:02.900893Z"
+ "iopub.execute_input": "2026-06-04T02:50:06.562096Z",
+ "iopub.status.busy": "2026-06-04T02:50:06.562042Z",
+ "iopub.status.idle": "2026-06-04T02:50:06.665910Z",
+ "shell.execute_reply": "2026-06-04T02:50:06.665531Z"
}
},
"outputs": [
@@ -717,10 +717,10 @@
"id": "0c4e9205",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:02.904014Z",
- "iopub.status.busy": "2026-03-24T02:05:02.903914Z",
- "iopub.status.idle": "2026-03-24T02:05:03.021032Z",
- "shell.execute_reply": "2026-03-24T02:05:03.020218Z"
+ "iopub.execute_input": "2026-06-04T02:50:06.666878Z",
+ "iopub.status.busy": "2026-06-04T02:50:06.666827Z",
+ "iopub.status.idle": "2026-06-04T02:50:06.820613Z",
+ "shell.execute_reply": "2026-06-04T02:50:06.820131Z"
}
},
"outputs": [
@@ -732,7 +732,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"DependentSum\", sense=MINIMIZE, objective=sum(M.flat_map(lambda (i: natural): a[i].map(lambda (j: natural): (i, j))).map(lambda ((i, j): Tuple[natural, natural]): x[j])), constraints=[])"
+ "Problem(name=\"DependentSum\", sense=MINIMIZE, objective=sum(set(M.flat_map(lambda (i: natural): a[i].map(lambda (j: natural): (i, j)))).map(lambda ((i, j): Tuple[natural, natural]): x[j])), constraints=[])"
]
},
"execution_count": 15,
@@ -775,10 +775,10 @@
"id": "fc24d108",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:03.022220Z",
- "iopub.status.busy": "2026-03-24T02:05:03.022147Z",
- "iopub.status.idle": "2026-03-24T02:05:03.106428Z",
- "shell.execute_reply": "2026-03-24T02:05:03.106052Z"
+ "iopub.execute_input": "2026-06-04T02:50:06.821935Z",
+ "iopub.status.busy": "2026-06-04T02:50:06.821862Z",
+ "iopub.status.idle": "2026-06-04T02:50:06.906546Z",
+ "shell.execute_reply": "2026-06-04T02:50:06.906206Z"
}
},
"outputs": [
@@ -792,7 +792,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"OneHot\", sense=MINIMIZE, objective=0, constraints={onehot: [Constraint(name=\"onehot\", sense=EQUAL, left=sum(x), right=1, shape=Scalar(Binary)),],})"
+ "Problem(name=\"OneHot\", sense=MINIMIZE, objective=0, constraints={onehot: [Constraint(name=\"onehot\", sense=EQUAL, left=sum(x), right=1, shape=Scalar(Natural)),],})"
]
},
"execution_count": 16,
@@ -823,10 +823,10 @@
"id": "dc6c8635",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:03.107498Z",
- "iopub.status.busy": "2026-03-24T02:05:03.107440Z",
- "iopub.status.idle": "2026-03-24T02:05:03.193860Z",
- "shell.execute_reply": "2026-03-24T02:05:03.193469Z"
+ "iopub.execute_input": "2026-06-04T02:50:06.907616Z",
+ "iopub.status.busy": "2026-06-04T02:50:06.907560Z",
+ "iopub.status.idle": "2026-06-04T02:50:06.998589Z",
+ "shell.execute_reply": "2026-06-04T02:50:06.998296Z"
}
},
"outputs": [
@@ -840,7 +840,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"OneHot\", sense=MINIMIZE, objective=0, constraints={onehot: [Constraint(name=\"onehot\", sense=EQUAL, left=sum(x), right=1, shape=Scalar(Binary)),],})"
+ "Problem(name=\"OneHot\", sense=MINIMIZE, objective=0, constraints={onehot: [Constraint(name=\"onehot\", sense=EQUAL, left=sum(x), right=1, shape=Scalar(Natural)),],})"
]
},
"execution_count": 17,
@@ -880,10 +880,10 @@
"id": "e94c1845",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:03.196589Z",
- "iopub.status.busy": "2026-03-24T02:05:03.196463Z",
- "iopub.status.idle": "2026-03-24T02:05:03.301828Z",
- "shell.execute_reply": "2026-03-24T02:05:03.301368Z"
+ "iopub.execute_input": "2026-06-04T02:50:06.999751Z",
+ "iopub.status.busy": "2026-06-04T02:50:06.999699Z",
+ "iopub.status.idle": "2026-06-04T02:50:07.131103Z",
+ "shell.execute_reply": "2026-06-04T02:50:07.130645Z"
}
},
"outputs": [
@@ -929,10 +929,10 @@
"id": "cf2136d1",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:03.303543Z",
- "iopub.status.busy": "2026-03-24T02:05:03.303449Z",
- "iopub.status.idle": "2026-03-24T02:05:03.405151Z",
- "shell.execute_reply": "2026-03-24T02:05:03.404690Z"
+ "iopub.execute_input": "2026-06-04T02:50:07.132205Z",
+ "iopub.status.busy": "2026-06-04T02:50:07.132141Z",
+ "iopub.status.idle": "2026-06-04T02:50:07.230454Z",
+ "shell.execute_reply": "2026-06-04T02:50:07.230148Z"
}
},
"outputs": [
@@ -987,10 +987,10 @@
"id": "34f681bc",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:03.406238Z",
- "iopub.status.busy": "2026-03-24T02:05:03.406175Z",
- "iopub.status.idle": "2026-03-24T02:05:03.532199Z",
- "shell.execute_reply": "2026-03-24T02:05:03.529504Z"
+ "iopub.execute_input": "2026-06-04T02:50:07.231650Z",
+ "iopub.status.busy": "2026-06-04T02:50:07.231597Z",
+ "iopub.status.idle": "2026-06-04T02:50:07.383729Z",
+ "shell.execute_reply": "2026-06-04T02:50:07.383436Z"
}
},
"outputs": [
@@ -999,12 +999,12 @@
"text/latex": [
"$$\\begin{array}{rl}\n",
"\\text{Problem}\\colon &\\text{2D K-Hot}\\\\\\displaystyle \\min &\\displaystyle 0\\\\&\\\\\\text{s.t.}&\\\\&\\begin{aligned}\n",
- "\\text{2d k-hot}&\\quad \\displaystyle x.\\mathop{\\mathtt{sum}}\\left(\\mathtt{axis}=\\left[1\\right]\\right)=K\\end{aligned}\n",
+ "\\text{2d k-hot}&\\quad \\displaystyle {x.\\mathop{\\mathtt{sum}}\\left(\\mathtt{axis}=\\left[1\\right]\\right)}_{i}={K}_{i}\\quad \\forall i\\;\\text{s.t.}\\;i\\in \\left\\{0,\\ldots ,N-1\\right\\}\\end{aligned}\n",
"\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{Array}}\\left[N\\times M;\\left\\{0, 1\\right\\}\\right]&\\quad &2\\text{-dim binary variable}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}K&\\in \\mathop{\\mathrm{Array}}\\left[(-);\\mathbb{N}\\right]&\\quad &1\\text{-dimensional array of placeholders with elements in }\\mathbb{N}\\\\M&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\\\end{alignedat}\\\\&\\\\&\\text{Named Expressions:}\\\\&\\qquad \\begin{alignedat}{2}N&=\\mathop{\\mathtt{len\\_{}at}}\\left(K,0\\right)&\\quad &\\in \\mathbb{N}\\\\\\end{alignedat}\\end{array}\n",
"$$"
],
"text/plain": [
- "Problem(name=\"2D K-Hot\", sense=MINIMIZE, objective=0, constraints={2d k-hot: [Constraint(name=\"2d k-hot\", sense=EQUAL, left=x.sum(1), right=K, shape=SameTensorLike { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_47001/1184867636.py\", start: SrcLoc { line: 5, column: 4 }, end: SrcLoc { line: 5, column: 40 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_47001/1184867636.py\", start: SrcLoc { line: 5, column: 4 }, end: SrcLoc { line: 5, column: 40 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Natural }, src_span: NoSrcSpan } }), scalar: Natural }),],})"
+ "Problem(name=\"2D K-Hot\", sense=MINIMIZE, objective=0, constraints={2d k-hot: [Constraint(name=\"2d k-hot\", sense=EQUAL, left=x.sum(1), right=K, shape=SameTensorLike { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_3974/1184867636.py\", start: SrcLoc { line: 5, column: 4 }, end: SrcLoc { line: 5, column: 40 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_3974/1184867636.py\", start: SrcLoc { line: 5, column: 4 }, end: SrcLoc { line: 5, column: 40 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Natural }, src_span: NoSrcSpan } }), scalar: Natural }),],})"
]
},
"execution_count": 20,
@@ -1037,10 +1037,10 @@
"id": "3abc03a3",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:03.536814Z",
- "iopub.status.busy": "2026-03-24T02:05:03.536639Z",
- "iopub.status.idle": "2026-03-24T02:05:03.647317Z",
- "shell.execute_reply": "2026-03-24T02:05:03.646932Z"
+ "iopub.execute_input": "2026-06-04T02:50:07.384909Z",
+ "iopub.status.busy": "2026-06-04T02:50:07.384854Z",
+ "iopub.status.idle": "2026-06-04T02:50:07.546207Z",
+ "shell.execute_reply": "2026-06-04T02:50:07.545859Z"
}
},
"outputs": [
@@ -1049,12 +1049,12 @@
"text/latex": [
"$$\\begin{array}{rl}\n",
"\\text{Problem}\\colon &\\text{2D K-Hot}\\\\\\displaystyle \\min &\\displaystyle 0\\\\&\\\\\\text{s.t.}&\\\\&\\begin{aligned}\n",
- "\\text{2d k-hot}&\\quad \\displaystyle x.\\mathop{\\mathtt{sum}}\\left(\\mathtt{axis}=\\left[1\\right]\\right)=K\\end{aligned}\n",
+ "\\text{2d k-hot}&\\quad \\displaystyle {x.\\mathop{\\mathtt{sum}}\\left(\\mathtt{axis}=\\left[1\\right]\\right)}_{i}={K}_{i}\\quad \\forall i\\;\\text{s.t.}\\;i\\in \\left\\{0,\\ldots ,N-1\\right\\}\\end{aligned}\n",
"\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{Array}}\\left[N\\times M;\\left\\{0, 1\\right\\}\\right]&\\quad &2\\text{-dim binary variable}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}K&\\in \\mathop{\\mathrm{Array}}\\left[(-);\\mathbb{N}\\right]&\\quad &1\\text{-dimensional array of placeholders with elements in }\\mathbb{N}\\\\M&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\\\end{alignedat}\\\\&\\\\&\\text{Named Expressions:}\\\\&\\qquad \\begin{alignedat}{2}N&=\\mathop{\\mathtt{len\\_{}at}}\\left(K,0\\right)&\\quad &\\in \\mathbb{N}\\\\\\end{alignedat}\\end{array}\n",
"$$"
],
"text/plain": [
- "Problem(name=\"2D K-Hot\", sense=MINIMIZE, objective=0, constraints={2d k-hot: [Constraint(name=\"2d k-hot\", sense=EQUAL, left=x.sum(1), right=K, shape=SameTensorLike { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_47001/1629874504.py\", start: SrcLoc { line: 6, column: 8 }, end: SrcLoc { line: 6, column: 39 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_47001/1629874504.py\", start: SrcLoc { line: 6, column: 8 }, end: SrcLoc { line: 6, column: 39 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Natural }, src_span: NoSrcSpan } }), scalar: Natural }),],})"
+ "Problem(name=\"2D K-Hot\", sense=MINIMIZE, objective=0, constraints={2d k-hot: [Constraint(name=\"2d k-hot\", sense=EQUAL, left=x.sum(1), right=K, shape=SameTensorLike { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_3974/1629874504.py\", start: SrcLoc { line: 6, column: 8 }, end: SrcLoc { line: 6, column: 39 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_3974/1629874504.py\", start: SrcLoc { line: 6, column: 8 }, end: SrcLoc { line: 6, column: 39 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Natural }, src_span: NoSrcSpan } }), scalar: Natural }),],})"
]
},
"execution_count": 21,
@@ -1096,10 +1096,10 @@
"id": "25789023",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:03.648461Z",
- "iopub.status.busy": "2026-03-24T02:05:03.648398Z",
- "iopub.status.idle": "2026-03-24T02:05:03.820160Z",
- "shell.execute_reply": "2026-03-24T02:05:03.819817Z"
+ "iopub.execute_input": "2026-06-04T02:50:07.547498Z",
+ "iopub.status.busy": "2026-06-04T02:50:07.547445Z",
+ "iopub.status.idle": "2026-06-04T02:50:07.785459Z",
+ "shell.execute_reply": "2026-06-04T02:50:07.785056Z"
}
},
"outputs": [
@@ -1149,10 +1149,10 @@
"id": "cf7c27cd",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:03.821411Z",
- "iopub.status.busy": "2026-03-24T02:05:03.821356Z",
- "iopub.status.idle": "2026-03-24T02:05:04.007530Z",
- "shell.execute_reply": "2026-03-24T02:05:04.007215Z"
+ "iopub.execute_input": "2026-06-04T02:50:07.786458Z",
+ "iopub.status.busy": "2026-06-04T02:50:07.786399Z",
+ "iopub.status.idle": "2026-06-04T02:50:08.009746Z",
+ "shell.execute_reply": "2026-06-04T02:50:08.009405Z"
}
},
"outputs": [
@@ -1166,7 +1166,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"KHotOverSet\", sense=MINIMIZE, objective=0, constraints={k-hot_constraint: [Constraint(name=\"k-hot_constraint\", , lambda a: sum(C[a].map(lambda (i: natural): x[i])) == K[a], domain=set(M)),],})"
+ "Problem(name=\"KHotOverSet\", sense=MINIMIZE, objective=0, constraints={k-hot_constraint: [Constraint(name=\"k-hot_constraint\", , lambda a: sum(set(C[a]).map(lambda (i: natural): x[i])) == K[a], domain=set(M)),],})"
]
},
"execution_count": 23,
@@ -1211,10 +1211,10 @@
"id": "c404bee8",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:04.008611Z",
- "iopub.status.busy": "2026-03-24T02:05:04.008548Z",
- "iopub.status.idle": "2026-03-24T02:05:04.102020Z",
- "shell.execute_reply": "2026-03-24T02:05:04.101644Z"
+ "iopub.execute_input": "2026-06-04T02:50:08.010902Z",
+ "iopub.status.busy": "2026-06-04T02:50:08.010845Z",
+ "iopub.status.idle": "2026-06-04T02:50:08.121759Z",
+ "shell.execute_reply": "2026-06-04T02:50:08.121380Z"
}
},
"outputs": [
@@ -1261,10 +1261,10 @@
"id": "3d6ef1a1",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:04.103112Z",
- "iopub.status.busy": "2026-03-24T02:05:04.103050Z",
- "iopub.status.idle": "2026-03-24T02:05:04.201445Z",
- "shell.execute_reply": "2026-03-24T02:05:04.200875Z"
+ "iopub.execute_input": "2026-06-04T02:50:08.122805Z",
+ "iopub.status.busy": "2026-06-04T02:50:08.122749Z",
+ "iopub.status.idle": "2026-06-04T02:50:08.250734Z",
+ "shell.execute_reply": "2026-06-04T02:50:08.250363Z"
}
},
"outputs": [
@@ -1320,10 +1320,10 @@
"id": "33bd2f32",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:04.202936Z",
- "iopub.status.busy": "2026-03-24T02:05:04.202858Z",
- "iopub.status.idle": "2026-03-24T02:05:04.379090Z",
- "shell.execute_reply": "2026-03-24T02:05:04.378607Z"
+ "iopub.execute_input": "2026-06-04T02:50:08.252025Z",
+ "iopub.status.busy": "2026-06-04T02:50:08.251969Z",
+ "iopub.status.idle": "2026-06-04T02:50:08.484805Z",
+ "shell.execute_reply": "2026-06-04T02:50:08.484430Z"
}
},
"outputs": [
@@ -1332,12 +1332,12 @@
"text/latex": [
"$$\\begin{array}{rl}\n",
"\\text{Problem}\\colon &\\text{SOS-1}\\\\\\displaystyle \\min &\\displaystyle 0\\\\&\\\\\\text{s.t.}&\\\\&\\begin{aligned}\n",
- "\\text{Big-M}&\\quad \\displaystyle a\\leq M\\cdot x\\\\\\text{SOS1}&\\quad \\displaystyle \\sum _{\\vec{\\imath }}{{{\\left(x\\right)}}_{\\vec{\\imath }}}\\leq 1\\end{aligned}\n",
+ "\\text{Big-M}&\\quad \\displaystyle {a}_{i}\\leq {\\left(M\\cdot x\\right)}_{i}\\quad \\forall i\\;\\text{s.t.}\\;i\\in \\left\\{0,\\ldots ,N-1\\right\\}\\\\\\text{SOS1}&\\quad \\displaystyle \\sum _{\\vec{\\imath }}{{{\\left(x\\right)}}_{\\vec{\\imath }}}\\leq 1\\end{aligned}\n",
"\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}a&\\in \\mathop{\\mathrm{Array}}\\left[N;\\mathbb{R}\\right]\\;\\left(0\\leq {a}_{i}\\leq {M}_{i}\\right)&\\quad &1\\text{-dim continuous variable}\\\\x&\\in \\mathop{\\mathrm{Array}}\\left[N;\\left\\{0, 1\\right\\}\\right]&\\quad &1\\text{-dim binary variable}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}M&\\in \\mathop{\\mathrm{Array}}\\left[N;\\mathbb{R}\\right]&\\quad &1\\text{-dimensional array of placeholders with elements in }\\mathbb{R}\\\\N&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\\\end{alignedat}\\end{array}\n",
"$$"
],
"text/plain": [
- "Problem(name=\"SOS-1\", sense=MINIMIZE, objective=0, constraints={Big-M: [Constraint(name=\"Big-M\", sense=LESS_THAN_EQUAL, left=a, right=M * x, shape=SameTensorLike { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: Some(SetStyle { element: None, kind: Natural }), subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_47001/1199227916.py\", start: SrcLoc { line: 2, column: 4 }, end: SrcLoc { line: 2, column: 24 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_47001/1199227916.py\", start: SrcLoc { line: 2, column: 4 }, end: SrcLoc { line: 2, column: 24 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Float }, src_span: NoSrcSpan } }), scalar: Float }),],SOS1: [Constraint(name=\"SOS1\", sense=LESS_THAN_EQUAL, left=sum(x), right=1, shape=Scalar(Binary)),],})"
+ "Problem(name=\"SOS-1\", sense=MINIMIZE, objective=0, constraints={Big-M: [Constraint(name=\"Big-M\", sense=LESS_THAN_EQUAL, left=a, right=M * x, shape=SameTensorLike { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: Some(SetStyle { element: None, kind: Natural }), subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_3974/1199227916.py\", start: SrcLoc { line: 2, column: 4 }, end: SrcLoc { line: 2, column: 24 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_3974/1199227916.py\", start: SrcLoc { line: 2, column: 4 }, end: SrcLoc { line: 2, column: 24 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Float }, src_span: NoSrcSpan } }), scalar: Float }),],SOS1: [Constraint(name=\"SOS1\", sense=LESS_THAN_EQUAL, left=sum(x), right=1, shape=Scalar(Natural)),],})"
]
},
"execution_count": 26,
@@ -1371,10 +1371,10 @@
"id": "9f91dea8",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:04.380332Z",
- "iopub.status.busy": "2026-03-24T02:05:04.380263Z",
- "iopub.status.idle": "2026-03-24T02:05:04.585189Z",
- "shell.execute_reply": "2026-03-24T02:05:04.584802Z"
+ "iopub.execute_input": "2026-06-04T02:50:08.485997Z",
+ "iopub.status.busy": "2026-06-04T02:50:08.485939Z",
+ "iopub.status.idle": "2026-06-04T02:50:08.723451Z",
+ "shell.execute_reply": "2026-06-04T02:50:08.722973Z"
}
},
"outputs": [
@@ -1383,12 +1383,12 @@
"text/latex": [
"$$\\begin{array}{rl}\n",
"\\text{Problem}\\colon &\\text{SOS-1}\\\\\\displaystyle \\min &\\displaystyle 0\\\\&\\\\\\text{s.t.}&\\\\&\\begin{aligned}\n",
- "\\text{Big-M}&\\quad \\displaystyle a\\leq M\\cdot x\\\\\\text{SOS1}&\\quad \\displaystyle \\sum _{\\vec{\\imath }}{{{\\left(x\\right)}}_{\\vec{\\imath }}}\\leq 1\\end{aligned}\n",
+ "\\text{Big-M}&\\quad \\displaystyle {a}_{i}\\leq {\\left(M\\cdot x\\right)}_{i}\\quad \\forall i\\;\\text{s.t.}\\;i\\in \\left\\{0,\\ldots ,N-1\\right\\}\\\\\\text{SOS1}&\\quad \\displaystyle \\sum _{\\vec{\\imath }}{{{\\left(x\\right)}}_{\\vec{\\imath }}}\\leq 1\\end{aligned}\n",
"\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}a&\\in \\mathop{\\mathrm{Array}}\\left[N;\\mathbb{R}\\right]\\;\\left(0\\leq {a}_{i}\\leq {M}_{i}\\right)&\\quad &1\\text{-dim continuous variable}\\\\x&\\in \\mathop{\\mathrm{Array}}\\left[N;\\left\\{0, 1\\right\\}\\right]&\\quad &1\\text{-dim binary variable}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}M&\\in \\mathop{\\mathrm{Array}}\\left[N;\\mathbb{R}\\right]&\\quad &1\\text{-dimensional array of placeholders with elements in }\\mathbb{R}\\\\N&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\\\end{alignedat}\\end{array}\n",
"$$"
],
"text/plain": [
- "Problem(name=\"SOS-1\", sense=MINIMIZE, objective=0, constraints={Big-M: [Constraint(name=\"Big-M\", sense=LESS_THAN_EQUAL, left=a, right=M * x, shape=SameTensorLike { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: Some(SetStyle { element: None, kind: Natural }), subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_47001/3596302424.py\", start: SrcLoc { line: 3, column: 8 }, end: SrcLoc { line: 3, column: 25 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_47001/3596302424.py\", start: SrcLoc { line: 3, column: 8 }, end: SrcLoc { line: 3, column: 25 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Float }, src_span: NoSrcSpan } }), scalar: Float }),],SOS1: [Constraint(name=\"SOS1\", sense=LESS_THAN_EQUAL, left=sum(x), right=1, shape=Scalar(Binary)),],})"
+ "Problem(name=\"SOS-1\", sense=MINIMIZE, objective=0, constraints={Big-M: [Constraint(name=\"Big-M\", sense=LESS_THAN_EQUAL, left=a, right=M * x, shape=SameTensorLike { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: Some(SetStyle { element: None, kind: Natural }), subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_3974/3596302424.py\", start: SrcLoc { line: 3, column: 8 }, end: SrcLoc { line: 3, column: 25 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_3974/3596302424.py\", start: SrcLoc { line: 3, column: 8 }, end: SrcLoc { line: 3, column: 25 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Float }, src_span: NoSrcSpan } }), scalar: Float }),],SOS1: [Constraint(name=\"SOS1\", sense=LESS_THAN_EQUAL, left=sum(x), right=1, shape=Scalar(Natural)),],})"
]
},
"execution_count": 27,
@@ -1431,10 +1431,10 @@
"id": "a62ab168",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:04.586397Z",
- "iopub.status.busy": "2026-03-24T02:05:04.586340Z",
- "iopub.status.idle": "2026-03-24T02:05:04.868405Z",
- "shell.execute_reply": "2026-03-24T02:05:04.867931Z"
+ "iopub.execute_input": "2026-06-04T02:50:08.724656Z",
+ "iopub.status.busy": "2026-06-04T02:50:08.724594Z",
+ "iopub.status.idle": "2026-06-04T02:50:09.044380Z",
+ "shell.execute_reply": "2026-06-04T02:50:09.043924Z"
}
},
"outputs": [
@@ -1489,10 +1489,10 @@
"id": "a86d8c29",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:05:04.869562Z",
- "iopub.status.busy": "2026-03-24T02:05:04.869487Z",
- "iopub.status.idle": "2026-03-24T02:05:05.200776Z",
- "shell.execute_reply": "2026-03-24T02:05:05.200293Z"
+ "iopub.execute_input": "2026-06-04T02:50:09.045514Z",
+ "iopub.status.busy": "2026-06-04T02:50:09.045460Z",
+ "iopub.status.idle": "2026-06-04T02:50:09.417735Z",
+ "shell.execute_reply": "2026-06-04T02:50:09.417395Z"
}
},
"outputs": [
@@ -1557,7 +1557,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.11"
+ "version": "3.11.14"
}
},
"nbformat": 4,
diff --git a/docs/ja/references/migration_guide_to_jijmodeling2.ipynb b/docs/ja/references/migration_guide_to_jijmodeling2.ipynb
index 2ccb871f..35246183 100644
--- a/docs/ja/references/migration_guide_to_jijmodeling2.ipynb
+++ b/docs/ja/references/migration_guide_to_jijmodeling2.ipynb
@@ -126,10 +126,10 @@
"id": "5c1c13b4",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:55.169692Z",
- "iopub.status.busy": "2026-03-24T02:04:55.169605Z",
- "iopub.status.idle": "2026-03-24T02:04:55.620482Z",
- "shell.execute_reply": "2026-03-24T02:04:55.619991Z"
+ "iopub.execute_input": "2026-06-04T02:49:59.552035Z",
+ "iopub.status.busy": "2026-06-04T02:49:59.551883Z",
+ "iopub.status.idle": "2026-06-04T02:50:00.132790Z",
+ "shell.execute_reply": "2026-06-04T02:50:00.132332Z"
}
},
"outputs": [
@@ -143,7 +143,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"TSP\", sense=MINIMIZE, objective=sum(N.flat_map(lambda (i: natural): N.map(lambda (j: natural): (i, j))).flat_map(lambda ((i, j): Tuple[natural, natural]): N.map(lambda (t: natural): (i, j, t))).map(lambda ((i, j, t): Tuple[natural, natural, natural]): d[i, j] * x[i, t] * x[j, (t + 1) % N])), constraints={one-city: [Constraint(name=\"one-city\", , lambda t: sum(N.map(lambda (i: natural): x[i, t])) == 1, domain=set(N), description=\"各時刻にちょうど1つの都市を訪問\"),],one-time: [Constraint(name=\"one-time\", , lambda i: sum(N.map(lambda (t: natural): x[i, t])) == 1, domain=set(N), description=\"各都市はちょうど1回訪問される\"),],})"
+ "Problem(name=\"TSP\", sense=MINIMIZE, objective=sum(set(N.flat_map(lambda (i: natural): N.map(lambda (j: natural): (i, j))).flat_map(lambda ((i, j): Tuple[natural, natural]): N.map(lambda (t: natural): (i, j, t)))).map(lambda ((i, j, t): Tuple[natural, natural, natural]): d[i, j] * x[i, t] * x[j, (t + 1) % N])), constraints={one-city: [Constraint(name=\"one-city\", , lambda t: sum(set(N).map(lambda (i: natural): x[i, t])) == 1, domain=set(N), description=\"各時刻にちょうど1つの都市を訪問\"),],one-time: [Constraint(name=\"one-time\", , lambda i: sum(set(N).map(lambda (t: natural): x[i, t])) == 1, domain=set(N), description=\"各都市はちょうど1回訪問される\"),],})"
]
},
"execution_count": 1,
@@ -195,10 +195,10 @@
"id": "d1f405cd",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:55.621608Z",
- "iopub.status.busy": "2026-03-24T02:04:55.621531Z",
- "iopub.status.idle": "2026-03-24T02:04:56.272954Z",
- "shell.execute_reply": "2026-03-24T02:04:56.272500Z"
+ "iopub.execute_input": "2026-06-04T02:50:00.134044Z",
+ "iopub.status.busy": "2026-06-04T02:50:00.133957Z",
+ "iopub.status.idle": "2026-06-04T02:50:00.482930Z",
+ "shell.execute_reply": "2026-06-04T02:50:00.482625Z"
}
},
"outputs": [
@@ -375,10 +375,10 @@
"id": "5ef8c8b3",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:56.274019Z",
- "iopub.status.busy": "2026-03-24T02:04:56.273898Z",
- "iopub.status.idle": "2026-03-24T02:04:56.276712Z",
- "shell.execute_reply": "2026-03-24T02:04:56.275995Z"
+ "iopub.execute_input": "2026-06-04T02:50:00.484054Z",
+ "iopub.status.busy": "2026-06-04T02:50:00.483957Z",
+ "iopub.status.idle": "2026-06-04T02:50:00.485971Z",
+ "shell.execute_reply": "2026-06-04T02:50:00.485653Z"
}
},
"outputs": [
@@ -411,10 +411,10 @@
"id": "9ae594ce",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:56.282239Z",
- "iopub.status.busy": "2026-03-24T02:04:56.281653Z",
- "iopub.status.idle": "2026-03-24T02:04:56.679808Z",
- "shell.execute_reply": "2026-03-24T02:04:56.679395Z"
+ "iopub.execute_input": "2026-06-04T02:50:00.486897Z",
+ "iopub.status.busy": "2026-06-04T02:50:00.486847Z",
+ "iopub.status.idle": "2026-06-04T02:50:00.640185Z",
+ "shell.execute_reply": "2026-06-04T02:50:00.639847Z"
}
},
"outputs": [],
@@ -718,10 +718,10 @@
"id": "1e9ca71e",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:56.680935Z",
- "iopub.status.busy": "2026-03-24T02:04:56.680879Z",
- "iopub.status.idle": "2026-03-24T02:04:56.764686Z",
- "shell.execute_reply": "2026-03-24T02:04:56.764308Z"
+ "iopub.execute_input": "2026-06-04T02:50:00.641462Z",
+ "iopub.status.busy": "2026-06-04T02:50:00.641407Z",
+ "iopub.status.idle": "2026-06-04T02:50:00.739834Z",
+ "shell.execute_reply": "2026-06-04T02:50:00.739530Z"
}
},
"outputs": [
@@ -733,7 +733,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"SimpleSum\", sense=MINIMIZE, objective=sum(N.map(lambda (i: natural): x[i])), constraints=[])"
+ "Problem(name=\"SimpleSum\", sense=MINIMIZE, objective=sum(set(N).map(lambda (i: natural): x[i])), constraints=[])"
]
},
"execution_count": 5,
@@ -792,10 +792,10 @@
"id": "66868142",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:56.766601Z",
- "iopub.status.busy": "2026-03-24T02:04:56.766493Z",
- "iopub.status.idle": "2026-03-24T02:04:56.888085Z",
- "shell.execute_reply": "2026-03-24T02:04:56.887705Z"
+ "iopub.execute_input": "2026-06-04T02:50:00.740959Z",
+ "iopub.status.busy": "2026-06-04T02:50:00.740899Z",
+ "iopub.status.idle": "2026-06-04T02:50:00.874797Z",
+ "shell.execute_reply": "2026-06-04T02:50:00.874444Z"
}
},
"outputs": [
@@ -807,7 +807,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"WeightedSum\", sense=MINIMIZE, objective=sum(N.map(lambda (i: natural): a[i] * x[i])), constraints=[])"
+ "Problem(name=\"WeightedSum\", sense=MINIMIZE, objective=sum(set(N).map(lambda (i: natural): a[i] * x[i])), constraints=[])"
]
},
"execution_count": 6,
@@ -860,10 +860,10 @@
"id": "3a042c35",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:56.889056Z",
- "iopub.status.busy": "2026-03-24T02:04:56.888999Z",
- "iopub.status.idle": "2026-03-24T02:04:56.989045Z",
- "shell.execute_reply": "2026-03-24T02:04:56.988765Z"
+ "iopub.execute_input": "2026-06-04T02:50:00.875898Z",
+ "iopub.status.busy": "2026-06-04T02:50:00.875841Z",
+ "iopub.status.idle": "2026-06-04T02:50:01.022113Z",
+ "shell.execute_reply": "2026-06-04T02:50:01.021728Z"
}
},
"outputs": [
@@ -875,7 +875,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"SumAlongSet\", sense=MINIMIZE, objective=sum(C.map(lambda (i: natural): x[i])), constraints=[])"
+ "Problem(name=\"SumAlongSet\", sense=MINIMIZE, objective=sum(set(C).map(lambda (i: natural): x[i])), constraints=[])"
]
},
"execution_count": 7,
@@ -928,10 +928,10 @@
"id": "73042539",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:56.990163Z",
- "iopub.status.busy": "2026-03-24T02:04:56.990097Z",
- "iopub.status.idle": "2026-03-24T02:04:57.107395Z",
- "shell.execute_reply": "2026-03-24T02:04:57.106889Z"
+ "iopub.execute_input": "2026-06-04T02:50:01.023203Z",
+ "iopub.status.busy": "2026-06-04T02:50:01.023143Z",
+ "iopub.status.idle": "2026-06-04T02:50:01.165122Z",
+ "shell.execute_reply": "2026-06-04T02:50:01.164673Z"
}
},
"outputs": [
@@ -943,7 +943,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"EdgeSum\", sense=MINIMIZE, objective=sum(E.map(lambda ((i, j): Tuple[natural, natural]): x[i] * x[j])), constraints=[])"
+ "Problem(name=\"EdgeSum\", sense=MINIMIZE, objective=sum(set(E).map(lambda ((i, j): Tuple[natural, natural]): x[i] * x[j])), constraints=[])"
]
},
"execution_count": 8,
@@ -988,10 +988,10 @@
"id": "77c29124",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:57.109068Z",
- "iopub.status.busy": "2026-03-24T02:04:57.108950Z",
- "iopub.status.idle": "2026-03-24T02:04:57.259231Z",
- "shell.execute_reply": "2026-03-24T02:04:57.258498Z"
+ "iopub.execute_input": "2026-06-04T02:50:01.166100Z",
+ "iopub.status.busy": "2026-06-04T02:50:01.166046Z",
+ "iopub.status.idle": "2026-06-04T02:50:01.334665Z",
+ "shell.execute_reply": "2026-06-04T02:50:01.334292Z"
}
},
"outputs": [
@@ -1003,7 +1003,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"EdgeSumRows\", sense=MINIMIZE, objective=sum(E.rows().map(lambda ((l, r): Array[2; natural]): x[l] * x[r])), constraints=[])"
+ "Problem(name=\"EdgeSumRows\", sense=MINIMIZE, objective=sum(set(E.rows()).map(lambda ((l, r): Array[2; natural]): x[l] * x[r])), constraints=[])"
]
},
"execution_count": 9,
@@ -1056,10 +1056,10 @@
"id": "26009ba5",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:57.261020Z",
- "iopub.status.busy": "2026-03-24T02:04:57.260913Z",
- "iopub.status.idle": "2026-03-24T02:04:57.431214Z",
- "shell.execute_reply": "2026-03-24T02:04:57.430925Z"
+ "iopub.execute_input": "2026-06-04T02:50:01.335934Z",
+ "iopub.status.busy": "2026-06-04T02:50:01.335876Z",
+ "iopub.status.idle": "2026-06-04T02:50:01.576555Z",
+ "shell.execute_reply": "2026-06-04T02:50:01.576155Z"
}
},
"outputs": [
@@ -1071,7 +1071,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"ConditionalSum\", sense=MINIMIZE, objective=sum(N.flat_map(lambda (i: natural): N.map(lambda (j: natural): (i, j))).filter(lambda (i, j): i > j).map(lambda ((i, j): Tuple[natural, natural]): J[i, j] * x[i] * x[j])), constraints=[])"
+ "Problem(name=\"ConditionalSum\", sense=MINIMIZE, objective=sum(set(N.flat_map(lambda (i: natural): N.map(lambda (j: natural): (i, j))).filter(lambda (i, j): i > j)).map(lambda ((i, j): Tuple[natural, natural]): J[i, j] * x[i] * x[j])), constraints=[])"
]
},
"execution_count": 10,
@@ -1109,10 +1109,10 @@
"id": "18aba181",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:57.433370Z",
- "iopub.status.busy": "2026-03-24T02:04:57.433244Z",
- "iopub.status.idle": "2026-03-24T02:04:57.572388Z",
- "shell.execute_reply": "2026-03-24T02:04:57.572079Z"
+ "iopub.execute_input": "2026-06-04T02:50:01.577674Z",
+ "iopub.status.busy": "2026-06-04T02:50:01.577617Z",
+ "iopub.status.idle": "2026-06-04T02:50:01.779797Z",
+ "shell.execute_reply": "2026-06-04T02:50:01.779400Z"
}
},
"outputs": [
@@ -1124,7 +1124,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"ConditionalSum\", sense=MINIMIZE, objective=sum(N.flat_map(lambda (i: natural): i.map(lambda (j: natural): (i, j))).map(lambda ((i, j): Tuple[natural, natural]): J[i, j] * x[i] * x[j])), constraints=[])"
+ "Problem(name=\"ConditionalSum\", sense=MINIMIZE, objective=sum(set(N.flat_map(lambda (i: natural): i.map(lambda (j: natural): (i, j)))).map(lambda ((i, j): Tuple[natural, natural]): J[i, j] * x[i] * x[j])), constraints=[])"
]
},
"execution_count": 11,
@@ -1162,10 +1162,10 @@
"id": "4ed5b544",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:57.573609Z",
- "iopub.status.busy": "2026-03-24T02:04:57.573545Z",
- "iopub.status.idle": "2026-03-24T02:04:58.125109Z",
- "shell.execute_reply": "2026-03-24T02:04:58.124647Z"
+ "iopub.execute_input": "2026-06-04T02:50:01.780902Z",
+ "iopub.status.busy": "2026-06-04T02:50:01.780848Z",
+ "iopub.status.idle": "2026-06-04T02:50:02.762192Z",
+ "shell.execute_reply": "2026-06-04T02:50:02.761796Z"
}
},
"outputs": [
@@ -1175,13 +1175,13 @@
"$$\\begin{array}{rl}\n",
"\\text{Problem}\\colon &\\text{QuadraticKnapsackLogistics}\\\\\\displaystyle \\max &\\displaystyle \\sum _{j\\in J}{\\sum _{\\left\\langle i,k\\right\\rangle \\in \\mathop{\\mathtt{keys}}\\left(s\\right)}{{s}_{i,k}\\cdot {x}_{i,j}\\cdot {x}_{k,j}}}+\\sum _{i\\in I}{\\sum _{j\\in J}{{r}_{i}\\cdot {x}_{i,j}}}\\\\&\\\\\\text{s.t.}&\\\\&\\begin{aligned}\n",
"\\text{parcel\\_{}assign}&\\quad \\displaystyle \\sum _{j\\in J}{{x}_{i,j}}=1\\quad \\forall i\\;\\text{s.t.}\\;i\\in I\\\\\\text{truck\\_{}capacity}&\\quad \\displaystyle \\sum _{i\\in I}{{w}_{i}\\cdot {x}_{i,j}}\\leq {C}_{j}\\quad \\forall j\\;\\text{s.t.}\\;j\\in J\\end{aligned}\n",
- "\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{TotalDict}}\\left[I\\times J;\\left\\{0, 1\\right\\}\\right]&\\quad &\\text{a dictionary of }\\text{binary}\\text{ variables with key }I\\times J\\\\&&&\\text{荷物iをトラックjに割り当てる場合x[i,j] = 1、そうでない場合0}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}C&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathrm{J};\\mathbb{Z}\\right]&\\quad &\\text{A total dictionary of placeholders with keys }\\mathrm{J}\\text{, values in }\\mathbb{Z}\\\\&&&\\text{各トラックの荷重容量}\\\\&&&\\\\r&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathrm{I};\\mathbb{Z}\\right]&\\quad &\\text{A total dictionary of placeholders with keys }\\mathrm{I}\\text{, values in }\\mathbb{Z}\\\\&&&\\text{各荷物の基本利益}\\\\&&&\\\\s&\\in \\mathop{\\mathrm{PartialDict}}\\left[\\mathrm{I}\\times \\mathrm{I};\\mathbb{Z}\\right]&\\quad &\\text{A partial dictionary of placeholders with keys }\\left(\\mathrm{I},\\mathrm{I}\\right)\\text{, values in }\\mathbb{Z}\\\\&&&\\text{荷物のペア間のシナジーボーナス}\\\\&&&\\\\w&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathrm{I};\\mathbb{Z}\\right]&\\quad &\\text{A total dictionary of placeholders with keys }\\mathrm{I}\\text{, values in }\\mathbb{Z}\\\\&&&\\text{各荷物の重さ}\\\\\\end{alignedat}\\\\&\\\\&\\text{Category Labels:}\\\\&\\qquad \\begin{array}{rl}\n",
+ "\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in I,j\\in J\\right\\};\\left\\{0, 1\\right\\}\\right]&\\quad &\\text{a dictionary of }\\text{binary}\\text{ variables with key }\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in I,j\\in J\\right\\}\\\\&&&\\text{荷物iをトラックjに割り当てる場合x[i,j] = 1、そうでない場合0}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}C&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathrm{J};\\mathbb{Z}\\right]&\\quad &\\text{A total dictionary of placeholders with keys }\\mathrm{J}\\text{, values in }\\mathbb{Z}\\\\&&&\\text{各トラックの荷重容量}\\\\&&&\\\\r&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathrm{I};\\mathbb{Z}\\right]&\\quad &\\text{A total dictionary of placeholders with keys }\\mathrm{I}\\text{, values in }\\mathbb{Z}\\\\&&&\\text{各荷物の基本利益}\\\\&&&\\\\s&\\in \\mathop{\\mathrm{PartialDict}}\\left[\\mathrm{I}\\times \\mathrm{I};\\mathbb{Z}\\right]&\\quad &\\text{A partial dictionary of placeholders with keys }\\left(\\mathrm{I},\\mathrm{I}\\right)\\text{, values in }\\mathbb{Z}\\\\&&&\\text{荷物のペア間のシナジーボーナス}\\\\&&&\\\\w&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathrm{I};\\mathbb{Z}\\right]&\\quad &\\text{A total dictionary of placeholders with keys }\\mathrm{I}\\text{, values in }\\mathbb{Z}\\\\&&&\\text{各荷物の重さ}\\\\\\end{alignedat}\\\\&\\\\&\\text{Category Labels:}\\\\&\\qquad \\begin{array}{rl}\n",
"I&\\text{荷物のラベル}\\\\J&\\text{トラックのラベル}\\end{array}\n",
"\\end{array}\n",
"$$"
],
"text/plain": [
- "Problem(name=\"QuadraticKnapsackLogistics\", sense=MAXIMIZE, objective=sum(J.flat_map(lambda (j: CategoryLabel(\"J\")): s.keys().map(lambda ((i, k): Tuple[CategoryLabel(\"I\"), CategoryLabel(\"I\")]): (j, i, k))).map(lambda ((j, i, k): Tuple[CategoryLabel(\"J\"), CategoryLabel(\"I\"), CategoryLabel(\"I\")]): s[i, k] * x[i, j] * x[k, j])) + sum(I.flat_map(lambda (i: CategoryLabel(\"I\")): J.map(lambda (j: CategoryLabel(\"J\")): (i, j))).map(lambda ((i, j): Tuple[CategoryLabel(\"I\"), CategoryLabel(\"J\")]): r[i] * x[i, j])), constraints={parcel_assign: [Constraint(name=\"parcel_assign\", , lambda i: sum(J.map(lambda (j: CategoryLabel(\"J\")): x[i, j])) == 1, domain=I),],truck_capacity: [Constraint(name=\"truck_capacity\", , lambda j: sum(I.map(lambda (i: CategoryLabel(\"I\")): w[i] * x[i, j])) <= C[j], domain=J),],})"
+ "Problem(name=\"QuadraticKnapsackLogistics\", sense=MAXIMIZE, objective=sum(set(J.flat_map(lambda (j: CategoryLabel(\"J\")): s.keys().map(lambda ((i, k): Tuple[CategoryLabel(\"I\"), CategoryLabel(\"I\")]): (j, i, k)))).map(lambda ((j, i, k): Tuple[CategoryLabel(\"J\"), CategoryLabel(\"I\"), CategoryLabel(\"I\")]): s[i, k] * x[i, j] * x[k, j])) + sum(set(I.flat_map(lambda (i: CategoryLabel(\"I\")): J.map(lambda (j: CategoryLabel(\"J\")): (i, j)))).map(lambda ((i, j): Tuple[CategoryLabel(\"I\"), CategoryLabel(\"J\")]): r[i] * x[i, j])), constraints={parcel_assign: [Constraint(name=\"parcel_assign\", , lambda i: sum(set(J).map(lambda (j: CategoryLabel(\"J\")): x[i, j])) == 1, domain=I),],truck_capacity: [Constraint(name=\"truck_capacity\", , lambda j: sum(set(I).map(lambda (i: CategoryLabel(\"I\")): w[i] * x[i, j])) <= C[j], domain=J),],})"
]
},
"execution_count": 12,
@@ -1264,10 +1264,10 @@
"id": "1480ae56",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:58.126253Z",
- "iopub.status.busy": "2026-03-24T02:04:58.126188Z",
- "iopub.status.idle": "2026-03-24T02:04:58.627107Z",
- "shell.execute_reply": "2026-03-24T02:04:58.626640Z"
+ "iopub.execute_input": "2026-06-04T02:50:02.763194Z",
+ "iopub.status.busy": "2026-06-04T02:50:02.763138Z",
+ "iopub.status.idle": "2026-06-04T02:50:02.982007Z",
+ "shell.execute_reply": "2026-06-04T02:50:02.981670Z"
}
},
"outputs": [],
@@ -1325,10 +1325,10 @@
"id": "7ba11d75",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:58.628501Z",
- "iopub.status.busy": "2026-03-24T02:04:58.628434Z",
- "iopub.status.idle": "2026-03-24T02:04:58.730997Z",
- "shell.execute_reply": "2026-03-24T02:04:58.730627Z"
+ "iopub.execute_input": "2026-06-04T02:50:02.983348Z",
+ "iopub.status.busy": "2026-06-04T02:50:02.983293Z",
+ "iopub.status.idle": "2026-06-04T02:50:03.097086Z",
+ "shell.execute_reply": "2026-06-04T02:50:03.096752Z"
}
},
"outputs": [
@@ -1342,7 +1342,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"OneHot\", sense=MINIMIZE, objective=0, constraints={onehot: [Constraint(name=\"onehot\", sense=EQUAL, left=sum(x), right=1, shape=Scalar(Binary)),],})"
+ "Problem(name=\"OneHot\", sense=MINIMIZE, objective=0, constraints={onehot: [Constraint(name=\"onehot\", sense=EQUAL, left=sum(x), right=1, shape=Scalar(Natural)),],})"
]
},
"execution_count": 14,
@@ -1391,10 +1391,10 @@
"id": "568c762c",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:58.732526Z",
- "iopub.status.busy": "2026-03-24T02:04:58.732445Z",
- "iopub.status.idle": "2026-03-24T02:04:58.943372Z",
- "shell.execute_reply": "2026-03-24T02:04:58.942971Z"
+ "iopub.execute_input": "2026-06-04T02:50:03.098383Z",
+ "iopub.status.busy": "2026-06-04T02:50:03.098323Z",
+ "iopub.status.idle": "2026-06-04T02:50:03.361793Z",
+ "shell.execute_reply": "2026-06-04T02:50:03.361355Z"
}
},
"outputs": [
@@ -1408,7 +1408,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"KHotOverSet\", sense=MINIMIZE, objective=0, constraints={k-hot_constraint: [Constraint(name=\"k-hot_constraint\", , lambda a: sum(C[a].map(lambda (i: natural): x[i])) == K[a], domain=set(M)),],})"
+ "Problem(name=\"KHotOverSet\", sense=MINIMIZE, objective=0, constraints={k-hot_constraint: [Constraint(name=\"k-hot_constraint\", , lambda a: sum(set(C[a]).map(lambda (i: natural): x[i])) == K[a], domain=set(M)),],})"
]
},
"execution_count": 15,
@@ -1473,10 +1473,10 @@
"id": "2decc57b",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:58.944556Z",
- "iopub.status.busy": "2026-03-24T02:04:58.944496Z",
- "iopub.status.idle": "2026-03-24T02:04:59.455793Z",
- "shell.execute_reply": "2026-03-24T02:04:59.455480Z"
+ "iopub.execute_input": "2026-06-04T02:50:03.363441Z",
+ "iopub.status.busy": "2026-06-04T02:50:03.363357Z",
+ "iopub.status.idle": "2026-06-04T02:50:03.711592Z",
+ "shell.execute_reply": "2026-06-04T02:50:03.711205Z"
}
},
"outputs": [
@@ -1778,10 +1778,10 @@
"id": "d50b156f",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:59.457088Z",
- "iopub.status.busy": "2026-03-24T02:04:59.457034Z",
- "iopub.status.idle": "2026-03-24T02:04:59.590593Z",
- "shell.execute_reply": "2026-03-24T02:04:59.590182Z"
+ "iopub.execute_input": "2026-06-04T02:50:03.712672Z",
+ "iopub.status.busy": "2026-06-04T02:50:03.712618Z",
+ "iopub.status.idle": "2026-06-04T02:50:03.908662Z",
+ "shell.execute_reply": "2026-06-04T02:50:03.908310Z"
}
},
"outputs": [
@@ -1793,7 +1793,7 @@
"$$"
],
"text/plain": [
- "Problem(name=\"My Problem\", sense=MINIMIZE, objective=sum(N.filter(lambda i: i % 2 == 0).flat_map(lambda (i: natural): i.map(lambda (j: natural): (i, j))).map(lambda ((i, j): Tuple[natural, natural]): x[i, j])), constraints=[])"
+ "Problem(name=\"My Problem\", sense=MINIMIZE, objective=sum(set(N.filter(lambda i: i % 2 == 0).flat_map(lambda (i: natural): i.map(lambda (j: natural): (i, j)))).map(lambda ((i, j): Tuple[natural, natural]): x[i, j])), constraints=[])"
]
},
"execution_count": 17,
@@ -1825,10 +1825,10 @@
"id": "7da928f9",
"metadata": {
"execution": {
- "iopub.execute_input": "2026-03-24T02:04:59.591623Z",
- "iopub.status.busy": "2026-03-24T02:04:59.591562Z",
- "iopub.status.idle": "2026-03-24T02:04:59.696371Z",
- "shell.execute_reply": "2026-03-24T02:04:59.695995Z"
+ "iopub.execute_input": "2026-06-04T02:50:03.909714Z",
+ "iopub.status.busy": "2026-06-04T02:50:03.909655Z",
+ "iopub.status.idle": "2026-06-04T02:50:04.050522Z",
+ "shell.execute_reply": "2026-06-04T02:50:04.050187Z"
}
},
"outputs": [
@@ -1896,7 +1896,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
- "version": "3.11.11"
+ "version": "3.11.14"
}
},
"nbformat": 4,
diff --git a/docs/ja/releases/jijmodeling-2.5.0.ipynb b/docs/ja/releases/jijmodeling-2.5.0.ipynb
new file mode 100644
index 00000000..c999fbde
--- /dev/null
+++ b/docs/ja/releases/jijmodeling-2.5.0.ipynb
@@ -0,0 +1,645 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "# JijModeling 2.5.0 リリースノート"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "## 機能強化"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### Decorator API における `jm.min`、`jm.max`、`jm.set` の内包表記サポート\n",
+ "\n",
+ "旧来は、Decorator API を利用する際に内包表記(Python のジェネレータ式)を引数として受け取れるのは {py:func}`jm.sum ` と {py:func}`jm.prod ` のみでした。\n",
+ "\n",
+ "本バージョンから、{py:func}`jm.min `、{py:func}`jm.max `、{py:func}`jm.set ` の一引数呼び出しでも、同様に内包表記を受け取れるようになりました。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 1,
+ "id": "f89d0a5d",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-04T03:14:26.923762Z",
+ "iopub.status.busy": "2026-06-04T03:14:26.923697Z",
+ "iopub.status.idle": "2026-06-04T03:14:27.119114Z",
+ "shell.execute_reply": "2026-06-04T03:14:27.118785Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$\\begin{array}{rl}\n",
+ "\\text{Problem}\\colon &\\text{min/max/set comprehension example}\\\\\\displaystyle \\min &\\displaystyle \\min _{i=0}^{N-1}{{x}_{i}}+\\max _{\\substack{i=0\\\\i\\neq 0}}^{N-1}{{x}_{i}}\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{Array}}\\left[N;\\left\\{0, 1\\right\\}\\right]&\\quad &1\\text{-dim binary variable}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}N&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\\\end{alignedat}\\end{array}\n",
+ "$$"
+ ],
+ "text/plain": [
+ "Problem(name=\"min/max/set comprehension example\", sense=MINIMIZE, objective=min(set(N).map(lambda (i: natural): x[i])) + max(set(set(set(N.filter(lambda i: i != 0)).map(lambda (i: natural): i))).map(lambda (i: natural): x[i])), constraints=[])"
+ ]
+ },
+ "execution_count": 1,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import jijmodeling as jm\n",
+ "\n",
+ "\n",
+ "@jm.Problem.define(\"min/max/set comprehension example\")\n",
+ "def problem(problem: jm.DecoratedProblem):\n",
+ " N = problem.Length()\n",
+ " x = problem.BinaryVar(shape=N)\n",
+ "\n",
+ " nonzero = jm.set(i for i in N if i != 0)\n",
+ " problem += jm.min(x[i] for i in N) + jm.max(x[i] for i in nonzero)\n",
+ "\n",
+ "\n",
+ "problem"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "d74afece",
+ "metadata": {},
+ "source": [
+ "### 数式出力:制約の添え字が読みやすく\n",
+ "\n",
+ "辞書や配列同士の直接比較による制約条件が、$\\LaTeX$ 出力では $\\forall$ を使って出力されるようになり、可読性が向上しました。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 2,
+ "id": "2380843f",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-04T03:14:27.120281Z",
+ "iopub.status.busy": "2026-06-04T03:14:27.120221Z",
+ "iopub.status.idle": "2026-06-04T03:14:27.922643Z",
+ "shell.execute_reply": "2026-06-04T03:14:27.922331Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$\\begin{array}{rl}\n",
+ "\\text{Problem}\\colon &\\text{container-vs-scalar-comp}\\\\\\displaystyle \\min &\\displaystyle 0\\\\&\\\\\\text{s.t.}&\\\\&\\begin{aligned}\n",
+ "\\text{dict-vs-dict}&\\quad \\displaystyle {y}_{i,j}\\leq {z}_{i,j}\\quad \\forall \\left(i,j\\right)\\;\\text{s.t.}\\;i\\in L,j\\in \\left\\{0,\\ldots ,N-1-1\\right\\}\\\\\\text{dict-vs-scalar}&\\quad \\displaystyle {y}_{i,j}\\leq 5\\quad \\forall \\left(i,j\\right)\\;\\text{s.t.}\\;i\\in L,j\\in \\left\\{0,\\ldots ,N-1-1\\right\\}\\\\\\text{scalar-vs-tensor}&\\quad \\displaystyle {x}_{i}\\geq 1\\quad \\forall i\\;\\text{s.t.}\\;i\\in \\left\\{0,\\ldots ,N-1\\right\\}\\\\\\text{tensor-vs-tensor}&\\quad \\displaystyle {x}_{i}\\leq {x}_{i}\\quad \\forall i\\;\\text{s.t.}\\;i\\in \\left\\{0,\\ldots ,N-1\\right\\}\\end{aligned}\n",
+ "\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{Array}}\\left[N;\\left\\{0, 1\\right\\}\\right]&\\quad &1\\text{-dim binary variable}\\\\y&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in L,j\\in N-1\\right\\};\\left\\{0, 1\\right\\}\\right]&\\quad &\\text{a dictionary of }\\text{binary}\\text{ variables with key }\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in L,j\\in N-1\\right\\}\\\\z&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in L,j\\in N-1\\right\\};\\left\\{0, 1\\right\\}\\right]&\\quad &\\text{a dictionary of }\\text{binary}\\text{ variables with key }\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in L,j\\in N-1\\right\\}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}N&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\\\end{alignedat}\\\\&\\\\&\\text{Category Labels:}\\\\&\\qquad \\begin{array}{rl}\n",
+ "L&\\text{Category Label}\\end{array}\n",
+ "\\end{array}\n",
+ "$$"
+ ],
+ "text/plain": [
+ "Problem(name=\"container-vs-scalar-comp\", sense=MINIMIZE, objective=0, constraints={dict-vs-dict: [Constraint(name=\"dict-vs-dict\", sense=LESS_THAN_EQUAL, left=y, right=z, shape=SameTotalDict { key: Located { inner: ElementOf { set: Located { inner: ToSet { operand: Located { inner: Tuple { components: [Located { inner: IterCategoryLabels { name: \"L\", ext: WithType { type_: Set { element: Located { inner: CategoryLabel { name: Located { inner: \"L\", src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) }, Located { inner: OverloadedBinaryNumeric { operator: Located { inner: Sub, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 9, column: 40 }, end: SrcLoc { line: 9, column: 45 } }) }, lhs: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: Some(SetStyle { element: None, kind: Natural }), subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 6, column: 8 }, end: SrcLoc { line: 6, column: 25 } }) }, rhs: Located { inner: Literal { literal: Located { inner: Integer { value: Located { inner: 1, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 9, column: 40 }, end: SrcLoc { line: 9, column: 45 } }) }, ext: WithType { type_: Scalar { mode: Static, kind: Binary }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: NoSrcSpan }, ext: WithType { type_: Scalar { mode: Static, kind: Binary }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 9, column: 40 }, end: SrcLoc { line: 9, column: 45 } }) }, ext: WithTypeAndDictionary { type_: Scalar { mode: Static, kind: Natural }, dictionary: Scalar, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 9, column: 40 }, end: SrcLoc { line: 9, column: 45 } }) }], ext: WithType { type_: Tuple { components: [Located { inner: Set { element: Located { inner: CategoryLabel { name: Located { inner: \"L\", src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }, src_span: NoSrcSpan }, Located { inner: Scalar { mode: Static, kind: Natural }, src_span: NoSrcSpan }] }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) }, ext: WithTypeAndDictionary { type_: Set { element: Located { inner: Tuple { components: [Located { inner: CategoryLabel { name: Located { inner: \"L\", src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }, src_span: NoSrcSpan }, Located { inner: Scalar { mode: Static, kind: Natural }, src_span: NoSrcSpan }] }, src_span: NoSrcSpan } }, dictionary: Product { component_dicts: [Set(CategoryLabel { name: Located { inner: \"L\", src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }), FromNatural] }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }, src_span: NoSrcSpan }, value: Located { inner: Scalar { mode: Dynamic, kind: Binary }, src_span: NoSrcSpan }, scalar: Binary }),],dict-vs-scalar: [Constraint(name=\"dict-vs-scalar\", sense=LESS_THAN_EQUAL, left=y, right=5, shape=TotalDictVsScalar { key: Located { inner: ElementOf { set: Located { inner: ToSet { operand: Located { inner: Tuple { components: [Located { inner: IterCategoryLabels { name: \"L\", ext: WithType { type_: Set { element: Located { inner: CategoryLabel { name: Located { inner: \"L\", src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) }, Located { inner: OverloadedBinaryNumeric { operator: Located { inner: Sub, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 9, column: 40 }, end: SrcLoc { line: 9, column: 45 } }) }, lhs: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: Some(SetStyle { element: None, kind: Natural }), subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 6, column: 8 }, end: SrcLoc { line: 6, column: 25 } }) }, rhs: Located { inner: Literal { literal: Located { inner: Integer { value: Located { inner: 1, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 9, column: 40 }, end: SrcLoc { line: 9, column: 45 } }) }, ext: WithType { type_: Scalar { mode: Static, kind: Binary }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: NoSrcSpan }, ext: WithType { type_: Scalar { mode: Static, kind: Binary }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 9, column: 40 }, end: SrcLoc { line: 9, column: 45 } }) }, ext: WithTypeAndDictionary { type_: Scalar { mode: Static, kind: Natural }, dictionary: Scalar, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 9, column: 40 }, end: SrcLoc { line: 9, column: 45 } }) }], ext: WithType { type_: Tuple { components: [Located { inner: Set { element: Located { inner: CategoryLabel { name: Located { inner: \"L\", src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }, src_span: NoSrcSpan }, Located { inner: Scalar { mode: Static, kind: Natural }, src_span: NoSrcSpan }] }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) }, ext: WithTypeAndDictionary { type_: Set { element: Located { inner: Tuple { components: [Located { inner: CategoryLabel { name: Located { inner: \"L\", src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }, src_span: NoSrcSpan }, Located { inner: Scalar { mode: Static, kind: Natural }, src_span: NoSrcSpan }] }, src_span: NoSrcSpan } }, dictionary: Product { component_dicts: [Set(CategoryLabel { name: Located { inner: \"L\", src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }), FromNatural] }, inner: LaTeXMetadata { custom_latex: None, set_style: None, subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 9, column: 8 }, end: SrcLoc { line: 9, column: 47 } }) } }, src_span: NoSrcSpan }, value: Located { inner: Scalar { mode: Dynamic, kind: Binary }, src_span: NoSrcSpan }, scalar: Natural }),],scalar-vs-tensor: [Constraint(name=\"scalar-vs-tensor\", sense=GREATER_THAN_EQUAL, left=x, right=1, shape=TensorLikeVsScalar { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: Some(SetStyle { element: None, kind: Natural }), subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 6, column: 8 }, end: SrcLoc { line: 6, column: 25 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 6, column: 8 }, end: SrcLoc { line: 6, column: 25 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Binary }, src_span: NoSrcSpan } }), scalar: Binary }),],tensor-vs-tensor: [Constraint(name=\"tensor-vs-tensor\", sense=LESS_THAN_EQUAL, left=x, right=x, shape=SameTensorLike { spec: Tensor(TensorSpec { shape: [Specified(Located { inner: RangeNat { upper_bound: Located { inner: FVar { name: \"N\", ext: WithType { type_: Scalar { mode: Static, kind: Natural }, inner: LaTeXMetadata { custom_latex: None, set_style: Some(SetStyle { element: None, kind: Natural }), subscript_styles: [] } } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 6, column: 8 }, end: SrcLoc { line: 6, column: 25 } }) } }, src_span: Real(RealSrcSpan { filename: \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_44063/4122996662.py\", start: SrcLoc { line: 6, column: 8 }, end: SrcLoc { line: 6, column: 25 } }) })], element: Located { inner: Scalar { mode: Dynamic, kind: Binary }, src_span: NoSrcSpan } }), scalar: Binary }),],})"
+ ]
+ },
+ "execution_count": 2,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import jijmodeling as jm\n",
+ "\n",
+ "\n",
+ "@jm.Problem.define(\"container-vs-scalar-comp\")\n",
+ "def problem(problem: jm.DecoratedProblem):\n",
+ " N = problem.Natural()\n",
+ " L = problem.CategoryLabel()\n",
+ " x = problem.BinaryVar(shape=N)\n",
+ " y = problem.BinaryVar(dict_keys=(L, N - 1))\n",
+ " z = problem.BinaryVar(dict_keys=(L, N - 1))\n",
+ "\n",
+ " problem += problem.Constraint(\"scalar-vs-tensor\", 1 <= x)\n",
+ " problem += problem.Constraint(\"tensor-vs-tensor\", x <= x)\n",
+ " problem += problem.Constraint(\"dict-vs-scalar\", y <= 5)\n",
+ " problem += problem.Constraint(\"dict-vs-dict\", y <= z)\n",
+ "\n",
+ "\n",
+ "problem"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8079b7de",
+ "metadata": {},
+ "source": [
+ "### `Placeholder` の `dtype` に上限付き自然数とカテゴリーラベルを指定できるように\n",
+ "\n",
+ "{py:meth}`Problem.Placeholder `(および `Graph`、`PartialDict`、`TotalDict` などの型付き構築子)の `dtype` 引数は、これまで `jm.DataType`、NumPy のスカラー型、あるいはそれらから構成されるタプルに限られていました。\n",
+ "本バージョンから、`dtype` には次のものも追加で指定できるようになりました:\n",
+ "\n",
+ "- 自然数式 `n`:値が `n` より真に小さい自然数(すなわち $\\{0, 1, \\dots, n - 1\\}$ のいずれか)であることを表します。`n` には Python の整数リテラルのほか、自然数型の他のプレースホルダーや {py:class}`~jijmodeling.NamedExpr` などの式も渡せます。\n",
+ "- {py:class}`~jijmodeling.CategoryLabel` `L`:値が `L` のラベルのうちのいずれかであることを表します。\n",
+ "- 上記(あるいは他の指定可能な `dtype`)を要素とするタプル `(T, T, ...)`。\n",
+ "\n",
+ "上記の `dtype` に関する追加に合わせて、型付き構築子である {py:meth}`Problem.Natural `(およびそのエイリアスである {py:meth}`Problem.Length ` と {py:meth}`Problem.Dim `)でも `less_than=natexpr` キーワード引数を指定できるようになりました。これは `Placeholder(dtype=natexpr)` と同じく上限付き自然数型のプレースホルダーを宣言するもので、自然数値のプレースホルダーであるという意図をより明瞭に表現する書き方です。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 3,
+ "id": "7f152946",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-04T03:14:27.923761Z",
+ "iopub.status.busy": "2026-06-04T03:14:27.923698Z",
+ "iopub.status.idle": "2026-06-04T03:14:27.992682Z",
+ "shell.execute_reply": "2026-06-04T03:14:27.992284Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$\\begin{array}{rl}\n",
+ "\\text{Problem}\\colon &\\text{bounded natural shorthand}\\\\\\displaystyle \\min &\\displaystyle {x}_{i}\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{Array}}\\left[N;\\left\\{0, 1\\right\\}\\right]&\\quad &1\\text{-dim binary variable}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}i&\\in N&\\quad &\\text{A scalar placeholder in }N\\\\N&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\\\end{alignedat}\\end{array}\n",
+ "$$"
+ ],
+ "text/plain": [
+ "Problem(name=\"bounded natural shorthand\", sense=MINIMIZE, objective=x[i], constraints=[])"
+ ]
+ },
+ "execution_count": 3,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import jijmodeling as jm\n",
+ "\n",
+ "problem = jm.Problem(\"bounded natural shorthand\")\n",
+ "N = problem.Natural(\"N\")\n",
+ "i = problem.Natural(\"i\", less_than=N)\n",
+ "x = problem.BinaryVar(\"x\", shape=(N,))\n",
+ "problem += x[i]\n",
+ "\n",
+ "problem"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "116eef82",
+ "metadata": {},
+ "source": [
+ "Decorator API でも同じキーワード引数を利用できます。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 4,
+ "id": "9eb0de5b",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-04T03:14:27.994506Z",
+ "iopub.status.busy": "2026-06-04T03:14:27.994428Z",
+ "iopub.status.idle": "2026-06-04T03:14:28.068682Z",
+ "shell.execute_reply": "2026-06-04T03:14:28.068298Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$\\begin{array}{rl}\n",
+ "\\text{Problem}\\colon &\\text{bounded natural shorthand in Decorator API}\\\\\\displaystyle \\min &\\displaystyle {x}_{i}\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{Array}}\\left[N;\\left\\{0, 1\\right\\}\\right]&\\quad &1\\text{-dim binary variable}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}i&\\in N&\\quad &\\text{A scalar placeholder in }N\\\\N&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\\\end{alignedat}\\end{array}\n",
+ "$$"
+ ],
+ "text/plain": [
+ "Problem(name=\"bounded natural shorthand in Decorator API\", sense=MINIMIZE, objective=x[i], constraints=[])"
+ ]
+ },
+ "execution_count": 4,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "@jm.Problem.define(\"bounded natural shorthand in Decorator API\")\n",
+ "def problem(problem: jm.DecoratedProblem):\n",
+ " N = problem.Length()\n",
+ " i = problem.Dim(less_than=N)\n",
+ " x = problem.BinaryVar(shape=(N,))\n",
+ " problem += x[i]\n",
+ "\n",
+ "\n",
+ "problem"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "f8fdfd33",
+ "metadata": {},
+ "source": [
+ "より複雑な例として、以下の、無向グラフ $G = (V, E)$ についての最適化問題を考えます。以前のバージョンでは辺の端点の型は単なる自然数として宣言する必要がありましたが、本リリースから、端点が $[0, V)$ の範囲に収まることを `dtype` を通じて表現できるようになりました:"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 5,
+ "id": "7109b6c5",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-04T03:14:28.069633Z",
+ "iopub.status.busy": "2026-06-04T03:14:28.069578Z",
+ "iopub.status.idle": "2026-06-04T03:14:28.240888Z",
+ "shell.execute_reply": "2026-06-04T03:14:28.240532Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$\\begin{array}{rl}\n",
+ "\\text{Problem}\\colon &\\text{max cut}\\\\\\displaystyle \\max &\\displaystyle \\sum _{\\left\\langle u,v\\right\\rangle \\in E}{{\\left({x}_{u}-{x}_{v}\\right)}^{2}}\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{Array}}\\left[V;\\left\\{0, 1\\right\\}\\right]&\\quad &1\\text{-dim binary variable}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}E&\\in \\mathop{\\mathrm{Array}}\\left[(-);V\\times V\\right]&\\quad &1\\text{-dimensional array of placeholders with elements in }V\\times V\\\\V&\\in \\mathbb{N}&\\quad &\\text{A scalar placeholder in }\\mathbb{N}\\\\\\end{alignedat}\\end{array}\n",
+ "$$"
+ ],
+ "text/plain": [
+ "Problem(name=\"max cut\", sense=MAXIMIZE, objective=sum(E.map(lambda ((u, v): Tuple[V, V]): (x[u] - x[v]) ** 2)), constraints=[])"
+ ]
+ },
+ "execution_count": 5,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import jijmodeling as jm\n",
+ "\n",
+ "problem = jm.Problem(\"max cut\", sense=jm.ProblemSense.MAXIMIZE)\n",
+ "V = problem.Natural(\"V\")\n",
+ "# `E` の各要素が `[0, V)` のペアであることを直接宣言できるようになりました\n",
+ "# (従来は dtype=(jm.DataType.Natural, jm.DataType.Natural) と書く必要がありました)。\n",
+ "# この宣言は、 `problem.graph(\"E\", dtype=V)` と書くこともできます。\n",
+ "E = problem.Placeholder(\"E\", dtype=(V, V), ndim=1)\n",
+ "x = problem.BinaryVar(\"x\", shape=(V,))\n",
+ "problem += jm.map(lambda u, v: (x[u] - x[v]) ** 2, E).sum()\n",
+ "\n",
+ "problem"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "7117bf2d",
+ "metadata": {},
+ "source": [
+ "また、グラフの頂点にラベルを用いる場合を想定して、{py:class}`~jijmodeling.CategoryLabel` をそのまま `dtype` として指定することもできるようになりました。\n",
+ "以下の例は、ラベルが頂点として使われるグラフの上で({py:meth}`Problem.Graph` を用いて)同じ問題を定義するものです。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 6,
+ "id": "94a7c425",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-04T03:14:28.241975Z",
+ "iopub.status.busy": "2026-06-04T03:14:28.241900Z",
+ "iopub.status.idle": "2026-06-04T03:14:28.635269Z",
+ "shell.execute_reply": "2026-06-04T03:14:28.634858Z"
+ }
+ },
+ "outputs": [],
+ "source": [
+ "problem = jm.Problem(\"max cut on a labeled graph\", sense=jm.ProblemSense.MAXIMIZE)\n",
+ "L = problem.CategoryLabel(\"L\")\n",
+ "edges = problem.Graph(\"edges\", dtype=L)\n",
+ "x = problem.BinaryVar(\"x\", dict_keys=L)\n",
+ "problem += jm.map(lambda u, v: (x[u] - x[v]) ** 2, edges).sum()\n",
+ "\n",
+ "compiler = jm.Compiler.from_problem(\n",
+ " problem,\n",
+ " {\n",
+ " \"L\": [\"A\", \"B\", \"C\"],\n",
+ " \"edges\": [(\"A\", \"B\"), (\"B\", \"C\"), (\"C\", \"A\")],\n",
+ " },\n",
+ ")\n",
+ "instance = compiler.eval_problem(problem)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "67fa5ca1",
+ "metadata": {},
+ "source": [
+ "インスタンスデータとして与えられた値が宣言された `dtype` と整合しない場合(たとえば、頂点インデックスが `V` 以上であったり、`L` に含まれないラベルが渡されたりした場合)、コンパイラは範囲外エラーを報告します。"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 目的関数を代入で再設定できるように\n",
+ "\n",
+ "本バージョンから {py:attr}`Problem.objective ` に直接代入して置き換えられるようになりました。\n",
+ "{py:class}`~jijmodeling.DecoratedProblem` でも同じように `problem.objective = ...` と書けます。\n",
+ "\n",
+ "たとえば、一度設定した目的関数を別の式に置き換えたり、`problem.objective = 0` として目的関数を明示的にリセットしたりできます。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 7,
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-04T03:14:28.636518Z",
+ "iopub.status.busy": "2026-06-04T03:14:28.636430Z",
+ "iopub.status.idle": "2026-06-04T03:14:28.706288Z",
+ "shell.execute_reply": "2026-06-04T03:14:28.705979Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$\\begin{array}{rl}\n",
+ "\\text{Problem}\\colon &\\text{set objective example}\\\\\\displaystyle \\min &\\displaystyle z\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\left\\{0, 1\\right\\}&\\quad &0\\text{-dim binary variable}\\\\y&\\in \\left\\{0, 1\\right\\}&\\quad &0\\text{-dim binary variable}\\\\z&\\in \\left\\{0, 1\\right\\}&\\quad &0\\text{-dim binary variable}\\\\\\end{alignedat}\\end{array}\n",
+ "$$"
+ ],
+ "text/plain": [
+ "Problem(name=\"set objective example\", sense=MINIMIZE, objective=z, constraints=[])"
+ ]
+ },
+ "execution_count": 7,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import jijmodeling as jm\n",
+ "\n",
+ "problem = jm.Problem(\"set objective example\")\n",
+ "x = problem.BinaryVar(\"x\")\n",
+ "y = problem.BinaryVar(\"y\")\n",
+ "\n",
+ "problem.objective = x\n",
+ "problem.objective = y\n",
+ "problem.objective = 0\n",
+ "\n",
+ "\n",
+ "@problem.update\n",
+ "def _(problem: jm.DecoratedProblem):\n",
+ " z = problem.BinaryVar()\n",
+ " problem.objective = z\n",
+ "\n",
+ "\n",
+ "problem"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "937e1f3d",
+ "metadata": {},
+ "source": [
+ "### 生成関数による辞書の生成\n",
+ "\n",
+ "本バージョンから、{py:func}`~jijmodeling.gendict` 関数により、キー集合と生成関数を指定して配列を生成できるようになりました。\n",
+ "これは配列の {py:func}`~jijmodeling.genarray` や numpy の {py:func}`~numpy.fromfunction` と類似の機能です。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 8,
+ "id": "fe75848f",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-04T03:14:28.707329Z",
+ "iopub.status.busy": "2026-06-04T03:14:28.707269Z",
+ "iopub.status.idle": "2026-06-04T03:14:28.806463Z",
+ "shell.execute_reply": "2026-06-04T03:14:28.805959Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$\\begin{array}{rl}\n",
+ "\\text{Problem}\\colon &\\text{gendict example}\\\\\\displaystyle \\min &\\displaystyle 0\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathrm{K};\\left\\{0, 1\\right\\}\\right]&\\quad &\\text{a dictionary of }\\text{binary}\\text{ variables with key }K\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}a&\\in \\mathop{\\mathrm{TotalDict}}\\left[\\mathrm{K};\\mathbb{R}\\right]&\\quad &\\text{A total dictionary of placeholders with keys }\\mathrm{K}\\text{, values in }\\mathbb{R}\\\\\\end{alignedat}\\\\&\\\\&\\text{Category Labels:}\\\\&\\qquad \\begin{array}{rl}\n",
+ "K&\\text{Category Label}\\end{array}\n",
+ "\\\\&\\\\&\\text{Named Expressions:}\\\\&\\qquad \\begin{alignedat}{2}Sums&=\\mathop{\\mathtt{gen\\_{}dict}}\\left(\\lambda \\left(k\\in \\mathrm{K}\\right)\\ldotp {a}_{k}\\cdot {x}_{k},K\\right)&\\quad &\\in \\mathop{\\mathrm{TotalDict}}\\left[K;\\mathbb{R}\\right]\\\\\\end{alignedat}\\end{array}\n",
+ "$$"
+ ],
+ "text/plain": [
+ "Problem(name=\"gendict example\", sense=MINIMIZE, objective=0, constraints=[])"
+ ]
+ },
+ "execution_count": 8,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import jijmodeling as jm\n",
+ "\n",
+ "\n",
+ "problem = jm.Problem(\"gendict example\")\n",
+ "K = problem.CategoryLabel(\"K\")\n",
+ "a = problem.Float(\"a\", dict_keys=K)\n",
+ "x = problem.BinaryVar(\"x\", dict_keys=K)\n",
+ "Sums = problem.NamedExpr(\"Sums\", jm.gendict(K, lambda k: a[k] * x[k]))\n",
+ "\n",
+ "\n",
+ "problem"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "16268a26",
+ "metadata": {},
+ "source": [
+ "また、`jm.genarray` と同じように、Decorator API を利用している場合、内包表記を用いることもできます。ただし、`for .. in ...` は一つしか許容されません。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 9,
+ "id": "9bd10a27",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-04T03:14:28.807608Z",
+ "iopub.status.busy": "2026-06-04T03:14:28.807546Z",
+ "iopub.status.idle": "2026-06-04T03:14:28.903833Z",
+ "shell.execute_reply": "2026-06-04T03:14:28.903486Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$\\begin{array}{rl}\n",
+ "\\text{Problem}\\colon &\\text{gendict example}\\\\\\displaystyle \\min &\\displaystyle 0\\end{array}\n",
+ "$$"
+ ],
+ "text/plain": [
+ "Problem(name=\"gendict example\", sense=MINIMIZE, objective=0, constraints=[])"
+ ]
+ },
+ "execution_count": 9,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "@jm.Problem.define(\"gendict example\")\n",
+ "def problem(problem):\n",
+ " problem = jm.Problem(\"gendict example\")\n",
+ " K = problem.CategoryLabel(\"K\")\n",
+ " a = problem.Float(\"a\", dict_keys=K)\n",
+ " x = problem.BinaryVar(\"x\", dict_keys=K)\n",
+ " Sums = problem.NamedExpr(\"Sums\", jm.gendict(a[k] * x[k] for k in K))\n",
+ "\n",
+ "\n",
+ "problem"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "5cac4033",
+ "metadata": {},
+ "source": [
+ "## バグ修正"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "85257ae8",
+ "metadata": {},
+ "source": [
+ "### 添え字の要素と数値型の演算に失敗していたバグの修正\n",
+ "\n",
+ "以下のように `Constraint` の添え字の要素に対する数値演算が誤って型エラーとして判定されていた問題を修正しました。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 10,
+ "id": "34eef060",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-04T03:14:28.904893Z",
+ "iopub.status.busy": "2026-06-04T03:14:28.904839Z",
+ "iopub.status.idle": "2026-06-04T03:14:29.049894Z",
+ "shell.execute_reply": "2026-06-04T03:14:29.049606Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$\\begin{array}{rl}\n",
+ "\\text{Problem}\\colon &\\text{Example}\\\\\\displaystyle \\min &\\displaystyle 0\\\\&\\\\\\text{s.t.}&\\\\&\\begin{aligned}\n",
+ "\\text{c}&\\quad \\displaystyle k\\cdot x\\leq 0\\quad \\forall k\\;\\text{s.t.}\\;k\\in K\\end{aligned}\n",
+ "\\\\&\\\\\\text{where}&\\\\&\\text{Decision Variables:}\\\\&\\qquad \\begin{alignedat}{2}x&\\in \\left\\{0, 1\\right\\}&\\quad &0\\text{-dim binary variable}\\\\\\end{alignedat}\\\\&\\\\&\\text{Placeholders:}\\\\&\\qquad \\begin{alignedat}{2}K&\\in \\mathop{\\mathrm{Array}}\\left[(-);\\mathbb{R}\\right]&\\quad &1\\text{-dimensional array of placeholders with elements in }\\mathbb{R}\\\\\\end{alignedat}\\end{array}\n",
+ "$$"
+ ],
+ "text/plain": [
+ "Problem(name=\"Example\", sense=MINIMIZE, objective=0, constraints={c: [Constraint(name=\"c\", , lambda k: k * x <= 0, domain=set(K)),],})"
+ ]
+ },
+ "execution_count": 10,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import jijmodeling as jm\n",
+ "\n",
+ "\n",
+ "@jm.Problem.define(\"Example\")\n",
+ "def problem(problem: jm.DecoratedProblem):\n",
+ " K = problem.Float(ndim=1)\n",
+ " x = problem.BinaryVar()\n",
+ " problem += problem.Constraint(\"c\", [k * x <= 0 for k in K])\n",
+ "\n",
+ "\n",
+ "problem"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "id": "8ca7e0bf",
+ "metadata": {},
+ "source": [
+ "### `product` や `filter` の絡む数式出力を改善\n",
+ "\n",
+ "旧来は `product` や `filter` などを含む式が場合によって複雑な式として表示されていましたが、内包表記を使った読みやすい出力がされるようになりました。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": 11,
+ "id": "8a32b31a",
+ "metadata": {
+ "execution": {
+ "iopub.execute_input": "2026-06-04T03:14:29.051025Z",
+ "iopub.status.busy": "2026-06-04T03:14:29.050968Z",
+ "iopub.status.idle": "2026-06-04T03:14:29.168549Z",
+ "shell.execute_reply": "2026-06-04T03:14:29.168245Z"
+ }
+ },
+ "outputs": [
+ {
+ "data": {
+ "text/latex": [
+ "$$\\left\\{\\left\\langle i,j\\right\\rangle \\mid i\\in \\left\\{0,\\ldots ,N-1\\right\\},j\\in \\left\\{0,\\ldots ,M-1\\right\\},i=j\\right\\}$$"
+ ],
+ "text/plain": [
+ "Expression(set((N, M)).filter(lambda (i, j): i == j))"
+ ]
+ },
+ "execution_count": 11,
+ "metadata": {},
+ "output_type": "execute_result"
+ }
+ ],
+ "source": [
+ "import jijmodeling as jm\n",
+ "\n",
+ "problem = jm.Problem(\"product and filter example\")\n",
+ "N = problem.Natural(\"N\")\n",
+ "M = problem.Natural(\"M\")\n",
+ "x = problem.BinaryVar(\"x\", shape=(N, M))\n",
+ "jm.product(N, M).filter(lambda i, j: i == j)"
+ ]
+ }
+ ],
+ "metadata": {
+ "jupytext": {
+ "default_lexer": "ipython3"
+ },
+ "kernelspec": {
+ "display_name": ".venv",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "codemirror_mode": {
+ "name": "ipython",
+ "version": 3
+ },
+ "file_extension": ".py",
+ "mimetype": "text/x-python",
+ "name": "python",
+ "nbconvert_exporter": "python",
+ "pygments_lexer": "ipython3",
+ "version": "3.11.14"
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/markdowns/en/advanced/generation.md b/markdowns/en/advanced/generation.md
index 0a387ff6..39ee6fba 100644
--- a/markdowns/en/advanced/generation.md
+++ b/markdowns/en/advanced/generation.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: Python 3 (ipykernel)
language: python
diff --git a/markdowns/en/advanced/named_expr.md b/markdowns/en/advanced/named_expr.md
index 6265f7cd..9002591f 100644
--- a/markdowns/en/advanced/named_expr.md
+++ b/markdowns/en/advanced/named_expr.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/en/advanced/serialize.md b/markdowns/en/advanced/serialize.md
index 01ac8e9c..32d0fdcc 100644
--- a/markdowns/en/advanced/serialize.md
+++ b/markdowns/en/advanced/serialize.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: Python 3 (ipykernel)
language: python
diff --git a/markdowns/en/basics/expressions.md b/markdowns/en/basics/expressions.md
index cad0f7da..8df8f815 100644
--- a/markdowns/en/basics/expressions.md
+++ b/markdowns/en/basics/expressions.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/en/basics/instance_generation.md b/markdowns/en/basics/instance_generation.md
index b4813771..a6ed8c34 100644
--- a/markdowns/en/basics/instance_generation.md
+++ b/markdowns/en/basics/instance_generation.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/en/basics/modeling.md b/markdowns/en/basics/modeling.md
index c31cdad4..7c0f787c 100644
--- a/markdowns/en/basics/modeling.md
+++ b/markdowns/en/basics/modeling.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
@@ -52,8 +52,7 @@ problem += y
problem
```
-You can see that the existing term was not replaced; instead, $y$ was added and the new objective is $x + y$.
-If you might need to remove objective terms later, keep a list of terms in Python and set the objective from that list when needed.
+You can see that the existing term is not replaced; instead, $y$ is added and the new objective is $x + y$.
:::{admonition} Subtracting terms from the objective
:class: tip
@@ -61,6 +60,17 @@ If you might need to remove objective terms later, keep a list of terms in Pytho
Since JijModeling 2.3.1, you can also "subtract" scalar {py:class}`~jijmodeling.Expression` objects from the objective by using the {py:meth}`-= ` operator on a {py:class}`~jijmodeling.Problem`.
:::
+:::{admonition} Replacing the objective
+:class: tip
+Since JijModeling 2.5.0, you can assign an expression directly to `Problem.objective` to discard the previous objective and replace it with a new one.
+:::
+
+```{code-cell} ipython3
+problem.objective = y
+
+problem
+```
+
As a more practical example, let's set the objective for the knapsack problem.
```{code-cell} ipython3
diff --git a/markdowns/en/basics/overview.md b/markdowns/en/basics/overview.md
index a4f38bf8..47a6e541 100644
--- a/markdowns/en/basics/overview.md
+++ b/markdowns/en/basics/overview.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/en/basics/problem.md b/markdowns/en/basics/problem.md
index 08a6313a..059f46e7 100644
--- a/markdowns/en/basics/problem.md
+++ b/markdowns/en/basics/problem.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/en/basics/variables.md b/markdowns/en/basics/variables.md
index 5a7d6020..667d9ef4 100644
--- a/markdowns/en/basics/variables.md
+++ b/markdowns/en/basics/variables.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/en/introduction.md b/markdowns/en/introduction.md
index 73385c0c..2c328852 100644
--- a/markdowns/en/introduction.md
+++ b/markdowns/en/introduction.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: jijmodeling-tutorial
language: python
diff --git a/markdowns/en/quickstart/openjij.md b/markdowns/en/quickstart/openjij.md
index da977041..dbfaffce 100644
--- a/markdowns/en/quickstart/openjij.md
+++ b/markdowns/en/quickstart/openjij.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: jijmodeling-tutorial
language: python
diff --git a/markdowns/en/quickstart/scip.md b/markdowns/en/quickstart/scip.md
index a3e3f4ed..16a3a2f9 100644
--- a/markdowns/en/quickstart/scip.md
+++ b/markdowns/en/quickstart/scip.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/en/references/cheat_sheet.md b/markdowns/en/references/cheat_sheet.md
index 0eba9e93..252be0fb 100644
--- a/markdowns/en/references/cheat_sheet.md
+++ b/markdowns/en/references/cheat_sheet.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: jijmodeling-tutorial
language: python
diff --git a/markdowns/en/references/migration_guide_to_jijmodeling2.md b/markdowns/en/references/migration_guide_to_jijmodeling2.md
index 096f7bc2..a1a63d26 100644
--- a/markdowns/en/references/migration_guide_to_jijmodeling2.md
+++ b/markdowns/en/references/migration_guide_to_jijmodeling2.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/en/releases/jijmodeling-2.0.0.md b/markdowns/en/releases/jijmodeling-2.0.0.md
index fa633b16..881a6395 100644
--- a/markdowns/en/releases/jijmodeling-2.0.0.md
+++ b/markdowns/en/releases/jijmodeling-2.0.0.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: Python 3 (ipykernel)
language: python
diff --git a/markdowns/en/releases/jijmodeling-2.1.0.md b/markdowns/en/releases/jijmodeling-2.1.0.md
index 81ba87f4..1e00f753 100644
--- a/markdowns/en/releases/jijmodeling-2.1.0.md
+++ b/markdowns/en/releases/jijmodeling-2.1.0.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/en/releases/jijmodeling-2.2.0.md b/markdowns/en/releases/jijmodeling-2.2.0.md
index 6283362e..6e6107a8 100644
--- a/markdowns/en/releases/jijmodeling-2.2.0.md
+++ b/markdowns/en/releases/jijmodeling-2.2.0.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/en/releases/jijmodeling-2.3.1.md b/markdowns/en/releases/jijmodeling-2.3.1.md
index 7bea273e..14856032 100644
--- a/markdowns/en/releases/jijmodeling-2.3.1.md
+++ b/markdowns/en/releases/jijmodeling-2.3.1.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/en/releases/jijmodeling-2.3.2.md b/markdowns/en/releases/jijmodeling-2.3.2.md
index ca6aaf39..7f51c8fe 100644
--- a/markdowns/en/releases/jijmodeling-2.3.2.md
+++ b/markdowns/en/releases/jijmodeling-2.3.2.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/en/releases/jijmodeling-2.4.0.md b/markdowns/en/releases/jijmodeling-2.4.0.md
index b1ad3582..c937a886 100644
--- a/markdowns/en/releases/jijmodeling-2.4.0.md
+++ b/markdowns/en/releases/jijmodeling-2.4.0.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/en/releases/jijmodeling-2.4.1.md b/markdowns/en/releases/jijmodeling-2.4.1.md
index 69c712bc..0856dde2 100644
--- a/markdowns/en/releases/jijmodeling-2.4.1.md
+++ b/markdowns/en/releases/jijmodeling-2.4.1.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/en/releases/jijmodeling-2.5.0.md b/markdowns/en/releases/jijmodeling-2.5.0.md
new file mode 100644
index 00000000..bbeb128d
--- /dev/null
+++ b/markdowns/en/releases/jijmodeling-2.5.0.md
@@ -0,0 +1,243 @@
+---
+jupytext:
+ text_representation:
+ extension: .md
+ format_name: myst
+ format_version: 0.13
+ jupytext_version: 1.19.3
+kernelspec:
+ display_name: .venv
+ language: python
+ name: python3
+---
+
+# JijModeling 2.5.0 Release Notes
+
++++
+
+## Feature Enhancements
+
++++
+
+### Comprehension syntax for `jm.min`, `jm.max`, and `jm.set` in the Decorator API
+
+Previously, when using the Decorator API, only {py:func}`jm.sum ` and {py:func}`jm.prod ` accepted a comprehension (Python generator) expression as their single argument.
+
+Starting with this version, unary calls to {py:func}`jm.min `, {py:func}`jm.max `, and {py:func}`jm.set ` also accept comprehension expressions in the same way.
+
+```{code-cell} ipython3
+import jijmodeling as jm
+
+
+@jm.Problem.define("min/max/set comprehension example")
+def problem(problem: jm.DecoratedProblem):
+ N = problem.Length()
+ x = problem.BinaryVar(shape=N)
+
+ nonzero = jm.set(i for i in N if i != 0)
+ problem += jm.min(x[i] for i in N) + jm.max(x[i] for i in nonzero)
+
+
+problem
+```
+
+### Math output: More readable constraint indices
+
+Constraints created by directly comparing dictionaries or arrays are now rendered in $\LaTeX$ output using $\forall$, improving readability.
+
+```{code-cell} ipython3
+import jijmodeling as jm
+
+
+@jm.Problem.define("container-vs-scalar-comp")
+def problem(problem: jm.DecoratedProblem):
+ N = problem.Natural()
+ L = problem.CategoryLabel()
+ x = problem.BinaryVar(shape=N)
+ y = problem.BinaryVar(dict_keys=(L, N - 1))
+ z = problem.BinaryVar(dict_keys=(L, N - 1))
+
+ problem += problem.Constraint("scalar-vs-tensor", 1 <= x)
+ problem += problem.Constraint("tensor-vs-tensor", x <= x)
+ problem += problem.Constraint("dict-vs-scalar", y <= 5)
+ problem += problem.Constraint("dict-vs-dict", y <= z)
+
+
+problem
+```
+
+### Bounded naturals and category labels are now allowed as a `Placeholder` `dtype`
+
+The `dtype` argument of {py:meth}`Problem.Placeholder ` (and its shorthands such as `Graph`, `PartialDict`, and `TotalDict`) used to be limited to a `jm.DataType`, a NumPy scalar type, or a tuple built out of those.
+Starting with this version, `dtype` additionally accepts:
+
+- a natural-number expression `n`, declaring that the values are natural numbers strictly less than `n` (i.e. drawn from $\{0, 1, \dots, n - 1\}$); the bound `n` may also be a Python integer literal or another placeholder/named expression of natural-number type.
+- a {py:class}`~jijmodeling.CategoryLabel` `L`, declaring that the values are labels drawn from `L`.
+- a tuple `(T, T, ...)` whose components are any of the above (or any other accepted `dtype`).
+
+Along with the additions on `dtype` as described above, the shorthand constructors {py:meth}`Problem.Natural ` (and its aliases: {py:meth}`Problem.Length ` and {py:meth}`Problem.Dim `) now also accept a `less_than=natexpr` keyword argument. This declares the same bounded-natural type placeholder variable as `Placeholder(dtype=natexpr)`, while more clearly communicating the intent of it being a scalar natural placeholder:
+
+```{code-cell} ipython3
+import jijmodeling as jm
+
+problem = jm.Problem("bounded natural shorthand")
+N = problem.Natural("N")
+i = problem.Natural("i", less_than=N)
+x = problem.BinaryVar("x", shape=(N,))
+problem += x[i]
+
+problem
+```
+
+The same keyword argument is available in the Decorator API:
+
+```{code-cell} ipython3
+@jm.Problem.define("bounded natural shorthand in Decorator API")
+def problem(problem: jm.DecoratedProblem):
+ N = problem.Length()
+ i = problem.Dim(less_than=N)
+ x = problem.BinaryVar(shape=(N,))
+ problem += x[i]
+
+
+problem
+```
+
+For a more complex example, consider the following optimization problem involving an undirected graph $G = (V, E)$. Previously, edge endpoints had to be declared as plain naturals; with this release you can express the intent that they must lie in $[0, V)$:
+
+```{code-cell} ipython3
+import jijmodeling as jm
+
+problem = jm.Problem("max cut", sense=jm.ProblemSense.MAXIMIZE)
+V = problem.Natural("V")
+# We can now say that each entry of `E` is a pair of vertices in [0, V)
+# (previously we had to write dtype=(jm.DataType.Natural, jm.DataType.Natural)).
+# Alternatively, we may write this as problem.graph("E", dtype=V)
+E = problem.Placeholder("E", dtype=(V, V), ndim=1)
+x = problem.BinaryVar("x", shape=(V,))
+problem += jm.map(lambda u, v: (x[u] - x[v]) ** 2, E).sum()
+
+problem
+```
+
+When the vertices of a graph are named rather than indexed, a {py:class}`~jijmodeling.CategoryLabel` can now be used directly as the `dtype`.
+Here is the same problem, written with {py:meth}`Problem.Graph`, but on a graph whose vertices are identified by labels rather than integer indices:
+
+```{code-cell} ipython3
+problem = jm.Problem("max cut on a labeled graph", sense=jm.ProblemSense.MAXIMIZE)
+L = problem.CategoryLabel("L")
+edges = problem.Graph("edges", dtype=L)
+x = problem.BinaryVar("x", dict_keys=L)
+problem += jm.map(lambda u, v: (x[u] - x[v]) ** 2, edges).sum()
+
+compiler = jm.Compiler.from_problem(
+ problem,
+ {
+ "L": ["A", "B", "C"],
+ "edges": [("A", "B"), ("B", "C"), ("C", "A")],
+ },
+)
+instance = compiler.eval_problem(problem)
+```
+
+When a value supplied through the instance data is not consistent with the declared `dtype` (for example a vertex index $\geq V$, or a label not in `L`), the compiler will report an out-of-range error instead of silently accepting the value.
+
++++
+
+### Objective functions can now be replaced by assignment
+
+In this version, you can now replace the objective function directly by assigning to {py:attr}`Problem.objective `.
+The same `problem.objective = ...` syntax is also available for {py:class}`~jijmodeling.DecoratedProblem`.
+
+For example, you can replace an already-defined objective with another expression, or explicitly reset it with `problem.objective = 0`.
+
+```{code-cell} ipython3
+import jijmodeling as jm
+
+problem = jm.Problem("set objective example")
+x = problem.BinaryVar("x")
+y = problem.BinaryVar("y")
+
+problem.objective = x
+problem.objective = y
+problem.objective = 0
+
+
+@problem.update
+def _(problem: jm.DecoratedProblem):
+ z = problem.BinaryVar()
+ problem.objective = z
+
+
+problem
+```
+
+### Generating dictionaries with generator functions
+
+Starting with this version, the {py:func}`~jijmodeling.gendict` function can be used to generate dictionaries by specifying a set of keys and a generator function.
+This is similar to the array version {py:func}`~jijmodeling.genarray`, and to NumPy's {py:func}`~numpy.fromfunction`.
+
+```{code-cell} ipython3
+import jijmodeling as jm
+
+
+problem = jm.Problem("gendict example")
+K = problem.CategoryLabel("K")
+a = problem.Float("a", dict_keys=K)
+x = problem.BinaryVar("x", dict_keys=K)
+Sums = problem.NamedExpr("Sums", jm.gendict(K, lambda k: a[k] * x[k]))
+
+
+problem
+```
+
+Like `genarray`, using comprehensions is supported when using the Decorator API, but only one `for .. in ...` clause is allowed in a comprehension.
+
+```{code-cell} ipython3
+@jm.Problem.define("gendict example")
+def problem(problem):
+ problem = jm.Problem("gendict example")
+ K = problem.CategoryLabel("K")
+ a = problem.Float("a", dict_keys=K)
+ x = problem.BinaryVar("x", dict_keys=K)
+ Sums = problem.NamedExpr("Sums", jm.gendict(a[k] * x[k] for k in K))
+
+
+problem
+```
+
+## Bug Fixes
+
++++
+
+### Fix bug where operations between subscript elements and numeric types failed
+
+Fixed an issue where numeric operations on `Constraint` subscript elements, as shown below, were incorrectly treated as type errors.
+
+```{code-cell} ipython3
+import jijmodeling as jm
+
+
+@jm.Problem.define("Example")
+def problem(problem: jm.DecoratedProblem):
+ K = problem.Float(ndim=1)
+ x = problem.BinaryVar()
+ problem += problem.Constraint("c", [k * x <= 0 for k in K])
+
+
+problem
+```
+
+### Improved math rendering for expressions involving `product` and `filter`
+
+Previously, expressions involving `product` and `filter` could be rendered as overly complex formulas in some cases. They are now displayed in a more readable form using comprehension-style notation.
+
+```{code-cell} ipython3
+import jijmodeling as jm
+
+problem = jm.Problem("product and filter example")
+N = problem.Natural("N")
+M = problem.Natural("M")
+x = problem.BinaryVar("x", shape=(N, M))
+jm.product(N, M).filter(lambda i, j: i == j)
+```
diff --git a/markdowns/ja/advanced/generation.md b/markdowns/ja/advanced/generation.md
index e0d79e1f..648bd3d0 100644
--- a/markdowns/ja/advanced/generation.md
+++ b/markdowns/ja/advanced/generation.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: Python 3 (ipykernel)
language: python
diff --git a/markdowns/ja/advanced/named_expr.md b/markdowns/ja/advanced/named_expr.md
index 28b57d8a..08a2cff5 100644
--- a/markdowns/ja/advanced/named_expr.md
+++ b/markdowns/ja/advanced/named_expr.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/ja/advanced/serialize.md b/markdowns/ja/advanced/serialize.md
index 68fa0e72..c6bfebb7 100644
--- a/markdowns/ja/advanced/serialize.md
+++ b/markdowns/ja/advanced/serialize.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: Python 3 (ipykernel)
language: python
diff --git a/markdowns/ja/basics/expressions.md b/markdowns/ja/basics/expressions.md
index 2bdee086..3bee5ee9 100644
--- a/markdowns/ja/basics/expressions.md
+++ b/markdowns/ja/basics/expressions.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/ja/basics/instance_generation.md b/markdowns/ja/basics/instance_generation.md
index 44ab2805..26fa5361 100644
--- a/markdowns/ja/basics/instance_generation.md
+++ b/markdowns/ja/basics/instance_generation.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/ja/basics/modeling.md b/markdowns/ja/basics/modeling.md
index 7ceec201..2ec4e3e0 100644
--- a/markdowns/ja/basics/modeling.md
+++ b/markdowns/ja/basics/modeling.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
@@ -77,8 +77,7 @@ problem += y
problem
```
-既存の項が置き換えられたのではなく、$y$ が加算され $x + y$ が新たな目的関数となっていることが分かります。
-目的関数の項を削除したい場合、目的関数の項の一覧を(Python の)リストなどで持っておき、あとからそれを使って目的関数を設定するなどするとよいでしょう。
+既存の項が置き換えられるのではなく、$y$ が加算され $x + y$ が新たな目的関数となっていることが分かります。
:::{admonition} 目的関数から項を「引く」操作
:class: tip
@@ -86,6 +85,17 @@ problem
JijModeling 2.3.1 以降では、{py:class}`~jijmodeling.Problem` に対して {py:meth}`-= ` 演算子を使うことで、数値型の {py:class}`~jijmodeling.Expression` オブジェクトを目的関数から「引く」こともできます。
:::
+:::{admonition} 目的関数の置き換え
+:class: tip
+JijModeling 2.5.0 以降では、`Problem.objective` に直接式を代入することで、これまでの目的関数を捨て、新しい目的関数で置き換えることができます。
+:::
+
+```{code-cell} ipython3
+problem.objective = y
+
+problem
+```
+
## 制約条件の設定
制約条件の追加も同様に {py:meth}`+= ` 演算子を使って行います。
diff --git a/markdowns/ja/basics/overview.md b/markdowns/ja/basics/overview.md
index 33068f84..52459f55 100644
--- a/markdowns/ja/basics/overview.md
+++ b/markdowns/ja/basics/overview.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/ja/basics/problem.md b/markdowns/ja/basics/problem.md
index 24d284b8..95609c48 100644
--- a/markdowns/ja/basics/problem.md
+++ b/markdowns/ja/basics/problem.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/ja/basics/variables.md b/markdowns/ja/basics/variables.md
index cc54c5a0..aade197f 100644
--- a/markdowns/ja/basics/variables.md
+++ b/markdowns/ja/basics/variables.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/ja/introduction.md b/markdowns/ja/introduction.md
index ba013955..5332d556 100644
--- a/markdowns/ja/introduction.md
+++ b/markdowns/ja/introduction.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: jijmodeling-tutorial
language: python
diff --git a/markdowns/ja/quickstart/openjij.md b/markdowns/ja/quickstart/openjij.md
index ac97f185..ab4a209b 100644
--- a/markdowns/ja/quickstart/openjij.md
+++ b/markdowns/ja/quickstart/openjij.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: jijmodeling-tutorial
language: python
diff --git a/markdowns/ja/quickstart/scip.md b/markdowns/ja/quickstart/scip.md
index ac4cb51f..64c4157d 100644
--- a/markdowns/ja/quickstart/scip.md
+++ b/markdowns/ja/quickstart/scip.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/ja/references/cheat_sheet.md b/markdowns/ja/references/cheat_sheet.md
index 1eb54ae4..3f233cfc 100644
--- a/markdowns/ja/references/cheat_sheet.md
+++ b/markdowns/ja/references/cheat_sheet.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: jijmodeling-tutorial
language: python
diff --git a/markdowns/ja/references/migration_guide_to_jijmodeling2.md b/markdowns/ja/references/migration_guide_to_jijmodeling2.md
index de13385d..78b2d723 100644
--- a/markdowns/ja/references/migration_guide_to_jijmodeling2.md
+++ b/markdowns/ja/references/migration_guide_to_jijmodeling2.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/ja/releases/jijmodeling-2.0.0.md b/markdowns/ja/releases/jijmodeling-2.0.0.md
index 8da2158d..7d78a1d0 100644
--- a/markdowns/ja/releases/jijmodeling-2.0.0.md
+++ b/markdowns/ja/releases/jijmodeling-2.0.0.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: Python 3 (ipykernel)
language: python
diff --git a/markdowns/ja/releases/jijmodeling-2.1.0.md b/markdowns/ja/releases/jijmodeling-2.1.0.md
index 5d4f45fb..263ce5f1 100644
--- a/markdowns/ja/releases/jijmodeling-2.1.0.md
+++ b/markdowns/ja/releases/jijmodeling-2.1.0.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/ja/releases/jijmodeling-2.2.0.md b/markdowns/ja/releases/jijmodeling-2.2.0.md
index 84708482..3b709cb3 100644
--- a/markdowns/ja/releases/jijmodeling-2.2.0.md
+++ b/markdowns/ja/releases/jijmodeling-2.2.0.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/ja/releases/jijmodeling-2.3.1.md b/markdowns/ja/releases/jijmodeling-2.3.1.md
index 2f674915..311a48f5 100644
--- a/markdowns/ja/releases/jijmodeling-2.3.1.md
+++ b/markdowns/ja/releases/jijmodeling-2.3.1.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/ja/releases/jijmodeling-2.3.2.md b/markdowns/ja/releases/jijmodeling-2.3.2.md
index 4280850f..f2e73810 100644
--- a/markdowns/ja/releases/jijmodeling-2.3.2.md
+++ b/markdowns/ja/releases/jijmodeling-2.3.2.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/ja/releases/jijmodeling-2.4.0.md b/markdowns/ja/releases/jijmodeling-2.4.0.md
index 95138200..c5a917f7 100644
--- a/markdowns/ja/releases/jijmodeling-2.4.0.md
+++ b/markdowns/ja/releases/jijmodeling-2.4.0.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/ja/releases/jijmodeling-2.4.1.md b/markdowns/ja/releases/jijmodeling-2.4.1.md
index e8dfd2c3..7dfe0142 100644
--- a/markdowns/ja/releases/jijmodeling-2.4.1.md
+++ b/markdowns/ja/releases/jijmodeling-2.4.1.md
@@ -4,7 +4,7 @@ jupytext:
extension: .md
format_name: myst
format_version: 0.13
- jupytext_version: 1.19.1
+ jupytext_version: 1.19.3
kernelspec:
display_name: .venv
language: python
diff --git a/markdowns/ja/releases/jijmodeling-2.5.0.md b/markdowns/ja/releases/jijmodeling-2.5.0.md
new file mode 100644
index 00000000..2dd39033
--- /dev/null
+++ b/markdowns/ja/releases/jijmodeling-2.5.0.md
@@ -0,0 +1,243 @@
+---
+jupytext:
+ text_representation:
+ extension: .md
+ format_name: myst
+ format_version: 0.13
+ jupytext_version: 1.19.3
+kernelspec:
+ display_name: .venv
+ language: python
+ name: python3
+---
+
+# JijModeling 2.5.0 リリースノート
+
++++
+
+## 機能強化
+
++++
+
+### Decorator API における `jm.min`、`jm.max`、`jm.set` の内包表記サポート
+
+旧来は、Decorator API を利用する際に内包表記(Python のジェネレータ式)を引数として受け取れるのは {py:func}`jm.sum ` と {py:func}`jm.prod ` のみでした。
+
+本バージョンから、{py:func}`jm.min `、{py:func}`jm.max `、{py:func}`jm.set ` の一引数呼び出しでも、同様に内包表記を受け取れるようになりました。
+
+```{code-cell} ipython3
+import jijmodeling as jm
+
+
+@jm.Problem.define("min/max/set comprehension example")
+def problem(problem: jm.DecoratedProblem):
+ N = problem.Length()
+ x = problem.BinaryVar(shape=N)
+
+ nonzero = jm.set(i for i in N if i != 0)
+ problem += jm.min(x[i] for i in N) + jm.max(x[i] for i in nonzero)
+
+
+problem
+```
+
+### 数式出力:制約の添え字が読みやすく
+
+辞書や配列同士の直接比較による制約条件が、$\LaTeX$ 出力では $\forall$ を使って出力されるようになり、可読性が向上しました。
+
+```{code-cell} ipython3
+import jijmodeling as jm
+
+
+@jm.Problem.define("container-vs-scalar-comp")
+def problem(problem: jm.DecoratedProblem):
+ N = problem.Natural()
+ L = problem.CategoryLabel()
+ x = problem.BinaryVar(shape=N)
+ y = problem.BinaryVar(dict_keys=(L, N - 1))
+ z = problem.BinaryVar(dict_keys=(L, N - 1))
+
+ problem += problem.Constraint("scalar-vs-tensor", 1 <= x)
+ problem += problem.Constraint("tensor-vs-tensor", x <= x)
+ problem += problem.Constraint("dict-vs-scalar", y <= 5)
+ problem += problem.Constraint("dict-vs-dict", y <= z)
+
+
+problem
+```
+
+### `Placeholder` の `dtype` に上限付き自然数とカテゴリーラベルを指定できるように
+
+{py:meth}`Problem.Placeholder `(および `Graph`、`PartialDict`、`TotalDict` などの型付き構築子)の `dtype` 引数は、これまで `jm.DataType`、NumPy のスカラー型、あるいはそれらから構成されるタプルに限られていました。
+本バージョンから、`dtype` には次のものも追加で指定できるようになりました:
+
+- 自然数式 `n`:値が `n` より真に小さい自然数(すなわち $\{0, 1, \dots, n - 1\}$ のいずれか)であることを表します。`n` には Python の整数リテラルのほか、自然数型の他のプレースホルダーや {py:class}`~jijmodeling.NamedExpr` などの式も渡せます。
+- {py:class}`~jijmodeling.CategoryLabel` `L`:値が `L` のラベルのうちのいずれかであることを表します。
+- 上記(あるいは他の指定可能な `dtype`)を要素とするタプル `(T, T, ...)`。
+
+上記の `dtype` に関する追加に合わせて、型付き構築子である {py:meth}`Problem.Natural `(およびそのエイリアスである {py:meth}`Problem.Length ` と {py:meth}`Problem.Dim `)でも `less_than=natexpr` キーワード引数を指定できるようになりました。これは `Placeholder(dtype=natexpr)` と同じく上限付き自然数型のプレースホルダーを宣言するもので、自然数値のプレースホルダーであるという意図をより明瞭に表現する書き方です。
+
+```{code-cell} ipython3
+import jijmodeling as jm
+
+problem = jm.Problem("bounded natural shorthand")
+N = problem.Natural("N")
+i = problem.Natural("i", less_than=N)
+x = problem.BinaryVar("x", shape=(N,))
+problem += x[i]
+
+problem
+```
+
+Decorator API でも同じキーワード引数を利用できます。
+
+```{code-cell} ipython3
+@jm.Problem.define("bounded natural shorthand in Decorator API")
+def problem(problem: jm.DecoratedProblem):
+ N = problem.Length()
+ i = problem.Dim(less_than=N)
+ x = problem.BinaryVar(shape=(N,))
+ problem += x[i]
+
+
+problem
+```
+
+より複雑な例として、以下の、無向グラフ $G = (V, E)$ についての最適化問題を考えます。以前のバージョンでは辺の端点の型は単なる自然数として宣言する必要がありましたが、本リリースから、端点が $[0, V)$ の範囲に収まることを `dtype` を通じて表現できるようになりました:
+
+```{code-cell} ipython3
+import jijmodeling as jm
+
+problem = jm.Problem("max cut", sense=jm.ProblemSense.MAXIMIZE)
+V = problem.Natural("V")
+# `E` の各要素が `[0, V)` のペアであることを直接宣言できるようになりました
+# (従来は dtype=(jm.DataType.Natural, jm.DataType.Natural) と書く必要がありました)。
+# この宣言は、 `problem.graph("E", dtype=V)` と書くこともできます。
+E = problem.Placeholder("E", dtype=(V, V), ndim=1)
+x = problem.BinaryVar("x", shape=(V,))
+problem += jm.map(lambda u, v: (x[u] - x[v]) ** 2, E).sum()
+
+problem
+```
+
+また、グラフの頂点にラベルを用いる場合を想定して、{py:class}`~jijmodeling.CategoryLabel` をそのまま `dtype` として指定することもできるようになりました。
+以下の例は、ラベルが頂点として使われるグラフの上で({py:meth}`Problem.Graph` を用いて)同じ問題を定義するものです。
+
+```{code-cell} ipython3
+problem = jm.Problem("max cut on a labeled graph", sense=jm.ProblemSense.MAXIMIZE)
+L = problem.CategoryLabel("L")
+edges = problem.Graph("edges", dtype=L)
+x = problem.BinaryVar("x", dict_keys=L)
+problem += jm.map(lambda u, v: (x[u] - x[v]) ** 2, edges).sum()
+
+compiler = jm.Compiler.from_problem(
+ problem,
+ {
+ "L": ["A", "B", "C"],
+ "edges": [("A", "B"), ("B", "C"), ("C", "A")],
+ },
+)
+instance = compiler.eval_problem(problem)
+```
+
+インスタンスデータとして与えられた値が宣言された `dtype` と整合しない場合(たとえば、頂点インデックスが `V` 以上であったり、`L` に含まれないラベルが渡されたりした場合)、コンパイラは範囲外エラーを報告します。
+
++++
+
+### 目的関数を代入で再設定できるように
+
+本バージョンから {py:attr}`Problem.objective ` に直接代入して置き換えられるようになりました。
+{py:class}`~jijmodeling.DecoratedProblem` でも同じように `problem.objective = ...` と書けます。
+
+たとえば、一度設定した目的関数を別の式に置き換えたり、`problem.objective = 0` として目的関数を明示的にリセットしたりできます。
+
+```{code-cell} ipython3
+import jijmodeling as jm
+
+problem = jm.Problem("set objective example")
+x = problem.BinaryVar("x")
+y = problem.BinaryVar("y")
+
+problem.objective = x
+problem.objective = y
+problem.objective = 0
+
+
+@problem.update
+def _(problem: jm.DecoratedProblem):
+ z = problem.BinaryVar()
+ problem.objective = z
+
+
+problem
+```
+
+### 生成関数による辞書の生成
+
+本バージョンから、{py:func}`~jijmodeling.gendict` 関数により、キー集合と生成関数を指定して配列を生成できるようになりました。
+これは配列の {py:func}`~jijmodeling.genarray` や numpy の {py:func}`~numpy.fromfunction` と類似の機能です。
+
+```{code-cell} ipython3
+import jijmodeling as jm
+
+
+problem = jm.Problem("gendict example")
+K = problem.CategoryLabel("K")
+a = problem.Float("a", dict_keys=K)
+x = problem.BinaryVar("x", dict_keys=K)
+Sums = problem.NamedExpr("Sums", jm.gendict(K, lambda k: a[k] * x[k]))
+
+
+problem
+```
+
+また、`jm.genarray` と同じように、Decorator API を利用している場合、内包表記を用いることもできます。ただし、`for .. in ...` は一つしか許容されません。
+
+```{code-cell} ipython3
+@jm.Problem.define("gendict example")
+def problem(problem):
+ problem = jm.Problem("gendict example")
+ K = problem.CategoryLabel("K")
+ a = problem.Float("a", dict_keys=K)
+ x = problem.BinaryVar("x", dict_keys=K)
+ Sums = problem.NamedExpr("Sums", jm.gendict(a[k] * x[k] for k in K))
+
+
+problem
+```
+
+## バグ修正
+
++++
+
+### 添え字の要素と数値型の演算に失敗していたバグの修正
+
+以下のように `Constraint` の添え字の要素に対する数値演算が誤って型エラーとして判定されていた問題を修正しました。
+
+```{code-cell} ipython3
+import jijmodeling as jm
+
+
+@jm.Problem.define("Example")
+def problem(problem: jm.DecoratedProblem):
+ K = problem.Float(ndim=1)
+ x = problem.BinaryVar()
+ problem += problem.Constraint("c", [k * x <= 0 for k in K])
+
+
+problem
+```
+
+### `product` や `filter` の絡む数式出力を改善
+
+旧来は `product` や `filter` などを含む式が場合によって複雑な式として表示されていましたが、内包表記を使った読みやすい出力がされるようになりました。
+
+```{code-cell} ipython3
+import jijmodeling as jm
+
+problem = jm.Problem("product and filter example")
+N = problem.Natural("N")
+M = problem.Natural("M")
+x = problem.BinaryVar("x", shape=(N, M))
+jm.product(N, M).filter(lambda i, j: i == j)
+```
diff --git a/requirements.txt b/requirements.txt
index 209c079f..8fa51c6d 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -6,7 +6,7 @@ dimod==0.12.21
# openjij
jij-cimod==1.7.3
# via openjij
-jijmodeling==2.4.0
+jijmodeling==2.5.0
# via jijmodeling-tutorial (pyproject.toml)
numpy==2.3.5
# via
@@ -18,19 +18,19 @@ numpy==2.3.5
# pandas
# pyscipopt
# scipy
-ommx==2.5.2
+ommx==2.6.1
# via
# jijmodeling-tutorial (pyproject.toml)
# jijmodeling
# ommx-openjij-adapter
# ommx-pyscipopt-adapter
-ommx-openjij-adapter==2.5.2
+ommx-openjij-adapter==2.6.1
# via jijmodeling-tutorial (pyproject.toml)
-ommx-pyscipopt-adapter==2.5.2
+ommx-pyscipopt-adapter==2.6.1
# via jijmodeling-tutorial (pyproject.toml)
openjij==0.11.6
# via ommx-openjij-adapter
-orjson==3.11.8
+orjson==3.11.9
# via jijmodeling
pandas==2.3.3
# via
@@ -40,13 +40,13 @@ protobuf==5.29.6
# via ommx
pyarrow==22.0.0
# via ommx
-pyscipopt==6.1.0
+pyscipopt==6.2.1
# via ommx-pyscipopt-adapter
python-dateutil==2.9.0.post0
# via
# ommx
# pandas
-pytz==2026.1.post1
+pytz==2026.2
# via pandas
scipy==1.15.3
# via jij-cimod
diff --git a/uv.lock b/uv.lock
index 85ef3982..97b7a9a0 100644
--- a/uv.lock
+++ b/uv.lock
@@ -95,11 +95,11 @@ css = [
[[package]]
name = "certifi"
-version = "2026.4.22"
+version = "2026.5.20"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/25/ee/6caf7a40c36a1220410afe15a1cc64993a1f864871f698c0f93acb72842a/certifi-2026.4.22.tar.gz", hash = "sha256:8d455352a37b71bf76a79caa83a3d6c25afee4a385d632127b6afb3963f1c580", size = 137077, upload-time = "2026-04-22T11:26:11.191Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/f3/ce/ee2ecad540810a79593028e88299baeae54d346cc7a0d94b6199988b89b1/certifi-2026.5.20.tar.gz", hash = "sha256:69dea482ab64caa7b9f6aba1c6bf48bb6a5448d1c0f1b17ab42ad8c763a5344d", size = 135422, upload-time = "2026-05-20T11:46:50.073Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/22/30/7cd8fdcdfbc5b869528b079bfb76dcdf6056b1a2097a662e5e8c04f42965/certifi-2026.4.22-py3-none-any.whl", hash = "sha256:3cb2210c8f88ba2318d29b0388d1023c8492ff72ecdde4ebdaddbb13a31b1c4a", size = 135707, upload-time = "2026-04-22T11:26:09.372Z" },
+ { url = "https://files.pythonhosted.org/packages/59/8c/57e832b7af6d7c5abe66eb3fbe3a3a32f4d11ea23a1aa7131371035be991/certifi-2026.5.20-py3-none-any.whl", hash = "sha256:3c52e209ba0a4ad7aebe60436a4ab349c39e1e602e8c134221e546902ad25897", size = 134134, upload-time = "2026-05-20T11:46:48.578Z" },
]
[[package]]
@@ -209,14 +209,14 @@ wheels = [
[[package]]
name = "click"
-version = "8.3.3"
+version = "8.4.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "colorama", marker = "sys_platform == 'win32'" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/bb/63/f9e1ea081ce35720d8b92acde70daaedace594dc93b693c869e0d5910718/click-8.3.3.tar.gz", hash = "sha256:398329ad4837b2ff7cbe1dd166a4c0f8900c3ca3a218de04466f38f6497f18a2", size = 328061, upload-time = "2026-04-22T15:11:27.506Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/9b/98/518d8e5081007684232226f475082b30087d0f585e8457db087298259f49/click-8.4.1.tar.gz", hash = "sha256:918b5633eddf6b41c32d4f454bf0de810065c74e3f7dbf8ee5452f8be88d3e96", size = 353007, upload-time = "2026-05-22T04:08:37.769Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/ae/44/c1221527f6a71a01ec6fbad7fa78f1d50dfa02217385cf0fa3eec7087d59/click-8.3.3-py3-none-any.whl", hash = "sha256:a2bf429bb3033c89fa4936ffb35d5cb471e3719e1f3c8a7c3fff0b8314305613", size = 110502, upload-time = "2026-04-22T15:11:25.044Z" },
+ { url = "https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl", hash = "sha256:482be17c6991b8c19c5429a1e995d9b0efdbb63172824c41f99965dc0ade8ec2", size = 116639, upload-time = "2026-05-22T04:08:35.26Z" },
]
[[package]]
@@ -239,32 +239,32 @@ wheels = [
[[package]]
name = "debugpy"
-version = "1.8.20"
+version = "1.8.21"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/e0/b7/cd8080344452e4874aae67c40d8940e2b4d47b01601a8fd9f44786c757c7/debugpy-1.8.20.tar.gz", hash = "sha256:55bc8701714969f1ab89a6d5f2f3d40c36f91b2cbe2f65d98bf8196f6a6a2c33", size = 1645207, upload-time = "2026-01-29T23:03:28.199Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/f2/aa/12037145b7a56eaa5b29b41872f7a21b538e807e13f32c4d3c46e59be084/debugpy-1.8.21.tar.gz", hash = "sha256:a3c53278e84c94e11bd87c53970ec391d1a67396c8b22609fcac576520e611a6", size = 1697577, upload-time = "2026-06-01T19:30:35.156Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/51/56/c3baf5cbe4dd77427fd9aef99fcdade259ad128feeb8a786c246adb838e5/debugpy-1.8.20-cp311-cp311-macosx_15_0_universal2.whl", hash = "sha256:eada6042ad88fa1571b74bd5402ee8b86eded7a8f7b827849761700aff171f1b", size = 2208318, upload-time = "2026-01-29T23:03:36.481Z" },
- { url = "https://files.pythonhosted.org/packages/9a/7d/4fa79a57a8e69fe0d9763e98d1110320f9ecd7f1f362572e3aafd7417c9d/debugpy-1.8.20-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:7de0b7dfeedc504421032afba845ae2a7bcc32ddfb07dae2c3ca5442f821c344", size = 3171493, upload-time = "2026-01-29T23:03:37.775Z" },
- { url = "https://files.pythonhosted.org/packages/7d/f2/1e8f8affe51e12a26f3a8a8a4277d6e60aa89d0a66512f63b1e799d424a4/debugpy-1.8.20-cp311-cp311-win32.whl", hash = "sha256:773e839380cf459caf73cc533ea45ec2737a5cc184cf1b3b796cd4fd98504fec", size = 5209240, upload-time = "2026-01-29T23:03:39.109Z" },
- { url = "https://files.pythonhosted.org/packages/d5/92/1cb532e88560cbee973396254b21bece8c5d7c2ece958a67afa08c9f10dc/debugpy-1.8.20-cp311-cp311-win_amd64.whl", hash = "sha256:1f7650546e0eded1902d0f6af28f787fa1f1dbdbc97ddabaf1cd963a405930cb", size = 5233481, upload-time = "2026-01-29T23:03:40.659Z" },
- { url = "https://files.pythonhosted.org/packages/14/57/7f34f4736bfb6e00f2e4c96351b07805d83c9a7b33d28580ae01374430f7/debugpy-1.8.20-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:4ae3135e2089905a916909ef31922b2d733d756f66d87345b3e5e52b7a55f13d", size = 2550686, upload-time = "2026-01-29T23:03:42.023Z" },
- { url = "https://files.pythonhosted.org/packages/ab/78/b193a3975ca34458f6f0e24aaf5c3e3da72f5401f6054c0dfd004b41726f/debugpy-1.8.20-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:88f47850a4284b88bd2bfee1f26132147d5d504e4e86c22485dfa44b97e19b4b", size = 4310588, upload-time = "2026-01-29T23:03:43.314Z" },
- { url = "https://files.pythonhosted.org/packages/c1/55/f14deb95eaf4f30f07ef4b90a8590fc05d9e04df85ee379712f6fb6736d7/debugpy-1.8.20-cp312-cp312-win32.whl", hash = "sha256:4057ac68f892064e5f98209ab582abfee3b543fb55d2e87610ddc133a954d390", size = 5331372, upload-time = "2026-01-29T23:03:45.526Z" },
- { url = "https://files.pythonhosted.org/packages/a1/39/2bef246368bd42f9bd7cba99844542b74b84dacbdbea0833e610f384fee8/debugpy-1.8.20-cp312-cp312-win_amd64.whl", hash = "sha256:a1a8f851e7cf171330679ef6997e9c579ef6dd33c9098458bd9986a0f4ca52e3", size = 5372835, upload-time = "2026-01-29T23:03:47.245Z" },
- { url = "https://files.pythonhosted.org/packages/15/e2/fc500524cc6f104a9d049abc85a0a8b3f0d14c0a39b9c140511c61e5b40b/debugpy-1.8.20-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:5dff4bb27027821fdfcc9e8f87309a28988231165147c31730128b1c983e282a", size = 2539560, upload-time = "2026-01-29T23:03:48.738Z" },
- { url = "https://files.pythonhosted.org/packages/90/83/fb33dcea789ed6018f8da20c5a9bc9d82adc65c0c990faed43f7c955da46/debugpy-1.8.20-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:84562982dd7cf5ebebfdea667ca20a064e096099997b175fe204e86817f64eaf", size = 4293272, upload-time = "2026-01-29T23:03:50.169Z" },
- { url = "https://files.pythonhosted.org/packages/a6/25/b1e4a01bfb824d79a6af24b99ef291e24189080c93576dfd9b1a2815cd0f/debugpy-1.8.20-cp313-cp313-win32.whl", hash = "sha256:da11dea6447b2cadbf8ce2bec59ecea87cc18d2c574980f643f2d2dfe4862393", size = 5331208, upload-time = "2026-01-29T23:03:51.547Z" },
- { url = "https://files.pythonhosted.org/packages/13/f7/a0b368ce54ffff9e9028c098bd2d28cfc5b54f9f6c186929083d4c60ba58/debugpy-1.8.20-cp313-cp313-win_amd64.whl", hash = "sha256:eb506e45943cab2efb7c6eafdd65b842f3ae779f020c82221f55aca9de135ed7", size = 5372930, upload-time = "2026-01-29T23:03:53.585Z" },
- { url = "https://files.pythonhosted.org/packages/e0/c3/7f67dea8ccf8fdcb9c99033bbe3e90b9e7395415843accb81428c441be2d/debugpy-1.8.20-py2.py3-none-any.whl", hash = "sha256:5be9bed9ae3be00665a06acaa48f8329d2b9632f15fd09f6a9a8c8d9907e54d7", size = 5337658, upload-time = "2026-01-29T23:04:17.404Z" },
+ { url = "https://files.pythonhosted.org/packages/89/fb/cbf306d6e07a313a91e7171a98669054502840931432c227cfd505ee367f/debugpy-1.8.21-cp311-cp311-macosx_15_0_universal2.whl", hash = "sha256:da456226c7b4c69e35dbe35dcee6623d912000a77816db7856a41af1c72a0264", size = 2203120, upload-time = "2026-06-01T19:30:43.964Z" },
+ { url = "https://files.pythonhosted.org/packages/aa/57/aa739bd4ad2cbf96aeb1b20b56918ddd5ae4c28b68709bfcd327f02123ee/debugpy-1.8.21-cp311-cp311-manylinux_2_34_x86_64.whl", hash = "sha256:f68b891688e61bdc08b8d364d919ff0051e0b94657b39dcd027bc3173edb7cdc", size = 3059958, upload-time = "2026-06-01T19:30:45.622Z" },
+ { url = "https://files.pythonhosted.org/packages/a8/31/453d2c9a23d133fe2c8ec7ca1d816ded52a913487fe3ffef7c01b4b706af/debugpy-1.8.21-cp311-cp311-win32.whl", hash = "sha256:f843a8b08c2edeaf9b1582eed4f25441af21a297c22ff16bf76a662557aa9c9e", size = 5236515, upload-time = "2026-06-01T19:30:47.461Z" },
+ { url = "https://files.pythonhosted.org/packages/60/94/6660de2f2d7bf388f229335ba4637646eebabdbf38564cb439a95a9193c9/debugpy-1.8.21-cp311-cp311-win_amd64.whl", hash = "sha256:84c564d8cc701d41843b29a92814c1f1bef6798724ca9d675c284ad9f6a547d7", size = 5256138, upload-time = "2026-06-01T19:30:49.113Z" },
+ { url = "https://files.pythonhosted.org/packages/a2/df/bf625547431a9cadc9f4cbfeda38866e2b17f6aed147b625377e87834449/debugpy-1.8.21-cp312-cp312-macosx_15_0_universal2.whl", hash = "sha256:9f96713896f39c3dff0ee841f47320c3f2983d33c341e009361bb0ebc79adc4e", size = 2483609, upload-time = "2026-06-01T19:30:50.794Z" },
+ { url = "https://files.pythonhosted.org/packages/bf/09/59324b903599031ff9faaec1758292409f6561a0ec2492fe4b703327705a/debugpy-1.8.21-cp312-cp312-manylinux_2_34_x86_64.whl", hash = "sha256:c193d474f0a211191f2b4449d2d06157c689013035bd952f3b617e0ef422b176", size = 3968900, upload-time = "2026-06-01T19:30:52.341Z" },
+ { url = "https://files.pythonhosted.org/packages/14/cd/27f65b805d7fe005c44e1a36b9183ecdfbcdbf9d3e721a5115d461ecc7ee/debugpy-1.8.21-cp312-cp312-win32.whl", hash = "sha256:4743373c1cac7f9e74a1b9915bf1dbe0e900eca657ffb170ae07ac8363205ae9", size = 5336340, upload-time = "2026-06-01T19:30:54.047Z" },
+ { url = "https://files.pythonhosted.org/packages/77/1d/c84e30c0c674184948b66f076ab271c01d940618a2824c23cd035a27bc20/debugpy-1.8.21-cp312-cp312-win_amd64.whl", hash = "sha256:bd7ba9dd3daa7c2f942c6ca8d4695a16bf9ac16b63615261c7982bc74f7ed20c", size = 5374751, upload-time = "2026-06-01T19:30:55.891Z" },
+ { url = "https://files.pythonhosted.org/packages/77/6b/d817e1f8cc77aa055d37fba092e0febfdff40fe652d8d53d4cd7a86ad98d/debugpy-1.8.21-cp313-cp313-macosx_15_0_universal2.whl", hash = "sha256:13678151fc401e2d68c9880b91e28714f797d40422994572b24560ef80910a88", size = 2477398, upload-time = "2026-06-01T19:30:57.644Z" },
+ { url = "https://files.pythonhosted.org/packages/48/57/412421516afc3055fa577516f00beec3d663f9b0ab330639547ae6c57720/debugpy-1.8.21-cp313-cp313-manylinux_2_34_x86_64.whl", hash = "sha256:ecbd158386c31ffe71d46f72d44d56e66331ab9b16cad649156d514368f23ab2", size = 3962096, upload-time = "2026-06-01T19:30:59.235Z" },
+ { url = "https://files.pythonhosted.org/packages/c1/62/2c616337cf6ba7b07ebbc97f02c6c945a8e2f76b365e33ee809c32ee36d1/debugpy-1.8.21-cp313-cp313-win32.whl", hash = "sha256:2c2ae706dec41d99a9ca1f7ebc987a83e65578363be6f6b3ac9067504917fae1", size = 5336288, upload-time = "2026-06-01T19:31:00.79Z" },
+ { url = "https://files.pythonhosted.org/packages/f8/99/9175103392f84c4b1bf7622888cdc68da07f0ff7d9e581266428f6776033/debugpy-1.8.21-cp313-cp313-win_amd64.whl", hash = "sha256:aa648733047443eb1d07682c4ef287d36a54507b643ffdf38b09a3ef002c72a0", size = 5376567, upload-time = "2026-06-01T19:31:02.56Z" },
+ { url = "https://files.pythonhosted.org/packages/95/51/67e7cf11a53e40694f720457d5b3a1cdaaa3d5a9a633e482f225456b93ff/debugpy-1.8.21-py2.py3-none-any.whl", hash = "sha256:b1e37d333663c8851516a47364ef473da127f9caebe4417e6df6f5825a7e9a92", size = 5352888, upload-time = "2026-06-01T19:31:25.186Z" },
]
[[package]]
name = "decorator"
-version = "5.2.1"
+version = "5.3.1"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711, upload-time = "2025-02-24T04:41:34.073Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/60/8b/32f9823da46cde7df2087faa08cd98d01b908f8dcab982cdba9c84e85355/decorator-5.3.1.tar.gz", hash = "sha256:4cbcdd55a6efadb9dbea26b858f4fb3264567b52d69ca0d25b721b553f60ea82", size = 58084, upload-time = "2026-05-18T06:03:28.057Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload-time = "2025-02-24T04:41:32.565Z" },
+ { url = "https://files.pythonhosted.org/packages/05/7f/798705f5296a58ca505d600456748d1be48078eac8a7050d8a98bc9edb89/decorator-5.3.1-py3-none-any.whl", hash = "sha256:f47fe6fdbd2edd623ecfe36875d37aba411624e2670dd395dddae1358689bb3c", size = 10365, upload-time = "2026-05-18T06:03:26.517Z" },
]
[[package]]
@@ -331,43 +331,43 @@ wheels = [
[[package]]
name = "greenlet"
-version = "3.5.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/3c/3f/dbf99fb14bfeb88c28f16729215478c0e265cacd6dc22270c8f31bb6892f/greenlet-3.5.0.tar.gz", hash = "sha256:d419647372241bc68e957bf38d5c1f98852155e4146bd1e4121adea81f4f01e4", size = 196995, upload-time = "2026-04-27T13:37:15.544Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/8b/0f/a91f143f356523ff682309732b175765a9bc2836fd7c081c2c67fedc1ad4/greenlet-3.5.0-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:8f1cc966c126639cd152fdaa52624d2655f492faa79e013fea161de3e6dda082", size = 284726, upload-time = "2026-04-27T12:20:51.402Z" },
- { url = "https://files.pythonhosted.org/packages/95/82/800646c7ffc5dbabd75ddd2f6b519bb898c0c9c969e5d0473bfe5d20bcce/greenlet-3.5.0-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:362624e6a8e5bca3b8233e45eef33903a100e9539a2b995c364d595dbc4018b3", size = 604264, upload-time = "2026-04-27T12:52:39.494Z" },
- { url = "https://files.pythonhosted.org/packages/ca/ac/354867c0bba812fc33b15bc55aedafedd0aee3c7dd91dfca22444157dc0c/greenlet-3.5.0-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:5ecd83806b0f4c2f53b1018e0005cd82269ea01d42befc0368730028d850ed1c", size = 616099, upload-time = "2026-04-27T12:59:39.623Z" },
- { url = "https://files.pythonhosted.org/packages/ff/b0/815bece7399e01cadb69014219eebd0042339875c59a59b0820a46ece356/greenlet-3.5.0-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0ff251e9a0279522e62f6176412869395a64ddf2b5c5f782ff609a8216a4e662", size = 615198, upload-time = "2026-04-27T12:25:25.928Z" },
- { url = "https://files.pythonhosted.org/packages/10/80/3b2c0a895d6698f6ddb31b07942ebfa982f3e30888bc5546a5b5990de8b2/greenlet-3.5.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6d874e79afd41a96e11ff4c5d0bc90a80973e476fda1c2c64985667397df432b", size = 1574927, upload-time = "2026-04-27T12:53:25.81Z" },
- { url = "https://files.pythonhosted.org/packages/44/0e/f354af514a4c61454dbc68e44d47544a5a4d6317e30b77ddfa3a09f4c5f3/greenlet-3.5.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0ed006e4b86c59de7467eb2601cd1b77b5a7d657d1ee55e30fe30d76451edba4", size = 1642683, upload-time = "2026-04-27T12:25:23.9Z" },
- { url = "https://files.pythonhosted.org/packages/fa/6a/87f38255201e993a1915265ebb80cd7c2c78b04a45744995abbf6b259fd8/greenlet-3.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:703cb211b820dbffbbc55a16bfc6e4583a6e6e990f33a119d2cc8b83211119c8", size = 238115, upload-time = "2026-04-27T12:21:48.845Z" },
- { url = "https://files.pythonhosted.org/packages/e3/f8/450fe3c5938fa737ea4d22699772e6e34e8e24431a47bf4e8a1ceed4a98e/greenlet-3.5.0-cp311-cp311-win_arm64.whl", hash = "sha256:6c18dfb59c70f5a94acd271c72e90128c3c776e41e5f07767908c8c1b74ad339", size = 235017, upload-time = "2026-04-27T12:22:26.768Z" },
- { url = "https://files.pythonhosted.org/packages/ef/32/f2ce6d4cac3e55bc6173f92dbe627e782e1850f89d986c3606feb63aafa7/greenlet-3.5.0-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:db2910d3c809444e0a20147361f343fe2798e106af8d9d8506f5305302655a9f", size = 286228, upload-time = "2026-04-27T12:20:34.421Z" },
- { url = "https://files.pythonhosted.org/packages/b7/aa/caed9e5adf742315fc7be2a84196373aab4816e540e38ba0d76cb7584d68/greenlet-3.5.0-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3ec9ea74e7268ace7f9aab1b1a4e730193fc661b39a993cd91c606c32d4a3628", size = 601775, upload-time = "2026-04-27T12:52:41.045Z" },
- { url = "https://files.pythonhosted.org/packages/c7/af/90ae08497400a941595d12774447f752d3dfe0fbb012e35b76bc5c0ff37e/greenlet-3.5.0-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54d243512da35485fc7a6bf3c178fdda6327a9d6506fcdd62b1abd1e41b2927b", size = 614436, upload-time = "2026-04-27T12:59:41.595Z" },
- { url = "https://files.pythonhosted.org/packages/2b/e0/2e13df68f367e2f9960616927d60857dd7e56aaadd59a47c644216b2f920/greenlet-3.5.0-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d280a7f5c331622c69f97eb167f33577ff2d1df282c41cd15907fc0a3ca198c", size = 611388, upload-time = "2026-04-27T12:25:28.008Z" },
- { url = "https://files.pythonhosted.org/packages/82/f7/393c64055132ac0d488ef6be549253b7e6274194863967ddc0bc8f5b87b8/greenlet-3.5.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1eb67d5adefb5bd2e182d42678a328979a209e4e82eb93575708185d31d1f588", size = 1570768, upload-time = "2026-04-27T12:53:28.099Z" },
- { url = "https://files.pythonhosted.org/packages/b8/4b/eaf7735253522cf56d1b74d672a58f54fc114702ceaf05def59aae72f6e1/greenlet-3.5.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2628d6c86f6cb0cb45e0c3c54058bbec559f57eaae699447748cb3928150577e", size = 1635983, upload-time = "2026-04-27T12:25:26.903Z" },
- { url = "https://files.pythonhosted.org/packages/4c/fe/4fb3a0805bd5165da5ebf858da7cc01cce8061674106d2cf5bdab32cbfde/greenlet-3.5.0-cp312-cp312-win_amd64.whl", hash = "sha256:d4d9f0624c775f2dfc56ba54d515a8c771044346852a918b405914f6b19d7fd8", size = 238840, upload-time = "2026-04-27T12:23:54.806Z" },
- { url = "https://files.pythonhosted.org/packages/cb/cb/baa584cb00532126ffe12d9787db0a60c5a4f55c27bfe2666df5d4c30a32/greenlet-3.5.0-cp312-cp312-win_arm64.whl", hash = "sha256:83ed9f27f1680b50e89f40f6df348a290ea234b249a4003d366663a12eab94f2", size = 235615, upload-time = "2026-04-27T12:21:38.57Z" },
- { url = "https://files.pythonhosted.org/packages/0c/58/fc576f99037ce19c5aa16628e4c3226b6d1419f72a62c79f5f40576e6eb3/greenlet-3.5.0-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:5a5ed18de6a0f6cc7087f1563f6bd93fc7df1c19165ca01e9bde5a5dc281d106", size = 285066, upload-time = "2026-04-27T12:23:05.033Z" },
- { url = "https://files.pythonhosted.org/packages/4a/ba/b28ddbe6bfad6a8ac196ef0e8cff37bc65b79735995b9e410923fffeeb70/greenlet-3.5.0-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a717fbc46d8a354fa675f7c1e813485b6ba3885f9bef0cd56e5ba27d758ff5b", size = 604414, upload-time = "2026-04-27T12:52:42.358Z" },
- { url = "https://files.pythonhosted.org/packages/09/06/4b69f8f0b67603a8be2790e55107a190b376f2627fe0eaf5695d85ffb3cd/greenlet-3.5.0-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ddc090c5c1792b10246a78e8c2163ebbe04cf877f9d785c230a7b27b39ad038e", size = 617349, upload-time = "2026-04-27T12:59:43.32Z" },
- { url = "https://files.pythonhosted.org/packages/8a/17/a3918541fd0ddefe024a69de6d16aa7b46d36ac19562adaa63c7fa180eff/greenlet-3.5.0-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2094acd54b272cb6eae8c03dd87b3fa1820a4cef18d6889c378d503500a1dc13", size = 613927, upload-time = "2026-04-27T12:25:30.28Z" },
- { url = "https://files.pythonhosted.org/packages/ee/e1/bd0af6213c7dd33175d8a462d4c1fe1175124ebed4855bc1475a5b5242c2/greenlet-3.5.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5e05ba267789ea87b5a155cf0e810b1ab88bf18e9e8740813945ceb8ee4350ba", size = 1570893, upload-time = "2026-04-27T12:53:29.483Z" },
- { url = "https://files.pythonhosted.org/packages/9b/2a/0789702f864f5382cb476b93d7a9c823c10472658102ccd65f415747d2e2/greenlet-3.5.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0ecec963079cd58cbd14723582384f11f166fd58883c15dcbfb342e0bc9b5846", size = 1636060, upload-time = "2026-04-27T12:25:28.845Z" },
- { url = "https://files.pythonhosted.org/packages/b2/8f/22bf9df92bbff0eb07842b60f7e63bf7675a9742df628437a9f02d09137f/greenlet-3.5.0-cp313-cp313-win_amd64.whl", hash = "sha256:728d9667d8f2f586644b748dbd9bb67e50d6a9381767d1357714ea6825bb3bf5", size = 238740, upload-time = "2026-04-27T12:24:01.341Z" },
- { url = "https://files.pythonhosted.org/packages/b6/b7/9c5c3d653bd4ff614277c049ac676422e2c557db47b4fe43e6313fc005dc/greenlet-3.5.0-cp313-cp313-win_arm64.whl", hash = "sha256:47422135b1d308c14b2c6e758beedb1acd33bb91679f5670edf77bf46244722b", size = 235525, upload-time = "2026-04-27T12:23:12.308Z" },
+version = "3.5.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/6d/6e/802acd792aebb2256fbbee8cacf2727faaeb6f240ac11008f09eae4414bc/greenlet-3.5.1.tar.gz", hash = "sha256:5a56aeb7d5d9cc4b3a735efb5095bd4b4f6f0e4f93e5ca876d0e2315137b7829", size = 197356, upload-time = "2026-05-20T15:05:03.917Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/42/3c/ff890b466eaba2b0f5e6bdfff025f8c75f41b8ffdc3dbc3d24ad261e764a/greenlet-3.5.1-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:73f78f9b9f0a5c06e5c946ba1e8e36f5114923b6be109ee618c54f079c3ea14f", size = 284764, upload-time = "2026-05-20T13:09:10.204Z" },
+ { url = "https://files.pythonhosted.org/packages/81/0e/5e5457be3d256918f6a4756f073548a3f0190836e2cc94aa6d0d617a940b/greenlet-3.5.1-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a0cbed8bb44e23c5b199f888f4e4ce096b45ad9f25ff74a7ad0213875e936bb2", size = 603479, upload-time = "2026-05-20T14:00:04.757Z" },
+ { url = "https://files.pythonhosted.org/packages/6d/e1/f89a21d58d308298e6f275f13a1b472ed96c680b601a371b08be6a725989/greenlet-3.5.1-cp311-cp311-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:a203a8bd0acb0701653d3bbb26e404854a68674139ed5cbb778830f42b09bb33", size = 615495, upload-time = "2026-05-20T14:05:40.87Z" },
+ { url = "https://files.pythonhosted.org/packages/75/de/af6cef182862d2ccd6975440d21c9058a77c3f9b469abf94e322dfd2e0e3/greenlet-3.5.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a271fcd66c74615cda6a964fda3f304267a12e50a084472218a39bb0376f563", size = 614754, upload-time = "2026-05-20T13:14:24.947Z" },
+ { url = "https://files.pythonhosted.org/packages/1a/c6/50e520283a9f19388a7326b05f9e8637e566003475eacaadad04f558c68d/greenlet-3.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ded7b068c7c31c1a8657d4fd42d886b3e051ae29f88b80c5ff9d502257b0f071", size = 1574097, upload-time = "2026-05-20T14:02:24.003Z" },
+ { url = "https://files.pythonhosted.org/packages/21/1c/13abd1f4860d987fa5e1170a01930d6e6cd40d328de487a3c9fdaff0ffd0/greenlet-3.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d0932b81d72f552ded9d810d00021b64d89f2195a91ce115b893f943b7a4ab3c", size = 1641058, upload-time = "2026-05-20T13:14:31.83Z" },
+ { url = "https://files.pythonhosted.org/packages/f5/56/5f332b7705545eac2dc01b4e9254d24a793f2656d55d5cc6b94ee59d22ae/greenlet-3.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:88e300d136eac057b2397aa1cfd7328b4c87c7eb66a09c7bc6a1292234db474e", size = 238089, upload-time = "2026-05-20T13:14:03.229Z" },
+ { url = "https://files.pythonhosted.org/packages/d9/a9/a3c2fa886c5b94863fb0e61b3bc14610b7aa94cf4f17f8741b11708305fc/greenlet-3.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:cc6ab7e555c8a112ad3a76e368e86e12a2754bcae1652a5602e133ec7b635523", size = 234989, upload-time = "2026-05-20T13:08:27.715Z" },
+ { url = "https://files.pythonhosted.org/packages/c4/37/4549f149c9797c21b32c2683c33522af22522099de128b2406672526d005/greenlet-3.5.1-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:fa4f98af3a528f0c3fd592a26df7f376f93329c8f4d987f6bb979057af8bf5e2", size = 286220, upload-time = "2026-05-20T13:07:28.463Z" },
+ { url = "https://files.pythonhosted.org/packages/38/ff/a4f436709716965eaab9f36ea7b906c8a927fbe32fb1372a2071d964f6b1/greenlet-3.5.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ffea73584b216150eab159b6d12348fb253e68757974de1e2c40d8a318ac89ed", size = 601585, upload-time = "2026-05-20T14:00:06.141Z" },
+ { url = "https://files.pythonhosted.org/packages/65/ad/54bc3fcee3ad368a61b19b67d88117f7a8c29727bf71fffdeda81fbd946e/greenlet-3.5.1-cp312-cp312-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1072b4f9edcc1e192d9283a66a3e68d6b84c561de33a83d7858beb9ba1effe10", size = 614215, upload-time = "2026-05-20T14:05:42.675Z" },
+ { url = "https://files.pythonhosted.org/packages/40/69/b91cda0647df839483201545913514c2827ebea5e5ccdf931842763bc127/greenlet-3.5.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:add5217d68b31130f0beca584d7fef4878327d2e31642b66618a14eef312b63b", size = 611358, upload-time = "2026-05-20T13:14:26.37Z" },
+ { url = "https://files.pythonhosted.org/packages/59/90/3cf77e080350cd02fa307bb2abf05df48f4482c240275bbd2c203ba8bb1c/greenlet-3.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a5ea42a752d47a145eae922b605cd1634665ac3d5ec1e72402d5048e8d60d207", size = 1570475, upload-time = "2026-05-20T14:02:25.29Z" },
+ { url = "https://files.pythonhosted.org/packages/65/2c/18cece62045e74598c3c393f70dce4a63f56222015ba29a5d4eeb04f764c/greenlet-3.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c5551170cf4f5ff5623e9af81323751979fee2c731e2287b61f73cd27257b823", size = 1635625, upload-time = "2026-05-20T13:14:34.027Z" },
+ { url = "https://files.pythonhosted.org/packages/30/f5/310d104ddf41eb5a70f4c268d22508dfb0c3c8e86fec152be34d0d2ed819/greenlet-3.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:3c8bb982ad117d29478ef8f5533e97df21f1e2befd17a299257b0c96d1371c0b", size = 238791, upload-time = "2026-05-20T13:10:39.018Z" },
+ { url = "https://files.pythonhosted.org/packages/62/90/ceca11f504cd23a8047a3dea31919adc48df9b626dd0c13f0d858734fdfd/greenlet-3.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:80eb4b04dadc4e67df3fae179a32c4706a3f495bc7f22fc8a81115d5f5512188", size = 235580, upload-time = "2026-05-20T13:08:45.056Z" },
+ { url = "https://files.pythonhosted.org/packages/27/69/7f7e5372d998b81001899b1c0823c957aa413ba0f2662e65821611cc31e4/greenlet-3.5.1-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:51518ff74664078fc51bffcc6fc529b0df5ae58da192691cee765d45ce944a2b", size = 285060, upload-time = "2026-05-20T13:08:51.899Z" },
+ { url = "https://files.pythonhosted.org/packages/b1/bf/387f9b6b865fd2ae0d0be09e0004827295a01b71be76ed350dd1e28a91a4/greenlet-3.5.1-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ffdb3c0bb002c99cd8f298957e046c3dbf6006b5b7cdf11a4e19194624a0a0a", size = 604370, upload-time = "2026-05-20T14:00:07.492Z" },
+ { url = "https://files.pythonhosted.org/packages/32/f5/169ce3d4e4c67291bd18f8cbe0299c9f3e45102c7f1fb3c14780c93e4532/greenlet-3.5.1-cp313-cp313-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:7715a5a2c3378ba602c3a440558261e13a820bb53a82693aacd7b7f6d964e283", size = 616987, upload-time = "2026-05-20T14:05:44.237Z" },
+ { url = "https://files.pythonhosted.org/packages/ee/e5/7f2e41d5273be07e77560d61ea4e56485b4d6c316d2a84518c62d1364061/greenlet-3.5.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dc71ff466927a201b08305acac451ebe1aedfcea002f62f1f2f2ac2ac1e6a135", size = 613911, upload-time = "2026-05-20T13:14:27.539Z" },
+ { url = "https://files.pythonhosted.org/packages/c5/a4/fbdc67579b73615a1f91615e814303cc71e06128f7baaba87be79b8fb90c/greenlet-3.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cd443683db272ebaaca03af98c0b063ab30db70ea8a31a1559f35e3f7b744ccd", size = 1570689, upload-time = "2026-05-20T14:02:27.225Z" },
+ { url = "https://files.pythonhosted.org/packages/e6/b4/77abbe35078be39718a46cd49caf16bceb35662f97a34101dca28aa98e47/greenlet-3.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:089fff7a6ce8d9316d1f65ebc00273a56be258c1725b32b94de90a3a979557e1", size = 1635602, upload-time = "2026-05-20T13:14:36.344Z" },
+ { url = "https://files.pythonhosted.org/packages/37/f7/129f27ca700845b8ee8ca88ce7f43435a1239c2eddb7677fc938822762cf/greenlet-3.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:110a1ca7b49b014b097f6078272c3f4ed31af45b254de5228b79adba879f6af9", size = 238683, upload-time = "2026-05-20T13:11:50.57Z" },
+ { url = "https://files.pythonhosted.org/packages/6d/5c/a485a36e87df8d8fd0632ee01511244f5156a20ed3746cc6599340326395/greenlet-3.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:f16ba1efc0715b680a18b8123d90dad887c6112ae3555b4b5c32c149540c6b4e", size = 235499, upload-time = "2026-05-20T13:12:42.028Z" },
]
[[package]]
name = "idna"
-version = "3.13"
+version = "3.18"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/ce/cc/762dfb036166873f0059f3b7de4565e1b5bc3d6f28a414c13da27e442f99/idna-3.13.tar.gz", hash = "sha256:585ea8fe5d69b9181ec1afba340451fba6ba764af97026f92a91d4eef164a242", size = 194210, upload-time = "2026-04-22T16:42:42.314Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711, upload-time = "2026-06-02T14:34:07.794Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/5d/13/ad7d7ca3808a898b4612b6fe93cde56b53f3034dcde235acb1f0e1df24c6/idna-3.13-py3-none-any.whl", hash = "sha256:892ea0cde124a99ce773decba204c5552b69c3c67ffd5f232eb7696135bc8bb3", size = 68629, upload-time = "2026-04-22T16:42:40.909Z" },
+ { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455, upload-time = "2026-06-02T14:34:06.319Z" },
]
[[package]]
@@ -417,7 +417,7 @@ wheels = [
[[package]]
name = "ipython"
-version = "9.13.0"
+version = "9.14.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "colorama", marker = "sys_platform == 'win32'" },
@@ -427,15 +427,15 @@ dependencies = [
{ name = "matplotlib-inline" },
{ name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" },
{ name = "prompt-toolkit" },
- { name = "psutil" },
+ { name = "psutil", marker = "sys_platform != 'emscripten'" },
{ name = "pygments" },
{ name = "stack-data" },
{ name = "traitlets" },
{ name = "typing-extensions", marker = "python_full_version < '3.12'" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/cd/c4/87cda5842cf5c31837c06ddb588e11c3c35d8ece89b7a0108c06b8c9b00a/ipython-9.13.0.tar.gz", hash = "sha256:7e834b6afc99f020e3f05966ced34792f40267d64cb1ea9043886dab0dde5967", size = 4430549, upload-time = "2026-04-24T12:24:55.221Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/21/c2/c0064cf15d026501a1ef70e42efd9c3f818663089399aacc5e37a82901c1/ipython-9.14.0.tar.gz", hash = "sha256:6f27ff0f1d9ea050e0551f71568bc4b34d8aba579e8f111c5b4175f44ac6b4aa", size = 4432601, upload-time = "2026-05-29T15:13:24.611Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/b9/86/3060e8029b7cc505cce9a0137431dda81d0a3fde93a8f0f50ee0bf37a795/ipython-9.13.0-py3-none-any.whl", hash = "sha256:57f9d4639e20818d328d287c7b549af3d05f12486ea8f2e7f73e52a36ec4d201", size = 627274, upload-time = "2026-04-24T12:24:53.038Z" },
+ { url = "https://files.pythonhosted.org/packages/14/a3/9e59340f02c1dc8f8c0a05b09244712b8609eb5439f9996e887e2b82f452/ipython-9.14.0-py3-none-any.whl", hash = "sha256:8fd984a3372c14b12790b084ba6b5cff5678c0cb063244a0034f06a51f20d6c2", size = 627457, upload-time = "2026-05-29T15:13:22.942Z" },
]
[[package]]
@@ -452,14 +452,14 @@ wheels = [
[[package]]
name = "jedi"
-version = "0.19.2"
+version = "0.20.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "parso" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287, upload-time = "2024-11-11T01:41:42.873Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/46/b7/a3635f6a2d7cf5b5dd98064fc1d5fbbafcb25477bcea204a3a92145d158b/jedi-0.20.0.tar.gz", hash = "sha256:c3f4ccbd276696f4b19c54618d4fb18f9fc24b0aef02acf704b23f487daa1011", size = 3119416, upload-time = "2026-05-01T23:38:47.814Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278, upload-time = "2024-11-11T01:41:40.175Z" },
+ { url = "https://files.pythonhosted.org/packages/9a/93/242e2eab5fe682ffcb8b0084bde703a41d51e17ee0f3a31ff0d9d813620a/jedi-0.20.0-py2.py3-none-any.whl", hash = "sha256:7bdd9c2634f56713299976f4cbd59cb3fa92165cc5e05ea811fb253480728b67", size = 4884812, upload-time = "2026-05-01T23:38:43.919Z" },
]
[[package]]
@@ -492,7 +492,7 @@ wheels = [
[[package]]
name = "jijmodeling"
-version = "2.4.0"
+version = "2.5.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "numpy" },
@@ -502,13 +502,13 @@ dependencies = [
{ name = "typing-extensions" },
]
wheels = [
- { url = "https://files.pythonhosted.org/packages/b3/57/9d139f7d0578109e7bff8dcadcaba3264bf0db2bdb75a083596448f4e0db/jijmodeling-2.4.0-cp310-abi3-macosx_10_16_x86_64.whl", hash = "sha256:808330a2abd2cb87bd3bb9de02eb8746dd58d247e6cffdfd435dcdf7a892dee9", size = 11869201, upload-time = "2026-04-23T06:50:03.296Z" },
- { url = "https://files.pythonhosted.org/packages/c0/5f/a0a2a0fae54786631cec75e887a34365fc9576354b4035ef51a35a14abd2/jijmodeling-2.4.0-cp310-abi3-macosx_11_0_x86_64.macosx_11_0_arm64.macosx_11_0_universal2.whl", hash = "sha256:89168d2ec7760e41f4bfc769fc4c430a0d3dd4de4db3cc3b2f791cabdcffa4f4", size = 23176126, upload-time = "2026-04-23T06:50:06.456Z" },
- { url = "https://files.pythonhosted.org/packages/60/ae/96872431614a2c327a12b8d4a6f9687fb362a40036ede370e7e49c292518/jijmodeling-2.4.0-cp310-abi3-macosx_12_0_x86_64.macosx_12_0_arm64.macosx_12_0_universal2.whl", hash = "sha256:6521decd2ae887f34c563f991501e97e555347c135ed2ef7dccdc093498eb146", size = 23175629, upload-time = "2026-04-23T06:54:10.777Z" },
- { url = "https://files.pythonhosted.org/packages/48/ad/e9f9b508d3696db319e18657bd070b4db9101deada6ecee89f60aeac1946/jijmodeling-2.4.0-cp310-abi3-macosx_13_0_x86_64.macosx_13_0_arm64.macosx_13_0_universal2.whl", hash = "sha256:f79e430ef312fbc222c80257d9da3260b61ce9baaffb1e1112856d2fec07db33", size = 23175628, upload-time = "2026-04-23T06:54:13.626Z" },
- { url = "https://files.pythonhosted.org/packages/a1/f4/3829dac375c5d502714a693fce968beb4fefc1758a55a1bed5ae3f7c8b16/jijmodeling-2.4.0-cp310-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:9c8567fe9169e2578428d7fc136a3cccd7fd157298793636807d3bf8c200e8b3", size = 11520265, upload-time = "2026-04-23T06:54:15.982Z" },
- { url = "https://files.pythonhosted.org/packages/fc/e4/811c1f6dfc9057ce6faf03e0fd80fad31d9ba216db70f168d5c67953b36d/jijmodeling-2.4.0-cp310-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f2c9a20e7dc25bc3fd8d7bd2434b039b49d097128e64142f00c6d6fa88d510d7", size = 12289784, upload-time = "2026-04-23T06:54:18.179Z" },
- { url = "https://files.pythonhosted.org/packages/0d/1d/c2e864bb08ccc12241a28643548d332226047e20d0d5998a48409eee0fe1/jijmodeling-2.4.0-cp310-abi3-win_amd64.whl", hash = "sha256:922af91038b1224104e334a99f2be108c2725f23b0e3736746eb5abd1d6c9551", size = 13708072, upload-time = "2026-04-23T06:54:20.302Z" },
+ { url = "https://files.pythonhosted.org/packages/e1/9d/b381477e79b94d60ef850f40a2852090ebfe802939ad5e27fe6aa7845405/jijmodeling-2.5.0-cp310-abi3-macosx_10_16_x86_64.whl", hash = "sha256:3363ace4668e2f6f05839898bef7253d3cb9b8402895c0b45b87deb7ab807454", size = 12309448, upload-time = "2026-06-04T02:36:51.232Z" },
+ { url = "https://files.pythonhosted.org/packages/5d/f2/43129ab5c478fa4fd0f74126c53fa97e4e880cc54bf9527459cf9cb5e0e3/jijmodeling-2.5.0-cp310-abi3-macosx_11_0_x86_64.macosx_11_0_arm64.macosx_11_0_universal2.whl", hash = "sha256:a2ab2f604d12a41402aa94f4ae1ae5b7bd686bc8cd880b57523d432264e1663a", size = 24023555, upload-time = "2026-06-04T02:36:54.517Z" },
+ { url = "https://files.pythonhosted.org/packages/3f/3a/7bcfba634c9aedb298c862e65c52ba183ccfa8619938699711ef1ad66757/jijmodeling-2.5.0-cp310-abi3-macosx_12_0_x86_64.macosx_12_0_arm64.macosx_12_0_universal2.whl", hash = "sha256:75121cffc81d9345f0077a774190fdf892e0cd34f37d564fb3fb90de64c5010b", size = 24024157, upload-time = "2026-06-04T02:36:57.726Z" },
+ { url = "https://files.pythonhosted.org/packages/f8/8b/ec7a8c6a6e71049391075d2c1b8dddc46be098059381a900e3f5fb4695ea/jijmodeling-2.5.0-cp310-abi3-macosx_13_0_x86_64.macosx_13_0_arm64.macosx_13_0_universal2.whl", hash = "sha256:09faec43e2b0d92c3289eeb42d8090c94a84acb0cbebcf5134f74d037fd45367", size = 24024164, upload-time = "2026-06-04T02:37:00.37Z" },
+ { url = "https://files.pythonhosted.org/packages/b7/ca/280dca2a6d892e68ea724b8e12610a5fc2a4a55b98e3a2e88d7ee89097ed/jijmodeling-2.5.0-cp310-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:602cfd29a8ed3212d6232f136cdedecd0ed0bb1f256ec624a414b1a5604692eb", size = 11925264, upload-time = "2026-06-04T02:37:02.689Z" },
+ { url = "https://files.pythonhosted.org/packages/ca/a0/db7aa96cad9a68b407e6e71c2e4b99f7424f83210e0211872dfa80b92dfc/jijmodeling-2.5.0-cp310-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:af4a9e0d5fca40e07b2161a34d3ab42dc57ee6365ed09311e95744626f92971b", size = 12732377, upload-time = "2026-06-04T02:37:04.93Z" },
+ { url = "https://files.pythonhosted.org/packages/d5/8c/cad113147517654be5023ae71ff4fb5f43e811bda44eda05431e3864b7ef/jijmodeling-2.5.0-cp310-abi3-win_amd64.whl", hash = "sha256:f7a9412fb1832d619eb3f6772f6da6813f106956d0abff6c848ba21b682c7062", size = 14270491, upload-time = "2026-06-04T02:37:07.161Z" },
]
[[package]]
@@ -670,7 +670,7 @@ wheels = [
[[package]]
name = "jupytext"
-version = "1.19.1"
+version = "1.19.3"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "markdown-it-py" },
@@ -679,9 +679,9 @@ dependencies = [
{ name = "packaging" },
{ name = "pyyaml" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/13/a5/80c02f307c8ce863cb33e27daf049315e9d96979e14eead700923b5ec9cc/jupytext-1.19.1.tar.gz", hash = "sha256:82587c07e299173c70ed5e8ec7e75183edf1be289ed518bab49ad0d4e3d5f433", size = 4307829, upload-time = "2026-01-25T21:35:13.276Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/ef/2d/15624c3d9440d85a280ff13d2d23afd989802f25470ac59932f4fef6f0c6/jupytext-1.19.3.tar.gz", hash = "sha256:713c3ed4441afe0f31474d28ea2e6b61a268c04c40fd78e5ccfd7f7ac9e9f766", size = 4305350, upload-time = "2026-05-17T09:09:29.294Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/16/5a/736dd2f4535dbf3bf26523f9158c011389ef88dd06ec2eef67fd744f1c7b/jupytext-1.19.1-py3-none-any.whl", hash = "sha256:d8975035155d034bdfde5c0c37891425314b7ea8d3a6c4b5d18c294348714cd9", size = 170478, upload-time = "2026-01-25T21:35:11.17Z" },
+ { url = "https://files.pythonhosted.org/packages/aa/ec/d9be3bd1db141e76b2f525c265f70e66edd30a51a3307d8edf0ef1909c54/jupytext-1.19.3-py3-none-any.whl", hash = "sha256:acf75492f80895ad8e664fd8db1708b617008dd0e71c341a1abc3d0d07310ed0", size = 170579, upload-time = "2026-05-17T09:09:27.478Z" },
]
[[package]]
@@ -771,26 +771,26 @@ wheels = [
[[package]]
name = "matplotlib-inline"
-version = "0.2.1"
+version = "0.2.2"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "traitlets" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/c7/74/97e72a36efd4ae2bccb3463284300f8953f199b5ffbc04cbbb0ec78f74b1/matplotlib_inline-0.2.1.tar.gz", hash = "sha256:e1ee949c340d771fc39e241ea75683deb94762c8fa5f2927ec57c83c4dffa9fe", size = 8110, upload-time = "2025-10-23T09:00:22.126Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/bd/c0/9f7c9a46090390368a4d7bcb76bb87a4a36c421e4c0792cdb53486ffac7a/matplotlib_inline-0.2.2.tar.gz", hash = "sha256:72f3fe8fce36b70d4a5b612f899090cd0401deddc4ea90e1572b9f4bfb058c79", size = 8150, upload-time = "2026-05-08T17:33:33.49Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl", hash = "sha256:d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76", size = 9516, upload-time = "2025-10-23T09:00:20.675Z" },
+ { url = "https://files.pythonhosted.org/packages/41/09/5b161152e2d90f7b87f781c2e1267494aef9c32498df793f73ad0a0a494a/matplotlib_inline-0.2.2-py3-none-any.whl", hash = "sha256:3c821cf1c209f59fb2d2d64abbf5b23b67bcb2210d663f9918dd851c6da1fcf6", size = 9534, upload-time = "2026-05-08T17:33:32.055Z" },
]
[[package]]
name = "mdit-py-plugins"
-version = "0.5.0"
+version = "0.6.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "markdown-it-py" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/b2/fd/a756d36c0bfba5f6e39a1cdbdbfdd448dc02692467d83816dff4592a1ebc/mdit_py_plugins-0.5.0.tar.gz", hash = "sha256:f4918cb50119f50446560513a8e311d574ff6aaed72606ddae6d35716fe809c6", size = 44655, upload-time = "2025-08-11T07:25:49.083Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/59/fc/f8d0863f8862f25602c0404d75568e89fb6b4109804645e5cdfb1be5cf56/mdit_py_plugins-0.6.1.tar.gz", hash = "sha256:a2bca0f039f39dbd35fb74ae1b5f998608c437463371f0ff7f49a19a17a114d0", size = 56114, upload-time = "2026-05-13T09:03:38.91Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/fb/86/dd6e5db36df29e76c7a7699123569a4a18c1623ce68d826ed96c62643cae/mdit_py_plugins-0.5.0-py3-none-any.whl", hash = "sha256:07a08422fc1936a5d26d146759e9155ea466e842f5ab2f7d2266dd084c8dab1f", size = 57205, upload-time = "2025-08-11T07:25:47.597Z" },
+ { url = "https://files.pythonhosted.org/packages/a5/69/6da5581c6a7fede7dc261bf4e67d6adca4196f176b43288b55b3db395b6e/mdit_py_plugins-0.6.1-py3-none-any.whl", hash = "sha256:214c82fb2ac524472ab6a5bcab1de80f73b50443e187f401bfd77efbc7c6481d", size = 66663, upload-time = "2026-05-13T09:03:37.76Z" },
]
[[package]]
@@ -804,11 +804,11 @@ wheels = [
[[package]]
name = "mistune"
-version = "3.2.0"
+version = "3.2.1"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/9d/55/d01f0c4b45ade6536c51170b9043db8b2ec6ddf4a35c7ea3f5f559ac935b/mistune-3.2.0.tar.gz", hash = "sha256:708487c8a8cdd99c9d90eb3ed4c3ed961246ff78ac82f03418f5183ab70e398a", size = 95467, upload-time = "2025-12-23T11:36:34.994Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/ca/84/620cc3f7e3adf6f5067e10f4dbae71295d8f9e16d5d3f9ef97c40f2f592c/mistune-3.2.1.tar.gz", hash = "sha256:7c8e5501d38bac1582e067e46c8343f17d57ea1aaa735823f3aba1fd59c88a28", size = 98003, upload-time = "2026-05-03T14:33:22.312Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/9b/f7/4a5e785ec9fbd65146a27b6b70b6cdc161a66f2024e4b04ac06a67f5578b/mistune-3.2.0-py3-none-any.whl", hash = "sha256:febdc629a3c78616b94393c6580551e0e34cc289987ec6c35ed3f4be42d0eee1", size = 53598, upload-time = "2025-12-23T11:36:33.211Z" },
+ { url = "https://files.pythonhosted.org/packages/2a/7f/a946aa4f8752b37102b41e64dca18a1976ac705c3a0d1dfe74d820a02552/mistune-3.2.1-py3-none-any.whl", hash = "sha256:78cdb0ba5e938053ccf63651b352508d2efa9411dc8810bfb05f2dc5140c0048", size = 53749, upload-time = "2026-05-03T14:33:20.551Z" },
]
[[package]]
@@ -974,7 +974,7 @@ wheels = [
[[package]]
name = "ommx"
-version = "2.5.2"
+version = "2.6.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "numpy" },
@@ -985,35 +985,35 @@ dependencies = [
{ name = "typing-extensions" },
]
wheels = [
- { url = "https://files.pythonhosted.org/packages/b6/24/e26694e375b447953605a78836340682047ed87e5aae5d0c5469d7f6d257/ommx-2.5.2-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:9da77e39471705624cc78c9a84077822c1f3850b0e1487b5bec7fc2b2ec09921", size = 4104663, upload-time = "2026-04-24T09:19:13.984Z" },
- { url = "https://files.pythonhosted.org/packages/f9/8e/c6573f25e434a8e34553df6d76d376fbdb5faf13683a733530157aa850b1/ommx-2.5.2-cp310-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:0f8c6eb78f6ef95a9e18a0366d5e27e62694f17e44aa4c7dc862262a8d2b84a2", size = 39377498, upload-time = "2026-04-24T09:19:16.627Z" },
- { url = "https://files.pythonhosted.org/packages/78/8c/30b48294be1c1379aaaccf86049ae34785b3defcc1b766af2569873cfc6e/ommx-2.5.2-cp310-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:21ad21a8d279fa34ec13b5e950b93a44c7117e98befa083a9d691e5dd4cab6d6", size = 43465505, upload-time = "2026-04-24T09:19:19.624Z" },
- { url = "https://files.pythonhosted.org/packages/77/09/cd4d71b1963e2c2db9e498acf35b3c1b21724db227b7b03e0352917a5145/ommx-2.5.2-cp310-abi3-win_amd64.whl", hash = "sha256:9cbf62570fc86884a595b8cacf475df2347734e2af0fe0fdfb15b263e1aa17cb", size = 3695771, upload-time = "2026-04-24T09:19:22.472Z" },
- { url = "https://files.pythonhosted.org/packages/bf/a8/b736558a84428ee815967c40c37f1d7a59c5d715ccfab6dd23c056628d4c/ommx-2.5.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:eabdb64bd08da56b485678d9895be41df6016bedf9f17d5bb98dc61c0635a595", size = 4093145, upload-time = "2026-04-24T09:19:24.338Z" },
- { url = "https://files.pythonhosted.org/packages/f1/4a/18f67d96e406002e8904e521ae07f29853d3dc9696bfea22c164dff7217a/ommx-2.5.2-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:bcb2762da5adc913b47b3eca1c10d0a6ee2e8f9ce8905ac2eb30684b0c677cfb", size = 39435851, upload-time = "2026-04-24T09:19:26.779Z" },
- { url = "https://files.pythonhosted.org/packages/03/04/a49fc96aaa844632e36ed62246f8fa97e4ac93a3474882d60806bb5da4aa/ommx-2.5.2-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:65f1a4348a801c4261199357be850f3f215f8648ed6bf1a4e1cd8af7d085f45a", size = 43506180, upload-time = "2026-04-24T09:19:30.409Z" },
- { url = "https://files.pythonhosted.org/packages/79/f4/ca54398c5a4a1009899e15102909fe7ab575c797244ba582eb9da018cd3d/ommx-2.5.2-cp313-cp313t-win_amd64.whl", hash = "sha256:151982679058b5d6d7cfb1f3d0970942bb430eaa40cdc0056591d351f4910e9b", size = 3693508, upload-time = "2026-04-24T09:19:33.152Z" },
+ { url = "https://files.pythonhosted.org/packages/37/2d/ecb2a7521935e51480861679a57a1e0cfde1690a0e4c6bee5ed9ce796975/ommx-2.6.1-cp310-abi3-macosx_11_0_arm64.whl", hash = "sha256:1663ea6ddfcd2f569ec8fb9d962cb79d2022e4ca6ec07bfbdb9118aa69a51928", size = 4116953, upload-time = "2026-05-22T12:26:53.389Z" },
+ { url = "https://files.pythonhosted.org/packages/e8/5b/3b27b7966eb7e6b032a24a44a76942d51e742abb7461b75e2c99922d8282/ommx-2.6.1-cp310-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:d86956833dd36170a7ed8882317df60607b0c065bacfdf990c02ff65dcdadad5", size = 39445653, upload-time = "2026-05-22T12:26:57.044Z" },
+ { url = "https://files.pythonhosted.org/packages/c6/96/8a6791a5fe4d2ee14c48777e08547a106763d865ed6ff8074d44c53f1799/ommx-2.6.1-cp310-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a3389c692183e0334aa4ab2e148d596dd1e6659a6af25a8184c9a3b59977d174", size = 43583484, upload-time = "2026-05-22T12:27:01.074Z" },
+ { url = "https://files.pythonhosted.org/packages/8e/01/67b9b14a5932809857b2d29e5767a7172c5174014c592400e74bf5f7f947/ommx-2.6.1-cp310-abi3-win_amd64.whl", hash = "sha256:f6ab9d60f12abbcbbc88e230d2ee932212fb0e1dfeac4d5a8ab5b83d211e0511", size = 3733374, upload-time = "2026-05-22T12:27:04.495Z" },
+ { url = "https://files.pythonhosted.org/packages/76/45/ce5fd28745da5da73cfa38f24fc97837b1bfc9fced64b6d912c17e0af1e7/ommx-2.6.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e23c3ff1fe70c604380c1d664a68b841f3615677a541ad2308c6ae4feea5cd18", size = 4110122, upload-time = "2026-05-22T12:27:06.275Z" },
+ { url = "https://files.pythonhosted.org/packages/96/3e/a8e22786b2f427c361e214440647a0903d0be8e36f35c08e2f09593cee17/ommx-2.6.1-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:b5c81c315e0f0eceef6abb6ea80780d10e1daf6bd605f8148e994e2fbafbd006", size = 39637993, upload-time = "2026-05-22T12:27:09.809Z" },
+ { url = "https://files.pythonhosted.org/packages/2e/e2/b6e3fd7b6f84833a660c87764cbef7f1e607eeb9fbc579e4e4414dd90202/ommx-2.6.1-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:fd6ab7d2efc8843262ab1b921436daa7e68b473facf13606a9d52b40b6060020", size = 43773376, upload-time = "2026-05-22T12:27:14.999Z" },
+ { url = "https://files.pythonhosted.org/packages/4a/61/d2928e0a31724e76882c681bae8fa92b42a474b4befb422212b7836c8a8f/ommx-2.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:a590e1613e8f1e07e941ecf76619cf3b2357b8ede5741d60a67d48b8f4b910b2", size = 3731877, upload-time = "2026-05-22T12:27:18.361Z" },
]
[[package]]
name = "ommx-openjij-adapter"
-version = "2.5.2"
+version = "2.6.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "ommx" },
{ name = "openjij" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/11/e3/16ba562ad4708f825f5fefc7503f6f3c05f955592b505429188efeb09104/ommx_openjij_adapter-2.5.2.tar.gz", hash = "sha256:25cbe88a5cc5b3b189038a43705c11e11ca5a34f94870d0122b70d09898902e7", size = 5728, upload-time = "2026-04-24T09:19:45.381Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/c1/aa/e5d75137ac331416f9882ffb0034ed331068b4ce6fd617aba4016a28d6cf/ommx_openjij_adapter-2.6.1.tar.gz", hash = "sha256:608b2a8801b62d2c5db8f2cef9cd97665051474bb1d75834c9a55783d95c3e9e", size = 5721, upload-time = "2026-05-22T12:27:32.96Z" }
[[package]]
name = "ommx-pyscipopt-adapter"
-version = "2.5.2"
+version = "2.6.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "ommx" },
{ name = "pyscipopt" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/bb/5e/a06af60c38a4e14f52452affa0fdb5341ea310e7ed17828a34bcd2df156f/ommx_pyscipopt_adapter-2.5.2.tar.gz", hash = "sha256:689ab2b97eae809a1d708576ea4532e3a7892ab68104d409db6fe5e82c93304e", size = 11040, upload-time = "2026-04-24T09:19:46.323Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/55/1f/cace3841f684e9ea0383c8edf99ca1048e4b5646293f89c9fa4d6ab132e3/ommx_pyscipopt_adapter-2.6.1.tar.gz", hash = "sha256:b4d7d31887031c4d562b4e24e595fc1799bd940c231724887558941c623c3dce", size = 11062, upload-time = "2026-05-22T12:27:33.988Z" }
[[package]]
name = "openjij"
@@ -1045,55 +1045,55 @@ wheels = [
[[package]]
name = "orjson"
-version = "3.11.8"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/9d/1b/2024d06792d0779f9dbc51531b61c24f76c75b9f4ce05e6f3377a1814cea/orjson-3.11.8.tar.gz", hash = "sha256:96163d9cdc5a202703e9ad1b9ae757d5f0ca62f4fa0cc93d1f27b0e180cc404e", size = 5603832, upload-time = "2026-03-31T16:16:27.878Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/67/41/5aa7fa3b0f4dc6b47dcafc3cea909299c37e40e9972feabc8b6a74e2730d/orjson-3.11.8-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:003646067cc48b7fcab2ae0c562491c9b5d2cbd43f1e5f16d98fd118c5522d34", size = 229229, upload-time = "2026-03-31T16:14:50.424Z" },
- { url = "https://files.pythonhosted.org/packages/0a/d7/57e7f2458e0a2c41694f39fc830030a13053a84f837a5b73423dca1f0938/orjson-3.11.8-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:ed193ce51d77a3830cad399a529cd4ef029968761f43ddc549e1bc62b40d88f8", size = 128871, upload-time = "2026-03-31T16:14:51.888Z" },
- { url = "https://files.pythonhosted.org/packages/53/4a/e0fdb9430983e6c46e0299559275025075568aad5d21dd606faee3703924/orjson-3.11.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f30491bc4f862aa15744b9738517454f1e46e56c972a2be87d70d727d5b2a8f8", size = 132104, upload-time = "2026-03-31T16:14:53.142Z" },
- { url = "https://files.pythonhosted.org/packages/08/4a/2025a60ff3f5c8522060cda46612d9b1efa653de66ed2908591d8d82f22d/orjson-3.11.8-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6eda5b8b6be91d3f26efb7dc6e5e68ee805bc5617f65a328587b35255f138bf4", size = 130483, upload-time = "2026-03-31T16:14:54.605Z" },
- { url = "https://files.pythonhosted.org/packages/2d/3c/b9cde05bdc7b2385c66014e0620627da638d3d04e4954416ab48c31196c5/orjson-3.11.8-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ee8db7bfb6fe03581bbab54d7c4124a6dd6a7f4273a38f7267197890f094675f", size = 135481, upload-time = "2026-03-31T16:14:55.901Z" },
- { url = "https://files.pythonhosted.org/packages/ff/f2/a8238e7734de7cb589fed319857a8025d509c89dc52fdcc88f39c6d03d5a/orjson-3.11.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d8b5231de76c528a46b57010bbd83fb51e056aa0220a372fd5065e978406f1c", size = 146819, upload-time = "2026-03-31T16:14:57.548Z" },
- { url = "https://files.pythonhosted.org/packages/db/10/dbf1e2a3cafea673b1b4350e371877b759060d6018a998643b7040e5de48/orjson-3.11.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:58a4a208a6fbfdb7a7327b8f201c6014f189f721fd55d047cafc4157af1bc62a", size = 132846, upload-time = "2026-03-31T16:14:58.91Z" },
- { url = "https://files.pythonhosted.org/packages/f8/fc/55e667ec9c85694038fcff00573d221b085d50777368ee3d77f38668bf3c/orjson-3.11.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f8952d6d2505c003e8f0224ff7858d341fa4e33fef82b91c4ff0ef070f2393c", size = 133580, upload-time = "2026-03-31T16:15:00.519Z" },
- { url = "https://files.pythonhosted.org/packages/7e/a6/c08c589a9aad0cb46c4831d17de212a2b6901f9d976814321ff8e69e8785/orjson-3.11.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0022bb50f90da04b009ce32c512dc1885910daa7cb10b7b0cba4505b16db82a8", size = 142042, upload-time = "2026-03-31T16:15:01.906Z" },
- { url = "https://files.pythonhosted.org/packages/5c/cc/2f78ea241d52b717d2efc38878615fe80425bf2beb6e68c984dde257a766/orjson-3.11.8-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:ff51f9d657d1afb6f410cb435792ce4e1fe427aab23d2fcd727a2876e21d4cb6", size = 423845, upload-time = "2026-03-31T16:15:03.703Z" },
- { url = "https://files.pythonhosted.org/packages/70/07/c17dcf05dd8045457538428a983bf1f1127928df5bf328cb24d2b7cddacb/orjson-3.11.8-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6dbe9a97bdb4d8d9d5367b52a7c32549bba70b2739c58ef74a6964a6d05ae054", size = 147729, upload-time = "2026-03-31T16:15:05.203Z" },
- { url = "https://files.pythonhosted.org/packages/90/6c/0fb6e8a24e682e0958d71711ae6f39110e4b9cd8cab1357e2a89cb8e1951/orjson-3.11.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a5c370674ebabe16c6ccac33ff80c62bf8a6e59439f5e9d40c1f5ab8fd2215b7", size = 136425, upload-time = "2026-03-31T16:15:07.052Z" },
- { url = "https://files.pythonhosted.org/packages/b2/35/4d3cc3a3d616035beb51b24a09bb872942dc452cf2df0c1d11ab35046d9f/orjson-3.11.8-cp311-cp311-win32.whl", hash = "sha256:0e32f7154299f42ae66f13488963269e5eccb8d588a65bc839ed986919fc9fac", size = 131870, upload-time = "2026-03-31T16:15:08.678Z" },
- { url = "https://files.pythonhosted.org/packages/13/26/9fe70f81d16b702f8c3a775e8731b50ad91d22dacd14c7599b60a0941cd1/orjson-3.11.8-cp311-cp311-win_amd64.whl", hash = "sha256:25e0c672a2e32348d2eb33057b41e754091f2835f87222e4675b796b92264f06", size = 127440, upload-time = "2026-03-31T16:15:09.994Z" },
- { url = "https://files.pythonhosted.org/packages/e8/c6/b038339f4145efd2859c1ca53097a52c0bb9cbdd24f947ebe146da1ad067/orjson-3.11.8-cp311-cp311-win_arm64.whl", hash = "sha256:9185589c1f2a944c17e26c9925dcdbc2df061cc4a145395c57f0c51f9b5dbfcd", size = 127399, upload-time = "2026-03-31T16:15:11.412Z" },
- { url = "https://files.pythonhosted.org/packages/01/f6/8d58b32ab32d9215973a1688aebd098252ee8af1766c0e4e36e7831f0295/orjson-3.11.8-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1cd0b77e77c95758f8e1100139844e99f3ccc87e71e6fc8e1c027e55807c549f", size = 229233, upload-time = "2026-03-31T16:15:12.762Z" },
- { url = "https://files.pythonhosted.org/packages/a9/8b/2ffe35e71f6b92622e8ea4607bf33ecf7dfb51b3619dcfabfd36cbe2d0a5/orjson-3.11.8-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:6a3d159d5ffa0e3961f353c4b036540996bf8b9697ccc38261c0eac1fd3347a6", size = 128772, upload-time = "2026-03-31T16:15:14.237Z" },
- { url = "https://files.pythonhosted.org/packages/27/d2/1f8682ae50d5c6897a563cb96bc106da8c9cb5b7b6e81a52e4cc086679b9/orjson-3.11.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76070a76e9c5ae661e2d9848f216980d8d533e0f8143e6ed462807b242e3c5e8", size = 131946, upload-time = "2026-03-31T16:15:15.607Z" },
- { url = "https://files.pythonhosted.org/packages/52/4b/5500f76f0eece84226e0689cb48dcde081104c2fa6e2483d17ca13685ffb/orjson-3.11.8-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:54153d21520a71a4c82a0dbb4523e468941d549d221dc173de0f019678cf3813", size = 130368, upload-time = "2026-03-31T16:15:17.066Z" },
- { url = "https://files.pythonhosted.org/packages/da/4e/58b927e08fbe9840e6c920d9e299b051ea667463b1f39a56e668669f8508/orjson-3.11.8-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:469ac2125611b7c5741a0b3798cd9e5786cbad6345f9f400c77212be89563bec", size = 135540, upload-time = "2026-03-31T16:15:18.404Z" },
- { url = "https://files.pythonhosted.org/packages/56/7c/ba7cb871cba1bcd5cd02ee34f98d894c6cea96353ad87466e5aef2429c60/orjson-3.11.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:14778ffd0f6896aa613951a7fbf4690229aa7a543cb2bfbe9f358e08aafa9546", size = 146877, upload-time = "2026-03-31T16:15:19.833Z" },
- { url = "https://files.pythonhosted.org/packages/0b/5d/eb9c25fc1386696c6a342cd361c306452c75e0b55e86ad602dd4827a7fd7/orjson-3.11.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea56a955056a6d6c550cf18b3348656a9d9a4f02e2d0c02cabf3c73f1055d506", size = 132837, upload-time = "2026-03-31T16:15:21.282Z" },
- { url = "https://files.pythonhosted.org/packages/37/87/5ddeb7fc1fbd9004aeccab08426f34c81a5b4c25c7061281862b015fce2b/orjson-3.11.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:53a0f57e59a530d18a142f4d4ba6dfc708dc5fdedce45e98ff06b44930a2a48f", size = 133624, upload-time = "2026-03-31T16:15:22.641Z" },
- { url = "https://files.pythonhosted.org/packages/22/09/90048793db94ee4b2fcec4ac8e5ddb077367637d6650be896b3494b79bb7/orjson-3.11.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9b48e274f8824567d74e2158199e269597edf00823a1b12b63d48462bbf5123e", size = 141904, upload-time = "2026-03-31T16:15:24.435Z" },
- { url = "https://files.pythonhosted.org/packages/c0/cf/eb284847487821a5d415e54149a6449ba9bfc5872ce63ab7be41b8ec401c/orjson-3.11.8-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:3f262401086a3960586af06c054609365e98407151f5ea24a62893a40d80dbbb", size = 423742, upload-time = "2026-03-31T16:15:26.155Z" },
- { url = "https://files.pythonhosted.org/packages/44/09/e12423d327071c851c13e76936f144a96adacfc037394dec35ac3fc8d1e8/orjson-3.11.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:8e8c6218b614badf8e229b697865df4301afa74b791b6c9ade01d19a9953a942", size = 147806, upload-time = "2026-03-31T16:15:27.909Z" },
- { url = "https://files.pythonhosted.org/packages/b3/6d/37c2589ba864e582ffe7611643314785c6afb1f83c701654ef05daa8fcc7/orjson-3.11.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:093d489fa039ddade2db541097dbb484999fcc65fc2b0ff9819141e2ab364f25", size = 136485, upload-time = "2026-03-31T16:15:29.749Z" },
- { url = "https://files.pythonhosted.org/packages/be/c9/135194a02ab76b04ed9a10f68624b7ebd238bbe55548878b11ff15a0f352/orjson-3.11.8-cp312-cp312-win32.whl", hash = "sha256:e0950ed1bcb9893f4293fd5c5a7ee10934fbf82c4101c70be360db23ce24b7d2", size = 131966, upload-time = "2026-03-31T16:15:31.687Z" },
- { url = "https://files.pythonhosted.org/packages/ed/9a/9796f8fbe3cf30ce9cb696748dbb535e5c87be4bf4fe2e9ca498ef1fa8cf/orjson-3.11.8-cp312-cp312-win_amd64.whl", hash = "sha256:3cf17c141617b88ced4536b2135c552490f07799f6ad565948ea07bef0dcb9a6", size = 127441, upload-time = "2026-03-31T16:15:33.333Z" },
- { url = "https://files.pythonhosted.org/packages/cc/47/5aaf54524a7a4a0dd09dd778f3fa65dd2108290615b652e23d944152bc8e/orjson-3.11.8-cp312-cp312-win_arm64.whl", hash = "sha256:48854463b0572cc87dac7d981aa72ed8bf6deedc0511853dc76b8bbd5482d36d", size = 127364, upload-time = "2026-03-31T16:15:34.748Z" },
- { url = "https://files.pythonhosted.org/packages/66/7f/95fba509bb2305fab0073558f1e8c3a2ec4b2afe58ed9fcb7d3b8beafe94/orjson-3.11.8-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:3f23426851d98478c8970da5991f84784a76682213cd50eb73a1da56b95239dc", size = 229180, upload-time = "2026-03-31T16:15:36.426Z" },
- { url = "https://files.pythonhosted.org/packages/f6/9d/b237215c743ca073697d759b5503abd2cb8a0d7b9c9e21f524bcf176ab66/orjson-3.11.8-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:ebaed4cef74a045b83e23537b52ef19a367c7e3f536751e355a2a394f8648559", size = 128754, upload-time = "2026-03-31T16:15:38.049Z" },
- { url = "https://files.pythonhosted.org/packages/42/3d/27d65b6d11e63f133781425f132807aef793ed25075fec686fc8e46dd528/orjson-3.11.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97c8f5d3b62380b70c36ffacb2a356b7c6becec86099b177f73851ba095ef623", size = 131877, upload-time = "2026-03-31T16:15:39.484Z" },
- { url = "https://files.pythonhosted.org/packages/dd/cc/faee30cd8f00421999e40ef0eba7332e3a625ce91a58200a2f52c7fef235/orjson-3.11.8-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:436c4922968a619fb7fef1ccd4b8b3a76c13b67d607073914d675026e911a65c", size = 130361, upload-time = "2026-03-31T16:15:41.274Z" },
- { url = "https://files.pythonhosted.org/packages/5c/bb/a6c55896197f97b6d4b4e7c7fd77e7235517c34f5d6ad5aadd43c54c6d7c/orjson-3.11.8-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1ab359aff0436d80bfe8a23b46b5fea69f1e18aaf1760a709b4787f1318b317f", size = 135521, upload-time = "2026-03-31T16:15:42.758Z" },
- { url = "https://files.pythonhosted.org/packages/9c/7c/ca3a3525aa32ff636ebb1778e77e3587b016ab2edb1b618b36ba96f8f2c0/orjson-3.11.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f89b6d0b3a8d81e1929d3ab3d92bbc225688bd80a770c49432543928fe09ac55", size = 146862, upload-time = "2026-03-31T16:15:44.341Z" },
- { url = "https://files.pythonhosted.org/packages/3c/0c/18a9d7f18b5edd37344d1fd5be17e94dc652c67826ab749c6e5948a78112/orjson-3.11.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:29c009e7a2ca9ad0ed1376ce20dd692146a5d9fe4310848904b6b4fee5c5c137", size = 132847, upload-time = "2026-03-31T16:15:46.368Z" },
- { url = "https://files.pythonhosted.org/packages/23/91/7e722f352ad67ca573cee44de2a58fb810d0f4eb4e33276c6a557979fd8a/orjson-3.11.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:705b895b781b3e395c067129d8551655642dfe9437273211d5404e87ac752b53", size = 133637, upload-time = "2026-03-31T16:15:48.123Z" },
- { url = "https://files.pythonhosted.org/packages/af/04/32845ce13ac5bd1046ddb02ac9432ba856cc35f6d74dde95864fe0ad5523/orjson-3.11.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:88006eda83858a9fdf73985ce3804e885c2befb2f506c9a3723cdeb5a2880e3e", size = 141906, upload-time = "2026-03-31T16:15:49.626Z" },
- { url = "https://files.pythonhosted.org/packages/02/5e/c551387ddf2d7106d9039369862245c85738b828844d13b99ccb8d61fd06/orjson-3.11.8-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:55120759e61309af7fcf9e961c6f6af3dde5921cdb3ee863ef63fd9db126cae6", size = 423722, upload-time = "2026-03-31T16:15:51.176Z" },
- { url = "https://files.pythonhosted.org/packages/00/a3/ecfe62434096f8a794d4976728cb59bcfc4a643977f21c2040545d37eb4c/orjson-3.11.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:98bdc6cb889d19bed01de46e67574a2eab61f5cc6b768ed50e8ac68e9d6ffab6", size = 147801, upload-time = "2026-03-31T16:15:52.939Z" },
- { url = "https://files.pythonhosted.org/packages/18/6d/0dce10b9f6643fdc59d99333871a38fa5a769d8e2fc34a18e5d2bfdee900/orjson-3.11.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:708c95f925a43ab9f34625e45dcdadf09ec8a6e7b664a938f2f8d5650f6c090b", size = 136460, upload-time = "2026-03-31T16:15:54.431Z" },
- { url = "https://files.pythonhosted.org/packages/01/d6/6dde4f31842d87099238f1f07b459d24edc1a774d20687187443ab044191/orjson-3.11.8-cp313-cp313-win32.whl", hash = "sha256:01c4e5a6695dc09098f2e6468a251bc4671c50922d4d745aff1a0a33a0cf5b8d", size = 131956, upload-time = "2026-03-31T16:15:56.081Z" },
- { url = "https://files.pythonhosted.org/packages/c1/f9/4e494a56e013db957fb77186b818b916d4695b8fa2aa612364974160e91b/orjson-3.11.8-cp313-cp313-win_amd64.whl", hash = "sha256:c154a35dd1330707450bb4d4e7dd1f17fa6f42267a40c1e8a1daa5e13719b4b8", size = 127410, upload-time = "2026-03-31T16:15:57.54Z" },
- { url = "https://files.pythonhosted.org/packages/57/7f/803203d00d6edb6e9e7eef421d4e1adbb5ea973e40b3533f3cfd9aeb374e/orjson-3.11.8-cp313-cp313-win_arm64.whl", hash = "sha256:4861bde57f4d253ab041e374f44023460e60e71efaa121f3c5f0ed457c3a701e", size = 127338, upload-time = "2026-03-31T16:15:59.106Z" },
+version = "3.11.9"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/7e/0c/964746fcafbd16f8ff53219ad9f6b412b34f345c75f384ad434ceaadb538/orjson-3.11.9.tar.gz", hash = "sha256:4fef17e1f8722c11587a6ef18e35902450221da0028e65dbaaa543619e68e48f", size = 5599163, upload-time = "2026-05-06T15:11:08.309Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/1e/51/3fb9e65ae76ee97bd611869a503fa3fc0a6e81dd8b737cf3003f682df7ff/orjson-3.11.9-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f01c4818b3fc9b0da8e096722a84318071eaa118df35f6ed2344da0e73a5444f", size = 228522, upload-time = "2026-05-06T15:09:35.362Z" },
+ { url = "https://files.pythonhosted.org/packages/16/fa/9d54b07cb3f3b0bfd57841478e42d7a0ece4a9f49f9907eecf5a45461687/orjson-3.11.9-cp311-cp311-macosx_15_0_arm64.whl", hash = "sha256:3ebca4179031ee716ed076ffadc29428e900512f6fccee8614c9983157fcf19c", size = 128463, upload-time = "2026-05-06T15:09:37.063Z" },
+ { url = "https://files.pythonhosted.org/packages/88/b1/6ceafc2eefd0a553e3be77ce6c49d107e772485d9568629376171c50e634/orjson-3.11.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48ee05097750de0ff69ed5b7bbcf0732182fd57a24043dcc2a1da780a5ead3a5", size = 132306, upload-time = "2026-05-06T15:09:38.299Z" },
+ { url = "https://files.pythonhosted.org/packages/ea/76/f11311285324a40aab1e3031385c50b635a7cd0734fdaf60c7e89a696f60/orjson-3.11.9-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a6082706765a95a6680d812e1daf1c0cfe8adec7831b3ff3b625693f3b461b1c", size = 127988, upload-time = "2026-05-06T15:09:39.597Z" },
+ { url = "https://files.pythonhosted.org/packages/9e/85/0ef63bcf1337f44031ce9b91b1919563f62a37527b3ea4368bb15a22e5d7/orjson-3.11.9-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:277fefe9d76ee17eb14debf399e3533d4d63b5f677a4d3719eb763536af1f4bd", size = 135188, upload-time = "2026-05-06T15:09:40.957Z" },
+ { url = "https://files.pythonhosted.org/packages/05/94/b0d27090ea8a2095db3c2bd1b1c96f96f19bbb494d7fef33130e846e613d/orjson-3.11.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03db380e3780fa0015ed776a90f20e8e20bb11dde13b216ce19e5718e3dfba62", size = 145937, upload-time = "2026-05-06T15:09:42.249Z" },
+ { url = "https://files.pythonhosted.org/packages/09/eb/75d50c29c05b8054013e221e598820a365c8e64065312e75e202ed880709/orjson-3.11.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33d7d766701847dc6729846362dc27895d2f2d2251264f9d10e7cb9878194877", size = 132758, upload-time = "2026-05-06T15:09:43.945Z" },
+ { url = "https://files.pythonhosted.org/packages/49/bd/360686f39348aa88827cb6fbf7dc606fd41c831a35235e1abf1db8e3a9e6/orjson-3.11.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:147302878da387104b66bb4a8b0227d1d487e976ce41a8501916161072ed87b1", size = 133971, upload-time = "2026-05-06T15:09:45.239Z" },
+ { url = "https://files.pythonhosted.org/packages/0e/30/3178eb16f3221aeef068b6f1f1ebe05f656ea5c6dffe9f6c917329fe17a3/orjson-3.11.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3513550321f8c8c811a7c3297b8a630e82dc08e4c10216d07703c997776236cd", size = 141685, upload-time = "2026-05-06T15:09:46.858Z" },
+ { url = "https://files.pythonhosted.org/packages/5f/f1/ff2f19ed0225f9680fafa42febca3570dd59444ebf190980738d376214c2/orjson-3.11.9-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:c5d001196b89fa9cf0a4ab79766cd835b991a166e4b621ba95089edc50c429ff", size = 415167, upload-time = "2026-05-06T15:09:48.312Z" },
+ { url = "https://files.pythonhosted.org/packages/9b/61/863bddf0da6e9e586765414debd54b4e58db05f560902b6d00658cb88636/orjson-3.11.9-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:16969c9d369c98eb084889c6e4d2d39b77c7eb38ceccf8da2a9fff62ae908980", size = 147913, upload-time = "2026-05-06T15:09:49.733Z" },
+ { url = "https://files.pythonhosted.org/packages/b6/8a/4081492586d75b073d60c5271a8d0f05a0955cabf1e34c8473f6fcd84235/orjson-3.11.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:63e0efbc991250c0b3143488fa57d95affcabbfc63c99c48d625dd37779aafe2", size = 136959, upload-time = "2026-05-06T15:09:51.311Z" },
+ { url = "https://files.pythonhosted.org/packages/0d/bd/70b6ab193594d7abb875320c0a7c8335e846f28968c432c31042409c3c8d/orjson-3.11.9-cp311-cp311-win32.whl", hash = "sha256:14ed654580c1ed2bc217352ec82f91b047aef82951aa71c7f64e0dcb03c0e180", size = 131533, upload-time = "2026-05-06T15:09:52.637Z" },
+ { url = "https://files.pythonhosted.org/packages/3f/17/1a1a228183d62d1b77e2c30d210f47dd4768b310ebe1607c63e3c0e3a71e/orjson-3.11.9-cp311-cp311-win_amd64.whl", hash = "sha256:57ea77fb70a448ce87d18fca050193202a3da5e54598f6501ca5476fb66cfe02", size = 127106, upload-time = "2026-05-06T15:09:54.204Z" },
+ { url = "https://files.pythonhosted.org/packages/b8/95/285de5fa296d09681ee9c546cd4a8aeb773b701cf343dc125994f4d52953/orjson-3.11.9-cp311-cp311-win_arm64.whl", hash = "sha256:19b72ed11572a2ee51a67a903afbe5af504f84ed6f529c0fe44b0ab3fb5cc697", size = 126848, upload-time = "2026-05-06T15:09:55.551Z" },
+ { url = "https://files.pythonhosted.org/packages/16/6d/11867a3ffa3a3608d84a4de51ef4dd0896d6b5cc9132fbe1daf593e677bc/orjson-3.11.9-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:9ef6fe90aadef185c7b128859f40beb24720b4ecea95379fc9000931179c3a49", size = 228515, upload-time = "2026-05-06T15:09:57.265Z" },
+ { url = "https://files.pythonhosted.org/packages/24/75/05912954c8b288f34fcf5cd4b9b071cb4f6e77b9961e175e56ebb258089f/orjson-3.11.9-cp312-cp312-macosx_15_0_arm64.whl", hash = "sha256:e5c9b8f28e726e97d97696c826bc7bea5d71cecd63576dba92924a32c1961291", size = 128409, upload-time = "2026-05-06T15:09:59.063Z" },
+ { url = "https://files.pythonhosted.org/packages/ab/86/1c3a47df3bc8191ea9ac51603bbb872a95167a364320c269f2557911f406/orjson-3.11.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26a473dbb4162108b27901492546f83c76fdcea3d0eadff00ae7a07e18dcce09", size = 132106, upload-time = "2026-05-06T15:10:00.798Z" },
+ { url = "https://files.pythonhosted.org/packages/d7/cf/b33b5f3e695ae7d63feef9d915c37cc3b8f465493dcd4f8e0b4c697a2366/orjson-3.11.9-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:011382e2a60fda9d46f1cdee31068cfc52ffe952b587d683ec0463002802a0f4", size = 127864, upload-time = "2026-05-06T15:10:02.15Z" },
+ { url = "https://files.pythonhosted.org/packages/31/6a/6cf69385a58208024fcb8c014e2141b8ce838aba6492b589f8acfff97fab/orjson-3.11.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c2d3dc759490128c5c1711a53eeaa8ee1d437fd0038ffd2b6008abf46db3f882", size = 135213, upload-time = "2026-05-06T15:10:03.515Z" },
+ { url = "https://files.pythonhosted.org/packages/e8/f8/0b1bd3e8f2efcdd376af5c8cfd79eaf13f018080c0089c80ebd724e3c7fb/orjson-3.11.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d8ea516b3726d190e1b4297e6f4e7a8650347ae053868a18163b4dd3641d1fff", size = 145994, upload-time = "2026-05-06T15:10:05.083Z" },
+ { url = "https://files.pythonhosted.org/packages/f3/59/dab79f61044c529d2c81aecdc589b1f833a1c8dec11ba3b1c2498a02ca7e/orjson-3.11.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:380cdce7ba24989af81d0a7013d0aaec5d0e2a21734c0e2681b1bc4f141957fe", size = 132744, upload-time = "2026-05-06T15:10:06.853Z" },
+ { url = "https://files.pythonhosted.org/packages/0e/a4/82b7a2fe5d8a67a59ed831b24d59a3d46ea7d207b66e1602d376541d94a6/orjson-3.11.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:be4fa4f0af7fa18951f7ab3fc2148e223af211bf03f59e1c6034ec3f97f21d61", size = 134014, upload-time = "2026-05-06T15:10:08.213Z" },
+ { url = "https://files.pythonhosted.org/packages/50/c7/375e83a76851b73b2e39f3bcf0e5a19e2b89bad13e5bca97d0b293d27f24/orjson-3.11.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a8f5f8bc7ce7d59f08d9f99fa510c06496164a24cb5f3d34537dbd9ca30132e2", size = 141509, upload-time = "2026-05-06T15:10:09.595Z" },
+ { url = "https://files.pythonhosted.org/packages/7f/7c/49d5d82a3d3097f641f094f552131f1e2723b0b8cb0fa2874ab65ecfffa6/orjson-3.11.9-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:4d7fde5501b944f83b3e665e1b31343ff6e154b15560a16b7130ea1e594a4206", size = 415127, upload-time = "2026-05-06T15:10:11.049Z" },
+ { url = "https://files.pythonhosted.org/packages/3a/dc/7446c538590d55f455647e5f3c61fc33f7108714e7afcffa6a2a033f8350/orjson-3.11.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cde1a448023ba7d5bb4c01c5afb48894380b5e4956e0627266526587ef4e535f", size = 148025, upload-time = "2026-05-06T15:10:12.842Z" },
+ { url = "https://files.pythonhosted.org/packages/df/e5/4d2d8af06f788329b4f78f8cc3679bb395392fcaa1e4d8d3c33e85308fa4/orjson-3.11.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:71e63adb0e1f1ed5d9e168f50a91ceb93ae6420731d222dc7da5c69409aa47aa", size = 136943, upload-time = "2026-05-06T15:10:14.405Z" },
+ { url = "https://files.pythonhosted.org/packages/06/69/850264ccf6d80f6b174620d30a87f65c9b1490aba33fe6b62798e618cad3/orjson-3.11.9-cp312-cp312-win32.whl", hash = "sha256:2d057a602cdd19a0ad680417527c45b6961a095081c0f46fe0e03e304aac6470", size = 131606, upload-time = "2026-05-06T15:10:15.791Z" },
+ { url = "https://files.pythonhosted.org/packages/b9/d5/973a43fc9c55e20f2051e9830997649f669be0cb3ca52192087c0143f118/orjson-3.11.9-cp312-cp312-win_amd64.whl", hash = "sha256:59e403b1cc5a676da8eaf31f6254801b7341b3e29efa85f92b48d272637e77be", size = 127101, upload-time = "2026-05-06T15:10:17.129Z" },
+ { url = "https://files.pythonhosted.org/packages/fe/ae/495470f0e4a18f73fa10b7f6b84b464ec4cc5291c4e0c7c2a6c400bef006/orjson-3.11.9-cp312-cp312-win_arm64.whl", hash = "sha256:9af678d6488357948f1f84c6cd1c1d397c014e1ae2f98ae082a44eb48f602624", size = 126736, upload-time = "2026-05-06T15:10:18.645Z" },
+ { url = "https://files.pythonhosted.org/packages/32/33/93fcc25907235c344ae73122f8a4e01d2d393ef062b4af7d2e2487a32c37/orjson-3.11.9-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:4bab1b2d6141fe7b32ae71dac905666ece4f94936efbfb13d55bb7739a3a6021", size = 228458, upload-time = "2026-05-06T15:10:20.079Z" },
+ { url = "https://files.pythonhosted.org/packages/8f/27/b1e6dadb3c080313c03fdd8067b85e6a0460c7d8d6a1c3984ef77b904e4d/orjson-3.11.9-cp313-cp313-macosx_15_0_arm64.whl", hash = "sha256:844417969855fc7a41be124aafe83dc424592a7f77cd4501900c67307122b92c", size = 128368, upload-time = "2026-05-06T15:10:21.549Z" },
+ { url = "https://files.pythonhosted.org/packages/21/0f/c9ede0bf052f6b4051e64a7d4fa91b725cccf8321a6a786e86eb03519f00/orjson-3.11.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffe02797b5e9f3a9d8292ddcd289b474ad13e81ad83cd1891a240811f1d2cb81", size = 132070, upload-time = "2026-05-06T15:10:23.371Z" },
+ { url = "https://files.pythonhosted.org/packages/fd/26/d398e28048dc18205bbe812f2c88cb9b40313db2470778e25964796458fe/orjson-3.11.9-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0e4eed3b200023042814d2fc8a5d2e880f13b52e1ed2485e83da4f3962f7dc1a", size = 127892, upload-time = "2026-05-06T15:10:24.714Z" },
+ { url = "https://files.pythonhosted.org/packages/66/60/52b0054c4c700d5aa7fc5b7ca96917400d8f061307778578e67a10e25852/orjson-3.11.9-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8aff7da9952a5ad1cef8e68017724d96c7b9a66e99e91d6252e1b133d67a7b10", size = 135217, upload-time = "2026-05-06T15:10:26.084Z" },
+ { url = "https://files.pythonhosted.org/packages/d5/97/1e3dc2b2a28b7b2528f403d2fc1d79ec5f39af3bc143ab65d3ec26426385/orjson-3.11.9-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4d4e98d6f3b8afed8bc8cd9718ec0cdf46661826beefb53fe8eafb37f2bf0362", size = 145980, upload-time = "2026-05-06T15:10:28.062Z" },
+ { url = "https://files.pythonhosted.org/packages/fc/39/31fbfe7850f2de32dee7e7e5c09f26d403ab01e440ac96001c6b01ad3c99/orjson-3.11.9-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a81d52442a7c99b3662333235b3adf96a1715864658b35bb797212be7bddb97", size = 132738, upload-time = "2026-05-06T15:10:29.727Z" },
+ { url = "https://files.pythonhosted.org/packages/a1/08/dca0082dd2a194acb93e5457e73455388e2e2ca464a2672449a9ddbb679d/orjson-3.11.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4e39364e726a8fff737309aff059ff67d8a8c8d5b677be7bb49a8b3e84b7e218", size = 134033, upload-time = "2026-05-06T15:10:31.152Z" },
+ { url = "https://files.pythonhosted.org/packages/11/d4/5bdb0626801230139987385554c5d4c42255218ac906525bf4347f22cd95/orjson-3.11.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4fd66214623f1b17501df9f0543bef0b833979ab5b6ded1e1d123222866aa8c9", size = 141492, upload-time = "2026-05-06T15:10:32.641Z" },
+ { url = "https://files.pythonhosted.org/packages/fa/88/a21fb53b3ede6703aede6dce4710ed4111e5b201cfa6bbff5e544f9d47d7/orjson-3.11.9-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:8ecc30f10465fa1e0ce13fd01d9e22c316e5053a719a8d915d4545a09a5ff677", size = 415087, upload-time = "2026-05-06T15:10:34.438Z" },
+ { url = "https://files.pythonhosted.org/packages/3d/57/1b30daf70f0d8180e9a73cefbfbdd99e4bf19eb020466502b01fba7e0e50/orjson-3.11.9-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:97db4c94a7db398a5bd636273324f0b3fd58b350bbbac8bb380ceb825a9b40f4", size = 148031, upload-time = "2026-05-06T15:10:36.358Z" },
+ { url = "https://files.pythonhosted.org/packages/04/83/45fbb6d962e260807f99441db9613cee868ceda4baceda59b3720a563f97/orjson-3.11.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9f78cf8fec5bd627f4082b8dfeac7871b43d7f3274904492a43dab39f18a19a0", size = 136915, upload-time = "2026-05-06T15:10:38.013Z" },
+ { url = "https://files.pythonhosted.org/packages/5f/cc/2d10025f9056d376e4127ec05a5808b218d46f035fdc08178a5411b34250/orjson-3.11.9-cp313-cp313-win32.whl", hash = "sha256:d4087e5c0209a0a8efe4de3303c234b9c44d1174161dcd851e8eea07c7560b32", size = 131613, upload-time = "2026-05-06T15:10:39.569Z" },
+ { url = "https://files.pythonhosted.org/packages/67/bd/2775ff28bfe883b9aa1ff348300542eb2ef1ee18d8ae0e3a49846817a865/orjson-3.11.9-cp313-cp313-win_amd64.whl", hash = "sha256:051b102c93b4f634e89f3866b07b9a9a98915ada541f4ec30f177067b2694979", size = 127086, upload-time = "2026-05-06T15:10:41.262Z" },
+ { url = "https://files.pythonhosted.org/packages/91/2b/d26799e580939e32a7da9a39531bc9e58e15ca32ffaa6a8cb3e9bb0d22cd/orjson-3.11.9-cp313-cp313-win_arm64.whl", hash = "sha256:cce9127885941bd28f080cecf1f1d288336b7e0d812c345b08be88b572796254", size = 126696, upload-time = "2026-05-06T15:10:42.651Z" },
]
[[package]]
@@ -1157,11 +1157,11 @@ wheels = [
[[package]]
name = "parso"
-version = "0.8.6"
+version = "0.8.7"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/81/76/a1e769043c0c0c9fe391b702539d594731a4362334cdf4dc25d0c09761e7/parso-0.8.6.tar.gz", hash = "sha256:2b9a0332696df97d454fa67b81618fd69c35a7b90327cbe6ba5c92d2c68a7bfd", size = 401621, upload-time = "2026-02-09T15:45:24.425Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/30/4b/90c937815137d43ce71ba043cd3566221e9df6b9c805f24b5d138c9d40a7/parso-0.8.7.tar.gz", hash = "sha256:eaaac4c9fdd5e9e8852dc778d2d7405897ec510f2a298071453e5e3a07914bb1", size = 401824, upload-time = "2026-05-01T23:13:02.138Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/b6/61/fae042894f4296ec49e3f193aff5d7c18440da9e48102c3315e1bc4519a7/parso-0.8.6-py2.py3-none-any.whl", hash = "sha256:2c549f800b70a5c4952197248825584cb00f033b29c692671d3bf08bf380baff", size = 106894, upload-time = "2026-02-09T15:45:21.391Z" },
+ { url = "https://files.pythonhosted.org/packages/99/5d/8268b644392ee874ee82a635cd0df1773de230bde356c38de28e298392cc/parso-0.8.7-py2.py3-none-any.whl", hash = "sha256:a8926eb2a1b915486941fdbd31e86a4baf88fe8c210f25f2f35ecec5b574ca1c", size = 107025, upload-time = "2026-05-01T23:12:58.867Z" },
]
[[package]]
@@ -1178,11 +1178,11 @@ wheels = [
[[package]]
name = "platformdirs"
-version = "4.9.6"
+version = "4.10.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/9f/4a/0883b8e3802965322523f0b200ecf33d31f10991d0401162f4b23c698b42/platformdirs-4.9.6.tar.gz", hash = "sha256:3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a", size = 29400, upload-time = "2026-04-09T00:04:10.812Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/d7/47/e4501f49c178ae1d9f4a75073fda4204f52647993f075a9db4d14930e0c5/platformdirs-4.10.0.tar.gz", hash = "sha256:31e761a6a0ca04faf7353ea759bdba55652be214725111e5aac52dfa29d4bef7", size = 31224, upload-time = "2026-05-28T03:32:53.587Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/75/a6/a0a304dc33b49145b21f4808d763822111e67d1c3a32b524a1baf947b6e1/platformdirs-4.9.6-py3-none-any.whl", hash = "sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917", size = 21348, upload-time = "2026-04-09T00:04:09.463Z" },
+ { url = "https://files.pythonhosted.org/packages/81/e6/cd9575ac904136b3cbf7aa7ee819ef86eedb7274e46f230e94ea4342e729/platformdirs-4.10.0-py3-none-any.whl", hash = "sha256:fb516cdb12eb0d857d0cd85a7c57cea4d060bee4578d6cf5a14dfdf8cbf8784a", size = 22743, upload-time = "2026-05-28T03:32:52.175Z" },
]
[[package]]
@@ -1351,28 +1351,28 @@ wheels = [
[[package]]
name = "pyscipopt"
-version = "6.1.0"
+version = "6.2.1"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "numpy" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/36/3c/158d647974810307ec4bec143cfe6b8044d338a42d326b31ac0b4ca181b8/pyscipopt-6.1.0.tar.gz", hash = "sha256:7a6b144fd3a7485a85ffa2e6eea71d8251f2ca8bbc84cb2b36d6bb08d1c17e17", size = 1648416, upload-time = "2026-02-05T23:23:41.332Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/3d/b9/ef40e260c3e722d9d4617dd70548c1e3c51b065decd341cf9b9031957bf1/pyscipopt-6.2.1.tar.gz", hash = "sha256:3da1634ff341c8665fcf100486f7968ddbbf160dc56d83e99338717d2245ef6a", size = 1683168, upload-time = "2026-05-16T15:06:54.486Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/71/0c/36f80ad8fb039b9c82e9db34eeb4795e9eaf1f4ceefe2d2a395ec7a5cfa1/pyscipopt-6.1.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:fb448c6a69b004bead0ee64ab2a7a3441bd09ac58718ee5183532dc5defe90f8", size = 8434043, upload-time = "2026-02-05T23:22:18.497Z" },
- { url = "https://files.pythonhosted.org/packages/d6/01/ab3145cd1156b32d95ac6bfc3e263497e1573dae31734ed38360b904f8c8/pyscipopt-6.1.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:e5ce1be9e8a74aee6ac8ba103a82354ae9dcf726418f050a6e4118d745385a3c", size = 12298420, upload-time = "2026-02-05T23:22:20.328Z" },
- { url = "https://files.pythonhosted.org/packages/5d/c3/51bca71b84d7544b4cf7e6fd45bf6169d95cd790f73f4d19268b6a214a25/pyscipopt-6.1.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:80e1dcc5de5f173653c2e80fad11f76cb78e8e1e4dcf6476a08312aacef8bcd6", size = 16362783, upload-time = "2026-02-05T23:22:22.354Z" },
- { url = "https://files.pythonhosted.org/packages/db/b4/c0310823179cccbc4e9ee51be82e2eac28944b68c5cb5b81daeeff811283/pyscipopt-6.1.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9cbd6750c5c0ac5a5cc56cd950a376235b482a11911a282dbca6373cc0ee0c7b", size = 17669440, upload-time = "2026-02-05T23:22:24.341Z" },
- { url = "https://files.pythonhosted.org/packages/dd/37/5b924aa84f214b800dd4c651eb9493093b94d7d6b6e3634965ba9f247aaa/pyscipopt-6.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:2f0182a3fda6aff13e9b763dfff003de48aae8be4f08fe11362bfda29b26af56", size = 48279634, upload-time = "2026-02-05T23:22:27.697Z" },
- { url = "https://files.pythonhosted.org/packages/f5/eb/df868676358265626d85a1cac49cb3dec9ae5fb3d8d08243f045ea62520c/pyscipopt-6.1.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:3ee05a4aaddbc21fa0ef31a123f68ec79c0de8865f7434223dd12a710c89a722", size = 8398514, upload-time = "2026-02-05T23:22:30.173Z" },
- { url = "https://files.pythonhosted.org/packages/66/96/478fba6d7a9fad560846936224188230be0579306c21fc84f4eb357b2ea1/pyscipopt-6.1.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:c3f91945469cae82c28c1c53e18a25749467a698119b6d6626f0d4a4c259a663", size = 12239437, upload-time = "2026-02-05T23:22:32.673Z" },
- { url = "https://files.pythonhosted.org/packages/d8/b2/e2867579025a00b5d2240addc8eba9b9441e4f06d285150bb5b43bf32a85/pyscipopt-6.1.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cd42e124abfbfaf5cb5ec675221036fb68cb2e6c17af53c634396a10ec744d96", size = 16204669, upload-time = "2026-02-05T23:22:35.417Z" },
- { url = "https://files.pythonhosted.org/packages/d0/fa/bff8d28aa4e6641e9c5807eeb21ffda6261f8c7d85f94fe3f571e119c2ed/pyscipopt-6.1.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cfce78017258a0c1927d95a036bd15ba054278959218fa5d187bbeb2d300e74c", size = 17567136, upload-time = "2026-02-05T23:22:37.505Z" },
- { url = "https://files.pythonhosted.org/packages/e1/c9/7b09eaded3bac7f41d626e095dad774184690be7e5c911e0c1d3c777613e/pyscipopt-6.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:f3c843e03fb29c70b397fab450f3e5d2eaeb389390d5d7c890f8e2914c2d5630", size = 48198489, upload-time = "2026-02-05T23:22:40.015Z" },
- { url = "https://files.pythonhosted.org/packages/7a/80/5dfc268e691b86e41551eb4a2a7946d110430180df26f2deba972d940a53/pyscipopt-6.1.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:561a7a7113c4afafa2d0033aa091ad036dd639498be6b20cd14a79fd6c3ba51d", size = 8393181, upload-time = "2026-02-05T23:22:42.331Z" },
- { url = "https://files.pythonhosted.org/packages/9a/6e/d9029dafac712e964c0d197adbf6c2f1882ae214fd7d2fd506eae69335ee/pyscipopt-6.1.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:116c5822a27ba39167b1cc962c223e58cf2f97b3bb5ca294c9cbb5d75c488574", size = 12237880, upload-time = "2026-02-05T23:22:44.1Z" },
- { url = "https://files.pythonhosted.org/packages/42/1a/3451245c5b1675bc6f54e607f872d607e587b5e8d030f675a07f1a822588/pyscipopt-6.1.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c0f4ff0fed4195a7acd228b85a7e5303cc5d79e4d5ebaec352538c54c4759acc", size = 16185684, upload-time = "2026-02-05T23:22:46.311Z" },
- { url = "https://files.pythonhosted.org/packages/97/ab/3dd6240087c26cbe796264b3fd6b942088100f7b846a25c1309f497da084/pyscipopt-6.1.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f4e7219f584c1e8a4584d2afb7618aece51d57d87ab961f2e2809c36d64c484", size = 17553098, upload-time = "2026-02-05T23:22:48.342Z" },
- { url = "https://files.pythonhosted.org/packages/20/96/c19c6d8398a719b1a08199263a4cd616f417e84116bb4fbc9fe638e24928/pyscipopt-6.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:a620e2f1eb8f21e3665c12b73e7a940fa033c2cf63df94af3b6519e5c4947ccd", size = 48198041, upload-time = "2026-02-05T23:22:51.147Z" },
+ { url = "https://files.pythonhosted.org/packages/0d/48/0aba04be54a4525a3a0672fcc178de1d8bf7228c4642dc50d7b6cf0790f5/pyscipopt-6.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3ff3ca831e5b13ec6e5d67d61c6dffbc9016952bab6891f1e94910082ab92005", size = 8446138, upload-time = "2026-05-16T15:04:44.095Z" },
+ { url = "https://files.pythonhosted.org/packages/11/1b/c434f3d0bc31d2e433abc819ac76aa8deef2df4409e8672278656762a5a3/pyscipopt-6.2.1-cp311-cp311-macosx_11_0_x86_64.whl", hash = "sha256:337f5fe1129bfdd918c04bfbc94ecc4c524bd23faf41a37649132fe52a01f750", size = 12298893, upload-time = "2026-05-16T15:04:46.876Z" },
+ { url = "https://files.pythonhosted.org/packages/77/ba/55af4289c550290f3452758c35e9d9b42b69dfc3c7d5976c88f51c942f0f/pyscipopt-6.2.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a379c6c038f68d98a21ca5a5a855acba94fbbd53baa70fbcd85e3af2545969e6", size = 16388156, upload-time = "2026-05-16T15:04:49.754Z" },
+ { url = "https://files.pythonhosted.org/packages/9e/24/0384848cf14c69ba5db6e315716fcf3d84e9c1704c70062943f261a33829/pyscipopt-6.2.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2463128979ab81d2f99533fefa555c44008bd6aea5e67a19dfc09ddd3a43b3b4", size = 17704107, upload-time = "2026-05-16T15:04:52.786Z" },
+ { url = "https://files.pythonhosted.org/packages/1b/80/65efa84aea17f68a0a7c4d4de67c9185b0fd9effd8b2a9bd7bbf60568766/pyscipopt-6.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:abc496fee8704f7d975cc7b860c30dd5bbe057478c4c19048eee247cdfcb8138", size = 48290571, upload-time = "2026-05-16T15:04:57.81Z" },
+ { url = "https://files.pythonhosted.org/packages/0d/dc/347f5b1a30972fb86759d6975acab3cb0fcbd1df6ea0f26873a8a46ddc32/pyscipopt-6.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fbfbc9fce11f8ee0383e64fcfef4bb1e7b5ae6a1063dd964008cf20f906fdd4d", size = 8411318, upload-time = "2026-05-16T15:05:01.205Z" },
+ { url = "https://files.pythonhosted.org/packages/79/70/319ef747c8b639165e78a5013c65eae9fa265f364abd6d85cb932719aa30/pyscipopt-6.2.1-cp312-cp312-macosx_11_0_x86_64.whl", hash = "sha256:df9581445061a58c8681e884b4f00801f4ee1dc150d9e5d30faa3cd05f6f5c7c", size = 12259796, upload-time = "2026-05-16T15:05:03.887Z" },
+ { url = "https://files.pythonhosted.org/packages/1c/d9/cdecac650bbab6c8d5fcf9577b77bda53d8bbe972b6285e12530b4782d77/pyscipopt-6.2.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7839074b1dff5cd6e243ea86c0f43cd9f7e9e19257b1fdc5549cf9c9cff0fa6d", size = 16214522, upload-time = "2026-05-16T15:05:07.189Z" },
+ { url = "https://files.pythonhosted.org/packages/7e/5b/3ce96f3ed012d3f17556748b27d49ba42b3662283ecb02ae45c70ed19de1/pyscipopt-6.2.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:faf86357d83772508c5b1925570ee7e08385fa1a736e0ee33bf0e5c421dd845f", size = 17566755, upload-time = "2026-05-16T15:05:11.138Z" },
+ { url = "https://files.pythonhosted.org/packages/8a/50/9fceeb125674c0e955b2175cbba24f2b32ba5f8b635c3484648eb802d090/pyscipopt-6.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:784d8fbee8134c7c1cf590a60972008159033938a5044d9ed28cde9abf4f86be", size = 48216285, upload-time = "2026-05-16T15:05:17.131Z" },
+ { url = "https://files.pythonhosted.org/packages/76/ac/251c595d0eddd4e5480717298118bd252c3d8e5c169d2d95efc862e259ab/pyscipopt-6.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:353725a8f65c86299502aadca12c3a1c7622a64746ea12251906ae0165c843ae", size = 8405270, upload-time = "2026-05-16T15:05:20.386Z" },
+ { url = "https://files.pythonhosted.org/packages/95/34/28ae4af84b6d372404da9d5ff636f1341826f80b793d98f86cac03bd0aa4/pyscipopt-6.2.1-cp313-cp313-macosx_11_0_x86_64.whl", hash = "sha256:fdba06632975280df18e684aa4b9867b1167cb3a6aa9a201e7ee3b108985af51", size = 12257430, upload-time = "2026-05-16T15:05:23.673Z" },
+ { url = "https://files.pythonhosted.org/packages/fa/6f/5173067773b5e650566f90c3356bd3a71c02349e6644222a8971c0196687/pyscipopt-6.2.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8860afb9d43c93b653c7295ef674ad1ba156c731591fb7e33b5991c1136b0dc6", size = 16207762, upload-time = "2026-05-16T15:05:26.883Z" },
+ { url = "https://files.pythonhosted.org/packages/57/76/59288c92b7ee914c351c6003b63249e0702d990d1fdd9ff97e65ffc1c57b/pyscipopt-6.2.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:725503ea90fd0962f1111a5b46ee3e271b7375e1b0dfda708ce223dbebaeff5e", size = 17560629, upload-time = "2026-05-16T15:05:30.298Z" },
+ { url = "https://files.pythonhosted.org/packages/0d/42/2b1d48d11311c2fda215c8da83f8f8cabec3b5a82936a7229919ad9141e5/pyscipopt-6.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a5621ddcb59f7816e87c3deeb1bf52f8693e016a1a29148201b712adb84956e3", size = 48215647, upload-time = "2026-05-16T15:05:36.5Z" },
]
[[package]]
@@ -1389,11 +1389,11 @@ wheels = [
[[package]]
name = "pytz"
-version = "2026.1.post1"
+version = "2026.2"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/56/db/b8721d71d945e6a8ac63c0fc900b2067181dbb50805958d4d4661cf7d277/pytz-2026.1.post1.tar.gz", hash = "sha256:3378dde6a0c3d26719182142c56e60c7f9af7e968076f31aae569d72a0358ee1", size = 321088, upload-time = "2026-03-03T07:47:50.683Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/ff/46/dd499ec9038423421951e4fad73051febaa13d2df82b4064f87af8b8c0c3/pytz-2026.2.tar.gz", hash = "sha256:0e60b47b29f21574376f218fe21abc009894a2321ea16c6754f3cad6eb7cdd6a", size = 320861, upload-time = "2026-05-04T01:35:29.667Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/10/99/781fe0c827be2742bcc775efefccb3b048a3a9c6ce9aec0cbf4a101677e5/pytz-2026.1.post1-py2.py3-none-any.whl", hash = "sha256:f2fd16142fda348286a75e1a524be810bb05d444e5a081f37f7affc635035f7a", size = 510489, upload-time = "2026-03-03T07:47:49.167Z" },
+ { url = "https://files.pythonhosted.org/packages/ec/dd/96da98f892250475bdf2328112d7468abdd4acc7b902b6af23f4ed958ea0/pytz-2026.2-py2.py3-none-any.whl", hash = "sha256:04156e608bee23d3792fd45c94ae47fae1036688e75032eea2e3bf0323d1f126", size = 510141, upload-time = "2026-05-04T01:35:27.408Z" },
]
[[package]]
@@ -1497,7 +1497,7 @@ wheels = [
[[package]]
name = "requests"
-version = "2.33.1"
+version = "2.34.2"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "certifi" },
@@ -1505,88 +1505,88 @@ dependencies = [
{ name = "idna" },
{ name = "urllib3" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/5f/a4/98b9c7c6428a668bf7e42ebb7c79d576a1c3c1e3ae2d47e674b468388871/requests-2.33.1.tar.gz", hash = "sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517", size = 134120, upload-time = "2026-03-30T16:09:15.531Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/ac/c3/e2a2b89f2d3e2179abd6d00ebd70bff6273f37fb3e0cc209f48b39d00cbf/requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed", size = 142856, upload-time = "2026-05-14T19:25:27.735Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl", hash = "sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a", size = 64947, upload-time = "2026-03-30T16:09:13.83Z" },
+ { url = "https://files.pythonhosted.org/packages/a0/f4/c67b0b3f1b9245e8d266f0f112c500d50e5b4e83cb6f3b71b6528104182a/requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0", size = 73075, upload-time = "2026-05-14T19:25:26.443Z" },
]
[[package]]
name = "rpds-py"
-version = "0.30.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84", size = 69469, upload-time = "2025-11-30T20:24:38.837Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/4d/6e/f964e88b3d2abee2a82c1ac8366da848fce1c6d834dc2132c3fda3970290/rpds_py-0.30.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:a2bffea6a4ca9f01b3f8e548302470306689684e61602aa3d141e34da06cf425", size = 370157, upload-time = "2025-11-30T20:21:53.789Z" },
- { url = "https://files.pythonhosted.org/packages/94/ba/24e5ebb7c1c82e74c4e4f33b2112a5573ddc703915b13a073737b59b86e0/rpds_py-0.30.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:dc4f992dfe1e2bc3ebc7444f6c7051b4bc13cd8e33e43511e8ffd13bf407010d", size = 359676, upload-time = "2025-11-30T20:21:55.475Z" },
- { url = "https://files.pythonhosted.org/packages/84/86/04dbba1b087227747d64d80c3b74df946b986c57af0a9f0c98726d4d7a3b/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:422c3cb9856d80b09d30d2eb255d0754b23e090034e1deb4083f8004bd0761e4", size = 389938, upload-time = "2025-11-30T20:21:57.079Z" },
- { url = "https://files.pythonhosted.org/packages/42/bb/1463f0b1722b7f45431bdd468301991d1328b16cffe0b1c2918eba2c4eee/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:07ae8a593e1c3c6b82ca3292efbe73c30b61332fd612e05abee07c79359f292f", size = 402932, upload-time = "2025-11-30T20:21:58.47Z" },
- { url = "https://files.pythonhosted.org/packages/99/ee/2520700a5c1f2d76631f948b0736cdf9b0acb25abd0ca8e889b5c62ac2e3/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12f90dd7557b6bd57f40abe7747e81e0c0b119bef015ea7726e69fe550e394a4", size = 525830, upload-time = "2025-11-30T20:21:59.699Z" },
- { url = "https://files.pythonhosted.org/packages/e0/ad/bd0331f740f5705cc555a5e17fdf334671262160270962e69a2bdef3bf76/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:99b47d6ad9a6da00bec6aabe5a6279ecd3c06a329d4aa4771034a21e335c3a97", size = 412033, upload-time = "2025-11-30T20:22:00.991Z" },
- { url = "https://files.pythonhosted.org/packages/f8/1e/372195d326549bb51f0ba0f2ecb9874579906b97e08880e7a65c3bef1a99/rpds_py-0.30.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:33f559f3104504506a44bb666b93a33f5d33133765b0c216a5bf2f1e1503af89", size = 390828, upload-time = "2025-11-30T20:22:02.723Z" },
- { url = "https://files.pythonhosted.org/packages/ab/2b/d88bb33294e3e0c76bc8f351a3721212713629ffca1700fa94979cb3eae8/rpds_py-0.30.0-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:946fe926af6e44f3697abbc305ea168c2c31d3e3ef1058cf68f379bf0335a78d", size = 404683, upload-time = "2025-11-30T20:22:04.367Z" },
- { url = "https://files.pythonhosted.org/packages/50/32/c759a8d42bcb5289c1fac697cd92f6fe01a018dd937e62ae77e0e7f15702/rpds_py-0.30.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:495aeca4b93d465efde585977365187149e75383ad2684f81519f504f5c13038", size = 421583, upload-time = "2025-11-30T20:22:05.814Z" },
- { url = "https://files.pythonhosted.org/packages/2b/81/e729761dbd55ddf5d84ec4ff1f47857f4374b0f19bdabfcf929164da3e24/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9a0ca5da0386dee0655b4ccdf46119df60e0f10da268d04fe7cc87886872ba7", size = 572496, upload-time = "2025-11-30T20:22:07.713Z" },
- { url = "https://files.pythonhosted.org/packages/14/f6/69066a924c3557c9c30baa6ec3a0aa07526305684c6f86c696b08860726c/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8d6d1cc13664ec13c1b84241204ff3b12f9bb82464b8ad6e7a5d3486975c2eed", size = 598669, upload-time = "2025-11-30T20:22:09.312Z" },
- { url = "https://files.pythonhosted.org/packages/5f/48/905896b1eb8a05630d20333d1d8ffd162394127b74ce0b0784ae04498d32/rpds_py-0.30.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:3896fa1be39912cf0757753826bc8bdc8ca331a28a7c4ae46b7a21280b06bb85", size = 561011, upload-time = "2025-11-30T20:22:11.309Z" },
- { url = "https://files.pythonhosted.org/packages/22/16/cd3027c7e279d22e5eb431dd3c0fbc677bed58797fe7581e148f3f68818b/rpds_py-0.30.0-cp311-cp311-win32.whl", hash = "sha256:55f66022632205940f1827effeff17c4fa7ae1953d2b74a8581baaefb7d16f8c", size = 221406, upload-time = "2025-11-30T20:22:13.101Z" },
- { url = "https://files.pythonhosted.org/packages/fa/5b/e7b7aa136f28462b344e652ee010d4de26ee9fd16f1bfd5811f5153ccf89/rpds_py-0.30.0-cp311-cp311-win_amd64.whl", hash = "sha256:a51033ff701fca756439d641c0ad09a41d9242fa69121c7d8769604a0a629825", size = 236024, upload-time = "2025-11-30T20:22:14.853Z" },
- { url = "https://files.pythonhosted.org/packages/14/a6/364bba985e4c13658edb156640608f2c9e1d3ea3c81b27aa9d889fff0e31/rpds_py-0.30.0-cp311-cp311-win_arm64.whl", hash = "sha256:47b0ef6231c58f506ef0b74d44e330405caa8428e770fec25329ed2cb971a229", size = 229069, upload-time = "2025-11-30T20:22:16.577Z" },
- { url = "https://files.pythonhosted.org/packages/03/e7/98a2f4ac921d82f33e03f3835f5bf3a4a40aa1bfdc57975e74a97b2b4bdd/rpds_py-0.30.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a161f20d9a43006833cd7068375a94d035714d73a172b681d8881820600abfad", size = 375086, upload-time = "2025-11-30T20:22:17.93Z" },
- { url = "https://files.pythonhosted.org/packages/4d/a1/bca7fd3d452b272e13335db8d6b0b3ecde0f90ad6f16f3328c6fb150c889/rpds_py-0.30.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6abc8880d9d036ecaafe709079969f56e876fcf107f7a8e9920ba6d5a3878d05", size = 359053, upload-time = "2025-11-30T20:22:19.297Z" },
- { url = "https://files.pythonhosted.org/packages/65/1c/ae157e83a6357eceff62ba7e52113e3ec4834a84cfe07fa4b0757a7d105f/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca28829ae5f5d569bb62a79512c842a03a12576375d5ece7d2cadf8abe96ec28", size = 390763, upload-time = "2025-11-30T20:22:21.661Z" },
- { url = "https://files.pythonhosted.org/packages/d4/36/eb2eb8515e2ad24c0bd43c3ee9cd74c33f7ca6430755ccdb240fd3144c44/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a1010ed9524c73b94d15919ca4d41d8780980e1765babf85f9a2f90d247153dd", size = 408951, upload-time = "2025-11-30T20:22:23.408Z" },
- { url = "https://files.pythonhosted.org/packages/d6/65/ad8dc1784a331fabbd740ef6f71ce2198c7ed0890dab595adb9ea2d775a1/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f8d1736cfb49381ba528cd5baa46f82fdc65c06e843dab24dd70b63d09121b3f", size = 514622, upload-time = "2025-11-30T20:22:25.16Z" },
- { url = "https://files.pythonhosted.org/packages/63/8e/0cfa7ae158e15e143fe03993b5bcd743a59f541f5952e1546b1ac1b5fd45/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d948b135c4693daff7bc2dcfc4ec57237a29bd37e60c2fabf5aff2bbacf3e2f1", size = 414492, upload-time = "2025-11-30T20:22:26.505Z" },
- { url = "https://files.pythonhosted.org/packages/60/1b/6f8f29f3f995c7ffdde46a626ddccd7c63aefc0efae881dc13b6e5d5bb16/rpds_py-0.30.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47f236970bccb2233267d89173d3ad2703cd36a0e2a6e92d0560d333871a3d23", size = 394080, upload-time = "2025-11-30T20:22:27.934Z" },
- { url = "https://files.pythonhosted.org/packages/6d/d5/a266341051a7a3ca2f4b750a3aa4abc986378431fc2da508c5034d081b70/rpds_py-0.30.0-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:2e6ecb5a5bcacf59c3f912155044479af1d0b6681280048b338b28e364aca1f6", size = 408680, upload-time = "2025-11-30T20:22:29.341Z" },
- { url = "https://files.pythonhosted.org/packages/10/3b/71b725851df9ab7a7a4e33cf36d241933da66040d195a84781f49c50490c/rpds_py-0.30.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a8fa71a2e078c527c3e9dc9fc5a98c9db40bcc8a92b4e8858e36d329f8684b51", size = 423589, upload-time = "2025-11-30T20:22:31.469Z" },
- { url = "https://files.pythonhosted.org/packages/00/2b/e59e58c544dc9bd8bd8384ecdb8ea91f6727f0e37a7131baeff8d6f51661/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:73c67f2db7bc334e518d097c6d1e6fed021bbc9b7d678d6cc433478365d1d5f5", size = 573289, upload-time = "2025-11-30T20:22:32.997Z" },
- { url = "https://files.pythonhosted.org/packages/da/3e/a18e6f5b460893172a7d6a680e86d3b6bc87a54c1f0b03446a3c8c7b588f/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:5ba103fb455be00f3b1c2076c9d4264bfcb037c976167a6047ed82f23153f02e", size = 599737, upload-time = "2025-11-30T20:22:34.419Z" },
- { url = "https://files.pythonhosted.org/packages/5c/e2/714694e4b87b85a18e2c243614974413c60aa107fd815b8cbc42b873d1d7/rpds_py-0.30.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7cee9c752c0364588353e627da8a7e808a66873672bcb5f52890c33fd965b394", size = 563120, upload-time = "2025-11-30T20:22:35.903Z" },
- { url = "https://files.pythonhosted.org/packages/6f/ab/d5d5e3bcedb0a77f4f613706b750e50a5a3ba1c15ccd3665ecc636c968fd/rpds_py-0.30.0-cp312-cp312-win32.whl", hash = "sha256:1ab5b83dbcf55acc8b08fc62b796ef672c457b17dbd7820a11d6c52c06839bdf", size = 223782, upload-time = "2025-11-30T20:22:37.271Z" },
- { url = "https://files.pythonhosted.org/packages/39/3b/f786af9957306fdc38a74cef405b7b93180f481fb48453a114bb6465744a/rpds_py-0.30.0-cp312-cp312-win_amd64.whl", hash = "sha256:a090322ca841abd453d43456ac34db46e8b05fd9b3b4ac0c78bcde8b089f959b", size = 240463, upload-time = "2025-11-30T20:22:39.021Z" },
- { url = "https://files.pythonhosted.org/packages/f3/d2/b91dc748126c1559042cfe41990deb92c4ee3e2b415f6b5234969ffaf0cc/rpds_py-0.30.0-cp312-cp312-win_arm64.whl", hash = "sha256:669b1805bd639dd2989b281be2cfd951c6121b65e729d9b843e9639ef1fd555e", size = 230868, upload-time = "2025-11-30T20:22:40.493Z" },
- { url = "https://files.pythonhosted.org/packages/ed/dc/d61221eb88ff410de3c49143407f6f3147acf2538c86f2ab7ce65ae7d5f9/rpds_py-0.30.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f83424d738204d9770830d35290ff3273fbb02b41f919870479fab14b9d303b2", size = 374887, upload-time = "2025-11-30T20:22:41.812Z" },
- { url = "https://files.pythonhosted.org/packages/fd/32/55fb50ae104061dbc564ef15cc43c013dc4a9f4527a1f4d99baddf56fe5f/rpds_py-0.30.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:e7536cd91353c5273434b4e003cbda89034d67e7710eab8761fd918ec6c69cf8", size = 358904, upload-time = "2025-11-30T20:22:43.479Z" },
- { url = "https://files.pythonhosted.org/packages/58/70/faed8186300e3b9bdd138d0273109784eea2396c68458ed580f885dfe7ad/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2771c6c15973347f50fece41fc447c054b7ac2ae0502388ce3b6738cd366e3d4", size = 389945, upload-time = "2025-11-30T20:22:44.819Z" },
- { url = "https://files.pythonhosted.org/packages/bd/a8/073cac3ed2c6387df38f71296d002ab43496a96b92c823e76f46b8af0543/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0a59119fc6e3f460315fe9d08149f8102aa322299deaa5cab5b40092345c2136", size = 407783, upload-time = "2025-11-30T20:22:46.103Z" },
- { url = "https://files.pythonhosted.org/packages/77/57/5999eb8c58671f1c11eba084115e77a8899d6e694d2a18f69f0ba471ec8b/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76fec018282b4ead0364022e3c54b60bf368b9d926877957a8624b58419169b7", size = 515021, upload-time = "2025-11-30T20:22:47.458Z" },
- { url = "https://files.pythonhosted.org/packages/e0/af/5ab4833eadc36c0a8ed2bc5c0de0493c04f6c06de223170bd0798ff98ced/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:692bef75a5525db97318e8cd061542b5a79812d711ea03dbc1f6f8dbb0c5f0d2", size = 414589, upload-time = "2025-11-30T20:22:48.872Z" },
- { url = "https://files.pythonhosted.org/packages/b7/de/f7192e12b21b9e9a68a6d0f249b4af3fdcdff8418be0767a627564afa1f1/rpds_py-0.30.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9027da1ce107104c50c81383cae773ef5c24d296dd11c99e2629dbd7967a20c6", size = 394025, upload-time = "2025-11-30T20:22:50.196Z" },
- { url = "https://files.pythonhosted.org/packages/91/c4/fc70cd0249496493500e7cc2de87504f5aa6509de1e88623431fec76d4b6/rpds_py-0.30.0-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:9cf69cdda1f5968a30a359aba2f7f9aa648a9ce4b580d6826437f2b291cfc86e", size = 408895, upload-time = "2025-11-30T20:22:51.87Z" },
- { url = "https://files.pythonhosted.org/packages/58/95/d9275b05ab96556fefff73a385813eb66032e4c99f411d0795372d9abcea/rpds_py-0.30.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a4796a717bf12b9da9d3ad002519a86063dcac8988b030e405704ef7d74d2d9d", size = 422799, upload-time = "2025-11-30T20:22:53.341Z" },
- { url = "https://files.pythonhosted.org/packages/06/c1/3088fc04b6624eb12a57eb814f0d4997a44b0d208d6cace713033ff1a6ba/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d4c2aa7c50ad4728a094ebd5eb46c452e9cb7edbfdb18f9e1221f597a73e1e7", size = 572731, upload-time = "2025-11-30T20:22:54.778Z" },
- { url = "https://files.pythonhosted.org/packages/d8/42/c612a833183b39774e8ac8fecae81263a68b9583ee343db33ab571a7ce55/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ba81a9203d07805435eb06f536d95a266c21e5b2dfbf6517748ca40c98d19e31", size = 599027, upload-time = "2025-11-30T20:22:56.212Z" },
- { url = "https://files.pythonhosted.org/packages/5f/60/525a50f45b01d70005403ae0e25f43c0384369ad24ffe46e8d9068b50086/rpds_py-0.30.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:945dccface01af02675628334f7cf49c2af4c1c904748efc5cf7bbdf0b579f95", size = 563020, upload-time = "2025-11-30T20:22:58.2Z" },
- { url = "https://files.pythonhosted.org/packages/0b/5d/47c4655e9bcd5ca907148535c10e7d489044243cc9941c16ed7cd53be91d/rpds_py-0.30.0-cp313-cp313-win32.whl", hash = "sha256:b40fb160a2db369a194cb27943582b38f79fc4887291417685f3ad693c5a1d5d", size = 223139, upload-time = "2025-11-30T20:23:00.209Z" },
- { url = "https://files.pythonhosted.org/packages/f2/e1/485132437d20aa4d3e1d8b3fb5a5e65aa8139f1e097080c2a8443201742c/rpds_py-0.30.0-cp313-cp313-win_amd64.whl", hash = "sha256:806f36b1b605e2d6a72716f321f20036b9489d29c51c91f4dd29a3e3afb73b15", size = 240224, upload-time = "2025-11-30T20:23:02.008Z" },
- { url = "https://files.pythonhosted.org/packages/24/95/ffd128ed1146a153d928617b0ef673960130be0009c77d8fbf0abe306713/rpds_py-0.30.0-cp313-cp313-win_arm64.whl", hash = "sha256:d96c2086587c7c30d44f31f42eae4eac89b60dabbac18c7669be3700f13c3ce1", size = 230645, upload-time = "2025-11-30T20:23:03.43Z" },
- { url = "https://files.pythonhosted.org/packages/ff/1b/b10de890a0def2a319a2626334a7f0ae388215eb60914dbac8a3bae54435/rpds_py-0.30.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:eb0b93f2e5c2189ee831ee43f156ed34e2a89a78a66b98cadad955972548be5a", size = 364443, upload-time = "2025-11-30T20:23:04.878Z" },
- { url = "https://files.pythonhosted.org/packages/0d/bf/27e39f5971dc4f305a4fb9c672ca06f290f7c4e261c568f3dea16a410d47/rpds_py-0.30.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:922e10f31f303c7c920da8981051ff6d8c1a56207dbdf330d9047f6d30b70e5e", size = 353375, upload-time = "2025-11-30T20:23:06.342Z" },
- { url = "https://files.pythonhosted.org/packages/40/58/442ada3bba6e8e6615fc00483135c14a7538d2ffac30e2d933ccf6852232/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdc62c8286ba9bf7f47befdcea13ea0e26bf294bda99758fd90535cbaf408000", size = 383850, upload-time = "2025-11-30T20:23:07.825Z" },
- { url = "https://files.pythonhosted.org/packages/14/14/f59b0127409a33c6ef6f5c1ebd5ad8e32d7861c9c7adfa9a624fc3889f6c/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47f9a91efc418b54fb8190a6b4aa7813a23fb79c51f4bb84e418f5476c38b8db", size = 392812, upload-time = "2025-11-30T20:23:09.228Z" },
- { url = "https://files.pythonhosted.org/packages/b3/66/e0be3e162ac299b3a22527e8913767d869e6cc75c46bd844aa43fb81ab62/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1f3587eb9b17f3789ad50824084fa6f81921bbf9a795826570bda82cb3ed91f2", size = 517841, upload-time = "2025-11-30T20:23:11.186Z" },
- { url = "https://files.pythonhosted.org/packages/3d/55/fa3b9cf31d0c963ecf1ba777f7cf4b2a2c976795ac430d24a1f43d25a6ba/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:39c02563fc592411c2c61d26b6c5fe1e51eaa44a75aa2c8735ca88b0d9599daa", size = 408149, upload-time = "2025-11-30T20:23:12.864Z" },
- { url = "https://files.pythonhosted.org/packages/60/ca/780cf3b1a32b18c0f05c441958d3758f02544f1d613abf9488cd78876378/rpds_py-0.30.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:51a1234d8febafdfd33a42d97da7a43f5dcb120c1060e352a3fbc0c6d36e2083", size = 383843, upload-time = "2025-11-30T20:23:14.638Z" },
- { url = "https://files.pythonhosted.org/packages/82/86/d5f2e04f2aa6247c613da0c1dd87fcd08fa17107e858193566048a1e2f0a/rpds_py-0.30.0-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:eb2c4071ab598733724c08221091e8d80e89064cd472819285a9ab0f24bcedb9", size = 396507, upload-time = "2025-11-30T20:23:16.105Z" },
- { url = "https://files.pythonhosted.org/packages/4b/9a/453255d2f769fe44e07ea9785c8347edaf867f7026872e76c1ad9f7bed92/rpds_py-0.30.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bdfdb946967d816e6adf9a3d8201bfad269c67efe6cefd7093ef959683c8de0", size = 414949, upload-time = "2025-11-30T20:23:17.539Z" },
- { url = "https://files.pythonhosted.org/packages/a3/31/622a86cdc0c45d6df0e9ccb6becdba5074735e7033c20e401a6d9d0e2ca0/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c77afbd5f5250bf27bf516c7c4a016813eb2d3e116139aed0096940c5982da94", size = 565790, upload-time = "2025-11-30T20:23:19.029Z" },
- { url = "https://files.pythonhosted.org/packages/1c/5d/15bbf0fb4a3f58a3b1c67855ec1efcc4ceaef4e86644665fff03e1b66d8d/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:61046904275472a76c8c90c9ccee9013d70a6d0f73eecefd38c1ae7c39045a08", size = 590217, upload-time = "2025-11-30T20:23:20.885Z" },
- { url = "https://files.pythonhosted.org/packages/6d/61/21b8c41f68e60c8cc3b2e25644f0e3681926020f11d06ab0b78e3c6bbff1/rpds_py-0.30.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4c5f36a861bc4b7da6516dbdf302c55313afa09b81931e8280361a4f6c9a2d27", size = 555806, upload-time = "2025-11-30T20:23:22.488Z" },
- { url = "https://files.pythonhosted.org/packages/f9/39/7e067bb06c31de48de3eb200f9fc7c58982a4d3db44b07e73963e10d3be9/rpds_py-0.30.0-cp313-cp313t-win32.whl", hash = "sha256:3d4a69de7a3e50ffc214ae16d79d8fbb0922972da0356dcf4d0fdca2878559c6", size = 211341, upload-time = "2025-11-30T20:23:24.449Z" },
- { url = "https://files.pythonhosted.org/packages/0a/4d/222ef0b46443cf4cf46764d9c630f3fe4abaa7245be9417e56e9f52b8f65/rpds_py-0.30.0-cp313-cp313t-win_amd64.whl", hash = "sha256:f14fc5df50a716f7ece6a80b6c78bb35ea2ca47c499e422aa4463455dd96d56d", size = 225768, upload-time = "2025-11-30T20:23:25.908Z" },
- { url = "https://files.pythonhosted.org/packages/69/71/3f34339ee70521864411f8b6992e7ab13ac30d8e4e3309e07c7361767d91/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c2262bdba0ad4fc6fb5545660673925c2d2a5d9e2e0fb603aad545427be0fc58", size = 372292, upload-time = "2025-11-30T20:24:16.537Z" },
- { url = "https://files.pythonhosted.org/packages/57/09/f183df9b8f2d66720d2ef71075c59f7e1b336bec7ee4c48f0a2b06857653/rpds_py-0.30.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ee6af14263f25eedc3bb918a3c04245106a42dfd4f5c2285ea6f997b1fc3f89a", size = 362128, upload-time = "2025-11-30T20:24:18.086Z" },
- { url = "https://files.pythonhosted.org/packages/7a/68/5c2594e937253457342e078f0cc1ded3dd7b2ad59afdbf2d354869110a02/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3adbb8179ce342d235c31ab8ec511e66c73faa27a47e076ccc92421add53e2bb", size = 391542, upload-time = "2025-11-30T20:24:20.092Z" },
- { url = "https://files.pythonhosted.org/packages/49/5c/31ef1afd70b4b4fbdb2800249f34c57c64beb687495b10aec0365f53dfc4/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:250fa00e9543ac9b97ac258bd37367ff5256666122c2d0f2bc97577c60a1818c", size = 404004, upload-time = "2025-11-30T20:24:22.231Z" },
- { url = "https://files.pythonhosted.org/packages/e3/63/0cfbea38d05756f3440ce6534d51a491d26176ac045e2707adc99bb6e60a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9854cf4f488b3d57b9aaeb105f06d78e5529d3145b1e4a41750167e8c213c6d3", size = 527063, upload-time = "2025-11-30T20:24:24.302Z" },
- { url = "https://files.pythonhosted.org/packages/42/e6/01e1f72a2456678b0f618fc9a1a13f882061690893c192fcad9f2926553a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:993914b8e560023bc0a8bf742c5f303551992dcb85e247b1e5c7f4a7d145bda5", size = 413099, upload-time = "2025-11-30T20:24:25.916Z" },
- { url = "https://files.pythonhosted.org/packages/b8/25/8df56677f209003dcbb180765520c544525e3ef21ea72279c98b9aa7c7fb/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58edca431fb9b29950807e301826586e5bbf24163677732429770a697ffe6738", size = 392177, upload-time = "2025-11-30T20:24:27.834Z" },
- { url = "https://files.pythonhosted.org/packages/4a/b4/0a771378c5f16f8115f796d1f437950158679bcd2a7c68cf251cfb00ed5b/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:dea5b552272a944763b34394d04577cf0f9bd013207bc32323b5a89a53cf9c2f", size = 406015, upload-time = "2025-11-30T20:24:29.457Z" },
- { url = "https://files.pythonhosted.org/packages/36/d8/456dbba0af75049dc6f63ff295a2f92766b9d521fa00de67a2bd6427d57a/rpds_py-0.30.0-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ba3af48635eb83d03f6c9735dfb21785303e73d22ad03d489e88adae6eab8877", size = 423736, upload-time = "2025-11-30T20:24:31.22Z" },
- { url = "https://files.pythonhosted.org/packages/13/64/b4d76f227d5c45a7e0b796c674fd81b0a6c4fbd48dc29271857d8219571c/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:dff13836529b921e22f15cb099751209a60009731a68519630a24d61f0b1b30a", size = 573981, upload-time = "2025-11-30T20:24:32.934Z" },
- { url = "https://files.pythonhosted.org/packages/20/91/092bacadeda3edf92bf743cc96a7be133e13a39cdbfd7b5082e7ab638406/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:1b151685b23929ab7beec71080a8889d4d6d9fa9a983d213f07121205d48e2c4", size = 599782, upload-time = "2025-11-30T20:24:35.169Z" },
- { url = "https://files.pythonhosted.org/packages/d1/b7/b95708304cd49b7b6f82fdd039f1748b66ec2b21d6a45180910802f1abf1/rpds_py-0.30.0-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:ac37f9f516c51e5753f27dfdef11a88330f04de2d564be3991384b2f3535d02e", size = 562191, upload-time = "2025-11-30T20:24:36.853Z" },
+version = "2026.5.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/2e/43/25a8dcd3feedd735039a8f0b5b7e3b118232b5eae288c4fd9ab200d41094/rpds_py-2026.5.1.tar.gz", hash = "sha256:07b24fea40541e28570e5b795a4a38fbdcd12550c06bd0748005ecc8116ca256", size = 64459, upload-time = "2026-05-28T12:02:13.232Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/4f/a0/acf8b6fc20bfdcd3a45bd3f57680fb198e157b7e997b9123b10763798bd2/rpds_py-2026.5.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:3397a5ed7174dc2786bb214030232fc36fe8e5584fec43a9952cc542b1a12036", size = 355609, upload-time = "2026-05-28T11:58:50.78Z" },
+ { url = "https://files.pythonhosted.org/packages/b6/95/f8203fd997484b1690a6869cd0e503b6c3c6be55b0ecc36d1a491fe742f0/rpds_py-2026.5.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:99ab6ba7bfa2cb0f96a04e3652355bf04e3f51aceb1e943b8541dab7ba4828cc", size = 348460, upload-time = "2026-05-28T11:58:52.374Z" },
+ { url = "https://files.pythonhosted.org/packages/33/8c/b47326ad2f0be545a5e5c1a55937a12afaea7d392ba2837bb9680f57e6c9/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0efbe45632665e53e3db8fe1e5692db58fc5cb9bab4459d570b83efefe11164", size = 381031, upload-time = "2026-05-28T11:58:53.775Z" },
+ { url = "https://files.pythonhosted.org/packages/22/0b/e83bbd97ffac6f6389b605cd4e1c8ac5761dc7e977769c9255d8c5adb7bd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:01d17b29c0c23d82b1f4751147ec49cf451f1fc2554eb9ef5f957e55d2656ead", size = 387121, upload-time = "2026-05-28T11:58:55.243Z" },
+ { url = "https://files.pythonhosted.org/packages/fd/0e/d285d1bc8864245919c61e1ca82263e4a66d337759c3a4cef72766ff9afc/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7559f72b94ae52659086c595dfa017cde03155f7832071d30959049052cb3ece", size = 501026, upload-time = "2026-05-28T11:58:56.788Z" },
+ { url = "https://files.pythonhosted.org/packages/86/06/ccb2109a1e543437b5e43816f2b43b9554cc6783145528a4e3711e05c011/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e25b7088f9ccbfc0dfcaa52bf969300ca229e10ecf758974ebcbb080a4b37bb", size = 391865, upload-time = "2026-05-28T11:58:58.298Z" },
+ { url = "https://files.pythonhosted.org/packages/3d/33/237173db1cfef10105b3839a24de00eb8d2a523711add4632447cdf0aedd/rpds_py-2026.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613fc4ee9eaef26dc5840666214dd6fbcebcf32f46e76f4abc473059f4e13dda", size = 378012, upload-time = "2026-05-28T11:58:59.589Z" },
+ { url = "https://files.pythonhosted.org/packages/97/64/1eae54e34d5161f9969295e80bd6b62a55f2b6ac5f2a5b60d02c2140e758/rpds_py-2026.5.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:85264a90ff4c05c1568dd65f5921c837614b67c60358fb4c17df3b7f2e90690a", size = 391111, upload-time = "2026-05-28T11:59:01.104Z" },
+ { url = "https://files.pythonhosted.org/packages/d8/34/5bb334a5a0f65d77869217c4654f34c78a7d11b93938a3c076a2edeafc52/rpds_py-2026.5.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe71bca7d547acb17027c7fd1624ff8aae623499c498d3e7011182c4de5c25e0", size = 409225, upload-time = "2026-05-28T11:59:02.433Z" },
+ { url = "https://files.pythonhosted.org/packages/16/0f/007ec21283b5b040b4ec3bd95e0402591e22bfa7d5c93dfe01c465c2d2d7/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05fa4f41f37ec97c9c260441a940450a192f78d774d2b097eee1379f1e1246a", size = 556487, upload-time = "2026-05-28T11:59:04.012Z" },
+ { url = "https://files.pythonhosted.org/packages/ff/10/5437c94508169b6b22d8418fef7a66e9ffb5f3b9e9c94460f2eedafe06ff/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df1d2a1996755b24b9ecee92cb4d36c28f86f464a6a173349c26bab41e94b8c2", size = 620798, upload-time = "2026-05-28T11:59:05.485Z" },
+ { url = "https://files.pythonhosted.org/packages/e0/d5/9937dce4d6bda74157b954e7d1460db05a22f5929dccfeeba1ed27a93df0/rpds_py-2026.5.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8895840ac4809e5f60c88fd07617cd71326e73d6e5a8aa783c5c0f7c24985de2", size = 584053, upload-time = "2026-05-28T11:59:06.837Z" },
+ { url = "https://files.pythonhosted.org/packages/6c/31/750617dd0ae1752471bf43f9e41d263398fae7cde7849d23b8574a70e617/rpds_py-2026.5.1-cp311-cp311-win32.whl", hash = "sha256:3684a59b158a7683aaeb8e25352e9a9dd2122cec78f2d8530266e4f91b4c7b3f", size = 214390, upload-time = "2026-05-28T11:59:08.402Z" },
+ { url = "https://files.pythonhosted.org/packages/3c/bb/3dcab0e1d9516303f2eb672a5d6f62eca5a69e2886301e9c8c54b520c39b/rpds_py-2026.5.1-cp311-cp311-win_amd64.whl", hash = "sha256:7bd530e6a530bb3ea892f194fafa455f3516ac25ecf7143fd33c09be62b0470a", size = 231097, upload-time = "2026-05-28T11:59:09.786Z" },
+ { url = "https://files.pythonhosted.org/packages/49/d6/c6bbf5cb1cf12b9732df8074b57f6ef8341ba884c95d40632ae8bddb44e4/rpds_py-2026.5.1-cp311-cp311-win_arm64.whl", hash = "sha256:0a5ae4dbe43c1076983b72616496919872ae7bbe7a1e21cc48336bc3154d130b", size = 226361, upload-time = "2026-05-28T11:59:11.079Z" },
+ { url = "https://files.pythonhosted.org/packages/d4/e7/a78582dc57caa592dcc7d4fb69b61390561e908eb3d2f5df5928a8e354c0/rpds_py-2026.5.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3abe24a66e57adcfa645d718063a5fa5103ecc71ddbf26d78af8f9368018ff1d", size = 353040, upload-time = "2026-05-28T11:59:12.531Z" },
+ { url = "https://files.pythonhosted.org/packages/a3/43/35e3f136343aef451e545ce8c38d36c2f93c0ed88703db8b64ba2b205c68/rpds_py-2026.5.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58b1d94308ddf0b1982f61f2eb54bf92997c9ece8a8093ef014250f4a517906c", size = 345775, upload-time = "2026-05-28T11:59:13.827Z" },
+ { url = "https://files.pythonhosted.org/packages/20/e1/0f2160c5982d3157734d5cb3ed63d8b2d583a73c9864f77b666449f32cf8/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fa92420128dadce7f54bd73ba1825a273e9268fe9e35dbf7e6362890efa4e08", size = 376329, upload-time = "2026-05-28T11:59:15.271Z" },
+ { url = "https://files.pythonhosted.org/packages/d0/11/ee0ba42aff83bf4effdbc576673c6be64c5e173978c3f6d537e94482f77d/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca653c6546386227cd9800d1bef6a348099acf8db4250341da6d90f663d6dfcb", size = 383539, upload-time = "2026-05-28T11:59:16.665Z" },
+ { url = "https://files.pythonhosted.org/packages/11/df/d94aa6a499d4ac40afe2d7620f2c597fd3c0f182e854ad7cf3f596a81cb6/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66c93681c4729e4e3ecba31b8179fae083ff3118841672835140338b4b9867c1", size = 494674, upload-time = "2026-05-28T11:59:17.991Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/75/33d30f43bb2f458de11979486a591b1bf6e5651765ed1704c6197c2dc773/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:40ff257542e04796880e011e15cd4dc21c2599975df2aaa8f2c8495ca574e1a5", size = 389268, upload-time = "2026-05-28T11:59:19.434Z" },
+ { url = "https://files.pythonhosted.org/packages/f4/1e/2c9096fc19d5fd084b0184ca2b651e659aa0a37e6fdbecf6ece47f147fe1/rpds_py-2026.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6825cc329b290e93c5f6a9be2393118a763f6ccf6abd83704e0c102ca583644", size = 376280, upload-time = "2026-05-28T11:59:21Z" },
+ { url = "https://files.pythonhosted.org/packages/b9/e5/61ec9f8be8211ea7f48448195549e4aaf02004083475493b0e137702ecb2/rpds_py-2026.5.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:de42116e69cb53b911cc34aee5ab98f36c597b822545045d49e938818b99e5e4", size = 387233, upload-time = "2026-05-28T11:59:22.454Z" },
+ { url = "https://files.pythonhosted.org/packages/0d/ca/bcec1005c4f4a234f92a29078631fee49206c7265ccae966f18fd332e80e/rpds_py-2026.5.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c0f920015df2a504bebaba6d4c31ccf3fcf942f92655c086da30b671aad19aa6", size = 405009, upload-time = "2026-05-28T11:59:23.845Z" },
+ { url = "https://files.pythonhosted.org/packages/72/e6/4d5718c5cf26c522dc7c9999e238da1e77380b81d0c5d1df11e271ddfeb1/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0408a24e44feb919423dc6d9da677cb5cddb894d2ca9e763967d156d9c60fab4", size = 553113, upload-time = "2026-05-28T11:59:25.184Z" },
+ { url = "https://files.pythonhosted.org/packages/d4/25/2ee807bdb3e1f0b7eddf7782acd5665a8b5205a331a7d7244a52c4812fd9/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:cea68bcd53467561ae2f96a6bdad1544299ba97b5b0ddcd5ac3d376e5c781c24", size = 618838, upload-time = "2026-05-28T11:59:26.749Z" },
+ { url = "https://files.pythonhosted.org/packages/6a/c1/7d4c26f167f8c41501cc073d30ee22082b16ce358cf5b00ec97cbc7804ea/rpds_py-2026.5.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4be8b1d2a705cc37d08256004e1d07de143fa0075c8e85a3df020b776f62b732", size = 582436, upload-time = "2026-05-28T11:59:28.11Z" },
+ { url = "https://files.pythonhosted.org/packages/04/1d/9d12b0a337bab46f4769f8857f4007e3b2d639e14f9a44a0efe157696e64/rpds_py-2026.5.1-cp312-cp312-win32.whl", hash = "sha256:6736718bd4fc49cbcb538ba30516fdbef161522acefb739657d48b97bd864fed", size = 212734, upload-time = "2026-05-28T11:59:29.689Z" },
+ { url = "https://files.pythonhosted.org/packages/c5/93/e4116f2de7f56bc7406a76033dc501811ddeb22b7f056b92d632871ebb0c/rpds_py-2026.5.1-cp312-cp312-win_amd64.whl", hash = "sha256:0a7d1eec967df0e9b22614a5e177622e0c89611d03727fa0cb48e45028907870", size = 229045, upload-time = "2026-05-28T11:59:31.033Z" },
+ { url = "https://files.pythonhosted.org/packages/cb/53/6c3419d85eb2ec5938a37627c585b42d76a63bb731d6e42ed4b079ebf486/rpds_py-2026.5.1-cp312-cp312-win_arm64.whl", hash = "sha256:1841d067089e117142d79b98aa0df2f08b52f2ecc1819dd2700636c0db74a473", size = 223967, upload-time = "2026-05-28T11:59:32.318Z" },
+ { url = "https://files.pythonhosted.org/packages/6c/32/14c961ad295f490eb0849ada8b79683e93a59b9de3afdd983eaf55fa6867/rpds_py-2026.5.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:efef4ac29c6ff495531eb17ee705b62841ecaa291b7c7077e848ea03e237164d", size = 352787, upload-time = "2026-05-28T11:59:33.655Z" },
+ { url = "https://files.pythonhosted.org/packages/ca/bb/d1b85117967c11191441a7274ae616c65d93901d082c588f89a50a8da5ae/rpds_py-2026.5.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c39f5b67a8a2e67179ada2a954227d670fe65fa9098457f698f56ddf248709b3", size = 345179, upload-time = "2026-05-28T11:59:35Z" },
+ { url = "https://files.pythonhosted.org/packages/7c/46/d84105f062e626a1b233f863907288a4708c2d833b8b4c6fb2764bc080c0/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b5c30f3f04eef4fbd362226a6f31d7c8895ca4fbb6e0b790f6890a98d8da8559", size = 376173, upload-time = "2026-05-28T11:59:36.43Z" },
+ { url = "https://files.pythonhosted.org/packages/e2/ae/469d7959ce5b1201e1de135dc735b86db3b35dd0d1734f6a44246d5f061c/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:277f6c82f0580848796c7ecc8a7173aa3bfb928e4ff831261c2f60a81dc270db", size = 383162, upload-time = "2026-05-28T11:59:37.995Z" },
+ { url = "https://files.pythonhosted.org/packages/dc/a2/57853d31a1116a561aa072794602ad3f6341e18d70a8523f1bd5b9fc1e5a/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:63c2c4c213f1a4e3f3de28ecab029dbdee976324e729c0d7a55211be72576b02", size = 495093, upload-time = "2026-05-28T11:59:39.453Z" },
+ { url = "https://files.pythonhosted.org/packages/99/63/3a8eabcad9314b7daf5c65f451d2c33d989235cd8a5762186cf2c3f5a4f8/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3350ec808fb538fe71a1f94dfaa0e29c598dfad805ce49f0caec5ae3183c652b", size = 389829, upload-time = "2026-05-28T11:59:40.896Z" },
+ { url = "https://files.pythonhosted.org/packages/4b/25/05678d97fc25e2622df14dc530fb82023174ecfff6733991ed0d78f167bd/rpds_py-2026.5.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1b964e3ab599e718dc46c018d104b1ebc007cbc6567d827c94a687fca56d77e", size = 374786, upload-time = "2026-05-28T11:59:42.626Z" },
+ { url = "https://files.pythonhosted.org/packages/88/d1/8c90b6431e80a3b91b284a5c7c8c0c4f9c006444d90477a740d6e0f9c694/rpds_py-2026.5.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:19cb09fab7b7fc96b2a6e28f2e34b72a3705ff27b37edb77455316e5d3f3dc9b", size = 386920, upload-time = "2026-05-28T11:59:44.124Z" },
+ { url = "https://files.pythonhosted.org/packages/ff/99/4638f672ab356682d633ee0da9255f5b67ce6efd0b85eb94ad3e255e65a5/rpds_py-2026.5.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:abe76bcdba31e576cb83eeb8797aa0d882b738fef6dc65d0601fc753806a5b46", size = 405059, upload-time = "2026-05-28T11:59:47.177Z" },
+ { url = "https://files.pythonhosted.org/packages/66/3f/3546524b6eb4cc2e1f363a3d638fa52f6c24faae3500c25fb488b02f1740/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:8bff7073db3899158fff55ebf57b113a67030af26f80a18978f9f0aa60250ddf", size = 553030, upload-time = "2026-05-28T11:59:48.603Z" },
+ { url = "https://files.pythonhosted.org/packages/c6/c3/7b3388c796fcf471bd17194242d4dc1a7608567c0fa422bcc1c5e79f9c1e/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8ba264fa49be666cd9cc56bf34ec7002fb3d27a4aee5bcb4d43d0d18feb1bb6f", size = 618975, upload-time = "2026-05-28T11:59:50.314Z" },
+ { url = "https://files.pythonhosted.org/packages/61/1e/a3cb07f2795075d1d88efddae2f541359fde5f08c81ee114c29c2949c90a/rpds_py-2026.5.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4860b603ddda0475a8885499b3729e90229d480105b42651962a5397d995fa89", size = 581178, upload-time = "2026-05-28T11:59:51.673Z" },
+ { url = "https://files.pythonhosted.org/packages/a1/74/e758c03a5ef46f04c37f2651a2893db846d569ba8a7bca469d4b58939bcd/rpds_py-2026.5.1-cp313-cp313-win32.whl", hash = "sha256:7944270ae71383f6e2657dd7d5ce4eeb4ac2d0059a6738f0510583d462ab4842", size = 212481, upload-time = "2026-05-28T11:59:53.148Z" },
+ { url = "https://files.pythonhosted.org/packages/70/ec/a2aca432db9c7359b40fa393eeeaa0d166c2f70175be956e75fa24197c44/rpds_py-2026.5.1-cp313-cp313-win_amd64.whl", hash = "sha256:88647f43a73c4e01be19b04ceef0c8d3a1958153604d13c773becd8016f2a0cf", size = 228519, upload-time = "2026-05-28T11:59:54.505Z" },
+ { url = "https://files.pythonhosted.org/packages/29/60/a73bfdd45b096574556acf303bbd9fa9eed36ca8a818b514e2a5d5fe2b9d/rpds_py-2026.5.1-cp313-cp313-win_arm64.whl", hash = "sha256:453895624ecf7db7063b1004e44037522bbaef9ff6a945e59bc71662d7a03abd", size = 223446, upload-time = "2026-05-28T11:59:56.081Z" },
+ { url = "https://files.pythonhosted.org/packages/18/e2/408105fd611823f00882aea810f3989a30d26b1bab8b6beb20f98c724e0e/rpds_py-2026.5.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:b4e4bc98639ec915f512fde3aa7a95e0041d95d9c3cc86eea841fa63cb1e8600", size = 355287, upload-time = "2026-05-28T11:59:57.448Z" },
+ { url = "https://files.pythonhosted.org/packages/8d/58/5c4a43436843c90d0f6d19f82c200c80e3843ca9fa07b237623327f6d384/rpds_py-2026.5.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:cacedb7a6e167680acba45ad5716e89067d225dc80da0d7040cae8c81d4572fa", size = 347033, upload-time = "2026-05-28T11:59:58.881Z" },
+ { url = "https://files.pythonhosted.org/packages/fb/c2/1a71acdacaf4e259b10278fb87b039ded3cf80041bcd89dd8a3ea702ded6/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:68700371c5d7ae1412862ddfa719090925c93ecf351c566d66f09d04b136ea00", size = 376891, upload-time = "2026-05-28T12:00:00.516Z" },
+ { url = "https://files.pythonhosted.org/packages/c2/c8/535f3d9b65addd8e28aa87b83c6e526799c3717a88273db8ea795beeef7a/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:296c799becfa849c779c8725494fe9ed94959ed886787df4364b058465bad7f0", size = 385646, upload-time = "2026-05-28T12:00:02.394Z" },
+ { url = "https://files.pythonhosted.org/packages/1c/91/dc033f313345c354ade914dbe73cdb90b615a4409ea02430d5356794f3d8/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d3858b908218ee108d0bbfb2095ccc237648053c9bf98affad7cb079acaf1d97", size = 498830, upload-time = "2026-05-28T12:00:04.189Z" },
+ { url = "https://files.pythonhosted.org/packages/27/fc/90fcbea459dbb8ddc18a2e0fd1de9412b48bc84ffff2db771cf714bacfd6/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4fb8d2e7cb2f850b169806d61d1b991738acec96500a75c30f49caf064ce7cef", size = 392830, upload-time = "2026-05-28T12:00:05.797Z" },
+ { url = "https://files.pythonhosted.org/packages/b2/1d/46cd11a228c9750684a798d98f878be6f614aa762438da7378f035e79e35/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27b74c10ed6a8f190f4287f53bcfea348b92a84a9c9f70d30183d1e6172d580d", size = 379613, upload-time = "2026-05-28T12:00:07.433Z" },
+ { url = "https://files.pythonhosted.org/packages/24/4a/d9b0c6af3a1de03eb93741bbe8be2bdce84d8fda8224f3005451d86df389/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:b9a6528956191c48c52294a592dbd4a8386d7048bdb25c0efcb6b966466c6d83", size = 388183, upload-time = "2026-05-28T12:00:09.227Z" },
+ { url = "https://files.pythonhosted.org/packages/c5/b4/db7aaabdda6d020afc87d981bcc2f57a434c7dec60ecfc2ab3dd50b20351/rpds_py-2026.5.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:af03e34e860047bc7a352b842856fcf78798fbb81132cc98bd2f907ab4eb9cd2", size = 408578, upload-time = "2026-05-28T12:00:10.779Z" },
+ { url = "https://files.pythonhosted.org/packages/08/d6/070f6a41cbb343e2ac4171859bf3f3623e0ab002f72619d6d505313ec2de/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:fea6e836d10abbe191d557d33bd58bd5987725fe63aa1eefe557d230209855bd", size = 553573, upload-time = "2026-05-28T12:00:12.443Z" },
+ { url = "https://files.pythonhosted.org/packages/75/ab/1a71ea3589c4345dac0a0518f0e6a031cb42689277851b683c46d27463a5/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:fc0c0f878ea770a0a8a462456c5ad36fc9fe6358e6b76fdadc7f17575e0b8bf1", size = 620861, upload-time = "2026-05-28T12:00:14.09Z" },
+ { url = "https://files.pythonhosted.org/packages/8a/22/9bf80a56069c0c443fcfefac639a86a744550a2898817a6dfd3e26654924/rpds_py-2026.5.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:e0b360f316d966b048b085857630b3cc51f3db2f07b06f440eac8f695374d1e3", size = 585633, upload-time = "2026-05-28T12:00:15.66Z" },
+ { url = "https://files.pythonhosted.org/packages/da/68/3b2c0a75c9e04125696f84ebdbbf304acf5a40b58ba4481cdb98a922c3ba/rpds_py-2026.5.1-cp313-cp313t-win32.whl", hash = "sha256:a2999883eedf72fdfb7520b92c7d4ec2572a71ff40239377aa604cc529eecafc", size = 210074, upload-time = "2026-05-28T12:00:17.291Z" },
+ { url = "https://files.pythonhosted.org/packages/e7/8b/609157d5a25d37d4f29f92840ba531f416907c34ae5c5739dd21fc2bef98/rpds_py-2026.5.1-cp313-cp313t-win_amd64.whl", hash = "sha256:e07be2a9d7122bd6e82dea89814ef8dc893feb1aae97fec1630f3263bbb30e55", size = 228635, upload-time = "2026-05-28T12:00:18.73Z" },
+ { url = "https://files.pythonhosted.org/packages/42/56/3fe0fb34820ff667be791b3a3c22b85e8bcba54e9c832f47438c191fa7be/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:edf2765d84e42447f112ad877af8fe1db0089aaec5b28e88d6eab45e7fe99cea", size = 357151, upload-time = "2026-05-28T12:01:53.43Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/f2/3eb9ccdb9f143b8c9b003978898cb497f942a324c077401e6b8834238e63/rpds_py-2026.5.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:ad3773236e95f7f33991eb125224b7da66f206504d032a253a02da7e134519fb", size = 350195, upload-time = "2026-05-28T12:01:54.901Z" },
+ { url = "https://files.pythonhosted.org/packages/a7/24/dbda232bc4f3ed732120692ab0d2c8402cb020516556d8bee622dcef2413/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a04df86b3f0fade39ec8fd0e0aab089b1da9fbd2b48df778a57ef96f5e7d38df", size = 381850, upload-time = "2026-05-28T12:01:56.601Z" },
+ { url = "https://files.pythonhosted.org/packages/40/30/32e769839a358f78810c234f160f2cc21d1e4e47e1c0e0e0d535be5a0219/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6142dbd80c4df62a5d899f0d616d417f84e0bc8d32526c8e5589019d75d028a7", size = 387899, upload-time = "2026-05-28T12:01:58.212Z" },
+ { url = "https://files.pythonhosted.org/packages/ab/86/ec84d243aadb3b34b71dd26a010d0930b2d284ff5fc9a69fec53810ee6fd/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0b35217adefe87f2fe4db7e9766cabe84744bfe9616d9667be18988928c7f2dc", size = 501618, upload-time = "2026-05-28T12:01:59.888Z" },
+ { url = "https://files.pythonhosted.org/packages/74/25/b60e52686bbff777a64f9e4f4d3dd57980dc846913777177a2c92e4937aa/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b95d5e11fc712b752081183a55a244c03cd00570489edd7014d8899f8ceb8162", size = 394003, upload-time = "2026-05-28T12:02:01.482Z" },
+ { url = "https://files.pythonhosted.org/packages/9b/c7/b3a6a588cc2219510ef3f42e207483a93950bedd1e3a0fd4015c95cff9e5/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:141c9498daf2ace9eda35d2b0e376f9ea8b058d84f2aef4f96fccfd449a2f251", size = 379778, upload-time = "2026-05-28T12:02:03.197Z" },
+ { url = "https://files.pythonhosted.org/packages/31/00/c7dba3fc8a3da8cb3f6db1eb3386be4d79c2e97c6890d20eb9ac66ae8c43/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:6f249f8b860a200ad35193af961183ebe9132710484e6f6ce0cf89fd83c63a9a", size = 392359, upload-time = "2026-05-28T12:02:04.817Z" },
+ { url = "https://files.pythonhosted.org/packages/93/dd/472ba494c70753f93745992c99855bee0636daf74e6984e5e003f150316f/rpds_py-2026.5.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e4abbf391a70be864920858bf360f4fb380577c9a0f732438a1996726e2c195b", size = 412820, upload-time = "2026-05-28T12:02:06.401Z" },
+ { url = "https://files.pythonhosted.org/packages/1d/6f/93831a3bfe789542ed0c1d0d74b78b440f055d6dc3ea4640eba2d95e6e23/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c74005a7bb87752acf351c93897ec63ad77a07a0da7ecad9c050e32e7286ba34", size = 557243, upload-time = "2026-05-28T12:02:08.013Z" },
+ { url = "https://files.pythonhosted.org/packages/1f/ff/0b3d604614ffc77522c6b288fdbce68957eb583da1002aa65ba38ac0ee40/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:8213afbe8a3a906fb9acb2014423fe3359ee783d0bf90995f70623a3217bfa6c", size = 623541, upload-time = "2026-05-28T12:02:09.661Z" },
+ { url = "https://files.pythonhosted.org/packages/ea/ea/e7b0251441da9adfeaebcf29601d10f2a1455fcf0772fae9e7e19032bd96/rpds_py-2026.5.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:8c43a8a973270fd173bf48cdf80bbe66312421cba68d40845034f174f2389049", size = 586326, upload-time = "2026-05-28T12:02:11.47Z" },
]
[[package]]
@@ -1656,20 +1656,20 @@ wheels = [
[[package]]
name = "snowballstemmer"
-version = "3.0.1"
+version = "3.1.1"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/75/a7/9810d872919697c9d01295633f5d574fb416d47e535f258272ca1f01f447/snowballstemmer-3.0.1.tar.gz", hash = "sha256:6d5eeeec8e9f84d4d56b847692bacf79bc2c8e90c7f80ca4444ff8b6f2e52895", size = 105575, upload-time = "2025-05-09T16:34:51.843Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/43/f8/0a71edf031f03c40db17503cb8ca78a69a171254e568e7db241b0ab57ea1/snowballstemmer-3.1.1.tar.gz", hash = "sha256:e07bbc54a0d798fe6010a12398422e62a8bfbba95c394fd0956ef58cb4d3e260", size = 123314, upload-time = "2026-06-03T00:56:40.194Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/c8/78/3565d011c61f5a43488987ee32b6f3f656e7f107ac2782dd57bdd7d91d9a/snowballstemmer-3.0.1-py3-none-any.whl", hash = "sha256:6cd7b3897da8d6c9ffb968a6781fa6532dce9c3618a4b127d920dab764a19064", size = 103274, upload-time = "2025-05-09T16:34:50.371Z" },
+ { url = "https://files.pythonhosted.org/packages/4c/07/2ebca9b11fb9be7340a818d8d6f63feaebb146be2c4afbd6061701d6df6e/snowballstemmer-3.1.1-py3-none-any.whl", hash = "sha256:7e207fa178741da09cdee59d3ecec3827ad5f92b1fc5c9ff3755b639f71f5752", size = 104164, upload-time = "2026-06-03T00:56:38.614Z" },
]
[[package]]
name = "soupsieve"
-version = "2.8.3"
+version = "2.8.4"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/7b/ae/2d9c981590ed9999a0d91755b47fc74f74de286b0f5cee14c9269041e6c4/soupsieve-2.8.3.tar.gz", hash = "sha256:3267f1eeea4251fb42728b6dfb746edc9acaffc4a45b27e19450b676586e8349", size = 118627, upload-time = "2026-01-20T04:27:02.457Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/47/2c/0a5f6f8ee0d5589e48c7640213ed5175d52cf540a06725b628cc1a45d6ce/soupsieve-2.8.4.tar.gz", hash = "sha256:e121fd02e975c695e4e9e8774a5ee35d74714b59307868dcc5319ad2d9e3328e", size = 121110, upload-time = "2026-05-24T13:55:57.154Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl", hash = "sha256:ed64f2ba4eebeab06cc4962affce381647455978ffc1e36bb79a545b91f45a95", size = 37016, upload-time = "2026-01-20T04:27:01.012Z" },
+ { url = "https://files.pythonhosted.org/packages/5e/f5/0c41cb68dcae6b7de4fac4188a3a9589e21fb31df21ea3a2e888db95e6c9/soupsieve-2.8.4-py3-none-any.whl", hash = "sha256:e7e6b0769c8f51ed59acab6e994b00621096cfb1c640a7509295987388fbaf65", size = 37304, upload-time = "2026-05-24T13:55:55.406Z" },
]
[[package]]
@@ -1826,7 +1826,7 @@ wheels = [
[[package]]
name = "sphinxcontrib-bibtex"
-version = "2.6.5"
+version = "2.7.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "docutils" },
@@ -1834,9 +1834,9 @@ dependencies = [
{ name = "pybtex-docutils" },
{ name = "sphinx" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/de/83/1488c9879f2fa3c2cbd6f666c7a3a42a1fa9e08462bec73281fa6c092cba/sphinxcontrib_bibtex-2.6.5.tar.gz", hash = "sha256:9b3224dd6fece9268ebd8c905dc0a83ff2f6c54148a9235fe70e9d1e9ff149c0", size = 118462, upload-time = "2025-06-27T10:40:14.061Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/15/6a/8e0b2c2420286389e7fed78ff361ec30e2f1d58c8560af8d64df5e7b61e0/sphinxcontrib_bibtex-2.7.0.tar.gz", hash = "sha256:fee700f7aae29bb8f654c62913f00d34ac44fc0b8ca0fa67ac922ff4453addee", size = 120669, upload-time = "2026-05-06T09:29:24.935Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/9e/a0/3a612da94f828f26cabb247817393e79472c32b12c49222bf85fb6d7b6c8/sphinxcontrib_bibtex-2.6.5-py3-none-any.whl", hash = "sha256:455ea4509642ea0b28ede3721550273626f85af65af01f161bfd8e19dc1edd7d", size = 40410, upload-time = "2025-06-27T10:40:12.274Z" },
+ { url = "https://files.pythonhosted.org/packages/52/c0/d28e62407f4733bbe0169287bc012f0ac3b4a2021066b285570654119c8b/sphinxcontrib_bibtex-2.7.0-py3-none-any.whl", hash = "sha256:28cf0ec7a957d1c7548d5749317ed472ce877e1b629f430f88e3789aa51f87b1", size = 40287, upload-time = "2026-05-06T09:29:23.253Z" },
]
[[package]]
@@ -1898,42 +1898,36 @@ wheels = [
[[package]]
name = "sqlalchemy"
-version = "2.0.49"
+version = "2.0.50"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "greenlet", marker = "platform_machine == 'AMD64' or platform_machine == 'WIN32' or platform_machine == 'aarch64' or platform_machine == 'amd64' or platform_machine == 'ppc64le' or platform_machine == 'win32' or platform_machine == 'x86_64'" },
{ name = "typing-extensions" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/09/45/461788f35e0364a8da7bda51a1fe1b09762d0c32f12f63727998d85a873b/sqlalchemy-2.0.49.tar.gz", hash = "sha256:d15950a57a210e36dd4cec1aac22787e2a4d57ba9318233e2ef8b2daf9ff2d5f", size = 9898221, upload-time = "2026-04-03T16:38:11.704Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/60/b5/e3617cc67420f8f403efebd7b043128f94775e57e5b84e7255203390ceae/sqlalchemy-2.0.49-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c5070135e1b7409c4161133aa525419b0062088ed77c92b1da95366ec5cbebbe", size = 2159126, upload-time = "2026-04-03T16:50:13.242Z" },
- { url = "https://files.pythonhosted.org/packages/20/9b/91ca80403b17cd389622a642699e5f6564096b698e7cdcbcbb6409898bc4/sqlalchemy-2.0.49-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9ac7a3e245fd0310fd31495eb61af772e637bdf7d88ee81e7f10a3f271bff014", size = 3315509, upload-time = "2026-04-03T16:54:49.332Z" },
- { url = "https://files.pythonhosted.org/packages/b1/61/0722511d98c54de95acb327824cb759e8653789af2b1944ab1cc69d32565/sqlalchemy-2.0.49-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4d4e5a0ceba319942fa6b585cf82539288a61e314ef006c1209f734551ab9536", size = 3315014, upload-time = "2026-04-03T16:56:56.376Z" },
- { url = "https://files.pythonhosted.org/packages/46/55/d514a653ffeb4cebf4b54c47bec32ee28ad89d39fafba16eeed1d81dccd5/sqlalchemy-2.0.49-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:3ddcb27fb39171de36e207600116ac9dfd4ae46f86c82a9bf3934043e80ebb88", size = 3267388, upload-time = "2026-04-03T16:54:51.272Z" },
- { url = "https://files.pythonhosted.org/packages/2f/16/0dcc56cb6d3335c1671a2258f5d2cb8267c9a2260e27fde53cbfb1b3540a/sqlalchemy-2.0.49-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:32fe6a41ad97302db2931f05bb91abbcc65b5ce4c675cd44b972428dd2947700", size = 3289602, upload-time = "2026-04-03T16:56:57.63Z" },
- { url = "https://files.pythonhosted.org/packages/51/6c/f8ab6fb04470a133cd80608db40aa292e6bae5f162c3a3d4ab19544a67af/sqlalchemy-2.0.49-cp311-cp311-win32.whl", hash = "sha256:46d51518d53edfbe0563662c96954dc8fcace9832332b914375f45a99b77cc9a", size = 2119044, upload-time = "2026-04-03T17:00:53.455Z" },
- { url = "https://files.pythonhosted.org/packages/c4/59/55a6d627d04b6ebb290693681d7683c7da001eddf90b60cfcc41ee907978/sqlalchemy-2.0.49-cp311-cp311-win_amd64.whl", hash = "sha256:951d4a210744813be63019f3df343bf233b7432aadf0db54c75802247330d3af", size = 2143642, upload-time = "2026-04-03T17:00:54.769Z" },
- { url = "https://files.pythonhosted.org/packages/49/b3/2de412451330756aaaa72d27131db6dde23995efe62c941184e15242a5fa/sqlalchemy-2.0.49-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4bbccb45260e4ff1b7db0be80a9025bb1e6698bdb808b83fff0000f7a90b2c0b", size = 2157681, upload-time = "2026-04-03T16:53:07.132Z" },
- { url = "https://files.pythonhosted.org/packages/50/84/b2a56e2105bd11ebf9f0b93abddd748e1a78d592819099359aa98134a8bf/sqlalchemy-2.0.49-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb37f15714ec2652d574f021d479e78cd4eb9d04396dca36568fdfffb3487982", size = 3338976, upload-time = "2026-04-03T17:07:40Z" },
- { url = "https://files.pythonhosted.org/packages/2c/fa/65fcae2ed62f84ab72cf89536c7c3217a156e71a2c111b1305ab6f0690e2/sqlalchemy-2.0.49-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3bb9ec6436a820a4c006aad1ac351f12de2f2dbdaad171692ee457a02429b672", size = 3351937, upload-time = "2026-04-03T17:12:23.374Z" },
- { url = "https://files.pythonhosted.org/packages/f8/2f/6fd118563572a7fe475925742eb6b3443b2250e346a0cc27d8d408e73773/sqlalchemy-2.0.49-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8d6efc136f44a7e8bc8088507eaabbb8c2b55b3dbb63fe102c690da0ddebe55e", size = 3281646, upload-time = "2026-04-03T17:07:41.949Z" },
- { url = "https://files.pythonhosted.org/packages/c5/d7/410f4a007c65275b9cf82354adb4bb8ba587b176d0a6ee99caa16fe638f8/sqlalchemy-2.0.49-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e06e617e3d4fd9e51d385dfe45b077a41e9d1b033a7702551e3278ac597dc750", size = 3316695, upload-time = "2026-04-03T17:12:25.642Z" },
- { url = "https://files.pythonhosted.org/packages/d9/95/81f594aa60ded13273a844539041ccf1e66c5a7bed0a8e27810a3b52d522/sqlalchemy-2.0.49-cp312-cp312-win32.whl", hash = "sha256:83101a6930332b87653886c01d1ee7e294b1fe46a07dd9a2d2b4f91bcc88eec0", size = 2117483, upload-time = "2026-04-03T17:05:40.896Z" },
- { url = "https://files.pythonhosted.org/packages/47/9e/fd90114059175cac64e4fafa9bf3ac20584384d66de40793ae2e2f26f3bb/sqlalchemy-2.0.49-cp312-cp312-win_amd64.whl", hash = "sha256:618a308215b6cececb6240b9abde545e3acdabac7ae3e1d4e666896bf5ba44b4", size = 2144494, upload-time = "2026-04-03T17:05:42.282Z" },
- { url = "https://files.pythonhosted.org/packages/ae/81/81755f50eb2478eaf2049728491d4ea4f416c1eb013338682173259efa09/sqlalchemy-2.0.49-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:df2d441bacf97022e81ad047e1597552eb3f83ca8a8f1a1fdd43cd7fe3898120", size = 2154547, upload-time = "2026-04-03T16:53:08.64Z" },
- { url = "https://files.pythonhosted.org/packages/a2/bc/3494270da80811d08bcfa247404292428c4fe16294932bce5593f215cad9/sqlalchemy-2.0.49-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8e20e511dc15265fb433571391ba313e10dd8ea7e509d51686a51313b4ac01a2", size = 3280782, upload-time = "2026-04-03T17:07:43.508Z" },
- { url = "https://files.pythonhosted.org/packages/cd/f5/038741f5e747a5f6ea3e72487211579d8cbea5eb9827a9cbd61d0108c4bd/sqlalchemy-2.0.49-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:47604cb2159f8bbd5a1ab48a714557156320f20871ee64d550d8bf2683d980d3", size = 3297156, upload-time = "2026-04-03T17:12:27.697Z" },
- { url = "https://files.pythonhosted.org/packages/88/50/a6af0ff9dc954b43a65ca9b5367334e45d99684c90a3d3413fc19a02d43c/sqlalchemy-2.0.49-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:22d8798819f86720bc646ab015baff5ea4c971d68121cb36e2ebc2ee43ead2b7", size = 3228832, upload-time = "2026-04-03T17:07:45.38Z" },
- { url = "https://files.pythonhosted.org/packages/bc/d1/5f6bdad8de0bf546fc74370939621396515e0cdb9067402d6ba1b8afbe9a/sqlalchemy-2.0.49-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9b1c058c171b739e7c330760044803099c7fff11511e3ab3573e5327116a9c33", size = 3267000, upload-time = "2026-04-03T17:12:29.657Z" },
- { url = "https://files.pythonhosted.org/packages/f7/30/ad62227b4a9819a5e1c6abff77c0f614fa7c9326e5a3bdbee90f7139382b/sqlalchemy-2.0.49-cp313-cp313-win32.whl", hash = "sha256:a143af2ea6672f2af3f44ed8f9cd020e9cc34c56f0e8db12019d5d9ecf41cb3b", size = 2115641, upload-time = "2026-04-03T17:05:43.989Z" },
- { url = "https://files.pythonhosted.org/packages/17/3a/7215b1b7d6d49dc9a87211be44562077f5f04f9bb5a59552c1c8e2d98173/sqlalchemy-2.0.49-cp313-cp313-win_amd64.whl", hash = "sha256:12b04d1db2663b421fe072d638a138460a51d5a862403295671c4f3987fb9148", size = 2141498, upload-time = "2026-04-03T17:05:45.7Z" },
- { url = "https://files.pythonhosted.org/packages/28/4b/52a0cb2687a9cd1648252bb257be5a1ba2c2ded20ba695c65756a55a15a4/sqlalchemy-2.0.49-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:24bd94bb301ec672d8f0623eba9226cc90d775d25a0c92b5f8e4965d7f3a1518", size = 3560807, upload-time = "2026-04-03T16:58:31.666Z" },
- { url = "https://files.pythonhosted.org/packages/8c/d8/fda95459204877eed0458550d6c7c64c98cc50c2d8d618026737de9ed41a/sqlalchemy-2.0.49-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a51d3db74ba489266ef55c7a4534eb0b8db9a326553df481c11e5d7660c8364d", size = 3527481, upload-time = "2026-04-03T17:06:00.155Z" },
- { url = "https://files.pythonhosted.org/packages/ff/0a/2aac8b78ac6487240cf7afef8f203ca783e8796002dc0cf65c4ee99ff8bb/sqlalchemy-2.0.49-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:55250fe61d6ebfd6934a272ee16ef1244e0f16b7af6cd18ab5b1fc9f08631db0", size = 3468565, upload-time = "2026-04-03T16:58:33.414Z" },
- { url = "https://files.pythonhosted.org/packages/a5/3d/ce71cfa82c50a373fd2148b3c870be05027155ce791dc9a5dcf439790b8b/sqlalchemy-2.0.49-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:46796877b47034b559a593d7e4b549aba151dae73f9e78212a3478161c12ab08", size = 3477769, upload-time = "2026-04-03T17:06:02.787Z" },
- { url = "https://files.pythonhosted.org/packages/d5/e8/0a9f5c1f7c6f9ca480319bf57c2d7423f08d31445974167a27d14483c948/sqlalchemy-2.0.49-cp313-cp313t-win32.whl", hash = "sha256:9c4969a86e41454f2858256c39bdfb966a20961e9b58bf8749b65abf447e9a8d", size = 2143319, upload-time = "2026-04-03T17:02:04.328Z" },
- { url = "https://files.pythonhosted.org/packages/0e/51/fb5240729fbec73006e137c4f7a7918ffd583ab08921e6ff81a999d6517a/sqlalchemy-2.0.49-cp313-cp313t-win_amd64.whl", hash = "sha256:b9870d15ef00e4d0559ae10ee5bc71b654d1f20076dbe8bc7ed19b4c0625ceba", size = 2175104, upload-time = "2026-04-03T17:02:05.989Z" },
- { url = "https://files.pythonhosted.org/packages/e5/30/8519fdde58a7bdf155b714359791ad1dc018b47d60269d5d160d311fdc36/sqlalchemy-2.0.49-py3-none-any.whl", hash = "sha256:ec44cfa7ef1a728e88ad41674de50f6db8cfdb3e2af84af86e0041aaf02d43d0", size = 1942158, upload-time = "2026-04-03T16:53:44.135Z" },
+sdist = { url = "https://files.pythonhosted.org/packages/57/da/6fbf010c8ebb347679d0d100b22fe9ba5e13fd04046c5df7280d2f0bf706/sqlalchemy-2.0.50.tar.gz", hash = "sha256:af5607d11ef90fd6a5c0549fe0045dce1663d427426bcfb506dcb5346a85a3b9", size = 9907424, upload-time = "2026-05-24T19:20:04.018Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b6/5d/3172686af1770e4de2805f919a51441085f589ddadf3dd76ec582f84f497/sqlalchemy-2.0.50-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1aa6e403663a9c43c8fef7ce4bdb4cf48bcd8d352e91deda2a99f963270bd508", size = 2161366, upload-time = "2026-05-24T20:00:02.061Z" },
+ { url = "https://files.pythonhosted.org/packages/0f/90/e98dedea3c3e663a17afcd003a34ba45efdac2cea3b6f2e4585e2b1e2537/sqlalchemy-2.0.50-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:51b637a84f9fa35ae1f9017e786cb142974a25305085e1b378b3647a67f65ad3", size = 3318926, upload-time = "2026-05-24T20:07:42.369Z" },
+ { url = "https://files.pythonhosted.org/packages/3b/4f/501308c2babb62c11753ecb4ee88ba9eef019419a4d6cbf7cb13e2bad353/sqlalchemy-2.0.50-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2dab927761d9108550f0cf8e66ff21af56f907a0ce0a689793db615e2b55f62c", size = 3319199, upload-time = "2026-05-24T20:14:28.551Z" },
+ { url = "https://files.pythonhosted.org/packages/ac/39/d88996c5e03ed6248c3a788d20f0b8d8b376b9f8a495e4bab9df7c72d2f8/sqlalchemy-2.0.50-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:545eae198d37bcf837a10ede3684e2af32458d6f35c597c35c2de7502dc38fc4", size = 3270301, upload-time = "2026-05-24T20:07:44.917Z" },
+ { url = "https://files.pythonhosted.org/packages/42/1b/1ae0e65161b51cc43e5ca75430ef79d80e23b5042d645586c2c342c3b92e/sqlalchemy-2.0.50-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0fec460e18cdbb4c7773531122ce9a27e96c6ca17af3933941d94da475ad2c86", size = 3293465, upload-time = "2026-05-24T20:14:30.501Z" },
+ { url = "https://files.pythonhosted.org/packages/83/29/17c0003f2c0dfa6d1b97672475707e3ec5980db09defd7fa20beb6833bbd/sqlalchemy-2.0.50-cp311-cp311-win32.whl", hash = "sha256:e6e814658818fd165e749e3d8490ef16cc7f379a118c37ada8b0589ffbaaac22", size = 2120694, upload-time = "2026-05-24T20:08:09.237Z" },
+ { url = "https://files.pythonhosted.org/packages/c9/18/280d00654cc19d1fccf236fa5070f6dd04b84dde6f1b2e637bde0ff340a7/sqlalchemy-2.0.50-cp311-cp311-win_amd64.whl", hash = "sha256:1c5f858fe79c9f5d8fda065c06186356acb7f8df3cd52dbd5ee3f200e4b144f5", size = 2145315, upload-time = "2026-05-24T20:08:10.952Z" },
+ { url = "https://files.pythonhosted.org/packages/be/b0/a9d19b43f38f878b1278bca5b00b909f7540d41494396dd2561f9ad0956d/sqlalchemy-2.0.50-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:23ae23d8b9d344d30d0a92f06d45825024a5790f1c1dd4cf452636a50d3e58cb", size = 2159807, upload-time = "2026-05-24T19:27:53.086Z" },
+ { url = "https://files.pythonhosted.org/packages/f5/2c/191dd58a248fd2cfd4780fa82c375c505e4ad98c8b522fa69ec492130d77/sqlalchemy-2.0.50-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:47b71b933e7b4ebad407c8fdfd70d2c4f08b78b3238bb30eebdd6eb32ca51b89", size = 3343358, upload-time = "2026-05-24T20:09:29.279Z" },
+ { url = "https://files.pythonhosted.org/packages/8a/2b/514fce8a7df81cf5bad7ff7865de7ac0c5776a38cc043475c4703eb7fe8b/sqlalchemy-2.0.50-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:110fdac56ace278949f00de805edacbd6141e382d992f9ba28238b3a0827a600", size = 3357994, upload-time = "2026-05-24T20:17:13.495Z" },
+ { url = "https://files.pythonhosted.org/packages/35/a6/a0e283f5494f92b0d77e319ff77e437b1ffe4a051ba67c81d53234825475/sqlalchemy-2.0.50-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:0f5e4ac70e9e757f6b3e87c0491ff034442ecd8dfd36d041a50564c322dafc0e", size = 3289399, upload-time = "2026-05-24T20:09:32.239Z" },
+ { url = "https://files.pythonhosted.org/packages/b7/96/1b07325ba71752d6a028b77d07bed1483ad545f794e8b1dc89b3ba3b3c68/sqlalchemy-2.0.50-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:724f3dcbe53dd0151e3cb5e7ec4ba4c620bede579caacd16275dc35ce06e8615", size = 3321216, upload-time = "2026-05-24T20:17:15.581Z" },
+ { url = "https://files.pythonhosted.org/packages/ed/8e/bad6ed253e8a99edfc99af02f7173ec48a1d3ed1b9b35a1b8bc1700900cc/sqlalchemy-2.0.50-cp312-cp312-win32.whl", hash = "sha256:1208050441471d003b7c8cb4054fb084f185cf35ac3f0ea270803865bca9939a", size = 2119194, upload-time = "2026-05-24T19:50:04.943Z" },
+ { url = "https://files.pythonhosted.org/packages/b6/2d/314a6690dda4b9cfc571eab1a63cf6fe6e1470aa3759ccda6aa016ee0f5a/sqlalchemy-2.0.50-cp312-cp312-win_amd64.whl", hash = "sha256:9d1af51558029a156a70986b7df88f042b3d158d7c8d8fb5072912d4b32d89c7", size = 2146186, upload-time = "2026-05-24T19:50:06.74Z" },
+ { url = "https://files.pythonhosted.org/packages/0b/c4/c42356b527296e9862f67990efce31ef78b4cf69cd3f80873a528a060320/sqlalchemy-2.0.50-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:06a9210bdc5f4298cff0781087e2ff45683922252dacc452846373a58761f093", size = 2156697, upload-time = "2026-05-24T19:27:54.764Z" },
+ { url = "https://files.pythonhosted.org/packages/60/a1/b1a70e3c4365ac7fe9e347f3710f19b562c866fb96d45e3c891588789a7b/sqlalchemy-2.0.50-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b53784972ade4f8174b9aa661f31a06f8a936d2cfdd602913ff3c6dd40ae873", size = 3284260, upload-time = "2026-05-24T20:09:34.195Z" },
+ { url = "https://files.pythonhosted.org/packages/3f/4a/f3ac3caa19f263d57b0a47f8c91bbf56583dc2d3fc63acfbf644abb24fe0/sqlalchemy-2.0.50-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:31648fa14460537e768a7303b078e4344d208e0d23e06867c1f376a227ed82db", size = 3302280, upload-time = "2026-05-24T20:17:17.825Z" },
+ { url = "https://files.pythonhosted.org/packages/66/55/ccada3e3d62254587819749a0bc69f41173eb48a6e385d10e66d32a9c88e/sqlalchemy-2.0.50-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:03f4323c980ad0e918cc9e5369b015f759f4e534db5bbaf4dc36832c10d05064", size = 3231580, upload-time = "2026-05-24T20:09:36.406Z" },
+ { url = "https://files.pythonhosted.org/packages/05/f6/6809349130a2de0e109e7f00fd7d431da9565b9b2868b32ee684754f672b/sqlalchemy-2.0.50-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2b9dcc43afef8ac157cd92fce96985d6b8b0cfbd3df4d666f66b4d55a75d202f", size = 3269375, upload-time = "2026-05-24T20:17:20.34Z" },
+ { url = "https://files.pythonhosted.org/packages/48/84/278a811ef4e07be9c89dc5cdd7be833268509a66a68c4897cf585e67428f/sqlalchemy-2.0.50-cp313-cp313-win32.whl", hash = "sha256:60922d6599065ddca2c6f376b9aa2f41a6b85a271725e0909490bbc50b1998a5", size = 2117229, upload-time = "2026-05-24T19:50:08.215Z" },
+ { url = "https://files.pythonhosted.org/packages/f6/1c/067cc6187ed32d2ec222fe6d2643acc1659a6d0659f8a7cbc5ad3ae83280/sqlalchemy-2.0.50-cp313-cp313-win_amd64.whl", hash = "sha256:287086e67275a212c4582d166a6fb03a65ccc5551d80866270ce0dd9f34eccd3", size = 2143126, upload-time = "2026-05-24T19:50:09.691Z" },
+ { url = "https://files.pythonhosted.org/packages/d0/10/f7220e9b784d295d241c86ed99aeb537f92afcd469a64861f2717e9bb077/sqlalchemy-2.0.50-py3-none-any.whl", hash = "sha256:92064363517a3ff8212b5a93b8c62876579d8dfd1ca5b561335f30152d884fa9", size = 1943861, upload-time = "2026-05-24T19:59:01.119Z" },
]
[[package]]
@@ -1973,28 +1967,28 @@ wheels = [
[[package]]
name = "tornado"
-version = "6.5.5"
+version = "6.5.6"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/f8/f1/3173dfa4a18db4a9b03e5d55325559dab51ee653763bb8745a75af491286/tornado-6.5.5.tar.gz", hash = "sha256:192b8f3ea91bd7f1f50c06955416ed76c6b72f96779b962f07f911b91e8d30e9", size = 516006, upload-time = "2026-03-10T21:31:02.067Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/50/57/6d7303a77ae439d9189108f76c0c4fd89ee5e2cc8387bffb55232565c4ed/tornado-6.5.6.tar.gz", hash = "sha256:9a365179fe8ff6b8766f602c0f67c185d778193e9bdd828b19f0b6ed7764177d", size = 518139, upload-time = "2026-05-27T15:35:54.646Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/59/8c/77f5097695f4dd8255ecbd08b2a1ed8ba8b953d337804dd7080f199e12bf/tornado-6.5.5-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:487dc9cc380e29f58c7ab88f9e27cdeef04b2140862e5076a66fb6bb68bb1bfa", size = 445983, upload-time = "2026-03-10T21:30:44.28Z" },
- { url = "https://files.pythonhosted.org/packages/ab/5e/7625b76cd10f98f1516c36ce0346de62061156352353ef2da44e5c21523c/tornado-6.5.5-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:65a7f1d46d4bb41df1ac99f5fcb685fb25c7e61613742d5108b010975a9a6521", size = 444246, upload-time = "2026-03-10T21:30:46.571Z" },
- { url = "https://files.pythonhosted.org/packages/b2/04/7b5705d5b3c0fab088f434f9c83edac1573830ca49ccf29fb83bf7178eec/tornado-6.5.5-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e74c92e8e65086b338fd56333fb9a68b9f6f2fe7ad532645a290a464bcf46be5", size = 447229, upload-time = "2026-03-10T21:30:48.273Z" },
- { url = "https://files.pythonhosted.org/packages/34/01/74e034a30ef59afb4097ef8659515e96a39d910b712a89af76f5e4e1f93c/tornado-6.5.5-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:435319e9e340276428bbdb4e7fa732c2d399386d1de5686cb331ec8eee754f07", size = 448192, upload-time = "2026-03-10T21:30:51.22Z" },
- { url = "https://files.pythonhosted.org/packages/be/00/fe9e02c5a96429fce1a1d15a517f5d8444f9c412e0bb9eadfbe3b0fc55bf/tornado-6.5.5-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3f54aa540bdbfee7b9eb268ead60e7d199de5021facd276819c193c0fb28ea4e", size = 448039, upload-time = "2026-03-10T21:30:53.52Z" },
- { url = "https://files.pythonhosted.org/packages/82/9e/656ee4cec0398b1d18d0f1eb6372c41c6b889722641d84948351ae19556d/tornado-6.5.5-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:36abed1754faeb80fbd6e64db2758091e1320f6bba74a4cf8c09cd18ccce8aca", size = 447445, upload-time = "2026-03-10T21:30:55.541Z" },
- { url = "https://files.pythonhosted.org/packages/5a/76/4921c00511f88af86a33de770d64141170f1cfd9c00311aea689949e274e/tornado-6.5.5-cp39-abi3-win32.whl", hash = "sha256:dd3eafaaeec1c7f2f8fdcd5f964e8907ad788fe8a5a32c4426fbbdda621223b7", size = 448582, upload-time = "2026-03-10T21:30:57.142Z" },
- { url = "https://files.pythonhosted.org/packages/2c/23/f6c6112a04d28eed765e374435fb1a9198f73e1ec4b4024184f21faeb1ad/tornado-6.5.5-cp39-abi3-win_amd64.whl", hash = "sha256:6443a794ba961a9f619b1ae926a2e900ac20c34483eea67be4ed8f1e58d3ef7b", size = 448990, upload-time = "2026-03-10T21:30:58.857Z" },
- { url = "https://files.pythonhosted.org/packages/b7/c8/876602cbc96469911f0939f703453c1157b0c826ecb05bdd32e023397d4e/tornado-6.5.5-cp39-abi3-win_arm64.whl", hash = "sha256:2c9a876e094109333f888539ddb2de4361743e5d21eece20688e3e351e4990a6", size = 448016, upload-time = "2026-03-10T21:31:00.43Z" },
+ { url = "https://files.pythonhosted.org/packages/1b/0d/b4f481e18c5a51864e6d12b9a05ecf72919696680b747c958c3fc1f4fbae/tornado-6.5.6-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:65fcfaafb079435c2c19dc9e07c0f1cf0fa9051759ed0a7d0a3ba7ea7f64919c", size = 447737, upload-time = "2026-05-27T15:35:38.122Z" },
+ { url = "https://files.pythonhosted.org/packages/9e/9c/5430c39fcab1144d35860f457b15e9c08b4bc7ac86764354204e983d6183/tornado-6.5.6-cp39-abi3-macosx_10_9_x86_64.whl", hash = "sha256:38bc01b4acacded2de63ae78023548e41ebe6fbed3ec05a796d7ae3ad893887e", size = 445899, upload-time = "2026-05-27T15:35:40.519Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/79/fa7e14a2f939c807a8d30619b4eb604eab219601b78792516ebe22d40cf9/tornado-6.5.6-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b942e6a137fda31ff54bf8e6e2c8d1c37f1f50583f3ed53fb840b53b9601d104", size = 448964, upload-time = "2026-05-27T15:35:42.106Z" },
+ { url = "https://files.pythonhosted.org/packages/a7/71/bd67d5f5199f937dafe03a49a37989f60f600ff6fef34c79412a829d97bd/tornado-6.5.6-cp39-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8666946e70171b8c3f1fc9b7876fac492e84822c4c7f3746f4e8f8bc9ac92a79", size = 449935, upload-time = "2026-05-27T15:35:43.906Z" },
+ { url = "https://files.pythonhosted.org/packages/cc/a4/c24388c9cf5b3c3a513b56a158af9f23092c9a2810d789e294310797df21/tornado-6.5.6-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:1c34cfab7ad6d104f052f55de06d39bbafc5885cfeb4da688803308dbcfa90b7", size = 449767, upload-time = "2026-05-27T15:35:45.793Z" },
+ { url = "https://files.pythonhosted.org/packages/a5/eb/6a07ad550c3f7b37244bd0becdf293ec3d3e961783d8b720a97df50de1b2/tornado-6.5.6-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:385f35e4e22fb52551dfcda4cdc8c30c61c2c001aef5ddad99cdfe116952efd3", size = 449174, upload-time = "2026-05-27T15:35:47.485Z" },
+ { url = "https://files.pythonhosted.org/packages/bb/84/3469e098dccdb6763130e06aacd786bb4363fca7b590a55c101ddf34ed30/tornado-6.5.6-cp39-abi3-win32.whl", hash = "sha256:db475f1b67b2809b10bb16264829087724ca8d24fe4ed47f7b8675cae453ef86", size = 450230, upload-time = "2026-05-27T15:35:49.322Z" },
+ { url = "https://files.pythonhosted.org/packages/d2/3c/273a04e0b9dd9016f1685cca0c1c8795a71ac88a34a8c889a0b443483226/tornado-6.5.6-cp39-abi3-win_amd64.whl", hash = "sha256:6739bf1e8eb09230f1280ddbd3236f0309db70f2c551a8dbc40f62babdf82f79", size = 450667, upload-time = "2026-05-27T15:35:51.194Z" },
+ { url = "https://files.pythonhosted.org/packages/02/98/0cffe22a224f60c5fb1e3aa0b76f9da2e1ca78b0e9545e3d077c68ce60a7/tornado-6.5.6-cp39-abi3-win_arm64.whl", hash = "sha256:2543597b24a695d72338a9a77818362d72387c03ae173f1f169eadc5c91466ac", size = 449690, upload-time = "2026-05-27T15:35:52.902Z" },
]
[[package]]
name = "traitlets"
-version = "5.14.3"
+version = "5.15.1"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621, upload-time = "2024-04-19T11:11:49.746Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/57/a9/a2584b8313b89f94869ddb3c4074617a691de1812a614d2d50e32ca5a7a6/traitlets-5.15.1.tar.gz", hash = "sha256:7b1c07854fe25acb39e009bae49f11b79ff6cbb2f27999104e9110e7a6b53722", size = 163344, upload-time = "2026-06-03T12:26:06.181Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload-time = "2024-04-19T11:11:46.763Z" },
+ { url = "https://files.pythonhosted.org/packages/96/8d/1080ee4c231f361b6ce4470d556c8c435b67c7e0753aaa641497ee92f88b/traitlets-5.15.1-py3-none-any.whl", hash = "sha256:770a53705f84b81ac107e83a1b3328ff2dae16094d8fc3cfc004e4b22dfd8e92", size = 85858, upload-time = "2026-06-03T12:26:04.395Z" },
]
[[package]]
@@ -2026,20 +2020,20 @@ wheels = [
[[package]]
name = "urllib3"
-version = "2.6.3"
+version = "2.7.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" },
+ { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" },
]
[[package]]
name = "wcwidth"
-version = "0.6.0"
+version = "0.7.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/35/a2/8e3becb46433538a38726c948d3399905a4c7cabd0df578ede5dc51f0ec2/wcwidth-0.6.0.tar.gz", hash = "sha256:cdc4e4262d6ef9a1a57e018384cbeb1208d8abbc64176027e2c2455c81313159", size = 159684, upload-time = "2026-02-06T19:19:40.919Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/2c/ee/afaf0f85a9a18fe47a67f1e4422ed6cf1fe642f0ae0a2f81166231303c52/wcwidth-0.7.0.tar.gz", hash = "sha256:90e3a7ea092341c44b99562e75d09e4d5160fe7a3974c6fb842a101a95e7eed0", size = 182132, upload-time = "2026-05-02T16:04:12.653Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl", hash = "sha256:1a3a1e510b553315f8e146c54764f4fb6264ffad731b3d78088cdb1478ffbdad", size = 94189, upload-time = "2026-02-06T19:19:39.646Z" },
+ { url = "https://files.pythonhosted.org/packages/41/52/e465037f5375f43533d1a80b6923955201596a99142ed524d77b571a1418/wcwidth-0.7.0-py3-none-any.whl", hash = "sha256:5d69154c429a82910e241c738cd0e2976fac8a2dd47a1a805f4afed1c0f136f2", size = 110825, upload-time = "2026-05-02T16:04:11.033Z" },
]
[[package]]
@@ -2065,9 +2059,9 @@ wheels = [
[[package]]
name = "zipp"
-version = "3.23.1"
+version = "4.1.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/30/21/093488dfc7cc8964ded15ab726fad40f25fd3d788fd741cc1c5a17d78ee8/zipp-3.23.1.tar.gz", hash = "sha256:32120e378d32cd9714ad503c1d024619063ec28aad2248dc6672ad13edfa5110", size = 25965, upload-time = "2026-04-13T23:21:46.6Z" }
+sdist = { url = "https://files.pythonhosted.org/packages/b9/d8/eab98a517c14134c0b2eb4e2387bc5f457334293ec5d2dd3857ec2966802/zipp-4.1.0.tar.gz", hash = "sha256:4cb57381f544315db7688e976e922a2b18cdb513d21cc194eb42232ba2a3e602", size = 26214, upload-time = "2026-05-18T20:08:57.967Z" }
wheels = [
- { url = "https://files.pythonhosted.org/packages/08/8a/0861bec20485572fbddf3dfba2910e38fe249796cb73ecdeb74e07eeb8d3/zipp-3.23.1-py3-none-any.whl", hash = "sha256:0b3596c50a5c700c9cb40ba8d86d9f2cc4807e9bedb06bcdf7fac85633e444dc", size = 10378, upload-time = "2026-04-13T23:21:45.386Z" },
+ { url = "https://files.pythonhosted.org/packages/3a/13/547360d81e6d88d58492968ffda9f9542854f11310ee556fef14260cc886/zipp-4.1.0-py3-none-any.whl", hash = "sha256:25ad4e16390cd314347dd8f1de67a2ac538ae658ed4ab9db16029c07c188e97f", size = 10238, upload-time = "2026-05-18T20:08:57.045Z" },
]