Esempio n. 1
0
def reorder_preamble(pr):
    import sympy
    from dolang.triangular_solver import solve_triangular_system
    unknowns = [*pr.keys()]
    incidence = [[str(e) for e in sympy.sympify((exp)).atoms()]
                 for exp in pr.values()]
    sol = solve_triangular_system(dict(zip(unknowns, incidence)))
    return dict([(k, pr[k]) for k in sol.keys()])
Esempio n. 2
0
def calibration_to_vector(symbols, calibration_dict):

    from dolang.triangular_solver import solve_triangular_system
    from numpy import nan

    sol = solve_triangular_system(calibration_dict)

    calibration = dict()
    for group in symbols:
        # t = numpy.array([sol.get(s, nan) for s in symbols[group]], dtype=float)
        t = numpy.array([sol.get(s, nan) for s in symbols[group]], dtype=float)
        calibration[group] = t

    return calibration
Esempio n. 3
0
    def get_calibration(self):

        from dolang.symbolic import remove_timing

        import copy

        calibration = dict()
        for k, v in self.data.get("calibration", {}).items():
            if v.tag == "tag:yaml.org,2002:str":

                expr = parse_string(v)
                expr = remove_timing(expr)
                expr = str_expression(expr)
            else:
                expr = float(v.value)
            kk = remove_timing(parse_string(k))
            kk = str_expression(kk)

            calibration[kk] = expr

        from dolang.triangular_solver import solve_triangular_system

        return solve_triangular_system(calibration)
# with timeit("Conversion mod -> json"):
#     from dolo.compiler.import_dynare import import_dynare
#     model = import_dynare("/home/pablo/Downloads/EA_QUEST3.mod", output_type='json')
#     txt = json.dumps(model)
#     model['calibration']
#     with open("EA_QUEST3.json",'w') as f:
#         json.dump(model,f)

with timeit('Load json'):
    with open("EA_QUEST3.json") as f:
        model = json.load(f)

model['symbols'].keys()
with timeit("Solve triangular system"):
    calibration = model['calibration']
    sol = solve_triangular_system(calibration)

with timeit("Parse equations"):
    equations = model['equations']

    compat = lambda s: s.replace("^", "**").replace('==', '=').replace(
        '=', '==')

    equations = [compat(eq) for eq in equations]
    equations = ['{} - ({})'.format(*str.split(eq, '==')) for eq in equations]
    equations = [parse_string(e) for e in equations]

with timeit("stringify equations"):

    all_variables = [(v, 1) for v in model['symbols']['variables']] + \
                    [(v, 0) for v in model['symbols']['variables']]  + \
Esempio n. 5
0
    # = e"ndogenous variables",
    n="0.33",
    z="zbar",
    rk="1/β-1+δ",
    w="(1-α)*exp(z)*(k/n)**(α)",
    k="n/(rk/α)**(1/(1-α))",
    y="exp(z)*k**α*n**(1-α)",
    i="δ*k",
    c="y - i",
    V="log(c)/(1-β)",
    u="c**(1-σ)/(1-σ) - χ*n**(1+η)/(1+η)",
    m="β/c**σ*(1-δ+rk)")

from dolang.triangular_solver import solve_triangular_system

calibration_dict = solve_triangular_system(calibration_strings)

calibration_vector = calibration_to_vector(symbols, calibration_dict)
calibration = CalibrationDict(symbols, calibration_vector)
calibration

###
### Define functions
###

# the basic formulation of the functions (aka kernel)

# take and return "tuples" of floats because tuples are supposed
# to be easy to be optimzed away by the compiler
# after the definition of the function, there is some boilerplate
# to translate these functions into broadcastable ones, with
Esempio n. 6
0
    def get_calibration(self):

        # if self.__calibration__ is None:

        from dolang.symbolic import remove_timing

        import copy

        symbols = self.symbols
        calibration = dict()
        for k, v in self.data.get("calibration", {}).items():
            if v.tag == "tag:yaml.org,2002:str":

                expr = parse_string(v)
                expr = remove_timing(expr)
                expr = str_expression(expr)
            else:
                expr = float(v.value)
            kk = remove_timing(parse_string(k))
            kk = str_expression(kk)

            calibration[kk] = expr

        definitions = self.definitions

        initial_values = {
            "exogenous": 0,
            "expectations": 0,
            "values": 0,
            "controls": float("nan"),
            "states": float("nan"),
        }

        # variables defined by a model equation default to using these definitions
        initialized_from_model = {
            "values": "value",
            "expectations": "expectation",
            "direct_responses": "direct_response",
        }
        for k, v in definitions.items():
            kk = remove_timing(k)
            if kk not in calibration:
                if isinstance(v, str):
                    vv = remove_timing(v)
                else:
                    vv = v
                calibration[kk] = vv

        for symbol_group in symbols:
            if symbol_group not in initialized_from_model.keys():
                if symbol_group in initial_values:
                    default = initial_values[symbol_group]
                else:
                    default = float("nan")
                for s in symbols[symbol_group]:
                    if s not in calibration:
                        calibration[s] = default

        from dolang.triangular_solver import solve_triangular_system

        return solve_triangular_system(calibration)
Esempio n. 7
0
#     model = import_dynare("/home/pablo/Downloads/EA_QUEST3.mod", output_type='json')
#     txt = json.dumps(model)
#     model['calibration']
#     with open("EA_QUEST3.json",'w') as f:
#         json.dump(model,f)


with timeit('Load json'):
    with open("EA_QUEST3.json") as f:
        model = json.load(f)


model['symbols'].keys()
with timeit("Solve triangular system"):
    calibration = model['calibration']
    sol = solve_triangular_system(calibration)


with timeit("Parse equations"):
    equations = model['equations']

    compat = lambda s: s.replace("^", "**").replace('==','=').replace('=','==')

    equations = [compat(eq) for eq in equations]
    equations = ['{} - ({})'.format(*str.split(eq,'==')) for eq in equations]
    equations = [parse_string(e) for e in equations]


with timeit("stringify equations"):

    all_variables = [(v, 1) for v in model['symbols']['variables']] + \