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 of bentf.

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)