Python продукты pd.find pd.refchecker

pd.lib

Andrey Orlov  2007-11-12 00:25

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

Репозиторий программы: http://code.dreambot.ru/svn/pd.lib/trunk/ . Последняя версия продукта залита в PYPI.

Продукт

Название:
pd.lib
Выложен на PyPI
Репозиторий
Краткое описание пакета

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

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

Описание модулей

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, он тоже работает и по нему видны плюсы и минусы такого программирования.

pd.lib.gcd

Модуль предоставляет функцию для вычисления наибольшего общего делителя:

>>> from pd.lib.gcd import gcd
>>> gcd(10,15)
5

pd.lib.linear_quantizator

Модуль предоставляет функции для выполнения линейной квантизации. Поддерживается квантизация методом K-средних и эвристическим отображением.

quantizator(quants,n)
Квантизация методом K-средних, quants - список скалярных отсчетов, n - желаемое количество квантов в возвращаемом результате. Функция возвращает список квантов, для каждого из которых указано значение квантизации.
round(quants, num)
Квантизация методом округления.
elastic(quants, num)
Квантизация на основе порядка следования.

Заключение

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

Вложено:

Новое в pd.lib 2009-06-30 13:52  
pd.lib README.txt 2007-11-12 00:25 Андрей Орлов 

content some simple modules and fucntions. The module is simple lazy sort implementation realised therewith heapq module. Two classes are provided by module: HeapSort On initialization accepted item list and comparing function; HeapSortByIndex On initialization accepted item list and index. List items mapped on index values and can be compared by them. HeapSortByIndexSafe It class liked on HeapSortByIndex above, but use index in extremely safe manner: if item omited from index it mapped on infinity and any item are comparable; Items Each item is a pair of object reference and object reference list which one depend; Best results achieved on litle values: the sort is for tree with a few cycles. The module contents **Lazy** decorator class used to cache return value on methods depend on argumetnts. some pro and contra of such programming are viewed from. ...

Эпицентр Zope3 Учат тут Нейросети Репозиторий Статистика Редакторам Проекты
Подписаться на RSS Feed Официальный сайт Zope3 Московская группа изучения реактивного движения The Dream Bot Site noooxml