Subspace codes

This project provides a lookup table for the bounds on subspace codes and constant dimension codes.
You are welcome to contribute more information, clarifications, corrections and feature requests. If you want to contact us, press the “Contribute” button in the upper right corner or visit the About page. The preferred syntax for codes is GAP but feel free to submit any data in any format.

How to cite?

There is a technical report in the arXiv: You can also use this BibTex snippet:
  title={Tables of subspace codes},
  author={Heinlein, Daniel and Kiermaier, Michael and Kurz, Sascha and Wassermann, Alfred},
  journal={arXiv preprint arXiv:1601.02864},


Regard the \(n\)-dimensional vector space over the finite field with \(q\) elements denoted as \(\mathbb{F}_q^n\). The set of all subspaces of \(\mathbb{F}_q^n\) can be extended to a metric space using the subspace metric \(d(U,V) := \dim(U+V) - \dim(U \cap V)\). A subspace code, or mixed dimension code, \(C\) is a subset of the subspaces in \(\mathbb{F}_q^n\). Its minimum distance is \(D(C):= \min_{U \ne V \in C} d(U,V)\) and is bounded by the parameter \(d\): \(D(C) \ge d\). If all subspaces in \(C\) have the same dimension \(k\), then \(C\) is called a constant dimension code.
The maximum size of a mixed dimension code is denoted as \(A_q(n,d)\), the maximum size of a constant dimension code is denoted as \(A_q(n,d;k)\).
The Gaussian binomial coefficient \(\binom{v}{k}_{q}\) for a prime power \(q\) counts the number of subspaces of dimension \(k\) in a vector space of dimension \(n\) over a finite field with \(q\) elements and is defined by \(\binom{v}{k}_{q}=\prod_{i=0}^{k-1}\frac{q^v-q^i}{q^k-q^i}\).
This homepage lists known bounds for \(A_q(n,d)\) and \(A_q(n,d;k)\). They can be established by theoretiacal ideas or constructions. Some codes are also provided.

How to use the tables

There are two categories: constant dimension codes, abbreviated with CDC, and mixed dimension codes, abbreviated with MDC.


These tables distinguish between parameters that are important and other parameters that are clear or can be computed exactly using the important parameters. One example for a set of other parameters is the case when \(k > n/2\) because such a code has the same size as the corresponding code with \(k':=n-k \le n/2\).
Using this difference, the table shows the important parameters as a link coloured blue with a yellow background. All other parameters are simply black or omitted, depending on the chosen view.


The tables show all parameters as links.

In both cases ...

... the tables show in their default view (lower bound - upper bound) or if both bounds are equal simply \(A_q(n,d)\) respective \(A_q(n,d;k)\). A star means that the code is classified according to \(\operatorname{P\Gamma{}L}(\mathbb{F}_q^n)\) if it is a CDC and \(\operatorname{P\Gamma{}L}(\mathbb{F}_q^n) \rtimes \langle \pi \rangle\) if it is an MDC, where \(\pi\) is the orthogonalization map involving an arbitrary, non-degenerate, and symmetric bilinear form. If a code is classified, then the number of isomorphism types is in brackets. The tables have additional views and a description is shown in a tooltip next to the view.

How to use the entries in a table?

This detail page shows what is known for this parameters. For example there are codes to download or the results of the computations of the bounds.
The bounds that use parameters show them as a comment. They are linked to a page providing more details of that bound.


For both cases, CDC and MDC, there are details for the used constraints. Usually they have links to literature providing more information.


The literature tab lists all used literature. Most of the entries have links so that one can download the corresponding files.


There is an API that can be used to access frequent data in JSON format. Look for example at /api/2/8/4/3/ or choose an arbitrary entry of a table and press the “Go to API” link.
Here are examples that provides sample programs that query the API.

Example in Python

import httplib
import json

def getDetails(q,n,d,k=None):
        con = httplib.HTTPConnection('')
        if k is None:
                con.request('GET', '/api/%d/%d/%d/' % (q, n, d))
                con.request('GET', '/api/%d/%d/%d/%d/' % (q, n, d, k))
        string = con.getresponse().read()
        data = json.loads(string)
        return data

print 'Details for the constant dimension code q=2, n=8, d=4, k=3'
print getDetails(2,8,4,3)
print 'A_2(8,4;3) >=', getDetails(2,8,4,3)['lower_bound']
print 'Details for the subspace code q=2, n=8, d=4'
print getDetails(2,8,4)
$ python
Details for the constant dimension code q=2, n=8, d=4, k=3
{u'upper_bound_constraints': [{u'parameter': u'', u'name': u'all_subs', u'value': 97155}, {u'parameter': u'', u'name': u'anticode', u'value': 1542}, {u'parameter': u'2', u'name': u'ilp_2', u'value': 1542}, {u'parameter': u'4', u'name': u'ilp_3', u'value': 6477}, {u'parameter': u'', u'name': u'singleton', u'value': 2667}, {u'parameter': u'', u'name': u'sphere_packing', u'value': 97155}, {u'parameter': u'1', u'name': u'ilp_1', u'value': 1493}, {u'parameter': u'5', u'name': u'ilp_4', u'value': 5641}, {u'parameter': u'6', u'name': u'ilp_4', u'value': 5362}, {u'parameter': u'7', u'name': u'ilp_4', u'value': 3134}, {u'parameter': u'', u'name': u'johnson_1', u'value': 1493}, {u'parameter': u'', u'name': u'johnson_2', u'value': 3134}], u'known_codes': [{u'nrisotypes': None, u'details': u'Etzion2013', u'file': u'', u'size': 1312}, {u'nrisotypes': None, u'details': u'Östergård, ALCOMA15', u'file': u'', u'size': 1326}], u'upper_bound': 1493, u'lower_bound': 1326, u'classified': False, u'request': [2, 8, 4, 3], u'liftedmrdsizebound': 1179, u'comments': u'', u'lower_bound_constraints': [{u'parameter': u'', u'name': u'construction_1', u'value': 1179}, {u'parameter': u'', u'name': u'construction_ST_A_1', u'value': 1179}, {u'parameter': u'', u'name': u'construction_ST_B', u'value': 0}, {u'parameter': u'', u'name': u'multicomponent', u'value': 1089}, {u'parameter': u'optimal [(0, 1, 2), (0, 3, 4), (0, 5, 6), (1, 3, 5), (1, 4, 6), (2, 3, 6), (2, 4, 5)]', u'name': u'echelon_ferrers', u'value': 1164}, {u'parameter': u'', u'name': u'graham_sloane', u'value': 381}, {u'parameter': u'', u'name': u'lin_poly', u'value': 1024}, {u'parameter': u'optimal [(0, 1, 2), (0, 3, 5), (0, 3, 6), (0, 4, 7), (0, 5, 6), (1, 3, 7), (1, 4, 5), (1, 4, 6), (2, 3, 4), (2, 5, 7), (2, 6, 7)]', u'name': u'pending_dots', u'value': 1179}, {u'parameter': u'', u'name': u'sphere_covering', u'value': 224}, {u'parameter': u'', u'name': u'trivial_1', u'value': 0}], u'equal_bound_constraints': []}

A_2(8,4;3) >= 1326

Details for the subspace code q=2, n=8, d=4
{u'upper_bound_constraints': [{u'parameter': u'', u'name': u'trivial_3', u'value': 417199}, {u'parameter': u'', u'name': u'cdc_upper_bound', u'value': 9637}, {u'parameter': u'', u'name': u'relax_d', u'value': 9365}], u'known_codes': [], u'upper_bound': 9365, u'lower_bound': 4802, u'classified': False, u'request': [2, 8, 4], u'comments': u'', u'lower_bound_constraints': [{u'parameter': u'', u'name': u'gilbert_varshamov', u'value': 74}, {u'parameter': u'', u'name': u'trivial_2', u'value': 0}, {u'parameter': u'', u'name': u'trivial_4', u'value': 2}, {u'parameter': u'', u'name': u'cdc_lower_bound', u'value': 4801}, {u'parameter': u'', u'name': u'cdc_average_argument', u'value': 92}, {u'parameter': u'', u'name': u'd4_cdc', u'value': 4802}], u'equal_bound_constraints': []}

Example in Java using JSON.simple

import java.util.Map;
import org.json.simple.parser.JSONParser;

class example {
	private static Map _getDetails( URL u ) throws Exception {
		BufferedReader in = new BufferedReader( new InputStreamReader( u.openConnection().getInputStream() ) );
		String line, all = "";
		while ((line = in.readLine()) != null) 
			all += line;
		return (Map) ( new JSONParser() ).parse( all );

	public static Map getDetails( int q, int n, int d ) throws Exception {
		return _getDetails( new URL(""+q+"/"+n+"/"+d+"/") );

	public static Map getDetails( int q, int n, int d, int k ) throws Exception {
		return _getDetails( new URL(""+q+"/"+n+"/"+d+"/"+k+"/") );

	public static void main(String[] args) throws Exception {
		System.out.println( "Details for the constant dimension code q=2, n=8, d=4, k=3" );
		System.out.println( getDetails(2,8,4,3) );
		System.out.println( "A_2(8,4;3) >= " + getDetails(2,8,4,3).get("lower_bound") );
		System.out.println( "Details for the subspace code q=2, n=8, d=4" );
		System.out.println( getDetails(2,8,4) );
$ javac -cp json-simple-1.1.1.jar && java -cp .:json-simple-1.1.1.jar example
Details for the constant dimension code q=2, n=8, d=4, k=3
{"request":[2,8,4,3],"equal_bound_constraints":[],"comments":"","known_codes":[{"file":"","size":1312,"details":"Etzion2013","nrisotypes":null},{"file":"","size":1326,"details":"Östergård, ALCOMA15","nrisotypes":null}],"lower_bound":1326,"lower_bound_constraints":[{"parameter":"","name":"construction_1","value":1179},{"parameter":"","name":"construction_ST_A_1","value":1179},{"parameter":"","name":"construction_ST_B","value":0},{"parameter":"","name":"multicomponent","value":1089},{"parameter":"optimal [(0, 1, 2), (0, 3, 4), (0, 5, 6), (1, 3, 5), (1, 4, 6), (2, 3, 6), (2, 4, 5)]","name":"echelon_ferrers","value":1164},{"parameter":"","name":"graham_sloane","value":381},{"parameter":"","name":"lin_poly","value":1024},{"parameter":"optimal [(0, 1, 2), (0, 3, 5), (0, 3, 6), (0, 4, 7), (0, 5, 6), (1, 3, 7), (1, 4, 5), (1, 4, 6), (2, 3, 4), (2, 5, 7), (2, 6, 7)]","name":"pending_dots","value":1179},{"parameter":"","name":"sphere_covering","value":224},{"parameter":"","name":"trivial_1","value":0}],"liftedmrdsizebound":1179,"classified":false,"upper_bound":1493,"upper_bound_constraints":[{"parameter":"","name":"all_subs","value":97155},{"parameter":"","name":"anticode","value":1542},{"parameter":"2","name":"ilp_2","value":1542},{"parameter":"4","name":"ilp_3","value":6477},{"parameter":"","name":"singleton","value":2667},{"parameter":"","name":"sphere_packing","value":97155},{"parameter":"1","name":"ilp_1","value":1493},{"parameter":"5","name":"ilp_4","value":5641},{"parameter":"6","name":"ilp_4","value":5362},{"parameter":"7","name":"ilp_4","value":3134},{"parameter":"","name":"johnson_1","value":1493},{"parameter":"","name":"johnson_2","value":3134}]}

A_2(8,4;3) >= 1326

Details for the subspace code q=2, n=8, d=4