Python-checkins
Threads by month
- ----- 2024 -----
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
April 2019
- 3 participants
- 318 discussions
https://github.com/python/cpython/commit/09415ff0ebbbe97c8cd08ac1f94673d7a4…
commit: 09415ff0ebbbe97c8cd08ac1f94673d7a49c8018
branch: master
author: Inada Naoki <songofacandy(a)gmail.com>
committer: GitHub <noreply(a)github.com>
date: 2019-04-23T20:39:37+09:00
summary:
fix warnings by adding more const (GH-12924)
files:
M Include/grammar.h
M Modules/parsermodule.c
M Parser/acceler.c
M Parser/grammar1.c
M Parser/parser.c
M Parser/parser.h
diff --git a/Include/grammar.h b/Include/grammar.h
index faccae4657ee..4b66b1e9b974 100644
--- a/Include/grammar.h
+++ b/Include/grammar.h
@@ -66,7 +66,7 @@ typedef struct {
} grammar;
/* FUNCTIONS */
-dfa *PyGrammar_FindDFA(grammar *g, int type);
+const dfa *PyGrammar_FindDFA(grammar *g, int type);
const char *PyGrammar_LabelRepr(label *lb);
void PyGrammar_AddAccelerators(grammar *g);
void PyGrammar_RemoveAccelerators(grammar *);
diff --git a/Modules/parsermodule.c b/Modules/parsermodule.c
index a215c7ecacd7..0f681622f288 100644
--- a/Modules/parsermodule.c
+++ b/Modules/parsermodule.c
@@ -644,7 +644,6 @@ validate_node(node *tree)
{
int type = TYPE(tree);
int nch = NCH(tree);
- dfa *nt_dfa;
state *dfa_state;
int pos, arc;
@@ -654,7 +653,7 @@ validate_node(node *tree)
PyErr_Format(parser_error, "Unrecognized node type %d.", TYPE(tree));
return 0;
}
- nt_dfa = &_PyParser_Grammar.g_dfa[type];
+ const dfa *nt_dfa = &_PyParser_Grammar.g_dfa[type];
REQ(tree, nt_dfa->d_type);
/* Run the DFA for this nonterminal. */
diff --git a/Parser/acceler.c b/Parser/acceler.c
index 3a230c19bb9f..e515833e1dda 100644
--- a/Parser/acceler.c
+++ b/Parser/acceler.c
@@ -17,15 +17,14 @@
#include "parser.h"
/* Forward references */
-static void fixdfa(grammar *, dfa *);
+static void fixdfa(grammar *, const dfa *);
static void fixstate(grammar *, state *);
void
PyGrammar_AddAccelerators(grammar *g)
{
- dfa *d;
int i;
- d = g->g_dfa;
+ const dfa *d = g->g_dfa;
for (i = g->g_ndfas; --i >= 0; d++)
fixdfa(g, d);
g->g_accel = 1;
@@ -34,10 +33,9 @@ PyGrammar_AddAccelerators(grammar *g)
void
PyGrammar_RemoveAccelerators(grammar *g)
{
- dfa *d;
int i;
g->g_accel = 0;
- d = g->g_dfa;
+ const dfa *d = g->g_dfa;
for (i = g->g_ndfas; --i >= 0; d++) {
state *s;
int j;
@@ -51,7 +49,7 @@ PyGrammar_RemoveAccelerators(grammar *g)
}
static void
-fixdfa(grammar *g, dfa *d)
+fixdfa(grammar *g, const dfa *d)
{
state *s;
int j;
@@ -63,7 +61,7 @@ fixdfa(grammar *g, dfa *d)
static void
fixstate(grammar *g, state *s)
{
- arc *a;
+ const arc *a;
int k;
int *accel;
int nl = g->g_ll.ll_nlabels;
@@ -78,14 +76,14 @@ fixstate(grammar *g, state *s)
a = s->s_arc;
for (k = s->s_narcs; --k >= 0; a++) {
int lbl = a->a_lbl;
- label *l = &g->g_ll.ll_label[lbl];
+ const label *l = &g->g_ll.ll_label[lbl];
int type = l->lb_type;
if (a->a_arrow >= (1 << 7)) {
printf("XXX too many states!\n");
continue;
}
if (ISNONTERMINAL(type)) {
- dfa *d1 = PyGrammar_FindDFA(g, type);
+ const dfa *d1 = PyGrammar_FindDFA(g, type);
int ibit;
if (type - NT_OFFSET >= (1 << 7)) {
printf("XXX too high nonterminal number!\n");
diff --git a/Parser/grammar1.c b/Parser/grammar1.c
index fec6d9ec0ee2..e0b8fbb8b828 100644
--- a/Parser/grammar1.c
+++ b/Parser/grammar1.c
@@ -7,12 +7,11 @@
/* Return the DFA for the given type */
-dfa *
+const dfa *
PyGrammar_FindDFA(grammar *g, int type)
{
- dfa *d;
/* Massive speed-up */
- d = &g->g_dfa[type - NT_OFFSET];
+ const dfa *d = &g->g_dfa[type - NT_OFFSET];
assert(d->d_type == type);
return d;
}
diff --git a/Parser/parser.c b/Parser/parser.c
index c21b6fdf466d..227b9184f471 100644
--- a/Parser/parser.c
+++ b/Parser/parser.c
@@ -35,7 +35,7 @@ s_reset(stack *s)
#define s_empty(s) ((s)->s_top == &(s)->s_base[MAXSTACK])
static int
-s_push(stack *s, dfa *d, node *parent)
+s_push(stack *s, const dfa *d, node *parent)
{
stackentry *top;
if (s->s_top == s->s_base) {
@@ -119,7 +119,7 @@ shift(stack *s, int type, char *str, int newstate, int lineno, int col_offset,
}
static int
-push(stack *s, int type, dfa *d, int newstate, int lineno, int col_offset,
+push(stack *s, int type, const dfa *d, int newstate, int lineno, int col_offset,
int end_lineno, int end_col_offset)
{
int err;
@@ -144,7 +144,7 @@ classify(parser_state *ps, int type, const char *str)
int n = g->g_ll.ll_nlabels;
if (type == NAME) {
- label *l = g->g_ll.ll_label;
+ const label *l = g->g_ll.ll_label;
int i;
for (i = n; i > 0; i--, l++) {
if (l->lb_type != NAME || l->lb_str == NULL ||
@@ -168,7 +168,7 @@ classify(parser_state *ps, int type, const char *str)
}
{
- label *l = g->g_ll.ll_label;
+ const label *l = g->g_ll.ll_label;
int i;
for (i = n; i > 0; i--, l++) {
if (l->lb_type == type && l->lb_str == NULL) {
@@ -246,7 +246,7 @@ PyParser_AddToken(parser_state *ps, int type, char *str,
/* Loop until the token is shifted or an error occurred */
for (;;) {
/* Fetch the current dfa and state */
- dfa *d = ps->p_stack.s_top->s_dfa;
+ const dfa *d = ps->p_stack.s_top->s_dfa;
state *s = &d->d_state[ps->p_stack.s_top->s_state];
D(printf(" DFA '%s', state %d:",
@@ -260,7 +260,6 @@ PyParser_AddToken(parser_state *ps, int type, char *str,
/* Push non-terminal */
int nt = (x >> 8) + NT_OFFSET;
int arrow = x & ((1<<7)-1);
- dfa *d1;
if (nt == func_body_suite && !(ps->p_flags & PyCF_TYPE_COMMENTS)) {
/* When parsing type comments is not requested,
we can provide better errors about bad indentation
@@ -268,7 +267,7 @@ PyParser_AddToken(parser_state *ps, int type, char *str,
D(printf(" [switch func_body_suite to suite]"));
nt = suite;
}
- d1 = PyGrammar_FindDFA(
+ const dfa *d1 = PyGrammar_FindDFA(
ps->p_grammar, nt);
if ((err = push(&ps->p_stack, nt, d1,
arrow, lineno, col_offset,
diff --git a/Parser/parser.h b/Parser/parser.h
index ebb06c2b1976..b16075e7f29f 100644
--- a/Parser/parser.h
+++ b/Parser/parser.h
@@ -11,7 +11,7 @@ extern "C" {
typedef struct {
int s_state; /* State in current DFA */
- dfa *s_dfa; /* Current DFA */
+ const dfa *s_dfa; /* Current DFA */
struct _node *s_parent; /* Where to add next node */
} stackentry;
1
0
https://github.com/python/cpython/commit/574913479f26b5ff48827861bce68281be…
commit: 574913479f26b5ff48827861bce68281be01d16e
branch: master
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-04-23T12:26:33+02:00
summary:
bpo-36635, bpo-36696: Fix setup.py on AIX (GH-12922)
xlc compiler doesn't support "-D define" flag only "-Ddefine".
files:
M setup.py
diff --git a/setup.py b/setup.py
index 3d6404f89eef..58c16e8ba49d 100644
--- a/setup.py
+++ b/setup.py
@@ -726,12 +726,12 @@ def detect_simple_extensions(self):
self.add(Extension("_heapq", ["_heapqmodule.c"]))
# C-optimized pickle replacement
self.add(Extension("_pickle", ["_pickle.c"],
- extra_compile_args=['-D Py_BUILD_CORE_MODULE']))
+ extra_compile_args=['-DPy_BUILD_CORE_MODULE']))
# atexit
self.add(Extension("atexit", ["atexitmodule.c"]))
# _json speedups
self.add(Extension("_json", ["_json.c"],
- extra_compile_args=['-D Py_BUILD_CORE_MODULE']))
+ extra_compile_args=['-DPy_BUILD_CORE_MODULE']))
# profiler (_lsprof is for cProfile.py)
self.add(Extension('_lsprof', ['_lsprof.c', 'rotatingtree.c']))
@@ -816,7 +816,7 @@ def detect_test_extensions(self):
# Python Internal C API test module
self.add(Extension('_testinternalcapi', ['_testinternalcapi.c'],
- extra_compile_args=['-D Py_BUILD_CORE_MODULE']))
+ extra_compile_args=['-DPy_BUILD_CORE_MODULE']))
# Python PEP-3118 (buffer protocol) test module
self.add(Extension('_testbuffer', ['_testbuffer.c']))
1
0
https://github.com/python/cpython/commit/84b4784f12d4b8aab2b4cc5a4f5b64f45e…
commit: 84b4784f12d4b8aab2b4cc5a4f5b64f45ec3e5d4
branch: master
author: tyomitch <tyomitch(a)gmail.com>
committer: Inada Naoki <songofacandy(a)gmail.com>
date: 2019-04-23T18:29:57+09:00
summary:
use `const` in graminit.c (GH-12713)
files:
M Include/grammar.h
M Parser/pgen/grammar.py
M Python/graminit.c
diff --git a/Include/grammar.h b/Include/grammar.h
index 7a6182bb76d5..faccae4657ee 100644
--- a/Include/grammar.h
+++ b/Include/grammar.h
@@ -13,7 +13,7 @@ extern "C" {
typedef struct {
int lb_type;
- char *lb_str;
+ const char *lb_str;
} label;
#define EMPTY 0 /* Label number 0 is by definition the empty label */
@@ -22,7 +22,7 @@ typedef struct {
typedef struct {
int ll_nlabels;
- label *ll_label;
+ const label *ll_label;
} labellist;
/* An arc from one state to another */
@@ -36,7 +36,7 @@ typedef struct {
typedef struct {
int s_narcs;
- arc *s_arc; /* Array of arcs */
+ const arc *s_arc; /* Array of arcs */
/* Optional accelerators */
int s_lower; /* Lowest label index */
@@ -59,8 +59,8 @@ typedef struct {
typedef struct {
int g_ndfas;
- dfa *g_dfa; /* Array of DFAs */
- labellist g_ll;
+ const dfa *g_dfa; /* Array of DFAs */
+ const labellist g_ll;
int g_start; /* Start symbol of the grammar */
int g_accel; /* Set if accelerators present */
} grammar;
diff --git a/Parser/pgen/grammar.py b/Parser/pgen/grammar.py
index 1ab9434fa887..5cd652426b47 100644
--- a/Parser/pgen/grammar.py
+++ b/Parser/pgen/grammar.py
@@ -76,7 +76,7 @@ def produce_graminit_c(self, writer):
def print_labels(self, writer):
writer(
- "static label labels[{n_labels}] = {{\n".format(n_labels=len(self.labels))
+ "static const label labels[{n_labels}] = {{\n".format(n_labels=len(self.labels))
)
for label, name in self.labels:
label_name = '"{}"'.format(name) if name is not None else 0
@@ -89,7 +89,7 @@ def print_labels(self, writer):
def print_dfas(self, writer):
self.print_states(writer)
- writer("static dfa dfas[{}] = {{\n".format(len(self.dfas)))
+ writer("static const dfa dfas[{}] = {{\n".format(len(self.dfas)))
for dfaindex, dfa_elem in enumerate(self.dfas.items()):
symbol, (dfa, first_sets) = dfa_elem
writer(
@@ -131,7 +131,7 @@ def print_arcs(self, write, dfaindex, states):
for stateindex, state in enumerate(states):
narcs = len(state)
write(
- "static arc arcs_{dfa_index}_{state_index}[{n_arcs}] = {{\n".format(
+ "static const arc arcs_{dfa_index}_{state_index}[{n_arcs}] = {{\n".format(
dfa_index=dfaindex, state_index=stateindex, n_arcs=narcs
)
)
diff --git a/Python/graminit.c b/Python/graminit.c
index cd9003241700..96e32aa8fd33 100644
--- a/Python/graminit.c
+++ b/Python/graminit.c
@@ -2,15 +2,15 @@
#include "grammar.h"
grammar _PyParser_Grammar;
-static arc arcs_0_0[3] = {
+static const arc arcs_0_0[3] = {
{2, 1},
{3, 2},
{4, 1},
};
-static arc arcs_0_1[1] = {
+static const arc arcs_0_1[1] = {
{0, 1},
};
-static arc arcs_0_2[1] = {
+static const arc arcs_0_2[1] = {
{2, 1},
};
static state states_0[3] = {
@@ -18,26 +18,26 @@ static state states_0[3] = {
{1, arcs_0_1},
{1, arcs_0_2},
};
-static arc arcs_1_0[3] = {
+static const arc arcs_1_0[3] = {
{44, 1},
{2, 0},
{45, 0},
};
-static arc arcs_1_1[1] = {
+static const arc arcs_1_1[1] = {
{0, 1},
};
static state states_1[2] = {
{3, arcs_1_0},
{1, arcs_1_1},
};
-static arc arcs_2_0[1] = {
+static const arc arcs_2_0[1] = {
{47, 1},
};
-static arc arcs_2_1[2] = {
+static const arc arcs_2_1[2] = {
{44, 2},
{2, 1},
};
-static arc arcs_2_2[1] = {
+static const arc arcs_2_2[1] = {
{0, 2},
};
static state states_2[3] = {
@@ -45,27 +45,27 @@ static state states_2[3] = {
{2, arcs_2_1},
{1, arcs_2_2},
};
-static arc arcs_3_0[1] = {
+static const arc arcs_3_0[1] = {
{10, 1},
};
-static arc arcs_3_1[1] = {
+static const arc arcs_3_1[1] = {
{49, 2},
};
-static arc arcs_3_2[2] = {
+static const arc arcs_3_2[2] = {
{5, 3},
{2, 4},
};
-static arc arcs_3_3[2] = {
+static const arc arcs_3_3[2] = {
{50, 5},
{51, 6},
};
-static arc arcs_3_4[1] = {
+static const arc arcs_3_4[1] = {
{0, 4},
};
-static arc arcs_3_5[1] = {
+static const arc arcs_3_5[1] = {
{2, 4},
};
-static arc arcs_3_6[1] = {
+static const arc arcs_3_6[1] = {
{50, 5},
};
static state states_3[7] = {
@@ -77,10 +77,10 @@ static state states_3[7] = {
{1, arcs_3_5},
{1, arcs_3_6},
};
-static arc arcs_4_0[1] = {
+static const arc arcs_4_0[1] = {
{48, 1},
};
-static arc arcs_4_1[2] = {
+static const arc arcs_4_1[2] = {
{48, 1},
{0, 1},
};
@@ -88,15 +88,15 @@ static state states_4[2] = {
{1, arcs_4_0},
{2, arcs_4_1},
};
-static arc arcs_5_0[1] = {
+static const arc arcs_5_0[1] = {
{52, 1},
};
-static arc arcs_5_1[3] = {
+static const arc arcs_5_1[3] = {
{54, 2},
{55, 2},
{56, 2},
};
-static arc arcs_5_2[1] = {
+static const arc arcs_5_2[1] = {
{0, 2},
};
static state states_5[3] = {
@@ -104,13 +104,13 @@ static state states_5[3] = {
{3, arcs_5_1},
{1, arcs_5_2},
};
-static arc arcs_6_0[1] = {
+static const arc arcs_6_0[1] = {
{38, 1},
};
-static arc arcs_6_1[1] = {
+static const arc arcs_6_1[1] = {
{56, 2},
};
-static arc arcs_6_2[1] = {
+static const arc arcs_6_2[1] = {
{0, 2},
};
static state states_6[3] = {
@@ -118,33 +118,33 @@ static state states_6[3] = {
{1, arcs_6_1},
{1, arcs_6_2},
};
-static arc arcs_7_0[1] = {
+static const arc arcs_7_0[1] = {
{19, 1},
};
-static arc arcs_7_1[1] = {
+static const arc arcs_7_1[1] = {
{40, 2},
};
-static arc arcs_7_2[1] = {
+static const arc arcs_7_2[1] = {
{57, 3},
};
-static arc arcs_7_3[2] = {
+static const arc arcs_7_3[2] = {
{58, 4},
{59, 5},
};
-static arc arcs_7_4[1] = {
+static const arc arcs_7_4[1] = {
{60, 6},
};
-static arc arcs_7_5[2] = {
+static const arc arcs_7_5[2] = {
{61, 7},
{62, 8},
};
-static arc arcs_7_6[1] = {
+static const arc arcs_7_6[1] = {
{59, 5},
};
-static arc arcs_7_7[1] = {
+static const arc arcs_7_7[1] = {
{62, 8},
};
-static arc arcs_7_8[1] = {
+static const arc arcs_7_8[1] = {
{0, 8},
};
static state states_7[9] = {
@@ -158,17 +158,17 @@ static state states_7[9] = {
{1, arcs_7_7},
{1, arcs_7_8},
};
-static arc arcs_8_0[1] = {
+static const arc arcs_8_0[1] = {
{5, 1},
};
-static arc arcs_8_1[2] = {
+static const arc arcs_8_1[2] = {
{50, 2},
{63, 3},
};
-static arc arcs_8_2[1] = {
+static const arc arcs_8_2[1] = {
{0, 2},
};
-static arc arcs_8_3[1] = {
+static const arc arcs_8_3[1] = {
{50, 2},
};
static state states_8[4] = {
@@ -177,113 +177,113 @@ static state states_8[4] = {
{1, arcs_8_2},
{1, arcs_8_3},
};
-static arc arcs_9_0[3] = {
+static const arc arcs_9_0[3] = {
{6, 1},
{64, 2},
{65, 3},
};
-static arc arcs_9_1[4] = {
+static const arc arcs_9_1[4] = {
{66, 4},
{61, 5},
{65, 6},
{0, 1},
};
-static arc arcs_9_2[1] = {
+static const arc arcs_9_2[1] = {
{65, 7},
};
-static arc arcs_9_3[4] = {
+static const arc arcs_9_3[4] = {
{66, 8},
{67, 9},
{61, 5},
{0, 3},
};
-static arc arcs_9_4[4] = {
+static const arc arcs_9_4[4] = {
{64, 2},
{61, 10},
{65, 11},
{0, 4},
};
-static arc arcs_9_5[1] = {
+static const arc arcs_9_5[1] = {
{0, 5},
};
-static arc arcs_9_6[3] = {
+static const arc arcs_9_6[3] = {
{66, 4},
{61, 5},
{0, 6},
};
-static arc arcs_9_7[3] = {
+static const arc arcs_9_7[3] = {
{66, 12},
{61, 5},
{0, 7},
};
-static arc arcs_9_8[5] = {
+static const arc arcs_9_8[5] = {
{6, 13},
{64, 2},
{61, 14},
{65, 3},
{0, 8},
};
-static arc arcs_9_9[1] = {
+static const arc arcs_9_9[1] = {
{60, 15},
};
-static arc arcs_9_10[3] = {
+static const arc arcs_9_10[3] = {
{64, 2},
{65, 11},
{0, 10},
};
-static arc arcs_9_11[4] = {
+static const arc arcs_9_11[4] = {
{66, 4},
{67, 16},
{61, 5},
{0, 11},
};
-static arc arcs_9_12[2] = {
+static const arc arcs_9_12[2] = {
{61, 5},
{0, 12},
};
-static arc arcs_9_13[4] = {
+static const arc arcs_9_13[4] = {
{66, 17},
{61, 5},
{65, 18},
{0, 13},
};
-static arc arcs_9_14[4] = {
+static const arc arcs_9_14[4] = {
{6, 13},
{64, 2},
{65, 3},
{0, 14},
};
-static arc arcs_9_15[3] = {
+static const arc arcs_9_15[3] = {
{66, 8},
{61, 5},
{0, 15},
};
-static arc arcs_9_16[1] = {
+static const arc arcs_9_16[1] = {
{60, 6},
};
-static arc arcs_9_17[4] = {
+static const arc arcs_9_17[4] = {
{64, 2},
{61, 19},
{65, 20},
{0, 17},
};
-static arc arcs_9_18[3] = {
+static const arc arcs_9_18[3] = {
{66, 17},
{61, 5},
{0, 18},
};
-static arc arcs_9_19[3] = {
+static const arc arcs_9_19[3] = {
{64, 2},
{65, 20},
{0, 19},
};
-static arc arcs_9_20[4] = {
+static const arc arcs_9_20[4] = {
{66, 17},
{67, 21},
{61, 5},
{0, 20},
};
-static arc arcs_9_21[1] = {
+static const arc arcs_9_21[1] = {
{60, 18},
};
static state states_9[22] = {
@@ -310,17 +310,17 @@ static state states_9[22] = {
{4, arcs_9_20},
{1, arcs_9_21},
};
-static arc arcs_10_0[1] = {
+static const arc arcs_10_0[1] = {
{40, 1},
};
-static arc arcs_10_1[2] = {
+static const arc arcs_10_1[2] = {
{59, 2},
{0, 1},
};
-static arc arcs_10_2[1] = {
+static const arc arcs_10_2[1] = {
{60, 3},
};
-static arc arcs_10_3[1] = {
+static const arc arcs_10_3[1] = {
{0, 3},
};
static state states_10[4] = {
@@ -329,81 +329,81 @@ static state states_10[4] = {
{1, arcs_10_2},
{1, arcs_10_3},
};
-static arc arcs_11_0[3] = {
+static const arc arcs_11_0[3] = {
{6, 1},
{64, 2},
{69, 3},
};
-static arc arcs_11_1[3] = {
+static const arc arcs_11_1[3] = {
{66, 4},
{69, 5},
{0, 1},
};
-static arc arcs_11_2[1] = {
+static const arc arcs_11_2[1] = {
{69, 6},
};
-static arc arcs_11_3[3] = {
+static const arc arcs_11_3[3] = {
{66, 7},
{67, 8},
{0, 3},
};
-static arc arcs_11_4[3] = {
+static const arc arcs_11_4[3] = {
{64, 2},
{69, 9},
{0, 4},
};
-static arc arcs_11_5[2] = {
+static const arc arcs_11_5[2] = {
{66, 4},
{0, 5},
};
-static arc arcs_11_6[2] = {
+static const arc arcs_11_6[2] = {
{66, 10},
{0, 6},
};
-static arc arcs_11_7[4] = {
+static const arc arcs_11_7[4] = {
{6, 11},
{64, 2},
{69, 3},
{0, 7},
};
-static arc arcs_11_8[1] = {
+static const arc arcs_11_8[1] = {
{60, 12},
};
-static arc arcs_11_9[3] = {
+static const arc arcs_11_9[3] = {
{66, 4},
{67, 13},
{0, 9},
};
-static arc arcs_11_10[1] = {
+static const arc arcs_11_10[1] = {
{0, 10},
};
-static arc arcs_11_11[3] = {
+static const arc arcs_11_11[3] = {
{66, 14},
{69, 15},
{0, 11},
};
-static arc arcs_11_12[2] = {
+static const arc arcs_11_12[2] = {
{66, 7},
{0, 12},
};
-static arc arcs_11_13[1] = {
+static const arc arcs_11_13[1] = {
{60, 5},
};
-static arc arcs_11_14[3] = {
+static const arc arcs_11_14[3] = {
{64, 2},
{69, 16},
{0, 14},
};
-static arc arcs_11_15[2] = {
+static const arc arcs_11_15[2] = {
{66, 14},
{0, 15},
};
-static arc arcs_11_16[3] = {
+static const arc arcs_11_16[3] = {
{66, 14},
{67, 17},
{0, 16},
};
-static arc arcs_11_17[1] = {
+static const arc arcs_11_17[1] = {
{60, 15},
};
static state states_11[18] = {
@@ -426,39 +426,39 @@ static state states_11[18] = {
{3, arcs_11_16},
{1, arcs_11_17},
};
-static arc arcs_12_0[1] = {
+static const arc arcs_12_0[1] = {
{40, 1},
};
-static arc arcs_12_1[1] = {
+static const arc arcs_12_1[1] = {
{0, 1},
};
static state states_12[2] = {
{1, arcs_12_0},
{1, arcs_12_1},
};
-static arc arcs_13_0[2] = {
+static const arc arcs_13_0[2] = {
{3, 1},
{4, 1},
};
-static arc arcs_13_1[1] = {
+static const arc arcs_13_1[1] = {
{0, 1},
};
static state states_13[2] = {
{2, arcs_13_0},
{1, arcs_13_1},
};
-static arc arcs_14_0[1] = {
+static const arc arcs_14_0[1] = {
{70, 1},
};
-static arc arcs_14_1[2] = {
+static const arc arcs_14_1[2] = {
{71, 2},
{2, 3},
};
-static arc arcs_14_2[2] = {
+static const arc arcs_14_2[2] = {
{2, 3},
{70, 1},
};
-static arc arcs_14_3[1] = {
+static const arc arcs_14_3[1] = {
{0, 3},
};
static state states_14[4] = {
@@ -467,7 +467,7 @@ static state states_14[4] = {
{2, arcs_14_2},
{1, arcs_14_3},
};
-static arc arcs_15_0[8] = {
+static const arc arcs_15_0[8] = {
{72, 1},
{73, 1},
{74, 1},
@@ -477,34 +477,34 @@ static arc arcs_15_0[8] = {
{78, 1},
{79, 1},
};
-static arc arcs_15_1[1] = {
+static const arc arcs_15_1[1] = {
{0, 1},
};
static state states_15[2] = {
{8, arcs_15_0},
{1, arcs_15_1},
};
-static arc arcs_16_0[1] = {
+static const arc arcs_16_0[1] = {
{80, 1},
};
-static arc arcs_16_1[4] = {
+static const arc arcs_16_1[4] = {
{67, 2},
{81, 3},
{82, 4},
{0, 1},
};
-static arc arcs_16_2[2] = {
+static const arc arcs_16_2[2] = {
{80, 5},
{83, 5},
};
-static arc arcs_16_3[1] = {
+static const arc arcs_16_3[1] = {
{0, 3},
};
-static arc arcs_16_4[2] = {
+static const arc arcs_16_4[2] = {
{47, 3},
{83, 3},
};
-static arc arcs_16_5[3] = {
+static const arc arcs_16_5[3] = {
{67, 2},
{61, 3},
{0, 5},
@@ -517,21 +517,21 @@ static state states_16[6] = {
{2, arcs_16_4},
{3, arcs_16_5},
};
-static arc arcs_17_0[1] = {
+static const arc arcs_17_0[1] = {
{59, 1},
};
-static arc arcs_17_1[1] = {
+static const arc arcs_17_1[1] = {
{60, 2},
};
-static arc arcs_17_2[2] = {
+static const arc arcs_17_2[2] = {
{67, 3},
{0, 2},
};
-static arc arcs_17_3[2] = {
+static const arc arcs_17_3[2] = {
{47, 4},
{83, 4},
};
-static arc arcs_17_4[1] = {
+static const arc arcs_17_4[1] = {
{0, 4},
};
static state states_17[5] = {
@@ -541,15 +541,15 @@ static state states_17[5] = {
{2, arcs_17_3},
{1, arcs_17_4},
};
-static arc arcs_18_0[2] = {
+static const arc arcs_18_0[2] = {
{84, 1},
{60, 1},
};
-static arc arcs_18_1[2] = {
+static const arc arcs_18_1[2] = {
{66, 2},
{0, 1},
};
-static arc arcs_18_2[3] = {
+static const arc arcs_18_2[3] = {
{84, 1},
{60, 1},
{0, 2},
@@ -559,7 +559,7 @@ static state states_18[3] = {
{2, arcs_18_1},
{3, arcs_18_2},
};
-static arc arcs_19_0[13] = {
+static const arc arcs_19_0[13] = {
{85, 1},
{86, 1},
{87, 1},
@@ -574,20 +574,20 @@ static arc arcs_19_0[13] = {
{96, 1},
{97, 1},
};
-static arc arcs_19_1[1] = {
+static const arc arcs_19_1[1] = {
{0, 1},
};
static state states_19[2] = {
{13, arcs_19_0},
{1, arcs_19_1},
};
-static arc arcs_20_0[1] = {
+static const arc arcs_20_0[1] = {
{20, 1},
};
-static arc arcs_20_1[1] = {
+static const arc arcs_20_1[1] = {
{98, 2},
};
-static arc arcs_20_2[1] = {
+static const arc arcs_20_2[1] = {
{0, 2},
};
static state states_20[3] = {
@@ -595,58 +595,58 @@ static state states_20[3] = {
{1, arcs_20_1},
{1, arcs_20_2},
};
-static arc arcs_21_0[1] = {
+static const arc arcs_21_0[1] = {
{29, 1},
};
-static arc arcs_21_1[1] = {
+static const arc arcs_21_1[1] = {
{0, 1},
};
static state states_21[2] = {
{1, arcs_21_0},
{1, arcs_21_1},
};
-static arc arcs_22_0[5] = {
+static const arc arcs_22_0[5] = {
{99, 1},
{100, 1},
{101, 1},
{102, 1},
{103, 1},
};
-static arc arcs_22_1[1] = {
+static const arc arcs_22_1[1] = {
{0, 1},
};
static state states_22[2] = {
{5, arcs_22_0},
{1, arcs_22_1},
};
-static arc arcs_23_0[1] = {
+static const arc arcs_23_0[1] = {
{16, 1},
};
-static arc arcs_23_1[1] = {
+static const arc arcs_23_1[1] = {
{0, 1},
};
static state states_23[2] = {
{1, arcs_23_0},
{1, arcs_23_1},
};
-static arc arcs_24_0[1] = {
+static const arc arcs_24_0[1] = {
{18, 1},
};
-static arc arcs_24_1[1] = {
+static const arc arcs_24_1[1] = {
{0, 1},
};
static state states_24[2] = {
{1, arcs_24_0},
{1, arcs_24_1},
};
-static arc arcs_25_0[1] = {
+static const arc arcs_25_0[1] = {
{31, 1},
};
-static arc arcs_25_1[2] = {
+static const arc arcs_25_1[2] = {
{80, 2},
{0, 1},
};
-static arc arcs_25_2[1] = {
+static const arc arcs_25_2[1] = {
{0, 2},
};
static state states_25[3] = {
@@ -654,31 +654,31 @@ static state states_25[3] = {
{2, arcs_25_1},
{1, arcs_25_2},
};
-static arc arcs_26_0[1] = {
+static const arc arcs_26_0[1] = {
{83, 1},
};
-static arc arcs_26_1[1] = {
+static const arc arcs_26_1[1] = {
{0, 1},
};
static state states_26[2] = {
{1, arcs_26_0},
{1, arcs_26_1},
};
-static arc arcs_27_0[1] = {
+static const arc arcs_27_0[1] = {
{30, 1},
};
-static arc arcs_27_1[2] = {
+static const arc arcs_27_1[2] = {
{60, 2},
{0, 1},
};
-static arc arcs_27_2[2] = {
+static const arc arcs_27_2[2] = {
{22, 3},
{0, 2},
};
-static arc arcs_27_3[1] = {
+static const arc arcs_27_3[1] = {
{60, 4},
};
-static arc arcs_27_4[1] = {
+static const arc arcs_27_4[1] = {
{0, 4},
};
static state states_27[5] = {
@@ -688,24 +688,24 @@ static state states_27[5] = {
{1, arcs_27_3},
{1, arcs_27_4},
};
-static arc arcs_28_0[2] = {
+static const arc arcs_28_0[2] = {
{104, 1},
{105, 1},
};
-static arc arcs_28_1[1] = {
+static const arc arcs_28_1[1] = {
{0, 1},
};
static state states_28[2] = {
{2, arcs_28_0},
{1, arcs_28_1},
};
-static arc arcs_29_0[1] = {
+static const arc arcs_29_0[1] = {
{25, 1},
};
-static arc arcs_29_1[1] = {
+static const arc arcs_29_1[1] = {
{106, 2},
};
-static arc arcs_29_2[1] = {
+static const arc arcs_29_2[1] = {
{0, 2},
};
static state states_29[3] = {
@@ -713,35 +713,35 @@ static state states_29[3] = {
{1, arcs_29_1},
{1, arcs_29_2},
};
-static arc arcs_30_0[1] = {
+static const arc arcs_30_0[1] = {
{22, 1},
};
-static arc arcs_30_1[3] = {
+static const arc arcs_30_1[3] = {
{107, 2},
{9, 2},
{49, 3},
};
-static arc arcs_30_2[4] = {
+static const arc arcs_30_2[4] = {
{107, 2},
{9, 2},
{25, 4},
{49, 3},
};
-static arc arcs_30_3[1] = {
+static const arc arcs_30_3[1] = {
{25, 4},
};
-static arc arcs_30_4[3] = {
+static const arc arcs_30_4[3] = {
{5, 5},
{6, 6},
{108, 6},
};
-static arc arcs_30_5[1] = {
+static const arc arcs_30_5[1] = {
{108, 7},
};
-static arc arcs_30_6[1] = {
+static const arc arcs_30_6[1] = {
{0, 6},
};
-static arc arcs_30_7[1] = {
+static const arc arcs_30_7[1] = {
{50, 6},
};
static state states_30[8] = {
@@ -754,17 +754,17 @@ static state states_30[8] = {
{1, arcs_30_6},
{1, arcs_30_7},
};
-static arc arcs_31_0[1] = {
+static const arc arcs_31_0[1] = {
{40, 1},
};
-static arc arcs_31_1[2] = {
+static const arc arcs_31_1[2] = {
{110, 2},
{0, 1},
};
-static arc arcs_31_2[1] = {
+static const arc arcs_31_2[1] = {
{40, 3},
};
-static arc arcs_31_3[1] = {
+static const arc arcs_31_3[1] = {
{0, 3},
};
static state states_31[4] = {
@@ -773,17 +773,17 @@ static state states_31[4] = {
{1, arcs_31_2},
{1, arcs_31_3},
};
-static arc arcs_32_0[1] = {
+static const arc arcs_32_0[1] = {
{49, 1},
};
-static arc arcs_32_1[2] = {
+static const arc arcs_32_1[2] = {
{110, 2},
{0, 1},
};
-static arc arcs_32_2[1] = {
+static const arc arcs_32_2[1] = {
{40, 3},
};
-static arc arcs_32_3[1] = {
+static const arc arcs_32_3[1] = {
{0, 3},
};
static state states_32[4] = {
@@ -792,14 +792,14 @@ static state states_32[4] = {
{1, arcs_32_2},
{1, arcs_32_3},
};
-static arc arcs_33_0[1] = {
+static const arc arcs_33_0[1] = {
{109, 1},
};
-static arc arcs_33_1[2] = {
+static const arc arcs_33_1[2] = {
{66, 2},
{0, 1},
};
-static arc arcs_33_2[2] = {
+static const arc arcs_33_2[2] = {
{109, 1},
{0, 2},
};
@@ -808,10 +808,10 @@ static state states_33[3] = {
{2, arcs_33_1},
{2, arcs_33_2},
};
-static arc arcs_34_0[1] = {
+static const arc arcs_34_0[1] = {
{111, 1},
};
-static arc arcs_34_1[2] = {
+static const arc arcs_34_1[2] = {
{66, 0},
{0, 1},
};
@@ -819,10 +819,10 @@ static state states_34[2] = {
{1, arcs_34_0},
{2, arcs_34_1},
};
-static arc arcs_35_0[1] = {
+static const arc arcs_35_0[1] = {
{40, 1},
};
-static arc arcs_35_1[2] = {
+static const arc arcs_35_1[2] = {
{107, 0},
{0, 1},
};
@@ -830,13 +830,13 @@ static state states_35[2] = {
{1, arcs_35_0},
{2, arcs_35_1},
};
-static arc arcs_36_0[1] = {
+static const arc arcs_36_0[1] = {
{23, 1},
};
-static arc arcs_36_1[1] = {
+static const arc arcs_36_1[1] = {
{40, 2},
};
-static arc arcs_36_2[2] = {
+static const arc arcs_36_2[2] = {
{66, 1},
{0, 2},
};
@@ -845,13 +845,13 @@ static state states_36[3] = {
{1, arcs_36_1},
{2, arcs_36_2},
};
-static arc arcs_37_0[1] = {
+static const arc arcs_37_0[1] = {
{27, 1},
};
-static arc arcs_37_1[1] = {
+static const arc arcs_37_1[1] = {
{40, 2},
};
-static arc arcs_37_2[2] = {
+static const arc arcs_37_2[2] = {
{66, 1},
{0, 2},
};
@@ -860,20 +860,20 @@ static state states_37[3] = {
{1, arcs_37_1},
{2, arcs_37_2},
};
-static arc arcs_38_0[1] = {
+static const arc arcs_38_0[1] = {
{15, 1},
};
-static arc arcs_38_1[1] = {
+static const arc arcs_38_1[1] = {
{60, 2},
};
-static arc arcs_38_2[2] = {
+static const arc arcs_38_2[2] = {
{66, 3},
{0, 2},
};
-static arc arcs_38_3[1] = {
+static const arc arcs_38_3[1] = {
{60, 4},
};
-static arc arcs_38_4[1] = {
+static const arc arcs_38_4[1] = {
{0, 4},
};
static state states_38[5] = {
@@ -883,7 +883,7 @@ static state states_38[5] = {
{1, arcs_38_3},
{1, arcs_38_4},
};
-static arc arcs_39_0[9] = {
+static const arc arcs_39_0[9] = {
{112, 1},
{55, 1},
{53, 1},
@@ -894,22 +894,22 @@ static arc arcs_39_0[9] = {
{116, 1},
{117, 1},
};
-static arc arcs_39_1[1] = {
+static const arc arcs_39_1[1] = {
{0, 1},
};
static state states_39[2] = {
{9, arcs_39_0},
{1, arcs_39_1},
};
-static arc arcs_40_0[1] = {
+static const arc arcs_40_0[1] = {
{38, 1},
};
-static arc arcs_40_1[3] = {
+static const arc arcs_40_1[3] = {
{113, 2},
{56, 2},
{117, 2},
};
-static arc arcs_40_2[1] = {
+static const arc arcs_40_2[1] = {
{0, 2},
};
static state states_40[3] = {
@@ -917,30 +917,30 @@ static state states_40[3] = {
{3, arcs_40_1},
{1, arcs_40_2},
};
-static arc arcs_41_0[1] = {
+static const arc arcs_41_0[1] = {
{24, 1},
};
-static arc arcs_41_1[1] = {
+static const arc arcs_41_1[1] = {
{118, 2},
};
-static arc arcs_41_2[1] = {
+static const arc arcs_41_2[1] = {
{59, 3},
};
-static arc arcs_41_3[1] = {
+static const arc arcs_41_3[1] = {
{119, 4},
};
-static arc arcs_41_4[3] = {
+static const arc arcs_41_4[3] = {
{120, 1},
{121, 5},
{0, 4},
};
-static arc arcs_41_5[1] = {
+static const arc arcs_41_5[1] = {
{59, 6},
};
-static arc arcs_41_6[1] = {
+static const arc arcs_41_6[1] = {
{119, 7},
};
-static arc arcs_41_7[1] = {
+static const arc arcs_41_7[1] = {
{0, 7},
};
static state states_41[8] = {
@@ -953,29 +953,29 @@ static state states_41[8] = {
{1, arcs_41_6},
{1, arcs_41_7},
};
-static arc arcs_42_0[1] = {
+static const arc arcs_42_0[1] = {
{33, 1},
};
-static arc arcs_42_1[1] = {
+static const arc arcs_42_1[1] = {
{118, 2},
};
-static arc arcs_42_2[1] = {
+static const arc arcs_42_2[1] = {
{59, 3},
};
-static arc arcs_42_3[1] = {
+static const arc arcs_42_3[1] = {
{119, 4},
};
-static arc arcs_42_4[2] = {
+static const arc arcs_42_4[2] = {
{121, 5},
{0, 4},
};
-static arc arcs_42_5[1] = {
+static const arc arcs_42_5[1] = {
{59, 6},
};
-static arc arcs_42_6[1] = {
+static const arc arcs_42_6[1] = {
{119, 7},
};
-static arc arcs_42_7[1] = {
+static const arc arcs_42_7[1] = {
{0, 7},
};
static state states_42[8] = {
@@ -988,39 +988,39 @@ static state states_42[8] = {
{1, arcs_42_6},
{1, arcs_42_7},
};
-static arc arcs_43_0[1] = {
+static const arc arcs_43_0[1] = {
{21, 1},
};
-static arc arcs_43_1[1] = {
+static const arc arcs_43_1[1] = {
{98, 2},
};
-static arc arcs_43_2[1] = {
+static const arc arcs_43_2[1] = {
{122, 3},
};
-static arc arcs_43_3[1] = {
+static const arc arcs_43_3[1] = {
{47, 4},
};
-static arc arcs_43_4[1] = {
+static const arc arcs_43_4[1] = {
{59, 5},
};
-static arc arcs_43_5[2] = {
+static const arc arcs_43_5[2] = {
{61, 6},
{119, 7},
};
-static arc arcs_43_6[1] = {
+static const arc arcs_43_6[1] = {
{119, 7},
};
-static arc arcs_43_7[2] = {
+static const arc arcs_43_7[2] = {
{121, 8},
{0, 7},
};
-static arc arcs_43_8[1] = {
+static const arc arcs_43_8[1] = {
{59, 9},
};
-static arc arcs_43_9[1] = {
+static const arc arcs_43_9[1] = {
{119, 10},
};
-static arc arcs_43_10[1] = {
+static const arc arcs_43_10[1] = {
{0, 10},
};
static state states_43[11] = {
@@ -1036,47 +1036,47 @@ static state states_43[11] = {
{1, arcs_43_9},
{1, arcs_43_10},
};
-static arc arcs_44_0[1] = {
+static const arc arcs_44_0[1] = {
{32, 1},
};
-static arc arcs_44_1[1] = {
+static const arc arcs_44_1[1] = {
{59, 2},
};
-static arc arcs_44_2[1] = {
+static const arc arcs_44_2[1] = {
{119, 3},
};
-static arc arcs_44_3[2] = {
+static const arc arcs_44_3[2] = {
{123, 4},
{124, 5},
};
-static arc arcs_44_4[1] = {
+static const arc arcs_44_4[1] = {
{59, 6},
};
-static arc arcs_44_5[1] = {
+static const arc arcs_44_5[1] = {
{59, 7},
};
-static arc arcs_44_6[1] = {
+static const arc arcs_44_6[1] = {
{119, 8},
};
-static arc arcs_44_7[1] = {
+static const arc arcs_44_7[1] = {
{119, 9},
};
-static arc arcs_44_8[1] = {
+static const arc arcs_44_8[1] = {
{0, 8},
};
-static arc arcs_44_9[4] = {
+static const arc arcs_44_9[4] = {
{121, 10},
{123, 4},
{124, 5},
{0, 9},
};
-static arc arcs_44_10[1] = {
+static const arc arcs_44_10[1] = {
{59, 11},
};
-static arc arcs_44_11[1] = {
+static const arc arcs_44_11[1] = {
{119, 12},
};
-static arc arcs_44_12[2] = {
+static const arc arcs_44_12[2] = {
{123, 4},
{0, 12},
};
@@ -1095,24 +1095,24 @@ static state states_44[13] = {
{1, arcs_44_11},
{2, arcs_44_12},
};
-static arc arcs_45_0[1] = {
+static const arc arcs_45_0[1] = {
{34, 1},
};
-static arc arcs_45_1[1] = {
+static const arc arcs_45_1[1] = {
{125, 2},
};
-static arc arcs_45_2[2] = {
+static const arc arcs_45_2[2] = {
{66, 1},
{59, 3},
};
-static arc arcs_45_3[2] = {
+static const arc arcs_45_3[2] = {
{61, 4},
{119, 5},
};
-static arc arcs_45_4[1] = {
+static const arc arcs_45_4[1] = {
{119, 5},
};
-static arc arcs_45_5[1] = {
+static const arc arcs_45_5[1] = {
{0, 5},
};
static state states_45[6] = {
@@ -1123,17 +1123,17 @@ static state states_45[6] = {
{1, arcs_45_4},
{1, arcs_45_5},
};
-static arc arcs_46_0[1] = {
+static const arc arcs_46_0[1] = {
{60, 1},
};
-static arc arcs_46_1[2] = {
+static const arc arcs_46_1[2] = {
{110, 2},
{0, 1},
};
-static arc arcs_46_2[1] = {
+static const arc arcs_46_2[1] = {
{126, 3},
};
-static arc arcs_46_3[1] = {
+static const arc arcs_46_3[1] = {
{0, 3},
};
static state states_46[4] = {
@@ -1142,21 +1142,21 @@ static state states_46[4] = {
{1, arcs_46_2},
{1, arcs_46_3},
};
-static arc arcs_47_0[1] = {
+static const arc arcs_47_0[1] = {
{127, 1},
};
-static arc arcs_47_1[2] = {
+static const arc arcs_47_1[2] = {
{60, 2},
{0, 1},
};
-static arc arcs_47_2[2] = {
+static const arc arcs_47_2[2] = {
{110, 3},
{0, 2},
};
-static arc arcs_47_3[1] = {
+static const arc arcs_47_3[1] = {
{40, 4},
};
-static arc arcs_47_4[1] = {
+static const arc arcs_47_4[1] = {
{0, 4},
};
static state states_47[5] = {
@@ -1166,20 +1166,20 @@ static state states_47[5] = {
{1, arcs_47_3},
{1, arcs_47_4},
};
-static arc arcs_48_0[2] = {
+static const arc arcs_48_0[2] = {
{2, 1},
{4, 2},
};
-static arc arcs_48_1[1] = {
+static const arc arcs_48_1[1] = {
{128, 3},
};
-static arc arcs_48_2[1] = {
+static const arc arcs_48_2[1] = {
{0, 2},
};
-static arc arcs_48_3[1] = {
+static const arc arcs_48_3[1] = {
{45, 4},
};
-static arc arcs_48_4[2] = {
+static const arc arcs_48_4[2] = {
{129, 2},
{45, 4},
};
@@ -1190,17 +1190,17 @@ static state states_48[5] = {
{1, arcs_48_3},
{2, arcs_48_4},
};
-static arc arcs_49_0[1] = {
+static const arc arcs_49_0[1] = {
{60, 1},
};
-static arc arcs_49_1[2] = {
+static const arc arcs_49_1[2] = {
{130, 2},
{0, 1},
};
-static arc arcs_49_2[1] = {
+static const arc arcs_49_2[1] = {
{60, 3},
};
-static arc arcs_49_3[1] = {
+static const arc arcs_49_3[1] = {
{0, 3},
};
static state states_49[4] = {
@@ -1209,24 +1209,24 @@ static state states_49[4] = {
{1, arcs_49_2},
{1, arcs_49_3},
};
-static arc arcs_50_0[2] = {
+static const arc arcs_50_0[2] = {
{131, 1},
{132, 2},
};
-static arc arcs_50_1[1] = {
+static const arc arcs_50_1[1] = {
{0, 1},
};
-static arc arcs_50_2[2] = {
+static const arc arcs_50_2[2] = {
{24, 3},
{0, 2},
};
-static arc arcs_50_3[1] = {
+static const arc arcs_50_3[1] = {
{132, 4},
};
-static arc arcs_50_4[1] = {
+static const arc arcs_50_4[1] = {
{121, 5},
};
-static arc arcs_50_5[1] = {
+static const arc arcs_50_5[1] = {
{60, 1},
};
static state states_50[6] = {
@@ -1237,31 +1237,31 @@ static state states_50[6] = {
{1, arcs_50_4},
{1, arcs_50_5},
};
-static arc arcs_51_0[2] = {
+static const arc arcs_51_0[2] = {
{134, 1},
{132, 1},
};
-static arc arcs_51_1[1] = {
+static const arc arcs_51_1[1] = {
{0, 1},
};
static state states_51[2] = {
{2, arcs_51_0},
{1, arcs_51_1},
};
-static arc arcs_52_0[1] = {
+static const arc arcs_52_0[1] = {
{26, 1},
};
-static arc arcs_52_1[2] = {
+static const arc arcs_52_1[2] = {
{59, 2},
{68, 3},
};
-static arc arcs_52_2[1] = {
+static const arc arcs_52_2[1] = {
{60, 4},
};
-static arc arcs_52_3[1] = {
+static const arc arcs_52_3[1] = {
{59, 2},
};
-static arc arcs_52_4[1] = {
+static const arc arcs_52_4[1] = {
{0, 4},
};
static state states_52[5] = {
@@ -1271,20 +1271,20 @@ static state states_52[5] = {
{1, arcs_52_3},
{1, arcs_52_4},
};
-static arc arcs_53_0[1] = {
+static const arc arcs_53_0[1] = {
{26, 1},
};
-static arc arcs_53_1[2] = {
+static const arc arcs_53_1[2] = {
{59, 2},
{68, 3},
};
-static arc arcs_53_2[1] = {
+static const arc arcs_53_2[1] = {
{133, 4},
};
-static arc arcs_53_3[1] = {
+static const arc arcs_53_3[1] = {
{59, 2},
};
-static arc arcs_53_4[1] = {
+static const arc arcs_53_4[1] = {
{0, 4},
};
static state states_53[5] = {
@@ -1294,10 +1294,10 @@ static state states_53[5] = {
{1, arcs_53_3},
{1, arcs_53_4},
};
-static arc arcs_54_0[1] = {
+static const arc arcs_54_0[1] = {
{135, 1},
};
-static arc arcs_54_1[2] = {
+static const arc arcs_54_1[2] = {
{136, 0},
{0, 1},
};
@@ -1305,10 +1305,10 @@ static state states_54[2] = {
{1, arcs_54_0},
{2, arcs_54_1},
};
-static arc arcs_55_0[1] = {
+static const arc arcs_55_0[1] = {
{137, 1},
};
-static arc arcs_55_1[2] = {
+static const arc arcs_55_1[2] = {
{138, 0},
{0, 1},
};
@@ -1316,14 +1316,14 @@ static state states_55[2] = {
{1, arcs_55_0},
{2, arcs_55_1},
};
-static arc arcs_56_0[2] = {
+static const arc arcs_56_0[2] = {
{28, 1},
{139, 2},
};
-static arc arcs_56_1[1] = {
+static const arc arcs_56_1[1] = {
{137, 2},
};
-static arc arcs_56_2[1] = {
+static const arc arcs_56_2[1] = {
{0, 2},
};
static state states_56[3] = {
@@ -1331,10 +1331,10 @@ static state states_56[3] = {
{1, arcs_56_1},
{1, arcs_56_2},
};
-static arc arcs_57_0[1] = {
+static const arc arcs_57_0[1] = {
{126, 1},
};
-static arc arcs_57_1[2] = {
+static const arc arcs_57_1[2] = {
{140, 0},
{0, 1},
};
@@ -1342,7 +1342,7 @@ static state states_57[2] = {
{1, arcs_57_0},
{2, arcs_57_1},
};
-static arc arcs_58_0[10] = {
+static const arc arcs_58_0[10] = {
{141, 1},
{142, 1},
{143, 1},
@@ -1354,14 +1354,14 @@ static arc arcs_58_0[10] = {
{147, 2},
{28, 3},
};
-static arc arcs_58_1[1] = {
+static const arc arcs_58_1[1] = {
{0, 1},
};
-static arc arcs_58_2[2] = {
+static const arc arcs_58_2[2] = {
{28, 1},
{0, 2},
};
-static arc arcs_58_3[1] = {
+static const arc arcs_58_3[1] = {
{122, 1},
};
static state states_58[4] = {
@@ -1370,13 +1370,13 @@ static state states_58[4] = {
{2, arcs_58_2},
{1, arcs_58_3},
};
-static arc arcs_59_0[1] = {
+static const arc arcs_59_0[1] = {
{6, 1},
};
-static arc arcs_59_1[1] = {
+static const arc arcs_59_1[1] = {
{126, 2},
};
-static arc arcs_59_2[1] = {
+static const arc arcs_59_2[1] = {
{0, 2},
};
static state states_59[3] = {
@@ -1384,10 +1384,10 @@ static state states_59[3] = {
{1, arcs_59_1},
{1, arcs_59_2},
};
-static arc arcs_60_0[1] = {
+static const arc arcs_60_0[1] = {
{148, 1},
};
-static arc arcs_60_1[2] = {
+static const arc arcs_60_1[2] = {
{149, 0},
{0, 1},
};
@@ -1395,10 +1395,10 @@ static state states_60[2] = {
{1, arcs_60_0},
{2, arcs_60_1},
};
-static arc arcs_61_0[1] = {
+static const arc arcs_61_0[1] = {
{150, 1},
};
-static arc arcs_61_1[2] = {
+static const arc arcs_61_1[2] = {
{151, 0},
{0, 1},
};
@@ -1406,10 +1406,10 @@ static state states_61[2] = {
{1, arcs_61_0},
{2, arcs_61_1},
};
-static arc arcs_62_0[1] = {
+static const arc arcs_62_0[1] = {
{152, 1},
};
-static arc arcs_62_1[2] = {
+static const arc arcs_62_1[2] = {
{153, 0},
{0, 1},
};
@@ -1417,10 +1417,10 @@ static state states_62[2] = {
{1, arcs_62_0},
{2, arcs_62_1},
};
-static arc arcs_63_0[1] = {
+static const arc arcs_63_0[1] = {
{154, 1},
};
-static arc arcs_63_1[3] = {
+static const arc arcs_63_1[3] = {
{155, 0},
{156, 0},
{0, 1},
@@ -1429,10 +1429,10 @@ static state states_63[2] = {
{1, arcs_63_0},
{3, arcs_63_1},
};
-static arc arcs_64_0[1] = {
+static const arc arcs_64_0[1] = {
{157, 1},
};
-static arc arcs_64_1[3] = {
+static const arc arcs_64_1[3] = {
{7, 0},
{8, 0},
{0, 1},
@@ -1441,10 +1441,10 @@ static state states_64[2] = {
{1, arcs_64_0},
{3, arcs_64_1},
};
-static arc arcs_65_0[1] = {
+static const arc arcs_65_0[1] = {
{158, 1},
};
-static arc arcs_65_1[6] = {
+static const arc arcs_65_1[6] = {
{159, 0},
{6, 0},
{160, 0},
@@ -1456,16 +1456,16 @@ static state states_65[2] = {
{1, arcs_65_0},
{6, arcs_65_1},
};
-static arc arcs_66_0[4] = {
+static const arc arcs_66_0[4] = {
{7, 1},
{8, 1},
{37, 1},
{162, 2},
};
-static arc arcs_66_1[1] = {
+static const arc arcs_66_1[1] = {
{158, 2},
};
-static arc arcs_66_2[1] = {
+static const arc arcs_66_2[1] = {
{0, 2},
};
static state states_66[3] = {
@@ -1473,17 +1473,17 @@ static state states_66[3] = {
{1, arcs_66_1},
{1, arcs_66_2},
};
-static arc arcs_67_0[1] = {
+static const arc arcs_67_0[1] = {
{163, 1},
};
-static arc arcs_67_1[2] = {
+static const arc arcs_67_1[2] = {
{64, 2},
{0, 1},
};
-static arc arcs_67_2[1] = {
+static const arc arcs_67_2[1] = {
{158, 3},
};
-static arc arcs_67_3[1] = {
+static const arc arcs_67_3[1] = {
{0, 3},
};
static state states_67[4] = {
@@ -1492,14 +1492,14 @@ static state states_67[4] = {
{1, arcs_67_2},
{1, arcs_67_3},
};
-static arc arcs_68_0[2] = {
+static const arc arcs_68_0[2] = {
{39, 1},
{164, 2},
};
-static arc arcs_68_1[1] = {
+static const arc arcs_68_1[1] = {
{164, 2},
};
-static arc arcs_68_2[2] = {
+static const arc arcs_68_2[2] = {
{165, 2},
{0, 2},
};
@@ -1508,7 +1508,7 @@ static state states_68[3] = {
{1, arcs_68_1},
{2, arcs_68_2},
};
-static arc arcs_69_0[10] = {
+static const arc arcs_69_0[10] = {
{5, 1},
{9, 2},
{11, 2},
@@ -1520,33 +1520,33 @@ static arc arcs_69_0[10] = {
{41, 2},
{42, 5},
};
-static arc arcs_69_1[3] = {
+static const arc arcs_69_1[3] = {
{50, 2},
{166, 6},
{83, 6},
};
-static arc arcs_69_2[1] = {
+static const arc arcs_69_2[1] = {
{0, 2},
};
-static arc arcs_69_3[2] = {
+static const arc arcs_69_3[2] = {
{167, 2},
{166, 7},
};
-static arc arcs_69_4[2] = {
+static const arc arcs_69_4[2] = {
{168, 2},
{169, 8},
};
-static arc arcs_69_5[2] = {
+static const arc arcs_69_5[2] = {
{42, 5},
{0, 5},
};
-static arc arcs_69_6[1] = {
+static const arc arcs_69_6[1] = {
{50, 2},
};
-static arc arcs_69_7[1] = {
+static const arc arcs_69_7[1] = {
{167, 2},
};
-static arc arcs_69_8[1] = {
+static const arc arcs_69_8[1] = {
{168, 2},
};
static state states_69[9] = {
@@ -1560,24 +1560,24 @@ static state states_69[9] = {
{1, arcs_69_7},
{1, arcs_69_8},
};
-static arc arcs_70_0[2] = {
+static const arc arcs_70_0[2] = {
{118, 1},
{84, 1},
};
-static arc arcs_70_1[3] = {
+static const arc arcs_70_1[3] = {
{66, 2},
{170, 3},
{0, 1},
};
-static arc arcs_70_2[3] = {
+static const arc arcs_70_2[3] = {
{118, 4},
{84, 4},
{0, 2},
};
-static arc arcs_70_3[1] = {
+static const arc arcs_70_3[1] = {
{0, 3},
};
-static arc arcs_70_4[2] = {
+static const arc arcs_70_4[2] = {
{66, 2},
{0, 4},
};
@@ -1588,28 +1588,28 @@ static state states_70[5] = {
{1, arcs_70_3},
{2, arcs_70_4},
};
-static arc arcs_71_0[3] = {
+static const arc arcs_71_0[3] = {
{5, 1},
{107, 2},
{14, 3},
};
-static arc arcs_71_1[2] = {
+static const arc arcs_71_1[2] = {
{50, 4},
{51, 5},
};
-static arc arcs_71_2[1] = {
+static const arc arcs_71_2[1] = {
{40, 4},
};
-static arc arcs_71_3[1] = {
+static const arc arcs_71_3[1] = {
{171, 6},
};
-static arc arcs_71_4[1] = {
+static const arc arcs_71_4[1] = {
{0, 4},
};
-static arc arcs_71_5[1] = {
+static const arc arcs_71_5[1] = {
{50, 4},
};
-static arc arcs_71_6[1] = {
+static const arc arcs_71_6[1] = {
{167, 4},
};
static state states_71[7] = {
@@ -1621,14 +1621,14 @@ static state states_71[7] = {
{1, arcs_71_5},
{1, arcs_71_6},
};
-static arc arcs_72_0[1] = {
+static const arc arcs_72_0[1] = {
{172, 1},
};
-static arc arcs_72_1[2] = {
+static const arc arcs_72_1[2] = {
{66, 2},
{0, 1},
};
-static arc arcs_72_2[2] = {
+static const arc arcs_72_2[2] = {
{172, 1},
{0, 2},
};
@@ -1637,23 +1637,23 @@ static state states_72[3] = {
{2, arcs_72_1},
{2, arcs_72_2},
};
-static arc arcs_73_0[2] = {
+static const arc arcs_73_0[2] = {
{59, 1},
{60, 2},
};
-static arc arcs_73_1[3] = {
+static const arc arcs_73_1[3] = {
{173, 3},
{60, 4},
{0, 1},
};
-static arc arcs_73_2[2] = {
+static const arc arcs_73_2[2] = {
{59, 1},
{0, 2},
};
-static arc arcs_73_3[1] = {
+static const arc arcs_73_3[1] = {
{0, 3},
};
-static arc arcs_73_4[2] = {
+static const arc arcs_73_4[2] = {
{173, 3},
{0, 4},
};
@@ -1664,14 +1664,14 @@ static state states_73[5] = {
{1, arcs_73_3},
{2, arcs_73_4},
};
-static arc arcs_74_0[1] = {
+static const arc arcs_74_0[1] = {
{59, 1},
};
-static arc arcs_74_1[2] = {
+static const arc arcs_74_1[2] = {
{60, 2},
{0, 1},
};
-static arc arcs_74_2[1] = {
+static const arc arcs_74_2[1] = {
{0, 2},
};
static state states_74[3] = {
@@ -1679,15 +1679,15 @@ static state states_74[3] = {
{2, arcs_74_1},
{1, arcs_74_2},
};
-static arc arcs_75_0[2] = {
+static const arc arcs_75_0[2] = {
{126, 1},
{84, 1},
};
-static arc arcs_75_1[2] = {
+static const arc arcs_75_1[2] = {
{66, 2},
{0, 1},
};
-static arc arcs_75_2[3] = {
+static const arc arcs_75_2[3] = {
{126, 1},
{84, 1},
{0, 2},
@@ -1697,14 +1697,14 @@ static state states_75[3] = {
{2, arcs_75_1},
{3, arcs_75_2},
};
-static arc arcs_76_0[1] = {
+static const arc arcs_76_0[1] = {
{60, 1},
};
-static arc arcs_76_1[2] = {
+static const arc arcs_76_1[2] = {
{66, 2},
{0, 1},
};
-static arc arcs_76_2[2] = {
+static const arc arcs_76_2[2] = {
{60, 1},
{0, 2},
};
@@ -1713,61 +1713,61 @@ static state states_76[3] = {
{2, arcs_76_1},
{2, arcs_76_2},
};
-static arc arcs_77_0[3] = {
+static const arc arcs_77_0[3] = {
{64, 1},
{84, 2},
{60, 3},
};
-static arc arcs_77_1[1] = {
+static const arc arcs_77_1[1] = {
{126, 4},
};
-static arc arcs_77_2[3] = {
+static const arc arcs_77_2[3] = {
{66, 5},
{170, 6},
{0, 2},
};
-static arc arcs_77_3[4] = {
+static const arc arcs_77_3[4] = {
{66, 5},
{59, 7},
{170, 6},
{0, 3},
};
-static arc arcs_77_4[3] = {
+static const arc arcs_77_4[3] = {
{66, 8},
{170, 6},
{0, 4},
};
-static arc arcs_77_5[3] = {
+static const arc arcs_77_5[3] = {
{84, 9},
{60, 9},
{0, 5},
};
-static arc arcs_77_6[1] = {
+static const arc arcs_77_6[1] = {
{0, 6},
};
-static arc arcs_77_7[1] = {
+static const arc arcs_77_7[1] = {
{60, 4},
};
-static arc arcs_77_8[3] = {
+static const arc arcs_77_8[3] = {
{64, 10},
{60, 11},
{0, 8},
};
-static arc arcs_77_9[2] = {
+static const arc arcs_77_9[2] = {
{66, 5},
{0, 9},
};
-static arc arcs_77_10[1] = {
+static const arc arcs_77_10[1] = {
{126, 12},
};
-static arc arcs_77_11[1] = {
+static const arc arcs_77_11[1] = {
{59, 13},
};
-static arc arcs_77_12[2] = {
+static const arc arcs_77_12[2] = {
{66, 8},
{0, 12},
};
-static arc arcs_77_13[1] = {
+static const arc arcs_77_13[1] = {
{60, 12},
};
static state states_77[14] = {
@@ -1786,30 +1786,30 @@ static state states_77[14] = {
{2, arcs_77_12},
{1, arcs_77_13},
};
-static arc arcs_78_0[1] = {
+static const arc arcs_78_0[1] = {
{17, 1},
};
-static arc arcs_78_1[1] = {
+static const arc arcs_78_1[1] = {
{40, 2},
};
-static arc arcs_78_2[2] = {
+static const arc arcs_78_2[2] = {
{5, 3},
{59, 4},
};
-static arc arcs_78_3[2] = {
+static const arc arcs_78_3[2] = {
{50, 5},
{51, 6},
};
-static arc arcs_78_4[1] = {
+static const arc arcs_78_4[1] = {
{119, 7},
};
-static arc arcs_78_5[1] = {
+static const arc arcs_78_5[1] = {
{59, 4},
};
-static arc arcs_78_6[1] = {
+static const arc arcs_78_6[1] = {
{50, 5},
};
-static arc arcs_78_7[1] = {
+static const arc arcs_78_7[1] = {
{0, 7},
};
static state states_78[8] = {
@@ -1822,14 +1822,14 @@ static state states_78[8] = {
{1, arcs_78_6},
{1, arcs_78_7},
};
-static arc arcs_79_0[1] = {
+static const arc arcs_79_0[1] = {
{174, 1},
};
-static arc arcs_79_1[2] = {
+static const arc arcs_79_1[2] = {
{66, 2},
{0, 1},
};
-static arc arcs_79_2[2] = {
+static const arc arcs_79_2[2] = {
{174, 1},
{0, 2},
};
@@ -1838,21 +1838,21 @@ static state states_79[3] = {
{2, arcs_79_1},
{2, arcs_79_2},
};
-static arc arcs_80_0[3] = {
+static const arc arcs_80_0[3] = {
{6, 1},
{64, 1},
{60, 2},
};
-static arc arcs_80_1[1] = {
+static const arc arcs_80_1[1] = {
{60, 3},
};
-static arc arcs_80_2[4] = {
+static const arc arcs_80_2[4] = {
{130, 1},
{67, 1},
{170, 3},
{0, 2},
};
-static arc arcs_80_3[1] = {
+static const arc arcs_80_3[1] = {
{0, 3},
};
static state states_80[4] = {
@@ -1861,34 +1861,34 @@ static state states_80[4] = {
{4, arcs_80_2},
{1, arcs_80_3},
};
-static arc arcs_81_0[2] = {
+static const arc arcs_81_0[2] = {
{170, 1},
{176, 1},
};
-static arc arcs_81_1[1] = {
+static const arc arcs_81_1[1] = {
{0, 1},
};
static state states_81[2] = {
{2, arcs_81_0},
{1, arcs_81_1},
};
-static arc arcs_82_0[1] = {
+static const arc arcs_82_0[1] = {
{21, 1},
};
-static arc arcs_82_1[1] = {
+static const arc arcs_82_1[1] = {
{98, 2},
};
-static arc arcs_82_2[1] = {
+static const arc arcs_82_2[1] = {
{122, 3},
};
-static arc arcs_82_3[1] = {
+static const arc arcs_82_3[1] = {
{132, 4},
};
-static arc arcs_82_4[2] = {
+static const arc arcs_82_4[2] = {
{175, 5},
{0, 4},
};
-static arc arcs_82_5[1] = {
+static const arc arcs_82_5[1] = {
{0, 5},
};
static state states_82[6] = {
@@ -1899,14 +1899,14 @@ static state states_82[6] = {
{2, arcs_82_4},
{1, arcs_82_5},
};
-static arc arcs_83_0[2] = {
+static const arc arcs_83_0[2] = {
{38, 1},
{177, 2},
};
-static arc arcs_83_1[1] = {
+static const arc arcs_83_1[1] = {
{177, 2},
};
-static arc arcs_83_2[1] = {
+static const arc arcs_83_2[1] = {
{0, 2},
};
static state states_83[3] = {
@@ -1914,17 +1914,17 @@ static state states_83[3] = {
{1, arcs_83_1},
{1, arcs_83_2},
};
-static arc arcs_84_0[1] = {
+static const arc arcs_84_0[1] = {
{24, 1},
};
-static arc arcs_84_1[1] = {
+static const arc arcs_84_1[1] = {
{133, 2},
};
-static arc arcs_84_2[2] = {
+static const arc arcs_84_2[2] = {
{175, 3},
{0, 2},
};
-static arc arcs_84_3[1] = {
+static const arc arcs_84_3[1] = {
{0, 3},
};
static state states_84[4] = {
@@ -1933,24 +1933,24 @@ static state states_84[4] = {
{2, arcs_84_2},
{1, arcs_84_3},
};
-static arc arcs_85_0[1] = {
+static const arc arcs_85_0[1] = {
{40, 1},
};
-static arc arcs_85_1[1] = {
+static const arc arcs_85_1[1] = {
{0, 1},
};
static state states_85[2] = {
{1, arcs_85_0},
{1, arcs_85_1},
};
-static arc arcs_86_0[1] = {
+static const arc arcs_86_0[1] = {
{35, 1},
};
-static arc arcs_86_1[2] = {
+static const arc arcs_86_1[2] = {
{179, 2},
{0, 1},
};
-static arc arcs_86_2[1] = {
+static const arc arcs_86_2[1] = {
{0, 2},
};
static state states_86[3] = {
@@ -1958,14 +1958,14 @@ static state states_86[3] = {
{2, arcs_86_1},
{1, arcs_86_2},
};
-static arc arcs_87_0[2] = {
+static const arc arcs_87_0[2] = {
{22, 1},
{80, 2},
};
-static arc arcs_87_1[1] = {
+static const arc arcs_87_1[1] = {
{60, 2},
};
-static arc arcs_87_2[1] = {
+static const arc arcs_87_2[1] = {
{0, 2},
};
static state states_87[3] = {
@@ -1973,28 +1973,28 @@ static state states_87[3] = {
{1, arcs_87_1},
{1, arcs_87_2},
};
-static arc arcs_88_0[2] = {
+static const arc arcs_88_0[2] = {
{2, 1},
{4, 2},
};
-static arc arcs_88_1[2] = {
+static const arc arcs_88_1[2] = {
{128, 3},
{61, 4},
};
-static arc arcs_88_2[1] = {
+static const arc arcs_88_2[1] = {
{0, 2},
};
-static arc arcs_88_3[1] = {
+static const arc arcs_88_3[1] = {
{45, 5},
};
-static arc arcs_88_4[1] = {
+static const arc arcs_88_4[1] = {
{2, 6},
};
-static arc arcs_88_5[2] = {
+static const arc arcs_88_5[2] = {
{129, 2},
{45, 5},
};
-static arc arcs_88_6[1] = {
+static const arc arcs_88_6[1] = {
{128, 3},
};
static state states_88[7] = {
@@ -2006,14 +2006,14 @@ static state states_88[7] = {
{2, arcs_88_5},
{1, arcs_88_6},
};
-static arc arcs_89_0[1] = {
+static const arc arcs_89_0[1] = {
{181, 1},
};
-static arc arcs_89_1[2] = {
+static const arc arcs_89_1[2] = {
{44, 2},
{2, 1},
};
-static arc arcs_89_2[1] = {
+static const arc arcs_89_2[1] = {
{0, 2},
};
static state states_89[3] = {
@@ -2021,23 +2021,23 @@ static state states_89[3] = {
{2, arcs_89_1},
{1, arcs_89_2},
};
-static arc arcs_90_0[1] = {
+static const arc arcs_90_0[1] = {
{5, 1},
};
-static arc arcs_90_1[2] = {
+static const arc arcs_90_1[2] = {
{50, 2},
{182, 3},
};
-static arc arcs_90_2[1] = {
+static const arc arcs_90_2[1] = {
{58, 4},
};
-static arc arcs_90_3[1] = {
+static const arc arcs_90_3[1] = {
{50, 2},
};
-static arc arcs_90_4[1] = {
+static const arc arcs_90_4[1] = {
{60, 5},
};
-static arc arcs_90_5[1] = {
+static const arc arcs_90_5[1] = {
{0, 5},
};
static state states_90[6] = {
@@ -2048,50 +2048,50 @@ static state states_90[6] = {
{1, arcs_90_4},
{1, arcs_90_5},
};
-static arc arcs_91_0[3] = {
+static const arc arcs_91_0[3] = {
{6, 1},
{64, 2},
{60, 3},
};
-static arc arcs_91_1[3] = {
+static const arc arcs_91_1[3] = {
{66, 4},
{60, 5},
{0, 1},
};
-static arc arcs_91_2[1] = {
+static const arc arcs_91_2[1] = {
{60, 6},
};
-static arc arcs_91_3[2] = {
+static const arc arcs_91_3[2] = {
{66, 7},
{0, 3},
};
-static arc arcs_91_4[2] = {
+static const arc arcs_91_4[2] = {
{64, 2},
{60, 5},
};
-static arc arcs_91_5[2] = {
+static const arc arcs_91_5[2] = {
{66, 4},
{0, 5},
};
-static arc arcs_91_6[1] = {
+static const arc arcs_91_6[1] = {
{0, 6},
};
-static arc arcs_91_7[4] = {
+static const arc arcs_91_7[4] = {
{6, 8},
{64, 2},
{60, 3},
{0, 7},
};
-static arc arcs_91_8[3] = {
+static const arc arcs_91_8[3] = {
{66, 9},
{60, 10},
{0, 8},
};
-static arc arcs_91_9[2] = {
+static const arc arcs_91_9[2] = {
{64, 2},
{60, 10},
};
-static arc arcs_91_10[2] = {
+static const arc arcs_91_10[2] = {
{66, 9},
{0, 10},
};
@@ -2108,7 +2108,7 @@ static state states_91[11] = {
{2, arcs_91_9},
{2, arcs_91_10},
};
-static dfa dfas[92] = {
+static const dfa dfas[92] = {
{256, "single_input", 3, states_0,
"\344\377\377\377\377\007\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
{257, "file_input", 2, states_1,
@@ -2294,7 +2294,7 @@ static dfa dfas[92] = {
{347, "typelist", 11, states_91,
"\340\173\000\024\260\007\000\000\001\000\000\000\000\000\000\000\000\000\000\000\000\000\000"},
};
-static label labels[183] = {
+static const label labels[183] = {
{0, "EMPTY"},
{256, 0},
{4, 0},
1
0
![](https://secure.gravatar.com/avatar/cc7737cd64a84f1b5c61a160798e97ee.jpg?s=120&d=mm&r=g)
23 Apr '19
https://github.com/python/cpython/commit/fb8c7d53326d137785ca311bfc48c8284d…
commit: fb8c7d53326d137785ca311bfc48c8284da46770
branch: master
author: Raymond Hettinger <rhettinger(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-04-23T01:46:18-07:00
summary:
bpo-36018: Make "seed" into a keyword only argument (GH-12921)
files:
M Doc/library/statistics.rst
M Lib/statistics.py
diff --git a/Doc/library/statistics.rst b/Doc/library/statistics.rst
index b62bcfdffd0b..fb7df4e7188a 100644
--- a/Doc/library/statistics.rst
+++ b/Doc/library/statistics.rst
@@ -607,7 +607,7 @@ of applications in statistics.
:exc:`StatisticsError` because it takes at least one point to estimate
a central value and at least two points to estimate dispersion.
- .. method:: NormalDist.samples(n, seed=None)
+ .. method:: NormalDist.samples(n, *, seed=None)
Generates *n* random samples for a given mean and standard deviation.
Returns a :class:`list` of :class:`float` values.
diff --git a/Lib/statistics.py b/Lib/statistics.py
index 4a0978cbcd9c..19db8e828010 100644
--- a/Lib/statistics.py
+++ b/Lib/statistics.py
@@ -797,7 +797,7 @@ def from_samples(cls, data):
xbar = fmean(data)
return cls(xbar, stdev(data, xbar))
- def samples(self, n, seed=None):
+ def samples(self, n, *, seed=None):
'Generate *n* samples for a given mean and standard deviation.'
gauss = random.gauss if seed is None else random.Random(seed).gauss
mu, sigma = self.mu, self.sigma
1
0
![](https://secure.gravatar.com/avatar/cc7737cd64a84f1b5c61a160798e97ee.jpg?s=120&d=mm&r=g)
bpo-35904: Add missing fmean() entry to the summary table (GH-12919)
by Raymond Hettinger 23 Apr '19
by Raymond Hettinger 23 Apr '19
23 Apr '19
https://github.com/python/cpython/commit/7280048690244e73b13f4f68b96c244bcb…
commit: 7280048690244e73b13f4f68b96c244bcb5434e8
branch: master
author: Raymond Hettinger <rhettinger(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-04-23T01:35:16-07:00
summary:
bpo-35904: Add missing fmean() entry to the summary table (GH-12919)
files:
M Lib/statistics.py
diff --git a/Lib/statistics.py b/Lib/statistics.py
index 05edfdf98e06..4a0978cbcd9c 100644
--- a/Lib/statistics.py
+++ b/Lib/statistics.py
@@ -11,6 +11,7 @@
Function Description
================== ==================================================
mean Arithmetic mean (average) of data.
+fmean Fast, floating point arithmetic mean.
geometric_mean Geometric mean of data.
harmonic_mean Harmonic mean of data.
median Median (middle value) of data.
1
0
![](https://secure.gravatar.com/avatar/cc7737cd64a84f1b5c61a160798e97ee.jpg?s=120&d=mm&r=g)
Document that TestCase.assertCountEqual() can take iterables (GH-686)
by Raymond Hettinger 23 Apr '19
by Raymond Hettinger 23 Apr '19
23 Apr '19
https://github.com/python/cpython/commit/39baace622564867f55cea49483dd1443b…
commit: 39baace622564867f55cea49483dd1443b8655e3
branch: master
author: jkleint <jkleint(a)users.noreply.github.com>
committer: Raymond Hettinger <rhettinger(a)users.noreply.github.com>
date: 2019-04-23T01:34:29-07:00
summary:
Document that TestCase.assertCountEqual() can take iterables (GH-686)
files:
M Lib/unittest/case.py
diff --git a/Lib/unittest/case.py b/Lib/unittest/case.py
index 972a4658b17b..8ff2546fc207 100644
--- a/Lib/unittest/case.py
+++ b/Lib/unittest/case.py
@@ -1244,9 +1244,8 @@ def assertDictContainsSubset(self, subset, dictionary, msg=None):
def assertCountEqual(self, first, second, msg=None):
- """An unordered sequence comparison asserting that the same elements,
- regardless of order. If the same element occurs more than once,
- it verifies that the elements occur the same number of times.
+ """Asserts that two iterables have the same elements, the same number of
+ times, without regard to order.
self.assertEqual(Counter(list(first)),
Counter(list(second)))
1
0
![](https://secure.gravatar.com/avatar/cc7737cd64a84f1b5c61a160798e97ee.jpg?s=120&d=mm&r=g)
Add module specification: itemgetter -> operator.itemgetter (GH-12823)
by Raymond Hettinger 23 Apr '19
by Raymond Hettinger 23 Apr '19
23 Apr '19
https://github.com/python/cpython/commit/b4c7f39bbf8f16a0da758601b33aec3ba5…
commit: b4c7f39bbf8f16a0da758601b33aec3ba531c8d6
branch: master
author: Jakub Molinski <jakub(a)molinski.dev>
committer: Raymond Hettinger <rhettinger(a)users.noreply.github.com>
date: 2019-04-23T01:30:30-07:00
summary:
Add module specification: itemgetter -> operator.itemgetter (GH-12823)
files:
M Doc/library/itertools.rst
diff --git a/Doc/library/itertools.rst b/Doc/library/itertools.rst
index 3d4e5836cf20..b3a0a5f5192d 100644
--- a/Doc/library/itertools.rst
+++ b/Doc/library/itertools.rst
@@ -827,7 +827,7 @@ which incur interpreter overhead.
"List unique elements, preserving order. Remember only the element just seen."
# unique_justseen('AAAABBBCCDAABBB') --> A B C D A B
# unique_justseen('ABBCcAD', str.lower) --> A B C A D
- return map(next, map(itemgetter(1), groupby(iterable, key)))
+ return map(next, map(operator.itemgetter(1), groupby(iterable, key)))
def iter_except(func, exception, first=None):
""" Call a function repeatedly until an exception is raised.
1
0
https://github.com/python/cpython/commit/8a9a6b443c57e47e9d10ed7775479aada4…
commit: 8a9a6b443c57e47e9d10ed7775479aada4dac719
branch: 3.7
author: Victor Stinner <vstinner(a)redhat.com>
committer: GitHub <noreply(a)github.com>
date: 2019-04-23T10:26:11+02:00
summary:
[3.7] bpo-9566: Fix compiler warnings on Windows (GH-12920)
* bpo-9566: Fix compiler warnings in gcmodule.c (GH-11010)
Change PyDTrace_GC_DONE() argument type from int to Py_ssize_t.
(cherry picked from commit edad38e3e05586ba58291f47756eb3fb808f5577)
* bpo-30465: Fix C downcast warning on Windows in ast.c (#6593)
ast.c: fstring_fix_node_location() downcasts a pointer difference to
a C int. Replace int with Py_ssize_t to fix the compiler warning.
(cherry picked from commit fb7e7992beec7f76cc2db77ab6ce1e86446bfccf)
* bpo-9566: Fix compiler warnings in peephole.c (GH-10652)
(cherry picked from commit 028f0ef4f3111d2b3fc5b971642e337ba7990873)
* bpo-27645, sqlite: Fix integer overflow on sleep (#6594)
Use the _PyTime_t type and round away from zero (ROUND_UP,
_PyTime_ROUND_TIMEOUT) the sleep duration, when converting a Python
object to seconds and then to milliseconds. Raise an OverflowError in
case of overflow.
Previously the (int)double conversion rounded towards zero
(ROUND_DOWN).
(cherry picked from commit ca405017d5e776a2e3d9291236e62d2e09489dd2)
files:
M Include/pydtrace.h
M Modules/_sqlite/connection.c
M Python/ast.c
M Python/peephole.c
diff --git a/Include/pydtrace.h b/Include/pydtrace.h
index 037961d429c6..7a04278166b0 100644
--- a/Include/pydtrace.h
+++ b/Include/pydtrace.h
@@ -29,7 +29,7 @@ static inline void PyDTrace_LINE(const char *arg0, const char *arg1, int arg2) {
static inline void PyDTrace_FUNCTION_ENTRY(const char *arg0, const char *arg1, int arg2) {}
static inline void PyDTrace_FUNCTION_RETURN(const char *arg0, const char *arg1, int arg2) {}
static inline void PyDTrace_GC_START(int arg0) {}
-static inline void PyDTrace_GC_DONE(int arg0) {}
+static inline void PyDTrace_GC_DONE(Py_ssize_t arg0) {}
static inline void PyDTrace_INSTANCE_NEW_START(int arg0) {}
static inline void PyDTrace_INSTANCE_NEW_DONE(int arg0) {}
static inline void PyDTrace_INSTANCE_DELETE_START(int arg0) {}
diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c
index d43286a2d34d..9eb61c18f304 100644
--- a/Modules/_sqlite/connection.c
+++ b/Modules/_sqlite/connection.c
@@ -1462,17 +1462,33 @@ pysqlite_connection_backup(pysqlite_Connection *self, PyObject *args, PyObject *
const char *name = "main";
int rc;
int callback_error = 0;
- double sleep_secs = 0.250;
+ PyObject *sleep_obj = NULL;
+ int sleep_ms = 250;
sqlite3 *bck_conn;
sqlite3_backup *bck_handle;
static char *keywords[] = {"target", "pages", "progress", "name", "sleep", NULL};
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!|$iOsd:backup", keywords,
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!|$iOsO:backup", keywords,
&pysqlite_ConnectionType, &target,
- &pages, &progress, &name, &sleep_secs)) {
+ &pages, &progress, &name, &sleep_obj)) {
return NULL;
}
+ if (sleep_obj != NULL) {
+ _PyTime_t sleep_secs;
+ if (_PyTime_FromSecondsObject(&sleep_secs, sleep_obj,
+ _PyTime_ROUND_TIMEOUT)) {
+ return NULL;
+ }
+ _PyTime_t ms = _PyTime_AsMilliseconds(sleep_secs,
+ _PyTime_ROUND_TIMEOUT);
+ if (ms < INT_MIN || ms > INT_MAX) {
+ PyErr_SetString(PyExc_OverflowError, "sleep is too large");
+ return NULL;
+ }
+ sleep_ms = (int)ms;
+ }
+
if (!pysqlite_check_connection((pysqlite_Connection *)target)) {
return NULL;
}
@@ -1532,7 +1548,7 @@ pysqlite_connection_backup(pysqlite_Connection *self, PyObject *args, PyObject *
the engine could not make any progress */
if (rc == SQLITE_BUSY || rc == SQLITE_LOCKED) {
Py_BEGIN_ALLOW_THREADS
- sqlite3_sleep(sleep_secs * 1000.0);
+ sqlite3_sleep(sleep_ms);
Py_END_ALLOW_THREADS
}
} while (rc == SQLITE_OK || rc == SQLITE_BUSY || rc == SQLITE_LOCKED);
diff --git a/Python/ast.c b/Python/ast.c
index 1e182c7d782a..ce61375ea951 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -4282,7 +4282,7 @@ fstring_fix_node_location(const node *parent, node *n, char *expr_str)
break;
start--;
}
- cols += substr - start;
+ cols += (int)(substr - start);
/* Fix lineno in mulitline strings. */
while ((substr = strchr(substr + 1, '\n')))
lines--;
diff --git a/Python/peephole.c b/Python/peephole.c
index a3b078fdf1d4..95b3dbb6bf51 100644
--- a/Python/peephole.c
+++ b/Python/peephole.c
@@ -152,6 +152,15 @@ fold_tuple_on_constants(_Py_CODEUNIT *codestr, Py_ssize_t codelen,
PyTuple_SET_ITEM(newconst, i, constant);
}
+ Py_ssize_t index = PyList_GET_SIZE(consts);
+#if SIZEOF_SIZE_T > SIZEOF_INT
+ if ((size_t)index >= UINT_MAX - 1) {
+ Py_DECREF(newconst);
+ PyErr_SetString(PyExc_OverflowError, "too many constants");
+ return -1;
+ }
+#endif
+
/* Append folded constant onto consts */
if (PyList_Append(consts, newconst)) {
Py_DECREF(newconst);
@@ -160,7 +169,7 @@ fold_tuple_on_constants(_Py_CODEUNIT *codestr, Py_ssize_t codelen,
Py_DECREF(newconst);
return copy_op_arg(codestr, c_start, LOAD_CONST,
- PyList_GET_SIZE(consts)-1, opcode_end);
+ (unsigned int)index, opcode_end);
}
static unsigned int *
@@ -223,7 +232,7 @@ PyObject *
PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
PyObject *lnotab_obj)
{
- Py_ssize_t h, i, nexti, op_start, codelen, tgt;
+ Py_ssize_t h, i, nexti, op_start, tgt;
unsigned int j, nops;
unsigned char opcode, nextop;
_Py_CODEUNIT *codestr = NULL;
@@ -251,17 +260,22 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
the peephole optimizer doesn't modify line numbers. */
assert(PyBytes_Check(code));
- codelen = PyBytes_GET_SIZE(code);
- assert(codelen % sizeof(_Py_CODEUNIT) == 0);
+ Py_ssize_t codesize = PyBytes_GET_SIZE(code);
+ assert(codesize % sizeof(_Py_CODEUNIT) == 0);
+ Py_ssize_t codelen = codesize / sizeof(_Py_CODEUNIT);
+ if (codelen > INT_MAX) {
+ /* Python assembler is limited to INT_MAX: see assembler.a_offset in
+ compile.c. */
+ goto exitUnchanged;
+ }
/* Make a modifiable copy of the code string */
- codestr = (_Py_CODEUNIT *)PyMem_Malloc(codelen);
+ codestr = (_Py_CODEUNIT *)PyMem_Malloc(codesize);
if (codestr == NULL) {
PyErr_NoMemory();
goto exitError;
}
- memcpy(codestr, PyBytes_AS_STRING(code), codelen);
- codelen /= sizeof(_Py_CODEUNIT);
+ memcpy(codestr, PyBytes_AS_STRING(code), codesize);
blocks = markblocks(codestr, codelen);
if (blocks == NULL)
@@ -359,7 +373,11 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
jump past it), and all conditional jumps pop their
argument when they're not taken (so change the
first jump to pop its argument when it's taken). */
- h = set_arg(codestr, i, (tgt + 1) * sizeof(_Py_CODEUNIT));
+ Py_ssize_t arg = (tgt + 1);
+ /* cannot overflow: codelen <= INT_MAX */
+ assert((size_t)arg <= UINT_MAX / sizeof(_Py_CODEUNIT));
+ arg *= sizeof(_Py_CODEUNIT);
+ h = set_arg(codestr, i, (unsigned int)arg);
j = opcode == JUMP_IF_TRUE_OR_POP ?
POP_JUMP_IF_TRUE : POP_JUMP_IF_FALSE;
}
@@ -392,17 +410,20 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
codestr[op_start] = PACKOPARG(RETURN_VALUE, 0);
fill_nops(codestr, op_start + 1, i + 1);
} else if (UNCONDITIONAL_JUMP(_Py_OPCODE(codestr[tgt]))) {
- j = GETJUMPTGT(codestr, tgt);
+ size_t arg = GETJUMPTGT(codestr, tgt);
if (opcode == JUMP_FORWARD) { /* JMP_ABS can go backwards */
opcode = JUMP_ABSOLUTE;
} else if (!ABSOLUTE_JUMP(opcode)) {
- if ((Py_ssize_t)j < i + 1) {
+ if (arg < (size_t)(i + 1)) {
break; /* No backward relative jumps */
}
- j -= i + 1; /* Calc relative jump addr */
+ arg -= i + 1; /* Calc relative jump addr */
}
- j *= sizeof(_Py_CODEUNIT);
- copy_op_arg(codestr, op_start, opcode, j, i + 1);
+ /* cannot overflow: codelen <= INT_MAX */
+ assert(arg <= (UINT_MAX / sizeof(_Py_CODEUNIT)));
+ arg *= sizeof(_Py_CODEUNIT);
+ copy_op_arg(codestr, op_start, opcode,
+ (unsigned int)arg, i + 1);
}
break;
@@ -422,11 +443,14 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
/* Fixup lnotab */
for (i = 0, nops = 0; i < codelen; i++) {
- assert(i - nops <= INT_MAX);
+ size_t block = (size_t)i - nops;
+ /* cannot overflow: codelen <= INT_MAX */
+ assert(block <= UINT_MAX);
/* original code offset => new code offset */
- blocks[i] = i - nops;
- if (_Py_OPCODE(codestr[i]) == NOP)
+ blocks[i] = (unsigned int)block;
+ if (_Py_OPCODE(codestr[i]) == NOP) {
nops++;
+ }
}
cum_orig_offset = 0;
last_offset = 0;
@@ -473,12 +497,14 @@ PyCode_Optimize(PyObject *code, PyObject* consts, PyObject *names,
j *= sizeof(_Py_CODEUNIT);
break;
}
- nexti = i - op_start + 1;
- if (instrsize(j) > nexti)
+ Py_ssize_t ilen = i - op_start + 1;
+ if (instrsize(j) > ilen) {
goto exitUnchanged;
- /* If instrsize(j) < nexti, we'll emit EXTENDED_ARG 0 */
- write_op_arg(codestr + h, opcode, j, nexti);
- h += nexti;
+ }
+ assert(ilen <= INT_MAX);
+ /* If instrsize(j) < ilen, we'll emit EXTENDED_ARG 0 */
+ write_op_arg(codestr + h, opcode, j, (int)ilen);
+ h += ilen;
}
assert(h + (Py_ssize_t)nops == codelen);
1
0
https://github.com/python/cpython/commit/9013ccf6d8037f6ae78145a42d194141cb…
commit: 9013ccf6d8037f6ae78145a42d194141cb10d332
branch: master
author: Raymond Hettinger <rhettinger(a)users.noreply.github.com>
committer: GitHub <noreply(a)github.com>
date: 2019-04-23T00:06:35-07:00
summary:
bpo-36546: Add statistics.quantiles() (#12710)
files:
A Misc/NEWS.d/next/Library/2019-04-06-14-23-00.bpo-36546.YXjbyY.rst
M Doc/library/statistics.rst
M Doc/whatsnew/3.8.rst
M Lib/statistics.py
M Lib/test/test_statistics.py
diff --git a/Doc/library/statistics.rst b/Doc/library/statistics.rst
index 8bb2bdf7b697..b62bcfdffd0b 100644
--- a/Doc/library/statistics.rst
+++ b/Doc/library/statistics.rst
@@ -48,6 +48,7 @@ or sample.
:func:`median_grouped` Median, or 50th percentile, of grouped data.
:func:`mode` Single mode (most common value) of discrete or nominal data.
:func:`multimode` List of modes (most common values) of discrete or nomimal data.
+:func:`quantiles` Divide data into intervals with equal probability.
======================= ===============================================================
Measures of spread
@@ -499,6 +500,53 @@ However, for reading convenience, most of the examples show sorted sequences.
:func:`pvariance` function as the *mu* parameter to get the variance of a
sample.
+.. function:: quantiles(dist, *, n=4, method='exclusive')
+
+ Divide *dist* into *n* continuous intervals with equal probability.
+ Returns a list of ``n - 1`` cut points separating the intervals.
+
+ Set *n* to 4 for quartiles (the default). Set *n* to 10 for deciles. Set
+ *n* to 100 for percentiles which gives the 99 cuts points that separate
+ *dist* in to 100 equal sized groups. Raises :exc:`StatisticsError` if *n*
+ is not least 1.
+
+ The *dist* can be any iterable containing sample data or it can be an
+ instance of a class that defines an :meth:`~inv_cdf` method.
+ Raises :exc:`StatisticsError` if there are not at least two data points.
+
+ For sample data, the cut points are linearly interpolated from the
+ two nearest data points. For example, if a cut point falls one-third
+ of the distance between two sample values, ``100`` and ``112``, the
+ cut-point will evaluate to ``104``. Other selection methods may be
+ offered in the future (for example choose ``100`` as the nearest
+ value or compute ``106`` as the midpoint). This might matter if
+ there are too few samples for a given number of cut points.
+
+ If *method* is set to *inclusive*, *dist* is treated as population data.
+ The minimum value is treated as the 0th percentile and the maximum
+ value is treated as the 100th percentile. If *dist* is an instance of
+ a class that defines an :meth:`~inv_cdf` method, setting *method*
+ has no effect.
+
+ .. doctest::
+
+ # Decile cut points for empirically sampled data
+ >>> data = [105, 129, 87, 86, 111, 111, 89, 81, 108, 92, 110,
+ ... 100, 75, 105, 103, 109, 76, 119, 99, 91, 103, 129,
+ ... 106, 101, 84, 111, 74, 87, 86, 103, 103, 106, 86,
+ ... 111, 75, 87, 102, 121, 111, 88, 89, 101, 106, 95,
+ ... 103, 107, 101, 81, 109, 104]
+ >>> [round(q, 1) for q in quantiles(data, n=10)]
+ [81.0, 86.2, 89.0, 99.4, 102.5, 103.6, 106.0, 109.8, 111.0]
+
+ >>> # Quartile cut points for the standard normal distibution
+ >>> Z = NormalDist()
+ >>> [round(q, 4) for q in quantiles(Z, n=4)]
+ [-0.6745, 0.0, 0.6745]
+
+ .. versionadded:: 3.8
+
+
Exceptions
----------
@@ -606,7 +654,7 @@ of applications in statistics.
<http://www.iceaaonline.com/ready/wp-content/uploads/2014/06/MM-9-Presentati…>`_
between two normal distributions, giving a measure of agreement.
Returns a value between 0.0 and 1.0 giving `the overlapping area for
- two probability density functions
+ the two probability density functions
<https://www.rasch.org/rmt/rmt101r.htm>`_.
Instances of :class:`NormalDist` support addition, subtraction,
@@ -649,8 +697,8 @@ of applications in statistics.
For example, given `historical data for SAT exams
<https://blog.prepscholar.com/sat-standard-deviation>`_ showing that scores
are normally distributed with a mean of 1060 and a standard deviation of 192,
-determine the percentage of students with scores between 1100 and 1200, after
-rounding to the nearest whole number:
+determine the percentage of students with test scores between 1100 and
+1200, after rounding to the nearest whole number:
.. doctest::
diff --git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst
index f866f9ccb8c1..bd7ad3f87cb5 100644
--- a/Doc/whatsnew/3.8.rst
+++ b/Doc/whatsnew/3.8.rst
@@ -337,6 +337,10 @@ Added :func:`statistics.geometric_mean()`
Added :func:`statistics.multimode` that returns a list of the most
common values. (Contributed by Raymond Hettinger in :issue:`35892`.)
+Added :func:`statistics.quantiles` that divides data or a distribution
+in to equiprobable intervals (e.g. quartiles, deciles, or percentiles).
+(Contributed by Raymond Hettinger in :issue:`36546`.)
+
Added :class:`statistics.NormalDist`, a tool for creating
and manipulating normal distributions of a random variable.
(Contributed by Raymond Hettinger in :issue:`36018`.)
diff --git a/Lib/statistics.py b/Lib/statistics.py
index 262ad976b65c..05edfdf98e06 100644
--- a/Lib/statistics.py
+++ b/Lib/statistics.py
@@ -7,9 +7,9 @@
Calculating averages
--------------------
-================== =============================================
+================== ==================================================
Function Description
-================== =============================================
+================== ==================================================
mean Arithmetic mean (average) of data.
geometric_mean Geometric mean of data.
harmonic_mean Harmonic mean of data.
@@ -19,7 +19,8 @@
median_grouped Median, or 50th percentile, of grouped data.
mode Mode (most common value) of data.
multimode List of modes (most common values of data).
-================== =============================================
+quantiles Divide data into intervals with equal probability.
+================== ==================================================
Calculate the arithmetic mean ("the average") of data:
@@ -78,7 +79,7 @@
"""
-__all__ = [ 'StatisticsError', 'NormalDist',
+__all__ = [ 'StatisticsError', 'NormalDist', 'quantiles',
'pstdev', 'pvariance', 'stdev', 'variance',
'median', 'median_low', 'median_high', 'median_grouped',
'mean', 'mode', 'multimode', 'harmonic_mean', 'fmean',
@@ -562,6 +563,54 @@ def multimode(data):
maxcount, mode_items = next(groupby(counts, key=itemgetter(1)), (0, []))
return list(map(itemgetter(0), mode_items))
+def quantiles(dist, *, n=4, method='exclusive'):
+ '''Divide *dist* into *n* continuous intervals with equal probability.
+
+ Returns a list of (n - 1) cut points separating the intervals.
+
+ Set *n* to 4 for quartiles (the default). Set *n* to 10 for deciles.
+ Set *n* to 100 for percentiles which gives the 99 cuts points that
+ separate *dist* in to 100 equal sized groups.
+
+ The *dist* can be any iterable containing sample data or it can be
+ an instance of a class that defines an inv_cdf() method. For sample
+ data, the cut points are linearly interpolated between data points.
+
+ If *method* is set to *inclusive*, *dist* is treated as population
+ data. The minimum value is treated as the 0th percentile and the
+ maximum value is treated as the 100th percentile.
+ '''
+ # Possible future API extensions:
+ # quantiles(data, already_sorted=True)
+ # quantiles(data, cut_points=[0.02, 0.25, 0.50, 0.75, 0.98])
+ if n < 1:
+ raise StatisticsError('n must be at least 1')
+ if hasattr(dist, 'inv_cdf'):
+ return [dist.inv_cdf(i / n) for i in range(1, n)]
+ data = sorted(dist)
+ ld = len(data)
+ if ld < 2:
+ raise StatisticsError('must have at least two data points')
+ if method == 'inclusive':
+ m = ld - 1
+ result = []
+ for i in range(1, n):
+ j = i * m // n
+ delta = i*m - j*n
+ interpolated = (data[j] * (n - delta) + data[j+1] * delta) / n
+ result.append(interpolated)
+ return result
+ if method == 'exclusive':
+ m = ld + 1
+ result = []
+ for i in range(1, n):
+ j = i * m // n # rescale i to m/n
+ j = 1 if j < 1 else ld-1 if j > ld-1 else j # clamp to 1 .. ld-1
+ delta = i*m - j*n # exact integer math
+ interpolated = (data[j-1] * (n - delta) + data[j] * delta) / n
+ result.append(interpolated)
+ return result
+ raise ValueError(f'Unknown method: {method!r}')
# === Measures of spread ===
diff --git a/Lib/test/test_statistics.py b/Lib/test/test_statistics.py
index 4d397eb1265d..c988d7fd8be7 100644
--- a/Lib/test/test_statistics.py
+++ b/Lib/test/test_statistics.py
@@ -3,6 +3,7 @@
"""
+import bisect
import collections
import collections.abc
import copy
@@ -2038,6 +2039,7 @@ def test_compare_to_variance(self):
expected = math.sqrt(statistics.variance(data))
self.assertEqual(self.func(data), expected)
+
class TestGeometricMean(unittest.TestCase):
def test_basics(self):
@@ -2126,6 +2128,146 @@ def test_special_values(self):
with self.assertRaises(ValueError):
geometric_mean([Inf, -Inf])
+
+class TestQuantiles(unittest.TestCase):
+
+ def test_specific_cases(self):
+ # Match results computed by hand and cross-checked
+ # against the PERCENTILE.EXC function in MS Excel.
+ quantiles = statistics.quantiles
+ data = [120, 200, 250, 320, 350]
+ random.shuffle(data)
+ for n, expected in [
+ (1, []),
+ (2, [250.0]),
+ (3, [200.0, 320.0]),
+ (4, [160.0, 250.0, 335.0]),
+ (5, [136.0, 220.0, 292.0, 344.0]),
+ (6, [120.0, 200.0, 250.0, 320.0, 350.0]),
+ (8, [100.0, 160.0, 212.5, 250.0, 302.5, 335.0, 357.5]),
+ (10, [88.0, 136.0, 184.0, 220.0, 250.0, 292.0, 326.0, 344.0, 362.0]),
+ (12, [80.0, 120.0, 160.0, 200.0, 225.0, 250.0, 285.0, 320.0, 335.0,
+ 350.0, 365.0]),
+ (15, [72.0, 104.0, 136.0, 168.0, 200.0, 220.0, 240.0, 264.0, 292.0,
+ 320.0, 332.0, 344.0, 356.0, 368.0]),
+ ]:
+ self.assertEqual(expected, quantiles(data, n=n))
+ self.assertEqual(len(quantiles(data, n=n)), n - 1)
+ self.assertEqual(list(map(float, expected)),
+ quantiles(map(Decimal, data), n=n))
+ self.assertEqual(list(map(Decimal, expected)),
+ quantiles(map(Decimal, data), n=n))
+ self.assertEqual(list(map(Fraction, expected)),
+ quantiles(map(Fraction, data), n=n))
+ # Invariant under tranlation and scaling
+ def f(x):
+ return 3.5 * x - 1234.675
+ exp = list(map(f, expected))
+ act = quantiles(map(f, data), n=n)
+ self.assertTrue(all(math.isclose(e, a) for e, a in zip(exp, act)))
+ # Quartiles of a standard normal distribution
+ for n, expected in [
+ (1, []),
+ (2, [0.0]),
+ (3, [-0.4307, 0.4307]),
+ (4 ,[-0.6745, 0.0, 0.6745]),
+ ]:
+ actual = quantiles(statistics.NormalDist(), n=n)
+ self.assertTrue(all(math.isclose(e, a, abs_tol=0.0001)
+ for e, a in zip(expected, actual)))
+
+ def test_specific_cases_inclusive(self):
+ # Match results computed by hand and cross-checked
+ # against the PERCENTILE.INC function in MS Excel
+ # and against the quaatile() function in SciPy.
+ quantiles = statistics.quantiles
+ data = [100, 200, 400, 800]
+ random.shuffle(data)
+ for n, expected in [
+ (1, []),
+ (2, [300.0]),
+ (3, [200.0, 400.0]),
+ (4, [175.0, 300.0, 500.0]),
+ (5, [160.0, 240.0, 360.0, 560.0]),
+ (6, [150.0, 200.0, 300.0, 400.0, 600.0]),
+ (8, [137.5, 175, 225.0, 300.0, 375.0, 500.0,650.0]),
+ (10, [130.0, 160.0, 190.0, 240.0, 300.0, 360.0, 440.0, 560.0, 680.0]),
+ (12, [125.0, 150.0, 175.0, 200.0, 250.0, 300.0, 350.0, 400.0,
+ 500.0, 600.0, 700.0]),
+ (15, [120.0, 140.0, 160.0, 180.0, 200.0, 240.0, 280.0, 320.0, 360.0,
+ 400.0, 480.0, 560.0, 640.0, 720.0]),
+ ]:
+ self.assertEqual(expected, quantiles(data, n=n, method="inclusive"))
+ self.assertEqual(len(quantiles(data, n=n, method="inclusive")), n - 1)
+ self.assertEqual(list(map(float, expected)),
+ quantiles(map(Decimal, data), n=n, method="inclusive"))
+ self.assertEqual(list(map(Decimal, expected)),
+ quantiles(map(Decimal, data), n=n, method="inclusive"))
+ self.assertEqual(list(map(Fraction, expected)),
+ quantiles(map(Fraction, data), n=n, method="inclusive"))
+ # Invariant under tranlation and scaling
+ def f(x):
+ return 3.5 * x - 1234.675
+ exp = list(map(f, expected))
+ act = quantiles(map(f, data), n=n, method="inclusive")
+ self.assertTrue(all(math.isclose(e, a) for e, a in zip(exp, act)))
+ # Quartiles of a standard normal distribution
+ for n, expected in [
+ (1, []),
+ (2, [0.0]),
+ (3, [-0.4307, 0.4307]),
+ (4 ,[-0.6745, 0.0, 0.6745]),
+ ]:
+ actual = quantiles(statistics.NormalDist(), n=n, method="inclusive")
+ self.assertTrue(all(math.isclose(e, a, abs_tol=0.0001)
+ for e, a in zip(expected, actual)))
+
+ def test_equal_sized_groups(self):
+ quantiles = statistics.quantiles
+ total = 10_000
+ data = [random.expovariate(0.2) for i in range(total)]
+ while len(set(data)) != total:
+ data.append(random.expovariate(0.2))
+ data.sort()
+
+ # Cases where the group size exactly divides the total
+ for n in (1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000):
+ group_size = total // n
+ self.assertEqual(
+ [bisect.bisect(data, q) for q in quantiles(data, n=n)],
+ list(range(group_size, total, group_size)))
+
+ # When the group sizes can't be exactly equal, they should
+ # differ by no more than one
+ for n in (13, 19, 59, 109, 211, 571, 1019, 1907, 5261, 9769):
+ group_sizes = {total // n, total // n + 1}
+ pos = [bisect.bisect(data, q) for q in quantiles(data, n=n)]
+ sizes = {q - p for p, q in zip(pos, pos[1:])}
+ self.assertTrue(sizes <= group_sizes)
+
+ def test_error_cases(self):
+ quantiles = statistics.quantiles
+ StatisticsError = statistics.StatisticsError
+ with self.assertRaises(TypeError):
+ quantiles() # Missing arguments
+ with self.assertRaises(TypeError):
+ quantiles([10, 20, 30], 13, n=4) # Too many arguments
+ with self.assertRaises(TypeError):
+ quantiles([10, 20, 30], 4) # n is a positional argument
+ with self.assertRaises(StatisticsError):
+ quantiles([10, 20, 30], n=0) # n is zero
+ with self.assertRaises(StatisticsError):
+ quantiles([10, 20, 30], n=-1) # n is negative
+ with self.assertRaises(TypeError):
+ quantiles([10, 20, 30], n=1.5) # n is not an integer
+ with self.assertRaises(ValueError):
+ quantiles([10, 20, 30], method='X') # method is unknown
+ with self.assertRaises(StatisticsError):
+ quantiles([10], n=4) # not enough data points
+ with self.assertRaises(TypeError):
+ quantiles([10, None, 30], n=4) # data is non-numeric
+
+
class TestNormalDist(unittest.TestCase):
# General note on precision: The pdf(), cdf(), and overlap() methods
diff --git a/Misc/NEWS.d/next/Library/2019-04-06-14-23-00.bpo-36546.YXjbyY.rst b/Misc/NEWS.d/next/Library/2019-04-06-14-23-00.bpo-36546.YXjbyY.rst
new file mode 100644
index 000000000000..c69aadf3b69e
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2019-04-06-14-23-00.bpo-36546.YXjbyY.rst
@@ -0,0 +1 @@
+Add statistics.quantiles()
1
0
![](https://secure.gravatar.com/avatar/cc7737cd64a84f1b5c61a160798e97ee.jpg?s=120&d=mm&r=g)
[2.7] bpo-9194: Fix the bounds checking in winreg.c's fixupMultiSZ() (GH-12687) (GH-12916)
by Miss Islington (bot) 22 Apr '19
by Miss Islington (bot) 22 Apr '19
22 Apr '19
https://github.com/python/cpython/commit/84efbaecaf50b771cc7a95fd9dd9602bd3…
commit: 84efbaecaf50b771cc7a95fd9dd9602bd31de305
branch: 2.7
author: Zackery Spytz <zspytz(a)gmail.com>
committer: Miss Islington (bot) <31488909+miss-islington(a)users.noreply.github.com>
date: 2019-04-22T16:35:55-07:00
summary:
[2.7] bpo-9194: Fix the bounds checking in winreg.c's fixupMultiSZ() (GH-12687) (GH-12916)
(cherry picked from commit 56ed86490cb8221c874d432461d77702437f63e5)
https://bugs.python.org/issue9194
files:
M PC/_winreg.c
diff --git a/PC/_winreg.c b/PC/_winreg.c
index f0f8df33107b..3b887e075334 100644
--- a/PC/_winreg.c
+++ b/PC/_winreg.c
@@ -727,7 +727,7 @@ fixupMultiSZ(char **str, char *data, int len)
Q = data + len;
for (P = data, i = 0; P < Q && *P != '\0'; P++, i++) {
str[i] = P;
- for(; *P != '\0'; P++)
+ for (; P < Q && *P != '\0'; P++)
;
}
}
1
0