MCPcopy Index your code
hub / github.com/CadQuery/cadquery / derMatrix

Function derMatrix

cadquery/occ_impl/nurbs.py:1085–1128  ·  view source on GitHub ↗

Create a sparse design matrix and corresponding derivative matrices.

(u: Array, order: int, dorder: int, knots: Array)

Source from the content-addressed store, hash-verified

1083
1084@njit
1085def derMatrix(u: Array, order: int, dorder: int, knots: Array) -> list[COO]:
1086 """
1087 Create a sparse design matrix and corresponding derivative matrices.
1088 """
1089
1090 # number of parameter values
1091 nu = np.size(u)
1092
1093 # chunk size
1094 n = order + 1
1095
1096 # temp chunk storage
1097 temp = np.zeros((dorder + 1, n))
1098
1099 # initialize the empty matrix
1100 rv = []
1101
1102 for _ in range(dorder + 1):
1103 rv.append(
1104 COO(
1105 i=np.empty(n * nu, dtype=np.int64),
1106 j=np.empty(n * nu, dtype=np.int64),
1107 v=np.empty(n * nu),
1108 shape=(nu, len(knots) - 1 - order),
1109 )
1110 )
1111
1112 # loop over parameter values
1113 for i in range(nu):
1114 ui = u[i]
1115
1116 # find the supporting span
1117 span = nbFindSpan(ui, order, knots)
1118
1119 # evaluate non-zero functions
1120 nbBasisDer(span, ui, order, dorder, knots, temp)
1121
1122 # update the matrices
1123 for di in range(dorder + 1):
1124 rv[di].i[i * n : (i + 1) * n] = i
1125 rv[di].j[i * n : (i + 1) * n] = span - order + np.arange(n)
1126 rv[di].v[i * n : (i + 1) * n] = temp[di, :]
1127
1128 return rv
1129
1130
1131@njit

Callers 1

approximateFunction · 0.85

Calls 5

COOClass · 0.85
nbFindSpanFunction · 0.85
nbBasisDerFunction · 0.85
appendMethod · 0.80
sizeMethod · 0.45

Tested by

no test coverage detected