Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download
Views: 8800
Kernel: SageMath 9.7

Cayley graphs of binary bent functions of dimension 6.

Import the required modules.

from os import path from sage.matrix.constructor import matrix from boolean_cayley_graphs.bent_function import BentFunction from boolean_cayley_graphs.bent_function_cayley_graph_classification import ( BentFunctionCayleyGraphClassification) from boolean_cayley_graphs.boolean_function_extended_translate_classification import ( BooleanFunctionExtendedTranslateClassification) from boolean_cayley_graphs.boolean_function_general_linear_class import ( BooleanFunctionGeneralLinearClass)

Import controls.

import boolean_cayley_graphs.cayley_graph_controls as controls

Turn on verbose output.

controls.timing = True controls.verbose = True

Connect to the database that contains the classifications of bent functions in 6 dimensions.

load(path.join("..", "sage-code", "boolean_dimension_cayley_graph_classifications.py"))

Set c to be the list of classifications for dimension 6. c[0] is None.

dim = 6
sobj_dir = path.join("..", "sobj")
c = load_boolean_dimension_cayley_graph_classifications(dim, dir=sobj_dir)
Function 1 : Algebraic normal form of Boolean function: x0*x1 + x2*x3 + x4*x5 Function is bent. SDP design incidence structure t-design parameters: (True, (2, 64, 28, 12)) Classification of Cayley graphs and classification of Cayley graphs of duals are the same: There are 2 extended Cayley classes in the extended translation class. Function 2 : Algebraic normal form of Boolean function: x0*x1*x2 + x0*x3 + x1*x4 + x2*x5 Function is bent. SDP design incidence structure t-design parameters: (True, (2, 64, 28, 12)) Classification of Cayley graphs and classification of Cayley graphs of duals are the same: There are 3 extended Cayley classes in the extended translation class. Function 3 : Algebraic normal form of Boolean function: x0*x1*x2 + x0*x1 + x0*x3 + x1*x3*x4 + x1*x5 + x2*x4 + x3*x4 Function is bent. SDP design incidence structure t-design parameters: (True, (2, 64, 28, 12)) Classification of Cayley graphs and classification of Cayley graphs of duals are the same: There are 4 extended Cayley classes in the extended translation class. Function 4 : Algebraic normal form of Boolean function: x0*x1*x2 + x0*x3 + x1*x3*x4 + x1*x5 + x2*x3*x5 + x2*x3 + x2*x4 + x2*x5 + x3*x4 + x3*x5 Function is bent. SDP design incidence structure t-design parameters: (True, (2, 64, 28, 12)) Classification of Cayley graphs and classification of Cayley graphs of duals are the same: There are 3 extended Cayley classes in the extended translation class.

Display the length of c, the list of classifications.

len(c)
5

Verify that c[0] is None.

print(c[0])
None
n = 1

Print the algebraic normal form of the bent function corresponding to c[n].

c[n].algebraic_normal_form
x0*x1 + x2*x3 + x4*x5

Produce a report on the classification c[n].

c[n].report(report_on_graph_details=True)
Algebraic normal form of Boolean function: x0*x1 + x2*x3 + x4*x5 Function is bent. SDP design incidence structure t-design parameters: (True, (2, 64, 28, 12)) Classification of Cayley graphs and classification of Cayley graphs of duals are the same: There are 2 extended Cayley classes in the extended translation class. For each extended Cayley class in the extended translation class: Clique polynomial, strongly regular parameters, rank, and order of a representative graph; and linear code and generator matrix for a representative bent function: EC class 0 : Algebraic normal form of representative: x0*x1 + x2*x3 + x4*x5 Clique polynomial: 64*t^8 + 512*t^7 + 1792*t^6 + 3584*t^5 + 5376*t^4 + 3584*t^3 + 896*t^2 + 64*t + 1 Strongly regular parameters: (64, 28, 12, 12) Rank: 8 Order: 2580480 Linear code from representative: [28, 6] linear code over GF(2) Generator matrix: [1 0 0 0 0 1 0 1 1 1 1 0 0 1 1 1 1 0 0 0 1 1 1 0 1 1 0 1] [0 1 0 1 0 0 0 1 0 1 0 0 0 1 0 1 0 0 0 1 1 1 0 0 0 1 1 1] [0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 1 1 0 1 1 1 0 0 1] [0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 1 1 0 1 1 0 1 1 0] [0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1] [0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] Linear code is projective. Weight distribution: {0: 1, 12: 28, 16: 35} EC class 1 : Algebraic normal form of representative: x0*x1 + x0 + x1 + x2*x3 + x4*x5 Clique polynomial: 2304*t^6 + 13824*t^5 + 19200*t^4 + 7680*t^3 + 1152*t^2 + 64*t + 1 Strongly regular parameters: (64, 36, 20, 20) Rank: 8 Order: 3317760 Linear code from representative: [36, 6] linear code over GF(2) Generator matrix: [1 0 1 0 1 0 0 1 0 0 0 1 0 1 0 1 1 0 1 1 0 1 0 1 0 1 1 0 1 1 0 1 1 1 0 1] [0 1 1 0 1 1 0 1 1 0 0 1 1 0 1 1 0 1 1 0 0 1 1 0 1 1 0 1 1 0 0 0 0 0 1 1] [0 0 0 1 1 1 0 0 0 1 0 0 0 1 1 1 0 0 0 1 0 0 0 1 1 1 0 0 0 1 0 1 0 1 1 1] [0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0 1 1 1 1 0 0 1 1 1 1] [0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1] [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] Linear code is projective. Weight distribution: {0: 1, 16: 27, 20: 36}

Produce a matrix plot of the weight_class_matrix.

matrix_plot(c[n].weight_class_matrix, cmap='gist_stern', colorbar=True)
Image in a Jupyter notebook

Produce a matrix plot of bent_cayley_graph_index_matrix, the matrix of indices of extended Cayley classes within the extended translation class.

matrix_plot(c[n].bent_cayley_graph_index_matrix, cmap='gist_stern', colorbar=True)
Image in a Jupyter notebook

Print the number of distinct bent functions within the Extended Translation Class, and produce a matrix plot showing where these occur within the class.

%%time bf = BentFunction(c[n].algebraic_normal_form) bf_etc = BooleanFunctionExtendedTranslateClassification.from_function(bf)
2023-02-19 09:56:17.054322 0 0 2023-02-19 09:56:20.466666 1 64 2023-02-19 09:56:24.041192 2 64 2023-02-19 09:56:27.498647 3 64 2023-02-19 09:56:30.936545 4 64 2023-02-19 09:56:34.408606 5 64 2023-02-19 09:56:37.982594 6 64 2023-02-19 09:56:41.872995 7 64 2023-02-19 09:56:45.250211 8 64 2023-02-19 09:56:48.664158 9 64 2023-02-19 09:56:52.025709 10 64 2023-02-19 09:56:55.438840 11 64 2023-02-19 09:56:58.873676 12 64 2023-02-19 09:57:02.232052 13 64 2023-02-19 09:57:05.814218 14 64 2023-02-19 09:57:09.296055 15 64 2023-02-19 09:57:12.672197 16 64 2023-02-19 09:57:16.049933 17 64 2023-02-19 09:57:19.469410 18 64 2023-02-19 09:57:22.873191 19 64 2023-02-19 09:57:26.234043 20 64 2023-02-19 09:57:29.677849 21 64 2023-02-19 09:57:33.080836 22 64 2023-02-19 09:57:36.580409 23 64 2023-02-19 09:57:40.484053 24 64 2023-02-19 09:57:44.010611 25 64 2023-02-19 09:57:47.381954 26 64 2023-02-19 09:57:51.112602 27 64 2023-02-19 09:57:54.488529 28 64 2023-02-19 09:57:58.014399 29 64 2023-02-19 09:58:01.530019 30 64 2023-02-19 09:58:05.302415 31 64 2023-02-19 09:58:08.943088 32 64 2023-02-19 09:58:12.467874 33 64 2023-02-19 09:58:15.818739 34 64 2023-02-19 09:58:19.277315 35 64 2023-02-19 09:58:22.782645 36 64 2023-02-19 09:58:26.138868 37 64 2023-02-19 09:58:29.647363 38 64 2023-02-19 09:58:33.124700 39 64 2023-02-19 09:58:36.491034 40 64 2023-02-19 09:58:39.985748 41 64 2023-02-19 09:58:43.474123 42 64 2023-02-19 09:58:47.140259 43 64 2023-02-19 09:58:50.729322 44 64 2023-02-19 09:58:54.101147 45 64 2023-02-19 09:58:57.452829 46 64 2023-02-19 09:59:00.862109 47 64 2023-02-19 09:59:04.210050 48 64 2023-02-19 09:59:07.541170 49 64 2023-02-19 09:59:11.068971 50 64 2023-02-19 09:59:14.449811 51 64 2023-02-19 09:59:17.834731 52 64 2023-02-19 09:59:21.181194 53 64 2023-02-19 09:59:24.577373 54 64 2023-02-19 09:59:28.100278 55 64 2023-02-19 09:59:31.491143 56 64 2023-02-19 09:59:35.019762 57 64 2023-02-19 09:59:38.511457 58 64 2023-02-19 09:59:42.091581 59 64 2023-02-19 09:59:45.727349 60 64 2023-02-19 09:59:49.407225 61 64 2023-02-19 09:59:53.277141 62 64 2023-02-19 09:59:57.115153 63 64 2023-02-19 10:00:00.512154 CPU times: user 3min 36s, sys: 238 ms, total: 3min 37s Wall time: 3min 43s
name_n = "p" + str(dim) + "_" + str(n) bf_etc.save_mangled(name_n, dir=sobj_dir)
print("Number of bent functions in the extended translation class is", len(bf_etc.boolean_function_list)) print("Number of general linear equivalence classes in the extended translation class is", len(bf_etc.general_linear_class_list))
Number of bent functions in the extended translation class is 64 Number of general linear equivalence classes in the extended translation class is 2
matrix_plot(bf_etc.general_linear_class_index_matrix, cmap='gist_stern', colorbar=True)
Image in a Jupyter notebook
matrix_plot(bf_etc.boolean_function_index_matrix, cmap='gist_stern', colorbar=True)
Image in a Jupyter notebook
n = 2

Print the algebraic normal form of the bent function corresponding to c[n].

c[n].algebraic_normal_form
x0*x1*x2 + x0*x3 + x1*x4 + x2*x5

Produce a report on the classification c[n].

c[n].report(report_on_graph_details=True)
Algebraic normal form of Boolean function: x0*x1*x2 + x0*x3 + x1*x4 + x2*x5 Function is bent. SDP design incidence structure t-design parameters: (True, (2, 64, 28, 12)) Classification of Cayley graphs and classification of Cayley graphs of duals are the same: There are 3 extended Cayley classes in the extended translation class. For each extended Cayley class in the extended translation class: Clique polynomial, strongly regular parameters, rank, and order of a representative graph; and linear code and generator matrix for a representative bent function: EC class 0 : Algebraic normal form of representative: x0*x1*x2 + x0*x3 + x1*x4 + x2*x5 Clique polynomial: 64*t^8 + 512*t^7 + 1792*t^6 + 3584*t^5 + 5376*t^4 + 3584*t^3 + 896*t^2 + 64*t + 1 Strongly regular parameters: (64, 28, 12, 12) Rank: 8 Order: 2580480 Linear code from representative: [28, 6] linear code over GF(2) Generator matrix: [1 0 0 0 0 1 0 0 1 0 1 0 0 1 0 0 0 1 1 0 0 1 0 1 1 0 1 1] [0 1 0 0 0 0 1 0 1 1 0 0 0 0 1 0 1 1 0 0 1 1 1 1 0 1 0 0] [0 0 1 0 0 1 0 1 1 1 1 0 0 1 1 0 1 1 0 1 0 1 1 0 1 1 1 0] [0 0 0 1 0 1 1 0 1 1 0 1 0 1 0 1 1 1 1 0 1 0 0 1 1 1 0 1] [0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1] [0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] Linear code is projective. Weight distribution: {0: 1, 12: 28, 16: 35} EC class 1 : Algebraic normal form of representative: x0*x1*x2 + x0*x3 + x1*x2 + x1*x4 + x2*x5 + x3 Clique polynomial: 256*t^6 + 1536*t^5 + 4352*t^4 + 3584*t^3 + 896*t^2 + 64*t + 1 Strongly regular parameters: (64, 28, 12, 12) Rank: 8 Order: 24576 Linear code from representative: [28, 6] linear code over GF(2) Generator matrix: [1 0 0 1 0 0 1 0 0 1 1 1 0 0 0 1 1 0 0 0 1 1 0 0 0 1 1 0] [0 1 0 0 0 0 1 0 1 1 0 0 0 0 1 0 1 1 0 0 1 1 1 1 0 1 0 0] [0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 1 1 1 1 0 0 1 1] [0 0 0 0 1 0 0 1 0 1 1 0 0 1 1 0 0 1 0 1 1 0 1 0 1 1 0 0] [0 0 0 0 0 1 1 0 1 0 0 1 0 1 1 0 0 1 0 1 0 1 0 1 0 0 1 1] [0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] Linear code is projective. Weight distribution: {0: 1, 12: 28, 16: 35} EC class 2 : Algebraic normal form of representative: x0*x1*x2 + x0*x1 + x0*x2 + x0*x3 + x0 + x1*x2 + x1*x4 + x1 + x2*x5 + x2 + x3 + x4 + x5 Clique polynomial: 192*t^8 + 1536*t^7 + 8960*t^6 + 19968*t^5 + 20224*t^4 + 7680*t^3 + 1152*t^2 + 64*t + 1 Strongly regular parameters: (64, 36, 20, 20) Rank: 8 Order: 73728 Linear code from representative: [36, 6] linear code over GF(2) Generator matrix: [1 0 1 0 1 0 1 0 1 1 1 1 0 0 1 0 1 1 0 1 0 0 1 0 1 0 1 1 1 0 1 0 1 0 0 1] [0 1 1 0 0 1 1 0 0 1 0 1 0 1 1 1 1 1 0 1 0 0 0 1 1 1 0 1 0 1 1 0 0 1 0 1] [0 0 0 1 1 1 1 0 0 0 1 1 0 0 0 1 1 0 1 1 0 1 1 1 1 0 1 1 0 1 1 0 0 0 1 1] [0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1] [0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1] [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] Linear code is projective. Weight distribution: {0: 1, 16: 27, 20: 36}

Produce a matrix plot of the weight_class_matrix.

matrix_plot(c[n].weight_class_matrix, cmap='gist_stern', colorbar=True)
Image in a Jupyter notebook

Produce a matrix plot of bent_cayley_graph_index_matrix, the matrix of indices of extended Cayley classes within the extended translation class.

matrix_plot(c[n].bent_cayley_graph_index_matrix, cmap='gist_stern', colorbar=True)
Image in a Jupyter notebook

Print the number of distinct bent functions within the Extended Translation Class, and produce a matrix plot showing where these occur within the class.

%%time bf = BentFunction(c[n].algebraic_normal_form) bf_etc = BooleanFunctionExtendedTranslateClassification.from_function(bf)
2023-02-19 10:00:02.988382 0 0 2023-02-19 10:00:35.332260 1 64 2023-02-19 10:01:52.589506 2 128 2023-02-19 10:03:29.284729 3 192 2023-02-19 10:05:43.589085 4 256 2023-02-19 10:06:58.492702 5 320 2023-02-19 10:08:43.092884 6 384 2023-02-19 10:10:18.117672 7 448 2023-02-19 10:11:58.775007 8 512 2023-02-19 10:12:31.063770 9 512 2023-02-19 10:13:48.629793 10 512 2023-02-19 10:15:21.444743 11 512 2023-02-19 10:17:30.357504 12 512 2023-02-19 10:18:42.201097 13 512 2023-02-19 10:20:26.931610 14 512 2023-02-19 10:22:04.519600 15 512 2023-02-19 10:23:49.608122 16 512 2023-02-19 10:24:21.696262 17 512 2023-02-19 10:25:40.438647 18 512 2023-02-19 10:27:17.462006 19 512 2023-02-19 10:29:32.379009 20 512 2023-02-19 10:30:48.027889 21 512 2023-02-19 10:32:33.857432 22 512 2023-02-19 10:34:13.560454 23 512 2023-02-19 10:35:59.812077 24 512 2023-02-19 10:36:33.136532 25 512 2023-02-19 10:37:51.088054 26 512 2023-02-19 10:39:28.128082 27 512 2023-02-19 10:41:44.543169 28 512 2023-02-19 10:42:59.657745 29 512 2023-02-19 10:44:44.962237 30 512 2023-02-19 10:46:24.025910 31 512 2023-02-19 10:48:09.320297 32 512 2023-02-19 10:48:42.457727 33 512 2023-02-19 10:49:57.616204 34 512 2023-02-19 10:51:31.267385 35 512 2023-02-19 10:53:41.332430 36 512 2023-02-19 10:54:53.758919 37 512 2023-02-19 10:56:35.714849 38 512 2023-02-19 10:58:14.035848 39 512 2023-02-19 11:00:00.452913 40 512 2023-02-19 11:00:34.448732 41 512 2023-02-19 11:01:53.609489 42 512 2023-02-19 11:03:28.440894 43 512 2023-02-19 11:05:42.114822 44 512 2023-02-19 11:06:55.285224 45 512 2023-02-19 11:08:41.799603 46 512 2023-02-19 11:10:21.425017 47 512 2023-02-19 11:12:08.146519 48 512 2023-02-19 11:12:41.865243 49 512 2023-02-19 11:13:57.513926 50 512 2023-02-19 11:15:30.237877 51 512 2023-02-19 11:17:45.427958 52 512 2023-02-19 11:19:01.370054 53 512 2023-02-19 11:20:48.216833 54 512 2023-02-19 11:22:27.470295 55 512 2023-02-19 11:24:13.445474 56 512 2023-02-19 11:24:46.802718 57 512 2023-02-19 11:26:05.013364 58 512 2023-02-19 11:27:42.855446 59 512 2023-02-19 11:29:58.219342 60 512 2023-02-19 11:31:14.479308 61 512 2023-02-19 11:33:00.396980 62 512 2023-02-19 11:34:38.830494 63 512 2023-02-19 11:36:20.770034 CPU times: user 1h 32min 44s, sys: 3.59 s, total: 1h 32min 48s Wall time: 1h 36min 17s
name_n = "p" + str(dim) + "_" + str(n) bf_etc.save_mangled(name_n, dir=sobj_dir)
print("Number of bent functions in the extended translation class is", len(bf_etc.boolean_function_list)) print("Number of general linear equivalence classes in the extended translation class is", len(bf_etc.general_linear_class_list))
Number of bent functions in the extended translation class is 512 Number of general linear equivalence classes in the extended translation class is 15
matrix_plot(bf_etc.general_linear_class_index_matrix, cmap='gist_stern', colorbar=True)
Image in a Jupyter notebook
matrix_plot(bf_etc.boolean_function_index_matrix, cmap='gist_stern', colorbar=True)
Image in a Jupyter notebook
n = 3

Print the algebraic normal form of the bent function corresponding to c[n].

c[n].algebraic_normal_form
x0*x1*x2 + x0*x1 + x0*x3 + x1*x3*x4 + x1*x5 + x2*x4 + x3*x4

Produce a report on the classification c[n].

c[n].report(report_on_graph_details=True)
Algebraic normal form of Boolean function: x0*x1*x2 + x0*x1 + x0*x3 + x1*x3*x4 + x1*x5 + x2*x4 + x3*x4 Function is bent. SDP design incidence structure t-design parameters: (True, (2, 64, 28, 12)) Classification of Cayley graphs and classification of Cayley graphs of duals are the same: There are 4 extended Cayley classes in the extended translation class. For each extended Cayley class in the extended translation class: Clique polynomial, strongly regular parameters, rank, and order of a representative graph; and linear code and generator matrix for a representative bent function: EC class 0 : Algebraic normal form of representative: x0*x1*x2 + x0*x1 + x0*x3 + x1*x3*x4 + x1*x5 + x2*x4 + x3*x4 Clique polynomial: 32*t^8 + 256*t^7 + 896*t^6 + 2048*t^5 + 4608*t^4 + 3584*t^3 + 896*t^2 + 64*t + 1 Strongly regular parameters: (64, 28, 12, 12) Rank: 12 Order: 6144 Linear code from representative: [28, 6] linear code over GF(2) Generator matrix: [1 0 0 0 0 1 0 1 0 0 1 0 0 0 1 0 1 0 0 1 1 1 0 0 0 1 1 1] [0 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0] [0 0 1 0 0 1 0 0 1 1 1 1 0 1 0 1 1 0 0 0 0 0 1 0 1 0 0 1] [0 0 0 1 0 0 1 1 0 1 0 0 0 0 1 1 1 0 1 1 0 1 0 0 1 0 1 0] [0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1] [0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] Linear code is projective. Weight distribution: {0: 1, 12: 28, 16: 35} EC class 1 : Algebraic normal form of representative: x0*x1*x2 + x0*x1 + x0*x3 + x0 + x1*x2 + x1*x3*x4 + x1*x4 + x1*x5 + x1 + x2*x4 + x3*x4 + x3 + x4 Clique polynomial: 160*t^8 + 1280*t^7 + 9344*t^6 + 21504*t^5 + 20480*t^4 + 7680*t^3 + 1152*t^2 + 64*t + 1 Strongly regular parameters: (64, 36, 20, 20) Rank: 12 Order: 10240 Linear code from representative: [36, 6] linear code over GF(2) Generator matrix: [1 0 1 0 0 0 1 1 1 0 1 0 0 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1 1 1 1 1 0 1 0 1] [0 1 1 0 1 0 0 1 0 0 1 1 0 1 1 0 1 0 0 1 0 0 1 0 0 1 0 0 0 0 1 0 0 1 1 1] [0 0 0 1 1 0 0 0 1 1 1 1 0 0 0 1 1 0 0 0 0 1 1 0 0 0 1 1 0 1 1 0 0 0 1 1] [0 0 0 0 0 1 1 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1] [0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1] [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] Linear code is projective. Weight distribution: {0: 1, 16: 27, 20: 36} EC class 2 : Algebraic normal form of representative: x0*x1*x2 + x0*x1 + x0*x2 + x0*x3 + x0 + x1*x3*x4 + x1*x5 + x2*x4 + x5 Clique polynomial: 64*t^6 + 1024*t^5 + 4096*t^4 + 3584*t^3 + 896*t^2 + 64*t + 1 Strongly regular parameters: (64, 28, 12, 12) Rank: 12 Order: 7680 Linear code from representative: [28, 6] linear code over GF(2) Generator matrix: [1 0 0 0 0 1 0 1 0 0 0 1 0 0 1 1 0 0 1 0 1 1 0 0 1 0 1 1] [0 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0] [0 0 1 0 0 0 0 1 1 0 1 0 0 0 0 1 1 0 1 0 0 1 1 1 1 0 1 0] [0 0 0 1 0 1 1 0 0 0 0 1 0 1 1 1 1 0 0 1 0 0 0 1 1 0 0 1] [0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1] [0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] Linear code is projective. Weight distribution: {0: 1, 12: 28, 16: 35} EC class 3 : Algebraic normal form of representative: x0*x1*x2 + x0*x1 + x0*x2 + x0*x3 + x0 + x1*x2 + x1*x3*x4 + x1*x5 + x1 + x2*x4 + x2 + x3 + x5 Clique polynomial: 160*t^8 + 1664*t^7 + 9792*t^6 + 21504*t^5 + 20480*t^4 + 7680*t^3 + 1152*t^2 + 64*t + 1 Strongly regular parameters: (64, 36, 20, 20) Rank: 12 Order: 7680 Linear code from representative: [36, 6] linear code over GF(2) Generator matrix: [1 0 1 0 1 0 1 0 1 1 1 1 0 1 0 1 0 1 1 0 0 0 1 0 1 1 0 1 1 1 0 1 0 1 0 0] [0 1 1 0 0 1 1 0 0 1 0 1 0 1 1 0 0 1 0 1 0 1 1 1 1 1 0 1 0 1 1 0 0 1 0 1] [0 0 0 1 1 1 1 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 1 1 0 1 1 0 0 0 1 1 0 1 1] [0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1] [0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1] [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] Linear code is projective. Weight distribution: {0: 1, 16: 27, 20: 36}

Produce a matrix plot of the weight_class_matrix.

matrix_plot(c[n].weight_class_matrix, cmap='gist_stern', colorbar=True)
Image in a Jupyter notebook

Produce a matrix plot of bent_cayley_graph_index_matrix, the matrix of indices of extended Cayley classes within the extended translation class.

matrix_plot(c[n].bent_cayley_graph_index_matrix, cmap='gist_stern', colorbar=True)
Image in a Jupyter notebook

Print the number of distinct bent functions within the Extended Translation Class, and produce a matrix plot showing where these occur within the class.

%%time bf = BentFunction(c[n].algebraic_normal_form) bf_etc = BooleanFunctionExtendedTranslateClassification.from_function(bf)
2023-02-19 11:36:23.211911 0 0 2023-02-19 11:36:29.014258 1 64 2023-02-19 11:36:34.926467 2 128 2023-02-19 11:36:41.061092 3 192 2023-02-19 11:36:47.391220 4 256 2023-02-19 11:36:53.832069 5 320 2023-02-19 11:36:59.717901 6 384 2023-02-19 11:37:05.588911 7 448 2023-02-19 11:37:11.451263 8 512 2023-02-19 11:37:17.432406 9 576 2023-02-19 11:37:23.251230 10 640 2023-02-19 11:37:29.023372 11 704 2023-02-19 11:37:34.745387 12 768 2023-02-19 11:37:40.602650 13 832 2023-02-19 11:37:46.425035 14 896 2023-02-19 11:37:52.429743 15 960 2023-02-19 11:37:58.384564 16 1024 2023-02-19 11:38:04.120576 17 1088 2023-02-19 11:38:10.152829 18 1152 2023-02-19 11:38:15.968696 19 1216 2023-02-19 11:38:21.729061 20 1280 2023-02-19 11:38:27.573573 21 1344 2023-02-19 11:38:33.321744 22 1408 2023-02-19 11:38:39.221311 23 1472 2023-02-19 11:38:45.025220 24 1536 2023-02-19 11:38:50.833522 25 1600 2023-02-19 11:38:56.899420 26 1664 2023-02-19 11:39:02.675697 27 1728 2023-02-19 11:39:08.611889 28 1792 2023-02-19 11:39:14.401308 29 1856 2023-02-19 11:39:20.237465 30 1920 2023-02-19 11:39:25.986403 31 1984 2023-02-19 11:39:31.777901 32 2048 2023-02-19 11:39:37.597023 33 2048 2023-02-19 11:39:43.424585 34 2048 2023-02-19 11:39:49.290468 35 2048 2023-02-19 11:39:55.058303 36 2048 2023-02-19 11:40:01.006826 37 2048 2023-02-19 11:40:07.318906 38 2048 2023-02-19 11:40:13.118167 39 2048 2023-02-19 11:40:18.993065 40 2048 2023-02-19 11:40:24.871201 41 2048 2023-02-19 11:40:30.756967 42 2048 2023-02-19 11:40:36.489876 43 2048 2023-02-19 11:40:42.346694 44 2048 2023-02-19 11:40:48.225362 45 2048 2023-02-19 11:40:54.035559 46 2048 2023-02-19 11:40:59.882852 47 2048 2023-02-19 11:41:05.861029 48 2048 2023-02-19 11:41:12.062440 49 2048 2023-02-19 11:41:17.944967 50 2048 2023-02-19 11:41:23.910474 51 2048 2023-02-19 11:41:29.826104 52 2048 2023-02-19 11:41:35.576644 53 2048 2023-02-19 11:41:41.531028 54 2048 2023-02-19 11:41:47.285300 55 2048 2023-02-19 11:41:53.151309 56 2048 2023-02-19 11:41:58.931640 57 2048 2023-02-19 11:42:04.867253 58 2048 2023-02-19 11:42:10.890380 59 2048 2023-02-19 11:42:17.242115 60 2048 2023-02-19 11:42:23.378366 61 2048 2023-02-19 11:42:29.360431 62 2048 2023-02-19 11:42:35.307647 63 2048 2023-02-19 11:42:41.386195 CPU times: user 6min 8s, sys: 396 ms, total: 6min 8s Wall time: 6min 18s
name_n = "p" + str(dim) + "_" + str(n) bf_etc.save_mangled(name_n, dir=sobj_dir)
print("Number of bent functions in the extended translation class is", len(bf_etc.boolean_function_list)) print("Number of general linear equivalence classes in the extended translation class is", len(bf_etc.general_linear_class_list))
Number of bent functions in the extended translation class is 2048 Number of general linear equivalence classes in the extended translation class is 4
matrix_plot(bf_etc.general_linear_class_index_matrix, cmap='gist_stern', colorbar=True)
Image in a Jupyter notebook
matrix_plot(bf_etc.boolean_function_index_matrix, cmap='gist_stern', colorbar=True)
Image in a Jupyter notebook
n = 4

Print the algebraic normal form of the bent function corresponding to c[n].

c[n].algebraic_normal_form
x0*x1*x2 + x0*x3 + x1*x3*x4 + x1*x5 + x2*x3*x5 + x2*x3 + x2*x4 + x2*x5 + x3*x4 + x3*x5

Produce a report on the classification c[n].

c[n].report(report_on_graph_details=True)
Algebraic normal form of Boolean function: x0*x1*x2 + x0*x3 + x1*x3*x4 + x1*x5 + x2*x3*x5 + x2*x3 + x2*x4 + x2*x5 + x3*x4 + x3*x5 Function is bent. SDP design incidence structure t-design parameters: (True, (2, 64, 28, 12)) Classification of Cayley graphs and classification of Cayley graphs of duals are the same: There are 3 extended Cayley classes in the extended translation class. For each extended Cayley class in the extended translation class: Clique polynomial, strongly regular parameters, rank, and order of a representative graph; and linear code and generator matrix for a representative bent function: EC class 0 : Algebraic normal form of representative: x0*x1*x2 + x0*x3 + x1*x3*x4 + x1*x5 + x2*x3*x5 + x2*x3 + x2*x4 + x2*x5 + x3*x4 + x3*x5 Clique polynomial: 32*t^8 + 256*t^7 + 896*t^6 + 1792*t^5 + 4480*t^4 + 3584*t^3 + 896*t^2 + 64*t + 1 Strongly regular parameters: (64, 28, 12, 12) Rank: 14 Order: 5376 Linear code from representative: [28, 6] linear code over GF(2) Generator matrix: [1 0 0 1 1 0 0 1 0 1 0 1 0 1 0 1 1 1 0 0 1 0 0 1 0 0 0 0] [0 1 0 0 1 0 0 1 1 0 0 0 0 1 1 0 1 1 1 0 0 1 0 1 0 0 1 0] [0 0 1 1 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 1 1 1 1 0 0 1 1] [0 0 0 0 0 1 0 1 0 0 1 1 0 1 1 0 0 1 0 1 0 1 1 0 0 1 1 0] [0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1] [0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] Linear code is projective. Weight distribution: {0: 1, 12: 28, 16: 35} EC class 1 : Algebraic normal form of representative: x0*x1*x2 + x0*x2 + x0*x3 + x1*x3*x4 + x1*x5 + x2*x3*x5 + x2*x3 + x2*x4 + x2*x5 + x3*x5 + x5 Clique polynomial: 16*t^8 + 128*t^7 + 448*t^6 + 1280*t^5 + 4224*t^4 + 3584*t^3 + 896*t^2 + 64*t + 1 Strongly regular parameters: (64, 28, 12, 12) Rank: 14 Order: 1536 Linear code from representative: [28, 6] linear code over GF(2) Generator matrix: [1 0 0 1 0 1 0 0 1 0 1 1 0 1 1 0 1 0 1 1 0 0 0 1 0 0 0 0] [0 1 0 1 0 0 0 1 0 0 0 1 0 1 0 0 1 1 1 1 0 1 1 0 0 0 1 0] [0 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1 0 1 0 0 1 0 0 0 0 1 1] [0 0 0 0 1 0 0 0 1 1 0 1 0 1 0 1 0 0 1 0 1 1 1 0 0 1 1 0] [0 0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1] [0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] Linear code is projective. Weight distribution: {0: 1, 12: 28, 16: 35} EC class 2 : Algebraic normal form of representative: x0*x1*x2 + x0*x1 + x0*x2 + x0*x3 + x0 + x1*x2 + x1*x3*x4 + x1*x5 + x1 + x2*x3*x5 + x2*x3 + x2*x4 + x2*x5 + x2 + x4 Clique polynomial: 176*t^8 + 1408*t^7 + 9664*t^6 + 22272*t^5 + 20608*t^4 + 7680*t^3 + 1152*t^2 + 64*t + 1 Strongly regular parameters: (64, 36, 20, 20) Rank: 14 Order: 1536 Linear code from representative: [36, 6] linear code over GF(2) Generator matrix: [1 0 1 0 1 0 1 0 1 1 0 0 1 0 1 0 1 0 1 0 0 1 0 0 0 1 1 1 0 1 0 1 0 0 0 0] [0 1 1 0 0 1 1 0 1 0 0 0 0 1 1 1 1 0 1 0 0 1 1 0 1 0 0 1 1 1 1 1 1 0 1 0] [0 0 0 1 1 1 1 0 1 1 0 1 1 1 1 0 0 0 1 1 0 1 1 0 1 1 0 0 0 1 1 0 0 0 1 1] [0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 1 0 0 0 1 1 1 0 0 0 0 0 1 1 1 1 1] [0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1] [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1] Linear code is projective. Weight distribution: {0: 1, 16: 27, 20: 36}

Produce a matrix plot of the weight_class_matrix.

matrix_plot(c[n].weight_class_matrix, cmap='gist_stern', colorbar=True)
Image in a Jupyter notebook

Produce a matrix plot of bent_cayley_graph_index_matrix, the matrix of indices of extended Cayley classes within the extended translation class.

matrix_plot(c[n].bent_cayley_graph_index_matrix, cmap='gist_stern', colorbar=True)
Image in a Jupyter notebook

Print the number of distinct bent functions within the Extended Translation Class, and produce a matrix plot showing where these occur within the class.

%%time bf = BentFunction(c[n].algebraic_normal_form) bf_etc = BooleanFunctionExtendedTranslateClassification.from_function(bf)
2023-02-19 11:42:44.219778 0 0 2023-02-19 11:42:49.803557 1 64 2023-02-19 11:42:55.671548 2 128 2023-02-19 11:43:01.482519 3 192 2023-02-19 11:43:07.119649 4 256 2023-02-19 11:43:12.832261 5 320 2023-02-19 11:43:18.281192 6 384 2023-02-19 11:43:24.613268 7 448 2023-02-19 11:43:30.054828 8 512 2023-02-19 11:43:35.695061 9 576 2023-02-19 11:43:41.419778 10 640 2023-02-19 11:43:47.006124 11 704 2023-02-19 11:43:52.414929 12 768 2023-02-19 11:43:58.381702 13 832 2023-02-19 11:44:04.079551 14 896 2023-02-19 11:44:09.767654 15 960 2023-02-19 11:44:15.715076 16 1024 2023-02-19 11:44:21.412416 17 1088 2023-02-19 11:44:27.028313 18 1152 2023-02-19 11:44:32.950677 19 1216 2023-02-19 11:44:38.467948 20 1280 2023-02-19 11:44:44.044297 21 1344 2023-02-19 11:44:49.515299 22 1408 2023-02-19 11:44:55.138660 23 1472 2023-02-19 11:45:00.560699 24 1536 2023-02-19 11:45:05.960975 25 1600 2023-02-19 11:45:11.632942 26 1664 2023-02-19 11:45:17.125392 27 1728 2023-02-19 11:45:22.556523 28 1792 2023-02-19 11:45:28.035617 29 1856 2023-02-19 11:45:33.488241 30 1920 2023-02-19 11:45:38.992447 31 1984 2023-02-19 11:45:44.777051 32 2048 2023-02-19 11:45:50.199261 33 2112 2023-02-19 11:45:55.706753 34 2176 2023-02-19 11:46:01.264795 35 2240 2023-02-19 11:46:06.872615 36 2304 2023-02-19 11:46:12.316798 37 2368 2023-02-19 11:46:17.840966 38 2432 2023-02-19 11:46:23.266066 39 2496 2023-02-19 11:46:28.858415 40 2560 2023-02-19 11:46:34.295613 41 2624 2023-02-19 11:46:39.773200 42 2688 2023-02-19 11:46:45.206490 43 2752 2023-02-19 11:46:50.944784 44 2816 2023-02-19 11:46:56.472365 45 2880 2023-02-19 11:47:01.963469 46 2944 2023-02-19 11:47:07.360001 47 3008 2023-02-19 11:47:12.811002 48 3072 2023-02-19 11:47:18.788780 49 3136 2023-02-19 11:47:24.563635 50 3200 2023-02-19 11:47:30.061330 51 3264 2023-02-19 11:47:35.724742 52 3328 2023-02-19 11:47:41.642273 53 3392 2023-02-19 11:47:47.509547 54 3456 2023-02-19 11:47:53.176457 55 3520 2023-02-19 11:47:59.236761 56 3584 2023-02-19 11:48:05.107230 57 3648 2023-02-19 11:48:10.777674 58 3712 2023-02-19 11:48:16.360553 59 3776 2023-02-19 11:48:21.799175 60 3840 2023-02-19 11:48:27.200792 61 3904 2023-02-19 11:48:32.695808 62 3968 2023-02-19 11:48:38.065039 63 4032 2023-02-19 11:48:43.666671 CPU times: user 5min 47s, sys: 285 ms, total: 5min 47s Wall time: 5min 59s
name_n = "p" + str(dim) + "_" + str(n) bf_etc.save_mangled(name_n, dir=sobj_dir)
print("Number of bent functions in the extended translation class is", len(bf_etc.boolean_function_list)) print("Number of general linear equivalence classes in the extended translation class is", len(bf_etc.general_linear_class_list))
Number of bent functions in the extended translation class is 4096 Number of general linear equivalence classes in the extended translation class is 3
matrix_plot(bf_etc.general_linear_class_index_matrix, cmap='gist_stern', colorbar=True)
Image in a Jupyter notebook
matrix_plot(bf_etc.boolean_function_index_matrix, cmap='gist_stern', colorbar=True)
Image in a Jupyter notebook

Test to see if the bent functions corresponding to each pair of classifications are general linear equivalent or extended Cayley equivalent

c_glc_eq_matrix = matrix(len(c)-1) c_cay_eq_matrix = matrix(len(c)-1) for i in range(1, len(c)): bf_i = BentFunction(c[i].algebraic_normal_form) bf_i_glc = BooleanFunctionGeneralLinearClass(bf_i) c_glc_eq_matrix[i-1, i-1] = 1 c_cay_eq_matrix[i-1, i-1] = 1 for j in range(i+1, len(c)): bf_j = BentFunction(c[j].algebraic_normal_form) bf_j_glc = BooleanFunctionGeneralLinearClass(bf_j) is_gle = 1 if (bf_i_glc == bf_j_glc) else 0 is_cay = 1 if (bf_i.cayley_graph().is_isomorphic(bf_j.cayley_graph())) else 0 c_glc_eq_matrix[i-1, j-1] = c_glc_eq_matrix[j-1, i-1] = is_gle c_cay_eq_matrix[i-1, j-1] = c_cay_eq_matrix[j-1, i-1] = is_cay print(c_glc_eq_matrix)
[1 0 0 0] [0 1 0 0] [0 0 1 0] [0 0 0 1]

Test to see if the bent functions corresponding to c[1] and c[2] are extended Cayley equivalent

print(c_cay_eq_matrix)
[1 1 0 0] [1 1 0 0] [0 0 1 0] [0 0 0 1]
bf_1 = BentFunction(c[1].algebraic_normal_form) bf_2 = BentFunction(c[2].algebraic_normal_form) bf_1.cayley_graph().is_isomorphic(bf_2.cayley_graph())
True

Double check that the boolean function corresponding to c[2] has an extended translation class that contains 15 different general linear equivalence classes.

p6_2_etc = BooleanFunctionExtendedTranslateClassification.load_mangled("p6_2", dir=sobj_dir) glcl = p6_2_etc.general_linear_class_list glc_eq_matrix = matrix(len(glcl)) for i in range(len(glcl)): bf_i = BooleanFunctionGeneralLinearClass(glcl[i]) glc_eq_matrix[i, i] = 1 for j in range(i+1, len(glcl)): bf_j = BooleanFunctionGeneralLinearClass(glcl[j]) is_le = 1 if (bf_i == bf_j) else 0 glc_eq_matrix[i, j] = glc_eq_matrix[j, i] = is_le print(glc_eq_matrix)
[1 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 1 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 0 1 0 0 0 0 0 0 0 0 0 0 0 0] [0 0 0 1 0 0 0 0 0 0 0 0 0 0 0] [0 0 0 0 1 0 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 1 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 1 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 1 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 1 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 1 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 1 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 1 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 1 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 0 1 0] [0 0 0 0 0 0 0 0 0 0 0 0 0 0 1]

Now produce a reclassification r by seeing which extended Cayley classes are repeated between extended translation classes.

r = BooleanDimensionCayleyGraphReclassification(c)
1 : [ 0 1] [ 0 1] [2304 1792] [ 0 1] [2304 1792] 2 : [ 0 2 3] [ 0 1 2] [ 512 1792 1792] [ 0 1 2] [ 512 1792 1792] 3 : [ 4 5 6 7] [ 0 1 2 3] [1280 768 1024 1024] [ 0 1 2 3] [1280 768 1024 1024] 4 : [ 8 9 10] [ 0 1 2] [ 512 1792 1792] [ 0 1 2] [ 512 1792 1792]

Each entry in reclassification_table has as row 0, the "global" index of each extended Cayley class in the extended translation class.

Row 1 contains the local index of each extended Cayley class in the extended translation class, as given by the corresponding bent functions.

Row 2 contains the size of each extended Cayley class in the extended translation class, as given by the corresponding bent functions.

Row 3 contains the local index of each extended Cayley class in the extended translation class, as given by the Walsh Hadamard dual of each of the corresponding bent functions.

Row 4 contains the size of each extended Cayley class in the extended translation class, as given by the Walsh Hadamard dual of each of the corresponding bent functions.

We see that:

  • Extended Cayley class 0 occurs in both Extended Translation class 1 (2304 Cayley graphs) and Extended Translation class 2 (512 Cayley graphs).

The list r.classification_list contains the classifications in c, but with each of the matrices bent_cayley_graph_index_matrix and dual_cayley_graph_index_matrix using the indices from row 0 of reclassification_table corresponding to each index from row 1 and row 3 respectively.

rc = r.classification_list for k in range(1, len(rc)): print("") print("Classification", k) print("") matrix_plot(rc[k].weight_class_matrix, cmap='gist_stern', colorbar=True).show() matrix_plot(rc[k].bent_cayley_graph_index_matrix, cmap='gist_stern', colorbar=True).show() matrix_plot(rc[k].dual_cayley_graph_index_matrix, cmap='gist_stern', colorbar=True).show()
Classification 1
Image in a Jupyter notebookImage in a Jupyter notebookImage in a Jupyter notebook
Classification 2
Image in a Jupyter notebookImage in a Jupyter notebookImage in a Jupyter notebook
Classification 3
Image in a Jupyter notebookImage in a Jupyter notebookImage in a Jupyter notebook
Classification 4
Image in a Jupyter notebookImage in a Jupyter notebookImage in a Jupyter notebook