|
2 | 2 | "cells": [
|
3 | 3 | {
|
4 | 4 | "cell_type": "code",
|
5 |
| - "execution_count": 2, |
| 5 | + "execution_count": 1, |
6 | 6 | "metadata": {},
|
7 | 7 | "outputs": [
|
8 | 8 | {
|
9 |
| - "name": "stdout", |
10 |
| - "output_type": "stream", |
11 |
| - "text": [ |
12 |
| - "value: 1.0\n" |
| 9 | + "ename": "TypeError", |
| 10 | + "evalue": "Cannot inherit from concrete (final) class 'Test'. Class '_InitableModule' attempts to inherit from it. strict classes are either abstract or final.", |
| 11 | + "output_type": "error", |
| 12 | + "traceback": [ |
| 13 | + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", |
| 14 | + "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", |
| 15 | + "Cell \u001b[0;32mIn[1], line 22\u001b[0m\n\u001b[1;32m 18\u001b[0m \u001b[39mdef\u001b[39;00m\u001b[39m \u001b[39m\u001b[39m__init__\u001b[39m(\u001b[39mself\u001b[39m):\n\u001b[1;32m 19\u001b[0m \u001b[39mself\u001b[39m\u001b[39m.\u001b[39mx \u001b[39m=\u001b[39m \u001b[39m1.0\u001b[39m\n\u001b[0;32m---> 22\u001b[0m t \u001b[39m=\u001b[39m Test()\n\u001b[1;32m 23\u001b[0m \u001b[39mprint\u001b[39m(\u001b[39m\"\u001b[39m\u001b[39mvalue:\u001b[39m\u001b[39m\"\u001b[39m, t\u001b[39m.\u001b[39mx)\n\u001b[1;32m 26\u001b[0m \u001b[39mdef\u001b[39;00m\u001b[39m \u001b[39m\u001b[39mf\u001b[39m(x):\n", |
| 16 | + "File \u001b[0;32m~/Documents/ihoop/ihoop/strict.py:179\u001b[0m, in \u001b[0;36m_StrictMeta.__call__\u001b[0;34m(cls, *args, **kwargs)\u001b[0m\n\u001b[1;32m 173\u001b[0m abs_attrs \u001b[39m=\u001b[39m \u001b[39mlist\u001b[39m(\u001b[39mgetattr\u001b[39m(\u001b[39mcls\u001b[39m, \u001b[39m\"\u001b[39m\u001b[39m_strict_abstract_attributes_\u001b[39m\u001b[39m\"\u001b[39m, \u001b[39mset\u001b[39m()))\n\u001b[1;32m 174\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mTypeError\u001b[39;00m(\n\u001b[1;32m 175\u001b[0m \u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mCannot instantiate abstract class \u001b[39m\u001b[39m{\u001b[39;00m\u001b[39mcls\u001b[39m\u001b[39m.\u001b[39m\u001b[39m__name__\u001b[39m\u001b[39m}\u001b[39;00m\u001b[39m. \u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m 176\u001b[0m \u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mAbstract elements: methods=\u001b[39m\u001b[39m{\u001b[39;00mabs_methods\u001b[39m}\u001b[39;00m\u001b[39m, attributes=\u001b[39m\u001b[39m{\u001b[39;00mabs_attrs\u001b[39m}\u001b[39;00m\u001b[39m\"\u001b[39m\n\u001b[1;32m 177\u001b[0m )\n\u001b[0;32m--> 179\u001b[0m instance \u001b[39m=\u001b[39m \u001b[39msuper\u001b[39;49m()\u001b[39m.\u001b[39;49m\u001b[39m__call__\u001b[39;49m(\u001b[39m*\u001b[39;49margs, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n\u001b[1;32m 181\u001b[0m \u001b[39mobject\u001b[39m\u001b[39m.\u001b[39m\u001b[39m__setattr__\u001b[39m(instance, \u001b[39m\"\u001b[39m\u001b[39m_strict_initialized\u001b[39m\u001b[39m\"\u001b[39m, \u001b[39mTrue\u001b[39;00m)\n\u001b[1;32m 183\u001b[0m \u001b[39mreturn\u001b[39;00m instance\n", |
| 17 | + " \u001b[0;31m[... skipping hidden 1 frame]\u001b[0m\n", |
| 18 | + "File \u001b[0;32m~/miniforge3/envs/dev_thrml/lib/python3.10/site-packages/equinox/_module.py:793\u001b[0m, in \u001b[0;36m_make_initable_wrapper\u001b[0;34m(cls)\u001b[0m\n\u001b[1;32m 791\u001b[0m \u001b[39mdef\u001b[39;00m\u001b[39m \u001b[39m\u001b[39m_make_initable_wrapper\u001b[39m(\u001b[39mcls\u001b[39m: _ActualModuleMeta) \u001b[39m-\u001b[39m\u001b[39m>\u001b[39m _ActualModuleMeta:\n\u001b[1;32m 792\u001b[0m post_init \u001b[39m=\u001b[39m \u001b[39mgetattr\u001b[39m(\u001b[39mcls\u001b[39m, \u001b[39m\"\u001b[39m\u001b[39m__post_init__\u001b[39m\u001b[39m\"\u001b[39m, \u001b[39mNone\u001b[39;00m)\n\u001b[0;32m--> 793\u001b[0m \u001b[39mreturn\u001b[39;00m _make_initable(\u001b[39mcls\u001b[39;49m, \u001b[39mcls\u001b[39;49m\u001b[39m.\u001b[39;49m\u001b[39m__init__\u001b[39;49m, post_init, wraps\u001b[39m=\u001b[39;49m\u001b[39mFalse\u001b[39;49;00m)\n", |
| 19 | + "File \u001b[0;32m~/miniforge3/envs/dev_thrml/lib/python3.10/site-packages/equinox/_module.py:811\u001b[0m, in \u001b[0;36m_make_initable\u001b[0;34m(***failed resolving arguments***)\u001b[0m\n\u001b[1;32m 808\u001b[0m \u001b[39melse\u001b[39;00m:\n\u001b[1;32m 809\u001b[0m field_names \u001b[39m=\u001b[39m {field\u001b[39m.\u001b[39mname \u001b[39mfor\u001b[39;00m field \u001b[39min\u001b[39;00m dataclasses\u001b[39m.\u001b[39mfields(\u001b[39mcls\u001b[39m)}\n\u001b[0;32m--> 811\u001b[0m \u001b[39mclass\u001b[39;00m\u001b[39m \u001b[39m\u001b[39m_InitableModule\u001b[39;00m(_Initable, \u001b[39mcls\u001b[39m):\n\u001b[1;32m 812\u001b[0m \u001b[39mpass\u001b[39;00m\n\u001b[1;32m 814\u001b[0m \u001b[39mdef\u001b[39;00m\u001b[39m \u001b[39m\u001b[39m__setattr__\u001b[39m(\u001b[39mself\u001b[39m, name, value):\n", |
| 20 | + "Cell \u001b[0;32mIn[1], line 8\u001b[0m, in \u001b[0;36m_StrictEqxMeta.__new__\u001b[0;34m(mcs, name, bases, namespace, **kwargs)\u001b[0m\n\u001b[1;32m 7\u001b[0m \u001b[39mdef\u001b[39;00m\u001b[39m \u001b[39m\u001b[39m__new__\u001b[39m(mcs, name, bases, namespace, \u001b[39m*\u001b[39m\u001b[39m*\u001b[39mkwargs):\n\u001b[0;32m----> 8\u001b[0m \u001b[39mreturn\u001b[39;00m \u001b[39msuper\u001b[39;49m()\u001b[39m.\u001b[39;49m\u001b[39m__new__\u001b[39;49m(mcs, name, bases, namespace, \u001b[39m*\u001b[39;49m\u001b[39m*\u001b[39;49mkwargs)\n", |
| 21 | + "File \u001b[0;32m~/Documents/ihoop/ihoop/strict.py:121\u001b[0m, in \u001b[0;36m_StrictMeta.__new__\u001b[0;34m(mcs, name, bases, namespace, **kwargs)\u001b[0m\n\u001b[1;32m 119\u001b[0m \u001b[39m# Cannot inherit from a concrete strict class\u001b[39;00m\n\u001b[1;32m 120\u001b[0m \u001b[39mif\u001b[39;00m \u001b[39mnot\u001b[39;00m \u001b[39mgetattr\u001b[39m(base, \u001b[39m\"\u001b[39m\u001b[39m_strict_is_abstract_\u001b[39m\u001b[39m\"\u001b[39m, \u001b[39mTrue\u001b[39;00m):\n\u001b[0;32m--> 121\u001b[0m \u001b[39mraise\u001b[39;00m \u001b[39mTypeError\u001b[39;00m(\n\u001b[1;32m 122\u001b[0m \u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mCannot inherit from concrete (final) class \u001b[39m\u001b[39m'\u001b[39m\u001b[39m{\u001b[39;00mbase\u001b[39m.\u001b[39m\u001b[39m__name__\u001b[39m\u001b[39m}\u001b[39;00m\u001b[39m'\u001b[39m\u001b[39m. \u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m 123\u001b[0m \u001b[39mf\u001b[39m\u001b[39m\"\u001b[39m\u001b[39mClass \u001b[39m\u001b[39m'\u001b[39m\u001b[39m{\u001b[39;00mname\u001b[39m}\u001b[39;00m\u001b[39m'\u001b[39m\u001b[39m attempts to inherit from it. \u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m 124\u001b[0m \u001b[39m\"\u001b[39m\u001b[39mstrict classes are either abstract or final.\u001b[39m\u001b[39m\"\u001b[39m\n\u001b[1;32m 125\u001b[0m )\n\u001b[1;32m 127\u001b[0m \u001b[39m# Cannot override a concrete method from an strict base\u001b[39;00m\n\u001b[1;32m 128\u001b[0m \u001b[39mfor\u001b[39;00m meth_name, meth_obj \u001b[39min\u001b[39;00m namespace\u001b[39m.\u001b[39mitems():\n\u001b[1;32m 129\u001b[0m \u001b[39m# Allow every class to override its own constructor\u001b[39;00m\n", |
| 22 | + "\u001b[0;31mTypeError\u001b[0m: Cannot inherit from concrete (final) class 'Test'. Class '_InitableModule' attempts to inherit from it. strict classes are either abstract or final." |
13 | 23 | ]
|
14 |
| - }, |
15 |
| - { |
16 |
| - "data": { |
17 |
| - "text/plain": [ |
18 |
| - "Array(2., dtype=float32, weak_type=True)" |
19 |
| - ] |
20 |
| - }, |
21 |
| - "execution_count": 2, |
22 |
| - "metadata": {}, |
23 |
| - "output_type": "execute_result" |
24 | 24 | }
|
25 | 25 | ],
|
26 | 26 | "source": [
|
27 |
| - "import equinox as eqx\n", |
28 |
| - "import ihoop\n", |
29 |
| - "import jax\n", |
30 |
| - "\n", |
| 27 | + "# import equinox as eqx\n", |
| 28 | + "# import ihoop\n", |
| 29 | + "# import jax\n", |
31 | 30 | "\n",
|
32 |
| - "class _StrictEqxMeta(ihoop.strict._StrictMeta, eqx._module._module._ModuleMeta):\n", |
33 |
| - " def __new__(mcs, name, bases, namespace, **kwargs):\n", |
34 |
| - " return super().__new__(mcs, name, bases, namespace, **kwargs)\n", |
| 31 | + "# # works with https://github.com/patrick-kidger/equinox/pull/1028\n", |
| 32 | + "# class _StrictEqxMeta(ihoop.strict._StrictMeta, eqx._module._module._ModuleMeta):\n", |
| 33 | + "# def __new__(mcs, name, bases, namespace, **kwargs):\n", |
| 34 | + "# return super().__new__(mcs, name, bases, namespace, **kwargs)\n", |
35 | 35 | "\n",
|
36 | 36 | "\n",
|
37 |
| - "class StrictModule(eqx.Module, ihoop.Strict, metaclass=_StrictEqxMeta):\n", |
38 |
| - " pass\n", |
| 37 | + "# class StrictModule(eqx.Module, ihoop.Strict, metaclass=_StrictEqxMeta):\n", |
| 38 | + "# pass\n", |
39 | 39 | "\n",
|
40 | 40 | "\n",
|
41 |
| - "class Test(StrictModule):\n", |
42 |
| - " x: float\n", |
| 41 | + "# class Test(StrictModule):\n", |
| 42 | + "# x: float\n", |
43 | 43 | "\n",
|
44 |
| - " def __init__(self):\n", |
45 |
| - " self.x = 1.0\n", |
| 44 | + "# def __init__(self):\n", |
| 45 | + "# self.x = 1.0\n", |
46 | 46 | "\n",
|
47 | 47 | "\n",
|
48 |
| - "t = Test()\n", |
49 |
| - "print(\"value:\", t.x)\n", |
| 48 | + "# t = Test()\n", |
| 49 | + "# print(\"value:\", t.x)\n", |
50 | 50 | "\n",
|
51 | 51 | "\n",
|
52 |
| - "def f(x):\n", |
53 |
| - " return x.x**2\n", |
| 52 | + "# def f(x):\n", |
| 53 | + "# return x.x**2\n", |
54 | 54 | "\n",
|
55 | 55 | "\n",
|
56 |
| - "jax.grad(f)(t).x" |
| 56 | + "# jax.grad(f)(t).x" |
57 | 57 | ]
|
58 | 58 | },
|
59 | 59 | {
|
|
66 | 66 | ],
|
67 | 67 | "metadata": {
|
68 | 68 | "kernelspec": {
|
69 |
| - "display_name": "Python 3.10.14 ('dev_diffrax')", |
| 69 | + "display_name": "Python 3.10.16 ('dev_thrml')", |
70 | 70 | "language": "python",
|
71 | 71 | "name": "python3"
|
72 | 72 | },
|
|
80 | 80 | "name": "python",
|
81 | 81 | "nbconvert_exporter": "python",
|
82 | 82 | "pygments_lexer": "ipython3",
|
83 |
| - "version": "3.10.14" |
| 83 | + "version": "3.10.16" |
84 | 84 | },
|
85 | 85 | "orig_nbformat": 4,
|
86 | 86 | "vscode": {
|
87 | 87 | "interpreter": {
|
88 |
| - "hash": "01761703e8e304055600d311574f89f8a646f73edac04b8bff1580ad2d98581f" |
| 88 | + "hash": "591c6f2f872d065a4e9643c78186d30103ad07846137f2348d83da528974561e" |
89 | 89 | }
|
90 | 90 | }
|
91 | 91 | },
|
|
0 commit comments