Code Monkey home page Code Monkey logo

site-32's People

Contributors

ice1000 avatar thautwarm avatar weakish avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Forkers

weakish

site-32's Issues

[note] unity python

为了用方便debug的语言做全平台开发(包括iOS和Android),实现了TraffyIR.UnityPython。

亮点是用了koka的思路,根据continuation是否存在来编译解释器的asm。做了benchmark,结果 (optimize=true的debug模式) 是非生成器代码比cpython略快(差距10%以内),非生成器比cpython慢一个数量级以内 (从1 yield 到 100_0000 比 cpython慢3倍)。

解释器的IR存在很大性能提升空间,目前每一次执行ir都会动态判断是否存在continuation。

如果不使用"inline threading"而使用字节码解释器,生成器代码会更快一点,但非生成器代码更慢,且不支持.NET native exception,且python try-catch-finally的字节码编译太烧脑,遂使用"inline threading"方案。

目前这点性能开销不是问题。一个有强力IDE支持、可热更新、动态执行、无伤兼容全平台的Python实现,意义重大。


目前TraffyIR.UnityPython 的限制:

  1. 不支持Python的一部分“罕见”元方法。例如,对比较操作只支持__eq____lt__(TODO: 支持__le__? 用户保证 __le__与__eq__和__lt__的相容?),且__lt____eq__必须返回bool

  2. 不支持type以外的其他的metaclass。但是支持__init_subclass__,足以应付大部分元编程场景。

  3. 不支持NotImplemented, 包括__ror__这些元方法

  4. 不支持用StopIteration做迭代终止。for循环的实现不依赖exception, raise StopIteration不会引起for loop正常退出,而是跑错误。

  5. 不支持raise a from cause。这主要是为了兼容.NET的native exception

  6. bool不是整数的子类型,True + 1报错。这一点python挺折磨人,而不实现bool <: int不仅减小工作量,也让我自己的使用体验更佳。

  7. int不是任意大整数而是int64floatfloat32。这是为了提升性能,顺便和unity交换数据时避免复杂cast。

  8. list.reverse不是O(1)的。list内部实现是.NET的List,因此reverse是O(n)操作 (TODO: 未来支持双向list实现?)

  9. 支持Python丰富的传参模式和参数验证,除了3.8引入的positional only arguments (XXX: TraffyIR.UnityPython基于Python 3.10,但不是所有feature都支持)

  10. yield/await/yield from不能出现在try-catch语句里,也不能出现在finally语句块里,但可以出现在try-finally语句块里。这是因为try语句实现使用了.NET的try-catch机制,与.NET有同样的限制。

  11. await Task.Yield()做运行时的特殊处理,行为上等同于yield但不开启async generator。

  12. async不耦合asyncio,实现正确的coroutine和thread分离机制。用户可以控制event loop,默认event loop被一个Unity根对象的coroutine执行。

some hints

  1. (dataclasses)inline cache field that doesn't matter ordering and equality.

ms/windows

windows update breaks scoop apps.: use scoop reset * link

dlsym concerns

  • dlsym(_Py_XXXStruct) is XXX: _Py_TrueStruct, _Py_NoneStruct
  • dereference(dlsym(PyExc_XXX)) is XXX: PyExc_TypeError, ...
  • for functions, dlsym(XXX) is XXX when XXX is a function pointer

python2 编码问题. encode & decode

注:今天做一个东西要把中文写入文档时发现并解决了一个问题。写一下博文,自己也加深理解。在py2里面字符编码特别麻烦,所以专门拿出来说一下。
mode 参数:'utf-8','gbk','ascii'等
str.encode(mode)  将字符串按照mode模式编码
str.decode(mode)  将字符串按照mode模式解码

例如我在py2中输入一个带有中文的字符串 '赵王' ,那么这个时候它是按照ascii格式编码的
s='赵王'
则我们在shell中输入s
In[.] s='赵王'
In[.] s
Out[.]  '\xe8\xb5\xb5\xe7\x8e\x8b\xe5\xae\xa3'
In[.] s.decode('utf-8')
Out[.]  u'\u8d75\u738b\u5ba3'
我们知道通常的英文是按ascii码编码格式的(每个ascii码是\x00到\xff(0~255)),而对于一个汉字,它在被解密(解码,decode)后通常是一个unicode形式,即\u0000~\uffff,这个时候要能正确地输出汉字,是不应将汉字拆成两个字节ascii码输出的。但是问题是,在py2中,它是不支持unicode的,所以会出现一些问题:
我们的file.write(str)函数,将字符串str写入文件时,必须要求str是ascii码形式。
所以我们在py2中抓取了一个含中文的unicode编码的字符串时,应该将它编码为ascii格式,但是我们的函数str.encode不知道它初始是什么格式,所以需要你输入它初始的格式unicode。
即对于一个要输入文档的unicode字符串,我们需要这样做s=s.encode('utf8')(汉字通常是utf和gbk 一系列blabla之类格式编码的),然后file.write(s)就行了。
需要再提的是,对于被转化为ascii模式的字符串,我们可能无法从中发现中文的存在,需要对它进行解码(decode)。而你的print函数帮了你这个忙,所以你可能会误以为unicode编码是没有卵用的。

一点发现:titanic disaster datasets on Kaggle

PS:一点小玩具。

在做kaggle入门题的时候发现一些可能和解题没什么关系的数据。
生物信息学中使用机器学习常常使用马修相关系数/MCC来评估分类情况。自然,MCC可以用来衡量两种特征之间的相关性。
在统计、分析数据并精细地进行特征处理时...我发现了一些很有意思的事情。
以下是泰坦尼克号上部分乘客的Fare和SibSp(应该是亲属的意思)以及Parch(应该是旁亲的意思)
的马修相关系数。
下图第i行 是 logical矩阵Fare>=20*i和logical矩阵Parch>0所生成的Confussion Matrix的MCC,可以看到船票Fare越高(也就很可能越有钱。实际上,在考察是否有船舱记录,以及所处甲板层这两个特征时越发能表现出一个事实:Fare越高,越处于一个船上集中的位置,可以合理地预测那里就是“富人区”),身边的旁亲或直亲越少。
[0.43795638726226482,
0.2619448361799338,
0.20425813538877022,
0.13671911262286474,
0.094181397840742032,
0.065715020539933819,
0.029608947499918405,
0.016580839065407627,
0.01117141059788828,
0.01117141059788828,
0.035675294156314569,
0.053894354956480379,
0.071620573247603722,
-0.049731347508180437,
-0.049731347508180437,
-0.049731347508180437,
-0.049731347508180437,
-0.049731347508180437,
-0.049731347508180437,
-0.049731347508180437,
-0.049731347508180437,
-0.049731347508180437,
-0.049731347508180437,
-0.049731347508180437,
-0.049731347508180437]
让我们画点图:
Matrix i:
A=Fare>20i
B=Parch>0
TP= (A==1)&(B==1)
TN= (A==0)&(B==0)
...
...
1

同理对 Fare>20*i - SibSp>0,i为下图行数:
[0.45883805916221237,
0.18746190344064922,
0.18594421244657208,
0.13771691321338442,
0.17033618732810329,
0.1692139259896131,
0.15894442146644297,
0.13968820514084629,
0.12275967352062414,
0.12275967352062414,
0.099782352368843349,
0.13221991536783961,
0.11278685883575543,
0.014139301635034913,
0.014139301635034913,
0.014139301635034913,
0.014139301635034913,
0.014139301635034913,
0.014139301635034913,
0.014139301635034913,
0.014139301635034913,
0.014139301635034913,
0.014139301635034913,
0.014139301635034913,
0.014139301635034913]
同样地画点图:
Matrix i:
A=Fare>20i
B=SibSp>0
TP= (A==1)&(B==1)
TN= (A==0)&(B==0)
...
...
2

我们能否从中获得一些有用的信息?也许和这道题没什么关系,但是数据本身是有价值的,对吧?
“富有的人很孤独。”
“富有的人能支配有很多的自由时间。”
—————————————————————————————————————————————
以上数据来自Kaggle平台Palyground题组...
请勿转载或用于商业用途,尊重死者。

shit

一些极其基本的事实,在reddit与hackner news上司空见惯的需求,却无法被论文引用作为基本的问题背景。这时常让我对学术写作失望透顶。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.