Skip to main content

Complete LINQ, language integrated query, implementation for Python with full type annotations, comprehensive documentation, 100% test coverage, and queryable drop in replacements for the builtin collection types.

Reason this release was yanked:

design mistake in API

Project description

Typed Linq Collections

Complete LINQ, language integrated query, implementation for Python with full type annotations, comprehensive documentation, 100% test coverage, and queryable drop in replacements for the builtin collection types.

  • Rich Query API: Almost the full Enumerable set of operators from .NET gives excellent support for filtering, mapping, grouping, and more in a fluent API
  • Comprehensive type annotions: Gives you full autocomplete and static error analysis if using pyright with vscode or PyCharm. In vscode refactoring within the lambdas work like a charm
  • Comprehensive test suite: More than 900 tests covering every single line and code branch
  • Comprehensive docstrings: Every method and class is documented, giving excellent discoverability of functionality in any modern IDE/editor.
  • Lazy Evaluation: Memory efficient query execution with deferred evaluation for every operation other than the to_* methods which create new collections
  • Drop-in compatible collection types: Collection types that seamlessly replace and interoperate with standard Python collections. QList, QSet, QDict etc
  • Numeric Specializations: Dedicated types for int, float, Decimal, and Fraction collections
  • Extensible Design: QIterable is an abstract class/mixin that can be subclassed by any Iterable type to add full querying capabilities

Quick Start

from typed_linq_collections.collections.q_list import QList
from typed_linq_collections.q_iterable import query


fruits = ("apple", "apricot", "mango", "melon", "peach", "pineapple")
def test_querying_built_in_collections() -> None:
    fruits_by_first_character = (query(fruits)
                                 .group_by(lambda fruit: fruit[0])
                                 .where(lambda group: group.key in {"a", "p"})
                                 .to_list())

    assert fruits_by_first_character == [['apple', 'apricot'], ['peach', 'pineapple']]

def test_querying_with_queryable_collections() -> None:
    fruits_by_first_character = (QList(fruits)
                                 .group_by(lambda fruit: fruit[0])
                                 .where(lambda group: group.key in {"a", "p"})
                                 .to_list())

    assert fruits_by_first_character == [['apple', 'apricot'], ['peach', 'pineapple']]

def test_numeric_operations() -> None:
    total_lenght_of_fruits = (query(fruits)
                              .select(len)
                              .as_ints() # get's you a QIntIterable with numeric operations support. typed so that it is only available on a QIterable[int]
                              .sum())

    assert total_lenght_of_fruits == 36

Collection Types

Core Collections

Drop in replacements for the built in collections.

  • QList[T] - Queryable list (mutable sequence)
  • QSequence[T] - Queryable immutable sequence
  • QSet[T] - Queryable set (mutable)
  • QFrozenSet[T] - Queryable frozen set (immutable)
  • QDict[K, V] - Queryable dictionary
  • QDefaultDict[K, V] - Queryable default dictionary

Numeric Collections

Specialized collections with additional numeric operations:

  • QIntIterable - For integer collections
  • QFloatIterable - For float collections
  • QDecimalIterable - For Decimal collections
  • QFractionIterable - For Fraction collections

and so on with numeric specializations of QList, QSet, QDict, QDefaultDict, QFrozenSet.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

typed_linq_collections-0.9.17.tar.gz (76.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

typed_linq_collections-0.9.17-py3-none-any.whl (103.9 kB view details)

Uploaded Python 3

File details

Details for the file typed_linq_collections-0.9.17.tar.gz.

File metadata

  • Download URL: typed_linq_collections-0.9.17.tar.gz
  • Upload date:
  • Size: 76.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for typed_linq_collections-0.9.17.tar.gz
Algorithm Hash digest
SHA256 5792055129b14c0d86a06eec8a0ab93aa590a20e62f1751b6728fbe4fa249c1f
MD5 94f4413b5a7f39125476ddd2d4e141d3
BLAKE2b-256 b5b961b24b9103d084143d71294295b0ce9d78814daa7a3e60a14387d676a22c

See more details on using hashes here.

File details

Details for the file typed_linq_collections-0.9.17-py3-none-any.whl.

File metadata

File hashes

Hashes for typed_linq_collections-0.9.17-py3-none-any.whl
Algorithm Hash digest
SHA256 e66020e10471e807a3668742aaf9db63f33cdbe1573f8c8c77a7ede12b46ce17
MD5 2b4f967e45b7f3375a090129ec2c9fc6
BLAKE2b-256 24b0e1849aea6363ce15d12eaca59a4d490e2a20d3cc2e56165b5ac8f26e01bc

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page