pd.lib
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 добавился модуль topsort Открыл для себя heapq Использование квантизации для визуализации данныхВложено:
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. ...


