# pysics
Pysics es un módulo escrito en python para realizar los cálculos que suelen realizarse en laboratorios de física.
Este se basa en el uso de la clase ""Medida"" la cual permite guardar mediciones con error y realizar la aproximación estandar
(primera cifra significativa del error, dos si se trata de un 1).
### Uso
La parte fundamental del módulo es la clase Medida. La inicialización de un objeto puede realizarse de varias formas.
```python
# Si se trata de una medida sin error porque se desprecia o por alguna otra razón puede hacerse simplemente pasando el valor
m = Medida(9.81)
# Si tenemos un error se pasará como segundo argumento ej (7.831 ± 0.0138).
a = Medida(7.831, 0.0138)
```
Si ejecutamos la linea anterior observaremos que el resultado de a es 7.831 ± 0.014.
Esto es porque por defecto Medida realiza la aproximación al inicializar el objeto.
Para evitarlo se puede pasar como argumento aproximar=False
```python
b = Medida(7.831, 0.0138, aproximar=False)
```
Si queremos realizar la aproximación más adelante puede hacerse con .aprox()
```python
b.aprox()
# aprox también devuelve un puntero a el objeto lo que permite cosas como
b = b.aprox()
print(a == b) # True
# o
c = (a+b).aprox()
# que sería equivalente a
c = a+b
c.aprox()
```
Las medidas también pueden ser una lista de varios valores ej: c = 1.1 ± 0.1, 2.2 ± 0.1, 3.3 ± 0.1
```python
# Como todos los valores tienen el mismo error vale con escribirlo una vez
c = Medida([1.1, 2.2, 3.3], 0.1, aproximar=False)
```
d = 1.1 ± 0.1, 2.2 ± 0.2, 3.3 ± 0.3
En este caso hay errores distintos por lo que se pasan dos listas, la primera contiene los valores y la segunda los errores de tal forma que el indice de cada lista es un valor y su correspondiente error. Si las listas no tienen la misma longitud se lanzará un error.
```python
d = Medida([1.1, 2.2, 3.3], [0.1, 0.2, 0.3])
```
Para esta clase de Medidas se proporciona el classmethod "from_pairs" que permite pasar una lista de valores en tuplas.
El siguiente código es equivalente al anterior.
```python
d = Medida.from_pairs([1.1, 0.1], [2.2, 0.2], [3.3, 0.3], aproximar=True)
```
Los objetos de medida pueden ser sumados, restados, multiplicados... por medidas y por escalares devolviendo siempre otras Medidas.
Además no se realizarán las aproximaciones al realizar un cálculo, esto es para poder concatenar varias operaciones sin perder precisión.
Al realizar estos calculos se recalculan los errores. Para TODOS los casos exceptuando & y || las medidas se consideran independientes por lo que
el error es la suma en cuadratura
Las operaciones entre medidas están definidas elemento por elemento, es decir, se suman el primero con el primero, el segundo con el segundo...
Las operacions con escalares están definidas como la operación del escalar sobre toda la medida, ej: c+1 resultará en Medida([1.1 + 1, 2.2 + 1, 3.3 + 1], [0.1], aproximar=False)
Si hay una medida con un único valor, ej: Medida(1, 0.1), se considerará como un escalar teniendo en cuenta el error. Si se suman dos medidas con distinta cantidad de elementos
y ninguna tiene un unico elemento, ej: Medida([1, 2]) + Medida([1, 2, 3]), se lanzará un error.
``` python
e = (a+b).aprox() # 15.662 ± 0.02
f = (c*d).aprox() # 1.21 ± 0.16, 4.8 ± 0.5, 10.9 ± 1.0
```
Si dos medidas son dependientes y quieren sumarse o restarse se deben usar los operadores & y |
```python
# Para realizar sumas de medidas dependientes se usa el operador &
h = (a&b).aprox() # 15.66 ± 0.03
# Para realizar restas de medidas dependientes se usa el operador |
i = (a|b).aprox() # 0.0 ± 0.03 equivalente a (a&(-b))
```
Para realizar copias de una medida se puede emplear el metodo copy.
En el siguiente ejemplo se hace una copia con las aproximaciones de c sin modificar c.
```python
j = c.copy().aprox()
# Si en vez de lo anterior usasemos los siguiente modificaríamos c, además, es posible que ciertos cambios aplicados a j afectasen a c
j = c.aprox()
```
Para recoger los valores de las medidas o errores en una lista se pueden usar las propiedades medida y error.
```python
print(d.medida) # [Number(1.1), Number(2.2), Number(3.3)]
print(d.error) # [Number(0.1), Number(0.2), Number(0.3)]
medida, error = d.unpack()
```
Para calcular la media, desviación estandar y error estandar de una medida pueden usarse los métodos del mismo nombre
```python
media = d.media()
desviacion_estandar = d.desviacion_estandar()
error_estandar = d.error_estandar() # Desviación estandar de la media
media, error_estandar = d.estimacion()
```
Raw data
{
"_id": null,
"home_page": null,
"name": "pysics-lab",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.12",
"maintainer_email": null,
"keywords": "physics, laboratory, units, least squares",
"author": "O2s0k0i3",
"author_email": "asaltanubes <gustavodragonico@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/bd/8a/ffb101383f9de6016fc76b76706b85bad3e9f5e382641ebb725cfc79a265/pysics_lab-0.1.1.tar.gz",
"platform": null,
"description": "# pysics\r\nPysics es un m\u00f3dulo escrito en python para realizar los c\u00e1lculos que suelen realizarse en laboratorios de f\u00edsica. \r\nEste se basa en el uso de la clase \"\"Medida\"\" la cual permite guardar mediciones con error y realizar la aproximaci\u00f3n estandar\r\n(primera cifra significativa del error, dos si se trata de un 1).\r\n\r\n### Uso\r\nLa parte fundamental del m\u00f3dulo es la clase Medida. La inicializaci\u00f3n de un objeto puede realizarse de varias formas.\r\n```python\r\n# Si se trata de una medida sin error porque se desprecia o por alguna otra raz\u00f3n puede hacerse simplemente pasando el valor\r\nm = Medida(9.81)\r\n# Si tenemos un error se pasar\u00e1 como segundo argumento ej (7.831 \u00b1 0.0138).\r\na = Medida(7.831, 0.0138)\r\n```\r\n\r\nSi ejecutamos la linea anterior observaremos que el resultado de a es 7.831 \u00b1 0.014.\r\nEsto es porque por defecto Medida realiza la aproximaci\u00f3n al inicializar el objeto.\r\nPara evitarlo se puede pasar como argumento aproximar=False\r\n```python\r\nb = Medida(7.831, 0.0138, aproximar=False)\r\n```\r\n\r\nSi queremos realizar la aproximaci\u00f3n m\u00e1s adelante puede hacerse con .aprox()\r\n```python\r\nb.aprox()\r\n# aprox tambi\u00e9n devuelve un puntero a el objeto lo que permite cosas como\r\nb = b.aprox()\r\nprint(a == b) # True\r\n\r\n# o\r\nc = (a+b).aprox()\r\n# que ser\u00eda equivalente a\r\nc = a+b\r\nc.aprox()\r\n```\r\nLas medidas tambi\u00e9n pueden ser una lista de varios valores ej: c = 1.1 \u00b1 0.1, 2.2 \u00b1 0.1, 3.3 \u00b1 0.1\r\n```python\r\n# Como todos los valores tienen el mismo error vale con escribirlo una vez\r\nc = Medida([1.1, 2.2, 3.3], 0.1, aproximar=False)\r\n```\r\nd = 1.1 \u00b1 0.1, 2.2 \u00b1 0.2, 3.3 \u00b1 0.3\r\n En este caso hay errores distintos por lo que se pasan dos listas, la primera contiene los valores y la segunda los errores de tal forma que el indice de cada lista es un valor y su correspondiente error. Si las listas no tienen la misma longitud se lanzar\u00e1 un error.\r\n```python\r\nd = Medida([1.1, 2.2, 3.3], [0.1, 0.2, 0.3])\r\n```\r\nPara esta clase de Medidas se proporciona el classmethod \"from_pairs\" que permite pasar una lista de valores en tuplas.\r\nEl siguiente c\u00f3digo es equivalente al anterior.\r\n```python\r\nd = Medida.from_pairs([1.1, 0.1], [2.2, 0.2], [3.3, 0.3], aproximar=True)\r\n```\r\n\r\nLos objetos de medida pueden ser sumados, restados, multiplicados... por medidas y por escalares devolviendo siempre otras Medidas.\r\nAdem\u00e1s no se realizar\u00e1n las aproximaciones al realizar un c\u00e1lculo, esto es para poder concatenar varias operaciones sin perder precisi\u00f3n.\r\nAl realizar estos calculos se recalculan los errores. Para TODOS los casos exceptuando & y || las medidas se consideran independientes por lo que\r\nel error es la suma en cuadratura\r\nLas operaciones entre medidas est\u00e1n definidas elemento por elemento, es decir, se suman el primero con el primero, el segundo con el segundo...\r\nLas operacions con escalares est\u00e1n definidas como la operaci\u00f3n del escalar sobre toda la medida, ej: c+1 resultar\u00e1 en Medida([1.1 + 1, 2.2 + 1, 3.3 + 1], [0.1], aproximar=False)\r\nSi hay una medida con un \u00fanico valor, ej: Medida(1, 0.1), se considerar\u00e1 como un escalar teniendo en cuenta el error. Si se suman dos medidas con distinta cantidad de elementos\r\ny ninguna tiene un unico elemento, ej: Medida([1, 2]) + Medida([1, 2, 3]), se lanzar\u00e1 un error.\r\n``` python\r\ne = (a+b).aprox() # 15.662 \u00b1 0.02\r\nf = (c*d).aprox() # 1.21 \u00b1 0.16, 4.8 \u00b1 0.5, 10.9 \u00b1 1.0\r\n```\r\nSi dos medidas son dependientes y quieren sumarse o restarse se deben usar los operadores & y |\r\n```python\r\n# Para realizar sumas de medidas dependientes se usa el operador &\r\nh = (a&b).aprox() # 15.66 \u00b1 0.03\r\n# Para realizar restas de medidas dependientes se usa el operador |\r\ni = (a|b).aprox() # 0.0 \u00b1 0.03 equivalente a (a&(-b))\r\n```\r\n\r\nPara realizar copias de una medida se puede emplear el metodo copy.\r\nEn el siguiente ejemplo se hace una copia con las aproximaciones de c sin modificar c.\r\n```python\r\nj = c.copy().aprox()\r\n# Si en vez de lo anterior usasemos los siguiente modificar\u00edamos c, adem\u00e1s, es posible que ciertos cambios aplicados a j afectasen a c\r\nj = c.aprox()\r\n```\r\n\r\nPara recoger los valores de las medidas o errores en una lista se pueden usar las propiedades medida y error.\r\n```python\r\nprint(d.medida) # [Number(1.1), Number(2.2), Number(3.3)]\r\nprint(d.error) # [Number(0.1), Number(0.2), Number(0.3)]\r\nmedida, error = d.unpack()\r\n```\r\nPara calcular la media, desviaci\u00f3n estandar y error estandar de una medida pueden usarse los m\u00e9todos del mismo nombre\r\n```python\r\nmedia = d.media()\r\ndesviacion_estandar = d.desviacion_estandar()\r\nerror_estandar = d.error_estandar() # Desviaci\u00f3n estandar de la media\r\nmedia, error_estandar = d.estimacion()\r\n```\r\n",
"bugtrack_url": null,
"license": null,
"summary": "Library to make laboratory calculations easy",
"version": "0.1.1",
"project_urls": {
"Issues": "https://github.com/asaltanubes/pysics/issues",
"Repository": "https://github.com/asaltanubes/pysics"
},
"split_keywords": [
"physics",
" laboratory",
" units",
" least squares"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "ad4b4aa26270290a720e91dcb71b7953718bd2b568115f40ba1802d8929e2b02",
"md5": "4aa7db75ee1ed15574731936f65946aa",
"sha256": "074022d52624a96ded792ff617c286f313431799a429d02ed3a1bad5241d4db3"
},
"downloads": -1,
"filename": "pysics_lab-0.1.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "4aa7db75ee1ed15574731936f65946aa",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.12",
"size": 24697,
"upload_time": "2024-08-23T20:56:28",
"upload_time_iso_8601": "2024-08-23T20:56:28.396877Z",
"url": "https://files.pythonhosted.org/packages/ad/4b/4aa26270290a720e91dcb71b7953718bd2b568115f40ba1802d8929e2b02/pysics_lab-0.1.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "bd8affb101383f9de6016fc76b76706b85bad3e9f5e382641ebb725cfc79a265",
"md5": "cee16d3ebc70dd0c321e2b9d9d2b7aeb",
"sha256": "5a1f8938ecb2a1dbfc8c8fa844f0becd1160f440563dcf8d7c0a425d7940511c"
},
"downloads": -1,
"filename": "pysics_lab-0.1.1.tar.gz",
"has_sig": false,
"md5_digest": "cee16d3ebc70dd0c321e2b9d9d2b7aeb",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.12",
"size": 24197,
"upload_time": "2024-08-23T20:56:29",
"upload_time_iso_8601": "2024-08-23T20:56:29.593462Z",
"url": "https://files.pythonhosted.org/packages/bd/8a/ffb101383f9de6016fc76b76706b85bad3e9f5e382641ebb725cfc79a265/pysics_lab-0.1.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-08-23 20:56:29",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "asaltanubes",
"github_project": "pysics",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "pysics-lab"
}