Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TF 2.12 (and Python 3.11) support #95

Open
jonas-eschle opened this issue Apr 8, 2023 · 2 comments
Open

TF 2.12 (and Python 3.11) support #95

jonas-eschle opened this issue Apr 8, 2023 · 2 comments

Comments

@jonas-eschle
Copy link

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
Copy link
Author

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

@YuMan-Tam
Copy link

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants