<s> """<STR_LIT>""" <EOL> from __future__ import print_function , division <EOL> from sympy import Matrix , I , Pow , Rational , exp , pi <EOL> from sympy . physics . quantum . matrixutils import ( <EOL> to_sympy , to_numpy , to_scipy_sparse <EOL> ) <EOL> class MatrixCache ( object ) : <EOL> """<STR_LIT>""" <EOL> def __init__ ( self , dtype = '<STR_LIT>' ) : <EOL> self . _cache = { } <EOL> self . dtype = dtype <EOL> def cache_matrix ( self , name , m ) : <EOL> """<STR_LIT>""" <EOL> try : <EOL> self . _sympy_matrix ( name , m ) <EOL> except ImportError : <EOL> pass <EOL> try : <EOL> self . _numpy_matrix ( name , m ) <EOL> except ImportError : <EOL> pass <EOL> try : <EOL> self . _scipy_sparse_matrix ( name , m ) <EOL> except ImportError : <EOL> pass <EOL> def get_matrix ( self , name , format ) : <EOL> """<STR_LIT>""" <EOL> m = self . _cache . get ( ( name , format ) ) <EOL> if m is not None : <EOL> return m <EOL> raise NotImplementedError ( <EOL> '<STR_LIT>' % <EOL> ( name , format ) <EOL> ) <EOL> def _store_matrix ( self , name , format , m ) : <EOL> self . _cache [ ( name , format ) ] = m <EOL> def _sympy_matrix ( self , name , m ) : <EOL> self . _store_matrix ( name , '<STR_LIT>' , to_sympy ( m ) ) <EOL> def _numpy_matrix ( self , name , m ) : <EOL> m = to_numpy ( m , dtype = self . dtype ) <EOL> self . _store_matrix ( name , '<STR_LIT>' , m ) <EOL> def _scipy_sparse_matrix ( self , name , m ) : <EOL> m = to_scipy_sparse ( m , dtype = self . dtype ) <EOL> self . _store_matrix ( name , '<STR_LIT>' , m ) <EOL> sqrt2_inv = Pow ( <NUM_LIT:2> , Rational ( - <NUM_LIT:1> , <NUM_LIT:2> ) , evaluate = False ) <EOL> matrix_cache = MatrixCache ( ) <EOL> matrix_cache . cache_matrix ( '<STR_LIT>' , Matrix ( [ [ <NUM_LIT:1> , <NUM_LIT:0> ] , [ <NUM_LIT:0> , <NUM_LIT:1> ] ] ) ) <EOL> matrix_cache . cache_matrix ( '<STR_LIT>' , Matrix ( [ [ <NUM_LIT:0> , <NUM_LIT:0> ] , [ <NUM_LIT:0> , <NUM_LIT:1> ] ] ) ) <EOL> matrix_cache . cache_matrix ( '<STR_LIT>' , Matrix ( [ [ <NUM_LIT:1> , <NUM_LIT:0> ] , [ <NUM_LIT:0> , <NUM_LIT:0> ] ] ) ) <EOL> matrix_cache . cache_matrix ( '<STR_LIT>' , Matrix ( [ [ <NUM_LIT:0> , <NUM_LIT:0> ] , [ <NUM_LIT:1> , <NUM_LIT:0> ] ] ) ) <EOL> matrix_cache . cache_matrix ( '<STR_LIT>' , Matrix ( [ [ <NUM_LIT:0> , <NUM_LIT:1> ] , [ <NUM_LIT:0> , <NUM_LIT:0> ] ] ) ) <EOL> matrix_cache . cache_matrix ( '<STR_LIT:X>' , Matrix ( [ [ <NUM_LIT:0> , <NUM_LIT:1> ] , [ <NUM_LIT:1> , <NUM_LIT:0> ] ] ) ) <EOL> matrix_cache . cache_matrix ( '<STR_LIT:Y>' , Matrix ( [ [ <NUM_LIT:0> , - I ] , [ I , <NUM_LIT:0> ] ] ) ) <EOL> matrix_cache . cache_matrix ( '<STR_LIT>' , Matrix ( [ [ <NUM_LIT:1> , <NUM_LIT:0> ] , [ <NUM_LIT:0> , - <NUM_LIT:1> ] ] ) ) <EOL> matrix_cache . cache_matrix ( '<STR_LIT:S>' , Matrix ( [ [ <NUM_LIT:1> , <NUM_LIT:0> ] , [ <NUM_LIT:0> , I ] ] ) ) <EOL> matrix_cache . cache_matrix ( '<STR_LIT:T>' , Matrix ( [ [ <NUM_LIT:1> , <NUM_LIT:0> ] , [ <NUM_LIT:0> , exp ( I * pi / <NUM_LIT:4> ) ] ] ) ) <EOL> matrix_cache . cache_matrix ( '<STR_LIT:H>' , sqrt2_inv * Matrix ( [ [ <NUM_LIT:1> , <NUM_LIT:1> ] , [ <NUM_LIT:1> , - <NUM_LIT:1> ] ] ) ) <EOL> matrix_cache . cache_matrix ( '<STR_LIT>' , Matrix ( [ [ <NUM_LIT:1> , <NUM_LIT:1> ] , [ <NUM_LIT:1> , - <NUM_LIT:1> ] ] ) ) <EOL> matrix_cache . cache_matrix ( <EOL> '<STR_LIT>' , Matrix ( [ [ <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ] , [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:0> ] , [ <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ] , [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:1> ] ] ) ) <EOL> matrix_cache . cache_matrix ( '<STR_LIT>' , sqrt2_inv * Matrix ( [ [ <NUM_LIT:1> , <NUM_LIT:1> ] , [ <NUM_LIT:1> , - <NUM_LIT:1> ] ] ) ) <EOL> matrix_cache . cache_matrix ( '<STR_LIT>' , Matrix ( [ [ I , <NUM_LIT:0> ] , [ <NUM_LIT:0> , - I ] ] ) ) </s>
