physicsLab 1.5.0__tar.gz → 1.6.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. {physicslab-1.5.0 → physicslab-1.6.0}/PKG-INFO +1 -1
  2. physicslab-1.6.0/README.md +161 -0
  3. physicslab-1.5.0/physicsLab/experiment.py → physicslab-1.6.0/physicsLab/Experiment.py +34 -370
  4. physicslab-1.6.0/physicsLab/__init__.py +37 -0
  5. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/celestial/_planetbase.py +3 -2
  6. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/chart.py +16 -0
  7. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/circuit/elementXYZ.py +2 -2
  8. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/circuit/elements/_circuitbase.py +12 -10
  9. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/circuit/elements/logicCircuit.py +35 -37
  10. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/circuit/elements/otherCircuit.py +4 -6
  11. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/circuit/elements/sensor.py +2 -2
  12. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/circuit/wire.py +13 -1
  13. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/electromagnetism/_electromagnetismBase.py +9 -7
  14. physicslab-1.6.0/physicsLab/element.py +294 -0
  15. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/errors.py +25 -46
  16. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/lib/logic.py +1 -1
  17. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/lib/wires.py +5 -9
  18. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/music/music.py +1 -1
  19. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/plAR.py +13 -12
  20. physicslab-1.6.0/physicsLab/utils.py +7 -0
  21. physicslab-1.6.0/physicsLab/web/_async_tool.py +45 -0
  22. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/web/api.py +171 -48
  23. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/web/webutils.py +141 -197
  24. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab.egg-info/PKG-INFO +1 -1
  25. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab.egg-info/SOURCES.txt +4 -2
  26. {physicslab-1.5.0 → physicslab-1.6.0}/setup.py +1 -1
  27. {physicslab-1.5.0 → physicslab-1.6.0}/test/test_physicsLab.py +34 -31
  28. physicslab-1.5.0/README.md +0 -100
  29. physicslab-1.5.0/physicsLab/__init__.py +0 -45
  30. physicslab-1.5.0/physicsLab/web/_threads_manager.py +0 -78
  31. {physicslab-1.5.0 → physicslab-1.6.0}/LICENSE +0 -0
  32. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/_colorUtils.py +0 -0
  33. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/_element_base.py +0 -0
  34. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/_tools.py +0 -0
  35. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/celestial/__init__.py +0 -0
  36. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/celestial/planets.py +0 -0
  37. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/circuit/__init__.py +0 -0
  38. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/circuit/elements/__init__.py +0 -0
  39. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/circuit/elements/artificialCircuit.py +0 -0
  40. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/circuit/elements/basicCircuit.py +0 -0
  41. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/electromagnetism/__init__.py +0 -0
  42. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/electromagnetism/elements.py +0 -0
  43. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/enums.py +0 -0
  44. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/lib/__init__.py +0 -0
  45. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/lib/edge_trigger.py +0 -0
  46. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/music/__init__.py +0 -0
  47. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/savTemplate.py +0 -0
  48. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/typehint.py +0 -0
  49. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab/web/__init__.py +0 -0
  50. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab.egg-info/dependency_links.txt +0 -0
  51. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab.egg-info/requires.txt +0 -0
  52. {physicslab-1.5.0 → physicslab-1.6.0}/physicsLab.egg-info/top_level.txt +0 -0
  53. {physicslab-1.5.0 → physicslab-1.6.0}/setup.cfg +0 -0
  54. {physicslab-1.5.0 → physicslab-1.6.0}/test/test_pl_web.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: physicsLab
3
- Version: 1.5.0
3
+ Version: 1.6.0
4
4
  Summary: Python API for Physics-Lab-AR
5
5
  Home-page: https://github.com/GoodenoughPhysicsLab/physicsLab
6
6
  Author: Arendelle
@@ -0,0 +1,161 @@
1
+ # physicsLab
2
+
3
+ ![输入图片说明](./cover.jpg)
4
+
5
+ [![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)
6
+ [![build](https://github.com/gaogaotiantian/viztracer/workflows/build/badge.svg)](https://github.com/GoodenoughPhysicsLab/physicsLab/actions)
7
+ <!-- ![support-version](https://img.shields.io/pypi/pyversions/viztracer) -->
8
+
9
+ ## 介绍
10
+ 当我们在[物理实验室AR](https://www.turtlesim.com/)纯手动做实验的时候,往往会遇到一些琐碎、麻烦但又不得不做的事情,比如:重复的搭建某些电路,调整元件的位置,电路内部结构的重复。这些问题都可以通过使用`physicsLab`生成这些电路结构来轻易解决!于是我写了`physicsLab`,让你能用`Python`在物实做实验。
11
+
12
+ ## 部分方便且惊艳的功能展示
13
+ * 同时支持通过存档的文件名与**存档名**访问存档
14
+ * 不受实验室大小地随意摆放原件 (比如在实验室外悬空的元件)
15
+ * 将midi转换为物实对应的电路
16
+ * 修改物实的实验封面
17
+ * 获取用户的所有头像或实验用过的所有封面
18
+ 更多好用的功能等你来发现
19
+
20
+ ## 功能支持
21
+ * 良好的平台兼容性,只要该平台能够运行Python与文件读写,比如`Windows`, `Linux`, `MacOS`, `Android`
22
+ * 支持物实**所有**实验类型:电学,天体物理,电与磁
23
+ * 支持物实**全部**元件
24
+ * 大多数物实网络api封装的支持 (直接与物实服务器进行交互)
25
+
26
+ ## 稳定&兼容
27
+ 鉴于目前用户较少, 深度使用该库的用户几乎没有, 因此不考虑稳定&兼容。
28
+ 并且哪怕用户多了, 也会优先考虑标注弃用, 并推荐转移到新api的模式, 而不是无意义的兼容。
29
+
30
+ 不过就目前的情况来看, `class experiment` 是事实上稳定的api
31
+
32
+ ## 安装教程
33
+ 1. 请确保你的电脑有[Python](https://www.python.org)(>=3.8)与[物理实验室AR](https://www.turtlesim.com/)(简称`物实`)(也可以联系物理实验室的开发者[Jone-Chen](https://gitee.com/civitasjohn))
34
+
35
+ 2. 在cmd或shell输入以下载physicsLab:
36
+ ```shell
37
+ pip install physicsLab
38
+ ```
39
+ 在某些非正常情况,你可能无法顺利使用`pip`,此时你可以换为该命令来解决该问题:
40
+ ```shell
41
+ python -m pip install physicsLab
42
+ ```
43
+ > Note: 在`Windows`下你可以输入`py`来使用`python`,`Linux, MacOS`下可能需要输入`python3`来使用`python`
44
+
45
+ 3. 有一个并非必需的功能:播放midi。你可以输入下面命令的任意一条:
46
+ ```shell
47
+ pip install plmidi
48
+ pip install pygame
49
+ ```
50
+ 点击跳转至[plmidi](https://github.com/GoodenoughPhysicsLab/plmidi)
51
+
52
+ 之所以没有做安装physicsLab的时候自动安装这两个库,是因为`Android`的`qpython`在下载含c的库的时候存在问题
53
+
54
+ 4. 物实存档使用了中文字符,默认编码为`utf-8`。但在一些非正常情况,存档的编码可能被改变。虽然`physicsLab`有一定的处理存档编码问题的能力,但如果还是出现了问题,请输入该命令:
55
+ ```bash
56
+ pip install chardet
57
+ ```
58
+ 此时`physicsLab`会自动调用`chardet`来处理更加棘手的文件编码问题。
59
+
60
+ 5. 如果下载成功,请输入下面的代码以验证`physicsLab`已经可以使用了
61
+ ```Python
62
+ from physicsLab import *
63
+
64
+ with experiment("example"):
65
+ Logic_Input(0, 0, 0.1)
66
+ ```
67
+ 然后打开物实,点击`从本地读取`,点击一个名为`example`的实验。如果出现了一个悬空的逻辑输入,则说明一切都成功了。
68
+ > Note: 每次运行`physicsLab`后都需要重新加载物实的本地存档,即点击`从本地读取`,再次点击对应存档,使物实重新加载该存档
69
+
70
+ ### 新手解惑: 为什么我明明安装了physicsLab, python却告诉我无法找到?
71
+ pip安装的包会被放在`site-package`文件夹下
72
+ 这大概率是因为pip安装的包所对应的`site-package`与你使用的`python`对应的`site-package`不一样导致的
73
+ 解决方案:找到ide调用的`python`对应的`site-package`,然后把`physicsLab`与`physicsLab.egg-info`复制过去
74
+ 同时我推荐去学一下`python`的虚拟环境`venv`,有效解决此问题
75
+
76
+ 如果此方法失效了,虽然这一定不是这个方法的问题,但你还可以在python的开头写上这两行代码来解决这个问题:
77
+ ```python
78
+ import sys
79
+ sys.path.append("/your/path/of/physicsLab") # 将字符串替换为你想添加的路径
80
+ ```
81
+ 这个方法很丑陋但很简单好用,可以帮你快速解决问题,毕竟能跑起来就很不错了
82
+ 其原理是python会在sys.path这个列表里面的路径去寻找python package,若未找到则会报错。因此该方法的原理就是把python找不到的路径加进去,python就找到了
83
+ 注:每次运行的时候加入的path都是临时的,因此该方法必须让python在每次运行的时候都执行一遍
84
+
85
+ ## 使用说明
86
+ > Note: 如果`physicsLab`抛出`TypeError`,请检查你自己的输入参数是否有问题,
87
+ > 如果抛出`AssertionError`,请**报告bug**
88
+
89
+ *目前`physicsLab`在`windows`上的支持最好,在`Android`上仅支持手动导入/导出存档(默认在`physicsLabSav`文件夹中)。*
90
+ 其他操作系统上的行为与在`Android`上应该一致。
91
+
92
+ > 在`qpython v3.2.5`中大大削减了python在文件路径操作方面的权限,这意味着在qpython上使用physicsLab生成的存档将很难被物实导入,因为物实没权限访问不了。
93
+ > 但此问题在[qpython v3.2.3](https://github.com/qpython-android/qpython/releases/tag/v3.2.3)中不存在,推荐下载该版本。
94
+ > 不过由于安卓权限的问题,用起来肯定没有电脑上方便。
95
+
96
+ 下面给出一个简单的例子(该例子仅用于讲解,你大概率无法运行):
97
+ ```Python
98
+ from physicsLab import *
99
+
100
+ # 打开存档
101
+ # 也支持输入存档的文件名(也就是xxx.sav)
102
+ e = Experiment("example")
103
+ # 如果你希望程序不覆盖掉存档中已有的实验状态,需要这样写
104
+ read_plsav(e)
105
+ # 创建一个逻辑输入,坐标为(0, 0, 0.1)
106
+ Logic_Input(0, 0, 0.1)
107
+ # 你也可以不写坐标,默认是(0,0,0)
108
+ o = Or_Gate()
109
+ # 元件含有引脚属性,是对物实原始的引脚表示方法的封装
110
+ # 比如或门(Or_Gate),含有 i_up, i_low, o三个引脚属性
111
+ # 通过引脚属性,就可以更方便的连接导线了
112
+
113
+ # crt_wire()函数用来连接导线,有三个参数:SourcePin, TargetPin, color
114
+ # SourcePin与TargetPin必须传入元件的引脚
115
+ # color可以不写,默认为蓝色
116
+ crt_wire(o.i_up, o.i_low)
117
+ # 将程序中生成的原件,导线等等写入存档
118
+ e.write()
119
+ # 然后用物实打开存档见证奇迹
120
+ ```
121
+
122
+ `physicsLab`还支持等价但更优雅的方式 (这也是我最推荐的方式):
123
+ ```python
124
+ from physicsLab import *
125
+
126
+ with experiment("example", read=True):
127
+ Logic_Input(0, 0, 0.1)
128
+ o = Or_Gate()
129
+ o.i_up - o.i_low # 连接导线
130
+ ```
131
+ 上面两段代码产生的结果是一样的
132
+
133
+ 更详细的内容请在[文档](docs)中查看
134
+
135
+ 由于`physicsLab`使用中文注释而且物实的存档也使用了中文
136
+ 因此我建议你手动在`Python`代码的第一行添加如下注释:
137
+ ```Python
138
+ # -*- coding: utf-8 -*-
139
+ ```
140
+ 不过由于编码导致问题的情况似乎很少
141
+
142
+ ## 优点
143
+ * `physicsLab`拥有优秀的与物实存档交互的能力,你甚至可以使用程序完成部分工作之后你再继续完成或者让程序在你已完成的实验的基础上继续完成。
144
+ 如此灵活的功能使得physicsLab即使是在python shell上也能出色的完成工作!
145
+ * `physicsLab`为纯python库,其c拓展部分(与midi相关的)被放到了`plmidi`中,但`plmidi`不是必须需要的。纯Python库通常意味着更容易使用,更少的问题。
146
+ * 封装了物实里的大量原件,即使是***未解锁的原件***也可以轻易用脚本生成,甚至一些常用的电路也被封装好了!
147
+ * 物理实验室存档的位置有点隐蔽,但用该脚本生成实验时,你无须亲自寻找这个文件在哪里。
148
+ * 外部依赖少
149
+ * 相比于手动做实验,代码复用率更高,许多逻辑电路已经被封装,只需简单的一行调用即可生成。
150
+ * 程序有利于大型实验的创作
151
+ * 改存档做出来的实验往往有十分惊艳的效果!
152
+
153
+ ## 其他
154
+ * 一些零七八碎的内容: [other physicsLab](https://gitee.com/script2000/temporary-warehouse/tree/master/other%20physicsLab)
155
+ * 主仓库(github): https://github.com/GoodenoughPhysicsLab/physicsLab
156
+ * 备份仓库(gitee): https://gitee.com/script2000/physicsLab
157
+
158
+ ## contribute
159
+ `physicsLab`没有强行要求代码风格,但需要注意与上下文保持一致
160
+
161
+ 你可以从更新文档、bugfix、写[测试代码](test)开始入手