###############################################################################
#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
# limitations under the License.
###############################################################################

# These are packages needed by the Apache Beam Python SDK. Their versions need
# to be compatible with the requirements in sdks/python/setup.py.
# Specifying the versions manually helps to resolve dependency conflicts
# with other packages installed in the container.
# Any SDK dependencies not listed here will be installed when SDK is installed
# into the container.

avro==1.8.2;python_version<="2.7"
avro-python3==1.8.2;python_version>="3.4"
fastavro==0.21.24
crcmod==1.7
dill==0.3.0
future==0.17.1
futures==3.2.0;python_version<"3.0"
grpcio==1.22.0
hdfs==2.5.6
httplib2==0.12.0
mock==2.0.0
oauth2client==3.0.0
protobuf==3.9.0
pyarrow==0.13.0
pydot==1.4.1
pytz==2019.1
pyvcf==0.6.8;python_version<"3.0"
pyyaml==3.13
typing==3.6.6

# Setup packages
nose==1.3.7

# GCP extra features
google-apitools==0.5.28
googledatastore==7.0.2;python_version<"3.0"
google-cloud-pubsub==0.39.1
google-cloud-bigquery==1.17.0
proto-google-cloud-datastore-v1==0.90.4
google-cloud-bigtable==0.32.1
google-cloud-core==1.0.2
google-cloud-datastore==1.7.4

# Optional packages
cython==0.29.10
python-snappy==0.5.4

# These are additional packages likely to be used by customers.
numpy==1.16.4
scipy==1.2.2
pandas==0.24.2
protorpc==0.12.0
python-gflags==3.0.6

tensorflow==1.14.0
pymongo==3.8.0

# Packages needed for testing.
tenacity>=5.0.2
pyhamcrest<2.0,>=1.9
