###############################################################################
#  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.4
crcmod==1.7
dill==0.2.9
future==0.16.0
futures==3.2.0;python_version<"3.0"
grpcio==1.15.0
hdfs==2.1.0
httplib2==0.9.2
mock==2.0.0
oauth2client==3.0.0
protobuf==3.6.1
pyarrow==0.11.1
pydot==1.2.4
pyparsing==2.3.1
pytz==2018.4
pyvcf==0.6.8;python_version<"3.0"
pyyaml==3.12
typing==3.6.1

# Setup packages
nose==1.3.7

# GCP extra features
google-apitools==0.5.26
googledatastore==7.0.1;python_version<"3.0"
google-cloud-pubsub==0.39.0
google-cloud-bigquery==1.6.0
proto-google-cloud-datastore-v1==0.90.4
google-cloud-bigtable==0.31.1
google-cloud-core==0.28.1

# Optional packages
cython==0.28.1
python-snappy==0.5.3

# These are additional packages likely to be used by customers.
numpy==1.15.2
scipy==1.1.0
pandas==0.23.4
protorpc==0.11.1
python-gflags==3.0.6
setuptools<=39.1.0 # requirement for Tensorflow.
tensorflow==1.11.0

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