add sema.py