1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*
Copyright (C) 2017 Luca De Feo
This file is part of FLINT.
FLINT is free software: you can redistribute it and/or modify it under
the terms of the GNU Lesser General Public License (LGPL) as published
by the Free Software Foundation; either version 3 of the License, or
(at your option) any later version. See <https://www.gnu.org/licenses/>.
*/
#ifdef T
#ifdef B
#include "templates.h"
#ifdef __cplusplus
extern "C" {
#endif
void TEMPLATE(T, embed_gens)(TEMPLATE(T, t) gen_sub,
TEMPLATE(T, t) gen_sup,
TEMPLATE(B, poly_t) minpoly,
const TEMPLATE(T, ctx_t) sub_ctx,
const TEMPLATE(T, ctx_t) sup_ctx);
void _TEMPLATE(T, embed_gens_naive)(TEMPLATE(T, t) gen_sub,
TEMPLATE(T, t) gen_sup,
TEMPLATE(B, poly_t) minpoly,
const TEMPLATE(T, ctx_t) sub_ctx,
const TEMPLATE(T, ctx_t) sup_ctx);
void _TEMPLATE(T, embed_gens_allombert)(TEMPLATE(T, t) gen_sub,
TEMPLATE(T, t) gen_sup,
TEMPLATE(B, poly_t) minpoly,
const TEMPLATE(T, ctx_t) sub_ctx,
const TEMPLATE(T, ctx_t) sup_ctx);
/* Convert to-from column vectors */
void TEMPLATE(T, embed_matrices)(TEMPLATE(B, mat_t) embed,
TEMPLATE(B, mat_t) project,
const TEMPLATE(T, t) gen_sub,
const TEMPLATE(T, ctx_t) sub_ctx,
const TEMPLATE(T, t) gen_sup,
const TEMPLATE(T, ctx_t) sup_ctx,
const TEMPLATE(B, poly_t) gen_minpoly);
/* Given:
- a context `sup_ctx` defining a field K of degree n,
- a context `sub_ctx` defining a subfield k of degree m|n,
- the n×m change-of-basis matrix from k to K,
Return the m×n matrix of the trace from K to k.
If m=n, res is the inverse of basis.
*/
void TEMPLATE(T, embed_trace_matrix)(TEMPLATE(B, mat_t) res,
const TEMPLATE(B, mat_t) basis,
const TEMPLATE(T, ctx_t) sub_ctx,
const TEMPLATE(T, ctx_t) sup_ctx);
/* Compute the matrix whose columns are (gen^0, gen^1, ..., gen^(trunc-1)) */
void TEMPLATE(T, embed_composition_matrix_sub)(TEMPLATE(B, mat_t) matrix,
const TEMPLATE(T, t) gen,
const TEMPLATE(T, ctx_t) ctx,
slong trunc);
void TEMPLATE(T, embed_composition_matrix)(TEMPLATE(B, mat_t) matrix,
const TEMPLATE(T, t) gen,
const TEMPLATE(T, ctx_t) ctx);
void TEMPLATE(T, embed_mul_matrix)(TEMPLATE(B, mat_t) matrix,
const TEMPLATE(T, t) gen,
const TEMPLATE(T, ctx_t) ctx);
void TEMPLATE(T, embed_mono_to_dual_matrix)(TEMPLATE(B, mat_t) res,
const TEMPLATE(T, ctx_t) ctx);
void TEMPLATE(T, embed_dual_to_mono_matrix)(TEMPLATE(B, mat_t) res,
const TEMPLATE(T, ctx_t) ctx);
#ifdef __cplusplus
}
#endif
#endif
#endif