public static void AddXYTran(AlignedArray x, int[] rgposY, AlignedArray valuesY, int posMinY, int iposMinY, int iposLimY, AlignedArray mat, AlignedArray accGrads, AlignedArray accUpdates, float decay, float cond, int crow) { Contracts.Assert(Compat(x)); Contracts.AssertNonEmpty(rgposY); Contracts.Assert(Compat(valuesY)); Contracts.Assert(Compat(mat)); Contracts.Assert(0 <= iposMinY && iposMinY <= iposLimY && iposLimY <= rgposY.Length); Contracts.Assert(0 < crow && crow <= x.Size); Contracts.Assert(x.Size * valuesY.Size == mat.Size); Contracts.Assert(mat.Size == accGrads.Size); Contracts.Assert(mat.Size == accUpdates.Size); if (iposMinY >= iposLimY) { return; } unsafe { fixed(float *px = &x.Items[0]) fixed(float *py = &valuesY.Items[0]) fixed(int *pposy = &rgposY[0]) fixed(float *pmat = &mat.Items[0]) fixed(float *pag = &accGrads.Items[0]) fixed(float *pau = &accUpdates.Items[0]) { Thunk.AddXYTranGradPX(Ptr(x, px), pposy, Ptr(valuesY, py), posMinY, iposMinY, iposLimY, Ptr(mat, pmat), Ptr(accGrads, pag), Ptr(accUpdates, pau), decay, cond, crow, valuesY.Size); } } }