# assignDegrees -- Weights entries of a matrix to make associated map of free modules graded

## Synopsis

• Usage:
assignDegrees(M) or assignDegrees(M,targetDegs,sourceDegs)
• Inputs:
• M, an instance of the type NCMatrix,
• targetDegs, a list, a list of integer weights for the target basis vectors
• sourceDegs, a list, a list of integer weights for the source basis vectors
• Outputs:
• an instance of the type NCMatrix, the same matrix M with source and target keys specified and isHomogeneous flag true

## Description

A matrix M with homogeneous entries in an NCRing can determine a homomorphism of graded free modules if the entries satisfy certain consistency conditions. Finding a set of degrees for source and target basis vectors such that M determines a graded module map is an integer programming problem. This method does not solve the problem in general.

With only one input, this method checks to see if the entries in each column all have the same homogeneous degree. If so, the method assigns source and target degrees in the natural way and the isHomogeneous flag is set for M. If not, all degrees are set to 0 and the flag is not set. This method is called any time a matrix is created.

With three inputs, the user may specify the desired degree shifts on inputs and outputs such that the associated module map is graded.

 i1 : B = threeDimSklyanin(QQ,{1,1,-1},{x,y,z}) --Calling Bergman for NCGB calculation. Complete! o1 = B o1 : NCQuotientRing i2 : M = ncMatrix {{x,y,z,0}, {-y*z-2*x^2,-y*x,z*x-x*z,x},{x*y-2*y*x,x*z,-x^2,y}, {-y^2-z*x,x^2,-x*y,z}} o2 = | x y z 0 | | -y*z-2*x^2 -y*x y^2-2*x*z x | | -2*y*x+x*y x*z -x^2 y | | -2*y^2+x*z x^2 -x*y z | o2 : NCMatrix i3 : isHomogeneous M o3 = false i4 : assignDegrees(M,{1,0,0,0},{2,2,2,1}) o4 = | x y z 0 | | -y*z-2*x^2 -y*x y^2-2*x*z x | | -2*y*x+x*y x*z -x^2 y | | -2*y^2+x*z x^2 -x*y z | o4 : NCMatrix i5 : isHomogeneous M o5 = true i6 : N = ncMatrix {gens B} o6 = | x y z | o6 : NCMatrix i7 : isHomogeneous N o7 = true