<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
 <font color='blue'>Data Science Academy - Python Fundamentos - Capítulo 7</font>
Download
Step1:  Missão
Step2:  Teste da Solução
<ASSISTANT_TASK:>
Python Code:
# Versão da Linguagem Python
from platform import python_version
print('Versão da Linguagem Python Usada Neste Jupyter Notebook:', python_version())
Explanation: <font color='blue'>Data Science Academy - Python Fundamentos - Capítulo 7</font>
Download: http://github.com/dsacademybr
End of explanation
class SelectionSort(object):
    def sort(self, data):
        # Implemente aqui sua solução
Explanation: Missão: Implementar o Algoritmo de Ordenação "Selection sort".
Nível de Dificuldade: Alto
Premissas
As duplicatas são permitidas?
     * Sim
Podemos assumir que a entrada é válida?
     * Não
Podemos supor que isso se encaixa na memória?
     * Sim
Teste Cases
None -> Exception
[] -> []
One element -> [element]
Two or more elements
Algoritmo
Animação do Wikipedia:
Podemos fazer isso de forma recursiva ou iterativa. Iterativamente será mais eficiente, pois não requer sobrecarga de espaço extra com as chamadas recursivas.
Para cada elemento
     * Verifique cada elemento à direita para encontrar o min
     * Se min < elemento atual, swap
Solução
End of explanation
%%writefile missao4.py
from nose.tools import assert_equal, assert_raises
class TestSelectionSort(object):
    def test_selection_sort(self, func):
        print('None input')
        assert_raises(TypeError, func, None)
        print('Input vazio')
        assert_equal(func([]), [])
        print('Um elemento')
        assert_equal(func([5]), [5])
        print('Dois ou mais elementos')
        data = [5, 1, 7, 2, 6, -3, 5, 7, -10]
        assert_equal(func(data), sorted(data))
        print('Sua solução foi executada com sucesso! Parabéns!')
def main():
    test = TestSelectionSort()
    try:
        selection_sort = SelectionSort()
        test.test_selection_sort(selection_sort.sort)
    except NameError:
        pass
if __name__ == '__main__':
    main()
%run -i missao4.py
Explanation: Teste da Solução
End of explanation
<END_TASK>