PROBLEM DESCRIPTION

By now, you will have a pair programming partner, and you will have been assigned a project that you are working on together. This should be one on the list that you provided and, as such, you should have the appropriate pre- or corequisites. If not, raise this immediately.

Each project has two notebooks associated with it, one that refers to ‘planning’, the other that refers to ‘Coding’. Download the ‘planning’ notebook. After a rudimentary project description, there are two sections to be completed: one for function definitions, and the other for a mathematical/technical description and specification of what the functions will accomplish. 

It must be emphasised that you are not writing any code for the project at this point. The programming will be completed in Final Assignment D. You’ll note that the description of that is not available yet. There is good reason for this. Do not waste your time by trying to presuppose what is involved. This is part of being able to demonstrate how you adapt to unforeseen circumstances/changes in project brief.

Planning

Set up the described functions. Do not write the code for them at this point. You must simply provide the def statements, doc string, and a return statement. You may also give any import commands that you expect to be appropriate.

Start to plan how you will construct these functions. Again, do not write the code, but at a higher level, what functions will your main algorithm need to call? Define those functions carefully in terms of inputs and outputs. (Of course, these may change when you come to program it later, that’s fine, but the better you plan now, the less will have to change later.)

Both for the main functions and any sub-functions that you write, include appropriate pre- and post-conditions that verify the input and output. Write some tests that verify the correct operation of these functions. Remember that these tests will fail at the moment because you haven’t written the functions!

For example, every project will require you to define the function doTests that includes all the tests of the other functions that you have written. So, you will include something of the form
def doTests ():

""" testing function , which we use

to test everything .

assert doTests () should pass , and

if it passes , we should be

confident that all the code

is functioning correctly """

assert
assert
....
....

r e t u r n  True

Don’t forget to think about how long your code might take to run. If your code involves some sort of exhaustive search, for example, how large a set of items is it searching over? Is that likely to finish in a reasonable time? (10items, you’re usually OK, 1012, certainly not!) If not, is there a smarter way that you might approach the problem?
The Maths

In this section, explain mathematically what your code will do (you can use the function names that you’ve specified). This is not just an overview, but the mathematical detail that needs to be implemented within the individual functions that you’ve specified. 

Your aim is to explain in a depth such that anybody with the same prerequisite knowledge, and experience of this course, should be able to complete the code without having to do extensive further research on the mathematics, or have to substantially add to, or redesign, the code structure.

It is particularly important to explain the calculations that led to the derivation of any tests. It is very important that you can easily check these as, when you code and a test fails, you might start to question whether it is your code or your test that’s faulty.

Remember that the box for giving your answer accepts markdown, especially LaTeX. Part of your mark will be determined by your appropriate use of LaTeX and referencing.
HOW WILL I BE ASSESSED?

This assignment is worth 10% of your final grade. It will be assessed according to the marking scheme specified in the Appendix. Of this, 8% will be assigned by the course tutor, while the final 2% is determined by peer marking.

Each notebook is marked out of 20. The distribution of marks is specified in the notebook. Wherever possible, these marks are allocated automatically based on tests. It is therefore imperative that functions are given the names and inputs, and provide the outputs, precisely as specified in the problem description. If you are unsure, make sure you ask in plenty of time! Some of the tests are visible, many are hidden. You may see some empty cells which correspond to hidden tests. Note that each automatically marked cell is worth a certain number of points, and it is all or nothing { if you pass all tests, you get all the marks, but there are no partial marks for passing just some tests (this is the reason for splitting tests across multiple cells, facilitating a more fine-grained marking). You can use the visible tests to further understand the problem, and you should of course ensure that these tests pass before you submit your code. Not all code can be checked automatically { graphs, for example, will be inspected manually to verify that the output is as expected. Any written sections will be graded manually.

Anonymous marking in this scenario is not appropriate.
WHAT FEEDBACK CAN I EXPECT, AND WHEN?

College regulations require that feedback be available within 4 weeks of the submission deadline. I will aim to return marks and feedback within 1 week of the submission deadline.

You can approach Dr. Kay during his consultation and feedback hours for further discussion if you wish.