Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
22144 views
Kernel: SageMath 9.7

Cayley graphs of binary bent functions of dimension 4.

Import the required modules.

from os import path 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)

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 4 dimensions.

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

Set c to be the list of classifications for dimension 4, starting from 1. c[0] is None.

dim = 4
sobj_dir = path.join("..", "sobj")
c = save_boolean_dimension_cayley_graph_classifications(dim, dir=sobj_dir)
Function 1 : 2025-05-27 13:54:38.342539 0 0 2025-05-27 13:54:40.551342 1 2 2025-05-27 13:54:40.617041 2 2 2025-05-27 13:54:40.664908 3 2 2025-05-27 13:54:40.714792 4 2 2025-05-27 13:54:40.763340 5 2 2025-05-27 13:54:40.811893 6 2 2025-05-27 13:54:40.859522 7 2 2025-05-27 13:54:40.911734 8 2 2025-05-27 13:54:40.960745 9 2 2025-05-27 13:54:41.008865 10 2 2025-05-27 13:54:41.060062 11 2 2025-05-27 13:54:41.111102 12 2 2025-05-27 13:54:41.162483 13 2 2025-05-27 13:54:41.214008 14 2 2025-05-27 13:54:41.283936 15 2 2025-05-27 13:54:41.380685 Algebraic normal form of Boolean function: x0*x1 + x2*x3 Function is bent. SDP design incidence structure t-design parameters: (True, (2, 16, 6, 2)) 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.

Display the length of c, the list of classifications.

len(c)
2

Verify that c[0] is None.

print(c[0])
None

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

n = 1
c[n].algebraic_normal_form
x0*x1 + x2*x3

Produce a report on the classification c[1].

c[n].report(report_on_graph_details=True)
Algebraic normal form of Boolean function: x0*x1 + x2*x3 Function is bent. SDP design incidence structure t-design parameters: (True, (2, 16, 6, 2)) 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 Clique polynomial: 8*t^4 + 32*t^3 + 48*t^2 + 16*t + 1 Strongly regular parameters: (16, 6, 2, 2) Rank: 6 Order: 1152 Linear code from representative: [6, 4] linear code over GF(2) Generator matrix: [1 0 0 0 0 1] [0 1 0 1 0 0] [0 0 1 1 0 0] [0 0 0 0 1 1] Linear code is projective. Weight distribution: {0: 1, 2: 6, 4: 9} EC class 1 : Algebraic normal form of representative: x0*x1 + x0 + x1 + x2*x3 Clique polynomial: 16*t^5 + 120*t^4 + 160*t^3 + 80*t^2 + 16*t + 1 Strongly regular parameters: (16, 10, 6, 6) Rank: 6 Order: 1920 Linear code from representative: [10, 4] linear code over GF(2) Generator matrix: [1 0 1 0 1 0 0 1 0 0] [0 1 1 0 1 1 0 1 1 0] [0 0 0 1 1 1 0 0 0 1] [0 0 0 0 0 0 1 1 1 1] Linear code is projective. Weight distribution: {0: 1, 4: 5, 6: 10}

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
%%time bf = BentFunction(c[1].algebraic_normal_form) bf_etc = BooleanFunctionExtendedTranslateClassification.from_function(bf)
2025-05-27 13:54:45.241238 0 0 2025-05-27 13:54:45.455595 1 16 2025-05-27 13:54:45.520806 2 16 2025-05-27 13:54:45.592180 3 16 2025-05-27 13:54:45.683511 4 16 2025-05-27 13:54:45.759822 5 16 2025-05-27 13:54:45.834626 6 16 2025-05-27 13:54:45.905379 7 16 2025-05-27 13:54:45.998103 8 16 2025-05-27 13:54:46.076366 9 16 2025-05-27 13:54:46.164385 10 16 2025-05-27 13:54:46.247318 11 16 2025-05-27 13:54:46.322478 12 16 2025-05-27 13:54:46.417283 13 16 2025-05-27 13:54:46.496576 14 16 2025-05-27 13:54:46.569768 15 16 2025-05-27 13:54:46.660503 CPU times: user 1.27 s, sys: 24.1 ms, total: 1.3 s Wall time: 1.43 s
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 16 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