add some optimizations
fix setup.py
add __init__.py to the top-level