<s> import glob , os <EOL> import nbt <EOL> import numpy , shmem <EOL> import multiprocessing <EOL> import itertools <EOL> def _topographic_values ( k ) : <EOL> if k == <NUM_LIT:8> or k == <NUM_LIT:9> : <EOL> k = - <NUM_LIT:1> <EOL> elif k > <NUM_LIT:0> : <EOL> k = <NUM_LIT:1> <EOL> return k <EOL> def _hypsometric_values ( k ) : <EOL> result = [ <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:255> ] <EOL> if k > <NUM_LIT> : <EOL> result [ <NUM_LIT:0> ] = <NUM_LIT:255> <EOL> result [ <NUM_LIT:1> ] = <NUM_LIT:255> - ( k - <NUM_LIT:64> ) * <NUM_LIT:4> <EOL> else : <EOL> result [ <NUM_LIT:1> ] = <NUM_LIT:255> <EOL> result [ <NUM_LIT:0> ] = k * <NUM_LIT:4> <EOL> return numpy . array ( result ) <EOL> class LevelException ( Exception ) : <EOL> def __init__ ( self , err_msg ) : <EOL> self . msg = err_msg <EOL> def __str__ ( self ) : <EOL> return self . msg <EOL> class Level ( object ) : <EOL> _base_block_colors = dict ( { <EOL> <NUM_LIT:0> : ( <NUM_LIT:255> , <NUM_LIT:255> , <NUM_LIT:255> , <NUM_LIT:0> ) , <EOL> <NUM_LIT:1> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT:2> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT:3> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT:4> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT:5> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT:6> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:0> ) , <EOL> <NUM_LIT:7> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT:8> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> , <NUM_LIT> ) , <EOL> <NUM_LIT:9> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> , <NUM_LIT> ) , <EOL> <NUM_LIT:10> : ( <NUM_LIT:255> , <NUM_LIT> , <NUM_LIT:0> , <NUM_LIT:255> ) , <EOL> <NUM_LIT:11> : ( <NUM_LIT:255> , <NUM_LIT> , <NUM_LIT:0> , <NUM_LIT:255> ) , <EOL> <NUM_LIT:12> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT:15> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT:16> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:100> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT:20> : ( <NUM_LIT:255> , <NUM_LIT:255> , <NUM_LIT:255> , <NUM_LIT:64> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT:15> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT:6> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT:30> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT:32> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT:255> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT:255> , <NUM_LIT:255> , <NUM_LIT:0> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT:255> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ) , <EOL> <NUM_LIT> : ( <NUM_LIT:255> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT:200> , <NUM_LIT:200> , <NUM_LIT:200> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT:200> , <NUM_LIT:200> , <NUM_LIT:200> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT:11> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT:50> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT:50> , <NUM_LIT:200> ) , <EOL> <NUM_LIT> : ( <NUM_LIT:255> , <NUM_LIT> , <NUM_LIT:30> , <NUM_LIT:200> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT:50> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT:50> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT:0> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT:30> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT:64> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT:64> , <NUM_LIT:32> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:200> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT:64> , <NUM_LIT:32> ) , <EOL> <NUM_LIT> : ( <NUM_LIT:255> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:200> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ) , <EOL> <NUM_LIT> : ( <NUM_LIT:255> , <NUM_LIT:255> , <NUM_LIT:255> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT:50> , <NUM_LIT:255> ) , <EOL> <NUM_LIT> : ( <NUM_LIT> , <NUM_LIT> , <NUM_LIT> , <NUM_LIT> ) , <EOL> } ) <EOL> base_block_colors = numpy . array ( [ _base_block_colors . get ( color , ( <NUM_LIT:255> , <NUM_LIT:255> , <NUM_LIT:255> , <NUM_LIT:0> ) ) for color in range ( <NUM_LIT:255> ) ] , dtype = numpy . uint8 ) <EOL> shaded_block_colors = base_block_colors >> <NUM_LIT:1> <EOL> topographic_translator = numpy . array ( [ _topographic_values ( n ) for n in xrange ( <NUM_LIT:255> ) ] ) <EOL> topographic_colors = numpy . array ( <EOL> [ ( <NUM_LIT:255> , <NUM_LIT:255> , <NUM_LIT:255> , <NUM_LIT:0> ) , ( <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:255> , <NUM_LIT:30> ) ] + <EOL> [ _hypsometric_values ( n ) for n in xrange ( <NUM_LIT> ) ] <EOL> ) <EOL> color_depth = <NUM_LIT:4> <EOL> chunk_size_X = <NUM_LIT:16> <EOL> chunk_size_Z = <NUM_LIT:16> <EOL> chunk_size_Y = <NUM_LIT> <EOL> def __init__ ( self , level_file ) : <EOL> self . level_file = level_file <EOL> try : <EOL> self . level_file = nbt . NBTFile ( self . level_file , '<STR_LIT:rb>' ) <EOL> except IOError , err : <EOL> raise err <EOL> self . level_dir = os . path . dirname ( level_file ) <EOL> self . chunk_files = sorted ( <EOL> sorted ( <EOL> glob . glob ( os . path . join ( self . level_dir , '<STR_LIT:*>' , '<STR_LIT:*>' , '<STR_LIT>' ) ) , <EOL> key = lambda chunk_file : int ( os . path . basename ( chunk_file ) . split ( '<STR_LIT:.>' ) [ <NUM_LIT:1> ] , <NUM_LIT> ) <EOL> ) , <EOL> key = lambda chunk_file : int ( os . path . basename ( chunk_file ) . split ( '<STR_LIT:.>' ) [ <NUM_LIT:2> ] , <NUM_LIT> ) <EOL> ) <EOL> self . chunk_count = len ( self . chunk_files ) <EOL> self . level_size = dict ( { <EOL> '<STR_LIT>' : <NUM_LIT:0> , <EOL> '<STR_LIT>' : <NUM_LIT:0> , <EOL> '<STR_LIT>' : <NUM_LIT:0> , <EOL> '<STR_LIT>' : <NUM_LIT:0> , <EOL> } ) <EOL> chunks_xpos = map ( lambda chunk_file : int ( os . path . basename ( chunk_file ) . split ( '<STR_LIT:.>' ) [ <NUM_LIT:1> ] , <NUM_LIT> ) , self . chunk_files ) <EOL> chunks_zpos = map ( lambda chunk_file : int ( os . path . basename ( chunk_file ) . split ( '<STR_LIT:.>' ) [ <NUM_LIT:2> ] , <NUM_LIT> ) , self . chunk_files ) <EOL> self . level_size [ '<STR_LIT>' ] = min ( chunks_xpos ) <EOL> self . level_size [ '<STR_LIT>' ] = max ( chunks_xpos ) <EOL> self . level_size [ '<STR_LIT>' ] = min ( chunks_zpos ) <EOL> self . level_size [ '<STR_LIT>' ] = max ( chunks_zpos ) <EOL> assert ( abs ( self . level_size [ '<STR_LIT>' ] ) + <NUM_LIT:1> + self . level_size [ '<STR_LIT>' ] ) * ( abs ( self . level_size [ '<STR_LIT>' ] ) + <NUM_LIT:1> + self . level_size [ '<STR_LIT>' ] ) >= self . chunk_count <EOL> def __str__ ( self ) : <EOL> return '<STR_LIT>' % ( os . path . basename ( self . level_dir ) , self . chunk_count , str ( self . level_size ) ) <EOL> def render_overhead_chunk ( ( chunk_file , map_size , render_options ) ) : <EOL> chunk = nbt . NBTFile ( chunk_file , '<STR_LIT:rb>' ) <EOL> array_offset_X = ( abs ( map_size [ '<STR_LIT>' ] ) + chunk [ '<STR_LIT>' ] [ '<STR_LIT>' ] . value ) * Level . chunk_size_X <EOL> array_offset_Z = ( abs ( map_size [ '<STR_LIT>' ] ) + chunk [ '<STR_LIT>' ] [ '<STR_LIT>' ] . value ) * Level . chunk_size_Z <EOL> try : <EOL> blocks = numpy . fromstring ( chunk [ '<STR_LIT>' ] [ '<STR_LIT>' ] . value , dtype = numpy . uint8 ) . reshape ( Level . chunk_size_X , Level . chunk_size_Z , Level . chunk_size_Y ) <EOL> for y in xrange ( Level . chunk_size_Y ) : <EOL> colors = Level . base_block_colors [ blocks [ ... , y ] ] . reshape ( Level . chunk_size_X , Level . chunk_size_Z , Level . color_depth ) <EOL> image_array [ array_offset_Z : array_offset_Z + Level . chunk_size_Z , <EOL> array_offset_X : array_offset_X + Level . chunk_size_X ] = overlay_chunk ( <EOL> colors . swapaxes ( <NUM_LIT:0> , <NUM_LIT:1> ) , <EOL> image_array [ array_offset_Z : array_offset_Z + Level . chunk_size_Z , <EOL> array_offset_X : array_offset_X + Level . chunk_size_X ] ) <EOL> print '<STR_LIT>' % str ( ( array_offset_X , array_offset_Z ) ) <EOL> except IndexError , err : <EOL> print '<STR_LIT>' % err <EOL> def render_oblique_chunk ( ( chunk_file , map_size , render_options ) ) : <EOL> chunk = nbt . NBTFile ( chunk_file , '<STR_LIT:rb>' ) <EOL> array_offset_X = ( abs ( map_size [ '<STR_LIT>' ] ) + chunk [ '<STR_LIT>' ] [ '<STR_LIT>' ] . value ) * Level . chunk_size_X <EOL> array_offset_Z = ( abs ( map_size [ '<STR_LIT>' ] ) + chunk [ '<STR_LIT>' ] [ '<STR_LIT>' ] . value ) * Level . chunk_size_Z <EOL> try : <EOL> blocks = numpy . fromstring ( chunk [ '<STR_LIT>' ] [ '<STR_LIT>' ] . value , dtype = numpy . uint8 ) . reshape ( Level . chunk_size_X , Level . chunk_size_Z , Level . chunk_size_Y ) <EOL> new_chunk_pixels = image_array [ array_offset_Z : array_offset_Z + Level . chunk_size_Z * <NUM_LIT:2> + Level . chunk_size_Y , <EOL> array_offset_X : array_offset_X + Level . chunk_size_X ] <EOL> for y in range ( Level . chunk_size_Y ) : <EOL> colors = Level . base_block_colors [ blocks [ ... , y ] ] . reshape ( Level . chunk_size_X , Level . chunk_size_Z , Level . color_depth ) <EOL> shaded_colors = Level . base_block_colors [ blocks [ ... , y ] ] . reshape ( Level . chunk_size_X , Level . chunk_size_Z , Level . color_depth ) <EOL> for z , x in itertools . product ( * map ( xrange , [ Level . chunk_size_X , Level . chunk_size_Z ] ) ) : <EOL> try : <EOL> new_chunk_pixels [ ( Level . chunk_size_Y - y ) + z , x ] = overlay_pixel ( colors [ x , z ] , new_chunk_pixels [ ( Level . chunk_size_Y - y ) + z , x ] ) <EOL> new_chunk_pixels [ ( Level . chunk_size_Y - y ) + z + <NUM_LIT:1> , x ] = overlay_pixel ( shaded_colors [ x , z ] , new_chunk_pixels [ ( Level . chunk_size_Y - y ) + z + <NUM_LIT:1> , x ] ) <EOL> except IndexError : <EOL> pass <EOL> image_array [ array_offset_Z : array_offset_Z + Level . chunk_size_Z * <NUM_LIT:2> + Level . chunk_size_Y , <EOL> array_offset_X : array_offset_X + Level . chunk_size_X ] = new_chunk_pixels <EOL> except IndexError , err : <EOL> print '<STR_LIT>' % err <EOL> def render_topographic_chunk ( ( chunk_file , map_size , render_options ) ) : <EOL> chunk = nbt . NBTFile ( chunk_file , '<STR_LIT:rb>' ) <EOL> array_offset_X = ( abs ( map_size [ '<STR_LIT>' ] ) + chunk [ '<STR_LIT>' ] [ '<STR_LIT>' ] . value ) * Level . chunk_size_X <EOL> array_offset_Z = ( abs ( map_size [ '<STR_LIT>' ] ) + chunk [ '<STR_LIT>' ] [ '<STR_LIT>' ] . value ) * Level . chunk_size_Z <EOL> try : <EOL> blocks = numpy . fromstring ( chunk [ '<STR_LIT>' ] [ '<STR_LIT>' ] . value , dtype = numpy . uint8 ) . reshape ( Level . chunk_size_X , Level . chunk_size_Z , Level . chunk_size_Y ) <EOL> for y in xrange ( Level . chunk_size_Y ) : <EOL> profile = Level . topographic_translator [ blocks [ ... , y ] ] <EOL> water = ( profile == - <NUM_LIT:1> ) * <NUM_LIT:1> <EOL> colors = Level . topographic_colors [ ( ( profile + water ) * ( y + <NUM_LIT:2> ) ) + water ] . reshape ( <EOL> Level . chunk_size_X , Level . chunk_size_Z , Level . color_depth <EOL> ) <EOL> image_array [ array_offset_Z : array_offset_Z + Level . chunk_size_Z , <EOL> array_offset_X : array_offset_X + Level . chunk_size_X ] = overlay_chunk ( <EOL> colors . swapaxes ( <NUM_LIT:0> , <NUM_LIT:1> ) , <EOL> image_array [ array_offset_Z : array_offset_Z + Level . chunk_size_Z , <EOL> array_offset_X : array_offset_X + Level . chunk_size_X ] ) <EOL> print '<STR_LIT>' % str ( ( array_offset_X , array_offset_Z ) ) <EOL> except IndexError , err : <EOL> print '<STR_LIT>' % err <EOL> def init_image_array ( map_image_size , default_color = ( <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ) ) : <EOL> image_array = shmem . create ( ( map_image_size [ <NUM_LIT:1> ] , map_image_size [ <NUM_LIT:0> ] , Level . color_depth ) , dtype = numpy . uint8 ) <EOL> image_array [ : ] = default_color <EOL> return image_array <EOL> def overlay_chunk ( src_chunk , dest_chunk ) : <EOL> chunk = numpy . zeros ( ( Level . chunk_size_Z , Level . chunk_size_X , Level . color_depth ) , dtype = numpy . uint32 ) <EOL> """<STR_LIT>""" <EOL> src_channel_R = src_chunk [ : , : , <NUM_LIT:0> ] . astype ( numpy . uint32 ) <EOL> dest_channel_R = dest_chunk [ : , : , <NUM_LIT:0> ] . astype ( numpy . uint32 ) <EOL> src_channel_G = src_chunk [ : , : , <NUM_LIT:1> ] . astype ( numpy . uint32 ) <EOL> dest_channel_G = dest_chunk [ : , : , <NUM_LIT:1> ] . astype ( numpy . uint32 ) <EOL> src_channel_B = src_chunk [ : , : , <NUM_LIT:2> ] . astype ( numpy . uint32 ) <EOL> dest_channel_B = dest_chunk [ : , : , <NUM_LIT:2> ] . astype ( numpy . uint32 ) <EOL> src_channel_A = src_chunk [ : , : , <NUM_LIT:3> ] . astype ( numpy . uint32 ) <EOL> dest_channel_A = dest_chunk [ : , : , <NUM_LIT:3> ] . astype ( numpy . uint32 ) <EOL> for i , ( s , d ) in enumerate ( zip ( <EOL> ( src_channel_R , src_channel_G , src_channel_B ) , <EOL> ( dest_channel_R , dest_channel_G , dest_channel_B ) <EOL> ) ) : <EOL> chunk [ : , : , i ] = ( <EOL> ( s * src_channel_A * dest_channel_A / <NUM_LIT> ) + <EOL> ( d * dest_channel_A * ( <NUM_LIT:255> - src_channel_A ) / <NUM_LIT> ) + <EOL> ( s * ( <NUM_LIT:255> - dest_channel_A ) / <NUM_LIT:255> ) <EOL> ) <EOL> chunk [ : , : , <NUM_LIT:3> ] = ( src_channel_A * dest_channel_A ) / <NUM_LIT:255> + ( src_channel_A * ( <NUM_LIT:255> - dest_channel_A ) ) / <NUM_LIT:255> + ( dest_channel_A * ( <NUM_LIT:255> - src_channel_A ) / <NUM_LIT:255> ) <EOL> return chunk . reshape ( Level . chunk_size_Z , Level . chunk_size_X , Level . color_depth ) . astype ( numpy . uint8 ) <EOL> def overlay_pixel ( src , dst ) : <EOL> pixel = numpy . array ( [ <EOL> ( ( src [ <NUM_LIT:3> ] * src [ <NUM_LIT:0> ] * dst [ <NUM_LIT:3> ] ) / <NUM_LIT:255> ** <NUM_LIT:2> ) + <EOL> ( ( src [ <NUM_LIT:0> ] * ( <NUM_LIT:255> - dst [ <NUM_LIT:3> ] ) ) / <NUM_LIT:255> ) + <EOL> ( ( dst [ <NUM_LIT:0> ] * dst [ <NUM_LIT:3> ] * ( <NUM_LIT:255> - src [ <NUM_LIT:3> ] ) ) / <NUM_LIT:255> ** <NUM_LIT:2> ) , <EOL> ( ( src [ <NUM_LIT:3> ] * src [ <NUM_LIT:1> ] * dst [ <NUM_LIT:3> ] ) / <NUM_LIT:255> ** <NUM_LIT:2> ) + <EOL> ( ( src [ <NUM_LIT:1> ] * ( <NUM_LIT:255> - dst [ <NUM_LIT:3> ] ) ) / <NUM_LIT:255> ) + <EOL> ( ( dst [ <NUM_LIT:1> ] * dst [ <NUM_LIT:3> ] * ( <NUM_LIT:255> - src [ <NUM_LIT:3> ] ) ) / <NUM_LIT:255> ** <NUM_LIT:2> ) , <EOL> ( ( src [ <NUM_LIT:3> ] * src [ <NUM_LIT:2> ] * dst [ <NUM_LIT:3> ] ) / <NUM_LIT:255> ** <NUM_LIT:2> ) + <EOL> ( ( src [ <NUM_LIT:2> ] * ( <NUM_LIT:255> - dst [ <NUM_LIT:3> ] ) ) / <NUM_LIT:255> ) + <EOL> ( ( dst [ <NUM_LIT:2> ] * dst [ <NUM_LIT:3> ] * ( <NUM_LIT:255> - src [ <NUM_LIT:3> ] ) ) / <NUM_LIT:255> ** <NUM_LIT:2> ) , <EOL> ( src [ <NUM_LIT:3> ] * dst [ <NUM_LIT:3> ] ) / <NUM_LIT:255> + ( src [ <NUM_LIT:3> ] * ( <NUM_LIT:255> - dst [ <NUM_LIT:3> ] ) ) / <NUM_LIT:255> + ( dst [ <NUM_LIT:3> ] * ( <NUM_LIT:255> - src [ <NUM_LIT:3> ] ) / <NUM_LIT:255> ) <EOL> ] , <EOL> dtype = numpy . uint8 ) <EOL> return pixel <EOL> render_modes = dict ( { <EOL> '<STR_LIT>' : render_overhead_chunk , <EOL> '<STR_LIT>' : render_topographic_chunk , <EOL> } ) <EOL> if __name__ == '<STR_LIT:__main__>' : <EOL> import getopt , sys <EOL> import Image <EOL> def main ( ) : <EOL> short_options = '<STR_LIT>' <EOL> long_options = [ <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> '<STR_LIT>' , <EOL> ] <EOL> options = dict ( { <EOL> '<STR_LIT>' : None , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : '<STR_LIT>' , <EOL> '<STR_LIT>' : False , <EOL> '<STR_LIT>' : multiprocessing . cpu_count ( ) , <EOL> } ) <EOL> render_options = dict ( { <EOL> '<STR_LIT>' : None , <EOL> '<STR_LIT>' : None , <EOL> } ) <EOL> try : <EOL> opts , args = getopt . gnu_getopt ( sys . argv [ <NUM_LIT:1> : ] , short_options , long_options ) <EOL> try : <EOL> options [ '<STR_LIT>' ] = args [ <NUM_LIT:0> ] <EOL> except IndexError : <EOL> raise getopt . GetoptError ( '<STR_LIT>' ) <EOL> for opt , arg in opts : <EOL> if opt in ( '<STR_LIT>' , '<STR_LIT>' ) : <EOL> options [ '<STR_LIT>' ] = arg <EOL> elif opt in ( '<STR_LIT>' , '<STR_LIT>' ) : <EOL> if arg in render_modes : <EOL> options [ '<STR_LIT>' ] = arg <EOL> else : <EOL> raise getopt . GetoptError ( '<STR_LIT>' % <EOL> ( opt , arg ) ) <EOL> elif opt in ( '<STR_LIT>' , '<STR_LIT>' ) : <EOL> options [ '<STR_LIT>' ] = True <EOL> elif opt == '<STR_LIT>' : <EOL> options [ '<STR_LIT>' ] = max ( int ( arg ) , <NUM_LIT:1> ) <EOL> else : <EOL> pass <EOL> except getopt . GetoptError , error : <EOL> print error <EOL> usage ( ) <EOL> return None <EOL> def _get_chunk_args ( chunk_file ) : <EOL> return ( chunk_file , level . level_size , render_options ) <EOL> def _init_multiprocess ( array ) : <EOL> global image_array <EOL> image_array = array <EOL> level = Level ( level_file = options [ '<STR_LIT>' ] ) <EOL> if options [ '<STR_LIT>' ] : print level <EOL> if options [ '<STR_LIT>' ] == '<STR_LIT>' : <EOL> map_image_size_addon = ( <NUM_LIT:0> , Level . chunk_size_Y ) <EOL> else : <EOL> map_image_size_addon = ( <NUM_LIT:0> , <NUM_LIT:0> ) <EOL> map_image_size = ( <EOL> ( level . level_size [ '<STR_LIT>' ] + abs ( level . level_size [ '<STR_LIT>' ] ) + <NUM_LIT:1> ) * Level . chunk_size_X + map_image_size_addon [ <NUM_LIT:0> ] , <EOL> ( level . level_size [ '<STR_LIT>' ] + abs ( level . level_size [ '<STR_LIT>' ] ) + <NUM_LIT:1> ) * Level . chunk_size_Z + map_image_size_addon [ <NUM_LIT:1> ] , <EOL> ) <EOL> global image_array <EOL> image_array = init_image_array ( map_image_size ) <EOL> pool = multiprocessing . Pool ( options [ '<STR_LIT>' ] , _init_multiprocess , ( image_array , ) ) <EOL> if options [ '<STR_LIT>' ] : print '<STR_LIT>' <EOL> pool . map ( render_modes [ options [ '<STR_LIT>' ] ] , map ( _get_chunk_args , level . chunk_files ) , level . chunk_count / options [ '<STR_LIT>' ] ) <EOL> Image . fromarray ( image_array , '<STR_LIT>' ) . save ( options [ '<STR_LIT>' ] ) <EOL> def usage ( ) : <EOL> print """<STR_LIT>""" % ( sys . argv [ <NUM_LIT:0> ] , render_modes . keys ( ) ) <EOL> main ( ) </s>
