• The developers of NumPy. Theano is based on its ndarray object and uses much of its implementation.

  • The developers of SciPy. Our sparse matrix support uses their sparse matrix objects. We also reuse other parts.

  • All Theano contributors.

  • All Theano users that have given us feedback.

  • The GPU implementation of tensordot is based on code from Tijmen Tieleman’s gnumpy

  • The original version of the function cpuCount() in the file theano/misc/ come from the project pyprocessing. It is available under the same license as Theano.

  • Our random number generator implementation on CPU and GPU uses the MRG31k3p algorithm that is described in:

    1. L’Ecuyer and R. Touzin, Fast Combined Multiple Recursive Generators with Multipliers of the form a = +/- 2^d +/- 2^e, Proceedings of the 2000 Winter Simulation Conference, Dec. 2000, 683–689.

    We were authorized by Pierre L’Ecuyer to copy/modify his Java implementation in the SSJ software and to relicense it under BSD 3-Clauses in Theano.

  • A better GPU memory allocator CNMeM was included in Theano in the previous GPU back-end. It is still in the history, but not in the current version. It has the same license.