Metadata-Version: 2.1
Name: statictypes
Version: 0.0.2
Summary: Enforce type annotations
Home-page: https://github.com/eriksholmlund/statictypes
Author: Erik Schytt Holmlund
Author-email: erik-holmlund@hotmail.com
License: UNKNOWN
Description: # statictypes
        
        ```statictypes``` helps your Python functions do exactly what you asked them to do, and not anything else.
        This package delivers three simple decorators:
        
        * ```@statictypes.enforce```: Raise an error if the incorrect argument or return type is given.
        * ```@statictypes.warn```: Give a warning if the incorrect argument  or return type is given.
        * ```@statictypes.convert```: Try to convert into the given argument type, or return an error.
        
        ## Example 1
        
        Let's define a simple function, and enforce Python's type annotations.
        
        ```python3
        import statictypes
        
        @statictypes.enforce
        def myfunc(text: str, number: int) -> str:
            return text + " " + str(number)
        
        myfunc("my number is", 1)  # This works as intended
        myfunc("my number is", 1.1)  # This raises an error
        ```
        
        Calling ```myfunc("my number is", 1)``` is valid, but ```myfunc("my number is", 1.1)``` results in:
        
        ```statictypes.StaticTypeError: Argument 'number' got incorrect type <class'float'>, expected <class'int'>.```
        
        ## Example 2
        
        Let's instead choose to convert the arguments to the given type annotations.
        
        ```python3
        import statictypes
        
        @statictypes.convert
        def myfunc(text: str, number: int) -> str:
            return text + " " + str(number)
        
        myfunc("my number is", 1)  # This works as intended
        myfunc("my number is", 1.1)  # This gives the same output as above
        ```
        
        This time, both ```myfunc("my number is", 1)``` and ```myfunc("my number is", 1.1)``` is valid.
        Note, however, that both expressions give the output ```"my number is 1"```, since ```number``` is in this case always converted to an integer.
        
        ## Limitations
        
        1. ```@statictypes.convert``` only works for simple types from where a constructor method can be called, e.g. ```str```, ```int```.
        The decorator does not work on e.g. ```List[float] -> List[int]``` since the following incorrect conversion is attempted: ```List[int](list_of_floats)```.
        2. Only the builtin generic types ```Any, Union, Optional, Dict, List``` and ```Tuple``` are currently supported.
        3. When using ```@statictypes.convert```, if a ```list``` is given to a function expecting a ```numpy.ndarray``` , an empty ```numpy.ndarray``` is returned with the shape of the ```list```.
        This is because the ```numpy.ndarray``` has ```shape``` as its first positional argument, leading to a working but arguably unexpected result.
        
        ## Requirements
        
        * Python 3.6 or above.
        
        ## Installation
        ```bash
        pip install statictypes
        ```
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.6
Description-Content-Type: text/markdown
