retrieve_password() public static method

Based on retrieve_password() in core wp-login.php.
public static retrieve_password ( ) : boolean
return boolean True: when finish. False: on error
 /**
  * Handle lost password form
  */
 public static function process_lost_password()
 {
     if (isset($_POST['wc_reset_password']) && isset($_POST['user_login']) && isset($_POST['_wpnonce']) && wp_verify_nonce($_POST['_wpnonce'], 'lost_password')) {
         WC_Shortcode_My_Account::retrieve_password();
     }
 }
 /**
  * Handle lost password form.
  */
 public static function process_lost_password()
 {
     if (isset($_POST['wc_reset_password']) && isset($_POST['user_login']) && isset($_POST['_wpnonce']) && wp_verify_nonce($_POST['_wpnonce'], 'lost_password')) {
         $success = WC_Shortcode_My_Account::retrieve_password();
         // If successful, redirect to my account with query arg set
         if ($success) {
             wp_redirect(add_query_arg('reset-link-sent', 'true', remove_query_arg(array('key', 'login', 'reset'))));
             exit;
         }
     }
 }
 /**
  * Handle reset password form
  */
 public function process_reset_password()
 {
     if (!isset($_POST['wc_reset_password'])) {
         return;
     }
     // process lost password form
     if (isset($_POST['user_login']) && isset($_POST['_wpnonce'])) {
         wp_verify_nonce($_POST['_wpnonce'], 'woocommerce-lost_password');
         WC_Shortcode_My_Account::retrieve_password();
     }
     // process reset password form
     if (isset($_POST['password_1']) && isset($_POST['password_2']) && isset($_POST['reset_key']) && isset($_POST['reset_login']) && isset($_POST['_wpnonce'])) {
         // verify reset key again
         $user = WC_Shortcode_My_Account::check_password_reset_key($_POST['reset_key'], $_POST['reset_login']);
         if (is_object($user)) {
             // save these values into the form again in case of errors
             $args['key'] = wc_clean($_POST['reset_key']);
             $args['login'] = wc_clean($_POST['reset_login']);
             wp_verify_nonce($_POST['_wpnonce'], 'woocommerce-reset_password');
             if (empty($_POST['password_1']) || empty($_POST['password_2'])) {
                 wc_add_notice(__('Please enter your password.', 'woocommerce'), 'error');
                 $args['form'] = 'reset_password';
             }
             if ($_POST['password_1'] !== $_POST['password_2']) {
                 wc_add_notice(__('Passwords do not match.', 'woocommerce'), 'error');
                 $args['form'] = 'reset_password';
             }
             $errors = new WP_Error();
             do_action('validate_password_reset', $errors, $user);
             if ($errors->get_error_messages()) {
                 foreach ($errors->get_error_messages() as $error) {
                     wc_add_notice($error, 'error');
                 }
             }
             if (0 == wc_notice_count('error')) {
                 WC_Shortcode_My_Account::reset_password($user, $_POST['password_1']);
                 do_action('woocommerce_customer_reset_password', $user);
                 wp_redirect(add_query_arg('reset', 'true', remove_query_arg(array('key', 'login'))));
                 exit;
             }
         }
     }
 }