# coding: UTF-8 # Copyright 2009, 2010 Thomas Jourdan # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA import traceback import sys import cairo import time import ka_debug import ka_factory import model_random import ka_extensionpoint import ep_merger_combine import model_protozoon import model_constraintpool class VariantEnumerator(object): def __init__(self): self.exception_counter = 0 def explain_permutation(self): model_random.set_flurry(9) cpool = model_constraintpool.ConstraintPool.get_pool() # for layer_key in ka_factory.get_factory('layer').keys(): # for sampler_key in ka_factory.get_factory('sampler').keys(): # for stamp_key in ka_factory.get_factory('stamp').keys(): # cpool.clear_all() # cpool.set('*', 'colorconstraint', ['colorconstraint_none', ]) # cpool.set('*', 'layernumberofconstraint', [1, 3]) # cpool.set('*', 'layertypeconstraint', [layer_key]) # cpool.set('*', 'modifiertypeconstraint', ['border']) # cpool.set('*', 'stamptypeconstraint', [stamp_key]) # cpool.set('*', 'samplertypeconstraint', [sampler_key]) # cpool.set('*', 'operatorconstraint', [cairo.OPERATOR_OVER]) # self._render_protozon(layer_key, 'border', sampler_key, stamp_key) for layer_key in ka_factory.get_factory('layer').keys(): for sampler_key in ka_factory.get_factory('sampler').keys(): for stamp_key in ka_factory.get_factory('stamp').keys(): cpool.clear_all() cpool.set('*', 'colorconstraint', ['colorconstraint_none', ]) cpool.set('*', 'layernumberofconstraint', (1, 3)) cpool.set('*', 'layertypeconstraint', [layer_key]) cpool.set('*', 'modifiertypeconstraint', ['flip', 'mask', 'rectangulartile', ]) cpool.set('*', 'stamptypeconstraint', [stamp_key]) cpool.set('*', 'samplertypeconstraint', [sampler_key]) cpool.set('*', 'operatorconstraint', [cairo.OPERATOR_OVER]) self._render_protozon(layer_key, 'noborder', sampler_key, stamp_key) for layer_key in ka_factory.get_factory('layer').keys(): for modifier_key in ka_factory.get_factory('modifier').keys(): for stamp_key in ka_factory.get_factory('stamp').keys(): cpool.clear_all() cpool.set('*', 'colorconstraint', ['colorconstraint_none', ]) cpool.set('*', 'layernumberofconstraint', (1, 3)) cpool.set('*', 'layertypeconstraint', ['letterpress', 'markovchain']) cpool.set('*', 'layertypeconstraint', [layer_key]) cpool.set('*', 'modifiertypeconstraint', [modifier_key]) cpool.set('*', 'stamptypeconstraint', [stamp_key]) cpool.set('*', 'operatorconstraint', [cairo.OPERATOR_OVER]) self._render_protozon(layer_key, modifier_key, stamp_key) for operator_key in ep_merger_combine.CombineMerger.OPERATORS: for merger_key in ka_factory.get_factory('merger').keys(): cpool.clear_all() cpool.set('*', 'colorconstraint', ['colorconstraint_none', ]) cpool.set('*', 'layernumberofconstraint', (3, 3)) cpool.set('*', 'layertypeconstraint', ['letterpress', 'markovchain']) cpool.set('*', 'operatorconstraint', [operator_key]) cpool.set('*', 'mergertypeconstraint', [merger_key]) self._render_protozon( ep_merger_combine.CombineMerger.OPERATOR_NAMES[operator_key], merger_key) for layer_key in ka_factory.get_factory('layer').keys(): for merger_key in ka_factory.get_factory('merger').keys(): cpool.clear_all() cpool.set('*', 'colorconstraint', ['colorconstraint_none', ]) cpool.set('*', 'layernumberofconstraint', (3, 2)) cpool.set('*', 'layertypeconstraint', [layer_key]) cpool.set('*', 'mergertypeconstraint', [merger_key]) cpool.set('*', 'operatorconstraint', [cairo.OPERATOR_OVER]) self._render_protozon(layer_key, merger_key) def _explain_protozon(self, a_protozoon, formater): class DummyTask: def __init__(self): self.quit = False a_protozoon.explain(DummyTask(), formater) file_path = formater.get_absolutename('html') formater.write_html_file(file_path) return formater.get_pathname() def _zoom_protozon(self, a_protozoon, width, height, path_name): export_surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) ctx = cairo.Context(export_surface) class DummyTask: def __init__(self): self.quit = False a_protozoon.render(DummyTask(), ctx, width, height) export_path = path_name + '/_' + str(width) + 'x' + str(height) export_surface.write_to_png(export_path) def _render_protozon(self, *keys): try: base_name = 'index' base_folder = '/dev/shm/' explain_id = '_'.join(keys) a_protozoon = model_protozoon.Protozoon() a_protozoon.randomize() ep_list = ka_extensionpoint.list_extensions('formater') formater = ka_extensionpoint.create(ep_list[0], base_name, explain_id, base_folder) path_name = self._explain_protozon(a_protozoon, formater) self._zoom_protozon(a_protozoon, 100, 100, path_name) self._zoom_protozon(a_protozoon, 800, 800, path_name) except: self.exception_counter += 1 ka_debug.err('failed rendering [%s] [%s] [%s]' % \ (explain_id, sys.exc_info()[0], sys.exc_info()[1])) traceback.print_exc(file=sys.__stderr__) def explain(): vae = VariantEnumerator() vae.explain_permutation() time.sleep(10) return vae.exception_counter if __name__ == '__main__': explain()