Skip to main content

Case Based Reasoning library for Python

Project description

Tests cbrlib - main branch PyPi

Case Based Reasoning the Pythonic Way

Case Based Reasoning library for Python

This library provides the possibility to integrate with native python. Basic implemetation can use instances of Python classes to calculate similarity between those objects.

You can find a sparse description of case base reasoning at the english wikipedia page. Please also take a look at the examples.

import dataclasses
import functools
from typing import Optional

from cbrlib import (
    Evaluator,
    FunctionCalculationParameter,
    NumericEvaluationOptions,
    ReasoningRequest,
    WeightedPropertyEvaluatorMapping,
)
from cbrlib import casebase, evaluate


@dataclasses.dataclass(slots=True, frozen=True)
class DataObject:
    color: Optional[str] = None
    shape: Optional[str] = None
    size: Optional[int] = None


color_lookup = {
    "red": {"red": 1, "orange": 0.8, "yellow": 0.4},
    "orange": {"orange": 1, "red": 0.8, "yellow": 0.8},
}
color_evaluator = functools.partial(evaluate.table_lookup, color_lookup)


def create_size_evaluator() -> Evaluator:
    options = NumericEvaluationOptions(
        min_=0,
        max_=100,
        if_less=FunctionCalculationParameter(tolerance=1.0),
        if_more=FunctionCalculationParameter(tolerance=1.0),
    )
    return functools.partial(evaluate.numeric, options)


def dataobject_evaluator() -> Evaluator:
    mappings = (
        WeightedPropertyEvaluatorMapping("color", color_evaluator, 2),
        WeightedPropertyEvaluatorMapping("size", create_size_evaluator(), 1),
        WeightedPropertyEvaluatorMapping("shape", evaluate.equality, 1),
    )
    return functools.partial(evaluate.case_average, mappings)


def main() -> None:
    data = [
        DataObject(color="red", shape="triangle", size=20),
        DataObject(color="orange", shape="circle", size=70),
        DataObject(color="green", shape="square", size=50),
    ]
    print("-" * 80)
    print(
        casebase.infer(
            data,
            ReasoningRequest(
                query=DataObject(color="red"),
            ),
            dataobject_evaluator(),
        )
    )
    print("-" * 80)
    print(
        casebase.infer(
            data,
            ReasoningRequest(
                query=DataObject(size=50),
            ),
            dataobject_evaluator(),
        )
    )

A big thanky you to myCBR for the example data.

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

cbrlib-2.0.10.tar.gz (9.2 kB view details)

Uploaded Source

Built Distribution

cbrlib-2.0.10-py3-none-any.whl (10.0 kB view details)

Uploaded Python 3

File details

Details for the file cbrlib-2.0.10.tar.gz.

File metadata

  • Download URL: cbrlib-2.0.10.tar.gz
  • Upload date:
  • Size: 9.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.10.13 Linux/6.8.1-arch1-1

File hashes

Hashes for cbrlib-2.0.10.tar.gz
Algorithm Hash digest
SHA256 b671ef52d887e1321288a718e8ac08dffca6c2cfb3ab467880252326279469ea
MD5 12eefe70e954cdfadca8a5123bd5e0df
BLAKE2b-256 cc32d00baf275a6fdd4a95ec30d21a41b13ba2251dee0b8bc8686a3641d4735b

See more details on using hashes here.

File details

Details for the file cbrlib-2.0.10-py3-none-any.whl.

File metadata

  • Download URL: cbrlib-2.0.10-py3-none-any.whl
  • Upload date:
  • Size: 10.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.2 CPython/3.10.13 Linux/6.8.1-arch1-1

File hashes

Hashes for cbrlib-2.0.10-py3-none-any.whl
Algorithm Hash digest
SHA256 46e74900aef5ebe3c11d0beacd4209176b034428c6cec212bd749d5c3bc38857
MD5 c95fe38c976ea8299172f89f9f1839df
BLAKE2b-256 68f3b70b418748504d45df4a0ede630319b044a6249984c1e0e819bdc9c62c99

See more details on using hashes here.

Supported by

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