diff --git a/.coveragerc b/.coveragerc new file mode 100644 index 0000000..14100e0 --- /dev/null +++ b/.coveragerc @@ -0,0 +1,4 @@ +[run] +branch = True +cover_pylib = False +source = src \ No newline at end of file diff --git a/.gitignore b/.gitignore index c7175e6..bbd1efb 100644 --- a/.gitignore +++ b/.gitignore @@ -12,6 +12,7 @@ bin var sdist develop-eggs +econopy.egg-info .installed.cfg # Installer logs @@ -20,9 +21,11 @@ pip-log.txt # Unit test / coverage reports .coverage .tox +.pytest_cache/ #Translations *.mo #Mr Developer .mr.developer.cfg +.vscode/ \ No newline at end of file diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..6f34d07 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,14 @@ +language: python + +matrix: + include: + - python: 3.4 + env: TOXENV=py34 + - python: 3.5 + env: TOXENV=py35 + - python: 3.6 + env: TOXENV=py36 + +install: pip install tox + +script: tox \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..25f111d --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,7 @@ +# Changelog +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + +## [Unreleased] - XXXX-XX-XX diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..3c509b3 --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 Francisco Manzano Magaña + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..97f597a --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,6 @@ +# Include the README +include *.md + +# Include the license file +include LICENSE +include VERSION \ No newline at end of file diff --git a/Pipfile b/Pipfile new file mode 100644 index 0000000..afda596 --- /dev/null +++ b/Pipfile @@ -0,0 +1,17 @@ +[[source]] + +verify_ssl = true +name = "pypi" +url = "https://pypi.python.org/simple" + +[packages] + +[dev-packages] + +pytest = "*" +pytest-cov = "*" +"pytest-flake8" = "*" + +[requires] + +python_version = "3.6" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 0000000..2f09fbc --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,151 @@ +{ + "_meta": { + "hash": { + "sha256": "c852bfaeccb2cc6e3115e30b85cc624082e5f727d27d4a4774b7f563bbcefa33" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.6" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.python.org/simple", + "verify_ssl": true + } + ] + }, + "default": {}, + "develop": { + "attrs": { + "hashes": [ + "sha256:1c7960ccfd6a005cd9f7ba884e6316b5e430a3f1a6c37c5f87d8b43f83b54ec9", + "sha256:a17a9573a6f475c99b551c0e0a812707ddda1ec9653bed04c13841404ed6f450" + ], + "version": "==17.4.0" + }, + "coverage": { + "hashes": [ + "sha256:03481e81d558d30d230bc12999e3edffe392d244349a90f4ef9b88425fac74ba", + "sha256:0b136648de27201056c1869a6c0d4e23f464750fd9a9ba9750b8336a244429ed", + "sha256:104ab3934abaf5be871a583541e8829d6c19ce7bde2923b2751e0d3ca44db60a", + "sha256:15b111b6a0f46ee1a485414a52a7ad1d703bdf984e9ed3c288a4414d3871dcbd", + "sha256:198626739a79b09fa0a2f06e083ffd12eb55449b5f8bfdbeed1df4910b2ca640", + "sha256:1c383d2ef13ade2acc636556fd544dba6e14fa30755f26812f54300e401f98f2", + "sha256:28b2191e7283f4f3568962e373b47ef7f0392993bb6660d079c62bd50fe9d162", + "sha256:2eb564bbf7816a9d68dd3369a510be3327f1c618d2357fa6b1216994c2e3d508", + "sha256:337ded681dd2ef9ca04ef5d93cfc87e52e09db2594c296b4a0a3662cb1b41249", + "sha256:3a2184c6d797a125dca8367878d3b9a178b6fdd05fdc2d35d758c3006a1cd694", + "sha256:3c79a6f7b95751cdebcd9037e4d06f8d5a9b60e4ed0cd231342aa8ad7124882a", + "sha256:3d72c20bd105022d29b14a7d628462ebdc61de2f303322c0212a054352f3b287", + "sha256:3eb42bf89a6be7deb64116dd1cc4b08171734d721e7a7e57ad64cc4ef29ed2f1", + "sha256:4635a184d0bbe537aa185a34193898eee409332a8ccb27eea36f262566585000", + "sha256:56e448f051a201c5ebbaa86a5efd0ca90d327204d8b059ab25ad0f35fbfd79f1", + "sha256:5a13ea7911ff5e1796b6d5e4fbbf6952381a611209b736d48e675c2756f3f74e", + "sha256:69bf008a06b76619d3c3f3b1983f5145c75a305a0fea513aca094cae5c40a8f5", + "sha256:6bc583dc18d5979dc0f6cec26a8603129de0304d5ae1f17e57a12834e7235062", + "sha256:701cd6093d63e6b8ad7009d8a92425428bc4d6e7ab8d75efbb665c806c1d79ba", + "sha256:7608a3dd5d73cb06c531b8925e0ef8d3de31fed2544a7de6c63960a1e73ea4bc", + "sha256:76ecd006d1d8f739430ec50cc872889af1f9c1b6b8f48e29941814b09b0fd3cc", + "sha256:7aa36d2b844a3e4a4b356708d79fd2c260281a7390d678a10b91ca595ddc9e99", + "sha256:7d3f553904b0c5c016d1dad058a7554c7ac4c91a789fca496e7d8347ad040653", + "sha256:7e1fe19bd6dce69d9fd159d8e4a80a8f52101380d5d3a4d374b6d3eae0e5de9c", + "sha256:8c3cb8c35ec4d9506979b4cf90ee9918bc2e49f84189d9bf5c36c0c1119c6558", + "sha256:9d6dd10d49e01571bf6e147d3b505141ffc093a06756c60b053a859cb2128b1f", + "sha256:9e112fcbe0148a6fa4f0a02e8d58e94470fc6cb82a5481618fea901699bf34c4", + "sha256:ac4fef68da01116a5c117eba4dd46f2e06847a497de5ed1d64bb99a5fda1ef91", + "sha256:b8815995e050764c8610dbc82641807d196927c3dbed207f0a079833ffcf588d", + "sha256:be6cfcd8053d13f5f5eeb284aa8a814220c3da1b0078fa859011c7fffd86dab9", + "sha256:c1bb572fab8208c400adaf06a8133ac0712179a334c09224fb11393e920abcdd", + "sha256:de4418dadaa1c01d497e539210cb6baa015965526ff5afc078c57ca69160108d", + "sha256:e05cb4d9aad6233d67e0541caa7e511fa4047ed7750ec2510d466e806e0255d6", + "sha256:e4d96c07229f58cb686120f168276e434660e4358cc9cf3b0464210b04913e77", + "sha256:f3f501f345f24383c0000395b26b726e46758b71393267aeae0bd36f8b3ade80", + "sha256:f8a923a85cb099422ad5a2e345fe877bbc89a8a8b23235824a93488150e45f6e" + ], + "version": "==4.5.1" + }, + "flake8": { + "hashes": [ + "sha256:7253265f7abd8b313e3892944044a365e3f4ac3fcdcfb4298f55ee9ddf188ba0", + "sha256:c7841163e2b576d435799169b78703ad6ac1bbb0f199994fc05f700b2a90ea37" + ], + "version": "==3.5.0" + }, + "mccabe": { + "hashes": [ + "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", + "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f" + ], + "version": "==0.6.1" + }, + "more-itertools": { + "hashes": [ + "sha256:0dd8f72eeab0d2c3bd489025bb2f6a1b8342f9b198f6fc37b52d15cfa4531fea", + "sha256:11a625025954c20145b37ff6309cd54e39ca94f72f6bb9576d1195db6fa2442e", + "sha256:c9ce7eccdcb901a2c75d326ea134e0886abfbea5f93e91cc95de9507c0816c44" + ], + "version": "==4.1.0" + }, + "pluggy": { + "hashes": [ + "sha256:7f8ae7f5bdf75671a718d2daf0a64b7885f74510bcd98b1a0bb420eb9a9d0cff" + ], + "version": "==0.6.0" + }, + "py": { + "hashes": [ + "sha256:29c9fab495d7528e80ba1e343b958684f4ace687327e6f789a94bf3d1915f881", + "sha256:983f77f3331356039fdd792e9220b7b8ee1aa6bd2b25f567a963ff1de5a64f6a" + ], + "version": "==1.5.3" + }, + "pycodestyle": { + "hashes": [ + "sha256:1ec08a51c901dfe44921576ed6e4c1f5b7ecbad403f871397feedb5eb8e4fa14", + "sha256:5ff2fbcbab997895ba9ead77e1b38b3ebc2e5c3b8a6194ef918666e4c790a00e", + "sha256:682256a5b318149ca0d2a9185d365d8864a768a28db66a84a2ea946bcc426766", + "sha256:6c4245ade1edfad79c3446fadfc96b0de2759662dc29d07d80a6f27ad1ca6ba9" + ], + "version": "==2.3.1" + }, + "pyflakes": { + "hashes": [ + "sha256:08bd6a50edf8cffa9fa09a463063c425ecaaf10d1eb0335a7e8b1401aef89e6f", + "sha256:8d616a382f243dbf19b54743f280b80198be0bca3a5396f1d2e1fca6223e8805" + ], + "version": "==1.6.0" + }, + "pytest": { + "hashes": [ + "sha256:6266f87ab64692112e5477eba395cfedda53b1933ccd29478e671e73b420c19c", + "sha256:fae491d1874f199537fd5872b5e1f0e74a009b979df9d53d1553fd03da1703e1" + ], + "index": "pypi", + "version": "==3.5.0" + }, + "pytest-cov": { + "hashes": [ + "sha256:03aa752cf11db41d281ea1d807d954c4eda35cfa1b21d6971966cc041bbf6e2d", + "sha256:890fe5565400902b0c78b5357004aab1c814115894f4f21370e2433256a3eeec" + ], + "index": "pypi", + "version": "==2.5.1" + }, + "pytest-flake8": { + "hashes": [ + "sha256:3996de65a1219697596acac755090c70c47ec901edc438ea88ce1aa6098fb905", + "sha256:43598dfa211242525897866ff35fa553ebd88177383783079099057c7ad04331" + ], + "index": "pypi", + "version": "==1.0.0" + }, + "six": { + "hashes": [ + "sha256:70e8a77beed4562e7f14fe23a786b54f6296e34344c23bc42f07b15018ff98e9", + "sha256:832dc0e10feb1aa2c68dcc57dbb658f1c7e65b9b61af69048abc87a2db00a0eb" + ], + "version": "==1.11.0" + } + } +} diff --git a/README.md b/README.md index 5ee263c..fcb7901 100644 --- a/README.md +++ b/README.md @@ -4,3 +4,5 @@ Conjuntos de funciones económicas y econométricas programadas en Python con la vista puesta en el uso como módulo, y ser reutilizado en varios proyectos. +## Author +Francisco Manzano Magaña diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..6812f81 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +0.0.3 \ No newline at end of file diff --git a/calculos/__init__.py b/calculos/__init__.py deleted file mode 100644 index 697f601..0000000 --- a/calculos/__init__.py +++ /dev/null @@ -1,25 +0,0 @@ -# -*- coding: utf-8 -*- -# Modulo para calculos variados - -IS = 0.2 # Impuesto de sociedades a aplicar -IVA = 0.21 # Impuesto de valor añadido - -COMISION_STORE = 0.3 - -def deflactar_IVA(cantidad): - deflactor = 1 + IVA - return cantidad / deflactor - -def calcular_IS(cantidad): - return cantidad*IS - -def calcular_comision(cantidad): - return cantidad*COMISION_STORE - -def beneficio_por_venta(precio_venta): - - siniva = deflactar_IVA(precio_venta) - comision = calcular_comision(siniva) - ingreso = siniva - comision - isoc = calcular_IS(ingreso) - return ingreso - isoc \ No newline at end of file diff --git a/doc/index.html b/doc/index.html deleted file mode 100644 index 6ed7cf6..0000000 --- a/doc/index.html +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - -

Esta es la documentacion oficial de econoPy.

- - - - - diff --git a/doc/rentas.actualizacion.html b/doc/rentas.actualizacion.html deleted file mode 100644 index b3b8290..0000000 --- a/doc/rentas.actualizacion.html +++ /dev/null @@ -1,25 +0,0 @@ - - -Python: module rentas.actualizacion - - - - -
 
- 
rentas.actualizacion
index
/home/keoh/Codigo/misGitHubs/econoPy/rentas/actualizacion.py
-

# -*- coding: utf-8 -*-
-# Actualizaciones financieras. Traer una cantidad de dinero del futuro a un tipo de interes dado.

-

- - - - - -
 
-Functions
       
actualizar_cantidad(cantidad, tipo_interes, numero_de_periodos)
-
actualizar_renta(cuota, tipo_interes, numero_de_periodos)
-
actualizar_renta_perpetua(cuota, tipo_interes)
-
- \ No newline at end of file diff --git a/doc/rentas.capitalizacion.html b/doc/rentas.capitalizacion.html deleted file mode 100644 index 27288a0..0000000 --- a/doc/rentas.capitalizacion.html +++ /dev/null @@ -1,36 +0,0 @@ - - -Python: module rentas.capitalizacion - - - - -
 
- 
rentas.capitalizacion
index
/home/keoh/Codigo/misGitHubs/econoPy/rentas/capitalizacion.py
-

# -*- coding: utf-8 -*-
-# Capitalizaciones financieras .. llevar dinero al futuro

-

- - - - - -
 
-Modules
       
rentas
-

- - - - - -
 
-Functions
       
capitalizar_cantidad_compuesto(cantidad, tipo_interes, numero_periodos)
Capitaliza una cantidad de dinero un determinado número de períodos
-por el metodo compuesto, los cuales han sido pasados en los parámetros.
-
capitalizar_cantidad_simple(cantidad, tipo_interes, numero_periodos)
Capitaliza una cantidad de dinero un determinado número de períodos
-por el metodo simple, los cuales han sido pasados en los parámetros.
-
capitalizar_renta_compuesto(cuota, tipo_interes, numero_periodos)
Capitaliza una renta con los datos de cuota, tipo de interes y número
-de períodos pasados como parámetro. Supone todas las cuotas iguales.
-
- \ No newline at end of file diff --git a/doc/rentas.html b/doc/rentas.html deleted file mode 100644 index 9a66cfd..0000000 --- a/doc/rentas.html +++ /dev/null @@ -1,36 +0,0 @@ - - -Python: package rentas - - - - -
 
- 
rentas
index
/home/keoh/Codigo/misGitHubs/econoPy/rentas/__init__.py
-

# -*- coding: utf-8 -*-

-

- - - - - -
 
-Package Contents
       
actualizacion
-
capitalizacion
-

- - - - - -
 
-Data
       ANUAL = 1.0
-BIANUAL = 0.5
-BIMENSUAL = 6.0
-CUATRIMESTRAL = 3.0
-MENSUAL = 12.0
-SEMESTRAL = 2.0
-TRIMESTRAL = 4.0
- \ No newline at end of file diff --git a/doc/doc-estilo.css b/docs/.gitkeep similarity index 100% rename from doc/doc-estilo.css rename to docs/.gitkeep diff --git a/econoPy.py b/econoPy.py deleted file mode 100644 index 97125d5..0000000 --- a/econoPy.py +++ /dev/null @@ -1,19 +0,0 @@ -# -*- coding: utf-8 -*- -import os - -class EcoConsole: - - def __init__(self): - self.membrete() - - def membrete(self): - print "+"*32 - print "+++ Bienvenido econoPy +++" - print "+"*32 - print " " - - def menu(self): - pass - -if __name__ == "__main__": - EcoConsole() diff --git a/econopy/__init__.py b/econopy/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/econopy/calculos/__init__.py b/econopy/calculos/__init__.py new file mode 100644 index 0000000..c968206 --- /dev/null +++ b/econopy/calculos/__init__.py @@ -0,0 +1,28 @@ +"""Modulo para calculos variados.""" + +IS = 0.2 # Impuesto de sociedades a aplicar +IVA = 0.21 # Impuesto de valor añadido + +COMISION_STORE = 0.3 + + +def deflactar_IVA(cantidad): + deflactor = 1 + IVA + return cantidad / deflactor + + +def calcular_IS(cantidad): + return cantidad*IS + + +def calcular_comision(cantidad): + return cantidad*COMISION_STORE + + +def beneficio_por_venta(precio_venta): + + siniva = deflactar_IVA(precio_venta) + comision = calcular_comision(siniva) + ingreso = siniva - comision + isoc = calcular_IS(ingreso) + return ingreso - isoc diff --git a/econopy/prestamos/__init__.py b/econopy/prestamos/__init__.py new file mode 100644 index 0000000..e21e916 --- /dev/null +++ b/econopy/prestamos/__init__.py @@ -0,0 +1,52 @@ +import rentas + + +class PrestamoFrances: + + cuota = 0 + principal = 10 + interes_anual = 0.1 + interes = 0.01 + periodos = 1 + tipo_periodo = rentas.ANUAL + cuotas_interes = [] + cuotas_amortizacion = [] + capital_vivo = [] + total_amortizado = [] + + def __init__(self): + pass + + def calcula_interes(self): + self.interes = self.interes_anual / self.tipo_periodo + + def calcula_cuota(self): + self.calcula_interes() + cuota = self.principal * \ + ((self.interes*(1+self.interes)**self.periodos) / + (-1+(1+self.interes)**self.periodos)) + self.cuota = cuota + + def calcula_tabla_amortizacion(self): + self.capital_vivo.append(self.principal) + self.cuotas_interes.append(0) + self.cuotas_amortizacion.append(0) + self.total_amortizado.append(0) + for periodo in range(1, self.periodos+1): + interes = self.capital_vivo[periodo-1]*self.interes + amortizado = self.cuota - interes + self.cuotas_interes.append(interes) + self.cuotas_amortizacion.append(amortizado) + self.capital_vivo.append(self.capital_vivo[periodo-1]-amortizado) + self.total_amortizado.append( + self.total_amortizado[periodo-1]+amortizado) + + def pinta_cuadro(self): + self.calcula_cuota() + self.calcula_tabla_amortizacion() + print(" "+"-"*69) + print("| Periodo | Cuota | Capital Vivo | Cuota Interes | Cuota Amortizacion |") + print(" "+"-"*69) + for i in range(1, self.periodos+1): + print("| {} | {} | {} | {} | {} |").format(i, round(self.cuota, 2), round( + self.capital_vivo[i], 2), round(self.cuotas_interes[i], 2), round(self.cuotas_amortizacion[i], 2)) diff --git a/rentas/__init__.py b/econopy/rentas/__init__.py similarity index 70% rename from rentas/__init__.py rename to econopy/rentas/__init__.py index acf8e98..b358a86 100644 --- a/rentas/__init__.py +++ b/econopy/rentas/__init__.py @@ -1,8 +1,7 @@ -# -*- coding: utf-8 -*- SEMESTRAL = 2.0 MENSUAL = 12.0 ANUAL = 1.0 CUATRIMESTRAL = 3.0 TRIMESTRAL = 4.0 BIANUAL = 0.5 -BIMENSUAL = 6.0 \ No newline at end of file +BIMENSUAL = 6.0 diff --git a/econopy/rentas/actualizacion.py b/econopy/rentas/actualizacion.py new file mode 100644 index 0000000..1ca426f --- /dev/null +++ b/econopy/rentas/actualizacion.py @@ -0,0 +1,25 @@ +"""Actualizaciones financieras. Traer una cantidad de dinero del futuro a un tipo de interes dado.""" + + +def actualizar_cantidad(cantidad, tipo_interes, numero_de_periodos): + + cantidad_actualizada = cantidad / (1 + tipo_interes)**numero_de_periodos + + return cantidad_actualizada + + +def actualizar_renta(cuota, tipo_interes, numero_de_periodos): + + cantidad_actualizada = 0 + + for i in range(1, numero_de_periodos+1): + cantidad_actualizada += actualizar_cantidad(cuota, tipo_interes, i) + + return cantidad_actualizada + + +def actualizar_renta_perpetua(cuota, tipo_interes): + + cantidad_actualizada = cuota / tipo_interes + + return cantidad_actualizada diff --git a/econopy/rentas/capitalizacion.py b/econopy/rentas/capitalizacion.py new file mode 100644 index 0000000..4ef78c0 --- /dev/null +++ b/econopy/rentas/capitalizacion.py @@ -0,0 +1,37 @@ +"""Capitalizaciones financieras .. llevar dinero al futuro.""" +import rentas + + +def capitalizar_cantidad_compuesto(cantidad, tipo_interes, numero_periodos): + """ + Capitaliza una cantidad de dinero un determinado número de períodos + por el metodo compuesto, los cuales han sido pasados en los parámetros. + + """ + + cantidad_capitalizada = cantidad*(1+tipo_interes)**numero_periodos + return cantidad_capitalizada + + +def capitalizar_cantidad_simple(cantidad, tipo_interes, numero_periodos): + """ + Capitaliza una cantidad de dinero un determinado número de períodos + por el metodo simple, los cuales han sido pasados en los parámetros. + + """ + + cantidad_capitalizada = cantidad*(1+(tipo_interes*numero_periodos)) + return cantidad_capitalizada + + +def capitalizar_renta_compuesto(cuota, tipo_interes, numero_periodos): + """ + Capitaliza una renta con los datos de cuota, tipo de interes y número + de períodos pasados como parámetro. Supone todas las cuotas iguales. + """ + renta_capitalizada = 0 + + for i in range(1, numero_periodos+1): + renta_capitalizada += capitalizar_cantidad_compuesto(cuota, tipo_interes, i) + + return renta_capitalizada diff --git a/tipos/__init__.py b/econopy/tipos/__init__.py similarity index 95% rename from tipos/__init__.py rename to econopy/tipos/__init__.py index b8f0e80..8577d7c 100644 --- a/tipos/__init__.py +++ b/econopy/tipos/__init__.py @@ -1,4 +1,3 @@ -# -*- coding: utf-8 -*- import rentas def interes_mensual_simple(tipo_interes_anual): diff --git a/prestamos/__init__.py b/prestamos/__init__.py deleted file mode 100644 index d4c2eeb..0000000 --- a/prestamos/__init__.py +++ /dev/null @@ -1,47 +0,0 @@ -import rentas - -class PrestamoFrances: - - cuota = 0 - principal = 10 - interes_anual = 0.1 - interes = 0.01 - periodos = 1 - tipo_periodo = rentas.ANUAL - cuotas_interes = [] - cuotas_amortizacion = [] - capital_vivo = [] - total_amortizado = [] - - def __init__(self): - pass - - def calcula_interes(self): - self.interes = self.interes_anual / self.tipo_periodo - - def calcula_cuota(self): - self.calcula_interes() - cuota = self.principal * ((self.interes*(1+self.interes)**self.periodos)/(-1+(1+self.interes)**self.periodos)) - self.cuota = cuota - - def calcula_tabla_amortizacion(self): - self.capital_vivo.append(self.principal) - self.cuotas_interes.append(0) - self.cuotas_amortizacion.append(0) - self.total_amortizado.append(0) - for periodo in range(1, self.periodos+1): - interes = self.capital_vivo[periodo-1]*self.interes - amortizado = self.cuota - interes - self.cuotas_interes.append(interes) - self.cuotas_amortizacion.append(amortizado) - self.capital_vivo.append(self.capital_vivo[periodo-1]-amortizado) - self.total_amortizado.append(self.total_amortizado[periodo-1]+amortizado) - - def pinta_cuadro(self): - self.calcula_cuota() - self.calcula_tabla_amortizacion() - print " "+"-"*69 - print "| Periodo | Cuota | Capital Vivo | Cuota Interes | Cuota Amortizacion |" - print " "+"-"*69 - for i in range(1, self.periodos+1): - print "| %d | %f | %f | %f | %f |"%(i, round(self.cuota,2), round(self.capital_vivo[i],2), round(self.cuotas_interes[i],2), round(self.cuotas_amortizacion[i],2)) diff --git a/rentas/actualizacion.py b/rentas/actualizacion.py deleted file mode 100644 index ecd1c05..0000000 --- a/rentas/actualizacion.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -# Actualizaciones financieras. Traer una cantidad de dinero del futuro a un tipo de interes dado. - -def actualizar_cantidad(cantidad, tipo_interes, numero_de_periodos): - - cantidad_actualizada = cantidad / (1 + tipo_interes)**numero_de_periodos - - return cantidad_actualizada - -def actualizar_renta(cuota, tipo_interes, numero_de_periodos): - - cantidad_actualizada = 0 - - for i in range(1, numero_de_periodos+1): - cantidad_actualizada += actualiza_cantidad(cuota, tipo_interes, i) - - return cantidad_actualizada - -def actualizar_renta_perpetua(cuota, tipo_interes): - - cantidad_actualizada = cuota / tipo_interes - - return cantidad_actualizada \ No newline at end of file diff --git a/rentas/capitalizacion.py b/rentas/capitalizacion.py deleted file mode 100644 index cc40295..0000000 --- a/rentas/capitalizacion.py +++ /dev/null @@ -1,35 +0,0 @@ -# -*- coding: utf-8 -*- -# Capitalizaciones financieras .. llevar dinero al futuro -import rentas - -def capitalizar_cantidad_compuesto(cantidad, tipo_interes, numero_periodos): - """ - Capitaliza una cantidad de dinero un determinado número de períodos - por el metodo compuesto, los cuales han sido pasados en los parámetros. - - """ - - cantidad_capitalizada = cantidad*(1+tipo_interes)**numero_periodos - return cantidad_capitalizada - -def capitalizar_cantidad_simple(cantidad, tipo_interes, numero_periodos): - """ - Capitaliza una cantidad de dinero un determinado número de períodos - por el metodo simple, los cuales han sido pasados en los parámetros. - - """ - - cantidad_capitalizada = cantidad*(1+(tipo_interes*numero_periodos)) - return cantidad_capitalizada - -def capitalizar_renta_compuesto(cuota, tipo_interes, numero_periodos): - """ - Capitaliza una renta con los datos de cuota, tipo de interes y número - de períodos pasados como parámetro. Supone todas las cuotas iguales. - """ - renta_capitalizada = 0 - - for i in range(1, numero_periodos+1): - renta_capitalizada += capitalizar_cantidad(cuota, tipo_interes, i) - - return renta_capitalizada diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..68c61a2 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,2 @@ +[bdist_wheel] +universal=0 \ No newline at end of file diff --git a/setup.py b/setup.py new file mode 100644 index 0000000..42aa004 --- /dev/null +++ b/setup.py @@ -0,0 +1,46 @@ + +from codecs import open +from os import path + +from setuptools import find_packages, setup + +here = path.abspath(path.dirname(__file__)) + +with open(path.join(here, 'README.md'), encoding='utf-8') as f: + long_description = f.read() + +with open(path.join(here, 'VERSION'), encoding='utf-8') as f: + version = f.read() + + +setup( + name='econopy', version=version, + description='Simple economic utilities', + long_description=long_description, + long_description_content_type='text/markdown', + url='https://github.com/KeoH/econoPy', + author='Francisco Manzano Magaña', + author_email='keoh77@gmail.com', + classifiers=[ + 'Development Status :: 1 - Planning', + 'Intended Audience :: Developers', + 'Topic :: Office/Business :: Financial :: Accounting', + 'License :: OSI Approved :: MIT License', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.4', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7' + ], + keywords='economic,financial,business,accounting', + packages=find_packages(exclude=['contrib', 'docs', 'tests']), + install_requires=[], + extras_require={ + 'dev': ['check-manifest'], + 'test': ['coverage'], + }, + project_urls={ + 'Bug Reports': 'https://github.com/KeoH/econoPy/issues', + 'Source': 'https://github.com/KeoH/econoPy/', + }, +) diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..2813bd3 --- /dev/null +++ b/tests/__init__.py @@ -0,0 +1 @@ +"""Unit tests.""" \ No newline at end of file diff --git a/tests/unit/__init__.py b/tests/unit/__init__.py new file mode 100644 index 0000000..2813bd3 --- /dev/null +++ b/tests/unit/__init__.py @@ -0,0 +1 @@ +"""Unit tests.""" \ No newline at end of file diff --git a/tests/unit/test_import.py b/tests/unit/test_import.py new file mode 100644 index 0000000..a17d7dc --- /dev/null +++ b/tests/unit/test_import.py @@ -0,0 +1,10 @@ +"""Base library tests.""" + + +def test_import(): + """Test basic import.""" + import importlib + try: + importlib.import_module('econopy') + except ImportError: + assert False \ No newline at end of file diff --git a/tox.ini b/tox.ini new file mode 100644 index 0000000..a64684f --- /dev/null +++ b/tox.ini @@ -0,0 +1,17 @@ +[tox] +envlist = py36 + +[testenv] +passenv=HOME +deps = pipenv +usedevelop = True +commands = + pipenv install --dev + pipenv run py.test + +[testenv:doc] +passenv=HOME +usedevelop = True +deps = pipenv +commands= + pipenv run python setup.py sphinx_build \ No newline at end of file