Краткое описание пакета
=======================

Пакет разработан для того, что бы содержать всякие мелкие модули,
которые поодиночке поставлять неактуально.
            
Описание модулей
----------------

pd.lib.heapsort
...............

Модуль является простой надстройкой над heapq, позволяющей
"ленивую сортировку": т.е. элементы сортируются только по
мере получения, что сильно экономит вычислительный ресурс.

Модуль предоставляет два класса:

    HeapSort
        При инициализации получает массив и функцию сравнения.
        
    HeapSortByIndex
        При инициализации получает массив и индекс, элементы
        которого соответстуют элементам массива и будут использованы для
        сравнения. В этом случае используется также третий параметр -
        revert, может быть True или False. Если параметр равен True, то
        сортировка производится в обратном порядке.

    HeapSortByIndexSafe
        Аналогичен предыдущему классу, но действует с индексом "безопасным"
        способом: при отсутствии элемента в индексе размещает его в конце
        списка.

Каждый класс предоставляет методы:

    chunk(n)
        Вернуть первые n элементов начала отсортированного
        списка.


pd.lib.utility
..............

Модуль содержит разные полезные функции, в том числе:

    name2klass
        Вернуть класс по имени (возможен импорт)
        
    klass2name
        Вернуть имя по классу.
        
pd.lib.topsort
..............

Модуль содержит классы реализующие разные варианты топологической 
сортировки. Все классы используются так:

    TopSort([<Параметры>])(<Элементы>), где :
    
    Параметры
        Параметры выполнения сортировки;
        
    Элементы
        Каждый элемент - это пара, состоящая из ссылки на объект и
        списка ссылок, от которых он зависит;
        
Модуль предоставляет следующие классы:

    TopSort
        Топологическая сортировка (на вход должны подаватся объекты, которые
        могут быть ключами словаря);
        
    TopSortIndex
        Топологиеская сортировка (на вход могут подаватся любые объекты);

    TopSortFuzzy
        Нечеткая топологическая сортировка (на вход должны подаватся
        объекты, которые могут быть ключами словаря);
        
    TopSortFuzzyIndex
        Нечеткая топологическая сортировка  (на вход могут подаватся любые
        объекты);
        
Нечеткая топологическая сортировка способна привести к линейному
упорядочиванию даже граф с цикломатическим числом больше 0. Конечно,
адекватные результаты получаются при небольших цикломатических числах, иными
словами - это топологическая сортировка для слегка нарушенного циклами
дерева.

pd.lib.lazy
...........
Модуль предоставляет @Lazy декоратор, который может использоваться на
методах с аргументами. Будьте внимательны, метод должен принимать
хешируемую строку аргументов.


Пример использовния::

    >>> from pd.lib.lazy import Lazy
    >>>
    >>> class A(object) :
    ...     @Lazy
    ...     def mul(self,a,b) :
    ...         print a,b,"compute"
    ...         return a*b
    ...
    >>> a=A()
    >>> a.mul(1,2)
    1 2 compute
    2
    >>> a.mul(2,3)
    2 3 compute
    6
    >>> a.mul(1,2)
    2
    >>> a.mul(2,3)
    6
    >>>          

Использование такой версии lazy сильно ускоряет процесс работы, но за счет
роста памяти, естественно.

pd.lib.fuzzyobject
..................

Модуль предоставляет FuzzyObject класс, наследование от которого позволяет
забыть об ошибках в написании имен переменных класса::

    >>> from pd.lib.fuzzyobject import FuzzyObject
    >>> class A(FuzzyObject) :
    ...     def commmon_function(self) :
    ...         print 'common'
    ...     def other_method(self) :
    ...         print 'method'
    ...
    >>> A().coon_functi()
    common
    >>> A().oth_m()
    method
    >>        

Вообще-то это игрушка более, чем настоящее решение, но оно работает. Более
длинный пример приведен в pd/lib/fuzzyobject/fuzzyobject_sample.py, он тоже
работает и по нему видны плюсы и минусы такого программирования.

Заключение
----------
Основная цель продукта - вынести в него все зависимости на мелкие, часто
употребительные библиотеки. При использовании других продуктов, этот, тоже
придется, скорее всего, поставить. Имеет ли он самостоятельное значение -
пока скорее нет, чем да.
