from decimal import Decimal, InvalidOperation

def consumption_estimate(seconds, rate_per_minute="850"):
    duration=Decimal(str(seconds));rate=Decimal(str(rate_per_minute))
    if not duration.is_finite() or duration<0 or not rate.is_finite() or rate<0:
        raise ValueError("Finite nonnegative values required")
    minutes=duration/Decimal(60)
    return {"seconds":str(duration),"minutes":str(minutes),
      "rate_toman_per_minute":str(rate),"unrounded_consumption_toman":str(minutes*rate),
      "billing_rounding_confirmed":False,"setup_and_other_items_included":False}

if __name__=="__main__":
    for seconds in (30,150,600,3600):print(consumption_estimate(seconds))
    assert Decimal(consumption_estimate(600)["unrounded_consumption_toman"])==8500
    assert Decimal(consumption_estimate(3600)["unrounded_consumption_toman"])==51000
    assert Decimal(consumption_estimate(150)["unrounded_consumption_toman"])==2125
    for bad in (-1,"NaN","Infinity"):
        try:consumption_estimate(bad)
        except ValueError:pass
        else:raise AssertionError("Invalid input accepted")
