<!--
{% comment %}
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.
{% endcomment %}
-->

<!-- Hero -->
<section class="full-stripe full-stripe--video">
  <!-- content -->
  <div class="ml-container ml-container--horizontally-center ml-container--halfway">
    <div class="col col-12 content-group">
      <h1>{{ site.data.project.name }}</h1>
      <p>An open source ML system for the end-to-end data science lifecycle</p>
    </div>
    <div class="col col-12 content-group button-group">
      <a class="button button-primary" href="download.html">Download SystemDS</a>
    </div>
  </div>
  <!-- video background  -->
  <video autoplay loop src="assets/media/hero.mp4" id="video-background"></video>
</section>


<!-- Announcements Banner -->
<section class="full-stripe full-stripe--alternate">
  <div class="ml-container ml-container--narrow">
    <div class="col-4" id="award">
    </div>
    <div class="col-8">
      <h3>SystemML is now SystemDS</h3>
      <p>To reflect the change of focus to the end-to-end data science lifecycle
    </div>
  </div>
</section>

<!-- About -->
<section class="full-stripe">
  <div class="ml-container ml-container--vertically-top ml-container--reverse-order">
    <div class="col col-6 content-group">
      <img src="/assets/img/diagramAnim-v4.gif" alt="What is Apache SystemDS?">
    </div>
    <div class="col col-6 content-group content-group--more-padding">
      <!-- bdi tag prevents reverse punctuation when rtl direction property is applied -->
      <h2><bdi>What is SystemDS?</bdi></h2>
      <p>SystemDS is an open source ML system for the end-to-end data science lifecycle from
        data integration, cleaning, and feature engineering, over efficient, local and distributed
        ML model training, to deployment and serving. To this end, it provides a stack of declarative
        languages with R-like syntax for (1) the different tasks of the data-science lifecycle, and
        (2) users with different expertise. These high-level scripts are compiled into hybrid execution
        plans of local, in-memory CPU and GPU operations, as well as distributed operations on Apache Spark
      </p>
    </div>
  </div>
</section>

<!-- BGet Started -->
<section class="full-stripe full-stripe--alternate">
  <div class="ml-container ml-container--vertically-centered">
    <div class="col col-6 content-group content-group--more-padding">
      <img src="/assets/img/robotTutorialSm.png" alt="What is Apache SystemDS?">
    </div>
    <div class="col col-6 content-group content-group--more-padding button-group">
      <h2>Install SystemDS</h2>
      <p>New to Apache SystemDS? Try our quick install guide that will walk you through setting up your environment and
        getting you up and going with SystemDS.</p>
      <a class="button button-primary" href="{{ site.data.project.docs }}site/install">Install SystemDS</a>
      <!-- <a class="button button-secondary" href="get-started.html#sample-notebook">Notebooks</a> -->
      <a class="button button-secondary" href="documentation.html" target="_blank">Docs</a>
    </div>
  </div>

</section>

<!-- Awards -->
<!-- <section class="full-stripe full-stripe--alternate-2">
  <div class="ml-container ml-container--narrow">
    <div class="col col-4 content-group content-group--center-content vldb2016"></div>
    <div class="col col-8 content-group content-group--center-align content-group--center-content">
      <h3>VLDB 2016 Best Paper</h3>
      <p>Read Compressed Linear Algebra for Large-Scale Machine Learning.<a
          href="http://www.vldb.org/pvldb/vol9/p960-elgohary.pdf" target="_blank"> Download Paper</a></p>
    </div>
  </div>
</section> -->

<!-- Contact Us -->
<section class="full-stripe">
  <div class="ml-container ml-container--horizontally-center">
    <div class="col col-12 content-group ">
      <h2>Contribute</h2>
      <p>Contribute to Apache SystemDS<sup>TM</sup> by subscribing to our developer mailing list for updates and news.
        Check out <a href="community.html#mailing-list">All Mailing Lists</a>.
      </p>
    </div>
    <div class="col col-12 content-group button-group">
      <a href="mailto:{{ site.data.project.dev_list_subscribe }}?subject=send this email to subscribe"
        class="button button-primary">Subscribe</a>
      <a href="{{ site.data.project.dev_list_archive }}" target="_blank" class="button button-secondary">View
        Archive</a>
      <a href="/roadmap" target="_blank" class="button button-secondary">Roadmap</a>
    </div>
  </div>
</section>

<!-- Social Media Icons -->
<section class="full-stripe full-stripe--alternate">
  <div class="ml-container">
    <div class="col col-12 content-group content-group--center-content content-group--center-align">
      <h2>Follow Us</h2>
    </div>
    <div class="col col-12">
      <ul class="link-list bullet-pointless">
        <li><a class="icon icon-github" href="{{ site.data.project.source_repository_mirror }}" target="_blank"></a>
        </li>
        <li><a class="icon icon-twitter" href="https://twitter.com/ApacheSystemDS" target="_blank"></a></li>
      </ul>
    </div>
  </div>
</section>
