11cimport cython
2+ cimport libc.stdlib
23
34from flint.flintlib.types.flint cimport (
45 slong,
@@ -79,7 +80,7 @@ from flint.flintlib.functions.gr_domains cimport (
7980
8081 gr_ctx_init_gr_poly,
8182 gr_ctx_init_gr_mpoly,
82- gr_ctx_init_fmpz_mpoly_q,
83+ # gr_ctx_init_fmpz_mpoly_q,
8384 # gr_ctx_init_series_mod_gr_poly,
8485 gr_ctx_init_gr_series,
8586)
@@ -95,6 +96,7 @@ from flint.flintlib.functions.gr cimport (
9596 gr_gen,
9697 gr_gens,
9798 gr_gens_recursive,
99+ gr_ctx_set_gen_names,
98100
99101 gr_i,
100102 gr_pos_inf,
@@ -781,19 +783,41 @@ cdef class gr_gr_poly_ctx(gr_poly_ctx):
781783cdef class gr_gr_mpoly_ctx(gr_mpoly_ctx):
782784 cdef gr_ctx base_ctx
783785 cdef ordering_t _order
786+ cdef tuple _names
784787 cdef slong _nvars
785788
786789 @staticmethod
787- cdef inline gr_gr_mpoly_ctx _new(gr_ctx base_ctx, slong nvars , Ordering order):
790+ cdef inline gr_gr_mpoly_ctx _new(gr_ctx base_ctx, tuple names , Ordering order):
788791 cdef gr_gr_mpoly_ctx ctx
789792 cdef ordering_t ord_c
793+ cdef slong nvars
794+ cdef const char ** names_c
795+ cdef int status
796+
797+ nvars = len (names)
798+ names_b = [name.encode(' utf-8' ) for name in names]
799+
790800 ord_c = ordering_py_to_c(order)
791801 ctx = gr_gr_mpoly_ctx.__new__ (gr_gr_mpoly_ctx)
792802 gr_ctx_init_gr_mpoly(ctx.ctx_t, base_ctx.ctx_t, nvars, ord_c)
793803 ctx._init = True
794804 ctx.base_ctx = base_ctx
795805 ctx._order = ord_c
796806 ctx._nvars = nvars
807+ ctx._names = names
808+
809+ names_c = < const char ** > libc.stdlib.malloc(nvars * sizeof(const char * ))
810+ if names_c == NULL :
811+ raise MemoryError (" Failed to allocate memory for generator names" )
812+ try :
813+ for i in range (nvars):
814+ names_c[i] = names_b[i]
815+ status = gr_ctx_set_gen_names(ctx.ctx_t, names_c)
816+ finally :
817+ libc.stdlib.free(names_c)
818+ if status != GR_SUCCESS:
819+ raise MemoryError (" Failed to set generator names" )
820+
797821 return ctx
798822
799823
0 commit comments