# -*- coding: iso-8859-1 -*-

import math

#------------------------------------------------------------------------------
def ohm(r=None, i=None, u=None):
  """
  ohm(r, i), ohm(u=..., r=...), ohm(u=..., i=...), ohm(r=..., i=...)
  
  Implémentation de la loi d'ohm, retourne la valeur manquante à partir des deux autres valeurs.
  Par défaut, cette fonction calcule la valeur de la tension u en fonction des paramètres r et i.
  Pour calculer r ou i en fonction des deux autres valeurs, vous devez nommer les paramètres.
  
  Exemple :
  ohm(10,20) -> 200 (u=ri)
  ohm(r=10,u=200) -> 20 (i=u/r)
  """
  if u == None:
    return r*i

  if r == None:
    return u/i

  if i == None:
    return u/r

#------------------------------------------------------------------------------
def rserial(r, *args):
  """
  rserial(r1 [, r2, ...rn])
  
  Calcule la r&eacute;sistance s&eacute;rie &eacute;quivalente (r = r1 + ... + rn).
  """
  rglobale = r
  for resist in args:
    rglobale += resist
    
  return rglobale

#------------------------------------------------------------------------------
def rparallel(r, *args):
  """
  rparallel(r1 [, r2, ...rn])
  
  Calcule la r&eacute;sistance parall&egrave;le &eacute;quivalente (1/r = 1/r1 + ... + 1/rn).
  """
  rglobale = 1.0/r
  for resist in args:
    rglobale += 1.0/resist
    
  return 1.0/rglobale

  #------------------------------------------------------------------------------
def cserial(c, *args):
  """
  cserial(c1 [, c2, ...cn])
  
  Calcule la capacit&eacute; s&eacute;rie &eacute;quivalente (1/c = 1/c1 + ... + 1/cn).
  """
  cglobale = 1.0/c
  for capa in args:
    cglobale += 1.0/capa
    
  return 1.0/cglobale

#------------------------------------------------------------------------------
def cparallel(c, *args):
  """
  cparallel(c1 [, c2, ...cn])
  
  Calcule la capacit&eacute; parall&egrave;le &eacute;quivalente (c = c1 + ... + cn).
  """
  cglobale = c
  for capa in args:
    cglobale += capa
    
  return cglobale
  