Subject: bug#24117: closed (Re: bug#24117: 25.1; url-http-create-request: Multibyte text in HTTP request)

From: [email-masked] (GNU bug Tracking System)
Date: Wed, 10 May 2017 00:41:02 +0000

Your bug report

#24117: 25.1; url-http-create-request: Multibyte text in HTTP request

which was filed against the emacs package, has been closed.

The explanation is attached below, along with your original report.
If you require more details, please reply to [email-masked].

-- 
24117: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=24117
GNU Bug Tracking System
Contact [email-masked] with problems

Subject: Re: bug#24117: 25.1; url-http-create-request: Multibyte text in HTTP request
From: Dmitry Gutov <[email-masked]>
To: Lars Ingebrigtsen <[email-masked]>
Cc: [email-masked], Ted Zlatanov <[email-masked]>, [email-masked], [email-masked]
Date: Wed, 10 May 2017 03:40:07 +0300
List-Id: <debbugs-submit.debbugs.gnu.org>

On 08.05.2017 23:57, Lars Ingebrigtsen wrote:

> The utf-8 encoding does seem superfluous, especially since
> url-hexify-string also does the encoding...

Simplified and pushed. With that, I am closing the bug.

Thanks all.

Subject: 25.1; url-http-create-request: Multibyte text in HTTP request
From: Sho Takemori <[email-masked]>
To: [email-masked]
Date: Sun, 31 Jul 2016 17:26:37 +0900
List-Id: <debbugs-submit.debbugs.gnu.org>

I got an error "error in process sentinel: url-http-create-request:
Multibyte text in HTTP request" when I visited a Python file which contains
a multibyte character with `anaconda-eldoc-mode' turned on.

At first, I thought this was a bug of anaconda-mode. So I opened an issue
in github (https://github.com/proofit404/anaconda-mode/issues/189).

I guess `(= (string-bytes request) (length request))` in
`url-http-create-request' should be `(= (string-bytes url-http-data)
(length url-http-data))`, because `(= (string-bytes request) (length
request))` may be `nil' even if `(= (string-bytes url-http-data) (length
url-http-data))` is `t'.

Sho Takemori

In GNU Emacs 25.1.1 (x86_64-pc-linux-gnu, GTK+ Version 3.18.9)
 of 2016-07-26 built on HP-500-270jp
Repository revision: 0f0b191a5324115fe9e8c438eceef4043decf209
Windowing system distributor 'The X.Org Foundation', version 11.0.11803000
System Description: Ubuntu 16.04.1 LTS

Configured using:
 'configure --with-sound=no --with-modules'

Configured features:
XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK GPM DBUS GCONF GSETTINGS NOTIFY
ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB
TOOLKIT_SCROLL_BARS GTK3 X11 MODULES

Important settings:
  value of $LC_MONETARY: ja_JP.UTF-8
  value of $LC_NUMERIC: ja_JP.UTF-8
  value of $LC_TIME: ja_JP.UTF-8
  value of $LANG: ja_JP.UTF-8
  value of $XMODIFIERS: @im=ibus
  locale-coding-system: utf-8-unix

Major mode: Lisp Interaction

Minor modes in effect:
  diff-auto-refine-mode: t
  shell-dirtrack-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  tool-bar-mode: t
  menu-bar-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  line-number-mode: t
  transient-mark-mode: t

Recent messages:
MIME-Version: 1.0
Connection: keep-alive
Extension: Security/Digest Security/SSL
Host: 127.0.0.1:9001
Accept-encoding: gzip
Accept: */*
User-Agent: URL/Emacs
Content-length: 20552

{"jsonrpc":"2.0","id":1,"method":"eldoc","params":{"source":"# -*- coding:
utf-8 -*-\nimport itertools\nfrom itertools import groupby\n\nfrom sage.all
import mul\nfrom sage.arith.all import kronecker_symbol\nfrom
sage.functions.all import ceil, floor, sgn\nfrom sage.matrix.all import
(block_diagonal_matrix, block_matrix,\n
diagonal_matrix, identity_matrix, matrix)\nfrom sage.misc.all import
cached_function\nfrom sage.quadratic_forms.all import QuadraticForm,
least_quadratic_nonresidue\nfrom sage.rings.all import QQ, ZZ,
CyclotomicField, FiniteField, PolynomialRing\n\n\ndef
_index_of_gamma_0_gl_n(alpha, p):\n    ’’’\n    Returns delta(a1, ..., an)
defined in Shimura, Euler products and Eisenstein\n    series, pp 118,
(15.1.7).\n    ’’’\n    if p in ZZ:\n        p = ZZ(p)\n\n    def _bn(n):\n
       return mul(1 - p ** (-i) for i in xrange(1, n + 1))\n\n    e_r_ls =
[(k, len(list(v)))\n              for k, v in groupby(sorted(alpha), lambda
x: x)]\n    res = _bn(len(alpha)) / mul(_bn(r) for _, r in e_r_ls)\n    for
i, (ei, ri) in enumerate(e_r_ls):\n        for j, (ej, rj) in
enumerate(e_r_ls):\n            if i < j:\n                res *= p ** ((ej
- ei) * ri * rj)\n    return res\n\n\ndef _gl2_coset_gamma0(a, p):\n    w =
matrix([[0, -1],\n                [1, 0]])\n    for m12 in range(p ** a):\n
       yield matrix([[1, m12],\n                      [0, 1]])\n    for m21
in range(p ** (a - 1)):\n        m = matrix([[1, 0],\n
 [p * m21, 1]])\n        yield w * m\n\n\ndef _gl3_coset_gamma0(alpha,
p):\n    r’’’\n    Let alpha = [a0, a1, a2] with a0 <= a1 <= a2,\n    g =
diag([p^a0, p^a1, p^a2]), and Gamma0 = g^(-1) GL3(Z) g ∧ GL3(Z).\n
 Return a complete set Gamma0 \\ GL3(Z).\n    ’’’\n    if p in ZZ:\n
 p = ZZ(p)\n    a0, a1, a2 = alpha\n    if a0 < a1 < a2:\n        return
list(__gl3_coset_gamma0_distinct(a0, a1, a2, p))\n    elif a0 == a1 and a1
< a2:\n        return list(__gl3_coset_gamma0_2_1(a0, a2, p))\n    elif a0
< a1 and a1 == a2:\n        return list(__gl3_coset_gamma0_1_2(a0, a2,
p))\n    elif a0 == a1 == a2:\n        return [identity_matrix(ZZ, 3)]\n
 else:\n        raise ValueError\n\n\ndef __gl3_coset_gamma0_2_1(a1, a3,
p):\n    w23 = matrix([[1, 0, 0],\n                  [0, 0, 1],\n
       [0, 1, 0]])\n    for m13 in range(p ** (a3 - a1 - 1)):\n        for
m23 in range(p ** (a3 - a1 - 1)):\n            m = matrix([[1, 0, p *
m13],\n                        [0, 1, p * m23],\n
 [0, 0, 1]])\n            yield m\n\n    for m32 in range(p ** (a3 -
a1)):\n        m = matrix([[1, 0, 0],\n                    [0, 1, 0],\n
               [0, m32, 1]])\n        for g in _gl2_coset_gamma0(a3 - a1,
p):\n            n = block_diagonal_matrix(g, matrix([[1]]))\n
 yield w23 * m * n\n\n\ndef __gl3_coset_gamma0_1_2(a1, a2, p):\n    w12 =
matrix([[0, 1, 0],\n                  [1, 0, 0],\n                  [0, 0,
1]])\n\n    for m12 in range(p ** (a2 - a1 - 1)):\n        for m13 in
range(p ** (a2 - a1 - 1)):\n            m = matrix([[1, p * m12, p *
m13],\n                        [0, 1, 0],\n                        [0, 0,
1]])\n            yield m\n    for m21 in range(p ** (a2 - a1)):\n        m
= matrix([[1, 0, 0],\n                    [m21, 1, 0],\n
 [0, 0, 1]])\n        for g in _gl2_coset_gamma0(a2 - a1, p):\n
 n = block_diagonal_matrix(matrix([[1]]), g)\n            yield w12 * m *
n\n\n\ndef __gl3_coset_gamma0_distinct(a1, a2, a3, p):\n\n    w12 =
matrix([[0, 1, 0],\n                  [1, 0, 0],\n                  [0, 0,
1]])\n\n    w23 = matrix([[1, 0, 0],\n                  [0, 0, 1],\n
           [0, 1, 0]])\n\n    w13 = matrix([[0, 0, 1],\n
 [0, 1, 0],\n                  [1, 0, 0]])\n\n    w123 = matrix([[0, 1,
0],\n                   [0, 0, 1],\n                   [1, 0, 0]])\n\n
 w132 = matrix([[0, 0, 1],\n                   [1, 0, 0],\n
  [0, 1, 0]])\n\n    # w = 1\n    for m12 in range(p ** (a2 - a1 - 1)):\n
     for m13 in range(p ** (a3 - a1 - 1)):\n            for m23 in range(p
** (a3 - a2 - 1)):\n                yield matrix([[1, p * m12, p * m13],\n
                             [0, 1, p * m23],\n
 [0, 0, 1]])\n    # w = (12)\n    for m13 in range(p ** (a3 - a2 - 1)):\n
     for m21 in range(p ** (a2 - a1)):\n            for m23 in range(p **
(a3 - a1 - 1)):\n                m = matrix([[1, 0, p * m13],\n
               [m21, 1, p * m23],\n                            [0, 0,
1]])\n                yield w12 * m\n    # w = (23)\n    for m12 in range(p
** (a3 - a1 - 1)):\n        for m13 in range(p ** (a2 - a1 - 1)):\n
   for m32 in range(p ** (a3 - a2)):\n                m = matrix([[1, p *
m12, p * m13],\n                            [0, 1, 0],\n
         [0, m32, 1]])\n                yield w23 * m\n\n    # w = (13)\n
 for m21 in range(p ** (a3 - a2)):\n        for m31 in range(p ** (a3 -
a1)):\n            for m32 in range(p ** (a2 - a1)):\n                m =
matrix([[1, 0, 0],\n                            [m21, 1, 0],\n
               [m31, m32, 1]])\n                yield w13 * m\n\n    # w =
(123)\n    for m21 in range(p ** (a3 - a1)):\n        for m23 in range(p **
(a2 - a1 - 1)):\n            for m31 in range(p ** (a3 - a2)):\n
     m = matrix([[1, 0, 0],\n                            [m21, 1, p *
m23],\n                            [m31, 0, 1]])\n                yield
w123 * m\n    # w = (132)\n    for m12 in range(p ** (a3 - a2 - 1)):\n
   for m31 in range(p ** (a2 - a1)):\n            for m32 in range(p ** (a3
- a1)):\n                m = matrix([[1, p * m12, 0],\n
       [0, 1, 0],\n                            [m31, m32, 1]])\n
     yield w132 * m\n\n\nclass HalfIntMatElement(object):\n\n    def
__init__(self, T):\n        ’’’\n        :params T: half integral matrix of
size 3 or a list\n        ’’’\n        if isinstance(T, list):\n
 a, b, c, d, e, f = [ZZ(x) for x in T]\n            mat = matrix([[a, f /
2, e / 2],\n                          [f / 2, b, d / 2],\n
         [e / 2, d / 2, c]])\n        else:\n            mat = T\n
 self.__entries = tuple(mat.list())\n\n    def __eq__(self, other):\n
 if isinstance(other, HalfIntMatElement):\n            return
self.__entries == other.__entries\n        else:\n            raise
NotImplementedError\n\n    def __repr__(self):\n        return
self.T.__repr__()\n\n    def __hash__(self):\n        return
hash(self.__entries)\n\n    @property\n    def T(self):\n        return
matrix(3, self.__entries)\n\n    def right_action(self, g):\n        ’’’\n
       :param g: matrix of size n\n        return self[g] (Siegel’s
notation)\n        ’’’\n        S = g.transpose() * self.T * g\n
 return HalfIntMatElement(S)\n\n    def satisfy_cong_condition_tp(self, p,
alpha):\n        ’’’\n        Test if sum_{B mod D} exp(2pi T B D^(-1)) is
zero, where D = diag(p^a1, p^a2, a^a3),\n        a1, a2, a3 = alpha.\n
   ’’’\n        return (all(ZZ(self.T[i, i]) % p ** alpha[i] == 0 for i in
range(3)) and\n                all(ZZ(self.T[i, j] * 2) % p ** alpha[i] ==
0\n                    for i in range(3) for j in range(i + 1, 3)))\n\n
 def is_divisible_by(self, m):\n        ’’’\n        Test if self is
divisible by m\n        :param m: integer\n        ’’’\n        return
_half_int_mat_is_div_by(self.T, m)\n\n    def __floordiv__(self, other):\n
       S = matrix(QQ, 3)\n        for i in range(3):\n            S[i, i] =
ZZ(self.T[i, i]) // other\n        for i in range(3):\n            for j in
range(i + 1, 3):\n                S[i, j] = S[j, i] = (ZZ(self.T[i, j] * 2)
// other) / 2\n        return HalfIntMatElement(S)\n\n\ndef
alpha_list(dl):\n    ’’’\n    Return a list of (a0, a1, a2) with 0 <= a0 <=
a1 <= a2 <= dl\n    ’’’\n    return [(a0, a1, a2) for a0 in range(dl + 1)\n
           for a1 in range(a0, dl + 1) for a2 in range(a1, dl +
1)]\n\n\ndef tp_action_fourier_coeff(p, T, F):\n    ’’’\n    Return the Tth
Fourier coefficient of F|T(p), where F is a modular form.\n    :param p: a
prime number\n    :param T: a half integral matrix or an instance of
HalfIntMatElement\n    :param F: a dictionary or a Siegel modular form of
degree 3\n    ’’’\n    p = ZZ(p)\n    return
_action_fc_base(tp_action_fc_alist(p, T), F, T)\n\n\ndef
tp2_action_fourier_coeff(p, i, T, F):\n    ’’’\n    Similar to
tp_action_fourier_coeff for T_i(p^2).\n    ’’’\n    p = ZZ(p)\n    return
_action_fc_base(tp2_action_fc_alist(p, T, i), F, T)\n\n\ndef
_action_fc_base(ls, F, T):\n    if not isinstance(T, HalfIntMatElement):\n
       T = HalfIntMatElement(T)\n    res = 0\n    for s, a, g in ls:\n
   res = a * F[s].left_action(g) + res\n    return res\n\n\ndef
hecke_eigenvalue_tp(p, F, T=None):\n    ’’’\n    p, F, T: same as aruments
of tp_action_fourier_coeff.\n    Assuming F is an eigenform, return the
eigenvalue for T(p),\n    T is used for the computation of Fourier
coefficients.\n    If T is omitted, T will be set to\n    matrix([[1, 1/2,
1/2], [1/2, 1, 1/2], [1/2, 1/2, 1]]).\n    ’’’\n    return
_hecke_eigenvalue_base(lambda s: tp_action_fourier_coeff(p, s, F), F,
T=T)\n\n\ndef hecke_eigenvalue_tp2(p, i, F, T=None):\n    ’’’\n    Similar
to hecke_eigenvalue_tp for T(p^2).\n    ’’’\n    return
_hecke_eigenvalue_base(lambda s: tp2_action_fourier_coeff(p, i, s, F), F,
T=T)\n\n\ndef spinor_l_euler_factor(p, F, t=None, T=None):\n    ’’’\n    F:
a dict or Siegel modular form of degree 3.\n    Return a polynomial G(t) of
degree 8, s.t.\n    G(p^(-s))^(-1) is the p-Euler factor of the spinor L
function of F.\n    ’’’\n    p = ZZ(p)\n    if t is None:\n        t =
PolynomialRing(QQ, 1, names=’t’, order=\"neglex\").gens()[0]\n    c = {}\n
   tp = hecke_eigenvalue_tp(p, F, T=T)\n    tpp1, tpp2, tpp3 =
[hecke_eigenvalue_tp2(p, i, F, T=T) for i in [1, 2, 3]]\n    c[0] = ZZ(1)\n
   c[1] = tp\n    c[2] = p * (tpp1 + (p**2 + 1) * tpp2 + (p**2 + 1)**2 *
tpp3)\n    c[3] = p**3 * tp * (tpp2 + tpp3)\n    c[4] = p**6 * (tp**2 *
tpp3 + tpp2**2 - 2 * p * tpp1 * tpp3 -\n                   2 * (p - 1) *
tpp2 * tpp3 -\n                   (p**6 + 2 * p**5 + 2 * p**3 + 2 * p - 1)
* tpp3**2)\n    c[5] = p**6 * tpp3 * c[3]\n    c[6] = p**12 * tpp3 ** 2 *
c[2]\n    c[7] = p**18 * tpp3 ** 3 * c[1]\n    c[8] = p**24 * tpp3 ** 4\n
 return sum((-1)**k * v * t**k for k, v in c.items())\n\n\ndef
rankin_convolution_degree1(f, g, p, name=None):\n    u’’’\n    f, g:
primitive forms of degree 1 and level 1.\n    Return p-euler factor of the
Rankin convolution of f and g as\n    a polynomial.\n    ’’’\n    k1 =
f.weight()\n    k2 = g.weight()\n    ap = f[p]\n    bp = g[p]\n    t =
PolynomialRing(QQ, 1, names=’t’ if name is None else name,\n
        order=\"neglex\").gens()[0]\n    return (1 - ap * bp * t +\n
     (ap**2 * p**(k2 - 1) + bp**2 * p**(k1 - 1) - 2 * p**(k1 + k2 - 2)) *
t**2 -\n            ap * bp * p**(k1 + k2 - 2) * t**3 + p**(2 * (k1 + k2 -
2)) * t**4)\n\n\ndef _hecke_eigenvalue_base(fc_func, F, T=None):\n    if T
is None:\n        T = HalfIntMatElement(matrix([[ZZ(1), ZZ(1) / ZZ(2),
ZZ(1) / ZZ(2)],\n                                      [ZZ(1) / ZZ(2),
ZZ(1), ZZ(1) / ZZ(2)],\n                                      [ZZ(1) /
ZZ(2), ZZ(1) / ZZ(2), ZZ(1)]]))\n    if not isinstance(T,
HalfIntMatElement):\n        T = HalfIntMatElement(T)\n    v1 =
fc_func(T).vector\n    v = F[T].vector\n    if v == 0:\n        raise
ZeroDivisionError\n    else:\n        i = next(i for i in range(len(v)) if
v[i] != 0)\n        return v1[i] / v[i]\n\n\n@cached_function\ndef
tp_action_fc_alist(p, T):\n    ’’’\n    return a list of tuples (S, a, g)
s.t.\n    S: an instance of HalfIntMatElement\n    a: integer\n    g: 3 by
3 matrix s.t.\n    F|T(p) = sum(a rho(g) F[S] | (a, g, S)).\n    ’’’\n
 res1 = []\n    for alpha in alpha_list(1):\n        D = diagonal_matrix([p
** a for a in alpha])\n        for V in _gl3_coset_gamma0(alpha, p):\n
       M = D * V\n            S = T.right_action(M.transpose())\n
 if S.is_divisible_by(p):\n                S = S // p\n                if
S.satisfy_cong_condition_tp(p, alpha):\n                    # p**(-6) and p
in the third item are for normalization.\n
 res1.append(\n                        (S, p ** (-6) * mul(p ** alpha[i]
for i in range(3) for j in range(i, 3)),\n                         M **
(-1) * p))\n    return __convert_reduced_nonisom_matrices(res1)\n\n\ndef
__convert_reduced_nonisom_matrices(alst):\n    red_res = []\n    for s, a,
g in alst:\n        u = _minkowski_reduction_transform_matrix(s.T)\n
 t = s.right_action(u)\n        red_res.append((t, a, g * u.transpose() **
(-1)))\n\n    non_isoms = []\n\n    for s, a, g in red_res:\n        q =
QuadraticForm(ZZ, 2 * s.T)\n        u = None\n        for t, _, _ in
non_isoms:\n            q1 = QuadraticForm(ZZ, 2 * t.T)\n            if
q.det() == q1.det():\n                u = q.is_globally_equivalent_to(q1,
return_matrix=True)\n                if u and u.transpose() *
q.Gram_matrix_rational() * u == q1.Gram_matrix_rational():\n
     break\n        if u:\n            non_isoms.append((s.right_action(u),
a, g * u.transpose() ** (-1)))\n        else:\n
 non_isoms.append((s, a, g))\n    return non_isoms\n\n\n@cached_function\ndef
tp2_action_fc_alist(p, T, i):\n    ’’’\n    similar to tp_action_fc_alist
for T_i(p^2) for i = 0, 1, 2, 3.\n    ’’’\n    res1 = []\n\n    for alpha
in alpha_list(2):\n        D = diagonal_matrix([p ** a for a in alpha])\n
     for V in _gl3_coset_gamma0(alpha, p):\n            M = D * V\n
   S = T.right_action(M.transpose())\n            if S.is_divisible_by(p **
2):\n                S = S // (p ** 2)\n                res1.append((S, p
** (-12) * _expt_sum(S, p, alpha, i),\n                             M **
(-1) * p ** 2))\n\n    return __convert_reduced_nonisom_matrices([(a, b, c)
for a, b, c in res1 if b != 0])\n\n\ndef _nearest_integer(x):\n    r =
floor(x)\n    if x - r > 0.5:\n        return r + 1\n    else:\n
 return r\n\n\ndef _gaussian_reduction(b1, b2, S):\n    ’’’\n    b1, b2:
vectors of length 3\n    S: symmetric matrix of size 3\n    ’’’\n    while
True:\n        nb1 = b1 * S * b1\n        nb2 = b2 * S * b2\n        if nb2
< nb1:\n            b1, b2 = b2, b1\n        x = (b2 * S * b1) / (b1 * S *
b1)\n        r = _nearest_integer(x)\n        a = b2 - r * b1\n        if a
* S * a >= b2 * S * b2:\n            return (b1, b2)\n        else:\n
     b1, b2 = a, b1\n\n\ndef _sym_mat_gen(p, n):\n    if n == 1:\n
 for a in range(p):\n            yield matrix([[a]])\n    else:\n
 for s in _sym_mat_gen(p, n - 1):\n            ls = [range(p) for _ in
range(n)]\n            for a in itertools.product(*ls):\n                v
= matrix([a[:-1]])\n                yield block_matrix([[s, v.transpose()],
[v, matrix([[a[-1]]])]])\n\n\ndef _gen_gauss_sum_direct_way(N, p, r):\n
 res = 0\n    K = CyclotomicField(p)\n    zeta = K.gen()\n    for S in
_sym_mat_gen(p, N.ncols()):\n        if
S.change_ring(FiniteField(p)).rank() == r:\n            res += zeta ** ((N
* S).trace())\n    try:\n        return QQ(res)\n    except TypeError:\n
     return res\n\n\ndef _generalized_gauss_sum(N, p, r):\n    if r == 0:\n
       return 1\n    if p == 2:\n        return
_gen_gauss_sum_direct_way(N, p, r)\n    else:\n        N_mp =
N.change_ring(FiniteField(p))\n        d, _, v = N_mp.smith_form()\n
 t = d.rank()\n        N1 = (v.transpose() * N_mp *\n
 v).matrix_from_rows_and_columns(range(t), range(t))\n        eps =
kronecker_symbol(N1.det(), p)\n        return _gen_gauss_sum_non_dyadic(p,
eps, N.ncols(), t, r)\n\n\ndef _half_int_mat_is_div_by(S, m):\n    n =
S.ncols()\n    return (all(ZZ(S[i, i]) % m == 0 for i in range(n)) and\n
         all(ZZ(2 * S[i, j]) % m == 0 for i in range(n) for j in range(i +
1, n)))\n\n\n@cached_function\ndef _gen_gauss_sum_non_dyadic(p, eps, n, t,
r):\n    ’’’\n    cf. H. Saito, a generalization of Gauss sums\n    ’’’\n\n
   def parenthesis_prod(a, b, m):\n        if m == 0:\n            return
1\n        else:\n            return mul(1 - a * b ** i for i in
range(m))\n\n    if (n - t) % 2 == 0:\n        m = (n - t) // 2\n
 else:\n        m = (n - t + 1) // 2\n\n    if n == r:\n        if n % 2 ==
1:\n            return ((-1) ** ((n - 2 * m + 1) // 2) * p ** ((n ** 2 + (2
* m) ** 2 - 1) // 4) *\n                    parenthesis_prod(p ** (-1), p
** (-2), m))\n        elif n % 2 == t % 2 == 0:\n            return
((-kronecker_symbol(-1, p)) ** ((n - 2 * m) // 2) *\n
 eps * p ** ((n ** 2 + (2 * m + 1) ** 2 - 1) // 4) *\n
 parenthesis_prod(p ** (-1), p ** (-2), m))\n        else:\n
 return 0\n    else:\n        diag = [1 for _ in range(t)]\n        if eps
== -1:\n            diag[-1] = least_quadratic_nonresidue(p)\n        diag
= diag + [0 for _ in range(n - t)]\n        N =
diagonal_matrix(diag).change_ring(FiniteField(p))\n        return
_gen_gauss_sum_direct_way(N, p, r)\n\n\ndef _expt_sum(S, p, alpha, i):\n
 ’’’\n    Return the exponential sum in Miyawaki’s paper, where alpha[-1]
<= 2, for T_i(p^2).\n    ’’’\n    a, b, c = [alpha.count(_i) for _i in
range(3)]\n    S33 = S.T.matrix_from_rows_and_columns(range(a + b, 3),
range(a + b, 3))\n    S22 = S.T.matrix_from_rows_and_columns(range(a, a +
b), range(a, a + b))\n    S32 = S.T.matrix_from_rows_and_columns(range(a +
b, 3), range(a))\n\n    if c > 0 and not _half_int_mat_is_div_by(S33, p **
2):\n        return 0\n    if c > 0 and b > 0 and any(x % p != 0 for x in
(S32 * ZZ(2)).change_ring(ZZ).list()):\n        return 0\n\n    if b == 0
and a + c == 3 - i:\n        return p ** (c * (c + 1))\n    elif b == 0:\n
       return 0\n    else:\n        return p ** (c * (c + 1)) * p ** (b *
c) * _generalized_gauss_sum(S22, p, b - i)\n\n\ndef
_minkowski_reduction(b1, b2, b3, S):\n\n    def inner_prod(x, y):\n
 return x * S * y\n\n    while True:\n        b1, b2, b3 = sorted([b1, b2,
b3], key=lambda b: b * S * b)\n\n        b1, b2 = _gaussian_reduction(b1,
b2, S)\n\n        b11 = inner_prod(b1, b1)\n        b12 = inner_prod(b1,
b2)\n        b13 = inner_prod(b1, b3)\n        b22 = inner_prod(b2, b2)\n
     b23 = inner_prod(b2, b3)\n        b33 = inner_prod(b3, b3)\n\n
 y1 = - (b13 / b11 - b12 * b23 / (b11 * b22)) / \\\n            (1 - b12 **
2 / (b11 * b22))\n        y2 = - (b23 / b22 - b12 * b13 / (b11 * b22)) /
\\\n            (1 - b12 ** 2 / (b11 * b22))\n\n        # Find integers x1,
x2 so that norm(b3 + x2 * b2 + x1 * b1) is minimal.\n        a_norms_alst =
[]\n\n        for x1 in [floor(y1), ceil(y1)]:\n            for x2 in
[floor(y2), ceil(y2)]:\n                a = b3 + x2 * b2 + x1 * b1\n
         a_norms_alst.append((x1, x2, a, inner_prod(a, a)))\n
 _inner_prod_a = min(x[-1] for x in a_norms_alst)\n        x1, x2, a, _ =
next(x for x in a_norms_alst if x[-1] == _inner_prod_a)\n\n        if
_inner_prod_a >= b33:\n            # Change sings of b1, b2, b3 and
terminate the alogrithm\n            sngs = [sgn(b12), sgn(b13),
sgn(b23)]\n            bs = [b1, b2, b3]\n            try:\n
 # If b12, b13 or b23 is zero, change sgns of b1, b2, b3 so that\n
       # b12, b13, b23 >= 0.\n                zero_i = sngs.index(0)\n
           set_ls = [set([1, 2]), set([1, 3]), set([2, 3])]\n
 t = set_ls[zero_i]\n                _other = [x for x in [1, 2, 3] if x
not in t][0]\n                for x in t:\n                    i =
set_ls.index(set([x, _other]))\n                    if sngs[i] < 0:\n
                 bs[x - 1] *= -1\n                b1, b2, b3 = bs\n
   except ValueError:\n                # Else change sgns so that b12, b13
> 0\n                if b12 < 0:\n                    b2 = -b2\n
     if b13 < 0:\n                    b3 = -b3\n            return (b1, b2,
b3)\n        else:\n            b3 = a\n\n\ndef
_minkowski_reduction_transform_matrix(S):\n    ’’’\n    Return a unimodular
matrix u such that u^t * S * u is reduced in Minkowski’s sense.\n    ’’’\n
   b1, b2, b3 = identity_matrix(QQ, 3).columns()\n    c1, c2, c3 =
_minkowski_reduction(b1, b2, b3, S)\n    return matrix([c1, c2,
c3]).transpose()\n","line":10,"column":0,"path":"/home/sho/work/sage_packages/e8theta_degree3/hecke_module.py"}}
Quit [2 times]

Load-path shadows:
/home/sho/.emacs.d/elpa/helm-20160723.2238/helm-multi-match hides
/home/sho/.emacs.d/elpa/helm-core-20160723.944/helm-multi-match
/home/sho/.emacs.d/elpa/scala-mode-20160519.731/ob-scala hides
/usr/local/share/emacs/25.1/lisp/org/ob-scala
/home/sho/.emacs.d/elpa/seq-2.16/seq hides
/usr/local/share/emacs/25.1/lisp/emacs-lisp/seq

Features:
(shadow sort mail-extr emacsbug message dired rfc822 mml mml-sec epg
mm-decode mm-bodies mm-encode mailabbrev gmm-utils mailheader sendmail
mail-utils network-stream nsm starttls url-cache url-http tls gnutls
mail-parse rfc2231 rfc2047 rfc2045 ietf-drums url-gw url-auth
anaconda-mode pythonic f url url-proxy url-privacy url-expand
url-methods url-history url-cookie url-domsuf url-util mailcap vc-git
diff-mode easy-mmode python tramp-sh tramp tramp-compat tramp-loaddefs
trampver shell pcomplete format-spec comint ring ansi-color finder-inf
tex-site advice edmacro kmacro gh-common gh-profile url-parse
auth-source gnus-util mm-util help-fns mail-prsvr password-cache
url-vars s ucs-normalize marshal eieio-compat cl-seq json map dash eieio
eieio-core cl-macs go-mode-autoloads rx info package epg-config seq
byte-opt gv bytecomp byte-compile cl-extra help-mode easymenu cconv
cl-loaddefs pcase cl-lib time-date mule-util japan-util tooltip eldoc
electric uniquify ediff-hook vc-hooks lisp-float-type mwheel x-win
term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe
tabulated-list newcomment elisp-mode lisp-mode prog-mode register page
menu-bar rfn-eshadow timer select scroll-bar mouse jit-lock font-lock
syntax facemenu font-core frame cl-generic cham georgian utf-8-lang
misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms
cp51932 hebrew greek romanian slovak czech european ethiopic indian
cyrillic chinese charscript case-table epa-hook jka-cmpr-hook help
simple abbrev minibuffer cl-preloaded nadvice loaddefs button faces
cus-face macroexp files text-properties overlay sha1 md5 base64 format
env code-pages mule custom widget hashtable-print-readable backquote
dbusbind inotify dynamic-setting system-font-setting font-render-setting
move-toolbar gtk x-toolkit x multi-tty make-network-process emacs)

Memory information:
((conses 16 279045 5729)
 (symbols 48 28763 0)
 (miscs 40 591 109)
 (strings 32 47201 10304)
 (string-bytes 1 1610049)
 (vectors 16 45065)
 (vector-slots 8 885950 3678)
 (floats 8 389 220)
 (intervals 56 445 0)
 (buffers 976 23)
 (heap 1024 44595 2062))