Interface to a classification database using sqlite3
The classification_database_sqlite3
module defines interfaces
to manipulate an SQLite3 database of Cayley graph classifications.
AUTHORS:
Paul Leopardi (2017-10-28)
- boolean_cayley_graphs.classification_database_sqlite3.canonical_label_hash(g)[source]
Hash a graph canonical label.
INPUT:
g
– a graph canonical label.
OUTPUT: A hash digest as a bytes object.
EXAMPLE:
sage: from boolean_cayley_graphs.classification_database_sqlite3 import * sage: from boolean_cayley_graphs.bent_function import BentFunction sage: bentf = BentFunction([0,0,0,1]) sage: cayley_graph = bentf.extended_cayley_graph() sage: cgcl = cayley_graph.canonical_label().graph6_string() sage: cgcl_hash = canonical_label_hash(cgcl) sage: print(type(cgcl_hash)) <class 'bytes'> sage: print(len(cgcl_hash)) 32
- boolean_cayley_graphs.classification_database_sqlite3.connect_to_database(db_name)[source]
Connect to an existing database.
INPUT:
db_name
– string. The name of the existing database.
OUTPUT: a database connection object.
EXAMPLE:
Create a database using a temporary filename, connect to it, then drop the database.
sage: from sage.misc.temporary_file import tmp_filename sage: db_name = tmp_filename(ext='.db') sage: from boolean_cayley_graphs.classification_database_sqlite3 import * sage: conn = create_database(db_name) sage: con2 = connect_to_database(db_name) sage: type(con2) <class 'sqlite3.Connection'> sage: drop_database(db_name)
- boolean_cayley_graphs.classification_database_sqlite3.create_classification_tables(db_name)[source]
Create the tables used for a database of Cayley graph classifications.
INPUT:
db_name
– string. The name of an existing database.
OUTPUT: a database connection object.
EXAMPLE:
Create a database, with tables, using a temporary filename, list the table names, then drop the database.
sage: from boolean_cayley_graphs.classification_database_sqlite3 import * sage: import os sage: db_name = tmp_filename(ext='.db') sage: conn = create_database(db_name) sage: conn.close() sage: conn = create_classification_tables(db_name) sage: os.path.exists(db_name) True sage: curs = conn.cursor() sage: result = curs.execute("SELECT name FROM sqlite_master WHERE type='table'") sage: for row in curs: ....: for x in row: ....: print(x) ....: bent_function graph cayley_graph matrices sage: conn.close() sage: drop_database(db_name)
- boolean_cayley_graphs.classification_database_sqlite3.create_database(db_name)[source]
Create a database.
INPUT:
db_name
– string. The name of the database to be created.
OUTPUT: a database connection object.
EXAMPLE:
Create a database using a temporary filename, then drop the database.
sage: from sage.misc.temporary_file import tmp_filename sage: db_name = tmp_filename(ext='.db') sage: from boolean_cayley_graphs.classification_database_sqlite3 import * sage: conn = create_database(db_name) sage: type(conn) <class 'sqlite3.Connection'> sage: drop_database(db_name)
- boolean_cayley_graphs.classification_database_sqlite3.drop_database(db_name)[source]
Drop a database, if it exists.
INPUT:
db_name
– string. The name of the existing database.
OUTPUT: None.
EXAMPLE:
Create a database using a temporary filename, then drop the database.
sage: from boolean_cayley_graphs.classification_database_sqlite3 import * sage: import os sage: db_name = tmp_filename(ext='.db') sage: conn = create_database(db_name) sage: os.path.exists(db_name) True sage: drop_database(db_name) sage: os.path.exists(db_name) False sage: drop_database(db_name) sage: os.path.exists(db_name) False
- boolean_cayley_graphs.classification_database_sqlite3.flatten(t)
- boolean_cayley_graphs.classification_database_sqlite3.insert_classification(conn, bfcgc, name=None)[source]
Insert a Cayley graph classification into a database.
INPUT:
conn
– a connection object for the database.bfcgc
– a Cayley graph classification.name
– string (default: None). The name of the bent function.
OUTPUT: None.
A cursor object corresponding to state of the database after the classification is inserted.
EXAMPLE:
Create a database, with tables, using a temporary filename, insert a classification, retrieve it by bent function, then drop the database.
sage: from boolean_cayley_graphs.classification_database_sqlite3 import * sage: from boolean_cayley_graphs.bent_function import BentFunction sage: from boolean_cayley_graphs.bent_function_cayley_graph_classification import BentFunctionCayleyGraphClassification sage: bentf = BentFunction([0,0,0,1]) sage: bfcgc = BentFunctionCayleyGraphClassification.from_function(bentf) sage: bfcgc.algebraic_normal_form x0*x1 sage: db_name = tmp_filename(ext='.db') sage: conn = create_classification_tables(db_name) sage: insert_classification(conn, bfcgc, 'bentf') sage: result = select_classification_where_bent_function(conn, bentf) sage: result.algebraic_normal_form x0*x1 sage: drop_database(db_name)
- boolean_cayley_graphs.classification_database_sqlite3.select_classification_where_bent_function(conn, bentf)[source]
Retrieve a Cayley graph classification for a given bent function from a database.
INPUT:
conn
– a connection object for the database.bentf
– class BentFunction. A bent function.
OUTPUT:
class BentFunctionCayleyGraphClassification. The corresponding Cayley graph classification.
EXAMPLE:
Create a database, with tables, using a temporary filename, insert a classification, retrieve it by bent function, then drop the database.
sage: from boolean_cayley_graphs.classification_database_sqlite3 import * sage: from boolean_cayley_graphs.bent_function import BentFunction sage: from boolean_cayley_graphs.bent_function_cayley_graph_classification import BentFunctionCayleyGraphClassification sage: bentf = BentFunction([0,0,0,1]) sage: bfcgc = BentFunctionCayleyGraphClassification.from_function(bentf) sage: bfcgc.algebraic_normal_form x0*x1 sage: db_name = tmp_filename(ext='.db') sage: conn = create_classification_tables(db_name) sage: insert_classification(conn, bfcgc, 'bentf') sage: result = select_classification_where_bent_function(conn, bentf) sage: result.algebraic_normal_form x0*x1 sage: type(result) <class 'boolean_cayley_graphs.bent_function_cayley_graph_classification.BentFunctionCayleyGraphClassification'> sage: result.report(report_on_matrix_details=True) Algebraic normal form of Boolean function: x0*x1 Function is bent. <BLANKLINE> Weight class matrix: [0 0 0 1] [0 1 0 0] [0 0 1 0] [1 0 0 0] <BLANKLINE> SDP design incidence structure t-design parameters: (True, (1, 4, 1, 1)) <BLANKLINE> Classification of Cayley graphs and classification of Cayley graphs of duals are the same: <BLANKLINE> There are 2 extended Cayley classes in the extended translation class. <BLANKLINE> Matrix of indices of Cayley graphs: [0 0 0 1] [0 1 0 0] [0 0 1 0] [1 0 0 0] sage: drop_database(db_name)
- boolean_cayley_graphs.classification_database_sqlite3.select_classification_where_bent_function_cayley_graph(conn, bentf, algorithm='sage')[source]
Given a bent function
bentf
, retrieve all classifications that contain a Cayley graph isomorphic to the Cayley graph ofbentf
.INPUT:
conn
– a connection object for the database.bentf
– class BentFunction. A bent function.algorithm
– string (default: BentFunctionCayleyGraphClassification.default_algorithm). Algorithm used for canonical labelling.
OUTPUT:
A list where each entry has class BentFunctionCayleyGraphClassification. The corresponding list of Cayley graph classifications.
NOTE:
The list is not sorted in any way.
EXAMPLE:
Create a database, with tables, using a temporary filename, insert a classification, retrieve it by bent function Cayley graph, then drop the database.
sage: from boolean_cayley_graphs.classification_database_sqlite3 import * sage: from boolean_cayley_graphs.bent_function import BentFunction sage: from boolean_cayley_graphs.bent_function_cayley_graph_classification import BentFunctionCayleyGraphClassification sage: db_name = 'doctest_select_classification_where_bent_function_db_name' sage: drop_database(db_name) sage: conn = create_database(db_name) sage: conn.close() sage: conn = create_classification_tables(db_name) sage: bentf0 = BentFunction([0,0,0,1]) sage: bfcgc0 = BentFunctionCayleyGraphClassification.from_function(bentf0) sage: bfcgc0.algebraic_normal_form x0*x1 sage: insert_classification(conn, bfcgc0, 'bentf0') sage: bentf1 = BentFunction([1,0,0,0]) sage: bfcgc1 = BentFunctionCayleyGraphClassification.from_function(bentf1) sage: bfcgc1.algebraic_normal_form x0*x1 + x0 + x1 + 1 sage: insert_classification(conn, bfcgc1, 'bentf1') sage: result = select_classification_where_bent_function_cayley_graph(conn, bentf1) sage: type(result) <class 'list'> sage: len(result) 2 sage: sorted_result = sorted(result, key=lambda c: str(c.algebraic_normal_form)) sage: for c in sorted_result: ....: type(c) ....: c.algebraic_normal_form ....: c.report() <class 'boolean_cayley_graphs.bent_function_cayley_graph_classification.BentFunctionCayleyGraphClassification'> x0*x1 Algebraic normal form of Boolean function: x0*x1 Function is bent. <BLANKLINE> <BLANKLINE> SDP design incidence structure t-design parameters: (True, (1, 4, 1, 1)) <BLANKLINE> Classification of Cayley graphs and classification of Cayley graphs of duals are the same: <BLANKLINE> There are 2 extended Cayley classes in the extended translation class. <class 'boolean_cayley_graphs.bent_function_cayley_graph_classification.BentFunctionCayleyGraphClassification'> x0*x1 + x0 + x1 + 1 Algebraic normal form of Boolean function: x0*x1 + x0 + x1 + 1 Function is bent. <BLANKLINE> <BLANKLINE> SDP design incidence structure t-design parameters: (True, (1, 4, 1, 1)) <BLANKLINE> Classification of Cayley graphs and classification of Cayley graphs of duals are the same: <BLANKLINE> There are 2 extended Cayley classes in the extended translation class. sage: conn.close() sage: drop_database(db_name)
- boolean_cayley_graphs.classification_database_sqlite3.select_classification_where_name(conn, name)[source]
Retrieve a Cayley graph classification for a bent function with a given name from a database.
INPUT:
conn
– a connection object for the database.name
– string. The name of the bent function.
OUTPUT: class BentFunctionCayleyGraphClassification. The corresponding a Cayley graph classification.
EXAMPLE:
Create a database, with tables, using a temporary filename, insert a classification, retrieve it by name, then drop the database.
sage: from boolean_cayley_graphs.classification_database_sqlite3 import * sage: from boolean_cayley_graphs.bent_function import BentFunction sage: from boolean_cayley_graphs.bent_function_cayley_graph_classification import BentFunctionCayleyGraphClassification sage: db_name = tmp_filename(ext='.db') sage: conn = create_classification_tables(db_name) sage: bentf = BentFunction([0,0,0,1]) sage: bfcgc = BentFunctionCayleyGraphClassification.from_function(bentf) sage: bfcgc.algebraic_normal_form x0*x1 sage: insert_classification(conn, bfcgc,'bentf') sage: result = select_classification_where_name(conn, 'bentf') sage: result.algebraic_normal_form x0*x1 sage: type(result) <class 'boolean_cayley_graphs.bent_function_cayley_graph_classification.BentFunctionCayleyGraphClassification'> sage: result.report(report_on_matrix_details=True) Algebraic normal form of Boolean function: x0*x1 Function is bent. <BLANKLINE> Weight class matrix: [0 0 0 1] [0 1 0 0] [0 0 1 0] [1 0 0 0] <BLANKLINE> SDP design incidence structure t-design parameters: (True, (1, 4, 1, 1)) <BLANKLINE> Classification of Cayley graphs and classification of Cayley graphs of duals are the same: <BLANKLINE> There are 2 extended Cayley classes in the extended translation class. <BLANKLINE> Matrix of indices of Cayley graphs: [0 0 0 1] [0 1 0 0] [0 0 1 0] [1 0 0 0] sage: drop_database(db_name)