Skip to content

Commit 517b36a

Browse files
yuyamashirokonn
andauthored
Release JijModeling 1.12.2 (#33)
Release JijModeling 1.12.2 Co-authored-by: Hiromi Ishii <h.ishii@j-ij.com>
1 parent 491fe48 commit 517b36a

File tree

5 files changed

+360
-1
lines changed

5 files changed

+360
-1
lines changed

docs/en/_toc.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ parts:
2626
- file: references/cheat_sheet
2727
- caption: Release Note
2828
chapters:
29+
- file: releases/jijmodeling-1.12.2
2930
- file: releases/jijmodeling-1.12.1
3031
- file: releases/jijmodeling-1.12.0
3132
- file: releases/jijmodeling-1.11.0
Lines changed: 188 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,188 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "markdown",
5+
"metadata": {
6+
"vscode": {
7+
"languageId": "plaintext"
8+
}
9+
},
10+
"source": [
11+
"# JijModeling 1.12.2 Release Notes\n",
12+
"\n",
13+
"## Feature Enhancements"
14+
]
15+
},
16+
{
17+
"cell_type": "markdown",
18+
"metadata": {},
19+
"source": [
20+
"### Error message with source code location\n",
21+
"\n",
22+
"Now the error messages in `Interpreter.eval_*` reports source code location and code fragment when available.\n",
23+
"Python provides detailed error span information only in Python 3.11 and later, it is recommended to use Python >= 3.11 to get useful message.\n",
24+
"\n",
25+
"The following is the example of error message with detailed source code locations, which is available Python 3.11+:"
26+
]
27+
},
28+
{
29+
"cell_type": "code",
30+
"execution_count": 1,
31+
"metadata": {},
32+
"outputs": [
33+
{
34+
"data": {
35+
"text/latex": [
36+
"$$\\begin{array}{cccc}\\text{Problem:} & \\text{shift\\_optimization} & & \\\\& & \\min \\quad \\displaystyle \\sum_{d = 0}^{D - 1} \\sum_{t = 0}^{T - 1} \\sum_{i = 0}^{N - 1} x_{d, t, i} & \\\\\\text{{s.t.}} & & & \\\\ & \\text{night\\_shift} & \\displaystyle R_{d + 1, i} \\leq x_{d, T - 1, i} & \\forall d \\in \\left\\{0,\\ldots,D - 1\\right\\} \\forall i \\in \\left\\{0,\\ldots,N - 1\\right\\} \\\\\\text{{where}} & & & \\\\& x & 3\\text{-dim binary variable}\\\\\\end{array}$$"
37+
],
38+
"text/plain": [
39+
"<jijmodeling.Problem at 0x14aa99600>"
40+
]
41+
},
42+
"execution_count": 1,
43+
"metadata": {},
44+
"output_type": "execute_result"
45+
}
46+
],
47+
"source": [
48+
"import jijmodeling as jm\n",
49+
"\n",
50+
"D = jm.Placeholder(\"D\", dtype=jm.DataType.INTEGER)\n",
51+
"T = jm.Placeholder(\"T\", dtype=jm.DataType.INTEGER)\n",
52+
"N = jm.Placeholder(\"N\", dtype=jm.DataType.INTEGER)\n",
53+
"H = jm.Placeholder(\"H\", shape=(D, T, N))\n",
54+
"R = jm.Placeholder(\"R\", shape=(D, N))\n",
55+
"\n",
56+
"x = jm.BinaryVar(\"x\", shape=(D, T, N))\n",
57+
"d = jm.Element(\"d\", belong_to=(0, D))\n",
58+
"t = jm.Element(\"t\", belong_to=(0, T))\n",
59+
"i = jm.Element(\"i\", belong_to=(0, N))\n",
60+
"\n",
61+
"problem = jm.Problem(name=\"shift_optimization\")\n",
62+
"problem += jm.Constraint(\"night_shift\", R[d+1, i] <= x[d, T-1, i], forall=[d, i])\n",
63+
"problem += jm.sum([d, t, i], x[d, t, i])\n",
64+
"\n",
65+
"problem"
66+
]
67+
},
68+
{
69+
"cell_type": "code",
70+
"execution_count": 3,
71+
"metadata": {},
72+
"outputs": [
73+
{
74+
"name": "stdout",
75+
"output_type": "stream",
76+
"text": [
77+
"Traceback (most recent last):\n",
78+
" while evaluating Problem `shift_optimization',\n",
79+
" defeind at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_49615/2988517098.py\", line 14, col 11-48\n",
80+
" while evaluating constraint: `night_shift',\n",
81+
" defeind at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_49615/2988517098.py\", line 15, col 12-82\n",
82+
" while evaluating expression `R[d + 1, i] - x[d, T - 1, i]',\n",
83+
" defeind at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_49615/2988517098.py\", line 15, col 41-66\n",
84+
" while evaluating expression `R[d + 1, i]',\n",
85+
" defeind at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_49615/2988517098.py\", line 15, col 41-50\n",
86+
"\n",
87+
"File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_49615/2988517098.py\", line 15, col 41-50:\n",
88+
"\n",
89+
" 15 | problem += jm.Constraint(\"night_shift\", R[d+1, i] <= x[d, T-1, i], forall=[d, i])\n",
90+
" ^^^^^^^^^\n",
91+
"\n",
92+
"IndexError: Index (7, 0) is out of range for shape (7, 5)\n"
93+
]
94+
}
95+
],
96+
"source": [
97+
"num_days = 7\n",
98+
"num_times = 3\n",
99+
"num_people = 5\n",
100+
"\n",
101+
"data = problem.generate_random_dataset(\n",
102+
" options={\n",
103+
" \"D\": {\"value\": num_days},\n",
104+
" \"T\": {\"value\": num_times},\n",
105+
" \n",
106+
" \"N\": {\"value\": num_people},\n",
107+
" }\n",
108+
")\n",
109+
"interp = jm.Interpreter(data)\n",
110+
"\n",
111+
"try:\n",
112+
" interp.eval_problem(problem)\n",
113+
"except Exception as e:\n",
114+
" print(e)"
115+
]
116+
},
117+
{
118+
"cell_type": "markdown",
119+
"metadata": {},
120+
"source": [
121+
"The same code generates the following message with Python <3.11, which contains linewise information only:"
122+
]
123+
},
124+
{
125+
"cell_type": "raw",
126+
"metadata": {
127+
"vscode": {
128+
"languageId": "raw"
129+
}
130+
},
131+
"source": [
132+
"Traceback (most recent last):\n",
133+
" while evaluating Problem `shift_optimization',\n",
134+
" defeind at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_62580/2988517098.py\", line 14, col 1-49\n",
135+
" while evaluating constraint: `night_shift',\n",
136+
" defeind at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_62580/2988517098.py\", line 15, col 1-83\n",
137+
" while evaluating expression `R[d + 1, i] - x[d, T - 1, i]',\n",
138+
" defeind at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_62580/2988517098.py\", line 15, col 1-83\n",
139+
" while evaluating expression `R[d + 1, i]',\n",
140+
" defeind at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_62580/2988517098.py\", line 15, col 1-83\n",
141+
"\n",
142+
"File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_62580/2988517098.py\", line 15, col 1-83:\n",
143+
"\n",
144+
" 15 | problem += jm.Constraint(\"night_shift\", R[d+1, i] <= x[d, T-1, i], forall=[d, i])\n",
145+
" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
146+
"\n",
147+
"(more precise source location is available with Python 3.11 and later)\n",
148+
"\n",
149+
"\n",
150+
"IndexError: Index (7, 0) is out of range for shape (7, 5)"
151+
]
152+
},
153+
{
154+
"cell_type": "markdown",
155+
"metadata": {
156+
"vscode": {
157+
"languageId": "plaintext"
158+
}
159+
},
160+
"source": [
161+
"## Other Changes\n",
162+
"\n",
163+
"- Now JijModeling provides ABI3 wheels and supports (non-free-threaded) Python 3.13!"
164+
]
165+
}
166+
],
167+
"metadata": {
168+
"kernelspec": {
169+
"display_name": ".venv",
170+
"language": "python",
171+
"name": "python3"
172+
},
173+
"language_info": {
174+
"codemirror_mode": {
175+
"name": "ipython",
176+
"version": 3
177+
},
178+
"file_extension": ".py",
179+
"mimetype": "text/x-python",
180+
"name": "python",
181+
"nbconvert_exporter": "python",
182+
"pygments_lexer": "ipython3",
183+
"version": "3.12.8"
184+
}
185+
},
186+
"nbformat": 4,
187+
"nbformat_minor": 2
188+
}

docs/ja/_toc.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ parts:
2626
- file: references/cheat_sheet
2727
- caption: リリースノート
2828
chapters:
29+
- file: releases/jijmodeling-1.12.2
2930
- file: releases/jijmodeling-1.12.1
3031
- file: releases/jijmodeling-1.12.0
3132
- file: releases/jijmodeling-1.11.0
Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
{
2+
"cells": [
3+
{
4+
"cell_type": "markdown",
5+
"metadata": {
6+
"vscode": {
7+
"languageId": "plaintext"
8+
}
9+
},
10+
"source": [
11+
"# JijModeling X.XX.X Release Notes\n",
12+
"\n",
13+
"## 機能強化"
14+
]
15+
},
16+
{
17+
"cell_type": "markdown",
18+
"metadata": {},
19+
"source": [
20+
"### エラーメッセージがコード上の位置が含まれるように\n",
21+
"\n",
22+
"`Interpreter.eval_*` 系の関数の投げる例外が、可能な限りソースコード上の位置の情報も出力するようになりました。\n",
23+
"ソースコードの詳細な位置情報は Python 3.11 以降でのみ利用可能になるため、より有用な情報を得るには Python 3.11 以降の利用を推奨します。\n",
24+
"\n",
25+
"以下は Python 3.11 でのエラーメッセージの例です:"
26+
]
27+
},
28+
{
29+
"cell_type": "code",
30+
"execution_count": null,
31+
"metadata": {},
32+
"outputs": [
33+
{
34+
"data": {
35+
"text/latex": [
36+
"$$\\begin{array}{cccc}\\text{Problem:} & \\text{shift\\_optimization} & & \\\\& & \\min \\quad \\displaystyle \\sum_{d = 0}^{D - 1} \\sum_{t = 0}^{T - 1} \\sum_{i = 0}^{N - 1} x_{d, t, i} & \\\\\\text{{s.t.}} & & & \\\\ & \\text{night\\_shift} & \\displaystyle R_{d + 1, i} \\leq x_{d, T - 1, i} & \\forall d \\in \\left\\{0,\\ldots,D - 1\\right\\} \\forall i \\in \\left\\{0,\\ldots,N - 1\\right\\} \\\\\\text{{where}} & & & \\\\& x & 3\\text{-dim binary variable}\\\\\\end{array}$$"
37+
],
38+
"text/plain": [
39+
"<jijmodeling.Problem at 0x14aa99600>"
40+
]
41+
},
42+
"metadata": {},
43+
"output_type": "display_data"
44+
}
45+
],
46+
"source": [
47+
"import jijmodeling as jm\n",
48+
"\n",
49+
"D = jm.Placeholder(\"D\", dtype=jm.DataType.INTEGER)\n",
50+
"T = jm.Placeholder(\"T\", dtype=jm.DataType.INTEGER)\n",
51+
"N = jm.Placeholder(\"N\", dtype=jm.DataType.INTEGER)\n",
52+
"H = jm.Placeholder(\"H\", shape=(D, T, N))\n",
53+
"R = jm.Placeholder(\"R\", shape=(D, N))\n",
54+
"\n",
55+
"x = jm.BinaryVar(\"x\", shape=(D, T, N))\n",
56+
"d = jm.Element(\"d\", belong_to=(0, D))\n",
57+
"t = jm.Element(\"t\", belong_to=(0, T))\n",
58+
"i = jm.Element(\"i\", belong_to=(0, N))\n",
59+
"\n",
60+
"problem = jm.Problem(name=\"shift_optimization\")\n",
61+
"problem += jm.Constraint(\"night_shift\", R[d+1, i] <= x[d, T-1, i], forall=[d, i])\n",
62+
"problem += jm.sum([d, t, i], x[d, t, i])\n",
63+
"\n",
64+
"problem"
65+
]
66+
},
67+
{
68+
"cell_type": "code",
69+
"execution_count": null,
70+
"metadata": {},
71+
"outputs": [
72+
{
73+
"name": "stdout",
74+
"output_type": "stream",
75+
"text": [
76+
"Traceback (most recent last):\n",
77+
" while evaluating Problem `shift_optimization',\n",
78+
" defeind at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_49615/2988517098.py\", line 14, col 11-48\n",
79+
" while evaluating constraint: `night_shift',\n",
80+
" defeind at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_49615/2988517098.py\", line 15, col 12-82\n",
81+
" while evaluating expression `R[d + 1, i] - x[d, T - 1, i]',\n",
82+
" defeind at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_49615/2988517098.py\", line 15, col 41-66\n",
83+
" while evaluating expression `R[d + 1, i]',\n",
84+
" defeind at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_49615/2988517098.py\", line 15, col 41-50\n",
85+
"\n",
86+
"File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_49615/2988517098.py\", line 15, col 41-50:\n",
87+
"\n",
88+
" 15 | problem += jm.Constraint(\"night_shift\", R[d+1, i] <= x[d, T-1, i], forall=[d, i])\n",
89+
" ^^^^^^^^^\n",
90+
"\n",
91+
"IndexError: Index (7, 0) is out of range for shape (7, 5)\n"
92+
]
93+
}
94+
],
95+
"source": [
96+
"num_days = 7\n",
97+
"num_times = 3\n",
98+
"num_people = 5\n",
99+
"\n",
100+
"data = problem.generate_random_dataset(\n",
101+
" options={\n",
102+
" \"D\": {\"value\": num_days},\n",
103+
" \"T\": {\"value\": num_times},\n",
104+
" \n",
105+
" \"N\": {\"value\": num_people},\n",
106+
" }\n",
107+
")\n",
108+
"interp = jm.Interpreter(data)\n",
109+
"\n",
110+
"try:\n",
111+
" interp.eval_problem(problem)\n",
112+
"except Exception as e:\n",
113+
" print(e)"
114+
]
115+
},
116+
{
117+
"cell_type": "markdown",
118+
"metadata": {},
119+
"source": [
120+
"Python 3.11未満では、以下のように行単位での情報しか出力されません:"
121+
]
122+
},
123+
{
124+
"cell_type": "raw",
125+
"metadata": {},
126+
"source": [
127+
"Traceback (most recent last):\n",
128+
" while evaluating Problem `shift_optimization',\n",
129+
" defeind at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_62580/2988517098.py\", line 14, col 1-49\n",
130+
" while evaluating constraint: `night_shift',\n",
131+
" defeind at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_62580/2988517098.py\", line 15, col 1-83\n",
132+
" while evaluating expression `R[d + 1, i] - x[d, T - 1, i]',\n",
133+
" defeind at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_62580/2988517098.py\", line 15, col 1-83\n",
134+
" while evaluating expression `R[d + 1, i]',\n",
135+
" defeind at File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_62580/2988517098.py\", line 15, col 1-83\n",
136+
"\n",
137+
"File \"/var/folders/mg/mg6st30d18s7pxjjrk6pkxym0000gn/T/ipykernel_62580/2988517098.py\", line 15, col 1-83:\n",
138+
"\n",
139+
" 15 | problem += jm.Constraint(\"night_shift\", R[d+1, i] <= x[d, T-1, i], forall=[d, i])\n",
140+
" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n",
141+
"\n",
142+
"(more precise source location is available with Python 3.11 and later)\n",
143+
"\n",
144+
"\n",
145+
"IndexError: Index (7, 0) is out of range for shape (7, 5)"
146+
]
147+
},
148+
{
149+
"cell_type": "markdown",
150+
"metadata": {
151+
"vscode": {
152+
"languageId": "plaintext"
153+
}
154+
},
155+
"source": [
156+
"## その他の変更\n",
157+
"\n",
158+
"- JijModeling は ABI3 wheel を提供するようになり、(フリースレッド版でない)Python 3.13もサポートするようになりました!"
159+
]
160+
}
161+
],
162+
"metadata": {
163+
"language_info": {
164+
"name": "python"
165+
}
166+
},
167+
"nbformat": 4,
168+
"nbformat_minor": 2
169+
}

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ readme = "README.md"
66
# jijmodeling does not support Python 3.13 yet, and JijModeling-Transpiler 3.12 neither.
77
requires-python = ">=3.9, <3.12"
88
dependencies = [
9-
"jijmodeling == 1.12.1",
9+
"jijmodeling == 1.12.2",
1010
"jijmodeling-transpiler>=0.6.15",
1111
"ommx >= 1.8.2, < 2.0.0",
1212
"ommx-pyscipopt-adapter >= 1.8.2, < 2.0.0",

0 commit comments

Comments
 (0)