def test_v3_mul():
    xyz = V3(1, 2, 3) * si.meters

    assert make(V3(2, 4, 6), si.meters).approx(xyz * 2)
    assert make(V3(2, 4, 6), si.meters).approx(2 * xyz)

    with pytest.raises(TypeError):
        xyz * xyz
def test_create_and_extract():
    mass = make(100, SIUnit.Unit(kg=1))
    acceleration = make(1, SIUnit.Unit(m=1, s=-2))

    force = 100 * si.newtons

    assert force.quantity == 100
    assert force.get_as(si.kilonewtons) == 0.1
    assert force == mass * acceleration
Exemple #3
0
def test_qv2_unit():

    qv2 = make(V2(100, 0), si.meters)

    assert make(V2(1, 0), si.unity) == qv2.unit()

    qv2 = qv2.cvt_to(si.millimeters)

    assert make(V2(1, 0), si.unity) == qv2.unit()

    assert qv2 == abs(qv2) * qv2.unit()
Exemple #4
0
def test_qv2_is_orthogonal():
    qv2 = make(V2(1, 1), si.meters)

    assert qv2.is_orthogonal(make(V2(-1, 1), si.meters))
    assert qv2.is_orthogonal(V2(-1, 1))

    assert not qv2.is_orthogonal(make(V2(1, 0), si.meters))
    assert not qv2.is_orthogonal(V2(1, 0))

    with pytest.raises(TypeError):
        V2(1, 0).is_orthogonal(qv2)
Exemple #5
0
def test_qv2_rotate():
    vector = V2(1, 0)
    qv2 = make(vector, si.meters)

    qv2 = qv2.rotate(eta * si.radians)
    assert make(V2(0, 1), si.meters).approx(qv2)

    qv2 = qv2.rotate(eta * si.radians)
    assert make(V2(-1, 0), si.meters).approx(qv2)

    qv2 = qv2.rotate(eta * si.radians)
    assert make(V2(0, -1), si.meters).approx(qv2)
Exemple #6
0
def test_qv2_angle():
    qv_x = make(V2(1, 0), si.meters)
    qv_y = make(V2(0, 1), si.meters)
    qv_xy = make(V2(1, 1), si.meters)

    assert pytest.approx(eta) == qv_x.angle(qv_y).get_as(si.radians)
    assert pytest.approx(eta / 2) == qv_x.angle(qv_xy).get_as(si.radians)
    assert pytest.approx(eta / 2) == qv_y.angle(qv_xy).get_as(si.radians)

    assert pytest.approx(eta) == qv_x.angle(V2(0, 1)).get_as(si.radians)

    with pytest.raises(TypeError):
        V2(0, 1).angle(qv_x)
def test_v3_sub():
    xyz = V3(1, 2, 3) * si.meters

    assert make(V3(0, 0, 0), si.meters).approx(xyz - xyz)

    with pytest.raises(TypeError):
        xyz - V3(1, 2, 3)
def test_v3_add():
    xyz = V3(1, 2, 3) * si.meters

    assert make(V3(2, 4, 6), si.meters).approx(xyz + xyz)

    with pytest.raises(TypeError):
        xyz + V3(1, 2, 3)
Exemple #9
0
def test_qv2_div():
    qv2 = make(V2(11, 21), si.meters)

    div_value = qv2 / 2
    assert V2(5.5, 10.5).approx(div_value.get_as(si.meters))

    qv2 /= 2
    assert V2(5.5, 10.5).approx(qv2.get_as(si.meters))
Exemple #10
0
def test_qv2_is_parallel():
    qv2 = make(V2(1, 1), si.meters)

    assert qv2.is_parallel(make(V2(2, 2), si.meters))
    assert qv2.is_parallel(make(V2(-1, -1), si.meters))

    assert not qv2.is_parallel(make(V2(1, 0), si.meters))
    assert not qv2.is_parallel(make(V2(0, 1), si.meters))

    assert qv2.is_parallel(V2(2, 2))
    assert qv2.is_parallel(V2(-1, -1))

    assert not qv2.is_parallel(V2(1, 0))
    assert not qv2.is_parallel(V2(0, 1))

    with pytest.raises(TypeError):
        V2(1, 1).is_parallel(qv2)
def test_v3_div():
    xyz = V3(2, 4, 6) * si.meters

    assert make(V3(1, 2, 3), si.meters).approx(xyz / 2)

    with pytest.raises(TypeError):
        2 / xyz

    with pytest.raises(TypeError):
        xyz / None
Exemple #12
0
def test_qv2_mul():
    qv2 = make(V2(3, 4), si.meters)

    mul_value = qv2 * 2
    assert V2(6, 8).approx(mul_value.get_as(si.meters))

    mul_value = 2 * qv2
    assert V2(6, 8).approx(mul_value.get_as(si.meters))

    qv2 *= 2
    assert V2(6, 8).approx(qv2.get_as(si.meters))
def test_create():

    xyz = make(V3(1, 2, 3), si.meters)

    assert V3(1, 2, 3) * si.meters == xyz
    assert V3(1, 2, 3) == xyz.get_as(si.meters)
    assert V3(1000, 2000, 3000) == xyz.get_as(si.millimeters)

    assert V2(1, 2) * si.meters == xyz.xy()
    assert V2(2, 3) * si.meters == xyz.yz()
    assert V2(1, 3) * si.meters == xyz.xz()
def test_q_np():
    distances = make(np.array([1, 2, 3, 4, 5, 6, 7]), si.meters)
    distances *= 2

    value = distances.get_as(si.meters)
    assert np.array_equal(value, np.array([2, 4, 6, 8, 10, 12, 14]))

    assert distances[0].approx(2 * si.meters)
    assert distances[6].approx(14 * si.meters)

    assert min(distances).approx(2 * si.meters)
    assert max(distances).approx(14 * si.meters)
Exemple #15
0
def test_qv2_create():
    vector = V2(1, 0)

    vector_q = make(vector, si.meters)

    assert vector == vector_q.get_as(si.meters)
    assert V2(1000, 0) == vector_q.get_as(si.millimeters)

    vector_q = vector * si.meters
    assert vector == vector_q.get_as(si.meters)

    vector_q = si.meters * vector
    assert vector == vector_q.get_as(si.meters)
def test_q_matmul():
    from operator import matmul

    distances = make(np.array([1, 2, 3]), si.meters)
    value = matmul(distances, distances)
    assert value.get_as(si.meters ** 2) == 14

    value = matmul(distances, np.array([1, 2, 3]))
    assert value.get_as(si.meters ** 1) == 14

    with pytest.raises(TypeError):
        # numpy really should just return NotImplemented instead of throwing a TypeError
        value = matmul(np.array([1, 2, 3]), distances)
        assert value.get_as(si.meters ** 1) == 14
def test_q_copying():
    a = 100 * si.meters
    b = copy(a)
    c = deepcopy(a)

    assert a is not b
    assert a is not c
    assert a == b
    assert a == c

    class Ref:
        def __init__(self, value):
            self.value = value

        def __eq__(self, other):
            return self.value == other.value

    ref = Ref(100)
    ref_ref = Ref(Ref(100))

    rq = make(ref, si.meters)
    rc = copy(rq)

    assert rq == rc
    assert rq is not rc

    rqq = make(ref_ref, si.meters)
    rqc = copy(rqq)
    rqd = deepcopy(rqq)

    assert rqq is not rqc
    assert rqq == rqc

    ref_ref.value.value = 50
    assert rqq == rqc
    assert rqq != rqd
Exemple #18
0
def test_qv2_manhattan_dinstance():
    qv2 = make(V2(10, 10), si.meters)

    assert 20 == qv2.manhattan_distance().get_as(si.meters)
    assert 20000 == qv2.manhattan_distance().get_as(si.millimeters)
Exemple #19
0
def test_qv2_magnitude():
    qv2 = make(V2(3, 4), si.meters)

    assert 5 == qv2.magnitude().get_as(si.meters)
Exemple #20
0
def test_qv2_cross_product():
    qv2 = make(V2(1, 1), si.meters)

    cross_product = qv2.cross(qv2)
    assert not isinstance(cross_product, V2Quantity)
    assert 0 == cross_product.get_as(si.meters**2)
Exemple #21
0
def test_qv2_dot_product():
    qv2 = make(V2(3, 4), si.meters)

    dot_product = qv2.dot(qv2)
    assert not isinstance(dot_product, V2Quantity)
    assert 25 == dot_product.get_as(si.meters**2)
def angle(self, other):
    if not hasattr(other, "quantity"):
        return make(self.quantity.angle(other), si.radians)
    return make(self.quantity.angle(other.quantity), si.radians)
def unit(self):
    return make(self.quantity.unit(), si.unity)
def test_v3_cross():
    x = V3(1, 0, 0) * si.meters
    y = V3(0, 1, 0) * si.meters

    assert make(V3(0, 0, 1), si.meters**2).approx(x.cross(y))
    assert make(V3(0, 0, -1), si.meters**2).approx(y.cross(x))
def cross(self, other):
    return make(self.quantity.cross(other.quantity), self.units * other.units)
def magnitude(self):
    return make(self.quantity.magnitude(), self.units)
def manhattan_distance(self):
    return make(self.quantity.manhattan_distance(), self.units)
def dot(self, other):
    return make(self.quantity.dot(other.quantity), self.units * other.units)
def rotate(self, angle):
    return make(self.quantity.rotate(angle.get_as(si.radians)), self.units)