Installation Guide for TensorFlow on macOS High Sierra 10.13.4 for your DeepLearning w/ Java, C, and Go

This installation particularly focuses on macOS High Sierra version 10.13.4. It’s likely that the installation may work on previous version of macOS High Sierra. However, addressing the issues related to previous versions is not considered in this topic.  There are several options to install TensorFlow on macOS.

  • Docker
  • Native Pip
  • Virtual Python environment
  • Installation of TensorFlow with Anaconda
  • Installation of TensorFlow for JDK
  • Installation of TensorFlow for Go with TensorFlow C Library

 

Docker

The docker community edition is the preferred platform for building container based applications on macOS. There are couple of update channels available through Docker community edition such as Stable and Edge.  The Docker CE supports both on-premise and cloud platforms.  The Docker CE edition installation is compatible with AWS and Azure cloud platforms on CentOS, Debian, Fedora, Ubuntu, and Linux platforms.  The installation of Docker on a mac machine does not affect any machines created with the Docker machine.  The new Docker for mac Hyperkit VM creates the virtual environment with the minimum hardware support of Mac hardware created no earlier than 2010 with Intel’s hardware support for virtualization of memory management in unrestricted mode.  The hardware support can be verified with the command sysctl kern.hv_support   in the terminal. Any operating systems such as mac OS El Capitan or above are supported by Docker.  However, macOS High Sierra resolved majority of the issues encountered from the earlier version of macOS. It’s recommended to have macOS High Sierra version 10.13.4 for minimizing the problems with docker installation. The system should be equipped with at least 4 GB RAM.  Download the Docker Community Edition for macOS from the Docker Store. This may require creation of docker ID and password to be part of the Docker Store.

Figure 1. Docker Community Edition for macOS.

Docker Community Edition for macOS dockerizes the applications on mac with Hypervisor framework, filesystem, and networking with a complete development environment.  The Docker platform also delivers developer tools for running command line, compose, and Docker notary command line with automatic updates pushed through the Docker development environment.  Once the download of the docker is initiated on macOS, a sample docker run hello-world can be run to verify the validity of the Docker installation.  The Docker installation now contains entire TensorFlow environment in a TensorFlow binary image.  The Docker container can be launched with the following command:

$ docker run -it -p hostPort:containerPortTensorFlowImage

 

If the TensorFlow programs are run from the Shell, -p hostPort:containerPortwill be optional. In case of running the TensorFlow program from the Jupyter Notebook, the hostPort and containerPort   can be set to 8888.  Running embedding visualizations from TensorBoard insider the container will require setting the localhost to 6006.   The TensorFlow binary images are also available on DockerHub.  The following command can be run to launch the TensorFlow programs from shell.

 

 

$ docker run -it tensorflow/tensorflow bash

 

The following command initiates setting the Jupyter environment for Docker container to run TensorFlow programs from Jupyter notebooks.

 

$ docker run -it -p 8888:8888 tensorflow/tensorflow

 

 

Native Pip

 

 

The installation through native Pip expects a prior environment of either Python 3.X+ or Python 2.7.  If macOS does not have Python environment, it has to be installed before attempting to install TensorFlow.  Pip is for Python 2.7 and Pip3 is for Python 3.X version.  You can identify the system version of Pip through the following commands.

 

 

$ pip -V  # for Python 2.7$ pip3 -V # for Python 3.n

 

 

It’s always a good idea to update the pip with the latest version:

 

 

$ sudo easy_install –upgrade pip$ sudo easy_install –upgrade six

 

 

Once, the installation or upgrade is successfully complete, TensorFlow can be installed with the following command based on the system environment:

 

$ pip install tensorflow      # Python 2.7; CPU support $ pip3 install tensorflow     # Python 3.n; CPU support

 

 

A short TensorFlow program can be run in the system after clearing the syntax to ensure that the installation has been successful and system has been set up with Tensorflow development environment.

 

 

Virtual Python Environment

 

 

Once the macOS terminal is started, the following instructions can be beneficial to complete the installation. The option three virtual Python environment is preferred.  The following commands set up the installation of pip and virtual Python environment for TensorFlow.

 

$ sudo easy_install pip $ pip install –upgrade virtualenv

 

 

Once the virtual Python environment has been upgraded, the following commands can be leveraged to create the virtual Python environment.

 

$ virtualenv –system-site-packages targetDirectory # for Python 2.7$ virtualenv –system-site-packages -p python3 targetDirectory # for Python 3.n

The target directory will be the top of the virtual Python environment tree. By default, it would be ~/TensorFlow. However, it can be changed to any other directory based on the selection of the developer.

 

The target directory needs to be activated as virtual python environment with either of the following commands:

 

$ cd targetDirectory$ source ./bin/activate      # If using bash, sh, ksh, or zsh$ source ./bin/activate.csh  # If using csh or tcsh

 

Once the above process is complete, the suffix of the source command changes to your target directory as follows:

 

(targetDirectory)$

 

The following commands can be leveraged to install TensorFlow:

 

(targetDirectory)$ pip install –upgrade tensorflow      # for Python 2.7 (targetDirectory)$ pip3 install –upgrade tensorflow     # for Python 3.n

 

Once the environment is created, it can be leveraged to run even Jupyter Notebooks.

 

GPs-iMac:~ GP$ sudo easy_install pip

Password:

Searching for pip

Best match: pip 10.0.1

Adding pip 10.0.1 to easy-install.pth file

Installing pip script to /anaconda3/bin

Installing pip3 script to /anaconda3/bin

Installing pip3.6 script to /anaconda3/bin

 

Using /anaconda3/lib/python3.6/site-packages

Processing dependencies for pip

Finished processing dependencies for pip

GPs-iMac:~ GP$ pip install –upgrade virtualenv

Collecting virtualenv

Downloading https://files.pythonhosted.org/packages/b6/30/96a02b2287098b23b875bc8c2f58071c35d2efe84f747b64d523721dc2b5/virtualenv-16.0.0-py2.py3-none-any.whl (1.9MB)

100% |████████████████████████████████| 1.9MB 5.4MB/s

Installing collected packages: virtualenv

Successfully installed virtualenv-16.0.0

GPs-iMac:~ GP$ virtualenv–system-site-packages -p python3

Running virtualenv with interpreter /anaconda3/bin/python3

You must provide a DEST_DIR

Usage:virtualenv.py[OPTIONS] DEST_DIR

 

GPs-iMac:~ GP$ virtualenv–system-site-packages -p python3 tensorflow

Running virtualenvwith interpreter /anaconda3/bin/python3

Using base prefix ‘/anaconda3’

New python executable in /Users/GP/tensorflow/bin/python3

Also creating executable in /Users/GP/tensorflow/bin/python

Installing setuptools, pip, wheel…done.

GPs-iMac:~ GP$ cd tensorflow

GPs-iMac:tensorflow GP$ source /bin/activate

-bash: /bin/activate: No such file or directory

GPs-iMac:tensorflow GP$ source ./bin/activate

(tensorflow) GPs-iMac:tensorflow GP$ easy_install -U pip

Searching for pip

Reading https://pypi.org/simple/pip/

Downloading https://files.pythonhosted.org/packages/0f/74/ecd13431bcc456ed390b44c8a6e917c1820365cbebcb6a8974d1cd045ab4/pip-10.0.1-py2.py3-none-any.whl#sha256=717cdffb2833be8409433a93746744b59505f42146e8d37de6c62b430e25d6d7

Best match: pip 10.0.1

Processing pip-10.0.1-py2.py3-none-any.whl

Installing pip-10.0.1-py2.py3-none-any.whl to /Users/GP/tensorflow/lib/python3.6/site-packages

writing requirements to /Users/GP/tensorflow/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg/EGG-INFO/requires.txt

Adding pip 10.0.1 to easy-install.pth file

Installing pip script to /Users/GP/tensorflow/bin

Installing pip3 script to /Users/GP/tensorflow/bin

Installing pip3.6 script to /Users/GP/tensorflow/bin

 

Installed /Users/GP/tensorflow/lib/python3.6/site-packages/pip-10.0.1-py3.6.egg

Processing dependencies for pip

Finished processing dependencies for pip

(tensorflow) GPs-iMac:tensorflow GP$ pip3 install –upgrade tensorflow

Collecting tensorflow

Downloading https://files.pythonhosted.org/packages/03/ad/d732a5d9d50bfcd8aeb6e4a266065a8868829388e4e2b529ff689f1fc923/tensorflow-1.8.0-cp36-cp36m-macosx_10_11_x86_64.whl (46.5MB)

100% |████████████████████████████████| 46.5MB 426kB/s

Collecting tensorboard<1.9.0,>=1.8.0 (from tensorflow)

Downloading https://files.pythonhosted.org/packages/59/a6/0ae6092b7542cfedba6b2a1c9b8dceaf278238c39484f3ba03b03f07803c/tensorboard-1.8.0-py3-none-any.whl (3.1MB)

100% |████████████████████████████████| 3.1MB 4.5MB/s

Collecting termcolor>=1.1.0 (from tensorflow)

Downloading https://files.pythonhosted.org/packages/8a/48/a76be51647d0eb9f10e2a4511bf3ffb8cc1e6b14e9e4fab46173aa79f981/termcolor-1.1.0.tar.gz

Collecting gast>=0.2.0 (from tensorflow)

Downloading https://files.pythonhosted.org/packages/5c/78/ff794fcae2ce8aa6323e789d1f8b3b7765f601e7702726f430e814822b96/gast-0.2.0.tar.gz

Requirement not upgraded as not directly required: wheel>=0.26 in ./lib/python3.6/site-packages (from tensorflow) (0.31.1)

Collecting astor>=0.6.0 (from tensorflow)

Downloading https://files.pythonhosted.org/packages/b2/91/cc9805f1ff7b49f620136b3a7ca26f6a1be2ed424606804b0fbcf499f712/astor-0.6.2-py2.py3-none-any.whl

Collecting grpcio>=1.8.6 (from tensorflow)

Downloading https://files.pythonhosted.org/packages/68/57/da122cbfc1b7815381480b23044fff06b90f58c1be9310e68c2d6b1d623c/grpcio-1.12.1-cp36-cp36m-macosx_10_7_intel.whl (1.9MB)

100% |████████████████████████████████| 1.9MB 6.3MB/s

Collecting absl-py>=0.1.6 (from tensorflow)

Downloading https://files.pythonhosted.org/packages/57/8d/6664518f9b6ced0aa41cf50b989740909261d4c212557400c48e5cda0804/absl-py-0.2.2.tar.gz (82kB)

100% |████████████████████████████████| 92kB 17.7MB/s

Requirement not upgraded as not directly required: six>=1.10.0 in /anaconda3/lib/python3.6/site-packages (from tensorflow) (1.11.0)

Collecting protobuf>=3.4.0 (from tensorflow)

Downloading https://files.pythonhosted.org/packages/6d/7e/51c91b28cb8446ebd7231d375a2025bca4c59d15ddc0cf2dd0867b400cd7/protobuf-3.6.0-cp36-cp36m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (1.2MB)

100% |████████████████████████████████| 1.2MB 6.3MB/s

Requirement not upgraded as not directly required: numpy>=1.13.3 in /anaconda3/lib/python3.6/site-packages (from tensorflow) (1.14.0)

Requirement not upgraded as not directly required: werkzeug>=0.11.10 in /anaconda3/lib/python3.6/site-packages (from tensorboard<1.9.0,>=1.8.0->tensorflow) (0.14.1)

Collecting bleach==1.5.0 (from tensorboard<1.9.0,>=1.8.0->tensorflow)

Downloading https://files.pythonhosted.org/packages/33/70/86c5fec937ea4964184d4d6c4f0b9551564f821e1c3575907639036d9b90/bleach-1.5.0-py2.py3-none-any.whl

Collecting markdown>=2.6.8 (from tensorboard<1.9.0,>=1.8.0->tensorflow)

Downloading https://files.pythonhosted.org/packages/6d/7d/488b90f470b96531a3f5788cf12a93332f543dbab13c423a5e7ce96a0493/Markdown-2.6.11-py2.py3-none-any.whl (78kB)

100% |████████████████████████████████| 81kB 19.7MB/s

Collecting html5lib==0.9999999 (from tensorboard<1.9.0,>=1.8.0->tensorflow)

Downloading https://files.pythonhosted.org/packages/ae/ae/bcb60402c60932b32dfaf19bb53870b29eda2cd17551ba5639219fb5ebf9/html5lib-0.9999999.tar.gz (889kB)

100% |████████████████████████████████| 890kB 13.0MB/s

Requirement not upgraded as not directly required: setuptools in ./lib/python3.6/site-packages (from protobuf>=3.4.0->tensorflow) (39.2.0)

Building wheels for collected packages: termcolor, gast, absl-py, html5lib

Running setup.py bdist_wheel for termcolor … done

Stored in directory: /Users/GP/Library/Caches/pip/wheels/7c/06/54/bc84598ba1daf8f970247f550b175aaaee85f68b4b0c5ab2c6

Running setup.py bdist_wheel for gast … done

Stored in directory: /Users/GP/Library/Caches/pip/wheels/9a/1f/0e/3cde98113222b853e98fc0a8e9924480a3e25f1b4008cedb4f

Running setup.py bdist_wheel for absl-py … done

Stored in directory: /Users/GP/Library/Caches/pip/wheels/a0/f8/e9/1933dbb3447ea6ef57062fd5461cb118deb8c2ed074e8344bf

Running setup.py bdist_wheel for html5lib … done

Stored in directory: /Users/GP/Library/Caches/pip/wheels/50/ae/f9/d2b189788efcf61d1ee0e36045476735c838898eef1cad6e29

Successfully built termcolor gast absl-py html5lib

Installing collected packages: html5lib, bleach, protobuf, markdown, tensorboard, termcolor, gast, astor, grpcio, absl-py, tensorflow

Found existing installation: html5lib 1.0.1

Not uninstalling html5lib at /anaconda3/lib/python3.6/site-packages, outside environment /Users/GP/tensorflow

Can’t uninstall ‘html5lib’. No files were found to uninstall.

Found existing installation: bleach 2.1.2

Not uninstalling bleach at /anaconda3/lib/python3.6/site-packages, outside environment /Users/GP/tensorflow

Can’t uninstall ‘bleach’. No files were found to uninstall.

Successfully installed absl-py-0.2.2 astor-0.6.2 bleach-1.5.0 gast-0.2.0 grpcio-1.12.1 html5lib-0.9999999 markdown-2.6.11 protobuf-3.6.0 tensorboard-1.8.0 tensorflow-1.8.0 termcolor-1.1.0

 

(tensorflow) GPs-iMac:tensorflow GP$ conda install -c conda-forge tensorflow

Solving environment: done

 

 

==> WARNING: A newer version of conda exists. <==

current version: 4.4.10

latest version: 4.5.4

 

Please update conda by running

 

$ conda update -n base conda

 

 

 

## Package Plan ##

 

environment location: /anaconda3

 

added / updated specs:

– tensorflow

 

 

The following packages will be downloaded:

 

package                    |            build

—————————|—————–

mock-2.0.0                 |           py36_0         103 KB conda-forge

certifi-2018.1.18          |           py36_0         143 KB conda-forge

libprotobuf-3.5.2          |                0         3.9 MB conda-forge

tensorflow-1.1.0           |           py36_0        24.8 MB conda-forge

pbr-4.0.4                  |             py_0          61 KB conda-forge

protobuf-3.5.2             |           py36_0         603 KB conda-forge

————————————————————

Total:        29.7 MB

 

The following NEW packages will be INSTALLED:

 

libprotobuf: 3.5.2-0         conda-forge

mock:        2.0.0-py36_0     conda-forge

pbr:         4.0.4-py_0       conda-forge

protobuf:    3.5.2-py36_0     conda-forge

tensorflow:  1.1.0-py36_0     conda-forge

 

The following packages will be UPDATED:

 

certifi:     2018.1.18-py36_0             –> 2018.1.18-py36_0 conda-forge

 

Proceed ([y]/n)? y

 

 

Downloading and Extracting Packages

mock 2.0.0: ############################################################ | 100%

certifi 2018.1.18: ##################################################### | 100%

libprotobuf 3.5.2: ##################################################### | 100%

tensorflow 1.1.0: ###################################################### | 100%

pbr 4.0.4: ############################################################# | 100%

protobuf 3.5.2: ######################################################## | 100%

Preparing transaction: done

Verifying transaction: done

Executing transaction: done

 

 

 

Installation of TensorFlow with Anaconda

 

Though, Anaconda installation is supported by Anaconda and several other communities, it’s not officially supported by Google and TensorFlow organization. The issues with installation of Anaconda need to be resolved by contacting Anaconda.  The Anaconda environment for macOS can be downloaded from Anaconda website.  Once the download is complete, the conda environment with the name of TensorFlow can be set up with the following command:

 

$ conda create -n tensorflow pip python=2.7 # or python=3.3, etc.

 

The conda environment can be activated with the following command.

 

$ source activate tensorflow

 

The following command can be leveraged to install TensorFlow inside conda environment.

 

(targetDirectory)$ pip install –ignore-installed –upgrade TF_PYTHON_URL

 

Tensorflow Installation with JDK.

 

TensorFlow delivers APIs to work with Java. If there’s an earlier version of Apache Maven, slight changes to the configuration file can allow to use the TensorFlow JAVA APIs.

 

<dependency>
<groupId>org.tensorflow</groupId>
<artifactId>tensorflow</artifactId>
<version>1.8.0</version>
</dependency>

 

In case, there’s no Apache Maven project environment on the system, it has to be decided, if the installation should go on Linux or macOS.

 

TensorFlow Installation for Go Platform

 

The TensorFlow installation for Go platform depends on the TensorFlow C library. It can be installed with the following command.

 

TF_TYPE=”cpu” # Change to “gpu” for GPU support
TARGET_DIRECTORY=’/usr/local’
curl -L \
“https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-${TF_TYPE}-$(go env GOOS)-x86_64-1.8.0.tar.gz” |
sudo tar -C $TARGET_DIRECTORY -xz

 

Once, the installation is complete, the Go platform with TensorFlow C library file will be installed to /usr/local/lib. Go Get command will ensure to get all the necessary Go packages for Tensorflow with the following command.

 

go get github.com/tensorflow/tensorflow/tensorflow/go

 

Once, the installation is complete, it can be tested with a sample Go program.

 

 

 

25 thoughts on “Installation Guide for TensorFlow on macOS High Sierra 10.13.4 for your DeepLearning w/ Java, C, and Go

  1. adidas nmd Posted On

    I am glad for commenting to make you be aware of what a brilliant experience my wife’s princess gained using your web site. She discovered numerous issues, which include what it is like to have an excellent giving character to get other folks quite simply understand a number of complicated subject matter. You actually surpassed our expected results. Many thanks for supplying the productive, trusted, educational not to mention fun tips on the topic to Julie.

    Reply
  2. Adidas Originals NMD XR1 Runner Primeknit Running Shoes White/Black Posted On

    There are definitely numerous details like that to take into consideration. That is a nice point to carry up. I provide the ideas above as basic inspiration but clearly there are questions like the one you carry up the place the most important factor can be working in honest good faith. I don?t know if greatest practices have emerged around issues like that, however I’m certain that your job is clearly identified as a good game. Both boys and girls feel the impact of only a moment抯 pleasure, for the remainder of their lives.

    Reply
  3. adidas ultra boost Posted On

    I in addition to my friends were found to be digesting the good pointers located on the blog and instantly came up with an awful feeling I had not expressed respect to you for those tips. These young men are actually as a result passionate to see them and now have in reality been loving them. Thank you for simply being well accommodating and also for figuring out some helpful things most people are really desperate to know about. My very own honest apologies for not expressing gratitude to you earlier.

    Reply
  4. yeezy boost 350 v2 Posted On

    Thank you so much for giving everyone remarkably remarkable possiblity to discover important secrets from this site. It is often very enjoyable and full of fun for me and my office friends to search your blog not less than thrice per week to read the latest guidance you have got. And definitely, I’m usually motivated for the fabulous principles you give. Certain two points in this posting are in fact the most suitable we have had.

    Reply
  5. yeezys Posted On

    Thank you a lot for providing individuals with an extraordinarily marvellous possiblity to read articles and blog posts from here. It is often so great and full of a great time for me personally and my office co-workers to visit your website on the least thrice in one week to see the fresh secrets you will have. And lastly, I’m so actually impressed considering the perfect points served by you. Certain 2 ideas in this post are absolutely the most suitable I’ve ever had.

    Reply
  6. yeezy boost 350 Posted On

    I am only commenting to let you be aware of what a fine encounter my friend’s girl found checking your blog. She came to find many details, which included how it is like to possess a great coaching heart to let many people completely learn some grueling subject matter. You truly exceeded my desires. Many thanks for imparting the warm and friendly, trustworthy, explanatory and even easy tips on your topic to Janet.

    Reply
  7. timberland shoes Posted On

    I must show my appreciation for your kind-heartedness in support of those people who require assistance with your area of interest. Your very own dedication to getting the solution all over ended up being extraordinarily effective and has frequently empowered guys and women much like me to reach their pursuits. Your invaluable recommendations implies this much to me and somewhat more to my fellow workers. Regards; from each one of us.

    Reply
  8. birkin bag Posted On

    Youre so cool! I dont suppose Ive learn something like this before. So good to find someone with some original ideas on this subject. realy thanks for beginning this up. this website is something that’s wanted on the web, somebody with a little originality. useful job for bringing something new to the web!

    Reply
  9. Adidas NMD Men Women Mesh Surface Black Fishing Net Posted On

    My husband and i were happy when Emmanuel managed to conclude his inquiry through the precious recommendations he made from your own weblog. It is now and again perplexing just to choose to be handing out facts that many some others have been selling. Therefore we recognize we need you to give thanks to because of that. All the explanations you’ve made, the simple web site menu, the friendships your site help engender – it’s got all incredible, and it’s assisting our son in addition to the family know that that idea is excellent, and that’s especially serious. Many thanks for all the pieces!

    Reply
  10. yeezy shoes Posted On

    The following time I read a weblog, I hope that it doesnt disappoint me as much as this one. I imply, I do know it was my choice to learn, however I truly thought youd have one thing fascinating to say. All I hear is a bunch of whining about something that you may repair if you happen to werent too busy in search of attention.

    Reply
  11. yeezy Posted On

    I used to be very pleased to search out this web-site.I wished to thanks on your time for this excellent read!! I positively enjoying every little bit of it and I’ve you bookmarked to check out new stuff you weblog post.

    Reply
  12. yeezy boost Posted On

    My wife and i were absolutely delighted that Michael could do his survey with the ideas he had from your web site. It is now and again perplexing to just continually be offering procedures that some others might have been making money from. And we all acknowledge we need you to be grateful to for this. Most of the illustrations you’ve made, the straightforward website menu, the friendships you can help foster – it’s got mostly great, and it’s really letting our son and the family feel that this situation is amusing, and that’s tremendously mandatory. Thank you for the whole lot!

    Reply
  13. nike roshe one Posted On

    Can I simply say what a reduction to search out someone who truly is aware of what theyre talking about on the internet. You positively know learn how to carry an issue to light and make it important. Extra people need to learn this and understand this side of the story. I cant believe youre not more popular since you definitely have the gift.

    Reply
  14. yeezys Posted On

    I as well as my buddies happened to be looking through the best thoughts located on your website then at once I got a terrible suspicion I had not thanked the web site owner for those strategies. My guys were definitely for this reason glad to read them and have now certainly been loving them. We appreciate you really being considerably kind as well as for opting for such marvelous themes most people are really desperate to discover. My sincere regret for not saying thanks to you earlier.

    Reply
  15. adidas nmd Posted On

    I have to express my thanks to you just for rescuing me from such a problem. As a result of researching through the the net and seeing ways which were not productive, I was thinking my life was gone. Existing without the presence of solutions to the issues you’ve fixed through the posting is a critical case, as well as the ones that could have badly affected my entire career if I had not come across your web page. The talents and kindness in controlling all things was excellent. I don’t know what I would’ve done if I had not come upon such a point like this. It’s possible to at this moment look forward to my future. Thank you so much for this impressive and amazing guide. I will not be reluctant to propose your site to any person who should receive guidelines on this subject matter.

    Reply
  16. air jordan 13 Posted On

    I’m often to running a blog and i actually appreciate your content. The article has really peaks my interest. I’m going to bookmark your web site and keep checking for new information.

    Reply
  17. jordan 11 retro Posted On

    There are some interesting deadlines in this article however I don抰 know if I see all of them middle to heart. There is some validity however I’ll take hold opinion until I look into it further. Good article , thanks and we want extra! Added to FeedBurner as well

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *