Metadata-Version: 1.1
Name: array_collections
Version: 0.1.0
Summary: A collection of numpy ndarray subclasses.
Home-page: https://github.com/yoelcortes/array_collections
Author: Yoel Cortes-Pena
Author-email: yoelcortes@gmail.com
License: MIT
Download-URL: https://github.com/yoelcortes/array_collections.git
Description: =================
        array_collections
        =================
        
        .. image:: http://img.shields.io/pypi/v/array_collections.svg?style=flat
           :target: https://pypi.python.org/pypi/array_collections
           :alt: Version_status
        .. image:: http://img.shields.io/badge/docs-latest-brightgreen.svg?style=flat
           :target: https://array_collections.readthedocs.io/en/latest/
           :alt: Documentation
        .. image:: http://img.shields.io/badge/license-MIT-blue.svg?style=flat
           :target: https://github.com/yoelcortes/array_collections/blob/master/LICENSE.txt
           :alt: license
        
        
        .. contents::
        
        What is array_collections?
        --------------------------
        
        array_collections is a collection of numpy ndarray subclasses. Each array class serves an unrelated but broad purpose of its own. This package features 3 types of arrays: material_array, tuple_array, and property_array.
        
        Installation
        ------------
        
        Get the latest version of array_collections from
        https://pypi.python.org/pypi/array_collections/
        
        If you have an installation of Python with pip, simple install it with:
        
            $ pip install array_collections
        
        To get the git version, run:
        
            $ git clone git://github.com/yoelcortes/array_collections
        
        Documentation
        -------------
        
        array_collections's documentation is available on the web:
        
            http://array_collections.readthedocs.io/
        
        Getting started
        ---------------
        
        A **material_array** issues a RuntimeWarning when a non-positive or non-finite value is encountered.
        
        Create material_array:
        
        .. code-block:: python
            
           >>> arr = material_array([1, 18])
           material_array([1, 18])
                   
        A negative value issues a RuntimeWarning:
                   
        .. code-block:: python
                 
           >>> arr[1] = -1
           __main__:1: RuntimeWarning:
           Encountered negative or non-finite value in 'material_array' object.
        
        New arrays are normal numpy arrays:
        
        .. code-block:: python
                 
           >>> arr + 1
           array([2, 19])
        
        
        A **tuple_array** is an immutable and hashable array:
        
        Create a tuple_array object:
                    
        .. code-block:: python
            
           >>> arr = tuple_array([1, 18])
           tuple_array([1, 18])
           
        tuple_array objects are immutable:
           
           >>> arr[1] = 0
           TypeError: 'tuple_array' objects are immutable.
                    
        tuple_array objects are hashable:
                    
           >>> hash(arr)
           3713080549427813581
        
        New arrays are normal numpy arrays:
        
        .. code-block:: python
                 
           >>> arr + 1
           array([2, 19])
             
        A **property_array** allows for array-like manipulation of property objects. All entries in a property_array must be instances of FreeProperty. Setting items of a property_array sets values of Property objects instead.
        
        Use the PropertyFactory to create a Weight property class which calculates weight based on density and volume:
            
        .. code-block:: python
                
           >>> from array_collections import PropertyFactory
           >>>        
           >>> @PropertyFactory
           >>> def Weight(self):
           ...    '''Weight (kg) based on volume (m^3).'''
           ...    data = self.data
           ...    rho = data['rho'] # Density (kg/m^3)
           ...    vol = data['vol'] # Volume (m^3)
           ...    return rho * vol
           >>>
           >>> @Weight.setter
           >>> def Weight(self, weight):
           ...    data = self.data
           ...    rho = data['rho'] # Density (kg/m^3)
           ...    data['vol'] = weight / rho
                   
        Create dictionaries of data and initialize new properties:
               
        .. code-block:: python
               
           >>> water_data = {'rho': 1000, 'vol': 3}
           >>> ethanol_data = {'rho': 789, 'vol': 3}
           >>> weight_water = Weight('Water', water_data)
           >>> weight_ethanol = Weight('Ethanol', ethanol_data)
           >>> weight_water
           Weight(Water) -> 3000 (kg)
           >>> weight_ethanol
           Weight(Ethanol) -> 2367 (kg)
                  
        Create a property_array from data:
                   
        .. code-block:: python
               
           >>> prop_arr = property_array([weight_water, weight_water])
           property_array([3000, 2367]) (kg)
                   
        Changing the values of a property_array changes the value of its properties:
                   
        .. code-block:: python
               
           >>> # Addition in place
           >>> prop_arr += 3000
           >>> prop_arr
           property_array([6000, 5367]) (kg)
           >>> # Note how the data also changes
           >>> water_data
           {'rho': 1000, 'vol': 6.0}
           >>> ethanol_data
           {'rho': 789, 'vol': 6.802281368821292}
           >>> # Setting an item changes the property value
           >>> prop_arr[1] = 2367
           >>> ethanol_data
           {'rho': 789, 'vol': 3}
                  
        New arrays have no connection to the property_array:
                   
        .. code-block:: python
               
           >>> prop_arr - 1000 #  Returns a new array
           array([5000.0, 1367.0], dtype=object)
           >>> water_data #  Data remains unchanged
           {'rho': 1000, 'vol': 6.0}
              
        A representative DataFrame can also be made from the property_array:
                   
        .. code-block:: python
               
           >>> prop_arr.table()
           ...         Weight (kg)
           ... Water        6000.0
           ... Ethanol      2367.0
                   
        .. Note:: The DataFrame object contains the values of the properties, not the FreeProperty objects as a property_array would.
        
        Latest source code
        ------------------
        
        The latest development version of array_collections's sources can be obtained at:
        
            https://github.com/yoelcortes/array_collections
        
        
        Bug reports
        -----------
        
        To report bugs, please use the array_collections' Bug Tracker at:
        
            https://github.com/yoelcortes/array_collections
        
        License information
        -------------------
        
        See ``LICENSE.txt`` for information on the terms & conditions for usage
        of this software, and a DISCLAIMER OF ALL WARRANTIES.
        
        Although not required by the array_collections' license, if it is convenient for you,
        please cite array_collections if used in your work. Please also consider contributing
        any changes you make back, and benefit the community.
        
        
        Citation
        --------
        
        To cite array_collections in publications use::
        
            Yoel Cortes-Pena (2019). array_collections: A collection of numpy ndarray subclasses.
            https://github.com/yoelcortes/array_collections
        
Platform: Windows
