_tools: extract most utility methods to a private package.
authorwhitequark <cz@m-labs.hk>
Sat, 12 Oct 2019 22:27:43 +0000 (22:27 +0000)
committerwhitequark <cz@m-labs.hk>
Sat, 12 Oct 2019 22:40:48 +0000 (22:40 +0000)
We don't want to guarantee backwards compatibility for most of them.

22 files changed:
nmigen/_tools.py [new file with mode: 0644]
nmigen/back/pysim.py
nmigen/back/rtlil.py
nmigen/compat/fhdl/bitcontainer.py
nmigen/compat/fhdl/module.py
nmigen/compat/fhdl/specials.py
nmigen/compat/fhdl/structure.py
nmigen/compat/genlib/cdc.py
nmigen/compat/genlib/fifo.py
nmigen/compat/genlib/fsm.py
nmigen/compat/genlib/resetsync.py
nmigen/hdl/ast.py
nmigen/hdl/dsl.py
nmigen/hdl/ir.py
nmigen/hdl/rec.py
nmigen/hdl/xfrm.py
nmigen/lib/cdc.py
nmigen/lib/fifo.py
nmigen/test/compat/support.py
nmigen/test/compat/test_size.py
nmigen/test/test_sim.py
nmigen/tools.py

diff --git a/nmigen/_tools.py b/nmigen/_tools.py
new file mode 100644 (file)
index 0000000..a62153d
--- /dev/null
@@ -0,0 +1,84 @@
+import contextlib
+import functools
+import warnings
+from collections import OrderedDict
+from collections.abc import Iterable
+from contextlib import contextmanager
+
+from .tools import *
+
+
+__all__ = ["flatten", "union" , "log2_int", "bits_for", "memoize", "final", "deprecated"]
+
+
+def flatten(i):
+    for e in i:
+        if isinstance(e, Iterable):
+            yield from flatten(e)
+        else:
+            yield e
+
+
+def union(i, start=None):
+    r = start
+    for e in i:
+        if r is None:
+            r = e
+        else:
+            r |= e
+    return r
+
+
+def memoize(f):
+    memo = OrderedDict()
+    @functools.wraps(f)
+    def g(*args):
+        if args not in memo:
+            memo[args] = f(*args)
+        return memo[args]
+    return g
+
+
+def final(cls):
+    def init_subclass():
+        raise TypeError("Subclassing {}.{} is not supported"
+                        .format(cls.__module__, cls.__name__))
+    cls.__init_subclass__ = init_subclass
+    return cls
+
+
+def deprecated(message, stacklevel=2):
+    def decorator(f):
+        @functools.wraps(f)
+        def wrapper(*args, **kwargs):
+            warnings.warn(message, DeprecationWarning, stacklevel=stacklevel)
+            return f(*args, **kwargs)
+        return wrapper
+    return decorator
+
+
+def _ignore_deprecated(f=None):
+    if f is None:
+        @contextlib.contextmanager
+        def context_like():
+            with warnings.catch_warnings():
+                warnings.filterwarnings(action="ignore", category=DeprecationWarning)
+                yield
+        return context_like()
+    else:
+        @functools.wraps(f)
+        def decorator_like(*args, **kwargs):
+            with warnings.catch_warnings():
+                warnings.filterwarnings(action="ignore", category=DeprecationWarning)
+                f(*args, **kwargs)
+        return decorator_like
+
+
+def extend(cls):
+    def decorator(f):
+        if isinstance(f, property):
+            name = f.fget.__name__
+        else:
+            name = f.__name__
+        setattr(cls, name, f)
+    return decorator
index ceb94095e3b994a4c55eecb98265b55de5a94ff4..70c0a48ac7fd3741f7c58e3cd78399c07d0b177a 100644 (file)
@@ -6,7 +6,7 @@ from bitarray import bitarray
 from vcd import VCDWriter
 from vcd.gtkw import GTKWSave
 
-from ..tools import flatten
+from .._tools import flatten
 from ..hdl.ast import *
 from ..hdl.ir import *
 from ..hdl.xfrm import ValueVisitor, StatementVisitor
index 07207f4df10e715a1cb62c3b3a50ee6db580a183..990e4bdd4a3684696481f6ec2f8a940e9f23ad7b 100644 (file)
@@ -3,7 +3,7 @@ import textwrap
 from collections import defaultdict, OrderedDict
 from contextlib import contextmanager
 
-from ..tools import bits_for, flatten
+from .._tools import bits_for, flatten
 from ..hdl import ast, rec, ir, mem, xfrm
 
 
index 5764f8304e79e5ce60dae709361a25a36b0a4613..a7c44e93069a3de2db6f17fb898ddeaf0f17d70f 100644 (file)
@@ -1,6 +1,6 @@
 from ... import tools
 from ...hdl import ast
-from ...tools import deprecated
+from ..._tools import deprecated
 
 
 __all__ = ["log2_int", "bits_for", "value_bits_sign"]
index 4431b84a2ab78126aae7b5fdf16d34532f619a31..55dc96c7d7fede31fbf724ee7e4f2e020c5f1054 100644 (file)
@@ -1,6 +1,6 @@
 from collections.abc import Iterable
 
-from ...tools import flatten, deprecated
+from ..._tools import flatten, deprecated
 from ...hdl import dsl, ir
 
 
@@ -97,7 +97,7 @@ class _CompatModuleClockDomains(_CompatModuleProxy):
 class CompatModule(ir.Elaboratable):
     _Elaboratable__silence = True
 
-    # Actually returns nmigen.fhdl.Module, not a Fragment.
+    # Actually returns another nMigen Elaboratable (nmigen.dsl.Module), not a Fragment.
     def get_fragment(self):
         assert not self.get_fragment_called
         self.get_fragment_called = True
index 9ad0105aaffa1d37dd3162d502599fd40fcbf929..2a49ffc28427dc3a4dacfba069ad364d2d30f1ec 100644 (file)
@@ -1,6 +1,6 @@
 import warnings
 
-from ...tools import deprecated, extend
+from ..._tools import deprecated, extend
 from ...hdl.ast import *
 from ...hdl.ir import Elaboratable
 from ...hdl.mem import Memory as NativeMemory
index 2132e3bc6d1761829efd4e10ee54cf54757fd13e..6f844dd45cf03b0ee6d5c33ef4a25d4fe6949a72 100644 (file)
@@ -1,6 +1,6 @@
 from collections import OrderedDict
 
-from ...tools import deprecated, extend
+from ..._tools import deprecated, extend
 from ...hdl import ast
 from ...hdl.ast import (DUID, Value, Signal, Mux, Slice as _Slice, Cat, Repl, Const, C,
                         ClockSignal, ResetSignal,
index 5264169e610acc3bff1e0ebf45ad8892bf55e0eb..7bfcd8c48ca8921a47efdc14525021014faf1ee2 100644 (file)
@@ -1,6 +1,6 @@
 import warnings
 
-from ...tools import deprecated
+from ..._tools import deprecated
 from ...lib.cdc import FFSynchronizer as NativeFFSynchronizer
 from ...hdl.ast import *
 from ..fhdl.module import CompatModule
index d491fd13531ae8b09949e9e9bff223fae3fcb274..0e4b55dd35f9cd7b7afe4a0deda37f01eca6eb53 100644 (file)
@@ -1,4 +1,4 @@
-from ...tools import deprecated, extend
+from ..._tools import deprecated, extend
 from ...lib.fifo import (FIFOInterface as NativeFIFOInterface,
   SyncFIFO as NativeSyncFIFO, SyncFIFOBuffered as NativeSyncFIFOBuffered,
   AsyncFIFO as NativeAsyncFIFO, AsyncFIFOBuffered as NativeAsyncFIFOBuffered)
index 8f47c90a99cda5375751d77997d526fbeb939368..63f0872532476c32f6ba418ddb2606eab6c7bf19 100644 (file)
@@ -1,6 +1,6 @@
 from collections import OrderedDict
 
-from ...tools import _ignore_deprecated
+from ..._tools import _ignore_deprecated
 from ...hdl.xfrm import ValueTransformer, StatementTransformer
 from ...hdl.ast import *
 from ..fhdl.module import CompatModule, CompatFinalizeError
index afd26fbbf8af66a3e8d2e707d5c996a78850c4b5..f7b5c4e61d54e0773bccc032ccf977764015a3b1 100644 (file)
@@ -1,4 +1,4 @@
-from ...tools import deprecated
+from ..._tools import deprecated
 from ...lib.cdc import ResetSynchronizer as NativeResetSynchronizer
 
 
index efd232d9ff2c0e5654ecbfde7c0aedacd794f103..e0a78fdfa154ed01e95490b352f71df47e6f97db 100644 (file)
@@ -8,7 +8,7 @@ from collections.abc import Iterable, MutableMapping, MutableSet, MutableSequenc
 from enum import Enum
 
 from .. import tracer
-from ..tools import *
+from .._tools import *
 
 
 __all__ = [
index 87bbf13cf2bd4948f0d1c8585e45b25fbb918c14..b0634825f228adffb50740e79a30cd408d573ec0 100644 (file)
@@ -4,7 +4,7 @@ from contextlib import contextmanager
 from enum import Enum
 import warnings
 
-from ..tools import flatten, bits_for, deprecated
+from .._tools import flatten, bits_for, deprecated
 from .. import tracer
 from .ast import *
 from .ir import *
index b77a340246f9014e1646a4dc02d23760f4afa12f..3173399104b7e009b5dd796cf0547439d17fec83 100644 (file)
@@ -5,7 +5,7 @@ import warnings
 import traceback
 import sys
 
-from ..tools import *
+from .._tools import *
 from .ast import *
 from .cd import *
 
index 8a84e178f4aa35f4cecb0dcd70b066259cd7be88..7448ecdf4fa358e58c0bc5bc3593ecb135cc73c7 100644 (file)
@@ -3,7 +3,7 @@ from collections import OrderedDict
 from functools import reduce
 
 from .. import tracer
-from ..tools import union, deprecated
+from .._tools import union, deprecated
 from .ast import *
 
 
index 8ec0e1077ff3b6d7ada576d1202edf405225d44d..768db51b90a80aeb08a45ec4b6c8f44702acf806 100644 (file)
@@ -2,7 +2,7 @@ from abc import ABCMeta, abstractmethod
 from collections import OrderedDict
 from collections.abc import Iterable
 
-from ..tools import flatten, deprecated
+from .._tools import flatten, deprecated
 from .. import tracer
 from .ast import *
 from .ast import _StatementList
index 9b7a4cc2399ef391bf2e5e7c7981d788cc52e5ba..1294fb48c1aba57ba5fdbba3a44df123d60d4ee7 100644 (file)
@@ -1,4 +1,4 @@
-from ..tools import deprecated
+from .._tools import deprecated
 from .. import *
 
 
index 2b3d3a6b1383703bec14ef6534e533b006073229..332d703c18a30cc1c18b46d392d63f1e05bdf1bd 100644 (file)
@@ -2,7 +2,7 @@
 
 from .. import *
 from ..asserts import *
-from ..tools import log2_int, deprecated
+from .._tools import log2_int, deprecated
 from .coding import GrayEncoder
 from .cdc import FFSynchronizer
 
index 597cc6d12d1bdfbf7a4763e6d633c1e79657742e..22b97ccd69713d074725c6f91beed0031bcdd5d5 100644 (file)
@@ -1,4 +1,4 @@
-from ...tools import _ignore_deprecated
+from ..._tools import _ignore_deprecated
 from ...compat import *
 from ...compat.fhdl import verilog
 
index c8aeb5421d7877a774072f18a9f2b39fb8cd3b43..a739c2bbddb6479c122383275bef6615d7ed3216 100644 (file)
@@ -1,6 +1,6 @@
 import unittest
 
-from ...tools import _ignore_deprecated
+from ..._tools import _ignore_deprecated
 from ...compat import *
 
 
index d5eac8a9f40e28c27b15e7c24b59cb1a1fcd0f5c..91fec3454256647df082b3501a5f351bd55cf9f2 100644 (file)
@@ -1,7 +1,7 @@
 from contextlib import contextmanager
 
 from .tools import *
-from ..tools import flatten, union
+from .._tools import flatten, union
 from ..hdl.ast import *
 from ..hdl.cd import  *
 from ..hdl.mem import *
index 09c9d318a7ea1e0644ebde2b1d01ca9cb4689c60..227258ae971cc143c40c71a458f8e9c43075580a 100644 (file)
@@ -1,30 +1,4 @@
-import contextlib
-import functools
-import warnings
-from collections import OrderedDict
-from collections.abc import Iterable
-from contextlib import contextmanager
-
-
-__all__ = ["flatten", "union", "log2_int", "bits_for", "memoize", "final", "deprecated"]
-
-
-def flatten(i):
-    for e in i:
-        if isinstance(e, Iterable):
-            yield from flatten(e)
-        else:
-            yield e
-
-
-def union(i, start=None):
-    r = start
-    for e in i:
-        if r is None:
-            r = e
-        else:
-            r |= e
-    return r
+__all__ = ["log2_int", "bits_for"]
 
 
 def log2_int(n, need_pow2=True):
@@ -45,58 +19,3 @@ def bits_for(n, require_sign_bit=False):
     if require_sign_bit:
         r += 1
     return r
-
-
-def memoize(f):
-    memo = OrderedDict()
-    @functools.wraps(f)
-    def g(*args):
-        if args not in memo:
-            memo[args] = f(*args)
-        return memo[args]
-    return g
-
-
-def final(cls):
-    def init_subclass():
-        raise TypeError("Subclassing {}.{} is not supported"
-                        .format(cls.__module__, cls.__name__))
-    cls.__init_subclass__ = init_subclass
-    return cls
-
-
-def deprecated(message, stacklevel=2):
-    def decorator(f):
-        @functools.wraps(f)
-        def wrapper(*args, **kwargs):
-            warnings.warn(message, DeprecationWarning, stacklevel=stacklevel)
-            return f(*args, **kwargs)
-        return wrapper
-    return decorator
-
-
-def _ignore_deprecated(f=None):
-    if f is None:
-        @contextlib.contextmanager
-        def context_like():
-            with warnings.catch_warnings():
-                warnings.filterwarnings(action="ignore", category=DeprecationWarning)
-                yield
-        return context_like()
-    else:
-        @functools.wraps(f)
-        def decorator_like(*args, **kwargs):
-            with warnings.catch_warnings():
-                warnings.filterwarnings(action="ignore", category=DeprecationWarning)
-                f(*args, **kwargs)
-        return decorator_like
-
-
-def extend(cls):
-    def decorator(f):
-        if isinstance(f, property):
-            name = f.fget.__name__
-        else:
-            name = f.__name__
-        setattr(cls, name, f)
-    return decorator