Implement an immutable FunctionStore and Function class. FunctionStore object should CRUD Function objects (you can choose any reasonable interface to acomplish this). Function objects represent partial functions from Z to Z. The definition of a function should consist of a set of disjoint intervals in form of [a,b), (-infinity, b) or [a, infinity) for which the function value is given.
Besides other reasonable functions and methods implement an evolver for FunctionStore and Function classes. You may want to use pyrsistent. Also see pyrsistent on how evolvers should work.