2323from lmfdb .utils import redirect_no_cache
2424from lmfdb .utils .search_columns import SearchColumns , SearchCol , MathCol , LinkCol , ProcessedCol , CheckCol , CheckMaybeCol
2525from lmfdb .abvar .fq .download import AbvarFq_download
26+ from lmfdb .utils .search_parsing import parse_primes
2627
2728logger = make_logger ("abvarfq" )
2829
@@ -399,8 +400,31 @@ def nbsp(knowl, label):
399400 jacobian = YesNoMaybeBox (
400401 "jacobian" ,
401402 label = "Jacobian" ,
402- knowl = "ag.jacobian"
403+ knowl = "ag.jacobian" ,
403404 )
405+
406+ # Cyclic group of points (advanced yes/no box)
407+ cyclic = YesNoBox (
408+ "cyclic" ,
409+ label = "Cyclic group of points" ,
410+ knowl = "av.fq.cyclic_group_points" ,
411+ advanced = True ,
412+ )
413+
414+ # Non-cyclic primes with mode selector (include / exactly / subset)
415+ noncyclic_mode = SubsetBox (
416+ "noncyclic_primes_mode" ,
417+ advanced = True ,
418+ )
419+ noncyclic_primes = TextBoxWithSelect (
420+ "noncyclic_primes" ,
421+ label = "Non-cyclic primes" ,
422+ select_box = noncyclic_mode ,
423+ knowl = "av.fq.noncyclic_primes" ,
424+ example = "2 or 2,3,5" ,
425+ advanced = True ,
426+ )
427+
404428 uglabel = "Use %s in the following inputs" % display_knowl ("av.decomposition" , "Geometric decomposition" )
405429 use_geom_decomp = CheckBox (
406430 "use_geom_decomp" ,
@@ -506,6 +530,7 @@ def short_label(d):
506530 [newton_polygon , abvar_point_count , curve_point_count , simple_factors ],
507531 [newton_elevation , jac_cnt , hyp_cnt , twist_count , max_twist_degree ],
508532 [angle_rank , angle_corank , geom_deg , p_corank , geom_squarefree ],
533+ [cyclic , noncyclic_primes ],
509534 use_geom_refine ,
510535 [dim1 , dim2 , dim3 , dim4 , dim5 ],
511536 [dim1d , dim2d , dim3d , number_field , galois_group ],
@@ -516,6 +541,7 @@ def short_label(d):
516541 [g , geom_simple ],
517542 [initial_coefficients , polarizable ],
518543 [p_rank , jacobian ],
544+ [cyclic , noncyclic_primes ],
519545 [p_corank , geom_squarefree ],
520546 [jac_cnt , hyp_cnt ],
521547 [angle_rank , angle_corank ],
@@ -536,6 +562,7 @@ def short_label(d):
536562 [count ],
537563 ]
538564
565+
539566 def search_types (self , info ):
540567 return self ._search_again (info , [
541568 ('List' , 'List of isogeny classes' ),
@@ -552,6 +579,7 @@ def common_parse(info, query):
552579 parse_bool (info , query , "primitive" , qfield = "is_primitive" )
553580 parse_bool_unknown (info , query , "jacobian" , qfield = "has_jacobian" )
554581 parse_bool_unknown (info , query , "polarizable" , qfield = "has_principal_polarization" )
582+ parse_bool (info , query , "cyclic" , qfield = "is_cyclic" )
555583 parse_ints (info , query , "p_rank" )
556584 parse_ints (info , query , "p_corank" , qfield = "p_rank_deficit" )
557585 parse_ints (info , query , "angle_rank" )
@@ -561,6 +589,14 @@ def common_parse(info, query):
561589 parse_ints (info , query , "hyp_cnt" , qfield = "hyp_count" , name = "Number of Hyperelliptic Jacobians" )
562590 parse_ints (info , query , "twist_count" )
563591 parse_ints (info , query , "max_twist_degree" )
592+ parse_primes (
593+ info ,
594+ query ,
595+ "noncyclic_primes" ,
596+ qfield = "noncyclic_primes" ,
597+ mode = info .get ("noncyclic_primes_mode" ),
598+ )
599+
564600 parse_ints (info , query , "size" )
565601 parse_newton_polygon (info , query , "newton_polygon" , qfield = "slopes" )
566602 parse_string_start (info , query , "initial_coefficients" , qfield = "poly_str" , initial_segment = ["1" ])
@@ -680,7 +716,7 @@ def extended_code(c):
680716 ProcessedCol ("number_fields" , "av.fq.number_field" , "Number fields" , lambda nfs : ", " .join (nf_display_knowl (nf , field_pretty (nf )) for nf in nfs ), default = False ),
681717 SearchCol ("galois_groups_pretty" , "nf.galois_group" , "Galois groups" , download_col = "galois_groups" , default = False ),
682718 SearchCol ("decomposition_display_search" , "av.decomposition" , "Isogeny factors" , download_col = "decompositionraw" )],
683- db_cols = ["label" , "g" , "q" , "poly" , "p_rank" , "p_rank_deficit" , "is_simple" , "is_geometrically_simple" , "simple_distinct" , "simple_multiplicities" , "is_primitive" , "primitive_models" , "curve_count" , "curve_counts" , "abvar_count" , "abvar_counts" , "jacobian_count" , "hyp_count" , "number_fields" , "galois_groups" , "slopes" , "newton_elevation" , "twist_count" , "max_twist_degree" , "geometric_extension_degree" , "angle_rank" , "angle_corank" , "is_supersingular" , "has_principal_polarization" , "has_jacobian" ])
719+ db_cols = ["label" , "g" , "q" , "poly" , "p_rank" , "p_rank_deficit" , "is_simple" , "is_geometrically_simple" , "simple_distinct" , "simple_multiplicities" , "is_primitive" , "primitive_models" , "curve_count" , "curve_counts" , "abvar_count" , "abvar_counts" , "jacobian_count" , "hyp_count" , "number_fields" , "galois_groups" , "slopes" , "newton_elevation" , "twist_count" , "max_twist_degree" , "geometric_extension_degree" , "angle_rank" , "angle_corank" , "is_supersingular" , "has_principal_polarization" , "has_jacobian" , "is_cyclic" , "noncyclic_primes" ])
684720
685721def abvar_postprocess (res , info , query ):
686722 gals = set ()
0 commit comments