# Path: blockplayer/grid.py
# def initialize():
# def gt2grid(gtstr, chars='*rR'):
# def grid2gt(occ):
# def initialize_with_groundtruth(GT):
# def window_correction(occA, vacA, occB, vacB):
#     def error(t):
# def xcorr_correction(A, B):
#     def convolve(p1, p2):
#     def best(cc):
# def show_votegrid(vg, color=(1,0,0), opacity=1):
# def has_previous_estimate():
# def apply_correction(grid, bx,bz,rot):
# def center(R_aligned, occ_new, vac_new):
# def nearest(R_previous, R_aligned):
# def align_with_previous(R_aligned, occ_new, vac_new):
# def stencil_carve(depth, rect, R_correct, occ, vac, rgb=None):
# def merge_with_previous(occ_, vac_, occ_stencil, vac_stencil, color_=None):
# def update_previous_estimate(R_correct):
#     B = apply_correction(B, x, z, r)
#     B = apply_correction(B, bx, bz, br)
#     X,Y,Z = np.array(gridmax)-gridmin
#     M = [expmap.axis2rot(np.array([0,-i*np.pi/2,0])) for i in range(4)]
# 
# Path: blockplayer/hashalign.py
# def features_weave(Ar):
# def find_features(A):
# def diff_coord(a, b, ashape):
# def apply_correction(grid, bx, by, bz,rot):
# def match_features(A, B, sq):
# def correction2modelmat(R_aligned, x, y, z, r):
# def find_best_alignment(occA, vacA, occB, vacB,
#                         R_aligned=None, prev_R_Correct=None):
#     def error(occA, vacA, occB, vacB):
#     def error_weave(occA, vacA, occB, vacB, bx, bz, term):
#     WX, WY, WZ = Ar.shape
#     R = expmap.axis2rot(np.array([0,-r*np.pi/2,0]))
#     A,B = occA, occB
#             R = correction2modelmat(R_aligned, 0, 0, 0, r)
# 
# Path: blockplayer/blockdraw.py
# def clear():
# def show_grid(name, grid,
#               color=np.array([1,0,0,1]), opacity=1.0,
#               line_color=np.array([1,1,1,1])):
# def draw_block(blocks):
# def grid_vertices(grid, color=None):
# def grid_vertices_numpy(grid, color=None):
# def draw():


import numpy as np
import pylab
from blockplayer import grid
from blockplayer import hashalign
from blockplayer import blockdraw
from blockplayer.visuals.blockwindow import BlockWindow

global window
if not 'window' in globals():
    window = BlockWindow(title='demo_align', size=(640,480))
    window.Move((0,0))


def load_gt():
    global GT
    with open('data/experiments/gt/gt1.txt') as f:
        GT = grid.gt2grid(f.read())


if not 'GT' in globals():
    GT = None
    load_gt()


def show_align(A, B):
    blockdraw.clear()
    blockdraw.show_grid('0', A & ~B, color=np.array([1,0,0,1]))
    blockdraw.show_grid('1', B & ~A, color=np.array([0,0,1,1]))
    blockdraw.show_grid('2', A & B, color=np.array([1,0,1,1]))
    window.clearcolor=[1,1,1,0]
    window.Refresh()


def once():
    global problem
    problem = GT.copy()

# Path: blockplayer/grid.py
# def initialize():
# def gt2grid(gtstr, chars='*rR'):
# def grid2gt(occ):
# def initialize_with_groundtruth(GT):
# def window_correction(occA, vacA, occB, vacB):
#     def error(t):
# def xcorr_correction(A, B):
#     def convolve(p1, p2):
#     def best(cc):
# def show_votegrid(vg, color=(1,0,0), opacity=1):
# def has_previous_estimate():
# def apply_correction(grid, bx,bz,rot):
# def center(R_aligned, occ_new, vac_new):
# def nearest(R_previous, R_aligned):
# def align_with_previous(R_aligned, occ_new, vac_new):
# def stencil_carve(depth, rect, R_correct, occ, vac, rgb=None):
# def merge_with_previous(occ_, vac_, occ_stencil, vac_stencil, color_=None):
# def update_previous_estimate(R_correct):
#     B = apply_correction(B, x, z, r)
#     B = apply_correction(B, bx, bz, br)
#     X,Y,Z = np.array(gridmax)-gridmin
#     M = [expmap.axis2rot(np.array([0,-i*np.pi/2,0])) for i in range(4)]
# 
# Path: blockplayer/hashalign.py
# def features_weave(Ar):
# def find_features(A):
# def diff_coord(a, b, ashape):
# def apply_correction(grid, bx, by, bz,rot):
# def match_features(A, B, sq):
# def correction2modelmat(R_aligned, x, y, z, r):
# def find_best_alignment(occA, vacA, occB, vacB,
#                         R_aligned=None, prev_R_Correct=None):
#     def error(occA, vacA, occB, vacB):
#     def error_weave(occA, vacA, occB, vacB, bx, bz, term):
#     WX, WY, WZ = Ar.shape
#     R = expmap.axis2rot(np.array([0,-r*np.pi/2,0]))
#     A,B = occA, occB
#             R = correction2modelmat(R_aligned, 0, 0, 0, r)
# 
# Path: blockplayer/blockdraw.py
# def clear():
# def show_grid(name, grid,
#               color=np.array([1,0,0,1]), opacity=1.0,
#               line_color=np.array([1,1,1,1])):
# def draw_block(blocks):
# def grid_vertices(grid, color=None):
# def grid_vertices_numpy(grid, color=None):
# def draw():


# Path: demos/demo_align.py
import numpy as np
import pylab
from blockplayer import grid
from blockplayer import hashalign
from blockplayer import blockdraw
from blockplayer.visuals.blockwindow import BlockWindow


global window
if not 'window' in globals():
    window = BlockWindow(title='demo_align', size=(640,480))
    window.Move((0,0))


def load_gt():
    global GT
    with open('data/experiments/gt/gt1.txt') as f:
        GT = grid.gt2grid(f.read())


if not 'GT' in globals():
    GT = None
    load_gt()


def show_align(A, B):
    blockdraw.clear()
    blockdraw.show_grid('0', A & ~B, color=np.array([1,0,0,1]))
    blockdraw.show_grid('1', B & ~A, color=np.array([0,0,1,1]))
    blockdraw.show_grid('2', A & B, color=np.array([1,0,1,1]))
    window.clearcolor=[1,1,1,0]
    window.Refresh()


def once():
    global problem
    problem = GT.copy()

    problem = grid.apply_correction(problem,