The La Jolla Circulant Weighing Matrix Repository

The La Jolla Circulant Weighing Matrix Repository

This page is a jupyter notebook which allows users to access the data.

A circulant weighing matrix is an \(n \times n\) matrix \(W\) with entries from \(\{0, \pm 1 \}\) where each row is a cyclic shift of the one before, and

\[W W^T = kI_n.\]

Tan gave tables with existence results for \(n \leq 200\) and \(k \leq 100\). Arasu, Gordon and Zhang settled 12 of 34 open cases.

This Jupyter notebook gives access to a database of known circulant weighing matrices and existence results for \(n \leq 1000\) and \(k < 20^2\). To run it, use the binder launch button above.

import pandas as pd
cwparams = pd.read_csv('cwmparams.csv', sep='	')

cwparams is a database of known existence results.

cwparams.head()
n s Status Reference
0 4 2 All Eades and Hain
1 5 2 No Eades and Hain
2 6 2 All Eades and Hain
3 7 2 All Eades
4 8 2 All Eades and Hain
cwlist = pd.read_csv('cwmlist.csv', sep='	')

cwlist is a database of known circulant weighing matrices.

cwlist.head()
n s P N Reference
0 4 2 1,2,3 0 Eades and Hain
1 6 2 1,3,4 0 Eades and Hain
2 7 2 1,2,4 0 Eades and Hain
3 8 2 1,4,5 0 Eades and Hain
4 8 2 2,4,6 0 Eades and Hain
from cwm_code import *

cwm_code.py contains Python functions to access the database.

get_status(cwparams,28,3)
No CW(28,3^2)s exist
Reference: Ang, Arasu, Ma and Strassler

get_status() checks what is known about some parameters.

show(cwlist,28,4)
10 CW(28,16)s in database
P: {0,3,5,9,16,17,18,19,23,24},	N: {1,2,4,10,14,15}
P: {1,2,3,4,8,16,18,19,22,23},	N: {0,5,9,14,15,17}
P: {0,1,2,9,11,15,18,22,23,25},	N: {4,7,8,14,16,21}
P: {0,3,4,5,9,17,19,20,22,23},	N: {1,6,8,14,15,18}
P: {1,2,4,5,8,16,18,21,22,23},	N: {0,7,9,14,15,19}
P: {0,2,3,5,9,17,18,19,22,23},	N: {1,4,8,14,15,16}
P: {1,2,4,7,8,15,20,21,22,24},	N: {0,6,10,14,16,18}
P: {0,1,2,4,7,14,15,20,21,24},	N: {6,8,10,16,18,22}
P: {0,1,2,4,8,14,15,20,22,24},	N: {6,7,10,16,18,21}
P: {0,2,4,7,8,14,20,21,22,24},	N: {1,6,10,15,16,18}

show() displays all known CW’s for a set of parameters.

C = get_cw(cwlist,28,4,3)

get_cw(n,s,i) pulls the \(i\)th \(CW(n,s^2)\) out of the database.

is_cw(C)
P = [0, 3, 4, 5, 9, 17, 19, 20, 22, 23],
N = [1, 6, 8, 14, 15, 18]

is a CW(28,4^2)
True

is_cw(C) verifies that \(C\) is actually a circulant weighing matrix.

n_range = [50,100]
s_range = [4,6]
comment = 'Arasu'
status = ['Yes','All']
search_cwm(cwparams,n_range,s_range,comment,status)
56	4	Yes	Arasu et al., 2006
62	4	Yes	Arasu et al., 2006
70	4	Yes	Arasu et al., 2006
84	4	Yes	Arasu et al., 2006
93	4	All	Arasu et al., 2006
98	4	Yes	Arasu et al., 2006
66	5	All	Arasu and Torban	 1999
99	5	All	Arasu and Torban	 1999
91	6	Yes	Arasu and Seberry (1998)

search_cwm() reproduces the behavior of the original CWM website. It takes a range of \(n\) and \(s\), comment string and status list, and prints the parameters in the dataset matching the search.