Wednesday, February 15, 2012

Using Pyke (python)



using pyke.

the code below will asks for Fahrenheit when the given value is Kelvin.  Pyke automatically detects the rules on what to do.

It first converts to Celsius then to Fahrenheit.


---------------- test ----------------

from pyke import knowledge_engine as py

e= py.engine('c:/temp/pyke')
e.activate('rule')
with e.prove_goal('rule.get_fahrenheit($val, $unit)', val=4.1, unit='K') as gen:
    for v,p in gen:
        print "%s %s" % ( v['val'], v['unit'])


output:
get_fahrenheit2 is kelvin...
get_celsius2 -269.05
get_fahrenheit2 input was kelvin, celsius is -269.05
get_fahrenheit2 -452.29
4.1 K

--------------- rule.KRB file ------------

get_celsius
    use get_celsius($fahrenheit, $unit)
    when
        get_celsius($fahrenheit, $unit, $celsius)

get_celsius1
    use get_celsius($fahrenheit, F, $celsius)
    when
        python celsius = to_celsius($fahrenheit)
        python print "get_celsius1 %s" % (str(celsius))
        $celsius = celsius
        
get_celsius2
    use get_celsius($kelvin, K, $celsius)
    when
        python celsius = to_celsius_from_k($kelvin)
        python print "get_celsius2 %s" % (str(celsius))
        $celsius = celsius

get_fahrenheit
    use get_fahrenheit($celsius, $unit)
    when 
        get_fahrenheit($celsius, $unit, $fahrenheit)
    
get_fahrenheit1
    use get_fahrenheit($celsius, C, $fahrenheit)
    when
        python fahrenheit = to_fahrenheit($celsius)
        python print "get_fahrenheit1 %s" % (str(fahrenheit))
        $fahrenheit = fahrenheit
        
get_fahrenheit2
    use get_fahrenheit($kelvin, K, $fahrenheit)
    when
        python print "get_fahrenheit2 is kelvin... " 
        get_celsius($kelvin, K, $celsius)
        python print "get_fahrenheit2 input was kelvin, celsius is %s" % (str($celsius))
        python fahrenheit = to_fahrenheit($celsius)
        python print "get_fahrenheit2 %s" % (str(fahrenheit))
        $fahrenheit = fahrenheit
        
get_kelvin_from_c
    use get_kelvin($celsius, $kelvin)
    when
        $kelvin = to_kelvin_from_c($celsius)

bc_extras
        def to_celsius(f):
            ret = (f-32) * (5.0/9.0)
            print "returning %s, param was %s" % (str(ret), str(f))
            return ret
            
        def to_celsius_from_k(k):
            return k-273.15

        def to_fahrenheit(c):
            return ( c * (9.0/5.0) ) + 32

        def to_kelvin_from_c(c):
            return c + 273.15