public DiagBox(int rank, int size, T diagElem) { Contract.Requires <ArgumentOutOfRangeException>(rank >= 0, "rank is negative"); Contract.Requires <ArgumentOutOfRangeException>(size >= 0, "size is negative"); _rank = rank; _size = size; _diagElem = diagElem; _zeroElem = TypeTraits.GetInstanceTraits(diagElem).GetZero(); }
public static Matrix <T> Diag <T>(int size, T element) { T zero = default(T); var traits = TypeTraits.GetInstanceTraits <T>(element); if (traits != null) { zero = traits.GetZero(); } return(new DiagMatrix <T>(size, element, zero)); }
private ITypeInstanceTraits <T> TryGetElementTraits() { if (IsEmpty) { return(null); } var element = _matrix[0, 0]; return(TypeTraits.GetInstanceTraits(element)); }
private ITypeInstanceTraits <T> TryGetInstanceTraits() { if (_box.Sizes.All(s => s > 0)) { int[] indices = new int[_box.Rank]; return(TypeTraits.GetInstanceTraits(_box.ElementAt(indices))); } else { return(null); } }
public Vector <T> GetZero() { if (IsEmpty) { return(Vector.Zero <T>(_vector.Size)); } else { var traits = TypeTraits.GetInstanceTraits(_vector[0]); if (traits == null) { return(Vector.Zero <T>(_vector.Size)); } else { return(Vector.Zero(_vector.Size, traits)); } } }