Sal, Temp = 35.1, 17 # Salinidade e Temperatura

print(type(Sal))
print(type(Temp))

u, v = 5., -5.
U = u + 1j*v

print(type(U))

msg = 'OO em ação mostrando números reais {0} e imaginários {1}'.format

print(msg(U.real, U.imag))

# Desafio: Calcular o vetor é o ângulo formado por u+iv.

import numpy as np

np.abs(U), np.rad2deg(np.angle(U))

False == 0

True == 1

True == 2

False == 1

"""
Explanation: Aula 00 - O que é Python?
Objetivos

Introdução à linguagem de programação Python.
Exemplos do seu uso para análise exploratória de dados.

Utilizar python com uma linguagem "cola."


A linguagem Python é:

interpretada (não compilada)
"Dynamically Typed" (não statically-typed)
Orientada à Objetos e/ou Funcional
Licença Livre

Instalando python o seu computador (Canopy, EPD, Spyder, PythonXY, etc):
```bash
URL=http://repo.continuum.io/miniconda/Miniconda-latest-Linux-x86_64.sh
wget $URL -O miniconda.sh
bash miniconda.sh -b -p $HOME/miniconda
export PATH="$HOME/miniconda/bin:$PATH"
conda update conda
conda config --add ioos
conda info -a
```


Scientific:

Matplotlib
NumPy
SciPy
IPython



Oceanography

gsw
seawater
airsea
oceans
ctd
iris
cartopy



Ajuda extra:

PyAOS
python4oceanographers
earthpy
Sotware Carpentry
matlab-numpy



Tipos de objetos
End of explanation
"""


print('Texto simples com "aspas" duplas.\n')

print("'Texto simples com 'aspas' simples.\n")

print("""Texto complexo com quebra
de linha, aspas "duplas" e 'simples'.\n""")

print(r"Texto \n 'cru', ideal para Latex $^\circ$.")

"""
Explanation: Strings
End of explanation
"""


text = "Um bom aluno sempre..."

text.lower(), text.split(), text.replace('aluno', 'estudante')

print('O valor de pi é {:.2f}'.format(np.pi))
print('O valor de pi é {:.6f}'.format(np.pi))
print('O valor de 10 x pi é {:0.2e}'.format(10*np.pi))

"""
Explanation: String Methods
End of explanation
"""


T = [17.4, 18.9, 19.5, 22.1, 23.2]
T[0], T[-1], T[::-1], T[::2]

T[1:3]

T[2:]

"""
Explanation: Slicing
End of explanation
"""


lista = list(range(10))
print(lista)

lista.append(10)
print(lista)

lista.insert(4, 11)
print(lista)

lista.sort()
print(lista)

lista.extend(['elemento extra'])
print(lista)

"""
Explanation: Alguns métodos de listas:

.append
.extend
.sort
.remove
.reverse
.insert
End of explanation
"""


ctd = dict(S=[35.5, 34.76, 33.2],
           T=[17.4, 18.9, 19.5],
           AOU=[320, 330, 350])


ctd.keys(), ctd.values()

"""
Explanation: Dicionários
End of explanation
"""


set(['joseph', 'maria', 'pedro', 'maria'])

"""
Explanation: Sets
End of explanation
"""


import this

import math

math.cos(math.pi)

from math import sin, pi

sin(pi)

import numpy

numpy.tanh([numpy.pi])

"""
Explanation: Namespaces
Direto da wikipedia:
A namespace (sometimes also called a name scope) is an abstract container or
environment created to hold a logical grouping of unique identifiers or symbols
(i.e., names).
O que interessa para nós?

Namespaces mantém o código organizado.
Evita conflitos gerados por funções de mesmo nome.
Torna o código "declarativo" e consequentemente mais legível.

Matlab vs Python (Namespaces)
Matlab:
matlab
w1 = window(@gausswin, N, 2.5)
% Opa! O resultados é diferente do que eu esperava. Argh, a minha função
% window está abaixo da original do Matlab no "path".
Python:
```python
from oceans.timeseries import window
w1 = window(N, 2.5, type='gausswin')
Sem dúvida essa era a que eu queria!
```
Módulos
Como vocês já notaram, em Python temos que importar (declarar) tudo que vamos
utilizar.
End of explanation
"""


fname = './data/CTD/estacao08.dat'

with open(fname, 'r') as f:
    lines = f.readlines()
    data = lines[0].strip().split()[3:]
    depth = float(data[0])
    lat = float(data[1])
    lon = float(data[2])
    print("Prof.: %s m\nLongitude: %2.4f deg\nLatitude: %2.4f deg" %
          (depth, lon, lat))

import os
from glob import glob


lista = glob(os.path.join('data', 'CTD', '*.dat'))
lista

def break_lines(line):
    return [float(num) for num in line.strip().split()]


def get_topo(url='./data/etopo5.nc'):
    etopodata = Dataset(url)
    topoin = etopodata.variables['ROSE'][:]
    lons = etopodata.variables['ETOPO05_X'][:]
    lats = etopodata.variables['ETOPO05_Y'][:]
    topoin, lons = shiftgrid(180., topoin, lons, start=False)
    return topoin, lons, lats

depth, lat, lon = [], [], []


for fname in lista:
    with open(fname, 'r') as f:
        lines = f.readlines()
        d, la, lo = break_lines(lines[0])[3:]
        lon.append(lo)
        lat.append(la)
        depth.append(d)

import seawater as sw

dist, angle = sw.dist(lon, lat)

dist = np.r_[0, dist.cumsum()]

%matplotlib inline
import matplotlib.pyplot as plt

plt.plot(dist, depth)
plt.gca().invert_yaxis()

"""
Explanation: Exemplo prático de ler dados ASCII em Python

Nossos dados estão organizados na pasta data/CTD.
São arquivos ASCII que podem ser abertos em qualquer editor de texto.
Leia o arquivo "leia_me.txt" para maiores descrições do formato dos dados.
End of explanation
"""


