Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
Real-time collaboration for Jupyter Notebooks, Linux Terminals, LaTeX, VS Code, R IDE, and more,
all in one place.
| Download
GAP 4.8.9 installation with standard packages -- copy to your CoCalc project to get it
Project: cocalc-sagemath-dev-slelievre
Views: 418346############################################################################# ## ## Integers.gi MatricesForHomalg package Mohamed Barakat ## ## Copyright 2007-2008 Lehrstuhl B für Mathematik, RWTH Aachen ## ## The ring of integers ## ############################################################################# #################################### # # constructor functions and methods: # #################################### InstallMethod( CreateHomalgTable, "for the integers", [ IsIntegers ], function( ring ) local RP; RP := rec( ## Can optionally be provided by the RingPackage ## (homalg functions check if these functions are defined or not) ## (homalgTable gives no default value) BestBasis := function( arg ) local M, R, nargs, N, S; M := arg[1]; R := HomalgRing( M ); nargs := Length( arg ); if nargs > 2 then ## compute N, U, and V: (1+4+8) N := NormalFormIntMat( Eval( M )!.matrix, 13 ); elif nargs > 1 then ## compute N and U: (1+4) N := NormalFormIntMat( Eval( M )!.matrix, 5 ); else ## compute N only: (1) N := NormalFormIntMat( Eval( M )!.matrix, 1 ); fi; # assign U: if nargs > 1 and IsHomalgMatrix( arg[2] ) then ## not BestBasis( M, "", V ) SetEval( arg[2], homalgInternalMatrixHull( N.rowtrans ) ); ResetFilterObj( arg[2], IsVoidMatrix ); SetNrRows( arg[2], NrRows( M ) ); SetNrColumns( arg[2], NrRows( M ) ); SetIsInvertibleMatrix( arg[2], true ); fi; # assign V: if nargs > 2 and IsHomalgMatrix( arg[3] ) then ## not BestBasis( M, U, "" ) SetEval( arg[3], homalgInternalMatrixHull( N.coltrans ) ); ResetFilterObj( arg[3], IsVoidMatrix ); SetNrRows( arg[3], NrColumns( M ) ); SetNrColumns( arg[3], NrColumns( M ) ); SetIsInvertibleMatrix( arg[3], true ); fi; S := HomalgMatrix( N.normal, R ); SetNrRows( S, NrRows( M ) ); SetNrColumns( S, NrColumns( M ) ); SetZeroRows( S, [ N.rank + 1 .. NrRows( S ) ] ); SetIsDiagonalMatrix( S, true ); return S; end, RowRankOfMatrix := function( M ) return Rank( Eval( M )!.matrix ); end, ElementaryDivisors := function( arg ) local M; M := arg[1]; return ElementaryDivisorsMat( Eval( M )!.matrix ); end, Gcd := function( a, b ) return GcdInt( a, b ); end, CancelGcd := function( a, b ) local gcd; gcd := GcdInt( a, b ); return [ a / gcd, b / gcd ]; end, Gcd := function( a, b ) return GcdInt( a, b ); end, CancelGcd := function( a, b ) local gcd; gcd := GcdInt( a, b ); return [ a / gcd, b / gcd ]; end, ## Must be defined if other functions are not defined RowReducedEchelonForm := function( arg ) local M, R, nargs, N, H; M := arg[1]; R := HomalgRing( M ); nargs := Length( arg ); if nargs > 1 and IsHomalgMatrix( arg[2] ) then ## not RowReducedEchelonForm( M, "" ) ## compute N and U: (0+2+4) N := NormalFormIntMat( Eval( M )!.matrix, 6 ); # assign U: SetEval( arg[2], homalgInternalMatrixHull( N.rowtrans ) ); ResetFilterObj( arg[2], IsVoidMatrix ); SetNrRows( arg[2], NrRows( M ) ); SetNrColumns( arg[2], NrRows( M ) ); SetIsInvertibleMatrix( arg[2], true ); else ## compute N only: (0+2) N := NormalFormIntMat( Eval( M )!.matrix, 2 ); fi; H := HomalgMatrix( N.normal, R ); SetNrRows( H, NrRows( M ) ); SetNrColumns( H, NrColumns( M ) ); SetZeroRows( H, [ N.rank + 1 .. NrRows( H ) ] ); SetIsUpperStairCaseMatrix( H, true ); return H; end ); Objectify( TheTypeHomalgTable, RP ); return RP; end ); ## create a globally defined ring of integers HOMALG_MATRICES.ZZ := HomalgRingOfIntegers( );