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" }, ]