@@ -199,6 +199,7 @@ def _check_n_q_d(n, q, d, field_based=True):
199
199
200
200
TESTS::
201
201
202
+ sage: # needs sage.libs.pari
202
203
sage: from sage.coding.code_bounds import _check_n_q_d
203
204
sage: _check_n_q_d(20, 16, 5)
204
205
True
@@ -251,26 +252,26 @@ def codesize_upper_bound(n, d, q, algorithm=None):
251
252
252
253
EXAMPLES::
253
254
254
- sage: codes.bounds.codesize_upper_bound(10,3, 2)
255
+ sage: codes.bounds.codesize_upper_bound(10, 3, 2)
255
256
93
256
- sage: codes.bounds.codesize_upper_bound(24,8,2, algorithm="LP")
257
+ sage: codes.bounds.codesize_upper_bound(24, 8, 2, algorithm="LP") # needs sage.numerical.mip
257
258
4096
258
- sage: codes.bounds.codesize_upper_bound(10,3,2, algorithm="gap") # optional - gap_package_guava
259
+ sage: codes.bounds.codesize_upper_bound(10, 3, 2, algorithm="gap") # optional - gap_package_guava
259
260
85
260
- sage: codes.bounds.codesize_upper_bound(11,3,4, algorithm=None)
261
+ sage: codes.bounds.codesize_upper_bound(11, 3, 4, algorithm=None) # needs sage.symbolic
261
262
123361
262
- sage: codes.bounds.codesize_upper_bound(11,3,4, algorithm="gap") # optional - gap_package_guava
263
+ sage: codes.bounds.codesize_upper_bound(11, 3, 4, algorithm="gap") # optional - gap_package_guava
263
264
123361
264
- sage: codes.bounds.codesize_upper_bound(11,3,4, algorithm="LP")
265
+ sage: codes.bounds.codesize_upper_bound(11, 3, 4, algorithm="LP") # needs sage.numerical.mip
265
266
109226
266
267
267
268
TESTS:
268
269
269
270
Make sure :issue:`22961` is fixed::
270
271
271
- sage: codes.bounds.codesize_upper_bound(19,10,2)
272
+ sage: codes.bounds.codesize_upper_bound(19, 10, 2)
272
273
20
273
- sage: codes.bounds.codesize_upper_bound(19,10,2, algorithm="gap") # optional - gap_package_guava
274
+ sage: codes.bounds.codesize_upper_bound(19, 10, 2, algorithm="gap") # optional - gap_package_guava
274
275
20
275
276
276
277
Meaningless parameters are rejected::
@@ -308,18 +309,18 @@ def dimension_upper_bound(n, d, q, algorithm=None):
308
309
309
310
EXAMPLES::
310
311
311
- sage: codes.bounds.dimension_upper_bound(10,3,2)
312
+ sage: codes.bounds.dimension_upper_bound(10,3,2) # needs sage.libs.pari sage.symbolic
312
313
6
313
- sage: codes.bounds.dimension_upper_bound(30,15,4)
314
+ sage: codes.bounds.dimension_upper_bound(30,15,4) # needs sage.libs.pari sage.symbolic
314
315
13
315
- sage: codes.bounds.dimension_upper_bound(30,15,4,algorithm="LP")
316
+ sage: codes.bounds.dimension_upper_bound(30,15,4,algorithm="LP") # needs sage.libs.pari sage.numerical.mip
316
317
12
317
318
318
319
TESTS:
319
320
320
321
Meaningless code parameters are rejected::
321
322
322
- sage: codes.bounds.dimension_upper_bound(13,3,6)
323
+ sage: codes.bounds.dimension_upper_bound(13,3,6) # needs sage.libs.pari
323
324
Traceback (most recent call last):
324
325
...
325
326
ValueError: The alphabet size does not make sense for a code over a field
@@ -421,23 +422,23 @@ def griesmer_upper_bound(n,q,d,algorithm=None):
421
422
422
423
The bound is reached for the ternary Golay codes::
423
424
424
- sage: codes.bounds.griesmer_upper_bound(12,3,6)
425
+ sage: codes.bounds.griesmer_upper_bound(12,3,6) # needs sage.libs.pari
425
426
729
426
- sage: codes.bounds.griesmer_upper_bound(11,3,5)
427
+ sage: codes.bounds.griesmer_upper_bound(11,3,5) # needs sage.libs.pari
427
428
729
428
429
429
430
::
430
431
431
- sage: codes.bounds.griesmer_upper_bound(10,2,3)
432
+ sage: codes.bounds.griesmer_upper_bound(10,2,3) # needs sage.libs.pari
432
433
128
433
- sage: codes.bounds.griesmer_upper_bound(10,2,3,algorithm="gap") # optional - gap_package_guava
434
+ sage: codes.bounds.griesmer_upper_bound(10,2,3,algorithm="gap") # optional - gap_package_guava, needs sage.libs.pari
434
435
128
435
436
436
437
TESTS::
437
438
438
- sage: codes.bounds.griesmer_upper_bound(11,3,6)
439
+ sage: codes.bounds.griesmer_upper_bound(11,3,6) # needs sage.libs.pari
439
440
243
440
- sage: codes.bounds.griesmer_upper_bound(11,3,6)
441
+ sage: codes.bounds.griesmer_upper_bound(11,3,6) # needs sage.libs.pari
441
442
243
442
443
"""
443
444
_check_n_q_d (n , q , d )
@@ -448,7 +449,7 @@ def griesmer_upper_bound(n,q,d,algorithm=None):
448
449
else :
449
450
# To compute the bound, we keep summing up the terms on the RHS
450
451
# until we start violating the inequality.
451
- from sage .functions . other import ceil
452
+ from sage .arith . misc import integer_ceil as ceil
452
453
den = 1
453
454
s = 0
454
455
k = 0
@@ -570,7 +571,7 @@ def gv_info_rate(n, delta, q):
570
571
571
572
EXAMPLES::
572
573
573
- sage: RDF(codes.bounds.gv_info_rate(100,1/4,3)) # abs tol 1e-15
574
+ sage: RDF(codes.bounds.gv_info_rate(100,1/4,3)) # abs tol 1e-15 # needs sage.libs.pari sage.symbolic
574
575
0.36704992608261894
575
576
"""
576
577
q = ZZ (q )
@@ -592,9 +593,9 @@ def entropy(x, q=2):
592
593
593
594
sage: codes.bounds.entropy(0, 2)
594
595
0
595
- sage: codes.bounds.entropy(1/5,4).factor() # optional - sage.symbolic
596
+ sage: codes.bounds.entropy(1/5,4).factor() # needs sage.symbolic
596
597
1/10*(log(3) - 4*log(4/5) - log(1/5))/log(2)
597
- sage: codes.bounds.entropy(1, 3) # optional - sage.symbolic
598
+ sage: codes.bounds.entropy(1, 3) # needs sage.symbolic
598
599
log(2)/log(3)
599
600
600
601
Check that values not within the limits are properly handled::
@@ -641,8 +642,9 @@ def entropy_inverse(x, q=2):
641
642
642
643
EXAMPLES::
643
644
645
+ sage: # needs sage.symbolic
644
646
sage: from sage.coding.code_bounds import entropy_inverse
645
- sage: entropy_inverse(0.1)
647
+ sage: entropy_inverse(0.1) # needs scipy
646
648
0.012986862055...
647
649
sage: entropy_inverse(1)
648
650
1/2
@@ -678,10 +680,11 @@ def gv_bound_asymp(delta, q):
678
680
679
681
EXAMPLES::
680
682
681
- sage: RDF(codes.bounds.gv_bound_asymp(1/4,2))
683
+ sage: # needs sage.symbolic
684
+ sage: RDF(codes.bounds.gv_bound_asymp(1/4,2)) # needs sage.libs.pari
682
685
0.18872187554086...
683
686
sage: f = lambda x: codes.bounds.gv_bound_asymp(x,2)
684
- sage: plot(f,0,1)
687
+ sage: plot(f,0,1) # needs sage.libs.pari sage.plot
685
688
Graphics object consisting of 1 graphics primitive
686
689
"""
687
690
return 1 - entropy (delta , q )
@@ -693,10 +696,11 @@ def hamming_bound_asymp(delta, q):
693
696
694
697
EXAMPLES::
695
698
696
- sage: RDF(codes.bounds.hamming_bound_asymp(1/4,2))
699
+ sage: # needs sage.symbolic
700
+ sage: RDF(codes.bounds.hamming_bound_asymp(1/4,2)) # needs sage.libs.pari
697
701
0.456435556800...
698
702
sage: f = lambda x: codes.bounds.hamming_bound_asymp(x,2)
699
- sage: plot(f,0,1)
703
+ sage: plot(f,0,1) # needs sage.libs.pari sage.plot
700
704
Graphics object consisting of 1 graphics primitive
701
705
"""
702
706
return 1 - entropy (delta / 2 , q )
@@ -711,7 +715,7 @@ def singleton_bound_asymp(delta, q):
711
715
sage: codes.bounds.singleton_bound_asymp(1/4,2)
712
716
3/4
713
717
sage: f = lambda x: codes.bounds.singleton_bound_asymp(x,2)
714
- sage: plot(f,0,1)
718
+ sage: plot(f,0,1) # needs sage.plot
715
719
Graphics object consisting of 1 graphics primitive
716
720
"""
717
721
return 1 - delta
@@ -740,7 +744,7 @@ def elias_bound_asymp(delta, q):
740
744
741
745
EXAMPLES::
742
746
743
- sage: codes.bounds.elias_bound_asymp(1/4,2)
747
+ sage: codes.bounds.elias_bound_asymp(1/4,2) # needs sage.symbolic
744
748
0.39912396330...
745
749
"""
746
750
r = 1 - 1 / q
@@ -755,7 +759,7 @@ def mrrw1_bound_asymp(delta, q):
755
759
756
760
EXAMPLES::
757
761
758
- sage: codes.bounds.mrrw1_bound_asymp(1/4,2) # abs tol 4e-16
762
+ sage: codes.bounds.mrrw1_bound_asymp(1/4,2) # abs tol 4e-16 # needs sage.symbolic
759
763
0.3545789026652697
760
764
"""
761
765
return RDF (entropy ((q - 1 - delta * (q - 2 )- 2 * sqrt ((q - 1 )* delta * (1 - delta )))/ q ,q ))
0 commit comments