Exemplo n.º 1
0
def test_matrix_inverses_raise_error_if_disabled():
    grader = MatrixGrader(answers='A^2',
                          variables=['A'],
                          sample_from={'A': RealMatrices()},
                          negative_powers=False)

    match = 'Negative matrix powers have been disabled.'
    with raises(MathArrayError, match=match):
        grader(None, 'A^3*A^-1')['ok']
Exemplo n.º 2
0
def test_wrong_answer_type_error_messages_with_scalars():
    """
    Check that answer shape errors are raised correctly when answer or student_input
    is a scalar.

    These are worth checking separately because the numbers do not have 'shape'
    attributes.
    """

    grader = MatrixGrader(answers='[1, 2, 3]',
                          max_array_dim=2,
                          answer_shape_mismatch=dict(is_raised=True,
                                                     msg_detail='type'))
    match = 'Expected answer to be a vector, but input is a scalar'
    with raises(InputTypeError, match=match):
        grader(None, '10')

    grader = MatrixGrader(answers='10',
                          max_array_dim=2,
                          answer_shape_mismatch=dict(is_raised=True,
                                                     msg_detail='type'))
    match = 'Expected answer to be a scalar, but input is a vector'
    with raises(InputTypeError, match=match):
        grader(None, '[1, 2, 3]')
Exemplo n.º 3
0
def test_works_with_matrixgrader():
    grader = MatrixGrader(answers={
        'comparer_params': ['x*A*B^2'],
        'comparer':
        LinearComparer(proportional=0.6, offset=0.4, linear=0.2)
    },
                          variables=['x', 'A', 'B'],
                          sample_from={
                              'A': RealMatrices(),
                              'B': RealMatrices()
                          },
                          max_array_dim=2)

    assert grader(None, 'x*A*B^2')['grade_decimal'] == 1.0
    assert grader(None, '2*x*A*B^2')['grade_decimal'] == 0.6
    assert grader(None, 'x*A*B^2 + 5*[[1, 1], [1, 1]]')['grade_decimal'] == 0.4
    assert grader(None,
                  '3*x*A*B^2 + 5*[[1, 1], [1, 1]]')['grade_decimal'] == 0.2
    assert grader(None, 'x*A*B^2 + x*[[1, 1], [1, 1]]')['grade_decimal'] == 0
    assert grader(None, '0*A')['grade_decimal'] == 0
Exemplo n.º 4
0
def test_identity_dim_provides_identity():
    no_identity = MatrixGrader()
    assert no_identity.constants.get('I', None) is None

    grader = MatrixGrader(identity_dim=4)
    assert equal_as_arrays(grader.constants['I'], identity(4))
Exemplo n.º 5
0
def test_wrong_answer_type_error_messages():
    # Note: our convention is that single-row matrix and vectors cannot
    # be compared, [[1, 2, 3]] are graded as different [1, 2, 3]
    # (and, in particular, incomparable)

    grader = MatrixGrader(answers='[[1, 2, 3]]',
                          max_array_dim=2,
                          answer_shape_mismatch=dict(is_raised=True,
                                                     msg_detail='shape'))
    match = (r'Expected answer to be a matrix of shape \(rows: 1, cols: 3\), '
             r'but input is a vector of length 3')
    with raises(InputTypeError, match=match):
        grader(None, '[1, 2, 3]')

    grader = MatrixGrader(answers='[[1, 2, 3]]',
                          max_array_dim=2,
                          answer_shape_mismatch=dict(is_raised=True,
                                                     msg_detail='type'))
    match = 'Expected answer to be a matrix, but input is a vector'
    with raises(InputTypeError, match=match):
        grader(None, '[1, 2, 3]')

    grader = MatrixGrader(answers='[[1, 2, 3]]',
                          max_array_dim=2,
                          answer_shape_mismatch=dict(is_raised=False,
                                                     msg_detail='shape'))
    msg = ('Expected answer to be a matrix of shape (rows: 1, cols: 3), '
           'but input is a vector of length 3')
    assert grader(None, '[1, 2, 3]') == {
        'ok': False,
        'grade_decimal': 0,
        'msg': msg
    }

    grader = MatrixGrader(answers='[[1, 2, 3]]',
                          max_array_dim=2,
                          answer_shape_mismatch=dict(is_raised=False,
                                                     msg_detail='type'))
    msg = 'Expected answer to be a matrix, but input is a vector'
    assert grader(None, '[1, 2, 3]') == {
        'ok': False,
        'grade_decimal': 0,
        'msg': msg
    }

    msg = 'Expected answer to be a matrix, but input is a matrix of incorrect shape'
    assert grader(None, '[[1, 2, 3, 4]]') == {
        'ok': False,
        'grade_decimal': 0,
        'msg': msg
    }

    grader = MatrixGrader(answers='[[1, 2, 3]]',
                          max_array_dim=2,
                          answer_shape_mismatch=dict(is_raised=False,
                                                     msg_detail=None))
    assert grader(None, '[1, 2, 3]') == {
        'ok': False,
        'grade_decimal': 0,
        'msg': ''
    }
Exemplo n.º 6
0
def test_matrix_inverses_work_if_not_disabled():
    grader = MatrixGrader(answers='A^2',
                          variables=['A'],
                          sample_from={'A': RealMatrices()})
    assert grader(None, 'A^3*A^-1')['ok']