google / tf-quant-finance

High-performance TensorFlow library for quantitative finance.
Apache License 2.0
4.54k stars 574 forks source link

TF 2.12 (and Python 3.11) support #95

Open jonas-eschle opened 1 year ago

jonas-eschle commented 1 year ago

Hi there, I was wondering what's the status of supporting TensorFlow version 2.12 and Python 3.11?

This currently fails with TF 2.12 installed (but setting PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python as suggested works afai see). It seems like kernels just have to be recompiled if I get that right? I.e. a new version with the new protobuf library, and that's it?

Details ``` In [1]: import tf_quant_finance --------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[1], line 1 ----> 1 import tf_quant_finance File ~/mambaforge/envs/tmp310/lib/python3.10/site-packages/tf_quant_finance/__init__.py:73 71 from tf_quant_finance import black_scholes 72 from tf_quant_finance import datetime ---> 73 from tf_quant_finance import experimental 74 from tf_quant_finance import math 75 from tf_quant_finance import models File ~/mambaforge/envs/tmp310/lib/python3.10/site-packages/tf_quant_finance/experimental/__init__.py:17 14 """Experimental modules.""" 16 from tf_quant_finance.experimental import instruments ---> 17 from tf_quant_finance.experimental import local_stochastic_volatility 18 from tf_quant_finance.experimental import local_volatility 19 from tf_quant_finance.experimental import lsm_algorithm File ~/mambaforge/envs/tmp310/lib/python3.10/site-packages/tf_quant_finance/experimental/local_stochastic_volatility/__init__.py:16 1 # Copyright 2020 Google LLC 2 # 3 # Licensed under the Apache License, Version 2.0 (the "License"); (...) 12 # See the License for the specific language governing permissions and 13 # limitations under the License. 14 """Local volatility model.""" ---> 16 from tf_quant_finance.experimental.local_stochastic_volatility.local_stochastic_volatility_model import LocalStochasticVolatilityModel 17 from tf_quant_finance.experimental.local_stochastic_volatility.lsv_variance_model import LSVVarianceModel 19 from tensorflow.python.util.all_util import remove_undocumented # pylint: disable=g-direct-tensorflow-import File ~/mambaforge/envs/tmp310/lib/python3.10/site-packages/tf_quant_finance/experimental/local_stochastic_volatility/local_stochastic_volatility_model.py:25 23 from tf_quant_finance import math 24 from tf_quant_finance import utils as tff_utils ---> 25 from tf_quant_finance.experimental import local_volatility as lvm 26 from tf_quant_finance.experimental.pricing_platform.framework.market_data import utils 27 from tf_quant_finance.math import pde File ~/mambaforge/envs/tmp310/lib/python3.10/site-packages/tf_quant_finance/experimental/local_volatility/__init__.py:17 1 # Copyright 2020 Google LLC 2 # 3 # Licensed under the Apache License, Version 2.0 (the "License"); (...) 12 # See the License for the specific language governing permissions and 13 # limitations under the License. 15 """Local volatility model.""" ---> 17 from tf_quant_finance.experimental.local_volatility.local_volatility_model import LocalVolatilityModel 19 from tensorflow.python.util.all_util import remove_undocumented # pylint: disable=g-direct-tensorflow-import 21 _allowed_symbols = [ 22 "LocalVolatilityModel", 23 ] File ~/mambaforge/envs/tmp310/lib/python3.10/site-packages/tf_quant_finance/experimental/local_volatility/local_volatility_model.py:26 24 from tf_quant_finance import math 25 from tf_quant_finance import types ---> 26 from tf_quant_finance.experimental.pricing_platform.framework.market_data import volatility_surface 27 from tf_quant_finance.math import interpolation 28 from tf_quant_finance.math import piecewise File ~/mambaforge/envs/tmp310/lib/python3.10/site-packages/tf_quant_finance/experimental/pricing_platform/__init__.py:16 1 # Copyright 2020 Google LLC 2 # 3 # Licensed under the Apache License, Version 2.0 (the "License"); (...) 12 # See the License for the specific language governing permissions and 13 # limitations under the License. 14 """Pricing platform module.""" ---> 16 from tf_quant_finance.experimental.pricing_platform import framework 17 from tf_quant_finance.experimental.pricing_platform import instrument_protos 19 from tensorflow.python.util.all_util import remove_undocumented # pylint: disable=g-direct-tensorflow-import File ~/mambaforge/envs/tmp310/lib/python3.10/site-packages/tf_quant_finance/experimental/pricing_platform/framework/__init__.py:16 1 # Copyright 2020 Google LLC 2 # 3 # Licensed under the Apache License, Version 2.0 (the "License"); (...) 12 # See the License for the specific language governing permissions and 13 # limitations under the License. 14 """Framework module.""" ---> 16 from tf_quant_finance.experimental.pricing_platform.framework import core 17 from tf_quant_finance.experimental.pricing_platform.framework import equity_instruments 18 from tf_quant_finance.experimental.pricing_platform.framework import market_data File ~/mambaforge/envs/tmp310/lib/python3.10/site-packages/tf_quant_finance/experimental/pricing_platform/framework/core/__init__.py:16 1 # Copyright 2020 Google LLC 2 # 3 # Licensed under the Apache License, Version 2.0 (the "License"); (...) 12 # See the License for the specific language governing permissions and 13 # limitations under the License. 14 """Pricing platform module.""" ---> 16 from tf_quant_finance.experimental.pricing_platform.framework.core import business_days 17 from tf_quant_finance.experimental.pricing_platform.framework.core import currencies 18 from tf_quant_finance.experimental.pricing_platform.framework.core import curve_types File ~/mambaforge/envs/tmp310/lib/python3.10/site-packages/tf_quant_finance/experimental/pricing_platform/framework/core/business_days.py:17 14 """Supported bank holidays and business day conventions.""" 16 import enum ---> 17 from tf_quant_finance.experimental.pricing_platform.instrument_protos import business_days_pb2 19 __all__ = ["BusinessDayConvention", 20 "convention_from_proto_value", 21 "BankHolidays", 22 "holiday_from_proto_value"] 25 BusinessDayConvention = enum.Enum( 26 "BusinessDayConvention", 27 zip(business_days_pb2.BusinessDayConvention.keys(), 28 business_days_pb2.BusinessDayConvention.keys())) File ~/mambaforge/envs/tmp310/lib/python3.10/site-packages/tf_quant_finance/experimental/pricing_platform/instrument_protos/__init__.py:16 1 # Copyright 2020 Google LLC 2 # 3 # Licensed under the Apache License, Version 2.0 (the "License"); (...) 12 # See the License for the specific language governing permissions and 13 # limitations under the License. 14 """Instrument protos module.""" ---> 16 from tf_quant_finance.experimental.pricing_platform.instrument_protos import all_instruments_pb2 as instruments 17 from tf_quant_finance.experimental.pricing_platform.instrument_protos import american_equity_option_pb2 as american_equity_option 18 from tf_quant_finance.experimental.pricing_platform.instrument_protos import business_days_pb2 as business_days File ~/mambaforge/envs/tmp310/lib/python3.10/site-packages/tf_quant_finance/experimental/pricing_platform/instrument_protos/all_instruments_pb2.py:14 9 # @@protoc_insertion_point(imports) 11 _sym_db = _symbol_database.Default() ---> 14 from tf_quant_finance.experimental.pricing_platform.instrument_protos import american_equity_option_pb2 as tf__quant__finance_dot_experimental_dot_pricing__platform_dot_instrument__protos_dot_american__equity__option__pb2 15 from tf_quant_finance.experimental.pricing_platform.instrument_protos import interest_rate_swap_pb2 as tf__quant__finance_dot_experimental_dot_pricing__platform_dot_instrument__protos_dot_interest__rate__swap__pb2 16 from tf_quant_finance.experimental.pricing_platform.instrument_protos import forward_rate_agreement_pb2 as tf__quant__finance_dot_experimental_dot_pricing__platform_dot_instrument__protos_dot_forward__rate__agreement__pb2 File ~/mambaforge/envs/tmp310/lib/python3.10/site-packages/tf_quant_finance/experimental/pricing_platform/instrument_protos/american_equity_option_pb2.py:14 9 # @@protoc_insertion_point(imports) 11 _sym_db = _symbol_database.Default() ---> 14 from tf_quant_finance.experimental.pricing_platform.instrument_protos import business_days_pb2 as tf__quant__finance_dot_experimental_dot_pricing__platform_dot_instrument__protos_dot_business__days__pb2 15 from tf_quant_finance.experimental.pricing_platform.instrument_protos import currencies_pb2 as tf__quant__finance_dot_experimental_dot_pricing__platform_dot_instrument__protos_dot_currencies__pb2 16 from tf_quant_finance.experimental.pricing_platform.instrument_protos import date_pb2 as tf__quant__finance_dot_experimental_dot_pricing__platform_dot_instrument__protos_dot_date__pb2 File ~/mambaforge/envs/tmp310/lib/python3.10/site-packages/tf_quant_finance/experimental/pricing_platform/instrument_protos/business_days_pb2.py:33 12 _sym_db = _symbol_database.Default() 17 DESCRIPTOR = _descriptor.FileDescriptor( 18 name='tf_quant_finance/experimental/pricing_platform/instrument_protos/business_days.proto', 19 package='tf_quant_finance.experimental.pricing_platform.instrument_protos', (...) 23 serialized_pb=b'\nTtf_quant_finance/experimental/pricing_platform/instrument_protos/business_days.proto\x12@tf_quant_finance.experimental.pricing_platform.instrument_protos*\xd7\x01\n\x15\x42usinessDayConvention\x12#\n\x1f\x42USINESS_DAY_CONVENTION_UNKNOWN\x10\x00\x12\x11\n\rNO_ADJUSTMENT\x10\x01\x12\x0c\n\x08PREVIOUS\x10\x02\x12\r\n\tFOLLOWING\x10\x03\x12\x15\n\x11MODIFIED_PREVIOUS\x10\x04\x12\x16\n\x12MODIFIED_FOLLOWING\x10\x05\x12\x15\n\x11\x45OM_NO_ADJUSTMENT\x10\x06\x12\x10\n\x0c\x45OM_PREVIOUS\x10\x07\x12\x11\n\rEOM_FOLLOWING\x10\x08*9\n\x0c\x42\x61nkHolidays\x12\x19\n\x15\x42\x41NK_HOLIDAYS_UNKNOWN\x10\x00\x12\x06\n\x02US\x10\x01\x12\x06\n\x02UK\x10\x02\x42\x02P\x01\x62\x06proto3' 24 ) 26 _BUSINESSDAYCONVENTION = _descriptor.EnumDescriptor( 27 name='BusinessDayConvention', 28 full_name='tf_quant_finance.experimental.pricing_platform.instrument_protos.BusinessDayConvention', 29 filename=None, 30 file=DESCRIPTOR, 31 create_key=_descriptor._internal_create_key, 32 values=[ ---> 33 _descriptor.EnumValueDescriptor( 34 name='BUSINESS_DAY_CONVENTION_UNKNOWN', index=0, number=0, 35 serialized_options=None, 36 type=None, 37 create_key=_descriptor._internal_create_key), 38 _descriptor.EnumValueDescriptor( 39 name='NO_ADJUSTMENT', index=1, number=1, 40 serialized_options=None, 41 type=None, 42 create_key=_descriptor._internal_create_key), 43 _descriptor.EnumValueDescriptor( 44 name='PREVIOUS', index=2, number=2, 45 serialized_options=None, 46 type=None, 47 create_key=_descriptor._internal_create_key), 48 _descriptor.EnumValueDescriptor( 49 name='FOLLOWING', index=3, number=3, 50 serialized_options=None, 51 type=None, 52 create_key=_descriptor._internal_create_key), 53 _descriptor.EnumValueDescriptor( 54 name='MODIFIED_PREVIOUS', index=4, number=4, 55 serialized_options=None, 56 type=None, 57 create_key=_descriptor._internal_create_key), 58 _descriptor.EnumValueDescriptor( 59 name='MODIFIED_FOLLOWING', index=5, number=5, 60 serialized_options=None, 61 type=None, 62 create_key=_descriptor._internal_create_key), 63 _descriptor.EnumValueDescriptor( 64 name='EOM_NO_ADJUSTMENT', index=6, number=6, 65 serialized_options=None, 66 type=None, 67 create_key=_descriptor._internal_create_key), 68 _descriptor.EnumValueDescriptor( 69 name='EOM_PREVIOUS', index=7, number=7, 70 serialized_options=None, 71 type=None, 72 create_key=_descriptor._internal_create_key), 73 _descriptor.EnumValueDescriptor( 74 name='EOM_FOLLOWING', index=8, number=8, 75 serialized_options=None, 76 type=None, 77 create_key=_descriptor._internal_create_key), 78 ], 79 containing_type=None, 80 serialized_options=None, 81 serialized_start=155, 82 serialized_end=370, 83 ) 84 _sym_db.RegisterEnumDescriptor(_BUSINESSDAYCONVENTION) 86 BusinessDayConvention = enum_type_wrapper.EnumTypeWrapper(_BUSINESSDAYCONVENTION) File ~/mambaforge/envs/tmp310/lib/python3.10/site-packages/google/protobuf/descriptor.py:796, in EnumValueDescriptor.__new__(cls, name, index, number, type, options, serialized_options, create_key) 793 def __new__(cls, name, index, number, 794 type=None, # pylint: disable=redefined-builtin 795 options=None, serialized_options=None, create_key=None): --> 796 _message.Message._CheckCalledFromGeneratedFile() 797 # There is no way we can build a complete EnumValueDescriptor with the 798 # given parameters (the name of the Enum is not known, for example). 799 # Fortunately generated files just pass it to the EnumDescriptor() 800 # constructor, which will ignore it, so returning None is good enough. 801 return None TypeError: Descriptors cannot not be created directly. If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0. If you cannot immediately regenerate your protos, some other possible workarounds are: 1. Downgrade the protobuf package to 3.20.x or lower. 2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower). More information: https://developers.google.com/protocol-buffers/docs/news/2022-05-06#python-updates ```
jonas-eschle commented 1 year ago

@perezju I was wondering what are the plans for this? Is this on the timeline? Or anything we can do about it?

YuMan-Tam commented 6 months ago

Encountered the same error with newer python version. @jonas-eschle's method works.