Skip to content

Commit e6320e7

Browse files
committed
access to generator names
1 parent 726ee2d commit e6320e7

File tree

18 files changed

+193
-0
lines changed

18 files changed

+193
-0
lines changed

doc/source/gr.rst

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -270,6 +270,15 @@ Context operations
270270
The name is used when printing and may be used to choose
271271
coercions.
272272

273+
.. function:: slong gr_ctx_ngens(gr_ctx_t ctx)
274+
275+
Returns the number of generators.
276+
277+
.. function:: char const * const * gr_ctx_gen_names_srcptr(gr_ctx_t ctx)
278+
279+
Returns an array containing the names of the generators, or `NULL` if there
280+
are no generators.
281+
273282
Element operations
274283
--------------------------------------------------------------------------------
275284

src/gr.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,8 @@ typedef enum
110110
GR_METHOD_CTX_SET_IS_FIELD,
111111
GR_METHOD_CTX_SET_GEN_NAME,
112112
GR_METHOD_CTX_SET_GEN_NAMES,
113+
GR_METHOD_CTX_NGENS,
114+
GR_METHOD_CTX_GEN_NAMES_SRCPTR,
113115

114116
GR_METHOD_INIT,
115117
GR_METHOD_CLEAR,
@@ -719,6 +721,8 @@ typedef void ((*gr_method_init_clear_op)(gr_ptr, gr_ctx_ptr));
719721
typedef void ((*gr_method_swap_op)(gr_ptr, gr_ptr, gr_ctx_ptr));
720722
typedef int ((*gr_method_ctx)(gr_ctx_ptr));
721723
typedef truth_t ((*gr_method_ctx_predicate)(gr_ctx_ptr));
724+
typedef slong ((*gr_method_ctx_size)(gr_ctx_ptr));
725+
typedef char const * const * ((*gr_method_ctx_gen_names_srcptr)(gr_ctx_ptr));
722726
typedef int ((*gr_method_ctx_set_si)(gr_ctx_ptr, slong));
723727
typedef int ((*gr_method_ctx_get_si)(slong *, gr_ctx_ptr));
724728
typedef int ((*gr_method_ctx_set_truth)(gr_ctx_ptr, truth_t));
@@ -816,6 +820,8 @@ typedef int ((*gr_method_set_fexpr_op)(gr_ptr, fexpr_vec_t, gr_vec_t, const fexp
816820
#define GR_CTX_OP(ctx, NAME) (((gr_method_ctx *) ctx->methods)[GR_METHOD_ ## NAME])
817821
#define GR_CTX_STREAM(ctx, NAME) (((gr_method_ctx_stream *) ctx->methods)[GR_METHOD_ ## NAME])
818822
#define GR_CTX_PREDICATE(ctx, NAME) (((gr_method_ctx_predicate *) ctx->methods)[GR_METHOD_ ## NAME])
823+
#define GR_CTX_SIZE(ctx, NAME) (((gr_method_ctx_size *) ctx->methods)[GR_METHOD_ ## NAME])
824+
#define GR_CTX_GEN_NAMES_SRCPTR(ctx, NAME) (((gr_method_ctx_gen_names_srcptr *) ctx->methods)[GR_METHOD_ ## NAME])
819825
#define GR_CTX_SET_SI(ctx, NAME) (((gr_method_ctx_set_si *) ctx->methods)[GR_METHOD_ ## NAME])
820826
#define GR_CTX_GET_SI(ctx, NAME) (((gr_method_ctx_get_si *) ctx->methods)[GR_METHOD_ ## NAME])
821827
#define GR_CTX_SET_TRUTH(ctx, NAME) (((gr_method_ctx_set_truth *) ctx->methods)[GR_METHOD_ ## NAME])
@@ -940,6 +946,8 @@ GR_INLINE WARN_UNUSED_RESULT int gr_ctx_get_real_prec(slong * prec, gr_ctx_t ctx
940946
GR_INLINE WARN_UNUSED_RESULT int gr_ctx_set_is_field(gr_ctx_t ctx, truth_t is_field) { return GR_CTX_SET_TRUTH(ctx, CTX_SET_IS_FIELD)(ctx, is_field); }
941947
GR_INLINE WARN_UNUSED_RESULT int gr_ctx_set_gen_name(gr_ctx_t ctx, const char * s) { return GR_CTX_SET_STR(ctx, CTX_SET_GEN_NAME)(ctx, s); }
942948
GR_INLINE WARN_UNUSED_RESULT int gr_ctx_set_gen_names(gr_ctx_t ctx, const char ** s) { return GR_CTX_SET_STRS(ctx, CTX_SET_GEN_NAMES)(ctx, s); }
949+
GR_INLINE slong gr_ctx_ngens(gr_ctx_t ctx) { return GR_CTX_SIZE(ctx, CTX_NGENS)(ctx); }
950+
GR_INLINE char const * const * gr_ctx_gen_names_srcptr(gr_ctx_t ctx) { return GR_CTX_GEN_NAMES_SRCPTR(ctx, CTX_GEN_NAMES_SRCPTR)(ctx); }
943951

944952
GR_INLINE slong _gr_ctx_get_real_prec(gr_ctx_t ctx)
945953
{

src/gr/fmpq_poly.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ int _gr_fmpq_poly_ctx_set_gen_names(gr_ctx_t ctx, const char ** s)
5050
return _gr_fmpq_poly_ctx_set_gen_name(ctx, s[0]);
5151
}
5252

53+
const char * const *
54+
_gr_fmpq_poly_ctx_gen_names_srcptr(gr_ctx_t ctx)
55+
{
56+
return (const char * const *) &FMPQ_POLY_CTX_VAR(ctx);
57+
}
5358

5459
int
5560
_gr_fmpq_poly_ctx_write(gr_stream_t out, gr_ctx_t ctx)
@@ -735,6 +740,8 @@ gr_method_tab_input _fmpq_poly_methods_input[] =
735740

736741
{GR_METHOD_CTX_SET_GEN_NAME, (gr_funcptr) _gr_fmpq_poly_ctx_set_gen_name},
737742
{GR_METHOD_CTX_SET_GEN_NAMES, (gr_funcptr) _gr_fmpq_poly_ctx_set_gen_names},
743+
{GR_METHOD_CTX_NGENS, (gr_funcptr) gr_generic_ctx_ngens_1},
744+
{GR_METHOD_CTX_GEN_NAMES_SRCPTR, (gr_funcptr) _gr_fmpq_poly_ctx_gen_names_srcptr},
738745
{GR_METHOD_INIT, (gr_funcptr) _gr_fmpq_poly_init},
739746
{GR_METHOD_CLEAR, (gr_funcptr) _gr_fmpq_poly_clear},
740747
{GR_METHOD_SWAP, (gr_funcptr) _gr_fmpq_poly_swap},

src/gr/fmpz_mpoly.c

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,18 @@ _gr_fmpz_mpoly_ctx_set_gen_names(gr_ctx_t ctx, const char ** s)
8585
return GR_SUCCESS;
8686
}
8787

88+
slong
89+
_gr_fmpz_mpoly_ctx_ngens(gr_ctx_t ctx)
90+
{
91+
return MPOLYNOMIAL_MCTX(ctx)->minfo->nvars;
92+
}
93+
94+
char const * const
95+
_gr_fmpz_mpoly_ctx_gen_names_srcptr(gr_ctx_t ctx)
96+
{
97+
return (char const * const) MPOLYNOMIAL_CTX(ctx)->vars;
98+
}
99+
88100
void
89101
_gr_fmpz_mpoly_init(fmpz_mpoly_t res, gr_ctx_t ctx)
90102
{
@@ -569,6 +581,8 @@ gr_method_tab_input _gr_fmpz_mpoly_methods_input[] =
569581
{GR_METHOD_CTX_IS_FINITE_CHARACTERISTIC, (gr_funcptr) gr_generic_ctx_predicate_false},
570582
{GR_METHOD_CTX_IS_THREADSAFE, (gr_funcptr) gr_generic_ctx_predicate_true},
571583
{GR_METHOD_CTX_SET_GEN_NAMES, (gr_funcptr) _gr_fmpz_mpoly_ctx_set_gen_names},
584+
{GR_METHOD_CTX_NGENS, (gr_funcptr) _gr_fmpz_mpoly_ctx_ngens},
585+
{GR_METHOD_CTX_GEN_NAMES_SRCPTR, (gr_funcptr) _gr_fmpz_mpoly_ctx_gen_names_srcptr},
572586
{GR_METHOD_INIT, (gr_funcptr) _gr_fmpz_mpoly_init},
573587
{GR_METHOD_CLEAR, (gr_funcptr) _gr_fmpz_mpoly_clear},
574588
{GR_METHOD_SWAP, (gr_funcptr) _gr_fmpz_mpoly_swap},

src/gr/fmpz_mpoly_q.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,13 @@ int _gr_fmpz_mpoly_q_ctx_write(gr_stream_t out, gr_ctx_t ctx)
4343
/* Some methods are identical to their fmpz_mpoly counterparts */
4444
void _gr_fmpz_mpoly_ctx_clear(gr_ctx_t ctx);
4545
int _gr_fmpz_mpoly_ctx_set_gen_names(gr_ctx_t ctx, const char ** s);
46+
slong _gr_fmpz_mpoly_ctx_ngens(gr_ctx_t ctx);
47+
char const * const _gr_fmpz_mpoly_ctx_gen_names_srcptr(gr_ctx_t ctx);
4648

4749
#define _gr_fmpz_mpoly_q_ctx_clear _gr_fmpz_mpoly_ctx_clear
4850
#define _gr_fmpz_mpoly_q_ctx_set_gen_names _gr_fmpz_mpoly_ctx_set_gen_names
51+
#define _gr_fmpz_mpoly_q_ctx_ngens _gr_fmpz_mpoly_ctx_ngens
52+
#define _gr_fmpz_mpoly_q_ctx_gen_names_srcptr _gr_fmpz_mpoly_ctx_gen_names_srcptr
4953

5054
void
5155
_gr_fmpz_mpoly_q_init(fmpz_mpoly_q_t res, gr_ctx_t ctx)
@@ -532,6 +536,8 @@ gr_method_tab_input _gr_fmpz_mpoly_q_methods_input[] =
532536
{GR_METHOD_CTX_IS_FINITE_CHARACTERISTIC, (gr_funcptr) gr_generic_ctx_predicate_false},
533537
{GR_METHOD_CTX_IS_THREADSAFE, (gr_funcptr) gr_generic_ctx_predicate_true},
534538
{GR_METHOD_CTX_SET_GEN_NAMES, (gr_funcptr) _gr_fmpz_mpoly_q_ctx_set_gen_names},
539+
{GR_METHOD_CTX_NGENS, (gr_funcptr) _gr_fmpz_mpoly_q_ctx_ngens},
540+
{GR_METHOD_CTX_GEN_NAMES_SRCPTR, (gr_funcptr) _gr_fmpz_mpoly_q_ctx_gen_names_srcptr},
535541
{GR_METHOD_INIT, (gr_funcptr) _gr_fmpz_mpoly_q_init},
536542
{GR_METHOD_CLEAR, (gr_funcptr) _gr_fmpz_mpoly_q_clear},
537543
{GR_METHOD_SWAP, (gr_funcptr) _gr_fmpz_mpoly_q_swap},

src/gr/fmpz_poly.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,12 @@ int _gr_fmpz_poly_ctx_set_gen_names(gr_ctx_t ctx, const char ** s)
5353
return _gr_fmpz_poly_ctx_set_gen_name(ctx, s[0]);
5454
}
5555

56+
char const * const *
57+
_gr_fmpz_poly_ctx_gen_names_srcptr(gr_ctx_t ctx)
58+
{
59+
return (char const * const *) &FMPZ_POLY_CTX_VAR(ctx);
60+
}
61+
5662
int
5763
_gr_fmpz_poly_ctx_write(gr_stream_t out, gr_ctx_t ctx)
5864
{
@@ -828,6 +834,8 @@ gr_method_tab_input _fmpz_poly_methods_input[] =
828834

829835
{GR_METHOD_CTX_SET_GEN_NAME, (gr_funcptr) _gr_fmpz_poly_ctx_set_gen_name},
830836
{GR_METHOD_CTX_SET_GEN_NAMES, (gr_funcptr) _gr_fmpz_poly_ctx_set_gen_names},
837+
{GR_METHOD_CTX_NGENS, (gr_funcptr) gr_generic_ctx_ngens_1},
838+
{GR_METHOD_CTX_GEN_NAMES_SRCPTR, (gr_funcptr) _gr_fmpz_poly_ctx_gen_names_srcptr},
831839

832840
{GR_METHOD_INIT, (gr_funcptr) _gr_fmpz_poly_init},
833841
{GR_METHOD_CLEAR, (gr_funcptr) _gr_fmpz_poly_clear},

src/gr/fmpzi.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,13 @@ _gr_fmpzi_ctx_write(gr_stream_t out, gr_ctx_t ctx)
2424
return GR_SUCCESS;
2525
}
2626

27+
char const * const *
28+
_gr_fmpzi_ctx_gen_names_srcptr(gr_ctx_t ctx)
29+
{
30+
static const char * name = "I";
31+
return &name;
32+
}
33+
2734
void
2835
_gr_fmpzi_init(fmpzi_t x, const gr_ctx_t ctx)
2936
{
@@ -951,6 +958,8 @@ gr_method_tab_input _fmpzi_methods_input[] =
951958
{GR_METHOD_CTX_IS_EXACT, (gr_funcptr) gr_generic_ctx_predicate_true},
952959
{GR_METHOD_CTX_IS_CANONICAL,
953960
(gr_funcptr) gr_generic_ctx_predicate_true},
961+
{GR_METHOD_CTX_NGENS, (gr_funcptr) gr_generic_ctx_ngens_1},
962+
{GR_METHOD_CTX_GEN_NAMES_SRCPTR, (gr_funcptr) _gr_fmpzi_ctx_gen_names_srcptr},
954963
{GR_METHOD_INIT, (gr_funcptr) _gr_fmpzi_init},
955964
{GR_METHOD_CLEAR, (gr_funcptr) _gr_fmpzi_clear},
956965
{GR_METHOD_SWAP, (gr_funcptr) _gr_fmpzi_swap},

src/gr/fq.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,12 @@ int _gr_fq_ctx_set_gen_names(gr_ctx_t ctx, const char ** s)
5858
return _gr_fq_ctx_set_gen_name(ctx, s[0]);
5959
}
6060

61+
char const * const *
62+
_gr_fq_ctx_gen_names_srcptr(gr_ctx_t ctx)
63+
{
64+
return (char const * const *) &FQ_CTX(ctx)->var;
65+
}
66+
6167
void
6268
_gr_fq_init(fq_t x, const gr_ctx_t ctx)
6369
{
@@ -716,6 +722,8 @@ gr_method_tab_input _fq_methods_input[] =
716722
{GR_METHOD_CTX_WRITE, (gr_funcptr) _gr_fq_ctx_write},
717723
{GR_METHOD_CTX_SET_GEN_NAME, (gr_funcptr) _gr_fq_ctx_set_gen_name},
718724
{GR_METHOD_CTX_SET_GEN_NAMES, (gr_funcptr) _gr_fq_ctx_set_gen_names},
725+
{GR_METHOD_CTX_NGENS, (gr_funcptr) gr_generic_ctx_ngens_1},
726+
{GR_METHOD_CTX_GEN_NAMES_SRCPTR, (gr_funcptr) _gr_fq_ctx_gen_names_srcptr},
719727
{GR_METHOD_CTX_IS_RING, (gr_funcptr) gr_generic_ctx_predicate_true},
720728
{GR_METHOD_CTX_IS_COMMUTATIVE_RING, (gr_funcptr) gr_generic_ctx_predicate_true},
721729
{GR_METHOD_CTX_IS_INTEGRAL_DOMAIN, (gr_funcptr) gr_generic_ctx_predicate_true},

src/gr/fq_nmod.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,12 @@ int _gr_fq_nmod_ctx_set_gen_names(gr_ctx_t ctx, const char ** s)
5959
return _gr_fq_nmod_ctx_set_gen_name(ctx, s[0]);
6060
}
6161

62+
char const * const *
63+
_gr_fq_nmod_ctx_gen_names_srcptr(gr_ctx_t ctx)
64+
{
65+
return (char const * const *) &FQ_CTX(ctx)->var;
66+
}
67+
6268
void
6369
_gr_fq_nmod_init(fq_nmod_t x, const gr_ctx_t ctx)
6470
{
@@ -679,6 +685,8 @@ gr_method_tab_input _fq_nmod_methods_input[] =
679685
{GR_METHOD_CTX_WRITE, (gr_funcptr) _gr_fq_nmod_ctx_write},
680686
{GR_METHOD_CTX_SET_GEN_NAME, (gr_funcptr) _gr_fq_nmod_ctx_set_gen_name},
681687
{GR_METHOD_CTX_SET_GEN_NAMES, (gr_funcptr) _gr_fq_nmod_ctx_set_gen_names},
688+
{GR_METHOD_CTX_NGENS, (gr_funcptr) gr_generic_ctx_ngens_1},
689+
{GR_METHOD_CTX_GEN_NAMES_SRCPTR, (gr_funcptr) _gr_fq_nmod_ctx_gen_names_srcptr},
682690
{GR_METHOD_CTX_IS_RING, (gr_funcptr) gr_generic_ctx_predicate_true},
683691
{GR_METHOD_CTX_IS_COMMUTATIVE_RING, (gr_funcptr) gr_generic_ctx_predicate_true},
684692
{GR_METHOD_CTX_IS_INTEGRAL_DOMAIN, (gr_funcptr) gr_generic_ctx_predicate_true},

src/gr/fq_zech.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,12 @@ int _gr_fq_zech_ctx_set_gen_names(gr_ctx_t ctx, const char ** s)
6060
return _gr_fq_zech_ctx_set_gen_name(ctx, s[0]);
6161
}
6262

63+
char const * const *
64+
_gr_fq_zech_ctx_gen_names_srcptr(gr_ctx_t ctx)
65+
{
66+
return (char const * const *) &FQ_CTX(ctx)->fq_nmod_ctx->var;
67+
}
68+
6369
void
6470
_gr_fq_zech_init(fq_zech_t x, const gr_ctx_t ctx)
6571
{
@@ -560,6 +566,8 @@ gr_method_tab_input _fq_zech_methods_input[] =
560566
{GR_METHOD_CTX_WRITE, (gr_funcptr) _gr_fq_zech_ctx_write},
561567
{GR_METHOD_CTX_SET_GEN_NAME, (gr_funcptr) _gr_fq_zech_ctx_set_gen_name},
562568
{GR_METHOD_CTX_SET_GEN_NAMES, (gr_funcptr) _gr_fq_zech_ctx_set_gen_names},
569+
{GR_METHOD_CTX_NGENS, (gr_funcptr) gr_generic_ctx_ngens_1},
570+
{GR_METHOD_CTX_GEN_NAMES_SRCPTR, (gr_funcptr) _gr_fq_zech_ctx_gen_names_srcptr},
563571
{GR_METHOD_CTX_IS_RING, (gr_funcptr) gr_generic_ctx_predicate_true},
564572
{GR_METHOD_CTX_IS_COMMUTATIVE_RING, (gr_funcptr) gr_generic_ctx_predicate_true},
565573
{GR_METHOD_CTX_IS_INTEGRAL_DOMAIN, (gr_funcptr) gr_generic_ctx_predicate_true},

0 commit comments

Comments
 (0)