Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_broadcast_funcs():
"""
Test of mathematical functions that work with NumPy arrays of
numbers with uncertainties.
"""
x = uncertainties.ufloat((0.2, 0.1))
arr = numpy.array([x, 2*x])
assert unumpy.cos(arr)[1] == uncertainties.umath.cos(arr[1])
# Some functions do not bear the same name in the math module and
# in NumPy (acos instead of arccos, etc.):
assert unumpy.arccos(arr)[1] == uncertainties.umath.acos(arr[1])
# The acos() function should not exist in unumpy because it does
# not exist in numpy:
assert not hasattr(numpy, 'acos')
assert not hasattr(unumpy, 'acos')
# Test of the __all__ variable:
assert 'acos' not in unumpy.__all__
b : float
The z intercept in the benchmark coordinate system.
'''
# beta is the angle between the x bike frame and the x pendulum frame, rotation
# about positive y
beta = par['lam'] - alpha * pi / 180
# calculate the slope of the center of mass line
m = -umath.tan(beta)
# calculate the z intercept
# this the bicycle frame
if part == 'B':
b = -a / umath.cos(beta) - par['rR']
# this is the fork (without handlebar) or the fork and handlebar combined
elif part == 'S' or part == 'H':
b = -a / umath.cos(beta) - par['rF'] + par['w'] * umath.tan(beta)
# this is the handlebar (without fork)
elif part == 'G':
u1, u2 = fwheel_to_handlebar_ref(par['lam'], l1, l2)
b = -a / umath.cos(beta) - (par['rF'] + u2) + (par['w'] - u1) * umath.tan(beta)
else:
print part, "doesn't exist"
raise KeyError
return m, b, beta
K0pp = mT * zT # this value only reports to 13 digit precision it seems?
K0pd = -SA
K0dp = K0pd
K0dd = -SA * umath.sin(p['lam'])
K0 = np.array([[K0pp, K0pd], [K0dp, K0dd]])
K2pp = 0.
K2pd = (ST - mT * zT) / p['w'] * umath.cos(p['lam'])
K2dp = 0.
K2dd = (SA + SF * umath.sin(p['lam'])) / p['w'] * umath.cos(p['lam'])
K2 = np.array([[K2pp, K2pd], [K2dp, K2dd]])
C1pp = 0.
C1pd = (mu*ST + SF*umath.cos(p['lam']) + ITxz / p['w'] *
umath.cos(p['lam']) - mu*mT*zT)
C1dp = -(mu * ST + SF * umath.cos(p['lam']))
C1dd = (IAlz / p['w'] * umath.cos(p['lam']) + mu * (SA +
ITzz / p['w'] * umath.cos(p['lam'])))
C1 = np.array([[C1pp, C1pd], [C1dp, C1dd]])
return M, C1, K0, K2
The steer axis tilt (pi/2 - headtube angle). The angle between the
headtube and a vertical line.
fo: float
The fork offset
Returns
-------
c: float
Trail
cm: float
Mechanical Trail
'''
# trail
c = (rF * umath.sin(lam) - fo) / umath.cos(lam)
# mechanical trail
cm = c * umath.cos(lam)
return c, cm
b : float
The z intercept in the benchmark coordinate system.
'''
# beta is the angle between the x bike frame and the x pendulum frame, rotation
# about positive y
beta = par['lam'] - alpha * pi / 180
# calculate the slope of the center of mass line
m = -umath.tan(beta)
# calculate the z intercept
# this the bicycle frame
if part == 'B':
b = -a / umath.cos(beta) - par['rR']
# this is the fork (without handlebar) or the fork and handlebar combined
elif part == 'S' or part == 'H':
b = -a / umath.cos(beta) - par['rF'] + par['w'] * umath.tan(beta)
# this is the handlebar (without fork)
elif part == 'G':
u1, u2 = fwheel_to_handlebar_ref(par['lam'], l1, l2)
b = -a / umath.cos(beta) - (par['rF'] + u2) + (par['w'] - u1) * umath.tan(beta)
else:
print part, "doesn't exist"
raise KeyError
return m, b, beta
K0pd = -SA
K0dp = K0pd
K0dd = -SA * umath.sin(p['lam'])
K0 = np.array([[K0pp, K0pd], [K0dp, K0dd]])
K2pp = 0.
K2pd = (ST - mT * zT) / p['w'] * umath.cos(p['lam'])
K2dp = 0.
K2dd = (SA + SF * umath.sin(p['lam'])) / p['w'] * umath.cos(p['lam'])
K2 = np.array([[K2pp, K2pd], [K2dp, K2dd]])
C1pp = 0.
C1pd = (mu*ST + SF*umath.cos(p['lam']) + ITxz / p['w'] *
umath.cos(p['lam']) - mu*mT*zT)
C1dp = -(mu * ST + SF * umath.cos(p['lam']))
C1dd = (IAlz / p['w'] * umath.cos(p['lam']) + mu * (SA +
ITzz / p['w'] * umath.cos(p['lam'])))
C1 = np.array([[C1pp, C1pd], [C1dp, C1dd]])
return M, C1, K0, K2
def rotate_inertia_tensor(I, angle):
'''Returns inertia tensor rotated through angle. Only for 2D'''
ca = umath.cos(angle)
sa = umath.sin(angle)
C = np.array([[ca, 0., -sa],
[0., 1., 0.],
[sa, 0., ca]])
Irot = np.dot(C, np.dot(I, C.T))
return Irot