from model import * import mimages, mmini class MBoth(Model): filename = Morphism(mimages.c_string, mmini.c_filename, "A string can be a filename.") file = Morphism(mmini.c_filename, mimages.c_file, "A filename names a file.") ppmimage = Morphism(mmini.c_ppm, mimages.c_image, "A ppm image is an image.") jpgimage = Morphism(mmini.c_jpg, mimages.c_image, "A jpg image is an image.") boundary = Morphism(mimages.c_image, mmini.c_rectangle, "All images have a boundary rectangle.") ### implementation ### MBoth.implementation(globals()) mmini.c_filename.eq.identical(filename, ()) mimages.c_file.eq.identical(mimages.pathname, filename ** file) mimages.c_image.eq.identical(filename ** mmini.image ** ppmimage, mimages.pathname ** mimages.ppmimage) mimages.c_image.eq.identical(filename ** mmini.jpgimage ** jpgimage, mimages.pathname ** mimages.jpegimage) mmini.c_rectangle.eq.identical(mmini.boundary, ppmimage ** boundary) mmini.c_rectangle.eq.identical(mmini.jpgboundary, jpgimage ** boundary) ### test ### if __name__ == '__main__': import model; model.Abstract.DEBUG = True x2 = mmini.jpgimage('x2.jpg') print mmini.jpgboundary(x2).as()