Package: emacs;
Reported by: Sho Takemori <stakemorii <at> gmail.com>
Date: Sun, 31 Jul 2016 08:28:02 UTC
Severity: normal
Found in version 25.1
Done: Dmitry Gutov <dgutov <at> yandex.ru>
Bug is archived. No further changes may be made.
View this message in rfc822 format
From: help-debbugs <at> gnu.org (GNU bug Tracking System) To: Sho Takemori <stakemorii <at> gmail.com> Subject: bug#24117: closed (Re: bug#24117: 25.1; url-http-create-request: Multibyte text in HTTP request) Date: Wed, 10 May 2017 00:41:02 +0000
[Message part 1 (text/plain, inline)]
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 24117 <at> debbugs.gnu.org. -- 24117: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=24117 GNU Bug Tracking System Contact help-debbugs <at> gnu.org with problems
[Message part 2 (message/rfc822, inline)]
From: Dmitry Gutov <dgutov <at> yandex.ru> To: Lars Ingebrigtsen <larsi <at> gnus.org> Cc: stakemorii <at> gmail.com, Ted Zlatanov <tzz <at> lifelogs.com>, schwab <at> linux-m68k.org, 24117-done <at> debbugs.gnu.org Subject: Re: bug#24117: 25.1; url-http-create-request: Multibyte text in HTTP request Date: Wed, 10 May 2017 03:40:07 +0300On 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.
[Message part 3 (message/rfc822, inline)]
From: Sho Takemori <stakemorii <at> gmail.com> To: bug-gnu-emacs <at> gnu.org Subject: 25.1; url-http-create-request: Multibyte text in HTTP request Date: Sun, 31 Jul 2016 17:26:37 +0900[Message part 4 (text/plain, inline)]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 <at> 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 <at> 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 <at> 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))[Message part 5 (text/html, inline)]
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.