diff --git a/demo/MMVC_Trainer/LICENSE b/demo/MMVC_Trainer/LICENSE
new file mode 100755
index 00000000..9b1a65c9
--- /dev/null
+++ b/demo/MMVC_Trainer/LICENSE
@@ -0,0 +1,43 @@
+MIT License
+
+Copyright (c) 2022 Isle Tennos
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+MIT License
+
+Copyright (c) 2021 Jaehyeon Kim
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/demo/MMVC_Trainer/README.md b/demo/MMVC_Trainer/README.md
new file mode 100755
index 00000000..d3c4aef7
--- /dev/null
+++ b/demo/MMVC_Trainer/README.md
@@ -0,0 +1,220 @@
+MMVC_Trainer
+====
+
+AIを使ったリアルタイムボイスチェンジャーのモデル学習用ツール
+
+## Description
+AIを使ったリアルタイムボイスチェンジャー「MMVC(RealTime-Many to Many Voice Conversion)」
+で使用するモデルを学習するためのリポジトリです。
+google colaboratoryを用いることで、個人の環境に依存せず、かつ簡単に機械学習の学習フェーズを実行可能です。
+## MMVC_Client
+MMVCを実際に動かすClient software
+https://github.com/isletennos/MMVC_Client
+## concept
+「簡単」「だれでも」「好きな声に」「リアルタイムで」
+## Demo
+制作中 (v1.3.0.0)
+https://www.nicovideo.jp/watch/sm40386035 (v1.2.0.0)
+
+## MMVCの利用規約 及び MMVC用音源の配布先(2022/08/10)
+本ソフトウェアの利用規約は基本的にMITライセンスに準拠します。
+1. このソフトウェアは、コピー利用、配布、変更の追加、変更を加えたもの再配布、商用利用、有料販売など
+どなたでも自由にお使いいただくことができます。
+2. ライセンスの記載が可能なプラットフォームでの利用の場合、下記クレジットどちらかををご利用ください。
+**VRCでの利用などライセンス記載が不可の場合、記載は不要です。**
+(可能であればパターン2を使ってくれると製作者はうれしいです)
+3. このソフトウェアについて、製作者はいかなる保証も致しません。
+また、このソフトウェアを利用したことで問題が起きた際に、ソフトウェアの製作者は一切の責任を負いません。
+4. このソフトウェアで利用する音声データは、必ず元の音声データの所持者の許諾を得たものを利用すること。
+または音声データの配布元の利用規約内で利用すること。
+
+### MMVC公式配布の音声データの利用規約とダウンロード先について
+MMVCの利用規約とは別に、下記音声データを利用する場合、それぞれの音声ライブラリ提供者様の利用規約に同意する必要があります。
+※本ソフトウェアでは下記企業様・団体様に特別に許可を頂き、音声データを本ソフトウェア用に改変、再配布を行っております。
+#### SSS LLC.
+[[利用規約](https://zunko.jp/guideline.html)][[ずんだもん 音声データ](https://drive.google.com/file/d/1h8Ajyvoig7Hl3LSSt2vYX0sUHX3JDF3R/view?usp=sharing)] ※本ソフトウェアに同梱しているものと同様の音声データになります
+[[利用規約](https://zunko.jp/guideline.html)][[九州そら 音声データ](https://drive.google.com/file/d/1MXfMRG_sjbsaLihm7wEASG2PwuCponZF/view?usp=sharing)]
+[[利用規約](https://zunko.jp/guideline.html)][[四国めたん 音声データ](https://drive.google.com/file/d/1iCrpzhqXm-0YdktOPM8M1pMtgQIDF3r4/view?usp=sharing)]
+#### 春日部つむぎプロジェクト様
+[[利用規約](https://tsumugi-official.studio.site/rule)][[春日部つむぎ 音声データ](https://drive.google.com/file/d/14zE0F_5ZCQWXf6m6SUPF5Y3gpL6yb7zk/view?usp=sharing)]
+
+### ライセンス表記について
+ずんだもん/四国めたん/九州そら/春日部つむぎ
+の3キャラクターを利用する場合に限り、下記ライセンスパターンに加えて、どのツールで作られた音声かわかるように
+```
+MMVC:ずんだもん
+MMVC:ずんだもん/四国めたん
+```
+等の記載を下記ライセンスパターンと一緒に記載ください。
+こちらも**VRCでの利用などライセンス記載が不可の場合、記載は不要です。**
+
+ライセンスパターン 1
+```
+Copyright (c) 2022 Isle.Tennos
+Released under the MIT license
+https://opensource.org/licenses/mit-license.php
+```
+
+ライセンスパターン 2
+```
+MMVCv1.x.x.x(使用バージョン)
+Copyright (c) 2022 Isle.Tennos
+Released under the MIT license
+https://opensource.org/licenses/mit-license.php
+git:https://github.com/isletennos/MMVC_Trainer
+community(discord):https://discord.gg/PgspuDSTEc
+```
+## Requirement
+・Google アカウント
+## Install
+このリポジトリをダウンロードして、展開、展開したディレクトリをgoogle drive上にアップロードしてください。
+## Usage
+### チュートリアル : ずんだもんになる
+本チュートリアルではずんだもん(SSS LLC.)の音声データを利用します。
+そのため、MMVCの利用規約とは別に[[ずんだもん 利用規約](https://zunko.jp/guideline.html)]を遵守する必要があります。
+#### Ph1. 自分の音声の録音と音声データの配置
+1. 自分の声の音声データを録音します。
+JVSコーパスやITAコーパス等を台本にし、100文程度読み上げます。
+また、録音した音声は**24000Hz 16bit 1ch**である必要があります。
+※MMVC用にテキストを分割したITAコーパスです。ご利用ください。
+https://drive.google.com/file/d/14oXoQqLxRkP8NJK8qMYGee1_q2uEED1z/view?usp=sharing
+
+2. dataset/textful/000_myvoice に音声データとテキストデータを配置します。
+最終的に下記のようなディレクトリ構成になります。
+```
+dataset
+├── textful
+│ ├── 000_myvoice
+│ │ ├── text
+│ │ │ ├── s_voice_001.txt
+│ │ │ ├── s_voice_002.txt
+│ │ │ ├── ...
+│ │ └── wav
+│ │ ├── s_voice_001.wav
+│ │ ├── s_voice_002.wav
+│ │ ├── ...
+│ │── 001_target
+│ │ ├── text
+│ │ └── wav
+│ │
+│ └── 1205_zundamon
+│ ├── text
+│ │ ├── t_voice_001.txt
+│ │ ├── t_voice_002.txt
+│ │ ├── ...
+│ └── wav
+│ ├── t_voice_001.wav
+│ ├── t_voice_002.wav
+│ ├── ...
+│
+└── textless
+```
+
+#### Ph2. モデルの学習方法
+1. 下記リンクより、「G_180000.pth」「D_180000.pth」をダウンロード。
+https://drive.google.com/drive/folders/1vXdL1zSrgsuyACMkiTUtVbHgpMSA1Y5I?usp=sharing
+2. 「G_180000.pth」「D_180000.pth」をfine_modelに配置します。**(良く忘れるポイントなので要注意!)**
+3. notebookディレクトリにある「Create_Configfile_zundamon.ipynb」をgoogle colab 上で実行、学習に必要なconfigファイルを作成します
+4. configsに作成されたtrain_config_zundamon.jsonの
+
+ - "eval_interval"
+ modelを保存する間隔です。
+ - "batch_size"
+ colabで割り当てたGPUに合わせて調整してください。
+
+ 上記2項目を環境に応じて最適化してください。わからない方はそのままで大丈夫です。
+
+5. notebookディレクトリにある「Train_MMVC.ipynb」をgoogle colab 上で実行してください。
+ logs/にモデルが生成されます。
+
+#### Ph3. 学習したモデルの性能検証
+1. notebookディレクトリにある「MMVC_Interface.ipynb」をgoogle colab 上で実行してください。
+### 好きなキャラクターの声になる
+#### Ph1. 自分の音声の録音と音声データの配置 及びターゲット音声データの配置
+1. 自分の声の音声データとその音声データに対応するテキスト、変換したい声の音声データとその音声データに対応するテキストを用意します。
+この時、用意する音声(自分の声の音声データ/変換したい声の音声データ共に)は**24000Hz 16bit 1ch**を強く推奨しております。
+2. 下記のようなディレクトリ構成になるように音声データとテキストデータを配置します。
+ textfulの直下には2ディレクトリになります。
+ (1205_zundamonディレクトリは無くても問題ありません)
+
+```
+dataset
+├── textful
+│ ├── 000_myvoice
+│ │ ├── text
+│ │ │ ├── s_voice_001.txt
+│ │ │ ├── s_voice_002.txt
+│ │ │ ├── ...
+│ │ └── wav
+│ │ ├── s_voice_001.wav
+│ │ ├── s_voice_002.wav
+│ │ ├── ...
+│ │── 001_target
+│ │ ├── text
+│ │ │ ├── t_voice_001.txt
+│ │ │ ├── t_voice_002.txt
+│ │ │ ├── ...
+│ │ └── wav
+│ │ ├── t_voice_001.wav
+│ │ ├── t_voice_002.wav
+│ │ ├── ...
+│ └── 1205_zundamon
+│ ├── text
+│ │ ├── t_voice_001.txt
+│ │ ├── t_voice_002.txt
+│ │ ├── ...
+│ └── wav
+│ ├── t_voice_001.wav
+│ ├── t_voice_002.wav
+│ ├── ...
+│
+└── textless
+```
+#### Ph2. モデルの学習方法
+以降、「チュートリアル : ずんだもんになる Ph2.」と同様のため割愛
+#### Ph3. 学習したモデルの性能検証
+以降、「チュートリアル : ずんだもんになる Ph3.」と同様のため割愛
+## 有志によるチュートリアル動画
+### v1.2.1.x
+| 前準備編 | [ニコニコ動画](https://www.nicovideo.jp/watch/sm40415108) | [YouTube](https://www.youtube.com/watch?v=gq1Hpn5CARw&ab_channel=popi) |
+|:--------------|:------------|:------------|
+| 要修正音声 | [ニコニコ動画](https://www.nicovideo.jp/watch/sm40420683)| [YouTube](https://youtu.be/NgzC7Nuk6gg) |
+| 前準備編2 | [ニコニコ動画](https://www.nicovideo.jp/watch/sm40445164)| [YouTube](https://youtu.be/m4Jew7sTs9w)
+| 学習編_前1 | [ニコニコ動画](https://www.nicovideo.jp/watch/sm40467662)| [YouTube](https://youtu.be/HRSPEy2jUvg)
+| 学習編_前2 | [ニコニコ動画](https://www.nicovideo.jp/watch/sm40473168)| [YouTube](https://youtu.be/zQW59vrOSuA)
+| 学習編_後 | [ニコニコ動画](https://www.nicovideo.jp/watch/sm40490554)| [YouTube](https://www.youtube.com/watch?v=uB3YfdKzo-g&ab_channel=popi)
+| リアルタイム編 | [ニコニコ動画](https://www.nicovideo.jp/watch/sm40415108)| [YouTube](https://youtu.be/Al5DFCvKLFA)
+| 質問編 | [ニコニコ動画](https://www.nicovideo.jp/watch/sm40599514)| [YouTube](https://youtu.be/aGBcqu5M6-c)
+| 応用編_九州そら| [ニコニコ動画](https://www.nicovideo.jp/watch/sm40647601)| [YouTube](https://youtu.be/MEXKZoHVd-A)
+| 応用編_音街ウナ| [ニコニコ動画](https://www.nicovideo.jp/watch/sm40714406)| [YouTube](https://youtu.be/JDMlRz-PkSE)
+
+## Q&A
+下記サイトをご参考ください。
+https://mmvc.readthedocs.io/ja/latest/index.html
+## MMVCコミュニティサーバ(discord)
+開発の最新情報や、不明点のお問合せ、MMVCの活用法などMMVCに関するコミュニティサーバです。
+https://discord.gg/PgspuDSTEc
+
+## Special thanks
+- JVS (Japanese versatile speech) corpus
+ contributors : 高道 慎之介様/三井 健太郎様/齋藤 佑樹様/郡山 知樹様/丹治 尚子様/猿渡 洋様
+ https://sites.google.com/site/shinnosuketakamichi/research-topics/jvs_corpus
+
+- ITAコーパス マルチモーダルデータベース
+ contributors : 金井郁也様/千葉隆壱様/齊藤剛史様/森勢将雅様/小口純矢様/能勢隆様/尾上真惟子様/小田恭央様
+ CharacterVoice : 東北イタコ(木戸衣吹様)/ずんだもん(伊藤ゆいな様)/四国めたん(田中小雪様)/九州そら(西田望見)
+ https://zunko.jp/multimodal_dev/login.php
+
+- つくよみちゃんコーパス
+ contributor : 夢前黎様
+ CharacterVoice : つくよみちゃん(夢前黎様)
+ https://tyc.rei-yumesaki.net/material/corpus/
+
+## Reference
+https://arxiv.org/abs/2106.06103
+https://github.com/jaywalnut310/vits
+
+## Author
+Isle Tennos
+Twitter : https://twitter.com/IsleTennos
+
diff --git a/demo/MMVC_Trainer/attentions.py b/demo/MMVC_Trainer/attentions.py
new file mode 100755
index 00000000..4e0b0c1f
--- /dev/null
+++ b/demo/MMVC_Trainer/attentions.py
@@ -0,0 +1,303 @@
+import copy
+import math
+import numpy as np
+import torch
+from torch import nn
+from torch.nn import functional as F
+
+import commons
+import modules
+from modules import LayerNorm
+
+
+class Encoder(nn.Module):
+ def __init__(self, hidden_channels, filter_channels, n_heads, n_layers, kernel_size=1, p_dropout=0., window_size=4, **kwargs):
+ super().__init__()
+ self.hidden_channels = hidden_channels
+ self.filter_channels = filter_channels
+ self.n_heads = n_heads
+ self.n_layers = n_layers
+ self.kernel_size = kernel_size
+ self.p_dropout = p_dropout
+ self.window_size = window_size
+
+ self.drop = nn.Dropout(p_dropout)
+ self.attn_layers = nn.ModuleList()
+ self.norm_layers_1 = nn.ModuleList()
+ self.ffn_layers = nn.ModuleList()
+ self.norm_layers_2 = nn.ModuleList()
+ for i in range(self.n_layers):
+ self.attn_layers.append(MultiHeadAttention(hidden_channels, hidden_channels, n_heads, p_dropout=p_dropout, window_size=window_size))
+ self.norm_layers_1.append(LayerNorm(hidden_channels))
+ self.ffn_layers.append(FFN(hidden_channels, hidden_channels, filter_channels, kernel_size, p_dropout=p_dropout))
+ self.norm_layers_2.append(LayerNorm(hidden_channels))
+
+ def forward(self, x, x_mask):
+ attn_mask = x_mask.unsqueeze(2) * x_mask.unsqueeze(-1)
+ x = x * x_mask
+ for i in range(self.n_layers):
+ y = self.attn_layers[i](x, x, attn_mask)
+ y = self.drop(y)
+ x = self.norm_layers_1[i](x + y)
+
+ y = self.ffn_layers[i](x, x_mask)
+ y = self.drop(y)
+ x = self.norm_layers_2[i](x + y)
+ x = x * x_mask
+ return x
+
+
+class Decoder(nn.Module):
+ def __init__(self, hidden_channels, filter_channels, n_heads, n_layers, kernel_size=1, p_dropout=0., proximal_bias=False, proximal_init=True, **kwargs):
+ super().__init__()
+ self.hidden_channels = hidden_channels
+ self.filter_channels = filter_channels
+ self.n_heads = n_heads
+ self.n_layers = n_layers
+ self.kernel_size = kernel_size
+ self.p_dropout = p_dropout
+ self.proximal_bias = proximal_bias
+ self.proximal_init = proximal_init
+
+ self.drop = nn.Dropout(p_dropout)
+ self.self_attn_layers = nn.ModuleList()
+ self.norm_layers_0 = nn.ModuleList()
+ self.encdec_attn_layers = nn.ModuleList()
+ self.norm_layers_1 = nn.ModuleList()
+ self.ffn_layers = nn.ModuleList()
+ self.norm_layers_2 = nn.ModuleList()
+ for i in range(self.n_layers):
+ self.self_attn_layers.append(MultiHeadAttention(hidden_channels, hidden_channels, n_heads, p_dropout=p_dropout, proximal_bias=proximal_bias, proximal_init=proximal_init))
+ self.norm_layers_0.append(LayerNorm(hidden_channels))
+ self.encdec_attn_layers.append(MultiHeadAttention(hidden_channels, hidden_channels, n_heads, p_dropout=p_dropout))
+ self.norm_layers_1.append(LayerNorm(hidden_channels))
+ self.ffn_layers.append(FFN(hidden_channels, hidden_channels, filter_channels, kernel_size, p_dropout=p_dropout, causal=True))
+ self.norm_layers_2.append(LayerNorm(hidden_channels))
+
+ def forward(self, x, x_mask, h, h_mask):
+ """
+ x: decoder input
+ h: encoder output
+ """
+ self_attn_mask = commons.subsequent_mask(x_mask.size(2)).to(device=x.device, dtype=x.dtype)
+ encdec_attn_mask = h_mask.unsqueeze(2) * x_mask.unsqueeze(-1)
+ x = x * x_mask
+ for i in range(self.n_layers):
+ y = self.self_attn_layers[i](x, x, self_attn_mask)
+ y = self.drop(y)
+ x = self.norm_layers_0[i](x + y)
+
+ y = self.encdec_attn_layers[i](x, h, encdec_attn_mask)
+ y = self.drop(y)
+ x = self.norm_layers_1[i](x + y)
+
+ y = self.ffn_layers[i](x, x_mask)
+ y = self.drop(y)
+ x = self.norm_layers_2[i](x + y)
+ x = x * x_mask
+ return x
+
+
+class MultiHeadAttention(nn.Module):
+ def __init__(self, channels, out_channels, n_heads, p_dropout=0., window_size=None, heads_share=True, block_length=None, proximal_bias=False, proximal_init=False):
+ super().__init__()
+ assert channels % n_heads == 0
+
+ self.channels = channels
+ self.out_channels = out_channels
+ self.n_heads = n_heads
+ self.p_dropout = p_dropout
+ self.window_size = window_size
+ self.heads_share = heads_share
+ self.block_length = block_length
+ self.proximal_bias = proximal_bias
+ self.proximal_init = proximal_init
+ self.attn = None
+
+ self.k_channels = channels // n_heads
+ self.conv_q = nn.Conv1d(channels, channels, 1)
+ self.conv_k = nn.Conv1d(channels, channels, 1)
+ self.conv_v = nn.Conv1d(channels, channels, 1)
+ self.conv_o = nn.Conv1d(channels, out_channels, 1)
+ self.drop = nn.Dropout(p_dropout)
+
+ if window_size is not None:
+ n_heads_rel = 1 if heads_share else n_heads
+ rel_stddev = self.k_channels**-0.5
+ self.emb_rel_k = nn.Parameter(torch.randn(n_heads_rel, window_size * 2 + 1, self.k_channels) * rel_stddev)
+ self.emb_rel_v = nn.Parameter(torch.randn(n_heads_rel, window_size * 2 + 1, self.k_channels) * rel_stddev)
+
+ nn.init.xavier_uniform_(self.conv_q.weight)
+ nn.init.xavier_uniform_(self.conv_k.weight)
+ nn.init.xavier_uniform_(self.conv_v.weight)
+ if proximal_init:
+ with torch.no_grad():
+ self.conv_k.weight.copy_(self.conv_q.weight)
+ self.conv_k.bias.copy_(self.conv_q.bias)
+
+ def forward(self, x, c, attn_mask=None):
+ q = self.conv_q(x)
+ k = self.conv_k(c)
+ v = self.conv_v(c)
+
+ x, self.attn = self.attention(q, k, v, mask=attn_mask)
+
+ x = self.conv_o(x)
+ return x
+
+ def attention(self, query, key, value, mask=None):
+ # reshape [b, d, t] -> [b, n_h, t, d_k]
+ b, d, t_s, t_t = (*key.size(), query.size(2))
+ query = query.view(b, self.n_heads, self.k_channels, t_t).transpose(2, 3)
+ key = key.view(b, self.n_heads, self.k_channels, t_s).transpose(2, 3)
+ value = value.view(b, self.n_heads, self.k_channels, t_s).transpose(2, 3)
+
+ scores = torch.matmul(query / math.sqrt(self.k_channels), key.transpose(-2, -1))
+ if self.window_size is not None:
+ assert t_s == t_t, "Relative attention is only available for self-attention."
+ key_relative_embeddings = self._get_relative_embeddings(self.emb_rel_k, t_s)
+ rel_logits = self._matmul_with_relative_keys(query /math.sqrt(self.k_channels), key_relative_embeddings)
+ scores_local = self._relative_position_to_absolute_position(rel_logits)
+ scores = scores + scores_local
+ if self.proximal_bias:
+ assert t_s == t_t, "Proximal bias is only available for self-attention."
+ scores = scores + self._attention_bias_proximal(t_s).to(device=scores.device, dtype=scores.dtype)
+ if mask is not None:
+ scores = scores.masked_fill(mask == 0, -1e4)
+ if self.block_length is not None:
+ assert t_s == t_t, "Local attention is only available for self-attention."
+ block_mask = torch.ones_like(scores).triu(-self.block_length).tril(self.block_length)
+ scores = scores.masked_fill(block_mask == 0, -1e4)
+ p_attn = F.softmax(scores, dim=-1) # [b, n_h, t_t, t_s]
+ p_attn = self.drop(p_attn)
+ output = torch.matmul(p_attn, value)
+ if self.window_size is not None:
+ relative_weights = self._absolute_position_to_relative_position(p_attn)
+ value_relative_embeddings = self._get_relative_embeddings(self.emb_rel_v, t_s)
+ output = output + self._matmul_with_relative_values(relative_weights, value_relative_embeddings)
+ output = output.transpose(2, 3).contiguous().view(b, d, t_t) # [b, n_h, t_t, d_k] -> [b, d, t_t]
+ return output, p_attn
+
+ def _matmul_with_relative_values(self, x, y):
+ """
+ x: [b, h, l, m]
+ y: [h or 1, m, d]
+ ret: [b, h, l, d]
+ """
+ ret = torch.matmul(x, y.unsqueeze(0))
+ return ret
+
+ def _matmul_with_relative_keys(self, x, y):
+ """
+ x: [b, h, l, d]
+ y: [h or 1, m, d]
+ ret: [b, h, l, m]
+ """
+ ret = torch.matmul(x, y.unsqueeze(0).transpose(-2, -1))
+ return ret
+
+ def _get_relative_embeddings(self, relative_embeddings, length):
+ max_relative_position = 2 * self.window_size + 1
+ # Pad first before slice to avoid using cond ops.
+ pad_length = max(length - (self.window_size + 1), 0)
+ slice_start_position = max((self.window_size + 1) - length, 0)
+ slice_end_position = slice_start_position + 2 * length - 1
+ if pad_length > 0:
+ padded_relative_embeddings = F.pad(
+ relative_embeddings,
+ commons.convert_pad_shape([[0, 0], [pad_length, pad_length], [0, 0]]))
+ else:
+ padded_relative_embeddings = relative_embeddings
+ used_relative_embeddings = padded_relative_embeddings[:,slice_start_position:slice_end_position]
+ return used_relative_embeddings
+
+ def _relative_position_to_absolute_position(self, x):
+ """
+ x: [b, h, l, 2*l-1]
+ ret: [b, h, l, l]
+ """
+ batch, heads, length, _ = x.size()
+ # Concat columns of pad to shift from relative to absolute indexing.
+ x = F.pad(x, commons.convert_pad_shape([[0,0],[0,0],[0,0],[0,1]]))
+
+ # Concat extra elements so to add up to shape (len+1, 2*len-1).
+ x_flat = x.view([batch, heads, length * 2 * length])
+ x_flat = F.pad(x_flat, commons.convert_pad_shape([[0,0],[0,0],[0,length-1]]))
+
+ # Reshape and slice out the padded elements.
+ x_final = x_flat.view([batch, heads, length+1, 2*length-1])[:, :, :length, length-1:]
+ return x_final
+
+ def _absolute_position_to_relative_position(self, x):
+ """
+ x: [b, h, l, l]
+ ret: [b, h, l, 2*l-1]
+ """
+ batch, heads, length, _ = x.size()
+ # padd along column
+ x = F.pad(x, commons.convert_pad_shape([[0, 0], [0, 0], [0, 0], [0, length-1]]))
+ x_flat = x.view([batch, heads, length**2 + length*(length -1)])
+ # add 0's in the beginning that will skew the elements after reshape
+ x_flat = F.pad(x_flat, commons.convert_pad_shape([[0, 0], [0, 0], [length, 0]]))
+ x_final = x_flat.view([batch, heads, length, 2*length])[:,:,:,1:]
+ return x_final
+
+ def _attention_bias_proximal(self, length):
+ """Bias for self-attention to encourage attention to close positions.
+ Args:
+ length: an integer scalar.
+ Returns:
+ a Tensor with shape [1, 1, length, length]
+ """
+ r = torch.arange(length, dtype=torch.float32)
+ diff = torch.unsqueeze(r, 0) - torch.unsqueeze(r, 1)
+ return torch.unsqueeze(torch.unsqueeze(-torch.log1p(torch.abs(diff)), 0), 0)
+
+
+class FFN(nn.Module):
+ def __init__(self, in_channels, out_channels, filter_channels, kernel_size, p_dropout=0., activation=None, causal=False):
+ super().__init__()
+ self.in_channels = in_channels
+ self.out_channels = out_channels
+ self.filter_channels = filter_channels
+ self.kernel_size = kernel_size
+ self.p_dropout = p_dropout
+ self.activation = activation
+ self.causal = causal
+
+ if causal:
+ self.padding = self._causal_padding
+ else:
+ self.padding = self._same_padding
+
+ self.conv_1 = nn.Conv1d(in_channels, filter_channels, kernel_size)
+ self.conv_2 = nn.Conv1d(filter_channels, out_channels, kernel_size)
+ self.drop = nn.Dropout(p_dropout)
+
+ def forward(self, x, x_mask):
+ x = self.conv_1(self.padding(x * x_mask))
+ if self.activation == "gelu":
+ x = x * torch.sigmoid(1.702 * x)
+ else:
+ x = torch.relu(x)
+ x = self.drop(x)
+ x = self.conv_2(self.padding(x * x_mask))
+ return x * x_mask
+
+ def _causal_padding(self, x):
+ if self.kernel_size == 1:
+ return x
+ pad_l = self.kernel_size - 1
+ pad_r = 0
+ padding = [[0, 0], [0, 0], [pad_l, pad_r]]
+ x = F.pad(x, commons.convert_pad_shape(padding))
+ return x
+
+ def _same_padding(self, x):
+ if self.kernel_size == 1:
+ return x
+ pad_l = (self.kernel_size - 1) // 2
+ pad_r = self.kernel_size // 2
+ padding = [[0, 0], [0, 0], [pad_l, pad_r]]
+ x = F.pad(x, commons.convert_pad_shape(padding))
+ return x
diff --git a/demo/MMVC_Trainer/commons.py b/demo/MMVC_Trainer/commons.py
new file mode 100755
index 00000000..9ad0444b
--- /dev/null
+++ b/demo/MMVC_Trainer/commons.py
@@ -0,0 +1,161 @@
+import math
+import numpy as np
+import torch
+from torch import nn
+from torch.nn import functional as F
+
+
+def init_weights(m, mean=0.0, std=0.01):
+ classname = m.__class__.__name__
+ if classname.find("Conv") != -1:
+ m.weight.data.normal_(mean, std)
+
+
+def get_padding(kernel_size, dilation=1):
+ return int((kernel_size*dilation - dilation)/2)
+
+
+def convert_pad_shape(pad_shape):
+ l = pad_shape[::-1]
+ pad_shape = [item for sublist in l for item in sublist]
+ return pad_shape
+
+
+def intersperse(lst, item):
+ result = [item] * (len(lst) * 2 + 1)
+ result[1::2] = lst
+ return result
+
+
+def kl_divergence(m_p, logs_p, m_q, logs_q):
+ """KL(P||Q)"""
+ kl = (logs_q - logs_p) - 0.5
+ kl += 0.5 * (torch.exp(2. * logs_p) + ((m_p - m_q)**2)) * torch.exp(-2. * logs_q)
+ return kl
+
+
+def rand_gumbel(shape):
+ """Sample from the Gumbel distribution, protect from overflows."""
+ uniform_samples = torch.rand(shape) * 0.99998 + 0.00001
+ return -torch.log(-torch.log(uniform_samples))
+
+
+def rand_gumbel_like(x):
+ g = rand_gumbel(x.size()).to(dtype=x.dtype, device=x.device)
+ return g
+
+
+def slice_segments(x, ids_str, segment_size=4):
+ ret = torch.zeros_like(x[:, :, :segment_size])
+ for i in range(x.size(0)):
+ idx_str = ids_str[i]
+ idx_end = idx_str + segment_size
+ ret[i] = x[i, :, idx_str:idx_end]
+ return ret
+
+
+def rand_slice_segments(x, x_lengths=None, segment_size=4):
+ b, d, t = x.size()
+ if x_lengths is None:
+ x_lengths = t
+ ids_str_max = x_lengths - segment_size + 1
+ ids_str = (torch.rand([b]).to(device=x.device) * ids_str_max).to(dtype=torch.long)
+ ret = slice_segments(x, ids_str, segment_size)
+ return ret, ids_str
+
+
+def get_timing_signal_1d(
+ length, channels, min_timescale=1.0, max_timescale=1.0e4):
+ position = torch.arange(length, dtype=torch.float)
+ num_timescales = channels // 2
+ log_timescale_increment = (
+ math.log(float(max_timescale) / float(min_timescale)) /
+ (num_timescales - 1))
+ inv_timescales = min_timescale * torch.exp(
+ torch.arange(num_timescales, dtype=torch.float) * -log_timescale_increment)
+ scaled_time = position.unsqueeze(0) * inv_timescales.unsqueeze(1)
+ signal = torch.cat([torch.sin(scaled_time), torch.cos(scaled_time)], 0)
+ signal = F.pad(signal, [0, 0, 0, channels % 2])
+ signal = signal.view(1, channels, length)
+ return signal
+
+
+def add_timing_signal_1d(x, min_timescale=1.0, max_timescale=1.0e4):
+ b, channels, length = x.size()
+ signal = get_timing_signal_1d(length, channels, min_timescale, max_timescale)
+ return x + signal.to(dtype=x.dtype, device=x.device)
+
+
+def cat_timing_signal_1d(x, min_timescale=1.0, max_timescale=1.0e4, axis=1):
+ b, channels, length = x.size()
+ signal = get_timing_signal_1d(length, channels, min_timescale, max_timescale)
+ return torch.cat([x, signal.to(dtype=x.dtype, device=x.device)], axis)
+
+
+def subsequent_mask(length):
+ mask = torch.tril(torch.ones(length, length)).unsqueeze(0).unsqueeze(0)
+ return mask
+
+
+@torch.jit.script
+def fused_add_tanh_sigmoid_multiply(input_a, input_b, n_channels):
+ n_channels_int = n_channels[0]
+ in_act = input_a + input_b
+ t_act = torch.tanh(in_act[:, :n_channels_int, :])
+ s_act = torch.sigmoid(in_act[:, n_channels_int:, :])
+ acts = t_act * s_act
+ return acts
+
+
+def convert_pad_shape(pad_shape):
+ l = pad_shape[::-1]
+ pad_shape = [item for sublist in l for item in sublist]
+ return pad_shape
+
+
+def shift_1d(x):
+ x = F.pad(x, convert_pad_shape([[0, 0], [0, 0], [1, 0]]))[:, :, :-1]
+ return x
+
+
+def sequence_mask(length, max_length=None):
+ if max_length is None:
+ max_length = length.max()
+ x = torch.arange(max_length, dtype=length.dtype, device=length.device)
+ return x.unsqueeze(0) < length.unsqueeze(1)
+
+
+def generate_path(duration, mask):
+ """
+ duration: [b, 1, t_x]
+ mask: [b, 1, t_y, t_x]
+ """
+ device = duration.device
+
+ b, _, t_y, t_x = mask.shape
+ cum_duration = torch.cumsum(duration, -1)
+
+ cum_duration_flat = cum_duration.view(b * t_x)
+ path = sequence_mask(cum_duration_flat, t_y).to(mask.dtype)
+ path = path.view(b, t_x, t_y)
+ path = path - F.pad(path, convert_pad_shape([[0, 0], [1, 0], [0, 0]]))[:, :-1]
+ path = path.unsqueeze(1).transpose(2,3) * mask
+ return path
+
+
+def clip_grad_value_(parameters, clip_value, norm_type=2):
+ if isinstance(parameters, torch.Tensor):
+ parameters = [parameters]
+ parameters = list(filter(lambda p: p.grad is not None, parameters))
+ norm_type = float(norm_type)
+ if clip_value is not None:
+ clip_value = float(clip_value)
+
+ total_norm = 0
+ for p in parameters:
+ param_norm = p.grad.data.norm(norm_type)
+ total_norm += param_norm.item() ** norm_type
+ if clip_value is not None:
+ p.grad.data.clamp_(min=-clip_value, max=clip_value)
+ total_norm = total_norm ** (1. / norm_type)
+ return total_norm
diff --git a/demo/MMVC_Trainer/configs/baseconfig.json b/demo/MMVC_Trainer/configs/baseconfig.json
new file mode 100755
index 00000000..69a5c268
--- /dev/null
+++ b/demo/MMVC_Trainer/configs/baseconfig.json
@@ -0,0 +1,110 @@
+{
+ "train": {
+ "log_interval": 1000,
+ "eval_interval": 2000,
+ "seed": 1234,
+ "epochs": 10000,
+ "learning_rate": 0.0002,
+ "betas": [
+ 0.8,
+ 0.99
+ ],
+ "eps": 1e-09,
+ "batch_size": 10,
+ "fp16_run": true,
+ "lr_decay": 0.999875,
+ "segment_size": 8192,
+ "init_lr_ratio": 1,
+ "warmup_epochs": 0,
+ "c_mel": 45,
+ "c_kl": 1.0
+ },
+ "data": {
+ "training_files": "filelists/dec_not_propagation_label_and_change_melspec_textful.txt",
+ "validation_files": "filelists/dec_not_propagation_label_and_change_melspec_textful_val.txt",
+ "training_files_notext": "filelists/dec_not_propagation_label_and_change_melspec_textless.txt",
+ "validation_files_notext": "filelists/dec_not_propagation_label_and_change_melspec_val_textless.txt",
+ "text_cleaners": [
+ "japanese_cleaners"
+ ],
+ "max_wav_value": 32768.0,
+ "sampling_rate": 24000,
+ "filter_length": 512,
+ "hop_length": 128,
+ "win_length": 512,
+ "n_mel_channels": 80,
+ "mel_fmin": 0.0,
+ "mel_fmax": null,
+ "add_blank": true,
+ "n_speakers": 110,
+ "cleaned_text": false
+ },
+ "model": {
+ "inter_channels": 192,
+ "hidden_channels": 192,
+ "filter_channels": 768,
+ "n_heads": 2,
+ "n_layers": 6,
+ "kernel_size": 3,
+ "p_dropout": 0.1,
+ "resblock": "1",
+ "resblock_kernel_sizes": [
+ 3,
+ 7,
+ 11
+ ],
+ "resblock_dilation_sizes": [
+ [
+ 1,
+ 3,
+ 5
+ ],
+ [
+ 1,
+ 3,
+ 5
+ ],
+ [
+ 1,
+ 3,
+ 5
+ ]
+ ],
+ "upsample_rates": [
+ 8,
+ 4,
+ 2,
+ 2
+ ],
+ "upsample_initial_channel": 512,
+ "upsample_kernel_sizes": [
+ 16,
+ 16,
+ 8,
+ 8
+ ],
+ "n_layers_q": 3,
+ "use_spectral_norm": false,
+ "n_flow": 8,
+ "gin_channels": 256
+ },
+ "others": {
+ "os_type": "linux"
+ },
+ "augmentation": {
+ "enable" : true,
+ "gain_p" : 0.5,
+ "min_gain_in_db" : -10,
+ "max_gain_in_db" : 10,
+ "time_stretch_p" : 0.5,
+ "min_rate" : 0.75,
+ "max_rate" : 1.25,
+ "pitch_shift_p" : 0.0,
+ "min_semitones" : -4.0,
+ "max_semitones" : 4.0,
+ "add_gaussian_noise_p" : 0.0,
+ "min_amplitude" : 0.001,
+ "max_amplitude" : 0.04,
+ "frequency_mask_p" : 0.0
+ }
+}
diff --git a/demo/MMVC_Trainer/create_dataset_jtalk.py b/demo/MMVC_Trainer/create_dataset_jtalk.py
new file mode 100755
index 00000000..e82d86cc
--- /dev/null
+++ b/demo/MMVC_Trainer/create_dataset_jtalk.py
@@ -0,0 +1,343 @@
+import glob
+import sys
+import os
+import argparse
+import pyopenjtalk
+import json
+
+def mozi2phone(mozi):
+ text = pyopenjtalk.g2p(mozi)
+ text = "sil " + text + " sil"
+ text = text.replace(' ', '-')
+ return text
+
+def create_json(filename, num_speakers, sr, config_path):
+ if os.path.exists(config_path):
+ with open(config_path, "r", encoding="utf-8") as f:
+ data = json.load(f)
+ data['data']['training_files'] = 'filelists/' + filename + '_textful.txt'
+ data['data']['validation_files'] = 'filelists/' + filename + '_textful_val.txt'
+ data['data']['training_files_notext'] = 'filelists/' + filename + '_textless.txt'
+ data['data']['validation_files_notext'] = 'filelists/' + filename + '_val_textless.txt'
+ data['data']['sampling_rate'] = sr
+ data['data']['n_speakers'] = num_speakers
+
+ with open("./configs/" + filename + ".json", 'w', encoding='utf-8') as f:
+ json.dump(data, f, indent=2, ensure_ascii=False)
+
+def create_dataset(filename):
+ speaker_id = 107
+ textful_dir_list = glob.glob("dataset/textful/*")
+ textless_dir_list = glob.glob("dataset/textless/*")
+ textful_dir_list.sort()
+ textless_dir_list.sort()
+ Correspondence_list = list()
+ output_file_list = list()
+ output_file_list_val = list()
+ output_file_list_textless = list()
+ output_file_list_val_textless = list()
+ for d in textful_dir_list:
+ wav_file_list = glob.glob(d+"/wav/*.wav")
+ lab_file_list = glob.glob(d + "/text/*.txt")
+ wav_file_list.sort()
+ lab_file_list.sort()
+ if len(wav_file_list) == 0:
+ continue
+ counter = 0
+ for lab, wav in zip(lab_file_list, wav_file_list):
+ with open(lab, 'r', encoding="utf-8") as f:
+ mozi = f.read().split("\n")
+ print(str(mozi))
+ test = mozi2phone(str(mozi))
+ print(test)
+ print(wav + "|"+ str(speaker_id) + "|"+ test)
+ if counter % 10 != 0:
+ output_file_list.append(wav + "|"+ str(speaker_id) + "|"+ test + "\n")
+ else:
+ output_file_list_val.append(wav + "|"+ str(speaker_id) + "|"+ test + "\n")
+ counter = counter +1
+ Correspondence_list.append(str(speaker_id)+"|"+os.path.basename(d) + "\n")
+ speaker_id = speaker_id + 1
+ if speaker_id > 108:
+ break
+
+ for d in textless_dir_list:
+ wav_file_list = glob.glob(d+"/*.wav")
+ wav_file_list.sort()
+ counter = 0
+ for wav in wav_file_list:
+ print(wav + "|"+ str(speaker_id) + "|a")
+ if counter % 10 != 0:
+ output_file_list_textless.append(wav + "|"+ str(speaker_id) + "|a" + "\n")
+ else:
+ output_file_list_val_textless.append(wav + "|"+ str(speaker_id) + "|a" + "\n")
+ counter = counter +1
+ Correspondence_list.append(str(speaker_id)+"|"+os.path.basename(d) + "\n")
+ speaker_id = speaker_id + 1
+
+ with open('filelists/' + filename + '_textful.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list)
+ with open('filelists/' + filename + '_textful_val.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list_val)
+ with open('filelists/' + filename + '_textless.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list_textless)
+ with open('filelists/' + filename + '_val_textless.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list_val_textless)
+ with open('filelists/' + filename + '_Correspondence.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(Correspondence_list)
+ return speaker_id
+
+def create_dataset_zundamon(filename):
+ textful_dir_list = glob.glob("dataset/textful/*")
+ textless_dir_list = glob.glob("dataset/textless/*")
+ textful_dir_list.sort()
+ textless_dir_list.sort()
+ Correspondence_list = list()
+ output_file_list = list()
+ output_file_list_val = list()
+ output_file_list_textless = list()
+ output_file_list_val_textless = list()
+ #paths
+ my_path = "dataset/textful/00_myvoice"
+ zundamon_path = "dataset/textful/1205_zundamon"
+
+ #set list wav and text
+ #myvoice
+ speaker_id = 107
+ d = my_path
+ wav_file_list = glob.glob(d + "/wav/*.wav")
+ lab_file_list = glob.glob(d + "/text/*.txt")
+ wav_file_list.sort()
+ lab_file_list.sort()
+ if len(wav_file_list) == 0:
+ print("Error" + d + "/wav に音声データがありません")
+ exit()
+ counter = 0
+ for lab, wav in zip(lab_file_list, wav_file_list):
+ with open(lab, 'r', encoding="utf-8") as f:
+ mozi = f.read().split("\n")
+ print(str(mozi))
+ test = mozi2phone(str(mozi))
+ print(test)
+ print(wav + "|"+ str(speaker_id) + "|"+ test)
+ if counter % 10 != 0:
+ output_file_list.append(wav + "|"+ str(speaker_id) + "|"+ test + "\n")
+ else:
+ output_file_list_val.append(wav + "|"+ str(speaker_id) + "|"+ test + "\n")
+ counter = counter +1
+ Correspondence_list.append(str(speaker_id)+"|"+os.path.basename(d) + "\n")
+
+ speaker_id = 100
+ d = zundamon_path
+ wav_file_list = glob.glob(d + "/wav/*.wav")
+ lab_file_list = glob.glob(d + "/text/*.txt")
+ wav_file_list.sort()
+ lab_file_list.sort()
+ if len(wav_file_list) == 0:
+ print("Error" + d + "/wav に音声データがありません")
+ exit()
+ counter = 0
+ for lab, wav in zip(lab_file_list, wav_file_list):
+ with open(lab, 'r', encoding="utf-8") as f:
+ mozi = f.read().split("\n")
+ print(str(mozi))
+ test = mozi2phone(str(mozi))
+ print(test)
+ print(wav + "|"+ str(speaker_id) + "|"+ test)
+ if counter % 10 != 0:
+ output_file_list.append(wav + "|"+ str(speaker_id) + "|"+ test + "\n")
+ else:
+ output_file_list_val.append(wav + "|"+ str(speaker_id) + "|"+ test + "\n")
+ counter = counter +1
+ Correspondence_list.append(str(speaker_id)+"|"+os.path.basename(d) + "\n")
+
+ for d in textless_dir_list:
+ wav_file_list = glob.glob(d+"/*.wav")
+ wav_file_list.sort()
+ counter = 0
+ for wav in wav_file_list:
+ print(wav + "|"+ str(speaker_id) + "|a")
+ if counter % 10 != 0:
+ output_file_list_textless.append(wav + "|"+ str(speaker_id) + "|a" + "\n")
+ else:
+ output_file_list_val_textless.append(wav + "|"+ str(speaker_id) + "|a" + "\n")
+ counter = counter +1
+ Correspondence_list.append(str(speaker_id)+"|"+os.path.basename(d) + "\n")
+ speaker_id = speaker_id + 1
+
+ with open('filelists/' + filename + '_textful.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list)
+ with open('filelists/' + filename + '_textful_val.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list_val)
+ with open('filelists/' + filename + '_textless.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list_textless)
+ with open('filelists/' + filename + '_val_textless.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list_val_textless)
+ with open('filelists/' + filename + '_Correspondence.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(Correspondence_list)
+ return 110
+
+def create_dataset_character(filename, tid):
+ textful_dir_list = glob.glob("dataset/textful/*")
+ textless_dir_list = glob.glob("dataset/textless/*")
+ textful_dir_list.sort()
+ textless_dir_list.sort()
+ Correspondence_list = list()
+ output_file_list = list()
+ output_file_list_val = list()
+ output_file_list_textless = list()
+ output_file_list_val_textless = list()
+ #paths
+ my_path = "dataset/textful/00_myvoice"
+ zundamon_path = "dataset/textful/01_target"
+
+ #set list wav and text
+ #myvoice
+ speaker_id = 107
+ d = my_path
+ wav_file_list = glob.glob(d + "/wav/*.wav")
+ lab_file_list = glob.glob(d + "/text/*.txt")
+ wav_file_list.sort()
+ lab_file_list.sort()
+ if len(wav_file_list) == 0:
+ print("Error" + d + "/wav に音声データがありません")
+ exit()
+ counter = 0
+ for lab, wav in zip(lab_file_list, wav_file_list):
+ with open(lab, 'r', encoding="utf-8") as f:
+ mozi = f.read().split("\n")
+ print(str(mozi))
+ test = mozi2phone(str(mozi))
+ print(test)
+ print(wav + "|"+ str(speaker_id) + "|"+ test)
+ if counter % 10 != 0:
+ output_file_list.append(wav + "|"+ str(speaker_id) + "|"+ test + "\n")
+ else:
+ output_file_list_val.append(wav + "|"+ str(speaker_id) + "|"+ test + "\n")
+ counter = counter +1
+ Correspondence_list.append(str(speaker_id)+"|"+os.path.basename(d) + "\n")
+
+ speaker_id = tid
+ d = zundamon_path
+ wav_file_list = glob.glob(d + "/wav/*.wav")
+ lab_file_list = glob.glob(d + "/text/*.txt")
+ wav_file_list.sort()
+ lab_file_list.sort()
+ if len(wav_file_list) == 0:
+ print("Error" + d + "/wav に音声データがありません")
+ exit()
+ counter = 0
+ for lab, wav in zip(lab_file_list, wav_file_list):
+ with open(lab, 'r', encoding="utf-8") as f:
+ mozi = f.read().split("\n")
+ print(str(mozi))
+ test = mozi2phone(str(mozi))
+ print(test)
+ print(wav + "|"+ str(speaker_id) + "|"+ test)
+ if counter % 10 != 0:
+ output_file_list.append(wav + "|"+ str(speaker_id) + "|"+ test + "\n")
+ else:
+ output_file_list_val.append(wav + "|"+ str(speaker_id) + "|"+ test + "\n")
+ counter = counter +1
+ Correspondence_list.append(str(speaker_id)+"|"+os.path.basename(d) + "\n")
+
+ for d in textless_dir_list:
+ wav_file_list = glob.glob(d+"/*.wav")
+ wav_file_list.sort()
+ counter = 0
+ for wav in wav_file_list:
+ print(wav + "|"+ str(speaker_id) + "|a")
+ if counter % 10 != 0:
+ output_file_list_textless.append(wav + "|"+ str(speaker_id) + "|a" + "\n")
+ else:
+ output_file_list_val_textless.append(wav + "|"+ str(speaker_id) + "|a" + "\n")
+ counter = counter +1
+ Correspondence_list.append(str(speaker_id)+"|"+os.path.basename(d) + "\n")
+ speaker_id = speaker_id + 1
+
+ with open('filelists/' + filename + '_textful.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list)
+ with open('filelists/' + filename + '_textful_val.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list_val)
+ with open('filelists/' + filename + '_textless.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list_textless)
+ with open('filelists/' + filename + '_val_textless.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list_val_textless)
+ with open('filelists/' + filename + '_Correspondence.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(Correspondence_list)
+ return 110
+
+def create_dataset_multi_character(filename, file_path):
+ Correspondence_list = list()
+ textless_dir_list = glob.glob("dataset/textless/*")
+ textless_dir_list.sort()
+ output_file_list = list()
+ output_file_list_val = list()
+ output_file_list_textless = list()
+ output_file_list_val_textless = list()
+ with open(file_path, "r") as f:
+ for line in f.readlines():
+ target_dir , sid = line.split("|")
+ sid = sid.rstrip('\n')
+ wav_file_list = glob.glob("dataset/textful/" + target_dir + "/wav/*.wav")
+ lab_file_list = glob.glob("dataset/textful/" + target_dir + "/text/*.txt")
+ wav_file_list.sort()
+ lab_file_list.sort()
+ if len(wav_file_list) == 0:
+ print("Error" + target_dir + "/wav に音声データがありません")
+ exit()
+ counter = 0
+ for lab, wav in zip(lab_file_list, wav_file_list):
+ with open(lab, 'r', encoding="utf-8") as f_text:
+ mozi = f_text.read().split("\n")
+ print(str(mozi))
+ test = mozi2phone(str(mozi))
+ print(test)
+ print(wav + "|"+ str(sid) + "|"+ test)
+ if counter % 10 != 0:
+ output_file_list.append(wav + "|"+ str(sid) + "|"+ test + "\n")
+ else:
+ output_file_list_val.append(wav + "|"+ str(sid) + "|"+ test + "\n")
+ counter = counter +1
+ Correspondence_list.append(str(sid)+"|"+ target_dir + "\n")
+
+ with open('filelists/' + filename + '_textful.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list)
+ with open('filelists/' + filename + '_textful_val.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list_val)
+ with open('filelists/' + filename + '_textless.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list_textless)
+ with open('filelists/' + filename + '_val_textless.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list_val_textless)
+ with open('filelists/' + filename + '_Correspondence.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(Correspondence_list)
+ return 110
+
+def main():
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-f', '--filename', type=str, required=True,
+ help='filelist for configuration')
+ parser.add_argument('-s', '--sr', type=int, default=24000,
+ help='sampling rate (default = 24000)')
+ parser.add_argument('-t', '--target', type=int, default=9999,
+ help='pre_traind targetid (zundamon = 100, sora = 101, methane = 102, tsumugi = 103)')
+ parser.add_argument('-m', '--multi_target', type=str, default=None,
+ help='pre_traind targetid (zundamon = 100, sora = 101, methane = 102, tsumugi = 103)')
+ parser.add_argument('-c', '--config', type=str, default="./configs/baseconfig.json",
+ help='JSON file for configuration')
+ args = parser.parse_args()
+ filename = args.filename
+ print(filename)
+ if args.multi_target != None:
+ n_spk = create_dataset_multi_character(filename, args.multi_target)
+ elif args.target != 9999 and args.target == 100:
+ n_spk = create_dataset_zundamon(filename)
+ elif args.target != 9999:
+ n_spk = create_dataset_character(filename, args.target)
+ else:
+ n_spk = create_dataset(filename)
+
+ create_json(filename, n_spk, args.sr, args.config)
+
+if __name__ == '__main__':
+ main()
diff --git a/demo/MMVC_Trainer/create_dataset_jtalk_feature.py b/demo/MMVC_Trainer/create_dataset_jtalk_feature.py
new file mode 100755
index 00000000..27b326f6
--- /dev/null
+++ b/demo/MMVC_Trainer/create_dataset_jtalk_feature.py
@@ -0,0 +1,305 @@
+import glob
+import sys
+import os
+import argparse
+import pyopenjtalk
+import json
+
+def mozi2phone(mozi):
+ text = pyopenjtalk.g2p(mozi)
+ text = "sil " + text + " sil"
+ text = text.replace(' ', '-')
+ return text
+
+def create_json(filename, num_speakers, sr, config_path):
+ if os.path.exists(config_path):
+ with open(config_path, "r", encoding="utf-8") as f:
+ data = json.load(f)
+ data['data']['training_files'] = 'filelists/' + filename + '_textful.txt'
+ data['data']['validation_files'] = 'filelists/' + filename + '_textful_val.txt'
+ data['data']['training_files_notext'] = 'filelists/' + filename + '_textless.txt'
+ data['data']['validation_files_notext'] = 'filelists/' + filename + '_val_textless.txt'
+ data['data']['sampling_rate'] = sr
+ data['data']['n_speakers'] = num_speakers
+
+ with open("./configs/" + filename + ".json", 'w', encoding='utf-8') as f:
+ json.dump(data, f, indent=2, ensure_ascii=False)
+
+def create_dataset(filename, my_sid):
+ speaker_id = my_sid
+ textful_dir_list = glob.glob("dataset/textful/*")
+ textless_dir_list = glob.glob("dataset/textless/*")
+ textful_dir_list.sort()
+ textless_dir_list.sort()
+ Correspondence_list = list()
+ output_file_list = list()
+ output_file_list_val = list()
+ output_file_list_textless = list()
+ output_file_list_val_textless = list()
+ for d in textful_dir_list:
+ wav_file_list = glob.glob(d+"/wav/*.wav")
+ lab_file_list = glob.glob(d + "/text/*.txt")
+ wav_file_list.sort()
+ lab_file_list.sort()
+ if len(wav_file_list) == 0:
+ continue
+ counter = 0
+ for lab, wav in zip(lab_file_list, wav_file_list):
+ with open(lab, 'r', encoding="utf-8") as f:
+ mozi = f.read().split("\n")
+ print(str(mozi))
+ test = mozi2phone(str(mozi))
+ print(test)
+ print(wav + "|"+ str(speaker_id) + "|"+ test)
+ if counter % 10 != 0:
+ output_file_list.append(wav + "|"+ str(speaker_id) + "|"+ test + "\n")
+ else:
+ output_file_list_val.append(wav + "|"+ str(speaker_id) + "|"+ test + "\n")
+ counter = counter +1
+ Correspondence_list.append(str(speaker_id)+"|"+os.path.basename(d) + "\n")
+ speaker_id = speaker_id + 1
+ if speaker_id > 108:
+ break
+
+ for d in textless_dir_list:
+ wav_file_list = glob.glob(d+"/*.wav")
+ wav_file_list.sort()
+ counter = 0
+ for wav in wav_file_list:
+ print(wav + "|"+ str(speaker_id) + "|a")
+ if counter % 10 != 0:
+ output_file_list_textless.append(wav + "|"+ str(speaker_id) + "|a" + "\n")
+ else:
+ output_file_list_val_textless.append(wav + "|"+ str(speaker_id) + "|a" + "\n")
+ counter = counter +1
+ Correspondence_list.append(str(speaker_id)+"|"+os.path.basename(d) + "\n")
+ speaker_id = speaker_id + 1
+
+ with open('filelists/' + filename + '_textful.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list)
+ with open('filelists/' + filename + '_textful_val.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list_val)
+ with open('filelists/' + filename + '_textless.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list_textless)
+ with open('filelists/' + filename + '_val_textless.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list_val_textless)
+ with open('filelists/' + filename + '_Correspondence.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(Correspondence_list)
+ return speaker_id + 1
+
+def create_dataset(filename, my_sid):
+ textful_dir_list = glob.glob("dataset/textful/*")
+ textless_dir_list = glob.glob("dataset/textless/*")
+ textful_dir_list.sort()
+ textless_dir_list.sort()
+ Correspondence_list = list()
+ output_file_list = list()
+ output_file_list_val = list()
+ output_file_list_textless = list()
+ output_file_list_val_textless = list()
+ #paths
+ my_path = "dataset/textful/00_myvoice"
+ target_path = "dataset/textful/01_target"
+ print("myvoice : {}".format(str(os.path.isdir(my_path))))
+ print("target_path : {}".format(str(os.path.isdir(target_path))))
+
+ #set list wav and text
+ #myvoice
+ speaker_id = my_sid
+ d = my_path
+ wav_file_list = glob.glob(d + "/wav/*.wav")
+ lab_file_list = glob.glob(d + "/text/*.txt")
+ wav_file_list.sort()
+ lab_file_list.sort()
+ if len(wav_file_list) == 0:
+ print("Error" + d + "/wav に音声データがありません")
+ exit()
+ if len(lab_file_list) == 0:
+ print("Error : " + d + "/text にテキストデータがありません")
+ exit()
+ counter = 0
+
+ for lab, wav in zip(lab_file_list, wav_file_list):
+ with open(lab, 'r', encoding="utf-8") as f:
+ mozi = f.read().split("\n")
+ print(str(mozi))
+ test = mozi2phone(str(mozi))
+ print(test)
+ print(wav + "|"+ str(speaker_id) + "|"+ test)
+ if counter % 10 != 0:
+ output_file_list.append(wav + "|"+ str(speaker_id) + "|"+ test + "\n")
+ else:
+ output_file_list_val.append(wav + "|"+ str(speaker_id) + "|"+ test + "\n")
+ counter = counter +1
+ Correspondence_list.append(str(speaker_id)+"|"+os.path.basename(d) + "\n")
+
+ speaker_id = 108
+ d = target_path
+ wav_file_list = glob.glob(d + "/wav/*.wav")
+ lab_file_list = glob.glob(d + "/text/*.txt")
+ wav_file_list.sort()
+ lab_file_list.sort()
+ if len(wav_file_list) == 0:
+ print("Error" + d + "/wav に音声データがありません")
+ exit()
+ counter = 0
+ for lab, wav in zip(lab_file_list, wav_file_list):
+ with open(lab, 'r', encoding="utf-8") as f:
+ mozi = f.read().split("\n")
+ print(str(mozi))
+ test = mozi2phone(str(mozi))
+ print(test)
+ print(wav + "|"+ str(speaker_id) + "|"+ test)
+ if counter % 10 != 0:
+ output_file_list.append(wav + "|"+ str(speaker_id) + "|"+ test + "\n")
+ else:
+ output_file_list_val.append(wav + "|"+ str(speaker_id) + "|"+ test + "\n")
+ counter = counter +1
+ Correspondence_list.append(str(speaker_id)+"|"+os.path.basename(d) + "\n")
+
+ for d in textless_dir_list:
+ wav_file_list = glob.glob(d+"/*.wav")
+ wav_file_list.sort()
+ counter = 0
+ for wav in wav_file_list:
+ print(wav + "|"+ str(speaker_id) + "|a")
+ if counter % 10 != 0:
+ output_file_list_textless.append(wav + "|"+ str(speaker_id) + "|a" + "\n")
+ else:
+ output_file_list_val_textless.append(wav + "|"+ str(speaker_id) + "|a" + "\n")
+ counter = counter +1
+ Correspondence_list.append(str(speaker_id)+"|"+os.path.basename(d) + "\n")
+ speaker_id = speaker_id + 1
+
+ with open('filelists/' + filename + '_textful.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list)
+ with open('filelists/' + filename + '_textful_val.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list_val)
+ with open('filelists/' + filename + '_textless.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list_textless)
+ with open('filelists/' + filename + '_val_textless.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list_val_textless)
+ with open('filelists/' + filename + '_Correspondence.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(Correspondence_list)
+ return 110
+
+def create_dataset_zundamon(filename, my_sid):
+ textful_dir_list = glob.glob("dataset/textful/*")
+ textless_dir_list = glob.glob("dataset/textless/*")
+ textful_dir_list.sort()
+ textless_dir_list.sort()
+ Correspondence_list = list()
+ output_file_list = list()
+ output_file_list_val = list()
+ output_file_list_textless = list()
+ output_file_list_val_textless = list()
+ #paths
+ my_path = "dataset/textful/00_myvoice"
+ zundamon_path = "dataset/textful/1205_zundamon"
+ print("myvoice : {}".format(str(os.path.isdir(my_path))))
+ print("zundamon_path : {}".format(str(os.path.isdir(zundamon_path))))
+
+ #set list wav and text
+ #myvoice
+ speaker_id = my_sid
+ d = my_path
+ wav_file_list = glob.glob(d + "/wav/*.wav")
+ lab_file_list = glob.glob(d + "/text/*.txt")
+ wav_file_list.sort()
+ lab_file_list.sort()
+ if len(wav_file_list) == 0:
+ print("Error" + d + "/wav に音声データがありません")
+ exit()
+ if len(lab_file_list) == 0:
+ print("Error : " + d + "/text にテキストデータがありません")
+ exit()
+ counter = 0
+
+ for lab, wav in zip(lab_file_list, wav_file_list):
+ with open(lab, 'r', encoding="utf-8") as f:
+ mozi = f.read().split("\n")
+ print(str(mozi))
+ test = mozi2phone(str(mozi))
+ print(test)
+ print(wav + "|"+ str(speaker_id) + "|"+ test)
+ if counter % 10 != 0:
+ output_file_list.append(wav + "|"+ str(speaker_id) + "|"+ test + "\n")
+ else:
+ output_file_list_val.append(wav + "|"+ str(speaker_id) + "|"+ test + "\n")
+ counter = counter +1
+ Correspondence_list.append(str(speaker_id)+"|"+os.path.basename(d) + "\n")
+
+ speaker_id = 100
+ d = zundamon_path
+ wav_file_list = glob.glob(d + "/wav/*.wav")
+ lab_file_list = glob.glob(d + "/text/*.txt")
+ wav_file_list.sort()
+ lab_file_list.sort()
+ if len(wav_file_list) == 0:
+ print("Error" + d + "/wav に音声データがありません")
+ exit()
+ counter = 0
+ for lab, wav in zip(lab_file_list, wav_file_list):
+ with open(lab, 'r', encoding="utf-8") as f:
+ mozi = f.read().split("\n")
+ print(str(mozi))
+ test = mozi2phone(str(mozi))
+ print(test)
+ print(wav + "|"+ str(speaker_id) + "|"+ test)
+ if counter % 10 != 0:
+ output_file_list.append(wav + "|"+ str(speaker_id) + "|"+ test + "\n")
+ else:
+ output_file_list_val.append(wav + "|"+ str(speaker_id) + "|"+ test + "\n")
+ counter = counter +1
+ Correspondence_list.append(str(speaker_id)+"|"+os.path.basename(d) + "\n")
+
+ for d in textless_dir_list:
+ wav_file_list = glob.glob(d+"/*.wav")
+ wav_file_list.sort()
+ counter = 0
+ for wav in wav_file_list:
+ print(wav + "|"+ str(speaker_id) + "|a")
+ if counter % 10 != 0:
+ output_file_list_textless.append(wav + "|"+ str(speaker_id) + "|a" + "\n")
+ else:
+ output_file_list_val_textless.append(wav + "|"+ str(speaker_id) + "|a" + "\n")
+ counter = counter +1
+ Correspondence_list.append(str(speaker_id)+"|"+os.path.basename(d) + "\n")
+ speaker_id = speaker_id + 1
+
+ with open('filelists/' + filename + '_textful.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list)
+ with open('filelists/' + filename + '_textful_val.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list_val)
+ with open('filelists/' + filename + '_textless.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list_textless)
+ with open('filelists/' + filename + '_val_textless.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list_val_textless)
+ with open('filelists/' + filename + '_Correspondence.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(Correspondence_list)
+ return 110
+
+def main():
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-f', '--filename', type=str, required=True,
+ help='filelist for configuration')
+ parser.add_argument('-s', '--sr', type=int, default=24000,
+ help='sampling rate (default = 24000)')
+ parser.add_argument('-m', '--mysid', type=int, default=107,
+ help='sampling rate (default = 24000)')
+ parser.add_argument('-z', '--zundamon', type=bool, default=False,
+ help='U.N. zundamon Was Her? (default = False)')
+ parser.add_argument('-c', '--config', type=str, default="./configs/baseconfig.json",
+ help='JSON file for configuration')
+ args = parser.parse_args()
+ filename = args.filename
+ print(filename)
+ if args.zundamon:
+ n_spk = create_dataset_zundamon(filename, args.mysid)
+ else:
+ n_spk = create_dataset(filename, args.mysid)
+
+ create_json(filename, n_spk, args.sr, args.config)
+
+if __name__ == '__main__':
+ main()
diff --git a/demo/MMVC_Trainer/create_dataset_julius.py b/demo/MMVC_Trainer/create_dataset_julius.py
new file mode 100755
index 00000000..4b9dce05
--- /dev/null
+++ b/demo/MMVC_Trainer/create_dataset_julius.py
@@ -0,0 +1,87 @@
+import glob
+import sys
+
+def read_lab(lab_f):
+ with open(lab_f, 'r') as f:
+ kw_list = f.read().split("\n")
+
+ out_phono = []
+ for i in range(len(kw_list)-1):
+ out_phono.append(kw_list[i].split()[2])
+ out_phono.append("-")
+
+ if out_phono[0] == 'silB' and out_phono[-2] == 'silE':
+ out_phono[0] = 'sil'
+ out_phono[-2] = 'sil'
+ out_phono = out_phono[0:-1]
+ out_phono_str = "".join(out_phono)
+ return out_phono_str
+
+ else:
+ print("Error!")
+ exit
+
+def create_dataset(filename):
+ speaker_id = 0
+ textful_dir_list = glob.glob("dataset/textful/*")
+ textless_dir_list = glob.glob("dataset/textless/*")
+ textful_dir_list.sort()
+ textless_dir_list.sort()
+ Correspondence_list = list()
+ output_file_list = list()
+ output_file_list_val = list()
+ output_file_list_textless = list()
+ output_file_list_val_textless = list()
+ for d in textful_dir_list:
+ wav_file_list = glob.glob(d+"/wav/*")
+ lab_file_list = glob.glob(d + "/text/*")
+ wav_file_list.sort()
+ lab_file_list.sort()
+ if len(wav_file_list) == 0:
+ continue
+ counter = 0
+ for lab, wav in zip(lab_file_list, wav_file_list):
+ test = read_lab(lab)
+ print(wav + "|"+ str(speaker_id) + "|"+ test)
+ if counter % 10 != 0:
+ output_file_list.append(wav + "|"+ str(speaker_id) + "|"+ test + "\n")
+ else:
+ output_file_list_val.append(wav + "|"+ str(speaker_id) + "|"+ test + "\n")
+ counter = counter +1
+ Correspondence_list.append(str(speaker_id)+"|"+d + "\n")
+ speaker_id = speaker_id + 1
+
+ for d in textless_dir_list:
+ wav_file_list = glob.glob(d+"/*")
+ wav_file_list.sort()
+ counter = 0
+ for wav in wav_file_list:
+ print(wav + "|"+ str(speaker_id) + "|a")
+ if counter % 10 != 0:
+ output_file_list_textless.append(wav + "|"+ str(speaker_id) + "|a" + "\n")
+ else:
+ output_file_list_val_textless.append(wav + "|"+ str(speaker_id) + "|a" + "\n")
+ counter = counter +1
+ Correspondence_list.append(str(speaker_id)+"|"+d + "\n")
+ speaker_id = speaker_id + 1
+
+ with open('filelists/' + filename + '_textful.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list)
+ with open('filelists/' + filename + '_textful_val.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list_val)
+ with open('filelists/' + filename + '_textless.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list_textless)
+ with open('filelists/' + filename + '_val_textless.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(output_file_list_val_textless)
+ with open('filelists/' + filename + '_Correspondence.txt', 'w', encoding='utf-8', newline='\n') as f:
+ f.writelines(Correspondence_list)
+ return speaker_id -1
+
+def main(argv):
+ filename = str(sys.argv[1])
+ print(filename)
+ n_spk = create_dataset(filename)
+ return filename, n_spk
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv))
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/data_utils.py b/demo/MMVC_Trainer/data_utils.py
new file mode 100755
index 00000000..518eef52
--- /dev/null
+++ b/demo/MMVC_Trainer/data_utils.py
@@ -0,0 +1,492 @@
+import time
+import os
+import random
+import numpy as np
+import torch
+import torch.utils.data
+import tqdm
+
+import commons
+from mel_processing import spectrogram_torch
+from utils import load_wav_to_torch, load_filepaths_and_text
+from text import text_to_sequence, cleaned_text_to_sequence
+
+#add
+from retry import retry
+import random
+import torchaudio
+
+
+class TextAudioLoader(torch.utils.data.Dataset):
+ """
+ 1) loads audio, text pairs
+ 2) normalizes text and converts them to sequences of integers
+ 3) computes spectrograms from audio files.
+ """
+ def __init__(self, audiopaths_and_text, hparams, use_test = True):
+ self.audiopaths_and_text = load_filepaths_and_text(audiopaths_and_text)
+ self.text_cleaners = hparams.text_cleaners
+ self.max_wav_value = hparams.max_wav_value
+ self.sampling_rate = hparams.sampling_rate
+ self.filter_length = hparams.filter_length
+ self.hop_length = hparams.hop_length
+ self.win_length = hparams.win_length
+ self.sampling_rate = hparams.sampling_rate
+ self.use_test = use_test
+
+ self.cleaned_text = getattr(hparams, "cleaned_text", False)
+
+ self.add_blank = hparams.add_blank
+ self.min_text_len = getattr(hparams, "min_text_len", 1)
+ self.max_text_len = getattr(hparams, "max_text_len", 190)
+
+ random.seed(1234)
+ random.shuffle(self.audiopaths_and_text)
+ self._filter()
+
+
+ def _filter(self):
+ """
+ Filter text & store spec lengths
+ """
+ # Store spectrogram lengths for Bucketing
+ # wav_length ~= file_size / (wav_channels * Bytes per dim) = file_size / (1 * 2)
+ # spec_length = wav_length // hop_length
+
+ audiopaths_and_text_new = []
+ lengths = []
+ for audiopath, text in self.audiopaths_and_text:
+ if self.min_text_len <= len(text) and len(text) <= self.max_text_len:
+ audiopaths_and_text_new.append([audiopath, text])
+ lengths.append(os.path.getsize(audiopath) // (2 * self.hop_length))
+ self.audiopaths_and_text = audiopaths_and_text_new
+ self.lengths = lengths
+
+ def get_audio_text_pair(self, audiopath_and_text):
+ # separate filename and text
+ audiopath, text = audiopath_and_text[0], audiopath_and_text[1]
+ text = self.get_text(text)
+ if self.use_test != True:
+ text = torch.as_tensor("a")
+ spec, wav = self.get_audio(audiopath)
+ return (text, spec, wav)
+
+ def get_audio(self, filename):
+ audio, sampling_rate = load_wav_to_torch(filename)
+ if sampling_rate != self.sampling_rate:
+ raise ValueError("{} {} SR doesn't match target {} SR".format(
+ sampling_rate, self.sampling_rate))
+ audio_norm = audio / self.max_wav_value
+ audio_norm = audio_norm.unsqueeze(0)
+ spec_filename = filename.replace(".wav", ".spec.pt")
+ if os.path.exists(spec_filename):
+ spec = torch.load(spec_filename)
+ else:
+ spec = spectrogram_torch(audio_norm, self.filter_length,
+ self.sampling_rate, self.hop_length, self.win_length,
+ center=False)
+ spec = torch.squeeze(spec, 0)
+ torch.save(spec, spec_filename)
+ return spec, audio_norm
+
+ def get_text(self, text):
+ if self.cleaned_text:
+ text_norm = cleaned_text_to_sequence(text)
+ else:
+ text_norm = text_to_sequence(text, self.text_cleaners)
+ if self.add_blank:
+ text_norm = commons.intersperse(text_norm, 0)
+ text_norm = torch.LongTensor(text_norm)
+ return text_norm
+
+ def __getitem__(self, index):
+ return self.get_audio_text_pair(self.audiopaths_and_text[index])
+
+ def __len__(self):
+ return len(self.audiopaths_and_text)
+
+
+class TextAudioCollate():
+ """ Zero-pads model inputs and targets
+ """
+ def __init__(self, return_ids=False):
+ self.return_ids = return_ids
+
+ def __call__(self, batch):
+ """Collate's training batch from normalized text and aduio
+ PARAMS
+ ------
+ batch: [text_normalized, spec_normalized, wav_normalized]
+ """
+ # Right zero-pad all one-hot text sequences to max input length
+ _, ids_sorted_decreasing = torch.sort(
+ torch.LongTensor([x[1].size(1) for x in batch]),
+ dim=0, descending=True)
+
+ max_text_len = max([len(x[0]) for x in batch])
+ max_spec_len = max([x[1].size(1) for x in batch])
+ max_wav_len = max([x[2].size(1) for x in batch])
+
+ text_lengths = torch.LongTensor(len(batch))
+ spec_lengths = torch.LongTensor(len(batch))
+ wav_lengths = torch.LongTensor(len(batch))
+
+ text_padded = torch.LongTensor(len(batch), max_text_len)
+ spec_padded = torch.FloatTensor(len(batch), batch[0][1].size(0), max_spec_len)
+ wav_padded = torch.FloatTensor(len(batch), 1, max_wav_len)
+ text_padded.zero_()
+ spec_padded.zero_()
+ wav_padded.zero_()
+ for i in range(len(ids_sorted_decreasing)):
+ row = batch[ids_sorted_decreasing[i]]
+
+ text = row[0]
+ text_padded[i, :text.size(0)] = text
+ text_lengths[i] = text.size(0)
+
+ spec = row[1]
+ spec_padded[i, :, :spec.size(1)] = spec
+ spec_lengths[i] = spec.size(1)
+
+ wav = row[2]
+ wav_padded[i, :, :wav.size(1)] = wav
+ wav_lengths[i] = wav.size(1)
+
+ if self.return_ids:
+ return text_padded, text_lengths, spec_padded, spec_lengths, wav_padded, wav_lengths, ids_sorted_decreasing
+ return text_padded, text_lengths, spec_padded, spec_lengths, wav_padded, wav_lengths
+
+
+"""Multi speaker version"""
+class TextAudioSpeakerLoader(torch.utils.data.Dataset):
+ """
+ 1) loads audio, speaker_id, text pairs
+ 2) normalizes text and converts them to sequences of integers
+ 3) computes spectrograms from audio files.
+ """
+ def __init__(self, audiopaths_sid_text, hparams, no_text=False, augmentation=False, augmentation_params=None, no_use_textfile = False):
+ if no_use_textfile:
+ self.audiopaths_sid_text = list()
+ else:
+ self.audiopaths_sid_text = load_filepaths_and_text(audiopaths_sid_text)
+ self.text_cleaners = hparams.text_cleaners
+ self.max_wav_value = hparams.max_wav_value
+ self.sampling_rate = hparams.sampling_rate
+ self.filter_length = hparams.filter_length
+ self.hop_length = hparams.hop_length
+ self.win_length = hparams.win_length
+ self.sampling_rate = hparams.sampling_rate
+ self.no_text = no_text
+ self.augmentation = augmentation
+ if augmentation :
+ self.gain_p = augmentation_params.gain_p
+ self.min_gain_in_db = augmentation_params.min_gain_in_db
+ self.max_gain_in_db = augmentation_params.max_gain_in_db
+ self.time_stretch_p = augmentation_params.time_stretch_p
+ self.min_rate = augmentation_params.min_rate
+ self.max_rate = augmentation_params.max_rate
+ self.pitch_shift_p = augmentation_params.pitch_shift_p
+ self.min_semitones = augmentation_params.min_semitones
+ self.max_semitones = augmentation_params.max_semitones
+ self.add_gaussian_noise_p = augmentation_params.add_gaussian_noise_p
+ self.min_amplitude = augmentation_params.min_amplitude
+ self.max_amplitude = augmentation_params.max_amplitude
+ self.frequency_mask_p = augmentation_params.frequency_mask_p
+
+ self.cleaned_text = getattr(hparams, "cleaned_text", False)
+
+ self.add_blank = hparams.add_blank
+ self.min_text_len = getattr(hparams, "min_text_len", 1)
+ self.max_text_len = getattr(hparams, "max_text_len", 1000)
+
+ random.seed(1234)
+ random.shuffle(self.audiopaths_sid_text)
+ self._filter()
+
+ @retry(tries=30, delay=10)
+ def _filter(self):
+ """
+ Filter text & store spec lengths
+ """
+ # Store spectrogram lengths for Bucketing
+ # wav_length ~= file_size / (wav_channels * Bytes per dim) = file_size / (1 * 2)
+ # spec_length = wav_length // hop_length
+
+ audiopaths_sid_text_new = []
+ lengths = []
+
+ for audiopath, sid, text in tqdm.tqdm(self.audiopaths_sid_text):
+ if self.min_text_len <= len(text) and len(text) <= self.max_text_len:
+ audiopaths_sid_text_new.append([audiopath, sid, text])
+ lengths.append(os.path.getsize(audiopath) // (2 * self.hop_length))
+ self.audiopaths_sid_text = audiopaths_sid_text_new
+ self.lengths = lengths
+
+ def get_audio_text_speaker_pair(self, audiopath_sid_text):
+ # separate filename, speaker_id and text
+ audiopath, sid, text = audiopath_sid_text[0], audiopath_sid_text[1], audiopath_sid_text[2]
+ text = self.get_text(text)
+ if self.no_text:
+ text = self.get_text("a")
+ spec, wav = self.get_audio(audiopath)
+ sid = self.get_sid(sid)
+ return (text, spec, wav, sid)
+
+ @retry(exceptions=(PermissionError), tries=100, delay=10)
+ def get_audio(self, filename):
+ # 音声データは±1.0内に正規化したtorchベクトルでunsqueeze(0)で外側1次元くるんだものを扱う
+ audio, sampling_rate = load_wav_to_torch(filename)
+ try:
+ if sampling_rate != self.sampling_rate:
+ raise ValueError("[Error] Exception: source {} SR doesn't match target {} SR".format(
+ sampling_rate, self.sampling_rate))
+ except ValueError as e:
+ print(e)
+ exit()
+ audio_norm = self.get_normalized_audio(audio, self.max_wav_value)
+
+ if self.augmentation:
+ audio_augmented = self.add_augmentation(audio_norm, sampling_rate)
+ audio_noised = self.add_noise(audio_augmented, sampling_rate)
+ # ノーマライズ後のaugmentationとnoise付加で範囲外になったところを削る
+ audio_augmented = torch.clamp(audio_augmented, -1, 1)
+ audio_noised = torch.clamp(audio_noised, -1, 1)
+ # audio(音声波形)は教師信号となるのでノイズは含まずaugmentationのみしたものを使用
+ audio_norm = audio_augmented
+ # spec(スペクトログラム)は入力信号となるのでaugmentationしてさらにノイズを付加したものを使用
+ spec = spectrogram_torch(audio_noised, self.filter_length,
+ self.sampling_rate, self.hop_length, self.win_length,
+ center=False)
+ spec_noised = self.add_spectrogram_noise(spec)
+ spec = torch.squeeze(spec_noised, 0)
+ else:
+ spec = spectrogram_torch(audio_norm, self.filter_length,
+ self.sampling_rate, self.hop_length, self.win_length,
+ center=False)
+ spec = torch.squeeze(spec, 0)
+ return spec, audio_norm
+
+ def add_augmentation(self, audio, sampling_rate):
+ gain_in_db = 0.0
+ if random.random() <= self.gain_p:
+ gain_in_db = random.uniform(self.min_gain_in_db, self.max_gain_in_db)
+ time_stretch_rate = 1.0
+ if random.random() <= self.time_stretch_p:
+ time_stretch_rate = random.uniform(self.min_rate, self.max_rate)
+ pitch_shift_semitones = 0
+ if random.random() <= self.pitch_shift_p:
+ pitch_shift_semitones = random.uniform(self.min_semitones, self.max_semitones) * 100 # 1/100 semitone 単位指定のため
+ augmentation_effects = [
+ ["gain", f"{gain_in_db}"],
+ ["tempo", f"{time_stretch_rate}"],
+ ["pitch", f"{pitch_shift_semitones}"],
+ ["rate", f"{sampling_rate}"]
+ ]
+ audio_augmented, _ = torchaudio.sox_effects.apply_effects_tensor(audio, sampling_rate, augmentation_effects)
+ return audio_augmented
+
+ def add_noise(self, audio, sampling_rate):
+ # AddGaussianNoise
+ audio = self.add_gaussian_noise(audio)
+ return audio
+
+ def add_gaussian_noise(self, audio):
+ assert self.min_amplitude >= 0.0
+ assert self.max_amplitude >= 0.0
+ assert self.max_amplitude >= self.min_amplitude
+ if random.random() > self.add_gaussian_noise_p:
+ return audio
+ amplitude = random.uniform(self.min_amplitude, self.max_amplitude)
+ noise = torch.randn(audio.size())
+ noised_audio = audio + amplitude * noise
+ return noised_audio
+
+ def add_spectrogram_noise(self, spec):
+ # FrequencyMask
+ masking = torchaudio.transforms.FrequencyMasking(freq_mask_param=80)
+ masked = masking(spec)
+ return masked
+
+ def get_normalized_audio(self, audio, max_wav_value):
+ audio_norm = audio / max_wav_value
+ audio_norm = audio_norm.unsqueeze(0)
+ return audio_norm
+
+ def get_text(self, text):
+ if self.cleaned_text:
+ text_norm = cleaned_text_to_sequence(text)
+ else:
+ text_norm = text_to_sequence(text, self.text_cleaners)
+ if self.add_blank:
+ text_norm = commons.intersperse(text_norm, 0)
+ text_norm = torch.LongTensor(text_norm)
+ return text_norm
+
+ def get_sid(self, sid):
+ sid = torch.LongTensor([int(sid)])
+ return sid
+
+ def __getitem__(self, index):
+ return self.get_audio_text_speaker_pair(self.audiopaths_sid_text[index])
+
+ def __len__(self):
+ return len(self.audiopaths_sid_text)
+
+
+class TextAudioSpeakerCollate():
+ """ Zero-pads model inputs and targets
+ """
+ def __init__(self, return_ids=False, no_text = False):
+ self.return_ids = return_ids
+ self.no_text = no_text
+
+ def __call__(self, batch):
+ """Collate's training batch from normalized text, audio and speaker identities
+ PARAMS
+ ------
+ batch: [text_normalized, spec_normalized, wav_normalized, sid]
+ """
+ # Right zero-pad all one-hot text sequences to max input length
+ _, ids_sorted_decreasing = torch.sort(
+ torch.LongTensor([x[1].size(1) for x in batch]),
+ dim=0, descending=True)
+
+ max_text_len = max([len(x[0]) for x in batch])
+ max_spec_len = max([x[1].size(1) for x in batch])
+ max_wav_len = max([x[2].size(1) for x in batch])
+
+ text_lengths = torch.LongTensor(len(batch))
+ spec_lengths = torch.LongTensor(len(batch))
+ wav_lengths = torch.LongTensor(len(batch))
+ sid = torch.LongTensor(len(batch))
+
+ text_padded = torch.LongTensor(len(batch), max_text_len)
+ spec_padded = torch.FloatTensor(len(batch), batch[0][1].size(0), max_spec_len)
+ wav_padded = torch.FloatTensor(len(batch), 1, max_wav_len)
+ text_padded.zero_()
+ spec_padded.zero_()
+ wav_padded.zero_()
+ for i in range(len(ids_sorted_decreasing)):
+ row = batch[ids_sorted_decreasing[i]]
+
+ text = row[0]
+ text_padded[i, :text.size(0)] = text
+ text_lengths[i] = text.size(0)
+
+ spec = row[1]
+ spec_padded[i, :, :spec.size(1)] = spec
+ spec_lengths[i] = spec.size(1)
+
+ wav = row[2]
+ wav_padded[i, :, :wav.size(1)] = wav
+ wav_lengths[i] = wav.size(1)
+
+ sid[i] = row[3]
+
+ if self.return_ids:
+ return text_padded, text_lengths, spec_padded, spec_lengths, wav_padded, wav_lengths, sid, ids_sorted_decreasing
+ return text_padded, text_lengths, spec_padded, spec_lengths, wav_padded, wav_lengths, sid
+
+
+class DistributedBucketSampler(torch.utils.data.distributed.DistributedSampler):
+ """
+ Maintain similar input lengths in a batch.
+ Length groups are specified by boundaries.
+ Ex) boundaries = [b1, b2, b3] -> any batch is included either {x | b1 < length(x) <=b2} or {x | b2 < length(x) <= b3}.
+
+ It removes samples which are not included in the boundaries.
+ Ex) boundaries = [b1, b2, b3] -> any x s.t. length(x) <= b1 or length(x) > b3 are discarded.
+ """
+ def __init__(self, dataset, batch_size, boundaries, num_replicas=None, rank=None, shuffle=True):
+ super().__init__(dataset, num_replicas=num_replicas, rank=rank, shuffle=shuffle)
+ self.lengths = dataset.lengths
+ self.batch_size = batch_size
+ self.boundaries = boundaries
+
+ self.buckets, self.num_samples_per_bucket = self._create_buckets()
+ self.total_size = sum(self.num_samples_per_bucket)
+ self.num_samples = self.total_size // self.num_replicas
+
+ def _create_buckets(self):
+ buckets = [[] for _ in range(len(self.boundaries) - 1)]
+ for i in range(len(self.lengths)):
+ length = self.lengths[i]
+ idx_bucket = self._bisect(length)
+ if idx_bucket != -1:
+ buckets[idx_bucket].append(i)
+
+ for i in range(len(buckets) - 1, 0, -1):
+ if len(buckets[i]) == 0:
+ buckets.pop(i)
+ self.boundaries.pop(i+1)
+
+ num_samples_per_bucket = []
+ for i in range(len(buckets)):
+ len_bucket = len(buckets[i])
+ total_batch_size = self.num_replicas * self.batch_size
+ rem = (total_batch_size - (len_bucket % total_batch_size)) % total_batch_size
+ num_samples_per_bucket.append(len_bucket + rem)
+ return buckets, num_samples_per_bucket
+
+ def __iter__(self):
+ # deterministically shuffle based on epoch
+ g = torch.Generator()
+ g.manual_seed(self.epoch)
+
+ indices = []
+ if self.shuffle:
+ for bucket in self.buckets:
+ indices.append(torch.randperm(len(bucket), generator=g).tolist())
+ else:
+ for bucket in self.buckets:
+ indices.append(list(range(len(bucket))))
+
+ batches = []
+ for i in range(len(self.buckets)):
+ next_bucket = (i+1) % len(self.buckets)
+ bucket = self.buckets[i]
+ len_bucket = len(bucket)
+ ids_bucket = indices[i]
+ num_samples_bucket = self.num_samples_per_bucket[i]
+
+ if len_bucket == 0:
+ print("[Warn] Exception: length of buckets {} is 0. ID:{} Skip.".format(i,i))
+ continue
+
+ # add extra samples to make it evenly divisible
+ rem = num_samples_bucket - len_bucket
+ ids_bucket = ids_bucket + ids_bucket * (rem // len_bucket) + ids_bucket[:(rem % len_bucket)]
+
+ # subsample
+ ids_bucket = ids_bucket[self.rank::self.num_replicas]
+
+ # batching
+ for j in range(len(ids_bucket) // self.batch_size):
+ batch = [bucket[idx] for idx in ids_bucket[j*self.batch_size:(j+1)*self.batch_size]]
+ batches.append(batch)
+
+ if self.shuffle:
+ batch_ids = torch.randperm(len(batches), generator=g).tolist()
+ batches = [batches[i] for i in batch_ids]
+ self.batches = batches
+
+ assert len(self.batches) * self.batch_size == self.num_samples
+ return iter(self.batches)
+
+ def _bisect(self, x, lo=0, hi=None):
+ if hi is None:
+ hi = len(self.boundaries) - 1
+
+ if hi > lo:
+ mid = (hi + lo) // 2
+ if self.boundaries[mid] < x and x <= self.boundaries[mid+1]:
+ return mid
+ elif x <= self.boundaries[mid]:
+ return self._bisect(x, lo, mid)
+ else:
+ return self._bisect(x, mid + 1, hi)
+ else:
+ return -1
+
+ def __len__(self):
+ return self.num_samples // self.batch_size
diff --git a/demo/MMVC_Trainer/dataset/multi_speaker_correspondence.txt b/demo/MMVC_Trainer/dataset/multi_speaker_correspondence.txt
new file mode 100755
index 00000000..a5ced38d
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/multi_speaker_correspondence.txt
@@ -0,0 +1,7 @@
+00_myvoice|107
+01_target|108
+02_target|109
+03_target|0
+04_target|1
+05_target|2
+1205_zundamon|100
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/00_myvoice/text/.gitignore b/demo/MMVC_Trainer/dataset/textful/00_myvoice/text/.gitignore
new file mode 100755
index 00000000..c96a04f0
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/00_myvoice/text/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/00_myvoice/wav/.gitignore b/demo/MMVC_Trainer/dataset/textful/00_myvoice/wav/.gitignore
new file mode 100755
index 00000000..c96a04f0
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/00_myvoice/wav/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/01_target/text/.gitignore b/demo/MMVC_Trainer/dataset/textful/01_target/text/.gitignore
new file mode 100755
index 00000000..c96a04f0
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/01_target/text/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/01_target/wav/.gitignore b/demo/MMVC_Trainer/dataset/textful/01_target/wav/.gitignore
new file mode 100755
index 00000000..c96a04f0
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/01_target/wav/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_001.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_001.txt
new file mode 100755
index 00000000..39ff3331
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_001.txt
@@ -0,0 +1 @@
+オンナノコガキッキッウレシソー。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_002.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_002.txt
new file mode 100755
index 00000000..026420a6
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_002.txt
@@ -0,0 +1 @@
+ツァツォニリョコーシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_003.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_003.txt
new file mode 100755
index 00000000..d214a87e
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_003.txt
@@ -0,0 +1 @@
+ミンシュウガテュルリーキュウデンニシンニュウシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_004.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_004.txt
new file mode 100755
index 00000000..9664e084
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_004.txt
@@ -0,0 +1 @@
+ハイチキョーワコクデトゥーサンルーヴェルテュールガショーリヲオサメラレタノワ、ジッサイオーネツビョーノオカゲダッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_005.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_005.txt
new file mode 100755
index 00000000..4b1821b4
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_005.txt
@@ -0,0 +1 @@
+レジャンドルワミンシュウヲテュルリーキュウデンニマネータ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_006.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_006.txt
new file mode 100755
index 00000000..3d9a625a
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_006.txt
@@ -0,0 +1 @@
+ジョゲンワデキナイトデュパンワイッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_007.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_007.txt
new file mode 100755
index 00000000..b7774724
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_007.txt
@@ -0,0 +1 @@
+フランスジンシェフトニホンジンシェフワゼンゼンチガウ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_008.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_008.txt
new file mode 100755
index 00000000..f98d927e
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_008.txt
@@ -0,0 +1 @@
+チュウゴクノガイコーダンニアタッシェトシテハケンサレタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_009.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_009.txt
new file mode 100755
index 00000000..327b6598
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_009.txt
@@ -0,0 +1 @@
+ファシズムセーリョクトノソーリョクセンニノゾム。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_010.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_010.txt
new file mode 100755
index 00000000..8dab8b06
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_010.txt
@@ -0,0 +1 @@
+カグショーニンノフィシェルワ、ニグルマトコウマヲカシテクレタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_011.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_011.txt
new file mode 100755
index 00000000..75df9c4a
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_011.txt
@@ -0,0 +1 @@
+ローカルロセンニワファンモオオイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_012.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_012.txt
new file mode 100755
index 00000000..a835afdd
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_012.txt
@@ -0,0 +1 @@
+フェイントデアイテヲカワシテカラシュートデフィニッシュシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_013.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_013.txt
new file mode 100755
index 00000000..938ff39d
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_013.txt
@@ -0,0 +1 @@
+センハッピャクナナジュウナナ、プフェファーニヨリシントーゲンショーガハッケンサレタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_014.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_014.txt
new file mode 100755
index 00000000..e074da6a
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_014.txt
@@ -0,0 +1 @@
+ユレルフェリーニノルノワワタシニトッテクギョーデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_015.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_015.txt
new file mode 100755
index 00000000..da20490b
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_015.txt
@@ -0,0 +1 @@
+ホルロアラティタルッフォトユウトクベツナオリョーリモデマシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_016.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_016.txt
new file mode 100755
index 00000000..9e0d9885
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_016.txt
@@ -0,0 +1 @@
+フエノオトガナルトウサギノキッドガサッソクピョントハネタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_017.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_017.txt
new file mode 100755
index 00000000..e3908db2
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_017.txt
@@ -0,0 +1 @@
+アノリョキャクワウワサノキャフェニイクヨーデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_018.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_018.txt
new file mode 100755
index 00000000..2c970805
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_018.txt
@@ -0,0 +1 @@
+モクヒョーワイットーショーデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_019.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_019.txt
new file mode 100755
index 00000000..bee45b8b
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_019.txt
@@ -0,0 +1 @@
+ウサギノキッドワキブンヨクピョン、マタピョントトビツヅケタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_020.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_020.txt
new file mode 100755
index 00000000..efc35ef1
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_020.txt
@@ -0,0 +1 @@
+アフタヌーンティーヲタノシミマショー。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_021.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_021.txt
new file mode 100755
index 00000000..e4c6b103
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_021.txt
@@ -0,0 +1 @@
+カノジョワティピカルナフェミニストデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_022.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_022.txt
new file mode 100755
index 00000000..9e6e1071
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_022.txt
@@ -0,0 +1 @@
+ジョシュタチトミッツィワサガシテイルショルイヲミツケラレナカッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_023.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_023.txt
new file mode 100755
index 00000000..e4fa93e5
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_023.txt
@@ -0,0 +1 @@
+フィレンツェ、パドヴァ、ヴェネツィアワドレモイタリアノトシデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_024.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_024.txt
new file mode 100755
index 00000000..07eadf24
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_024.txt
@@ -0,0 +1 @@
+ガクフニツギノヨーニカイテアルノガ、エーフェリチェデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_025.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_025.txt
new file mode 100755
index 00000000..5671ac27
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_025.txt
@@ -0,0 +1 @@
+ショペンハウエルトニーチェノテツガクショヲホンダナカラトリダシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_026.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_026.txt
new file mode 100755
index 00000000..232c1de6
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_026.txt
@@ -0,0 +1 @@
+サッソクメシツカイゼンインニシラセマショー。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_027.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_027.txt
new file mode 100755
index 00000000..f5f037d1
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_027.txt
@@ -0,0 +1 @@
+オモイワタイレヲヌイデ、アワセニキガエル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_028.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_028.txt
new file mode 100755
index 00000000..43609c82
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_028.txt
@@ -0,0 +1 @@
+ボストンデ、トアルチョプスイヤエハイッテユウハンヲクッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_029.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_029.txt
new file mode 100755
index 00000000..b56e1b29
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_029.txt
@@ -0,0 +1 @@
+ロクスッポキュウケーヲトラズハタライタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_030.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_030.txt
new file mode 100755
index 00000000..935d4673
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_030.txt
@@ -0,0 +1 @@
+カツテヒトリデコクフニシンニュウシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_031.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_031.txt
new file mode 100755
index 00000000..06c66c90
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_031.txt
@@ -0,0 +1 @@
+ダガ、キョーオマエガココエゴジュライニナッタノワ、ドンナゴヨーナノカナ?
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_032.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_032.txt
new file mode 100755
index 00000000..e3e92e99
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_032.txt
@@ -0,0 +1 @@
+サブフランチャイザーヲフヤシテメザセヒャクテンポ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_033.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_033.txt
new file mode 100755
index 00000000..33903648
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_033.txt
@@ -0,0 +1 @@
+シコクデオヘンロヲアンギャシヨー。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_034.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_034.txt
new file mode 100755
index 00000000..706b7353
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_034.txt
@@ -0,0 +1 @@
+イツモノトオリギャンギャンナキダシマシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_035.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_035.txt
new file mode 100755
index 00000000..eb8e2563
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_035.txt
@@ -0,0 +1 @@
+センセーワ、タッタママニュースヲミテイマシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_036.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_036.txt
new file mode 100755
index 00000000..866b71ed
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_036.txt
@@ -0,0 +1 @@
+ワタシワギョットメヲミヒライタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_037.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_037.txt
new file mode 100755
index 00000000..53db0c82
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_037.txt
@@ -0,0 +1 @@
+トモダチエニューイヤーカードヲオクロー。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_038.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_038.txt
new file mode 100755
index 00000000..890f3d56
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_038.txt
@@ -0,0 +1 @@
+カセーフワヤスミニオシャレナアウターウェアニミヲツツミヒトリデヤタイヲタノシミマシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_039.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_039.txt
new file mode 100755
index 00000000..82767a5f
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_039.txt
@@ -0,0 +1 @@
+ウォッカノオトモニワシオヅケノキュウリガアイマス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_040.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_040.txt
new file mode 100755
index 00000000..7df969b0
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_040.txt
@@ -0,0 +1 @@
+ヤマノムコーノミュンヒェンノヒトタチガコーゲキヲシカケタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_041.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_041.txt
new file mode 100755
index 00000000..e6ebbabd
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_041.txt
@@ -0,0 +1 @@
+ボスニアコッキョーカラノコーゲキニヨリ、ジュウイチガツニヴァリェヴォガセンリョーサレタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_042.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_042.txt
new file mode 100755
index 00000000..58ada852
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_042.txt
@@ -0,0 +1 @@
+シルヴィウスワデュボアトヨバレテイタフランスノユグノーノイエニウマレタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_043.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_043.txt
new file mode 100755
index 00000000..cd4c51fa
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_043.txt
@@ -0,0 +1 @@
+ソノホカニワタシニデキルコトワナカッタノデス、ユリエワナミダゴエニナッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_044.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_044.txt
new file mode 100755
index 00000000..5431a109
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_044.txt
@@ -0,0 +1 @@
+ガルハカセヒャクタイチカク。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_045.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_045.txt
new file mode 100755
index 00000000..e5b4a08a
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_045.txt
@@ -0,0 +1 @@
+ニホンセーフカラノヒャクチョーエンヲコエルヨサンヨーキュウ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_046.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_046.txt
new file mode 100755
index 00000000..58cb3639
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_046.txt
@@ -0,0 +1 @@
+シャキョーノウツクシサニワタシワギョーテンシテシマッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_047.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_047.txt
new file mode 100755
index 00000000..6b146b79
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_047.txt
@@ -0,0 +1 @@
+ソプラノカシュポリランダチョワカゲキアイーダノトクベツメーカシュトヒョーバンデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_048.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_048.txt
new file mode 100755
index 00000000..085a5390
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_048.txt
@@ -0,0 +1 @@
+アナタニワサイショヒャクポンドワタシマス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_049.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_049.txt
new file mode 100755
index 00000000..a603f5f1
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_049.txt
@@ -0,0 +1 @@
+シャチョーカラノシジデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_050.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_050.txt
new file mode 100755
index 00000000..f17afddc
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_050.txt
@@ -0,0 +1 @@
+ドーモキマグレトユウモノワタショーメフィスティックナモノデアルラシイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_051.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_051.txt
new file mode 100755
index 00000000..d6a16c95
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_051.txt
@@ -0,0 +1 @@
+カエルガピョコピョコトビマワッテイマス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_052.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_052.txt
new file mode 100755
index 00000000..d85eada0
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_052.txt
@@ -0,0 +1 @@
+マキョーニアシヲフミイレル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_053.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_053.txt
new file mode 100755
index 00000000..4d09b98f
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_053.txt
@@ -0,0 +1 @@
+ヴァンダーヴォットタイムチュウワ、イワユルパーティーノヨーデハレヤカデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_054.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_054.txt
new file mode 100755
index 00000000..07a7b062
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_054.txt
@@ -0,0 +1 @@
+スピリッツトワジョーリュウシュノコトデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_055.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_055.txt
new file mode 100755
index 00000000..7a3bc922
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_055.txt
@@ -0,0 +1 @@
+ヌルシアノベネディクトゥスワアポロンシンデンヲコワシ、ベネディクトカイノシュウドーインヲタテタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_056.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_056.txt
new file mode 100755
index 00000000..a2b41294
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_056.txt
@@ -0,0 +1 @@
+チョードソノトキ、テストゥパーゴガコップヲモッテタチアガリマシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_057.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_057.txt
new file mode 100755
index 00000000..3a2a9010
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_057.txt
@@ -0,0 +1 @@
+パフィーノグッズガノコラズヘヤニオチツイタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_058.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_058.txt
new file mode 100755
index 00000000..776a4930
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_058.txt
@@ -0,0 +1 @@
+エピファーノフワサイフヲナクシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_059.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_059.txt
new file mode 100755
index 00000000..48fdbdb0
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_059.txt
@@ -0,0 +1 @@
+ポピュラーナソフトヲツカイセキュアナジョータイヲフッキュウスル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_060.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_060.txt
new file mode 100755
index 00000000..fa3556c0
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_060.txt
@@ -0,0 +1 @@
+チョコノザイコアッタカナ?
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_061.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_061.txt
new file mode 100755
index 00000000..f0ef7ff2
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_061.txt
@@ -0,0 +1 @@
+オメエ、コノシコミニャア、ドノクレエジカンカカルカシッテッカ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_062.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_062.txt
new file mode 100755
index 00000000..bc17621e
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_062.txt
@@ -0,0 +1 @@
+ソレニ、コノホーガカラダノタメニャズットイインダカラネ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_063.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_063.txt
new file mode 100755
index 00000000..ddf6c421
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_063.txt
@@ -0,0 +1 @@
+ナツヤスミニ、トラアヴェミュンエリョコーシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_064.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_064.txt
new file mode 100755
index 00000000..ef6a82e0
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_064.txt
@@ -0,0 +1 @@
+ココデイッショニウェイクフィールドノオバヲマッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_065.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_065.txt
new file mode 100755
index 00000000..24c71539
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_065.txt
@@ -0,0 +1 @@
+ヤッツニナルウォルタートイッショニデタキョーダイガイタガ、ウォルターダケハッケンサレタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_066.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_066.txt
new file mode 100755
index 00000000..0db5a69c
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_066.txt
@@ -0,0 +1 @@
+サイショノジョブワウォーリアガイイトオモイマス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_067.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_067.txt
new file mode 100755
index 00000000..35c78569
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_067.txt
@@ -0,0 +1 @@
+オヨソロッピャクメートルサキヲウセツデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_068.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_068.txt
new file mode 100755
index 00000000..e76b41da
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_068.txt
@@ -0,0 +1 @@
+シンテンオープンノレセプションニタクサンノオキャクサンヲショータイシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_069.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_069.txt
new file mode 100755
index 00000000..096b557f
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_069.txt
@@ -0,0 +1 @@
+キャクホンサクシャピエールオービュルナンノキュウジクレマンガ、シュジンノショサイノトヲタイセツソーニヒライタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_070.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_070.txt
new file mode 100755
index 00000000..58d8e911
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_070.txt
@@ -0,0 +1 @@
+ワレワレワ、テンシュキョートカチョーローキョーカイハノモノデ、テンシュキョートガタスウヲシメテイル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_071.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_071.txt
new file mode 100755
index 00000000..0f7297a0
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_071.txt
@@ -0,0 +1 @@
+ケッキョクノトコロオタガイゴジッポヒャッポダ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_072.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_072.txt
new file mode 100755
index 00000000..f480f572
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_072.txt
@@ -0,0 +1 @@
+トッピョーシモナイハナシダガ、ケッシテウソデワナイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_073.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_073.txt
new file mode 100755
index 00000000..a3054ad7
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_073.txt
@@ -0,0 +1 @@
+ネットデケンアンノカイケツヲメザス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_074.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_074.txt
new file mode 100755
index 00000000..e48f33dd
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_074.txt
@@ -0,0 +1 @@
+キレアジスルドイペティナイフワツカイガッテガヨイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_075.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_075.txt
new file mode 100755
index 00000000..7086b203
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_075.txt
@@ -0,0 +1 @@
+ユビヲクワエテピュートヒトコエクチブエヲフイタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_076.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_076.txt
new file mode 100755
index 00000000..e20527f9
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_076.txt
@@ -0,0 +1 @@
+クレンペキョートーワブコツナオトコダガ、ジブンノガクモンノヒミツニワフカクヒタッテイタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_077.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_077.txt
new file mode 100755
index 00000000..98f6625f
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_077.txt
@@ -0,0 +1 @@
+シッポフリタテ、ヒゲクイソラス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_078.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_078.txt
new file mode 100755
index 00000000..7d5dcd56
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_078.txt
@@ -0,0 +1 @@
+スベテノエモノヲノゾミドオリニネラウギジュツガアル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_079.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_079.txt
new file mode 100755
index 00000000..5e6a078c
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_079.txt
@@ -0,0 +1 @@
+タコノグニャグニャシタカンショクガイヤダ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_080.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_080.txt
new file mode 100755
index 00000000..6fc3b177
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_080.txt
@@ -0,0 +1 @@
+ワタシタチワ、チュウショーテキイシキテキジコヲヒテースルコトデ、ホントーノジコトワシンジンイチニョダトユウコトヲシル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_081.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_081.txt
new file mode 100755
index 00000000..642a4f13
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_081.txt
@@ -0,0 +1 @@
+カシマミョージンガクギデサシツラヌイテ、サカナガウゴカナイヨーニシテイル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_082.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_082.txt
new file mode 100755
index 00000000..dcaf648a
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_082.txt
@@ -0,0 +1 @@
+ワタシワテハジメニ、ドーギョーシャカラハナシヲキクドリョクヲシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_083.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_083.txt
new file mode 100755
index 00000000..3110f33c
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_083.txt
@@ -0,0 +1 @@
+トテモウレシソーニピョンピョンハネテデテイッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_084.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_084.txt
new file mode 100755
index 00000000..f2ea76cf
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_084.txt
@@ -0,0 +1 @@
+ニフンダケノオルガンエンソーデオワッテシマッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_085.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_085.txt
new file mode 100755
index 00000000..6f769280
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_085.txt
@@ -0,0 +1 @@
+ニセキョーカイニダマサレルナ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_086.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_086.txt
new file mode 100755
index 00000000..f35bc61f
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_086.txt
@@ -0,0 +1 @@
+オヨソヒャクネンマエニワ、ヤクザイトシテクスリヤデウッテイタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_087.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_087.txt
new file mode 100755
index 00000000..94e4ceb8
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_087.txt
@@ -0,0 +1 @@
+イッソキャクホンカヲメザシタホーガイイカトモカンガエタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_088.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_088.txt
new file mode 100755
index 00000000..a1d9523a
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_088.txt
@@ -0,0 +1 @@
+コノショモツニゴビュウガアッテモ、ジュンイツデナイナニモノニモインフェクトシナイデショー。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_089.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_089.txt
new file mode 100755
index 00000000..9d1ea2e4
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_089.txt
@@ -0,0 +1 @@
+ブッキョーワインドユライノシュウキョーデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_090.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_090.txt
new file mode 100755
index 00000000..04db3592
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_090.txt
@@ -0,0 +1 @@
+キャリーバッグワリョコーニヒッス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_091.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_091.txt
new file mode 100755
index 00000000..7b0a0698
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_091.txt
@@ -0,0 +1 @@
+ホンバンマエワメチャメチャフアンニナル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_092.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_092.txt
new file mode 100755
index 00000000..e3d4eebb
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_092.txt
@@ -0,0 +1 @@
+サンカクカンスウニオイテピュタゴラスノテーリワヒッスデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_093.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_093.txt
new file mode 100755
index 00000000..d92b854c
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_093.txt
@@ -0,0 +1 @@
+チョメーナラニョンハカセガカンジャトセッシテイタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_094.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_094.txt
new file mode 100755
index 00000000..fb6b0e05
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_094.txt
@@ -0,0 +1 @@
+オモチャノカタナヲモッタショーネンガ、オヒャクドイシニヨリカカッテイル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_095.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_095.txt
new file mode 100755
index 00000000..7262c8fd
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_095.txt
@@ -0,0 +1 @@
+ショクリョーノホキュウガキュウムデアルトツタエラレタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_096.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_096.txt
new file mode 100755
index 00000000..6c2120fc
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_096.txt
@@ -0,0 +1 @@
+テンジカイデアノサクヒンノミフヒョーダッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_097.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_097.txt
new file mode 100755
index 00000000..a383887e
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_097.txt
@@ -0,0 +1 @@
+キャクジンヲモテナスノワトーゼンデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_098.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_098.txt
new file mode 100755
index 00000000..ed38b2af
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_098.txt
@@ -0,0 +1 @@
+リョコーキャクガタノシメルヨーニクフウシマショー。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_099.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_099.txt
new file mode 100755
index 00000000..1d6230ff
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_099.txt
@@ -0,0 +1 @@
+コンナジョーダンノヨーナニュースワナイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_100.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_100.txt
new file mode 100755
index 00000000..684de9db
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_100.txt
@@ -0,0 +1 @@
+チイサイホシヲタクサンエガイタ、ミズノミグラスワヨクアル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_101.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_101.txt
new file mode 100755
index 00000000..37fd8ea6
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_101.txt
@@ -0,0 +1 @@
+エワ、ネコノシッポデモアルヨーニ、センタンヲブルブルトフルワセナガラ、ウゴイテイク。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_102.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_102.txt
new file mode 100755
index 00000000..a559956f
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_102.txt
@@ -0,0 +1 @@
+カイテントーショプリンガイチバンウレテイタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_103.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_103.txt
new file mode 100755
index 00000000..d5b44c32
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_103.txt
@@ -0,0 +1 @@
+ロナルドホープタイイガタイショーノマンションエキュウコーシマシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_104.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_104.txt
new file mode 100755
index 00000000..1bb0b1d2
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_104.txt
@@ -0,0 +1 @@
+ニッカンセンティナルシノヘプバンデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_105.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_105.txt
new file mode 100755
index 00000000..84b9f50d
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_105.txt
@@ -0,0 +1 @@
+コノホーセキワ、ヒトツヒャクマンエンイジョーノオネダンデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_106.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_106.txt
new file mode 100755
index 00000000..a859ea55
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_106.txt
@@ -0,0 +1 @@
+チョーチョトナカヨクナルンダカラ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_107.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_107.txt
new file mode 100755
index 00000000..6d68ad3a
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_107.txt
@@ -0,0 +1 @@
+ウチュウデワ、エントロピーワムサイゲンニゾーダイシテイル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_108.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_108.txt
new file mode 100755
index 00000000..5c7d4d10
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_108.txt
@@ -0,0 +1 @@
+カワノチュウリュウニシュウラクガアル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_109.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_109.txt
new file mode 100755
index 00000000..ae5f5132
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_109.txt
@@ -0,0 +1 @@
+ゼヒオハナシサセテイタダキタイトオモイマス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_110.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_110.txt
new file mode 100755
index 00000000..bf3d119f
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_110.txt
@@ -0,0 +1 @@
+オトナリサンガコンニャクヲモッテイラッシャル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_111.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_111.txt
new file mode 100755
index 00000000..ac7d7982
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_111.txt
@@ -0,0 +1 @@
+パーティーワタノシムモノデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_112.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_112.txt
new file mode 100755
index 00000000..1bea9340
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_112.txt
@@ -0,0 +1 @@
+オテツトオオキクカカレタバンチャジャワンワ、コレラノヒトビトノマエニオカレタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_113.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_113.txt
new file mode 100755
index 00000000..a604dbdc
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_113.txt
@@ -0,0 +1 @@
+ワタシノポケットノナカニワケータイデンワガハイッテイマス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_114.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_114.txt
new file mode 100755
index 00000000..4613bb17
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_114.txt
@@ -0,0 +1 @@
+カレワコンドワボクジョーエイッテ、ヌマチデコアクマノシッポヒトツミツケマシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_115.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_115.txt
new file mode 100755
index 00000000..469ea199
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_115.txt
@@ -0,0 +1 @@
+ゴギョーセツニヨルウラナイガアルトユウジョーホーアリ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_116.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_116.txt
new file mode 100755
index 00000000..ab7b424e
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_116.txt
@@ -0,0 +1 @@
+テンプルクン、スデニマギャクダトイッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_117.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_117.txt
new file mode 100755
index 00000000..eeac37ea
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_117.txt
@@ -0,0 +1 @@
+セカイジュウノサマザマナモニュメントヲタズネアルイタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_118.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_118.txt
new file mode 100755
index 00000000..4b198c9b
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_118.txt
@@ -0,0 +1 @@
+アンソニーホプキンスワユウメーナハイユウデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_119.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_119.txt
new file mode 100755
index 00000000..00913459
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_119.txt
@@ -0,0 +1 @@
+カノジョワデキルダケピッタリトミミヲアテテキキマシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_120.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_120.txt
new file mode 100755
index 00000000..445032bd
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_120.txt
@@ -0,0 +1 @@
+チャヒトツマイラヌカ、マアイイデ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_121.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_121.txt
new file mode 100755
index 00000000..b60b73be
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_121.txt
@@ -0,0 +1 @@
+ボヤデスンデヨカッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_122.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_122.txt
new file mode 100755
index 00000000..a08b9e52
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_122.txt
@@ -0,0 +1 @@
+モンタギュゴーシキョーガマンチェスターニキタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_123.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_123.txt
new file mode 100755
index 00000000..710d9c89
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_123.txt
@@ -0,0 +1 @@
+ウィスキーノミズワリヲガッツリノンダ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_124.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_124.txt
new file mode 100755
index 00000000..379a5e59
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_124.txt
@@ -0,0 +1 @@
+コレヤオマツリヲワカイモノニミセルニャモッテコイダ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_125.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_125.txt
new file mode 100755
index 00000000..076acd27
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_125.txt
@@ -0,0 +1 @@
+ワタシワイメージカラーヲピンクニキメタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_126.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_126.txt
new file mode 100755
index 00000000..a1075fa9
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_126.txt
@@ -0,0 +1 @@
+ムニャムニャ、モータベレマセン。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_127.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_127.txt
new file mode 100755
index 00000000..020ad33d
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_127.txt
@@ -0,0 +1 @@
+マンシュウワウキイガイニワアメガスクナイトイワレテイルガ、ワタシガマンシュウニアルアイダワ、タイセンチュウノセーカ、ズイブンアメガオオカッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_128.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_128.txt
new file mode 100755
index 00000000..9629a410
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_128.txt
@@ -0,0 +1 @@
+キンイツイザカヤデワイチバンウレテモフタリデハッセンエンクライダ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_129.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_129.txt
new file mode 100755
index 00000000..7c81cb79
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_129.txt
@@ -0,0 +1 @@
+ネガイヲカナエル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_130.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_130.txt
new file mode 100755
index 00000000..9cc006f4
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_130.txt
@@ -0,0 +1 @@
+サイショツラカッタケド、ハナヤエンゲーガスキダッタカラ、シツイガイヤサレナイコトモナイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_131.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_131.txt
new file mode 100755
index 00000000..bbb3b5d5
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_131.txt
@@ -0,0 +1 @@
+ピピスジイサンワモーネルラシイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_132.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_132.txt
new file mode 100755
index 00000000..498f52f5
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_132.txt
@@ -0,0 +1 @@
+スグウィルキンソンヲヨビニイケ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_133.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_133.txt
new file mode 100755
index 00000000..a600a865
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_133.txt
@@ -0,0 +1 @@
+オヒルマエジャスパーサンタクエフタタビオジャマシマシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_134.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_134.txt
new file mode 100755
index 00000000..11bc1eaa
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_134.txt
@@ -0,0 +1 @@
+ソノリュウノヒャクノアタマガオソロシイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_135.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_135.txt
new file mode 100755
index 00000000..28c93f4d
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_135.txt
@@ -0,0 +1 @@
+ヒツヨーナミョーバンノリョーワプリントニカイテアリマス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_136.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_136.txt
new file mode 100755
index 00000000..452d02b0
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_136.txt
@@ -0,0 +1 @@
+マリーロジェワパヴェサンタンノイエヲデタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_137.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_137.txt
new file mode 100755
index 00000000..156fa224
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_137.txt
@@ -0,0 +1 @@
+ヨミススムニツレ、マスマスキョーミガワイタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_138.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_138.txt
new file mode 100755
index 00000000..03c7a1e1
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_138.txt
@@ -0,0 +1 @@
+ワライカケナガライチニホチカヨッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_139.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_139.txt
new file mode 100755
index 00000000..59d97cae
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_139.txt
@@ -0,0 +1 @@
+チヒョーヲリョクカシテ、オンダンカヲヨクシスルノーリョクヲツヨクスル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_140.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_140.txt
new file mode 100755
index 00000000..d13dd5e6
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_140.txt
@@ -0,0 +1 @@
+ハサミデプツットキッタキレハシヲペットニアゲタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_141.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_141.txt
new file mode 100755
index 00000000..e3315d13
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_141.txt
@@ -0,0 +1 @@
+ホームランヲウツ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_142.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_142.txt
new file mode 100755
index 00000000..32f0529f
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_142.txt
@@ -0,0 +1 @@
+プレゼントヲギャロウェイサンニワタシテクダサイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_143.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_143.txt
new file mode 100755
index 00000000..137a41ce
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_143.txt
@@ -0,0 +1 @@
+ケプラーノホーソクニツイテチョクセツワタシニキイテキタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_144.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_144.txt
new file mode 100755
index 00000000..976405b2
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_144.txt
@@ -0,0 +1 @@
+ウェンディーズワハンバーガーヤサンデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_145.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_145.txt
new file mode 100755
index 00000000..47fecc55
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_145.txt
@@ -0,0 +1 @@
+シカシヒョーガワアルプスダケニアルモノデワナイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_146.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_146.txt
new file mode 100755
index 00000000..b1dbe3f9
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_146.txt
@@ -0,0 +1 @@
+コノサキヒャクネンモマッチャワスイタイシナイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_147.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_147.txt
new file mode 100755
index 00000000..a7a0e688
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_147.txt
@@ -0,0 +1 @@
+ジブンヲヒョーカスルノワカイシャデアッテ、イキスギタジコヒョーゲンワシッキャクニツナガル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_148.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_148.txt
new file mode 100755
index 00000000..76dc4009
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_148.txt
@@ -0,0 +1 @@
+ヨルニフクカゼノヒュウヒュウトユウオトガワタシヲフアンニサセル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_149.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_149.txt
new file mode 100755
index 00000000..1fee727f
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_149.txt
@@ -0,0 +1 @@
+カワイイキャシャナオンナノコ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_150.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_150.txt
new file mode 100755
index 00000000..1ea2bd65
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_150.txt
@@ -0,0 +1 @@
+スイチュウノキンギョヲスクウタメノポイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_151.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_151.txt
new file mode 100755
index 00000000..ffa8f651
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_151.txt
@@ -0,0 +1 @@
+グレンエルギンワウィスキーノジョーリュウジョデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_152.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_152.txt
new file mode 100755
index 00000000..58b208fd
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_152.txt
@@ -0,0 +1 @@
+イッスンボーシガ、ヒョコヒョコトカレノホーエチカヅイタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_153.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_153.txt
new file mode 100755
index 00000000..9dad72a5
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_153.txt
@@ -0,0 +1 @@
+レンチュウワリビングデペチャクチャシャベッテ、ケーカイシテイナイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_154.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_154.txt
new file mode 100755
index 00000000..bae52fab
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_154.txt
@@ -0,0 +1 @@
+ヘーイチローワシャツイチマイニナッテキヌモノノフトンノナカエモグリコンダ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_155.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_155.txt
new file mode 100755
index 00000000..30306da8
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_155.txt
@@ -0,0 +1 @@
+シモギョークニヒッコス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_156.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_156.txt
new file mode 100755
index 00000000..0bdeddfd
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_156.txt
@@ -0,0 +1 @@
+カレノコトバニイッシュフシギナカンカクヲオボエタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_157.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_157.txt
new file mode 100755
index 00000000..a518307e
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_157.txt
@@ -0,0 +1 @@
+コノジギョーショニワヒャクニンイジョーノヒトガツトメテイマス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_158.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_158.txt
new file mode 100755
index 00000000..097bd3f2
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_158.txt
@@ -0,0 +1 @@
+ワタシノイエバカリデナク、キンジョノジュウキョトイワズ、ショーテントイワズ、バラックノイエイエデワミナクサバナヲウエテイル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_159.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_159.txt
new file mode 100755
index 00000000..cf9d7f6b
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_159.txt
@@ -0,0 +1 @@
+ドーセワタシワウマノセワヲセニャナランカラ、ソトエイコー。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_160.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_160.txt
new file mode 100755
index 00000000..95164c22
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_160.txt
@@ -0,0 +1 @@
+ヤンセチャントユウオワライゲーニン。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_161.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_161.txt
new file mode 100755
index 00000000..e18ddfe2
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_161.txt
@@ -0,0 +1 @@
+オトコガミョーナカオヲシテ、イッシュンザンニンニナッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_162.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_162.txt
new file mode 100755
index 00000000..f20f295c
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_162.txt
@@ -0,0 +1 @@
+フキュウカツドーニゲンメツシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_163.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_163.txt
new file mode 100755
index 00000000..da9746c4
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_163.txt
@@ -0,0 +1 @@
+アメガポツポツフリダシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_164.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_164.txt
new file mode 100755
index 00000000..fd908306
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_164.txt
@@ -0,0 +1 @@
+ペリウィンクルヤプランティンワブルーアイデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_165.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_165.txt
new file mode 100755
index 00000000..92da75fa
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_165.txt
@@ -0,0 +1 @@
+ヒメヤジジョタチガ、キンポーゲヤタンポポノハナヲモッテ、カレノホーエカケヨッテイッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_166.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_166.txt
new file mode 100755
index 00000000..b7ea182a
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_166.txt
@@ -0,0 +1 @@
+ミンナノキョーリョクノオカゲデキキョーデキタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_167.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_167.txt
new file mode 100755
index 00000000..c1e8b794
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_167.txt
@@ -0,0 +1 @@
+ウォルタートウォードガニュウシツスルト、ノラガマッカニナッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_168.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_168.txt
new file mode 100755
index 00000000..379cdd57
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_168.txt
@@ -0,0 +1 @@
+イマノモチフダデワアガレズニオワル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_169.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_169.txt
new file mode 100755
index 00000000..e41dea6d
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_169.txt
@@ -0,0 +1 @@
+ベンキョーチュウワハナシカケナイデ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_170.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_170.txt
new file mode 100755
index 00000000..b95334ff
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_170.txt
@@ -0,0 +1 @@
+レパードノカダンガカレハテタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_171.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_171.txt
new file mode 100755
index 00000000..801c3a30
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_171.txt
@@ -0,0 +1 @@
+ジョーリュウシュニミョーバンヲクワエル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_172.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_172.txt
new file mode 100755
index 00000000..4b94e1d8
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_172.txt
@@ -0,0 +1 @@
+トッツキニクイジョチュウガサンニンイル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_173.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_173.txt
new file mode 100755
index 00000000..a41ea56b
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_173.txt
@@ -0,0 +1 @@
+レインボーブリッジワトーキョーノメーショ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_174.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_174.txt
new file mode 100755
index 00000000..a9774401
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_174.txt
@@ -0,0 +1 @@
+ヒキョーモノワアクトーデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_175.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_175.txt
new file mode 100755
index 00000000..f7a73f8d
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_175.txt
@@ -0,0 +1 @@
+トツゼンウミエトビコンダ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_176.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_176.txt
new file mode 100755
index 00000000..31530bd8
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_176.txt
@@ -0,0 +1 @@
+シゴトワドッサリトアリマス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_177.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_177.txt
new file mode 100755
index 00000000..8e97c6e5
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_177.txt
@@ -0,0 +1 @@
+ハマキパイプワアリマシタカ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_178.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_178.txt
new file mode 100755
index 00000000..94c4bc17
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_178.txt
@@ -0,0 +1 @@
+ヤオヤニイッテヒャクエンデダイコンヲカッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_179.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_179.txt
new file mode 100755
index 00000000..92a11952
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_179.txt
@@ -0,0 +1 @@
+ハンニャトワキジョノノーメンノコトデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_180.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_180.txt
new file mode 100755
index 00000000..de9bdab1
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_180.txt
@@ -0,0 +1 @@
+ニホンエイクニワフネカヒコーキガヒツヨーデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_181.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_181.txt
new file mode 100755
index 00000000..2ffa3e65
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_181.txt
@@ -0,0 +1 @@
+シカシパーデマワルノモムズカシイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_182.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_182.txt
new file mode 100755
index 00000000..1197165a
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_182.txt
@@ -0,0 +1 @@
+ノボセナイヨーニニュウヨクスルニワオユノリョートオンドガダイジ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_183.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_183.txt
new file mode 100755
index 00000000..1d319a1f
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_183.txt
@@ -0,0 +1 @@
+キタロークンワジョーダンハンブンデヌスミニハイッテケガヲシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_184.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_184.txt
new file mode 100755
index 00000000..cdf4ecb1
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_184.txt
@@ -0,0 +1 @@
+バーニイシガピシットコタエタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_185.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_185.txt
new file mode 100755
index 00000000..9cfe1c59
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_185.txt
@@ -0,0 +1 @@
+オトコノミョーナウゴキガアヤシイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_186.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_186.txt
new file mode 100755
index 00000000..f87c6067
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_186.txt
@@ -0,0 +1 @@
+ワタシノビョーキワセンテンセーナノデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_187.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_187.txt
new file mode 100755
index 00000000..ba2161ec
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_187.txt
@@ -0,0 +1 @@
+サンゴクシノカンウトユウショーグンワスゴクユウメーデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_188.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_188.txt
new file mode 100755
index 00000000..2585df85
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_188.txt
@@ -0,0 +1 @@
+カコクナギョームニタエル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_189.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_189.txt
new file mode 100755
index 00000000..3c39dfe4
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_189.txt
@@ -0,0 +1 @@
+マチノニョーボーラシイフタリヅレガ、ヒガサヲモッテハイッテキタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_190.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_190.txt
new file mode 100755
index 00000000..c62deb22
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_190.txt
@@ -0,0 +1 @@
+ナヲツァウォツキイトイッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_191.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_191.txt
new file mode 100755
index 00000000..bd948cfd
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_191.txt
@@ -0,0 +1 @@
+ノミカイノサンカヲキョヒシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_192.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_192.txt
new file mode 100755
index 00000000..ba15f057
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_192.txt
@@ -0,0 +1 @@
+フジンガギョーテンシタノモムリワナイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_193.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_193.txt
new file mode 100755
index 00000000..76030eaa
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_193.txt
@@ -0,0 +1 @@
+セファドールワメマイヲオサエルクスリデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_194.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_194.txt
new file mode 100755
index 00000000..8ac941cf
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_194.txt
@@ -0,0 +1 @@
+ミンノイチクンコガクシャワ、ソーダイテンセキノヒトツニアゲテアルチャセンノケージョーヲオモイオコスニクルシンデイル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_195.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_195.txt
new file mode 100755
index 00000000..7cd6bc09
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_195.txt
@@ -0,0 +1 @@
+シンカイギョワミタメワワルイガオイシイコトガオオイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_196.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_196.txt
new file mode 100755
index 00000000..a104c235
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_196.txt
@@ -0,0 +1 @@
+ニューヨークデイヴニングポストノキジニチュウモクシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_197.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_197.txt
new file mode 100755
index 00000000..61811e02
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_197.txt
@@ -0,0 +1 @@
+タシカニギュウニュウトコーンフレークノアイショーワバツグンダ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_198.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_198.txt
new file mode 100755
index 00000000..1d374054
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_198.txt
@@ -0,0 +1 @@
+ソノイチワ、メージサンジュウナナネンノクガツヨーカカココノカノヨルトオボエテイル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_199.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_199.txt
new file mode 100755
index 00000000..1eb62061
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_199.txt
@@ -0,0 +1 @@
+マルメゾンノテンシュワジェシートワナカヨシダ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_200.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_200.txt
new file mode 100755
index 00000000..f6a536b7
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_200.txt
@@ -0,0 +1 @@
+ツリザオヲカタニカケタショシアリ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_201.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_201.txt
new file mode 100755
index 00000000..addff50c
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_201.txt
@@ -0,0 +1 @@
+サイシンエーキニノリコム。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_202.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_202.txt
new file mode 100755
index 00000000..90861e86
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_202.txt
@@ -0,0 +1 @@
+ダレカガウシロエキテ、ヘンナコエデサケンダノデゾットシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_203.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_203.txt
new file mode 100755
index 00000000..4610a465
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_203.txt
@@ -0,0 +1 @@
+オオデラノイシダンノマエニタチドマッテ、ソノデテクルノヲマチアワセタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_204.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_204.txt
new file mode 100755
index 00000000..a408bcc4
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_204.txt
@@ -0,0 +1 @@
+ミカイケツノケンアンヲモッテジュウヤクトタイジスル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_205.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_205.txt
new file mode 100755
index 00000000..3b4d8e89
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_205.txt
@@ -0,0 +1 @@
+ウスヅキノヒカリガニワヲテラス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_206.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_206.txt
new file mode 100755
index 00000000..9b4e7039
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_206.txt
@@ -0,0 +1 @@
+ハンニンガドッチノヘヤエハイッタカワカラナイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_207.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_207.txt
new file mode 100755
index 00000000..4b14d31f
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_207.txt
@@ -0,0 +1 @@
+ケーコクカラデタヒョーガガイッポンニゴーリュウスル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_208.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_208.txt
new file mode 100755
index 00000000..4b82914d
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_208.txt
@@ -0,0 +1 @@
+ディスカッションヲススメル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_209.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_209.txt
new file mode 100755
index 00000000..2ac580e5
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_209.txt
@@ -0,0 +1 @@
+クズリュウミョージンヲマツルタメニトーローヲナガス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_210.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_210.txt
new file mode 100755
index 00000000..37de66b4
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_210.txt
@@ -0,0 +1 @@
+コンカイノシリョーヅクリワフカイシリョヲヒツヨートシタガ、センジツヤットシュウリョーシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_211.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_211.txt
new file mode 100755
index 00000000..e27c5bc0
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_211.txt
@@ -0,0 +1 @@
+コッシヲシッカリトクミタテル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_212.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_212.txt
new file mode 100755
index 00000000..7aa94536
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_212.txt
@@ -0,0 +1 @@
+キキュウニノッテソラヲタノシム。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_213.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_213.txt
new file mode 100755
index 00000000..a66fb295
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_213.txt
@@ -0,0 +1 @@
+ヒヒョーバカリデナクタイアンモダスベキ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_214.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_214.txt
new file mode 100755
index 00000000..d86c4c8c
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_214.txt
@@ -0,0 +1 @@
+カレラワマクノアイダニキドノソトヲサンポシテイルノデアル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_215.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_215.txt
new file mode 100755
index 00000000..6a29a42d
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_215.txt
@@ -0,0 +1 @@
+カコノカズカズノキビョーガナオルヨーニナリツツアル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_216.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_216.txt
new file mode 100755
index 00000000..ef60bc48
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_216.txt
@@ -0,0 +1 @@
+コーニュウシャワポンプノシュウリガヒツヨーナコトニキガツイタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_217.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_217.txt
new file mode 100755
index 00000000..2583d619
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_217.txt
@@ -0,0 +1 @@
+カレジシンワ、レジギョームニツキタイトオモッテイル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_218.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_218.txt
new file mode 100755
index 00000000..11b8db24
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_218.txt
@@ -0,0 +1 @@
+ジゲワキンイロナンデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_219.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_219.txt
new file mode 100755
index 00000000..a9780ab2
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_219.txt
@@ -0,0 +1 @@
+エンピツワオレヤスクテフベンデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_220.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_220.txt
new file mode 100755
index 00000000..d96cf34c
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_220.txt
@@ -0,0 +1 @@
+ヒポクラテスワイガクノチチトヨバレマス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_221.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_221.txt
new file mode 100755
index 00000000..64d01939
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_221.txt
@@ -0,0 +1 @@
+トコロガショーニンワ、クニザカイノスグチカクエスマッテ、ヤハリマエトオナジヨーニヤッテイマス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_222.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_222.txt
new file mode 100755
index 00000000..78b91621
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_222.txt
@@ -0,0 +1 @@
+イママデアカルカッタニカイノマドワ、キュウニマックラニナッテシマイマシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_223.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_223.txt
new file mode 100755
index 00000000..f9ce6e02
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_223.txt
@@ -0,0 +1 @@
+アスファルトニカコマレタナカニケヤキノキガイッポン。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_224.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_224.txt
new file mode 100755
index 00000000..d35945ab
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_224.txt
@@ -0,0 +1 @@
+ナフダヲヨーイスル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_225.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_225.txt
new file mode 100755
index 00000000..e1d3a114
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_225.txt
@@ -0,0 +1 @@
+マッチョナダンセーワモテルソー。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_226.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_226.txt
new file mode 100755
index 00000000..cb7c1b52
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_226.txt
@@ -0,0 +1 @@
+シャムショノヒトノハナシニウソワナカッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_227.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_227.txt
new file mode 100755
index 00000000..deebe31c
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_227.txt
@@ -0,0 +1 @@
+コーラクシーズンノキョートワヒトデイッパイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_228.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_228.txt
new file mode 100755
index 00000000..4ebb85ce
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_228.txt
@@ -0,0 +1 @@
+ドコカラカパチパチトオトガキコエル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_229.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_229.txt
new file mode 100755
index 00000000..d56ad24e
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_229.txt
@@ -0,0 +1 @@
+プロヤキュウワドノチームガユウショースルダロー?
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_230.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_230.txt
new file mode 100755
index 00000000..f6735166
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_230.txt
@@ -0,0 +1 @@
+シカシ、コレデワマルデワタシガユウカイシマシタトジシュシテデルヨーナモノデ、ソンナバカナコトヲスルヤツワアルマイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_231.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_231.txt
new file mode 100755
index 00000000..ce476ffc
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_231.txt
@@ -0,0 +1 @@
+セツボーシツツ、ヌシヲマツ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_232.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_232.txt
new file mode 100755
index 00000000..b5e27a33
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_232.txt
@@ -0,0 +1 @@
+シバラクシテパチパチトユウオトモヤンダ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_233.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_233.txt
new file mode 100755
index 00000000..87375d80
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_233.txt
@@ -0,0 +1 @@
+ミブンヲワキマエズハナッタキョーゲン。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_234.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_234.txt
new file mode 100755
index 00000000..6243ab99
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_234.txt
@@ -0,0 +1 @@
+テンヲカケルリュウノスガタワシンピテキダ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_235.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_235.txt
new file mode 100755
index 00000000..b147c1bc
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_235.txt
@@ -0,0 +1 @@
+ワタシノセーシントイチミャクアイツウジルモノガアルトオモイマシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_236.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_236.txt
new file mode 100755
index 00000000..e7cc9eec
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_236.txt
@@ -0,0 +1 @@
+ミンナモキュウジョーニイキマショー。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_237.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_237.txt
new file mode 100755
index 00000000..78ffd0be
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_237.txt
@@ -0,0 +1 @@
+コペルニクスワポーランドノテンモンガクシャデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_238.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_238.txt
new file mode 100755
index 00000000..77225369
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_238.txt
@@ -0,0 +1 @@
+ウミゾイノリョカンワナガメガイイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_239.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_239.txt
new file mode 100755
index 00000000..801f48a0
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_239.txt
@@ -0,0 +1 @@
+シュウチュウスルトマワリガミエナイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_240.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_240.txt
new file mode 100755
index 00000000..1774e67b
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_240.txt
@@ -0,0 +1 @@
+ハルキザワコンニチノホンゴーザデアル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_241.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_241.txt
new file mode 100755
index 00000000..1cfd4ede
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_241.txt
@@ -0,0 +1 @@
+ワタシノテヲヒッパルヨーニシテ、テノヒラエクレマシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_242.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_242.txt
new file mode 100755
index 00000000..9c704504
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_242.txt
@@ -0,0 +1 @@
+ホッカイノアラナミワ、ソノコオリノゼッペキノネヲカンデ、ハゲシクシブキヲチラシテイル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_243.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_243.txt
new file mode 100755
index 00000000..1b884e0a
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_243.txt
@@ -0,0 +1 @@
+センイヲソーシツサセルノガショーリエノチカミチ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_244.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_244.txt
new file mode 100755
index 00000000..cd9a9fdb
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_244.txt
@@ -0,0 +1 @@
+ガチョーヲカウ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_245.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_245.txt
new file mode 100755
index 00000000..4229ab17
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_245.txt
@@ -0,0 +1 @@
+ファファトワライナガラタノシクテビョーシ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_246.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_246.txt
new file mode 100755
index 00000000..2ec057d4
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_246.txt
@@ -0,0 +1 @@
+ジュウグンキシャワタイイソートーノタイグンヲウケル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_247.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_247.txt
new file mode 100755
index 00000000..02647ff4
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_247.txt
@@ -0,0 +1 @@
+チャワンニカカルホド、シャツノソデノフクラカナノデ、カキイダクテーニチャワンヲモッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_248.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_248.txt
new file mode 100755
index 00000000..90ff27ff
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_248.txt
@@ -0,0 +1 @@
+イロイロカクシテキョーマデハンニントトモニイル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_249.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_249.txt
new file mode 100755
index 00000000..7f16cd9b
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_249.txt
@@ -0,0 +1 @@
+ウラコワネナガライキヲヒイタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_250.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_250.txt
new file mode 100755
index 00000000..6efa3251
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_250.txt
@@ -0,0 +1 @@
+アニガジャケンニサレタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_251.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_251.txt
new file mode 100755
index 00000000..b5893b08
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_251.txt
@@ -0,0 +1 @@
+カレワフフクソーニツブヤイタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_252.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_252.txt
new file mode 100755
index 00000000..bd4c9e10
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_252.txt
@@ -0,0 +1 @@
+モゾーヒンバカリデナク、ホンモノノドイツショーコーヤヘーソツノヘルメットヲウッテイルノモアル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_253.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_253.txt
new file mode 100755
index 00000000..f0ea76d5
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_253.txt
@@ -0,0 +1 @@
+カノジョトイッショニイルトオチツキマス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_254.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_254.txt
new file mode 100755
index 00000000..509f6d16
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_254.txt
@@ -0,0 +1 @@
+コマッテルヒトニムケテキフヲシマシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_255.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_255.txt
new file mode 100755
index 00000000..4a13a812
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_255.txt
@@ -0,0 +1 @@
+オチコンデイルノカ、ウツムイテジットシテイル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_256.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_256.txt
new file mode 100755
index 00000000..e8e21eec
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_256.txt
@@ -0,0 +1 @@
+カイリョーガススムトパンワドンドンオイシクナル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_257.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_257.txt
new file mode 100755
index 00000000..a76f061d
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_257.txt
@@ -0,0 +1 @@
+コンナコトヲイイナガラ、キノミジカイオジイサンワゲタヲツッカケテ、ソソクサトデテイッテシマッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_258.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_258.txt
new file mode 100755
index 00000000..d11280b9
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_258.txt
@@ -0,0 +1 @@
+カノジョトハツデートノキョーワユメウツツ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_259.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_259.txt
new file mode 100755
index 00000000..8d25e38a
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_259.txt
@@ -0,0 +1 @@
+オナジトーキョーノナヲヨブニモ、コンゴワオソラクキュウトーキョートシントーキョートニクベツサレルデアロー。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_260.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_260.txt
new file mode 100755
index 00000000..c5a0cbc2
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_260.txt
@@ -0,0 +1 @@
+コシフリヲニフンカンツヅケル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_261.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_261.txt
new file mode 100755
index 00000000..c40e6d74
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_261.txt
@@ -0,0 +1 @@
+オクビョーモノガニゲダシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_262.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_262.txt
new file mode 100755
index 00000000..d8942a21
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_262.txt
@@ -0,0 +1 @@
+エハガキトイッショニギンイロノルアーヲマッシュニオクッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_263.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_263.txt
new file mode 100755
index 00000000..88ee36d8
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_263.txt
@@ -0,0 +1 @@
+オムライスニワケチャップガイチバン。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_264.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_264.txt
new file mode 100755
index 00000000..f46210ca
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_264.txt
@@ -0,0 +1 @@
+ストレスワテキドニハッサンシマショー。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_265.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_265.txt
new file mode 100755
index 00000000..5b959b0a
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_265.txt
@@ -0,0 +1 @@
+コノヒトヨリゾハジマリケル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_266.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_266.txt
new file mode 100755
index 00000000..37b9526e
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_266.txt
@@ -0,0 +1 @@
+チュウガクセーノトキ、ヒショリョコーチュウニタイチョーヲクズシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_267.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_267.txt
new file mode 100755
index 00000000..e1ea79a8
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_267.txt
@@ -0,0 +1 @@
+グンイワビョーインノモンニハイルノデアル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_268.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_268.txt
new file mode 100755
index 00000000..6ec3b559
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_268.txt
@@ -0,0 +1 @@
+イチニチジュウアカルイビャクヤワ、イッサイタイヨーガシズマナイコトデオコリマス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_269.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_269.txt
new file mode 100755
index 00000000..ab94bc14
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_269.txt
@@ -0,0 +1 @@
+モー、アナタニバカリモセーイッパイ、ダレニモミセラレマスカラダデワナインデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_270.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_270.txt
new file mode 100755
index 00000000..ce8816c3
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_270.txt
@@ -0,0 +1 @@
+ミンナソロッテウミニトビコンダ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_271.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_271.txt
new file mode 100755
index 00000000..429c574c
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_271.txt
@@ -0,0 +1 @@
+ナンダソリャ、トーテームリナオネガイダ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_272.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_272.txt
new file mode 100755
index 00000000..50302687
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_272.txt
@@ -0,0 +1 @@
+チョーチフスワコワイビョーキ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_273.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_273.txt
new file mode 100755
index 00000000..052b2f33
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_273.txt
@@ -0,0 +1 @@
+ハイキュウワバレーボールノコトデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_274.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_274.txt
new file mode 100755
index 00000000..415ac420
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_274.txt
@@ -0,0 +1 @@
+マッチヲカイニハイッタノカナ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_275.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_275.txt
new file mode 100755
index 00000000..23b5b727
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_275.txt
@@ -0,0 +1 @@
+ボンサイワフゼーガアル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_276.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_276.txt
new file mode 100755
index 00000000..30eaa014
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_276.txt
@@ -0,0 +1 @@
+ヤガテバイシンインワゴーギヲスルタメニホーテーヲデテイッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_277.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_277.txt
new file mode 100755
index 00000000..4b1c4c02
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_277.txt
@@ -0,0 +1 @@
+ゲージュツノモトメルエーエンセーニギモンヲカンジル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_278.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_278.txt
new file mode 100755
index 00000000..ddf712de
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_278.txt
@@ -0,0 +1 @@
+キキツケテ、クダンノオーナ、ブルブルトカブリヲフッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_279.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_279.txt
new file mode 100755
index 00000000..74640184
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_279.txt
@@ -0,0 +1 @@
+キェルツェヲトオッテドビェニ、ザリピェカラミェイニイク。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_280.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_280.txt
new file mode 100755
index 00000000..0c62b531
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_280.txt
@@ -0,0 +1 @@
+マリアーンスケーラーズニェヲオトズレル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_281.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_281.txt
new file mode 100755
index 00000000..418792e2
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_281.txt
@@ -0,0 +1 @@
+ニュウギュウヲミナガラ、レテュノハイッタピッツァヲタベル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_282.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_282.txt
new file mode 100755
index 00000000..9abbd106
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_282.txt
@@ -0,0 +1 @@
+ウドゥノソーシャヲセリョーシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_283.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_283.txt
new file mode 100755
index 00000000..864c7f2c
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_283.txt
@@ -0,0 +1 @@
+インスティテュートデ、リデュースノハナシトアワセテ、ルデュックノハナシモキイタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_284.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_284.txt
new file mode 100755
index 00000000..5b0344fd
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_284.txt
@@ -0,0 +1 @@
+ギェナーヲミテイェーイトサケブ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_285.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_285.txt
new file mode 100755
index 00000000..b44c9d98
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_285.txt
@@ -0,0 +1 @@
+スィーディーヲキキナガラ、デャーコンヲタベル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_286.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_286.txt
new file mode 100755
index 00000000..a66f8814
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_286.txt
@@ -0,0 +1 @@
+テョサンワズィーブラヲミタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_287.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_287.txt
new file mode 100755
index 00000000..af2c942c
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_287.txt
@@ -0,0 +1 @@
+レヴォリューション。レギュレーション。エデュケーション。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_288.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_288.txt
new file mode 100755
index 00000000..c9eb9a3f
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_288.txt
@@ -0,0 +1 @@
+ブレンドデョート。ラーテャン。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_289.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_289.txt
new file mode 100755
index 00000000..cd742ffb
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_289.txt
@@ -0,0 +1 @@
+アッアノ。イッイエ。エッエェ。オッオイ。ンートネ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_290.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_290.txt
new file mode 100755
index 00000000..2544c91b
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_290.txt
@@ -0,0 +1 @@
+イブカシゲニミアゲタアマグモカラ、コハクイロノドラゴンガギュントアラワレタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_291.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_291.txt
new file mode 100755
index 00000000..1657ebed
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_291.txt
@@ -0,0 +1 @@
+ヌノデギュギュットヌンチャクヲシバル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_292.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_292.txt
new file mode 100755
index 00000000..d46b7b55
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_292.txt
@@ -0,0 +1 @@
+フクヲヌグガ、イツモジョーゲガサカサマダ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_293.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_293.txt
new file mode 100755
index 00000000..1a986c51
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_293.txt
@@ -0,0 +1 @@
+ホーカゴノオンガクシツデ、コーオンヲガンバッテダシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_294.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_294.txt
new file mode 100755
index 00000000..19ac7905
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_294.txt
@@ -0,0 +1 @@
+モゴモゴシナガラユウギャグワオモシロクナイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_295.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_295.txt
new file mode 100755
index 00000000..41ed7cc7
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_295.txt
@@ -0,0 +1 @@
+カイスイギョノギョギョーノイッカントシテ、チギョガソダテラレテイル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_296.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_296.txt
new file mode 100755
index 00000000..5c594a48
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_296.txt
@@ -0,0 +1 @@
+ムンムントシタネッキニ、アノタンスイギョモヘトヘトニナッテイル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_297.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_297.txt
new file mode 100755
index 00000000..9bb18382
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_297.txt
@@ -0,0 +1 @@
+ヘスティアショチョーワ、ジュウニオンオンガクノサホーヲシッテイル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_298.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_298.txt
new file mode 100755
index 00000000..d2379a9d
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_298.txt
@@ -0,0 +1 @@
+シュサイシャワ、コノフェスノキャパガチイサイコトヲ、セシルカラキイタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_299.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_299.txt
new file mode 100755
index 00000000..5063b0b8
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_299.txt
@@ -0,0 +1 @@
+ハハワ、サフランライスト、サツマイモノハイッタシチュート、ポトフヲハフハフシナガラタベタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_300.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_300.txt
new file mode 100755
index 00000000..bb012320
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_300.txt
@@ -0,0 +1 @@
+ソシテ、サキョートチサワヘファエキニツイタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_301.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_301.txt
new file mode 100755
index 00000000..446d0ade
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_301.txt
@@ -0,0 +1 @@
+ネモトトソハラワシュクンヲヒハンシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_302.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_302.txt
new file mode 100755
index 00000000..784e566c
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_302.txt
@@ -0,0 +1 @@
+ケケットワライナガラ、ツハラワパトカーニノッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_303.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_303.txt
new file mode 100755
index 00000000..1a32fe75
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_303.txt
@@ -0,0 +1 @@
+キュキュットナラシタクツデパスヲダシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_304.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_304.txt
new file mode 100755
index 00000000..ca7eaa53
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_304.txt
@@ -0,0 +1 @@
+ティファニーワパピーニムギュットダキツキナガラ、チュチュットキスヲシ、センキュトイッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_305.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_305.txt
new file mode 100755
index 00000000..842baccc
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_305.txt
@@ -0,0 +1 @@
+ソノギグンワ、イチヘクタールホフクゼンシンヲシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_306.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_306.txt
new file mode 100755
index 00000000..8428636d
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_306.txt
@@ -0,0 +1 @@
+ヘヘット、キャツワコビヘツラッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_307.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_307.txt
new file mode 100755
index 00000000..cb66d218
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_307.txt
@@ -0,0 +1 @@
+ホトンドノヒチョーサシャワ、シャシンヲシャサイシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_308.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_308.txt
new file mode 100755
index 00000000..b6976a14
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_308.txt
@@ -0,0 +1 @@
+ホサガ、イッサンカタンソチュウドクニナルトユウハプニングワオキナカッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_309.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_309.txt
new file mode 100755
index 00000000..762bd353
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_309.txt
@@ -0,0 +1 @@
+スチューデントガヒサイスルファクターヲ、カノーナカギリトリハラウ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_310.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_310.txt
new file mode 100755
index 00000000..44c3151a
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_310.txt
@@ -0,0 +1 @@
+カフェトワ、ブレックファストトシテ、フォカッチャヲタベレルバショデモアル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_311.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_311.txt
new file mode 100755
index 00000000..b7dafe6e
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_311.txt
@@ -0,0 +1 @@
+フツウ、ショキュウシャデワ、コーオンヲノバスコトワデキナイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_312.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_312.txt
new file mode 100755
index 00000000..7b057a04
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_312.txt
@@ -0,0 +1 @@
+カレカラシタラ、サチュウカンカラミルケシキワキチョーダッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_313.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_313.txt
new file mode 100755
index 00000000..f6c935f3
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_313.txt
@@ -0,0 +1 @@
+シェパードトドーキョチュウニ、フォスターワソノカクヅケヒョーヲミタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_314.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_314.txt
new file mode 100755
index 00000000..a085a832
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_314.txt
@@ -0,0 +1 @@
+キョキョネン、キョスウトヘチョーチョーニツイテマナンダ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_315.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_315.txt
new file mode 100755
index 00000000..2c232e2e
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_315.txt
@@ -0,0 +1 @@
+キャタツノウエデヒュヒュートカゼガフクト、カレワセスジヲノバシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_316.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_316.txt
new file mode 100755
index 00000000..10257969
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_316.txt
@@ -0,0 +1 @@
+ヒルニワペスカトーレヲ、ヨルニワスシヲパクパクタベタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_317.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_317.txt
new file mode 100755
index 00000000..a6c59e8a
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_317.txt
@@ -0,0 +1 @@
+ケフィアニカンスルコノホンワ、ショハンデワサンビャクブクライダッタガ、ツギカラハキュウテキニゾーカシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_318.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_318.txt
new file mode 100755
index 00000000..a7b7be7b
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_318.txt
@@ -0,0 +1 @@
+ヒフガワタシノフェチデアル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_319.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_319.txt
new file mode 100755
index 00000000..1dee3386
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_319.txt
@@ -0,0 +1 @@
+シャハンデキョフヲキズクトユウ、カレノモクロミワトチュウデヘシオラレタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_320.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_320.txt
new file mode 100755
index 00000000..a8ed9aee
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_320.txt
@@ -0,0 +1 @@
+サヒョーノトオリノシシュツニナルコトガ、アルイミワガシャノシャフウデアル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_321.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_321.txt
new file mode 100755
index 00000000..14e2c952
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_321.txt
@@ -0,0 +1 @@
+コノコフウナシュヒョーワコキョーノモノダ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_322.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_322.txt
new file mode 100755
index 00000000..921e0f0f
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_322.txt
@@ -0,0 +1 @@
+ソノホツレガフハイシテイルトユウノワ、コチョーシタヒョーゲンダトオモウ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_323.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_323.txt
new file mode 100755
index 00000000..facc9ee4
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_323.txt
@@ -0,0 +1 @@
+ソノエーガノシュツエンシャデアルカレガ、シュハンデアルカノーセーワフィフティーフィフティーダ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_324.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_324.txt
new file mode 100755
index 00000000..a5286d8a
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/RECITATION324_324.txt
@@ -0,0 +1 @@
+チュクンノハチョーワ、パツントキョーツウシテイル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_001.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_001.txt
new file mode 100755
index 00000000..6f7a6343
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_001.txt
@@ -0,0 +1 @@
+エッウソデショ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_002.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_002.txt
new file mode 100755
index 00000000..85a22663
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_002.txt
@@ -0,0 +1 @@
+シュヴァイツァーワミナラウベキニンゲンデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_003.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_003.txt
new file mode 100755
index 00000000..b6f859d2
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_003.txt
@@ -0,0 +1 @@
+デーヴィスサンワトテモツカレテイルヨーニミエル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_004.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_004.txt
new file mode 100755
index 00000000..a9c11002
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_004.txt
@@ -0,0 +1 @@
+スティーヴワジェーンカラテガミヲモラッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_005.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_005.txt
new file mode 100755
index 00000000..b233057e
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_005.txt
@@ -0,0 +1 @@
+カノジョワモーツァルトヤベートーヴェントイッタ、コテンハノサッキョクカガスキダ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_006.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_006.txt
new file mode 100755
index 00000000..d0f4812d
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_006.txt
@@ -0,0 +1 @@
+ストラットフォードオンエイヴォンワ、シェイクスピアノウマレタトコロデスガ、マイトシオオクノカンコーキャクガオトズレマス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_007.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_007.txt
new file mode 100755
index 00000000..8b63bf3c
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_007.txt
@@ -0,0 +1 @@
+カレワピューマヲナラスノニ、オオイニホネヲオッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_008.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_008.txt
new file mode 100755
index 00000000..d7283af7
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_008.txt
@@ -0,0 +1 @@
+カレガカイコサレルトワミョーナハナシダ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_009.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_009.txt
new file mode 100755
index 00000000..580f2333
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_009.txt
@@ -0,0 +1 @@
+クリスワヴァンパイアナイトヲタオシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_010.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_010.txt
new file mode 100755
index 00000000..b3d48998
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_010.txt
@@ -0,0 +1 @@
+カレノアダナワイイエテミョーダヨネ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_011.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_011.txt
new file mode 100755
index 00000000..428d2182
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_011.txt
@@ -0,0 +1 @@
+イタリアリョコーデカレワ、イクツカケーショーノチトシテユウメーナトシ、タトエバ、ナポリヤフィレンツェヲオトズレタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_012.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_012.txt
new file mode 100755
index 00000000..1d473884
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_012.txt
@@ -0,0 +1 @@
+ゼロトユウガイネンワ、ヒンドゥーブンカニユライシテイル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_013.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_013.txt
new file mode 100755
index 00000000..72c5e078
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_013.txt
@@ -0,0 +1 @@
+ソノイタズラムスメワナニクワヌカオヲシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_014.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_014.txt
new file mode 100755
index 00000000..fc08f39e
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_014.txt
@@ -0,0 +1 @@
+スミスサン、ピエールデュボワヲゴショーカイシマスワ。ワタシノシンユウナノ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_015.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_015.txt
new file mode 100755
index 00000000..6f0a1cbe
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_015.txt
@@ -0,0 +1 @@
+ドースンノ、コノオミセ。カンッゼンニカンコドリガナイチャッテルジャナイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_016.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_016.txt
new file mode 100755
index 00000000..f018b969
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_016.txt
@@ -0,0 +1 @@
+チョージョーニツクトミンナデヤッホートサケンダ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_017.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_017.txt
new file mode 100755
index 00000000..3ba83751
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_017.txt
@@ -0,0 +1 @@
+アッベルガナッテル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_018.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_018.txt
new file mode 100755
index 00000000..86179fa9
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_018.txt
@@ -0,0 +1 @@
+カノジョワカレニピョコントオジギヲシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_019.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_019.txt
new file mode 100755
index 00000000..df2cc675
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_019.txt
@@ -0,0 +1 @@
+ダンシセートノメーメーガ、ボーシニガッコーノバッジヲツケテイマス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_020.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_020.txt
new file mode 100755
index 00000000..967b4bcb
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_020.txt
@@ -0,0 +1 @@
+ヒューズガトンダ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_021.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_021.txt
new file mode 100755
index 00000000..e4906b61
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_021.txt
@@ -0,0 +1 @@
+ワタシワポピュラーオンガクヲキキタイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_022.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_022.txt
new file mode 100755
index 00000000..b1b3291e
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_022.txt
@@ -0,0 +1 @@
+ネコワニャーニャートナク。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_023.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_023.txt
new file mode 100755
index 00000000..94b0cbfd
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_023.txt
@@ -0,0 +1 @@
+ワタシノイチバンウエノアニガチチノミョーダイトシテソノカイゴーニシュッセキシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_024.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_024.txt
new file mode 100755
index 00000000..f9fbc4ed
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_024.txt
@@ -0,0 +1 @@
+カレワシュショーニインタビューシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_025.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_025.txt
new file mode 100755
index 00000000..64e55117
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_025.txt
@@ -0,0 +1 @@
+ソノカイシャノキュウソクナセーチョーワ、ソノドクトクナセンリャクニヨルモノダッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_026.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_026.txt
new file mode 100755
index 00000000..4081c933
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_026.txt
@@ -0,0 +1 @@
+ワタシワイツモミネラルウォーターヲモチアルイテイマス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_027.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_027.txt
new file mode 100755
index 00000000..b8867a06
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_027.txt
@@ -0,0 +1 @@
+カノジョワハンドバッグヲアケテイエノカギヲサガシテミタガ、ミツカラナカッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_028.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_028.txt
new file mode 100755
index 00000000..0c62b9f0
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_028.txt
@@ -0,0 +1 @@
+カノジョワスタッフヲマトメテイケルトオモイマスカ?
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_029.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_029.txt
new file mode 100755
index 00000000..52c61f12
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_029.txt
@@ -0,0 +1 @@
+ギュウニュウワアナタノカラダニヨイダロー、マイニチノンダホーガイイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_030.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_030.txt
new file mode 100755
index 00000000..19623adf
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_030.txt
@@ -0,0 +1 @@
+アナタワリュウカンニナリカケテイルカ、モットオモイビョーキカモシレマセン。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_031.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_031.txt
new file mode 100755
index 00000000..7f6a4d69
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_031.txt
@@ -0,0 +1 @@
+カノジョワソノジケンヲ、イキイキトシタヒッチデビョーシャシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_032.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_032.txt
new file mode 100755
index 00000000..6ebbe8dd
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_032.txt
@@ -0,0 +1 @@
+カレワミズカラノショーガイヲ、インドデノビョーニンノチリョーニササゲルツモリダ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_033.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_033.txt
new file mode 100755
index 00000000..0ac67ef4
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_033.txt
@@ -0,0 +1 @@
+キミョーナオトコデ、カレワヒトカラハナシカケラレナイトクチヲキカナイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_034.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_034.txt
new file mode 100755
index 00000000..aaeba863
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_034.txt
@@ -0,0 +1 @@
+ワレワレワソノサンミャクデドチャクノガイドヲヤトッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_035.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_035.txt
new file mode 100755
index 00000000..79b50cbf
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_035.txt
@@ -0,0 +1 @@
+カノジョワムスコニイエデギョーギヨクスルヨーニイッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_036.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_036.txt
new file mode 100755
index 00000000..229a2261
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_036.txt
@@ -0,0 +1 @@
+カレワライフルヲヒロイアゲ、ソレデヒョーテキヲネラッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_037.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_037.txt
new file mode 100755
index 00000000..e565a0ca
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_037.txt
@@ -0,0 +1 @@
+ワタシワコノホンニハッピャクエンヲハラッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_038.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_038.txt
new file mode 100755
index 00000000..2bfcd5e1
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_038.txt
@@ -0,0 +1 @@
+キブンガワルクテニュウインシタガ、ケッカテキニワタイシタコトワナカッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_039.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_039.txt
new file mode 100755
index 00000000..e27a1f12
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_039.txt
@@ -0,0 +1 @@
+アフィネライノツリキジデスネ。エーゴカンケーノコミュノアチコチニマルチポストシテイマス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_040.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_040.txt
new file mode 100755
index 00000000..a804732e
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_040.txt
@@ -0,0 +1 @@
+トラベラーズチェックヲゲンキンニカエテクレルノワコノマドグチデスカ?
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_041.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_041.txt
new file mode 100755
index 00000000..dae62136
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_041.txt
@@ -0,0 +1 @@
+ホンジツノエーガワ、サウンドオブミュージックデゴザイマス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_042.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_042.txt
new file mode 100755
index 00000000..3c18b245
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_042.txt
@@ -0,0 +1 @@
+ガイシテワレワレニホンジンワ、ガイコクゴヲハナスノニスコシオクビョースギル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_043.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_043.txt
new file mode 100755
index 00000000..40dad721
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_043.txt
@@ -0,0 +1 @@
+ミセノヒトワワタシノコトヲシルヨーニナリ、ワタシワイツモオナジウェイトレスニオータイシテモラッテイタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_044.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_044.txt
new file mode 100755
index 00000000..8b226108
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_044.txt
@@ -0,0 +1 @@
+コノオカカラワナンビャクマントユウホシガミエル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_045.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_045.txt
new file mode 100755
index 00000000..07650356
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_045.txt
@@ -0,0 +1 @@
+カノジョワダイガクニニュウガクシタラ、オヤカラケーザイテキニドクリツシヨートオモッテイタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_046.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_046.txt
new file mode 100755
index 00000000..66117760
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_046.txt
@@ -0,0 +1 @@
+サブマリンノペリスコープガ、スイチュウカラニョッキリツキデテイタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_047.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_047.txt
new file mode 100755
index 00000000..83bfacd9
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_047.txt
@@ -0,0 +1 @@
+ベツニブルマニトクベツナカンシンガアルワケジャナイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_048.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_048.txt
new file mode 100755
index 00000000..8ccc3a4a
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_048.txt
@@ -0,0 +1 @@
+ソーユウフェティシズムワナイトオモウ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_049.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_049.txt
new file mode 100755
index 00000000..b4438b3e
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_049.txt
@@ -0,0 +1 @@
+ウッドフジンガツクッテクレルオイシイイナカフウノリョーリヲタベタシ、ミルクヲタクサンノミマシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_050.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_050.txt
new file mode 100755
index 00000000..53d66c90
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_050.txt
@@ -0,0 +1 @@
+ワタシノツマガビンヲワッテシマッタノデ、ダイドコロノユカワギュウニュウダラケニナッテイル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_051.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_051.txt
new file mode 100755
index 00000000..cd94dc51
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_051.txt
@@ -0,0 +1 @@
+ケンカヲシテイタフタリノコドモワ、オタガイニシカメッツラヲシテスワッテイタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_052.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_052.txt
new file mode 100755
index 00000000..d7cf5595
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_052.txt
@@ -0,0 +1 @@
+ジギョーヲケーゾクシナガラ、ジギョーガイキョシテイルフドーサンヲ、キリウリシテイクコトナドヒゲンジツテキナノダ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_053.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_053.txt
new file mode 100755
index 00000000..e9d3a2cd
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_053.txt
@@ -0,0 +1 @@
+シカシペパーバーグワ、ソノオームヲケンキュウスルコトニヨッテ、ドーブツニタイスルカンガエカタガカワッタトイッテイル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_054.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_054.txt
new file mode 100755
index 00000000..6ae15f19
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_054.txt
@@ -0,0 +1 @@
+パックマンガアルジョーケンヲミタスト、オッテクルモンスターヲギャクシュウシテタベルコトガデキル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_055.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_055.txt
new file mode 100755
index 00000000..43c48f4f
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_055.txt
@@ -0,0 +1 @@
+ソノスウヒャクネンゴニ、フォークガセーヨーノテーブルニアラワレルコトニナルガ、タダチニウケイレラレタワケデワナカッタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_056.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_056.txt
new file mode 100755
index 00000000..941b23a7
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_056.txt
@@ -0,0 +1 @@
+トップノリーダーワイヌノコードーガクデワアルファトヨバレ、イカベータ、ガンマトツヅキマス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_057.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_057.txt
new file mode 100755
index 00000000..5be2d838
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_057.txt
@@ -0,0 +1 @@
+ウィーンマデワアルクトドノクライカカリマスカ?
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_058.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_058.txt
new file mode 100755
index 00000000..ed527fef
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_058.txt
@@ -0,0 +1 @@
+スミマセン、コノヘンニクワシクナインデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_059.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_059.txt
new file mode 100755
index 00000000..b0165aed
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_059.txt
@@ -0,0 +1 @@
+モクヒョーワジュギョーセッケーヲスルトキノ、ガクセーノシコーヲショクハツスルメディアキョーザイノセンタクオヨビ、カツヨーホーホーニツイテリカイスルコトデアル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_060.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_060.txt
new file mode 100755
index 00000000..59e3c142
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_060.txt
@@ -0,0 +1 @@
+トリアエズミセノマエ、ソージシトイテクレ。ウチミズモタノム。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_061.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_061.txt
new file mode 100755
index 00000000..40f854d1
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_061.txt
@@ -0,0 +1 @@
+ヒトビトワトーナメントガハジマルナンカゲツモマエニ、コレラノニュウジョーケンヲカウ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_062.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_062.txt
new file mode 100755
index 00000000..d4f6320a
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_062.txt
@@ -0,0 +1 @@
+カノジョノミリョクワコトバデワヒョーゲンデキナイ、トソノゲージュツカワサケンダ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_063.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_063.txt
new file mode 100755
index 00000000..2e7abbb3
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_063.txt
@@ -0,0 +1 @@
+ジショートシテカンタンナコトヲ、イカニモムズカシソーニヒョーゲンスルヒトワ、アマリアタマガヨサソーデワナイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_064.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_064.txt
new file mode 100755
index 00000000..d2a8a227
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_064.txt
@@ -0,0 +1 @@
+デザインモ、アーチガタノロゴデザインニヨリ、ゲンダイテキデトージョーカン、ヤクドーカンアルモノニシアゲマシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_065.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_065.txt
new file mode 100755
index 00000000..a3783b7e
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_065.txt
@@ -0,0 +1 @@
+ソンナニアワテテウンテンシテ、イッタイドコエイコーッテンダヨ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_066.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_066.txt
new file mode 100755
index 00000000..9c965595
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_066.txt
@@ -0,0 +1 @@
+ジカンワアルンダカラ、アンゼンウンテンシテクレヨ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_067.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_067.txt
new file mode 100755
index 00000000..8beef495
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_067.txt
@@ -0,0 +1 @@
+ディスプレイワモニタトモイイ、コンピュータナドノキキカラシュツリョクサレルセーシガ、マタワドーガノエーゾーシンゴーヲヒョージスルキキデアル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_068.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_068.txt
new file mode 100755
index 00000000..ded89ee8
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_068.txt
@@ -0,0 +1 @@
+ウチアイガスコシシズマッタトキ、パパガハシッテフラットニイッテ、ワタシタチニサンドイッチヲモッテキテクレタワ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_069.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_069.txt
new file mode 100755
index 00000000..9cad0f12
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_069.txt
@@ -0,0 +1 @@
+ギリシャノフットボールノシアイデワ、イッポーノチームノセンシュワ、アイテチームノジンチノラインノムコーガワニボールヲモチコモートシタノデス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_070.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_070.txt
new file mode 100755
index 00000000..690f5b8e
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_070.txt
@@ -0,0 +1 @@
+エーシャノシンディーニコラスワ、ヘトヘトニナッテオヨギキッタアト、ドーバーデカロージテリクニアガッテキタガ、カイキョースイエーキョーカイノスポークスマンワ、カノジョガトテモゲンキデアルトハッピョーシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_071.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_071.txt
new file mode 100755
index 00000000..21266971
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_071.txt
@@ -0,0 +1 @@
+ワカイダンジョガヒトザトハナレタヨーカンデキョーフノイチヤヲスゴストユウ、ホラーノテーバンスタイルダ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_072.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_072.txt
new file mode 100755
index 00000000..ae95bfe8
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_072.txt
@@ -0,0 +1 @@
+ヒトツニワ、セーヨージンデワナイヒトビトガジブンタチドクジノブンカニホコリヲモチハジメテキタタメト、マタヒトツニワ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_073.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_073.txt
new file mode 100755
index 00000000..cfae5710
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_073.txt
@@ -0,0 +1 @@
+ワタシタチワキョーフノナカデイキテイテ、クルシンデイルノ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_074.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_074.txt
new file mode 100755
index 00000000..8089fd88
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_074.txt
@@ -0,0 +1 @@
+タイヨーモハナモタノシメナイシ、ワタシタチノコドモジダイモタノシメナイノヨ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_075.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_075.txt
new file mode 100755
index 00000000..2bba4cb3
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_075.txt
@@ -0,0 +1 @@
+ヘーシャノエンジニアガニホンコクナイデハンバイサレテイルドーヨーノセーヒントシヨーヲヒカクシタケッカ、ヒジョーニキョーゴーリョクガアルトハンダンイタシマシタ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_076.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_076.txt
new file mode 100755
index 00000000..9bd61414
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_076.txt
@@ -0,0 +1 @@
+ノースウエスタンダイガクノケンキュウシャ、アイリーンペパーバーグワ、オームワヒトノクチマネヲスルダケデナクコトバノイミヲマナブコトガデキルコトヲハッケンシツツアル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_077.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_077.txt
new file mode 100755
index 00000000..66fc54de
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_077.txt
@@ -0,0 +1 @@
+ナマエヲテョトイイマス。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_078.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_078.txt
new file mode 100755
index 00000000..9ae1f53a
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_078.txt
@@ -0,0 +1 @@
+ピュウピュウカゼガフキコンデクル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_079.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_079.txt
new file mode 100755
index 00000000..57df3697
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_079.txt
@@ -0,0 +1 @@
+キェー。ギェー。イェーイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_080.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_080.txt
new file mode 100755
index 00000000..b4bca50c
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_080.txt
@@ -0,0 +1 @@
+ヒェーン。ビェーン。ピェーン。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_081.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_081.txt
new file mode 100755
index 00000000..a76c6c64
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_081.txt
@@ -0,0 +1 @@
+プリミェー。ミェルン。ニェン。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_082.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_082.txt
new file mode 100755
index 00000000..e4589df0
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_082.txt
@@ -0,0 +1 @@
+ステューデント。ダブルデュアル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_083.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_083.txt
new file mode 100755
index 00000000..434b79e8
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_083.txt
@@ -0,0 +1 @@
+エテュード。エデュケーショナル。サブスティテューション。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_084.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_084.txt
new file mode 100755
index 00000000..82d6ae8a
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_084.txt
@@ -0,0 +1 @@
+ジャデャクシュ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_085.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_085.txt
new file mode 100755
index 00000000..efa1d4ef
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_085.txt
@@ -0,0 +1 @@
+ブレンドデョート。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_086.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_086.txt
new file mode 100755
index 00000000..fa4d0595
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_086.txt
@@ -0,0 +1 @@
+イデュスルファーゼ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_087.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_087.txt
new file mode 100755
index 00000000..04095180
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_087.txt
@@ -0,0 +1 @@
+アッアノ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_088.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_088.txt
new file mode 100755
index 00000000..bbda2669
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_088.txt
@@ -0,0 +1 @@
+イッイエ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_089.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_089.txt
new file mode 100755
index 00000000..32576f76
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_089.txt
@@ -0,0 +1 @@
+エッエェ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_090.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_090.txt
new file mode 100755
index 00000000..cbff8a4c
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_090.txt
@@ -0,0 +1 @@
+オッオイ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_091.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_091.txt
new file mode 100755
index 00000000..83f281e6
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_091.txt
@@ -0,0 +1 @@
+ンートネ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_092.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_092.txt
new file mode 100755
index 00000000..af7871fe
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_092.txt
@@ -0,0 +1 @@
+アンツィオ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_093.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_093.txt
new file mode 100755
index 00000000..203ca5dd
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_093.txt
@@ -0,0 +1 @@
+エンツォ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_094.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_094.txt
new file mode 100755
index 00000000..67ef1751
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_094.txt
@@ -0,0 +1 @@
+カートゥーン。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_095.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_095.txt
new file mode 100755
index 00000000..b0613a74
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_095.txt
@@ -0,0 +1 @@
+スィーディー。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_096.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_096.txt
new file mode 100755
index 00000000..cfe74977
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_096.txt
@@ -0,0 +1 @@
+ズィーブラ。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_097.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_097.txt
new file mode 100755
index 00000000..8c7b8ca7
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_097.txt
@@ -0,0 +1 @@
+デピュティーガバナー。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_098.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_098.txt
new file mode 100755
index 00000000..dcbbf3db
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_098.txt
@@ -0,0 +1 @@
+エリュシオン。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_099.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_099.txt
new file mode 100755
index 00000000..69e35b03
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_099.txt
@@ -0,0 +1 @@
+ガリェント。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_100.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_100.txt
new file mode 100755
index 00000000..f1670481
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_100.txt
@@ -0,0 +1 @@
+ラーテャン。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_101.txt b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_101.txt
new file mode 100755
index 00000000..67c681e9
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/text/emoNormal_101.txt
@@ -0,0 +1 @@
+フォークヲツカワナイソレラノチイキワモットモタカイシュッショーリツノチイキヲカカエテイルトユウリユウカラ、コノコトワアタッテイル。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_001.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_001.wav
new file mode 100755
index 00000000..c584d1a7
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_001.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_002.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_002.wav
new file mode 100755
index 00000000..9b191b89
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_002.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_003.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_003.wav
new file mode 100755
index 00000000..b4538038
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_003.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_004.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_004.wav
new file mode 100755
index 00000000..0adc918f
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_004.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_005.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_005.wav
new file mode 100755
index 00000000..c52277b7
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_005.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_006.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_006.wav
new file mode 100755
index 00000000..a4bcfc4a
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_006.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_007.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_007.wav
new file mode 100755
index 00000000..e19e6cf2
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_007.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_008.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_008.wav
new file mode 100755
index 00000000..eefae769
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_008.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_009.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_009.wav
new file mode 100755
index 00000000..dd9db5df
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_009.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_010.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_010.wav
new file mode 100755
index 00000000..23fb391d
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_010.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_011.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_011.wav
new file mode 100755
index 00000000..0d116a08
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_011.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_012.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_012.wav
new file mode 100755
index 00000000..45804576
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_012.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_013.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_013.wav
new file mode 100755
index 00000000..6d3c8342
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_013.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_014.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_014.wav
new file mode 100755
index 00000000..65b4f36c
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_014.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_015.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_015.wav
new file mode 100755
index 00000000..4a6d21aa
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_015.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_016.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_016.wav
new file mode 100755
index 00000000..c84e26c5
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_016.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_017.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_017.wav
new file mode 100755
index 00000000..811cf908
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_017.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_018.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_018.wav
new file mode 100755
index 00000000..3fda31de
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_018.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_019.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_019.wav
new file mode 100755
index 00000000..f4fe1dd3
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_019.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_020.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_020.wav
new file mode 100755
index 00000000..c2d25a2d
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_020.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_021.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_021.wav
new file mode 100755
index 00000000..5a4f089b
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_021.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_022.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_022.wav
new file mode 100755
index 00000000..c0e35ed7
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_022.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_023.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_023.wav
new file mode 100755
index 00000000..71e13385
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_023.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_024.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_024.wav
new file mode 100755
index 00000000..591a6b67
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_024.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_025.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_025.wav
new file mode 100755
index 00000000..d0b8705e
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_025.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_026.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_026.wav
new file mode 100755
index 00000000..ebe1bba4
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_026.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_027.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_027.wav
new file mode 100755
index 00000000..b493b731
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_027.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_028.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_028.wav
new file mode 100755
index 00000000..d190ede4
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_028.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_029.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_029.wav
new file mode 100755
index 00000000..bc254058
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_029.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_030.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_030.wav
new file mode 100755
index 00000000..4b965122
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_030.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_031.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_031.wav
new file mode 100755
index 00000000..c5852909
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_031.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_032.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_032.wav
new file mode 100755
index 00000000..474cfd31
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_032.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_033.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_033.wav
new file mode 100755
index 00000000..0f6f7bf1
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_033.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_034.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_034.wav
new file mode 100755
index 00000000..115a8dc4
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_034.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_035.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_035.wav
new file mode 100755
index 00000000..160d82c1
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_035.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_036.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_036.wav
new file mode 100755
index 00000000..325d57b5
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_036.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_037.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_037.wav
new file mode 100755
index 00000000..35446b16
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_037.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_038.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_038.wav
new file mode 100755
index 00000000..0532218c
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_038.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_039.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_039.wav
new file mode 100755
index 00000000..72cdd36e
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_039.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_040.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_040.wav
new file mode 100755
index 00000000..6cec8c88
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_040.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_041.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_041.wav
new file mode 100755
index 00000000..dbade4ec
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_041.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_042.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_042.wav
new file mode 100755
index 00000000..e5ad9ac2
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_042.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_043.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_043.wav
new file mode 100755
index 00000000..c038faf7
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_043.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_044.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_044.wav
new file mode 100755
index 00000000..0c2cddc3
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_044.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_045.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_045.wav
new file mode 100755
index 00000000..3d466801
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_045.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_046.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_046.wav
new file mode 100755
index 00000000..c258ff15
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_046.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_047.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_047.wav
new file mode 100755
index 00000000..b9cb3805
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_047.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_048.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_048.wav
new file mode 100755
index 00000000..760543a2
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_048.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_049.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_049.wav
new file mode 100755
index 00000000..daa54fd3
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_049.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_050.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_050.wav
new file mode 100755
index 00000000..2ecf119f
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_050.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_051.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_051.wav
new file mode 100755
index 00000000..252df2be
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_051.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_052.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_052.wav
new file mode 100755
index 00000000..2c66e644
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_052.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_053.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_053.wav
new file mode 100755
index 00000000..bdf05543
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_053.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_054.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_054.wav
new file mode 100755
index 00000000..f72e8fc6
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_054.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_055.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_055.wav
new file mode 100755
index 00000000..bb796b68
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_055.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_056.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_056.wav
new file mode 100755
index 00000000..fb84ac6d
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_056.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_057.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_057.wav
new file mode 100755
index 00000000..f2b59581
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_057.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_058.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_058.wav
new file mode 100755
index 00000000..b5a63011
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_058.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_059.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_059.wav
new file mode 100755
index 00000000..054ea10a
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_059.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_060.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_060.wav
new file mode 100755
index 00000000..3235645a
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_060.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_061.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_061.wav
new file mode 100755
index 00000000..f5d60826
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_061.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_062.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_062.wav
new file mode 100755
index 00000000..d7fad470
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_062.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_063.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_063.wav
new file mode 100755
index 00000000..22af61c9
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_063.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_064.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_064.wav
new file mode 100755
index 00000000..5465b173
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_064.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_065.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_065.wav
new file mode 100755
index 00000000..13e4ca33
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_065.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_066.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_066.wav
new file mode 100755
index 00000000..16611b7f
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_066.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_067.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_067.wav
new file mode 100755
index 00000000..03115c93
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_067.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_068.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_068.wav
new file mode 100755
index 00000000..f655dd16
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_068.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_069.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_069.wav
new file mode 100755
index 00000000..935aff0a
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_069.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_070.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_070.wav
new file mode 100755
index 00000000..5867bb10
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_070.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_071.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_071.wav
new file mode 100755
index 00000000..41c06e2f
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_071.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_072.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_072.wav
new file mode 100755
index 00000000..d46e67bf
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_072.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_073.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_073.wav
new file mode 100755
index 00000000..6d1ba6cb
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_073.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_074.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_074.wav
new file mode 100755
index 00000000..98a9753b
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_074.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_075.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_075.wav
new file mode 100755
index 00000000..cc990078
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_075.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_076.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_076.wav
new file mode 100755
index 00000000..5615b725
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_076.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_077.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_077.wav
new file mode 100755
index 00000000..b64d9c4c
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_077.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_078.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_078.wav
new file mode 100755
index 00000000..a9a0eb5a
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_078.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_079.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_079.wav
new file mode 100755
index 00000000..d5311cee
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_079.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_080.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_080.wav
new file mode 100755
index 00000000..f1de2c16
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_080.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_081.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_081.wav
new file mode 100755
index 00000000..d6a058e7
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_081.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_082.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_082.wav
new file mode 100755
index 00000000..8a2f70ba
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_082.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_083.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_083.wav
new file mode 100755
index 00000000..2539b22d
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_083.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_084.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_084.wav
new file mode 100755
index 00000000..1bb02c70
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_084.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_085.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_085.wav
new file mode 100755
index 00000000..09f0123e
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_085.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_086.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_086.wav
new file mode 100755
index 00000000..46093de1
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_086.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_087.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_087.wav
new file mode 100755
index 00000000..dbfbc6fe
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_087.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_088.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_088.wav
new file mode 100755
index 00000000..2cec8cf6
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_088.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_089.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_089.wav
new file mode 100755
index 00000000..14bb44b7
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_089.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_090.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_090.wav
new file mode 100755
index 00000000..cadd9152
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_090.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_091.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_091.wav
new file mode 100755
index 00000000..a2950a61
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_091.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_092.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_092.wav
new file mode 100755
index 00000000..5e550a9b
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_092.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_093.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_093.wav
new file mode 100755
index 00000000..3a69b263
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_093.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_094.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_094.wav
new file mode 100755
index 00000000..b96ce374
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_094.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_095.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_095.wav
new file mode 100755
index 00000000..62d7c8af
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_095.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_096.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_096.wav
new file mode 100755
index 00000000..0646e1d4
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_096.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_097.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_097.wav
new file mode 100755
index 00000000..ace346c1
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_097.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_098.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_098.wav
new file mode 100755
index 00000000..70b7ec52
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_098.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_099.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_099.wav
new file mode 100755
index 00000000..11f3f9c7
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_099.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_100.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_100.wav
new file mode 100755
index 00000000..506214dd
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_100.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_101.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_101.wav
new file mode 100755
index 00000000..8476cb30
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_101.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_102.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_102.wav
new file mode 100755
index 00000000..30c4a3bc
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_102.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_103.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_103.wav
new file mode 100755
index 00000000..a8f18ffc
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_103.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_104.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_104.wav
new file mode 100755
index 00000000..19c93afb
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_104.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_105.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_105.wav
new file mode 100755
index 00000000..ce2ee4f5
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_105.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_106.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_106.wav
new file mode 100755
index 00000000..78b0e64a
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_106.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_107.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_107.wav
new file mode 100755
index 00000000..7e9e98f8
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_107.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_108.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_108.wav
new file mode 100755
index 00000000..c700e414
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_108.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_109.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_109.wav
new file mode 100755
index 00000000..12337227
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_109.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_110.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_110.wav
new file mode 100755
index 00000000..a188d9c1
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_110.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_111.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_111.wav
new file mode 100755
index 00000000..27377f47
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_111.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_112.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_112.wav
new file mode 100755
index 00000000..b3acb8f5
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_112.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_113.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_113.wav
new file mode 100755
index 00000000..2faee4e8
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_113.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_114.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_114.wav
new file mode 100755
index 00000000..c8a5da0b
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_114.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_115.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_115.wav
new file mode 100755
index 00000000..e9bf0a9c
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_115.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_116.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_116.wav
new file mode 100755
index 00000000..0b8e7037
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_116.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_117.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_117.wav
new file mode 100755
index 00000000..66519014
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_117.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_118.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_118.wav
new file mode 100755
index 00000000..0bd416fe
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_118.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_119.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_119.wav
new file mode 100755
index 00000000..bc742680
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_119.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_120.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_120.wav
new file mode 100755
index 00000000..a421258b
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_120.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_121.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_121.wav
new file mode 100755
index 00000000..cda427b6
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_121.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_122.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_122.wav
new file mode 100755
index 00000000..08afbb1b
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_122.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_123.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_123.wav
new file mode 100755
index 00000000..f44e6175
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_123.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_124.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_124.wav
new file mode 100755
index 00000000..a095ec08
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_124.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_125.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_125.wav
new file mode 100755
index 00000000..5eb57099
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_125.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_126.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_126.wav
new file mode 100755
index 00000000..81299dc4
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_126.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_127.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_127.wav
new file mode 100755
index 00000000..06f4c8d7
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_127.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_128.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_128.wav
new file mode 100755
index 00000000..8ce48070
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_128.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_129.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_129.wav
new file mode 100755
index 00000000..483ea63f
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_129.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_130.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_130.wav
new file mode 100755
index 00000000..970f9a5b
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_130.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_131.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_131.wav
new file mode 100755
index 00000000..653f2289
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_131.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_132.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_132.wav
new file mode 100755
index 00000000..a917a019
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_132.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_133.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_133.wav
new file mode 100755
index 00000000..534d910b
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_133.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_134.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_134.wav
new file mode 100755
index 00000000..b52780ab
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_134.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_135.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_135.wav
new file mode 100755
index 00000000..41d6d358
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_135.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_136.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_136.wav
new file mode 100755
index 00000000..5975a3f9
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_136.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_137.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_137.wav
new file mode 100755
index 00000000..685385dd
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_137.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_138.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_138.wav
new file mode 100755
index 00000000..7b4b25ea
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_138.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_139.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_139.wav
new file mode 100755
index 00000000..fa5294a2
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_139.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_140.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_140.wav
new file mode 100755
index 00000000..fe4fd5ea
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_140.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_141.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_141.wav
new file mode 100755
index 00000000..d562fcae
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_141.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_142.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_142.wav
new file mode 100755
index 00000000..7b13af04
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_142.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_143.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_143.wav
new file mode 100755
index 00000000..12a8b10d
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_143.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_144.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_144.wav
new file mode 100755
index 00000000..1898a26a
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_144.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_145.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_145.wav
new file mode 100755
index 00000000..aff7e7cf
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_145.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_146.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_146.wav
new file mode 100755
index 00000000..e785dd5a
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_146.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_147.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_147.wav
new file mode 100755
index 00000000..cf28da8e
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_147.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_148.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_148.wav
new file mode 100755
index 00000000..0f19192d
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_148.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_149.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_149.wav
new file mode 100755
index 00000000..515f298d
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_149.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_150.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_150.wav
new file mode 100755
index 00000000..8520eeab
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_150.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_151.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_151.wav
new file mode 100755
index 00000000..44b9255e
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_151.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_152.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_152.wav
new file mode 100755
index 00000000..75c8d555
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_152.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_153.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_153.wav
new file mode 100755
index 00000000..3d7885a6
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_153.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_154.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_154.wav
new file mode 100755
index 00000000..b839a0d6
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_154.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_155.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_155.wav
new file mode 100755
index 00000000..3a58b6c5
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_155.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_156.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_156.wav
new file mode 100755
index 00000000..0b175aaf
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_156.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_157.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_157.wav
new file mode 100755
index 00000000..2546ba80
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_157.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_158.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_158.wav
new file mode 100755
index 00000000..6c7e24ea
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_158.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_159.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_159.wav
new file mode 100755
index 00000000..155f4fef
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_159.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_160.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_160.wav
new file mode 100755
index 00000000..d746b215
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_160.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_161.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_161.wav
new file mode 100755
index 00000000..335af8d2
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_161.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_162.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_162.wav
new file mode 100755
index 00000000..4043905f
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_162.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_163.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_163.wav
new file mode 100755
index 00000000..8427fa73
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_163.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_164.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_164.wav
new file mode 100755
index 00000000..b6179b04
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_164.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_165.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_165.wav
new file mode 100755
index 00000000..c1a6a4ad
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_165.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_166.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_166.wav
new file mode 100755
index 00000000..098217a3
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_166.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_167.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_167.wav
new file mode 100755
index 00000000..24931c32
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_167.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_168.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_168.wav
new file mode 100755
index 00000000..99c7e240
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_168.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_169.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_169.wav
new file mode 100755
index 00000000..d1d6e461
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_169.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_170.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_170.wav
new file mode 100755
index 00000000..82ed3bd4
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_170.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_171.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_171.wav
new file mode 100755
index 00000000..6085c31b
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_171.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_172.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_172.wav
new file mode 100755
index 00000000..46218f9f
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_172.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_173.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_173.wav
new file mode 100755
index 00000000..df1d8620
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_173.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_174.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_174.wav
new file mode 100755
index 00000000..945da0b5
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_174.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_175.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_175.wav
new file mode 100755
index 00000000..dfb6eac0
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_175.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_176.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_176.wav
new file mode 100755
index 00000000..290bf806
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_176.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_177.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_177.wav
new file mode 100755
index 00000000..787162d6
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_177.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_178.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_178.wav
new file mode 100755
index 00000000..537b93ae
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_178.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_179.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_179.wav
new file mode 100755
index 00000000..79c40daa
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_179.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_180.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_180.wav
new file mode 100755
index 00000000..5a545de4
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_180.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_181.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_181.wav
new file mode 100755
index 00000000..4e2fff93
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_181.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_182.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_182.wav
new file mode 100755
index 00000000..b846c859
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_182.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_183.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_183.wav
new file mode 100755
index 00000000..e38364da
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_183.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_184.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_184.wav
new file mode 100755
index 00000000..6f986ed5
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_184.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_185.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_185.wav
new file mode 100755
index 00000000..36233b92
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_185.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_186.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_186.wav
new file mode 100755
index 00000000..84edf474
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_186.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_187.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_187.wav
new file mode 100755
index 00000000..7691459a
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_187.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_188.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_188.wav
new file mode 100755
index 00000000..275da604
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_188.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_189.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_189.wav
new file mode 100755
index 00000000..de245d21
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_189.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_190.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_190.wav
new file mode 100755
index 00000000..a1687354
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_190.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_191.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_191.wav
new file mode 100755
index 00000000..45801157
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_191.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_192.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_192.wav
new file mode 100755
index 00000000..564dd0bd
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_192.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_193.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_193.wav
new file mode 100755
index 00000000..fb6c2794
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_193.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_194.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_194.wav
new file mode 100755
index 00000000..be919005
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_194.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_195.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_195.wav
new file mode 100755
index 00000000..c1516528
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_195.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_196.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_196.wav
new file mode 100755
index 00000000..f8fe407e
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_196.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_197.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_197.wav
new file mode 100755
index 00000000..241cb5de
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_197.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_198.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_198.wav
new file mode 100755
index 00000000..4b57ccf4
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_198.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_199.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_199.wav
new file mode 100755
index 00000000..fa1f22a1
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_199.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_200.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_200.wav
new file mode 100755
index 00000000..8548df05
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_200.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_201.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_201.wav
new file mode 100755
index 00000000..01983457
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_201.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_202.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_202.wav
new file mode 100755
index 00000000..babc4390
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_202.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_203.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_203.wav
new file mode 100755
index 00000000..d55720ad
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_203.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_204.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_204.wav
new file mode 100755
index 00000000..9d43560e
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_204.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_205.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_205.wav
new file mode 100755
index 00000000..783ce9d9
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_205.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_206.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_206.wav
new file mode 100755
index 00000000..af9c99e8
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_206.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_207.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_207.wav
new file mode 100755
index 00000000..1b187216
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_207.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_208.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_208.wav
new file mode 100755
index 00000000..e5205b37
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_208.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_209.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_209.wav
new file mode 100755
index 00000000..6311e24b
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_209.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_210.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_210.wav
new file mode 100755
index 00000000..bca6e45a
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_210.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_211.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_211.wav
new file mode 100755
index 00000000..ece17e43
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_211.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_212.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_212.wav
new file mode 100755
index 00000000..54889a19
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_212.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_213.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_213.wav
new file mode 100755
index 00000000..5acfe533
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_213.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_214.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_214.wav
new file mode 100755
index 00000000..02bba819
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_214.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_215.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_215.wav
new file mode 100755
index 00000000..de41046e
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_215.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_216.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_216.wav
new file mode 100755
index 00000000..5f3bb3f0
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_216.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_217.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_217.wav
new file mode 100755
index 00000000..cf2488a4
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_217.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_218.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_218.wav
new file mode 100755
index 00000000..3a61d00d
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_218.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_219.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_219.wav
new file mode 100755
index 00000000..09e8237b
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_219.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_220.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_220.wav
new file mode 100755
index 00000000..a026cf5a
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_220.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_221.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_221.wav
new file mode 100755
index 00000000..d1360f15
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_221.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_222.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_222.wav
new file mode 100755
index 00000000..56a4fbab
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_222.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_223.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_223.wav
new file mode 100755
index 00000000..d7d6cee1
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_223.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_224.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_224.wav
new file mode 100755
index 00000000..754013df
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_224.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_225.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_225.wav
new file mode 100755
index 00000000..fc9da35f
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_225.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_226.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_226.wav
new file mode 100755
index 00000000..c20a762c
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_226.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_227.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_227.wav
new file mode 100755
index 00000000..27c6aa3e
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_227.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_228.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_228.wav
new file mode 100755
index 00000000..c8886309
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_228.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_229.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_229.wav
new file mode 100755
index 00000000..ef4fe87f
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_229.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_230.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_230.wav
new file mode 100755
index 00000000..9bf9020d
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_230.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_231.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_231.wav
new file mode 100755
index 00000000..449d5b89
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_231.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_232.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_232.wav
new file mode 100755
index 00000000..b45a897e
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_232.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_233.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_233.wav
new file mode 100755
index 00000000..32f0b5a2
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_233.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_234.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_234.wav
new file mode 100755
index 00000000..9ad3d669
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_234.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_235.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_235.wav
new file mode 100755
index 00000000..9f554f26
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_235.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_236.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_236.wav
new file mode 100755
index 00000000..2db994b4
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_236.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_237.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_237.wav
new file mode 100755
index 00000000..729b12ba
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_237.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_238.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_238.wav
new file mode 100755
index 00000000..5dad02b4
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_238.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_239.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_239.wav
new file mode 100755
index 00000000..f37bba28
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_239.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_240.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_240.wav
new file mode 100755
index 00000000..fa7dad66
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_240.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_241.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_241.wav
new file mode 100755
index 00000000..b923017f
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_241.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_242.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_242.wav
new file mode 100755
index 00000000..4bec1e6d
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_242.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_243.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_243.wav
new file mode 100755
index 00000000..85f87f1e
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_243.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_244.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_244.wav
new file mode 100755
index 00000000..efde175c
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_244.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_245.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_245.wav
new file mode 100755
index 00000000..cf09aabd
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_245.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_246.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_246.wav
new file mode 100755
index 00000000..64b09938
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_246.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_247.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_247.wav
new file mode 100755
index 00000000..50d6f2b0
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_247.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_248.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_248.wav
new file mode 100755
index 00000000..48c7212e
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_248.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_249.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_249.wav
new file mode 100755
index 00000000..bfe633f8
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_249.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_250.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_250.wav
new file mode 100755
index 00000000..4a3aff31
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_250.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_251.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_251.wav
new file mode 100755
index 00000000..0d5774e9
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_251.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_252.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_252.wav
new file mode 100755
index 00000000..b5929236
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_252.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_253.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_253.wav
new file mode 100755
index 00000000..14fcb8c0
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_253.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_254.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_254.wav
new file mode 100755
index 00000000..fe6032e9
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_254.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_255.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_255.wav
new file mode 100755
index 00000000..989af35b
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_255.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_256.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_256.wav
new file mode 100755
index 00000000..8d4d0462
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_256.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_257.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_257.wav
new file mode 100755
index 00000000..80098eb3
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_257.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_258.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_258.wav
new file mode 100755
index 00000000..46d0615a
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_258.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_259.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_259.wav
new file mode 100755
index 00000000..66a3a022
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_259.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_260.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_260.wav
new file mode 100755
index 00000000..5094b808
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_260.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_261.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_261.wav
new file mode 100755
index 00000000..1dbc4b5e
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_261.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_262.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_262.wav
new file mode 100755
index 00000000..0729b97d
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_262.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_263.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_263.wav
new file mode 100755
index 00000000..faa96aab
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_263.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_264.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_264.wav
new file mode 100755
index 00000000..0dcaf052
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_264.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_265.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_265.wav
new file mode 100755
index 00000000..669092dc
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_265.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_266.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_266.wav
new file mode 100755
index 00000000..cf5e9ff0
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_266.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_267.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_267.wav
new file mode 100755
index 00000000..affbcccd
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_267.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_268.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_268.wav
new file mode 100755
index 00000000..8f6c5b6c
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_268.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_269.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_269.wav
new file mode 100755
index 00000000..96aad618
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_269.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_270.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_270.wav
new file mode 100755
index 00000000..8f2d0aad
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_270.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_271.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_271.wav
new file mode 100755
index 00000000..42cebb90
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_271.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_272.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_272.wav
new file mode 100755
index 00000000..d4f67a39
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_272.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_273.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_273.wav
new file mode 100755
index 00000000..7ac81aec
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_273.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_274.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_274.wav
new file mode 100755
index 00000000..5142b57e
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_274.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_275.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_275.wav
new file mode 100755
index 00000000..6200c108
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_275.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_276.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_276.wav
new file mode 100755
index 00000000..1c122671
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_276.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_277.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_277.wav
new file mode 100755
index 00000000..a2583ff5
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_277.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_278.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_278.wav
new file mode 100755
index 00000000..cd0b39f7
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_278.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_279.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_279.wav
new file mode 100755
index 00000000..44fd106c
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_279.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_280.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_280.wav
new file mode 100755
index 00000000..eac40bd9
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_280.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_281.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_281.wav
new file mode 100755
index 00000000..dacf9279
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_281.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_282.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_282.wav
new file mode 100755
index 00000000..5a88902d
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_282.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_283.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_283.wav
new file mode 100755
index 00000000..5ef6bc3d
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_283.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_284.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_284.wav
new file mode 100755
index 00000000..53ca0f0e
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_284.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_285.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_285.wav
new file mode 100755
index 00000000..dc3e869b
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_285.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_286.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_286.wav
new file mode 100755
index 00000000..618ada1e
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_286.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_287.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_287.wav
new file mode 100755
index 00000000..1882fa27
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_287.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_288.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_288.wav
new file mode 100755
index 00000000..164509f9
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_288.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_289.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_289.wav
new file mode 100755
index 00000000..b16025ed
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_289.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_290.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_290.wav
new file mode 100755
index 00000000..f30e8bd1
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_290.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_291.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_291.wav
new file mode 100755
index 00000000..185ae8d1
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_291.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_292.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_292.wav
new file mode 100755
index 00000000..9eeb380e
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_292.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_293.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_293.wav
new file mode 100755
index 00000000..ae985b23
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_293.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_294.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_294.wav
new file mode 100755
index 00000000..f5a1563f
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_294.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_295.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_295.wav
new file mode 100755
index 00000000..89ec288c
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_295.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_296.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_296.wav
new file mode 100755
index 00000000..f9d02030
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_296.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_297.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_297.wav
new file mode 100755
index 00000000..f2e767d6
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_297.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_298.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_298.wav
new file mode 100755
index 00000000..1fc6fa56
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_298.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_299.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_299.wav
new file mode 100755
index 00000000..3861b580
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_299.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_300.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_300.wav
new file mode 100755
index 00000000..31b38508
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_300.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_301.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_301.wav
new file mode 100755
index 00000000..32713ba4
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_301.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_302.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_302.wav
new file mode 100755
index 00000000..f6811d30
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_302.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_303.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_303.wav
new file mode 100755
index 00000000..477c50a3
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_303.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_304.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_304.wav
new file mode 100755
index 00000000..c879aa31
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_304.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_305.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_305.wav
new file mode 100755
index 00000000..d1fc1e8f
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_305.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_306.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_306.wav
new file mode 100755
index 00000000..e3cf3f42
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_306.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_307.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_307.wav
new file mode 100755
index 00000000..964faa19
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_307.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_308.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_308.wav
new file mode 100755
index 00000000..e7746f9e
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_308.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_309.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_309.wav
new file mode 100755
index 00000000..13b740f9
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_309.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_310.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_310.wav
new file mode 100755
index 00000000..765e614d
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_310.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_311.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_311.wav
new file mode 100755
index 00000000..d3b348d6
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_311.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_312.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_312.wav
new file mode 100755
index 00000000..81a1ff76
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_312.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_313.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_313.wav
new file mode 100755
index 00000000..6a899d83
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_313.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_314.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_314.wav
new file mode 100755
index 00000000..0687652d
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_314.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_315.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_315.wav
new file mode 100755
index 00000000..79e179e9
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_315.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_316.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_316.wav
new file mode 100755
index 00000000..be8b97e7
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_316.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_317.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_317.wav
new file mode 100755
index 00000000..c72198e4
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_317.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_318.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_318.wav
new file mode 100755
index 00000000..42eb2065
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_318.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_319.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_319.wav
new file mode 100755
index 00000000..9e237309
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_319.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_320.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_320.wav
new file mode 100755
index 00000000..8bb72326
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_320.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_321.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_321.wav
new file mode 100755
index 00000000..4e604bd5
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_321.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_322.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_322.wav
new file mode 100755
index 00000000..346e5fbf
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_322.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_323.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_323.wav
new file mode 100755
index 00000000..147ca87c
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_323.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_324.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_324.wav
new file mode 100755
index 00000000..09b2dd51
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/RECITATION324_324.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_001.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_001.wav
new file mode 100755
index 00000000..fda18df8
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_001.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_002.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_002.wav
new file mode 100755
index 00000000..2bd2a81c
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_002.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_003.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_003.wav
new file mode 100755
index 00000000..a0eebe1d
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_003.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_004.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_004.wav
new file mode 100755
index 00000000..09a5a369
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_004.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_005.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_005.wav
new file mode 100755
index 00000000..26176a82
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_005.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_006.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_006.wav
new file mode 100755
index 00000000..29d38df5
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_006.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_007.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_007.wav
new file mode 100755
index 00000000..cda8f1b4
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_007.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_008.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_008.wav
new file mode 100755
index 00000000..9117c10c
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_008.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_009.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_009.wav
new file mode 100755
index 00000000..4beb1518
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_009.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_010.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_010.wav
new file mode 100755
index 00000000..d8ce78fb
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_010.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_011.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_011.wav
new file mode 100755
index 00000000..e59596cc
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_011.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_012.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_012.wav
new file mode 100755
index 00000000..7ed32af5
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_012.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_013.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_013.wav
new file mode 100755
index 00000000..ed31e7b6
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_013.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_014.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_014.wav
new file mode 100755
index 00000000..7d2cf1e6
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_014.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_015.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_015.wav
new file mode 100755
index 00000000..a08f2514
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_015.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_016.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_016.wav
new file mode 100755
index 00000000..d0d2628f
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_016.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_017.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_017.wav
new file mode 100755
index 00000000..962eed9b
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_017.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_018.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_018.wav
new file mode 100755
index 00000000..19385979
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_018.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_019.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_019.wav
new file mode 100755
index 00000000..21d66306
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_019.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_020.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_020.wav
new file mode 100755
index 00000000..67a2e10c
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_020.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_021.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_021.wav
new file mode 100755
index 00000000..48d5c559
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_021.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_022.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_022.wav
new file mode 100755
index 00000000..a2aa70b0
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_022.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_023.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_023.wav
new file mode 100755
index 00000000..163aaced
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_023.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_024.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_024.wav
new file mode 100755
index 00000000..e041e972
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_024.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_025.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_025.wav
new file mode 100755
index 00000000..5499be5e
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_025.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_026.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_026.wav
new file mode 100755
index 00000000..ee0244e2
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_026.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_027.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_027.wav
new file mode 100755
index 00000000..a83e97d8
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_027.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_028.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_028.wav
new file mode 100755
index 00000000..2433b647
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_028.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_029.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_029.wav
new file mode 100755
index 00000000..1fd6ebe6
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_029.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_030.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_030.wav
new file mode 100755
index 00000000..52722533
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_030.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_031.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_031.wav
new file mode 100755
index 00000000..0a9ab11c
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_031.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_032.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_032.wav
new file mode 100755
index 00000000..e287af8e
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_032.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_033.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_033.wav
new file mode 100755
index 00000000..f78f4dc0
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_033.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_034.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_034.wav
new file mode 100755
index 00000000..261e54f0
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_034.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_035.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_035.wav
new file mode 100755
index 00000000..f8e66321
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_035.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_036.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_036.wav
new file mode 100755
index 00000000..dc3d7131
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_036.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_037.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_037.wav
new file mode 100755
index 00000000..a908e6c2
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_037.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_038.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_038.wav
new file mode 100755
index 00000000..cff42556
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_038.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_039.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_039.wav
new file mode 100755
index 00000000..3df0bcf2
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_039.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_040.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_040.wav
new file mode 100755
index 00000000..d1b3808b
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_040.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_041.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_041.wav
new file mode 100755
index 00000000..4da70c44
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_041.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_042.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_042.wav
new file mode 100755
index 00000000..95c051de
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_042.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_043.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_043.wav
new file mode 100755
index 00000000..28dcc07a
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_043.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_044.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_044.wav
new file mode 100755
index 00000000..708e55ee
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_044.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_045.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_045.wav
new file mode 100755
index 00000000..14409c75
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_045.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_046.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_046.wav
new file mode 100755
index 00000000..dd5a2351
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_046.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_047.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_047.wav
new file mode 100755
index 00000000..ce89236c
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_047.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_048.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_048.wav
new file mode 100755
index 00000000..ca0b72c1
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_048.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_049.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_049.wav
new file mode 100755
index 00000000..86f4d31c
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_049.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_050.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_050.wav
new file mode 100755
index 00000000..12305c27
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_050.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_051.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_051.wav
new file mode 100755
index 00000000..302e4695
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_051.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_052.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_052.wav
new file mode 100755
index 00000000..a44af131
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_052.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_053.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_053.wav
new file mode 100755
index 00000000..9114ac6a
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_053.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_054.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_054.wav
new file mode 100755
index 00000000..d86fdcf0
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_054.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_055.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_055.wav
new file mode 100755
index 00000000..c69c1aaf
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_055.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_056.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_056.wav
new file mode 100755
index 00000000..4e8805af
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_056.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_057.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_057.wav
new file mode 100755
index 00000000..2f730002
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_057.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_058.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_058.wav
new file mode 100755
index 00000000..38646faa
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_058.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_059.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_059.wav
new file mode 100755
index 00000000..a314f324
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_059.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_060.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_060.wav
new file mode 100755
index 00000000..05fd772c
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_060.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_061.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_061.wav
new file mode 100755
index 00000000..c52b594f
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_061.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_062.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_062.wav
new file mode 100755
index 00000000..f37c4023
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_062.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_063.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_063.wav
new file mode 100755
index 00000000..fb9b7575
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_063.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_064.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_064.wav
new file mode 100755
index 00000000..599ef7a4
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_064.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_065.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_065.wav
new file mode 100755
index 00000000..5dc76385
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_065.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_066.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_066.wav
new file mode 100755
index 00000000..27cd456a
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_066.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_067.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_067.wav
new file mode 100755
index 00000000..38c9b9ab
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_067.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_068.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_068.wav
new file mode 100755
index 00000000..f8032f1b
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_068.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_069.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_069.wav
new file mode 100755
index 00000000..498a9fab
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_069.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_070.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_070.wav
new file mode 100755
index 00000000..d3a691cc
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_070.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_071.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_071.wav
new file mode 100755
index 00000000..b9feb147
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_071.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_072.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_072.wav
new file mode 100755
index 00000000..f2e813a6
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_072.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_073.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_073.wav
new file mode 100755
index 00000000..5d842f0d
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_073.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_074.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_074.wav
new file mode 100755
index 00000000..ddb91f2c
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_074.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_075.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_075.wav
new file mode 100755
index 00000000..3bed2500
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_075.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_076.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_076.wav
new file mode 100755
index 00000000..94880c7e
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_076.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_077.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_077.wav
new file mode 100755
index 00000000..eae8656c
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_077.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_078.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_078.wav
new file mode 100755
index 00000000..d191fb53
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_078.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_079.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_079.wav
new file mode 100755
index 00000000..08794cda
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_079.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_080.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_080.wav
new file mode 100755
index 00000000..f33019e2
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_080.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_081.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_081.wav
new file mode 100755
index 00000000..9eac7d97
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_081.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_082.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_082.wav
new file mode 100755
index 00000000..1311b823
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_082.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_083.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_083.wav
new file mode 100755
index 00000000..68017915
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_083.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_084.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_084.wav
new file mode 100755
index 00000000..4e3c0a5c
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_084.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_085.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_085.wav
new file mode 100755
index 00000000..a50a9b18
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_085.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_086.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_086.wav
new file mode 100755
index 00000000..2d8707be
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_086.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_087.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_087.wav
new file mode 100755
index 00000000..2a9e4205
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_087.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_088.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_088.wav
new file mode 100755
index 00000000..14ff7dc2
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_088.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_089.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_089.wav
new file mode 100755
index 00000000..fedcb269
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_089.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_090.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_090.wav
new file mode 100755
index 00000000..aa9851b5
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_090.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_091.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_091.wav
new file mode 100755
index 00000000..82c07bd5
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_091.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_092.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_092.wav
new file mode 100755
index 00000000..cb64d68e
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_092.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_093.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_093.wav
new file mode 100755
index 00000000..83674fd7
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_093.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_094.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_094.wav
new file mode 100755
index 00000000..b82c500a
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_094.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_095.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_095.wav
new file mode 100755
index 00000000..c14c6684
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_095.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_096.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_096.wav
new file mode 100755
index 00000000..5660927d
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_096.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_097.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_097.wav
new file mode 100755
index 00000000..70a051bc
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_097.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_098.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_098.wav
new file mode 100755
index 00000000..b2534a7c
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_098.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_099.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_099.wav
new file mode 100755
index 00000000..1c4475b7
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_099.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_100.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_100.wav
new file mode 100755
index 00000000..ce311e0d
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_100.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_101.wav b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_101.wav
new file mode 100755
index 00000000..2f3b4419
Binary files /dev/null and b/demo/MMVC_Trainer/dataset/textful/1205_zundamon/wav/emoNormal_101.wav differ
diff --git a/demo/MMVC_Trainer/dataset/textless/.gitignore b/demo/MMVC_Trainer/dataset/textless/.gitignore
new file mode 100755
index 00000000..c96a04f0
--- /dev/null
+++ b/demo/MMVC_Trainer/dataset/textless/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/docs/Makefile b/demo/MMVC_Trainer/docs/Makefile
new file mode 100755
index 00000000..d0c3cbf1
--- /dev/null
+++ b/demo/MMVC_Trainer/docs/Makefile
@@ -0,0 +1,20 @@
+# Minimal makefile for Sphinx documentation
+#
+
+# You can set these variables from the command line, and also
+# from the environment for the first two.
+SPHINXOPTS ?=
+SPHINXBUILD ?= sphinx-build
+SOURCEDIR = source
+BUILDDIR = build
+
+# Put it first so that "make" without argument is like "make help".
+help:
+ @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
+
+.PHONY: help Makefile
+
+# Catch-all target: route all unknown targets to Sphinx using the new
+# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
+%: Makefile
+ @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
diff --git a/demo/MMVC_Trainer/docs/index.html b/demo/MMVC_Trainer/docs/index.html
new file mode 100755
index 00000000..2716cb03
--- /dev/null
+++ b/demo/MMVC_Trainer/docs/index.html
@@ -0,0 +1,112 @@
+
+
+
+
+
+
+
+
+ Welcome to MMVC's documentation! — MMVC 1.1.0 ドキュメント
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Welcome to MMVC's documentation!
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/docs/make.bat b/demo/MMVC_Trainer/docs/make.bat
new file mode 100755
index 00000000..dc1312ab
--- /dev/null
+++ b/demo/MMVC_Trainer/docs/make.bat
@@ -0,0 +1,35 @@
+@ECHO OFF
+
+pushd %~dp0
+
+REM Command file for Sphinx documentation
+
+if "%SPHINXBUILD%" == "" (
+ set SPHINXBUILD=sphinx-build
+)
+set SOURCEDIR=source
+set BUILDDIR=build
+
+%SPHINXBUILD% >NUL 2>NUL
+if errorlevel 9009 (
+ echo.
+ echo.The 'sphinx-build' command was not found. Make sure you have Sphinx
+ echo.installed, then set the SPHINXBUILD environment variable to point
+ echo.to the full path of the 'sphinx-build' executable. Alternatively you
+ echo.may add the Sphinx directory to PATH.
+ echo.
+ echo.If you don't have Sphinx installed, grab it from
+ echo.https://www.sphinx-doc.org/
+ exit /b 1
+)
+
+if "%1" == "" goto help
+
+%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
+goto end
+
+:help
+%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O%
+
+:end
+popd
diff --git a/demo/MMVC_Trainer/docs/source/chap1/chap1.rst b/demo/MMVC_Trainer/docs/source/chap1/chap1.rst
new file mode 100755
index 00000000..d50f735a
--- /dev/null
+++ b/demo/MMVC_Trainer/docs/source/chap1/chap1.rst
@@ -0,0 +1,31 @@
+MMVCとは
+=========
+
+AIを使ったリアルタイムボイスチェンジャー「MMVC(RealTime-Many to Many Voice Conversion)」
+で使用するモデルを学習するためのリポジトリです。
+google colaboratoryを用いることで、個人の環境に依存せず、かつ簡単に機械学習の学習フェーズを実行可能です。
+
+
+Special thanks
+---------------------------------------------------------------------------
+- JVS (Japanese versatile speech) corpus
+ contributors : 高道 慎之介様/三井 健太郎様/齋藤 佑樹様/郡山 知樹様/丹治 尚子様/猿渡 洋様
+ https://sites.google.com/site/shinnosuketakamichi/research-topics/jvs_corpus
+- ITAコーパス マルチモーダルデータベース
+ contributors : 金井郁也様/千葉隆壱様/齊藤剛史様/森勢将雅様/小口純矢様/能勢隆様/尾上真惟子様/小田恭央様
+ CharacterVoice : 東北イタコ(木戸衣吹様)/ずんだもん(伊藤ゆいな様)/四国めたん(田中小雪様)
+ https://zunko.jp/multimodal_dev/login.php
+- つくよみちゃんコーパス
+ contributor : 夢前黎様
+ CharacterVoice : つくよみちゃん(夢前黎様)
+ https://tyc.rei-yumesaki.net/material/corpus/
+
+Reference
+---------------------------------------------------------------------------
+https://arxiv.org/abs/2106.06103
+https://github.com/jaywalnut310/vits
+
+Author
+---------------------------------------------------------------------------
+Isle Tennos
+Twitter : https://twitter.com/IsleTennos
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/docs/source/chap2/chap2.rst b/demo/MMVC_Trainer/docs/source/chap2/chap2.rst
new file mode 100755
index 00000000..e62f53f3
--- /dev/null
+++ b/demo/MMVC_Trainer/docs/source/chap2/chap2.rst
@@ -0,0 +1,24 @@
+利用規約
+=========
+2021/04/20
+
+|
+| 本ソフトウェアの利用規約は基本的にMITライセンスに準拠します。
+| VRCでの利用などライセンス記載が不可の場合、記載は不要です。
+| ライセンスの記載が可能なプラットフォームでの利用の場合、下記クレジットどちらかををご利用ください。
+| (可能であればパターン2を使ってくれると製作者はうれしいです)
+|
+| ライセンスパターン 1
+|
+| Copyright (c) 2021 Isle.Tennos
+| Released under the MIT license
+| https://opensource.org/licenses/mit-license.php
+|
+| ライセンスパターン 2
+|
+| MMVCv1.x.x(使用バージョン)
+| Copyright (c) 2021 Isle.Tennos
+| Released under the MIT license
+| https://opensource.org/licenses/mit-license.php
+| git:https://github.com/isletennos/MMVC_Trainer
+| community(discord):https://discord.gg/PgspuDSTEc
diff --git a/demo/MMVC_Trainer/docs/source/chap3/chap3.rst b/demo/MMVC_Trainer/docs/source/chap3/chap3.rst
new file mode 100755
index 00000000..2a4ac870
--- /dev/null
+++ b/demo/MMVC_Trainer/docs/source/chap3/chap3.rst
@@ -0,0 +1,147 @@
+MMVCの導入
+==================
+
+インストール
+---------------------------------------------------------------------------
+https://github.com/isletennos/MMVC_Trainer をダウンロードして、展開、展開したディレクトリをgoogle drive上にアップロードしてください。
+
+
+ずんだもんの声になる
+---------------------------------------------------------------------------
+
+
+自分の音声の録音と音声データの配置
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+1. 自分の声の音声データを録音します。
+
+ | JVSコーパスやITAコーパス等を台本にし、100文程度読み上げます。
+ | 音声の録音ツールは
+ | Audacity
+ | https://forest.watch.impress.co.jp/library/software/audacity/
+ | OREMO
+ | http://nwp8861.web.fc2.com/soft/oremo/
+ | 等があります。
+ | また、録音した音声は24000Hz 16bit 1chである必要があります。
+
+ .. note::
+ MMVC用にテキストを分割したITAコーパスです。ご利用ください。
+ https://drive.google.com/file/d/14oXoQqLxRkP8NJK8qMYGee1_q2uEED1z/view?usp=sharing
+
+
+2. dataset/textful/000_myvoice に音声データとテキストデータを配置します。
+
+ | 最終的に下記のようなディレクトリ構成になります。
+
+ ::
+
+ dataset
+ ├── textful
+ │ ├── 000_myvoice
+ │ │ ├── text
+ │ │ │ ├── s_voice_001.txt
+ │ │ │ ├── s_voice_002.txt
+ │ │ │ ├── ...
+ │ │ └── wav
+ │ │ ├── s_voice_001.wav
+ │ │ ├── s_voice_002.wav
+ │ │ ├── ...
+ │ │── 001_target
+ │ │ ├── text
+ │ │ └── wav
+ │ │
+ │ └── 1205_zundamon
+ │ ├── text
+ │ │ ├── t_voice_001.txt
+ │ │ ├── t_voice_002.txt
+ │ │ ├── ...
+ │ └── wav
+ │ ├── t_voice_001.wav
+ │ ├── t_voice_002.wav
+ │ ├── ...
+ │
+ └── textless
+
+
+モデルの学習方法
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+1. 下記リンクより、「G_180000.pth」「D_180000.pth」をダウンロード。 https://drive.google.com/drive/folders/1XGpW0loNr1KjMtXVVG3WRd47R_ne6_X2?usp=sharing
+2. 「G_180000.pth」「D_180000.pth」をfine_modelに配置します。(良く忘れるポイントなので要注意!)
+3. notebookディレクトリにある「Create_Configfile_zundamon.ipynb」をgoogle colab 上で実行、学習に必要なconfigファイルを作成します
+4. configsに作成されたtrain_config_zundamon.jsonの
+ * "eval_interval"
+ modelを保存する間隔です。
+ * "batch_size"
+ colabで割り当てたGPUに合わせて調整してください。
+ 上記2項目を環境に応じて最適化してください。わからない方はそのままで大丈夫です。
+5. notebookディレクトリにある「Train_MMVC.ipynb」をgoogle colab 上で実行してください。
+ logs/にモデルが生成されます。
+
+学習したモデルの性能検証
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+1. notebookディレクトリにある「MMVC_Interface.ipynb」をgoogle colab 上で実行してください。
+
+好きなキャラクターの声になる
+---------------------------------------------------------------------------
+
+
+自分の音声の録音と音声データの配置 及びターゲット音声データの配置
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+
+1. 自分の声の音声データとその音声データに対応するテキスト、変換したい声の音声データとその音声データに対応するテキストを用意します。
+
+ | この時、用意する音声(自分の声の音声データ/変換したい声の音声データ共に)は24000Hz 16bit 1chを強く推奨しております。
+ | 九州そらと四国めたんのMMVC用のデータは下記リンクからダウンロードください。
+ | ダウンロード後、2節のように音声データとテキストデータを配置してください。
+ | https://drive.google.com/drive/folders/1ClIUx_2Wv-uNnuW2LlfG7aTHrUaZ2Asx?usp=sharing
+
+
+2. 下記のようなディレクトリ構成になるように音声データとテキストデータを配置します。textfulの直下には2ディレクトリになります。
+
+ | 1)自分の声の音声データとその音声データに対応するテキスト、変換したい声の音声データとその音声データに対応するテキストを用意します。
+ | この時、用意する音声(自分の声の音声データ/変換したい声の音声データ共に)は24000Hz 16bit 1chを強く推奨しております。
+ | 2)下記のようなディレクトリ構成になるように音声データとテキストデータを配置します。textfulの直下には2ディレクトリになります。
+
+ ::
+
+ dataset
+ ├── textful
+ │ ├── 000_myvoice
+ │ │ ├── text
+ │ │ │ ├── s_voice_001.txt
+ │ │ │ ├── s_voice_002.txt
+ │ │ │ ├── ...
+ │ │ └── wav
+ │ │ ├── s_voice_001.wav
+ │ │ ├── s_voice_002.wav
+ │ │ ├── ...
+ │ │── 001_target
+ │ │ ├── text
+ │ │ │ ├── t_voice_001.txt
+ │ │ │ ├── t_voice_002.txt
+ │ │ │ ├── ...
+ │ │ └── wav
+ │ │ ├── t_voice_001.wav
+ │ │ ├── t_voice_002.wav
+ │ │ ├── ...
+ │ └── 1205_zundamon
+ │ ├── text
+ │ │ ├── t_voice_001.txt
+ │ │ ├── t_voice_002.txt
+ │ │ ├── ...
+ │ └── wav
+ │ ├── t_voice_001.wav
+ │ ├── t_voice_002.wav
+ │ ├── ...
+ │
+ └── textless
+
+
+学習したモデルの性能検証、評価
+^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+1. notebookディレクトリにある「MMVC_Interface.ipynb」をgoogle colab 上で実行してください。
+
+有志による解説
+---------------------------------------------------------------------------
+| 前準備編
+| https://www.nicovideo.jp/watch/sm40415108
diff --git a/demo/MMVC_Trainer/docs/source/chap4/chap4.rst b/demo/MMVC_Trainer/docs/source/chap4/chap4.rst
new file mode 100755
index 00000000..b662bed6
--- /dev/null
+++ b/demo/MMVC_Trainer/docs/source/chap4/chap4.rst
@@ -0,0 +1,6 @@
+よくある質問
+==================
+.. toctree::
+ ./ph6_QA
+
+最終更新:2021/04/19
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/docs/source/chap4/ph6_QA.rst b/demo/MMVC_Trainer/docs/source/chap4/ph6_QA.rst
new file mode 100755
index 00000000..7b8f136b
--- /dev/null
+++ b/demo/MMVC_Trainer/docs/source/chap4/ph6_QA.rst
@@ -0,0 +1,208 @@
+「4 MMVCの学習に必要なconfig系Fileを作成する」でエラーが発生する
+===========================================================================
+
+テキストファイルがUTF-8形式でない場合
+---------------------------------------------------------------------------
+下記は学習データのテキストファイルがUTF-8形式でない場合に生じるエラーログになります。 ::
+
+ Traceback (most recent call last):
+ File "create_dataset_jtalk.py", line 103, in
+ main()
+ File "create_dataset_jtalk.py", line 99, in main
+ n_spk = create_dataset(filename)
+ File "create_dataset_jtalk.py", line 49, in create_dataset
+ mozi = f.read().split("\n")
+ File "/usr/lib/python3.7/codecs.py", line 322, in decode
+ (result, consumed) = self._buffer_decode(data, self.errors, final)
+ UnicodeDecodeError: 'utf-8' codec can't decode byte 0x83 in position 0: invalid start byte
+
+| このエラーはテキストファイルがUTF-8形式でない場合に出ると思われます。
+| 以下の方法で学習に使用するテキストファイルの形式をご確認ください。
+| 1. テキストファイルをメモ帳で開く
+| 2. ファイル(F) -> 名前を付けて保存(A)を選択
+| 3. ファイル名、ファイルの種類の下にある文字コード(E)が「UTF-8」になっているか確認する
+
+
+「6 学習を実行します」でエラーが発生する
+=============================================
+ファインチューニング用のモデルを読み込みの失敗場合
+---------------------------------------------------------------------------
+下記はファインチューニング用のモデルを読み込みに失敗したときのエラーログになります。 ::
+
+ File "train_ms.py", line 303, in
+ main()
+ File "train_ms.py", line 53, in main
+ mp.spawn(run, nprocs=n_gpus, args=(n_gpus, hps,))
+ File "/usr/local/lib/python3.7/dist-packages/torch/multiprocessing/spawn.py", line 200, in spawn
+ return start_processes(fn, args, nprocs, join, daemon, start_method='spawn')
+ File "/usr/local/lib/python3.7/dist-packages/torch/multiprocessing/spawn.py", line 158, in start_processes
+ while not context.join():
+ File "/usr/local/lib/python3.7/dist-packages/torch/multiprocessing/spawn.py", line 119, in join
+ raise Exception(msg)
+ Exception:
+
+ -- Process 0 terminated with the following error:
+ Traceback (most recent call last):
+ File "/usr/local/lib/python3.7/dist-packages/torch/multiprocessing/spawn.py", line 20, in _wrap
+ fn(i, *args)
+ File "/content/drive/MyDrive/MMVC_Trainer-main/train_ms.py", line 108, in run
+ _, _, _, epoch_str = utils.load_checkpoint(hps.fine_model_g, net_g, optim_g)
+ File "/content/drive/MyDrive/MMVC_Trainer-main/utils.py", line 19, in load_checkpoint
+ assert os.path.isfile(checkpoint_path)
+ AssertionError
+
+| ファインチューニング用のモデルの読み込みに失敗しています。
+| /finemodel 配下に finemodel用のモデルファイル(.pth)がありますか?
+| (v1.1.0 では G_232000.pthとD_232000.pth)
+
+
+detasetにデータが正しく配置されていない場合
+---------------------------------------------------------------------------
+下記はdetasetにデータが正しく配置されていないときのエラーログになります。
+
+size mismatch for emb_g.weight:とエラーが出た場合、ほぼ確実にdetasetの配置ミスです。 ::
+
+ -- Process 0 terminated with the following error:
+ Traceback (most recent call last):
+ File "/usr/local/lib/python3.7/dist-packages/torch/multiprocessing/spawn.py", line 20, in _wrap
+ fn(i, *args)
+ File "/content/drive/MyDrive/MMVC_Trainer-main/train_ms.py", line 108, in run
+ _, _, _, epoch_str = utils.load_checkpoint(hps.fine_model_g, net_g, optim_g)
+ File "/content/drive/MyDrive/MMVC_Trainer-main/utils.py", line 38, in load_checkpoint
+ model.module.load_state_dict(new_state_dict)
+ File "/usr/local/lib/python3.7/dist-packages/torch/nn/modules/module.py", line 1045, in load_state_dict
+ self.__class__.__name__, "\n\t".join(error_msgs)))
+ RuntimeError: Error(s) in loading state_dict for SynthesizerTrn:
+ size mismatch for emb_g.weight: copying a param with shape torch.Size([106, 256]) from checkpoint, the shape in current model is torch.Size([104, 256]).
+
+| datasetに正しくデータが配置されていません。
+| (後で加筆します…)
+
+
+データのビットレートがあっていない場合
+---------------------------------------------------------------------------
+下記は学習データのビットレートがあっていない場合に生じるエラーログになります。 ::
+
+ Exception ignored in:
+ Traceback (most recent call last):
+ File "/usr/local/lib/python3.7/dist-packages/torch/utils/data/dataloader.py", line 1101, in del
+ self._shutdown_workers()
+ File "/usr/local/lib/python3.7/dist-packages/torch/utils/data/dataloader.py", line 1050, in _shutdown_workers
+ if not self._shutdown:
+ AttributeError: '_MultiProcessingDataLoaderIter' object has no attribute '_shutdown'
+ Traceback (most recent call last):
+ File "train_ms.py", line 303, in
+ main()
+ File "train_ms.py", line 53, in main
+ mp.spawn(run, nprocs=n_gpus, args=(n_gpus, hps,))
+ File "/usr/local/lib/python3.7/dist-packages/torch/multiprocessing/spawn.py", line 200, in spawn
+ return start_processes(fn, args, nprocs, join, daemon, start_method='spawn')
+ File "/usr/local/lib/python3.7/dist-packages/torch/multiprocessing/spawn.py", line 158, in start_processes
+ while not context.join():
+ File "/usr/local/lib/python3.7/dist-packages/torch/multiprocessing/spawn.py", line 113, in join
+ (error_index, exitcode)
+ Exception: process 0 terminated with exit code 1
+
+| 現在の学習元データは384Kbpx(24000Hz 16bit 1ch)で行われています。
+| そのため、自分の声の音声データと変換したい声の音声データがこの条件に合っていない場合、このエラーが発生します。
+| 録音ツールは24000Hzで録音できるものが少なく、近い周波数の22050Hzで録音した場合もエラーになるので注意してください。またchを1ch(モノラル)にするよう注意してください。
+| Audacityという録音ツールでは録音周波数を任意に指定できるため直接24000Hzで録音することができるのでおすすめです。
+| 変換したい声の音声データに「ITAコーパス」や「つくよみちゃんコーパス」を利用する場合もこの条件に合わないため変換する必要があります。
+| 変換には yatoyun 氏作成の https://colab.research.google.com/drive/1CXc7B_mZE3mZLm3MPXMNm_NB56mpBPZS などを利用してみてください。
+
+
+GPUが使えないと言われて学習できない
+---------------------------------------------------------------------------
+下記のようなエラーが表示されて学習できません。 ::
+
+ AssertionError: CPU training is not allowed.
+
+| Train_MMVC.ipynbの下にある
+| ランタイム→ランタイムのタイプの変更→ハードウェアアクセラレータ
+| のところを「GPU」に変更して再度実行します。
+
+
+TPUを使って学習できますか
+---------------------------------------------------------------------------
+現在はTPUに対応していません。
+
+
+問題点を修正したのに同じエラーが出る
+---------------------------------------------------------------------------
+データ修正後 config ファイルを作り直ししないとダメな場合があるので、作り直して再度試してください。
+
+
+MMVC_Clientでエラーが発生する
+==============================================================
+
+ファイルの指定方法が間違ってる場合(ローカル版)
+---------------------------------------------------------------------------
+以下がrt-mmvc-client-GPU.exeでmyprofile.jsonのパスを入力したときに生じるエラーログです ::
+
+ Traceback (most recent call last):
+ File "{あなたのパス}/rt-mmvc-client-GPU.py",line 424,in
+ File "{あなたのパス*/rt-mmvc-client-GPU.py",line 402, in config_get
+ OSError:[Error 22] Invalid argument: "{あなたのパス}/myprofile.json"
+
+| パスを指定する際はなにもつけずに指定してください。
+|
+
+
+jsonファイルの記法が間違ってる場合(ローカル版)
+---------------------------------------------------------------------------
+以下はrt-mmvc-client-GPU.exeで、myprofile.jsonに記述されているパス指定が間違っているときに生じるエラーログです。 ::
+
+ Traceback (most recent call last):
+ File "{あなたのパス}/rt-mmvc-client-GPU.py",line 424,in
+ File "{あなたのパス}/rt-mmvc-client-GPU.py",line 402, in config_get
+ File "{あなたのパス}/json/__init__.py",line 346, in loads
+ File "{あなたのパス}/json/decoder.py",line 357, in decode
+ File "{あなたのパス}/json/decoder.py",line 353, in raw_decode
+ json.decoder.JSONDecodeError:Invalid \escape: line 14 column 15 (char 255)
+
+| jsonファイル内ではパスの「\\\」を「\\\\」と表記する必要があります。
+
+path指定の区切り子は下記例のように記述してください。 ::
+
+ "path": {
+ "json":"C:\\Users\\example_user\\Programs\\rt-mmvc_client\\config.json",
+ "model":"C:\\Users\\example_user\\Programs\\rt-mmvc_client\\G_2000.pth",
+ "noise":"C:\\Users\\example_user\\Programs\\rt-mmvc_client\\noise.wav"
+ }
+
+
+CPU版で音声が途切れ途切れになる
+---------------------------------------------------------------------------
+| 現在のバージョンではかなりCPU負荷がかかるため途切れ途切れになってしまいます。
+| GPU版でもCPUの負荷が結構高く逆にGPUの負荷がほとんどかからないためGPU版を利用してください。
+
+
+データセットについて
+=============================================
+
+学習データの自分の声と変換先のテキスト内容は一致させる必要はありますか
+---------------------------------------------------------------------------
+一致しなくても大丈夫ですが、声優統計コーパスやATR503文(内100文程度で可)などの所謂音素分を読み上げることを推奨します。
+
+
+どのぐらいの量の自分の声が必要ですか
+---------------------------------------------------------------------------
+文章量にもよりますが100文程度でも十分な精度がでます。
+
+
+テキスト内容の記述方法はどうしたらよいですか
+---------------------------------------------------------------------------
+| 漢字さえ使わなければよいです。
+| 基本はひらがなかカナに統一したほうがよいです。句読点はあったほうがよいです。
+
+
+推奨されるデータ、ボイスチェンジャーを使用する際のマイクの諸設定を教えてください
+---------------------------------------------------------------------------------------------------------
+| 学習目標の声の音声ファイルと自分の声の音声ファイルはすべて同じサンプリングレート、bit、チャンネル数(すべてをかけ合わせて算出されるビットレート)にする必要があります。
+| ボイスチェンジャーを使用する際の設定は学習時に使用した音声のサンプリングレート、bit、チャンネル数と合わせてください。
+
+
+その他
+========
+
+最終更新:2021/04/20
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/docs/source/chap5/chap5.rst b/demo/MMVC_Trainer/docs/source/chap5/chap5.rst
new file mode 100755
index 00000000..2a589ace
--- /dev/null
+++ b/demo/MMVC_Trainer/docs/source/chap5/chap5.rst
@@ -0,0 +1,4 @@
+今後のアップデート
+=========
+
+これは chap1.rst の内容です。
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/docs/source/conf.py b/demo/MMVC_Trainer/docs/source/conf.py
new file mode 100755
index 00000000..84a9b242
--- /dev/null
+++ b/demo/MMVC_Trainer/docs/source/conf.py
@@ -0,0 +1,62 @@
+# Configuration file for the Sphinx documentation builder.
+#
+# This file only contains a selection of the most common options. For a full
+# list see the documentation:
+# https://www.sphinx-doc.org/en/master/usage/configuration.html
+
+# -- Path setup --------------------------------------------------------------
+
+# If extensions (or modules to document with autodoc) are in another directory,
+# add these directories to sys.path here. If the directory is relative to the
+# documentation root, use os.path.abspath to make it absolute, like shown here.
+#
+# import os
+# import sys
+# sys.path.insert(0, os.path.abspath('.'))
+
+
+# -- Project information -----------------------------------------------------
+
+project = 'MMVC'
+copyright = '2022, Isle.Tennos'
+author = 'Isle.Tennos'
+
+# The full version, including alpha/beta/rc tags
+release = '1.1.0'
+
+
+# -- General configuration ---------------------------------------------------
+
+# Add any Sphinx extension module names here, as strings. They can be
+# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
+# ones.
+extensions = [
+]
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['_templates']
+
+# The language for content autogenerated by Sphinx. Refer to documentation
+# for a list of supported languages.
+#
+# This is also used if you do content translation via gettext catalogs.
+# Usually you set "language" from the command line for these cases.
+language = 'ja'
+
+# List of patterns, relative to source directory, that match files and
+# directories to ignore when looking for source files.
+# This pattern also affects html_static_path and html_extra_path.
+exclude_patterns = []
+
+
+# -- Options for HTML output -------------------------------------------------
+
+# The theme to use for HTML and HTML Help pages. See the documentation for
+# a list of builtin themes.
+#
+html_theme = 'sphinx_rtd_theme'
+
+# Add any paths that contain custom static files (such as style sheets) here,
+# relative to this directory. They are copied after the builtin static files,
+# so a file named "default.css" will overwrite the builtin "default.css".
+html_static_path = ['_static']
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/docs/source/index.rst b/demo/MMVC_Trainer/docs/source/index.rst
new file mode 100755
index 00000000..4faaefe0
--- /dev/null
+++ b/demo/MMVC_Trainer/docs/source/index.rst
@@ -0,0 +1,18 @@
+.. MMVC documentation master file, created by
+ sphinx-quickstart on Tue Apr 19 03:21:15 2022.
+ You can adapt this file completely to your liking, but it should at least
+ contain the root `toctree` directive.
+
+Welcome to MMVC !
+================================
+
+.. toctree::
+ :maxdepth: 10
+ :caption: Contents:
+ :numbered:
+
+ ./chap1/chap1
+ ./chap2/chap2
+ ./chap3/chap3
+ ./chap4/chap4
+ ./chap5/chap5
diff --git a/demo/MMVC_Trainer/filelists/.gitignore b/demo/MMVC_Trainer/filelists/.gitignore
new file mode 100755
index 00000000..c96a04f0
--- /dev/null
+++ b/demo/MMVC_Trainer/filelists/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/fine_model/.gitignore b/demo/MMVC_Trainer/fine_model/.gitignore
new file mode 100755
index 00000000..c96a04f0
--- /dev/null
+++ b/demo/MMVC_Trainer/fine_model/.gitignore
@@ -0,0 +1,2 @@
+*
+!.gitignore
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/losses.py b/demo/MMVC_Trainer/losses.py
new file mode 100755
index 00000000..fb22a0e8
--- /dev/null
+++ b/demo/MMVC_Trainer/losses.py
@@ -0,0 +1,61 @@
+import torch
+from torch.nn import functional as F
+
+import commons
+
+
+def feature_loss(fmap_r, fmap_g):
+ loss = 0
+ for dr, dg in zip(fmap_r, fmap_g):
+ for rl, gl in zip(dr, dg):
+ rl = rl.float().detach()
+ gl = gl.float()
+ loss += torch.mean(torch.abs(rl - gl))
+
+ return loss * 2
+
+
+def discriminator_loss(disc_real_outputs, disc_generated_outputs):
+ loss = 0
+ r_losses = []
+ g_losses = []
+ for dr, dg in zip(disc_real_outputs, disc_generated_outputs):
+ dr = dr.float()
+ dg = dg.float()
+ r_loss = torch.mean((1-dr)**2)
+ g_loss = torch.mean(dg**2)
+ loss += (r_loss + g_loss)
+ r_losses.append(r_loss.item())
+ g_losses.append(g_loss.item())
+
+ return loss, r_losses, g_losses
+
+
+def generator_loss(disc_outputs):
+ loss = 0
+ gen_losses = []
+ for dg in disc_outputs:
+ dg = dg.float()
+ l = torch.mean((1-dg)**2)
+ gen_losses.append(l)
+ loss += l
+
+ return loss, gen_losses
+
+
+def kl_loss(z_p, logs_q, m_p, logs_p, z_mask):
+ """
+ z_p, logs_q: [b, h, t_t]
+ m_p, logs_p: [b, h, t_t]
+ """
+ z_p = z_p.float()
+ logs_q = logs_q.float()
+ m_p = m_p.float()
+ logs_p = logs_p.float()
+ z_mask = z_mask.float()
+
+ kl = logs_p - logs_q - 0.5
+ kl += 0.5 * ((z_p - m_p)**2) * torch.exp(-2. * logs_p)
+ kl = torch.sum(kl * z_mask)
+ l = kl / torch.sum(z_mask)
+ return l
diff --git a/demo/MMVC_Trainer/mel_processing.py b/demo/MMVC_Trainer/mel_processing.py
new file mode 100755
index 00000000..cb33b76d
--- /dev/null
+++ b/demo/MMVC_Trainer/mel_processing.py
@@ -0,0 +1,114 @@
+import math
+import os
+import random
+import torch
+from torch import nn
+import torch.nn.functional as F
+import torch.utils.data
+import numpy as np
+import librosa
+import librosa.util as librosa_util
+from librosa.util import normalize, pad_center, tiny
+from scipy.signal import get_window
+from scipy.io.wavfile import read
+from librosa.filters import mel as librosa_mel_fn
+
+MAX_WAV_VALUE = 32768.0
+
+
+def dynamic_range_compression_torch(x, C=1, clip_val=1e-5):
+ """
+ PARAMS
+ ------
+ C: compression factor
+ """
+ return torch.log(torch.clamp(x, min=clip_val) * C)
+
+
+def dynamic_range_decompression_torch(x, C=1):
+ """
+ PARAMS
+ ------
+ C: compression factor used to compress
+ """
+ return torch.exp(x) / C
+
+
+def spectral_normalize_torch(magnitudes):
+ output = dynamic_range_compression_torch(magnitudes)
+ return output
+
+
+def spectral_de_normalize_torch(magnitudes):
+ output = dynamic_range_decompression_torch(magnitudes)
+ return output
+
+
+mel_basis = {}
+hann_window = {}
+
+
+def spectrogram_torch(y, n_fft, sampling_rate, hop_size, win_size, center=False):
+ if torch.min(y) < -1.:
+ print('min value is ', torch.min(y))
+ if torch.max(y) > 1.:
+ print('max value is ', torch.max(y))
+
+ global hann_window
+ dtype_device = str(y.dtype) + '_' + str(y.device)
+ wnsize_dtype_device = str(win_size) + '_' + dtype_device
+ if wnsize_dtype_device not in hann_window:
+ hann_window[wnsize_dtype_device] = torch.hann_window(win_size).to(dtype=y.dtype, device=y.device)
+
+ y = torch.nn.functional.pad(y.unsqueeze(1), (int((n_fft-hop_size)/2), int((n_fft-hop_size)/2)), mode='reflect')
+ y = y.squeeze(1)
+
+ spec = torch.stft(y, n_fft, hop_length=hop_size, win_length=win_size, window=hann_window[wnsize_dtype_device],
+ center=center, pad_mode='reflect', normalized=False, onesided=True, return_complex=True)
+ spec = torch.view_as_real(spec)
+
+ spec = torch.sqrt(spec.pow(2).sum(-1) + 1e-6)
+ return spec
+
+
+def spec_to_mel_torch(spec, n_fft, num_mels, sampling_rate, fmin, fmax):
+ global mel_basis
+ dtype_device = str(spec.dtype) + '_' + str(spec.device)
+ fmax_dtype_device = str(fmax) + '_' + dtype_device
+ if fmax_dtype_device not in mel_basis:
+ mel = librosa_mel_fn(sampling_rate, n_fft, num_mels, fmin, fmax)
+ mel_basis[fmax_dtype_device] = torch.from_numpy(mel).to(dtype=spec.dtype, device=spec.device)
+ spec = torch.matmul(mel_basis[fmax_dtype_device], spec)
+ spec = spectral_normalize_torch(spec)
+ return spec
+
+
+def mel_spectrogram_torch(y, n_fft, num_mels, sampling_rate, hop_size, win_size, fmin, fmax, center=False):
+ if torch.min(y) < -1.:
+ print('min value is ', torch.min(y))
+ if torch.max(y) > 1.:
+ print('max value is ', torch.max(y))
+
+ global mel_basis, hann_window
+ dtype_device = str(y.dtype) + '_' + str(y.device)
+ fmax_dtype_device = str(fmax) + '_' + dtype_device
+ wnsize_dtype_device = str(win_size) + '_' + dtype_device
+ if fmax_dtype_device not in mel_basis:
+ mel = librosa_mel_fn(sampling_rate, n_fft, num_mels, fmin, fmax)
+ mel_basis[fmax_dtype_device] = torch.from_numpy(mel).to(dtype=y.dtype, device=y.device)
+ if wnsize_dtype_device not in hann_window:
+ hann_window[wnsize_dtype_device] = torch.hann_window(win_size).to(dtype=y.dtype, device=y.device)
+
+ y = torch.nn.functional.pad(y.unsqueeze(1), (int((n_fft-hop_size)/2), int((n_fft-hop_size)/2)), mode='reflect')
+ y = y.squeeze(1)
+
+ spec = torch.stft(y, n_fft, hop_length=hop_size, win_length=win_size, window=hann_window[wnsize_dtype_device],
+ center=center, pad_mode='reflect', normalized=False, onesided=True, return_complex=True)
+ spec = torch.view_as_real(spec)
+
+ spec = torch.sqrt(spec.pow(2).sum(-1) + 1e-6)
+
+ spec = torch.matmul(mel_basis[fmax_dtype_device], spec)
+ spec = spectral_normalize_torch(spec)
+
+ return spec
diff --git a/demo/MMVC_Trainer/models.py b/demo/MMVC_Trainer/models.py
new file mode 100755
index 00000000..8837a722
--- /dev/null
+++ b/demo/MMVC_Trainer/models.py
@@ -0,0 +1,526 @@
+import copy
+import math
+import torch
+from torch import nn
+from torch.nn import functional as F
+
+import commons
+import modules
+import attentions
+import monotonic_align
+
+from torch.nn import Conv1d, ConvTranspose1d, AvgPool1d, Conv2d
+from torch.nn.utils import weight_norm, remove_weight_norm, spectral_norm
+from commons import init_weights, get_padding
+
+'''
+class StochasticDurationPredictor(nn.Module):
+ def __init__(self, in_channels, filter_channels, kernel_size, p_dropout, n_flows=4, gin_channels=0):
+ super().__init__()
+ filter_channels = in_channels # it needs to be removed from future version.
+ self.in_channels = in_channels
+ self.filter_channels = filter_channels
+ self.kernel_size = kernel_size
+ self.p_dropout = p_dropout
+ self.n_flows = n_flows
+ self.gin_channels = gin_channels
+
+ self.log_flow = modules.Log()
+ self.flows = nn.ModuleList()
+ self.flows.append(modules.ElementwiseAffine(2))
+ for i in range(n_flows):
+ self.flows.append(modules.ConvFlow(2, filter_channels, kernel_size, n_layers=3))
+ self.flows.append(modules.Flip())
+
+ self.post_pre = nn.Conv1d(1, filter_channels, 1)
+ self.post_proj = nn.Conv1d(filter_channels, filter_channels, 1)
+ self.post_convs = modules.DDSConv(filter_channels, kernel_size, n_layers=3, p_dropout=p_dropout)
+ self.post_flows = nn.ModuleList()
+ self.post_flows.append(modules.ElementwiseAffine(2))
+ for i in range(4):
+ self.post_flows.append(modules.ConvFlow(2, filter_channels, kernel_size, n_layers=3))
+ self.post_flows.append(modules.Flip())
+
+ self.pre = nn.Conv1d(in_channels, filter_channels, 1)
+ self.proj = nn.Conv1d(filter_channels, filter_channels, 1)
+ self.convs = modules.DDSConv(filter_channels, kernel_size, n_layers=3, p_dropout=p_dropout)
+ if gin_channels != 0:
+ self.cond = nn.Conv1d(gin_channels, filter_channels, 1)
+
+ def forward(self, x, x_mask, w=None, g=None, reverse=False, noise_scale=1.0):
+ x = torch.detach(x)
+ x = self.pre(x)
+ if g is not None:
+ g = torch.detach(g)
+ x = x + self.cond(g)
+ x = self.convs(x, x_mask)
+ x = self.proj(x) * x_mask
+
+ if not reverse:
+ flows = self.flows
+ assert w is not None
+
+ logdet_tot_q = 0
+ h_w = self.post_pre(w)
+ h_w = self.post_convs(h_w, x_mask)
+ h_w = self.post_proj(h_w) * x_mask
+ e_q = torch.randn(w.size(0), 2, w.size(2)).to(device=x.device, dtype=x.dtype) * x_mask
+ z_q = e_q
+ for flow in self.post_flows:
+ z_q, logdet_q = flow(z_q, x_mask, g=(x + h_w))
+ logdet_tot_q += logdet_q
+ z_u, z1 = torch.split(z_q, [1, 1], 1)
+ u = torch.sigmoid(z_u) * x_mask
+ z0 = (w - u) * x_mask
+ logdet_tot_q += torch.sum((F.logsigmoid(z_u) + F.logsigmoid(-z_u)) * x_mask, [1,2])
+ logq = torch.sum(-0.5 * (math.log(2*math.pi) + (e_q**2)) * x_mask, [1,2]) - logdet_tot_q
+
+ logdet_tot = 0
+ z0, logdet = self.log_flow(z0, x_mask)
+ logdet_tot += logdet
+ z = torch.cat([z0, z1], 1)
+ for flow in flows:
+ z, logdet = flow(z, x_mask, g=x, reverse=reverse)
+ logdet_tot = logdet_tot + logdet
+ nll = torch.sum(0.5 * (math.log(2*math.pi) + (z**2)) * x_mask, [1,2]) - logdet_tot
+ return nll + logq # [b]
+ else:
+ flows = list(reversed(self.flows))
+ flows = flows[:-2] + [flows[-1]] # remove a useless vflow
+ z = torch.randn(x.size(0), 2, x.size(2)).to(device=x.device, dtype=x.dtype) * noise_scale
+ for flow in flows:
+ z = flow(z, x_mask, g=x, reverse=reverse)
+ z0, z1 = torch.split(z, [1, 1], 1)
+ logw = z0
+ return logw
+
+
+class DurationPredictor(nn.Module):
+ def __init__(self, in_channels, filter_channels, kernel_size, p_dropout, gin_channels=0):
+ super().__init__()
+
+ self.in_channels = in_channels
+ self.filter_channels = filter_channels
+ self.kernel_size = kernel_size
+ self.p_dropout = p_dropout
+ self.gin_channels = gin_channels
+
+ self.drop = nn.Dropout(p_dropout)
+ self.conv_1 = nn.Conv1d(in_channels, filter_channels, kernel_size, padding=kernel_size//2)
+ self.norm_1 = modules.LayerNorm(filter_channels)
+ self.conv_2 = nn.Conv1d(filter_channels, filter_channels, kernel_size, padding=kernel_size//2)
+ self.norm_2 = modules.LayerNorm(filter_channels)
+ self.proj = nn.Conv1d(filter_channels, 1, 1)
+
+ if gin_channels != 0:
+ self.cond = nn.Conv1d(gin_channels, in_channels, 1)
+
+ def forward(self, x, x_mask, g=None):
+ x = torch.detach(x)
+ if g is not None:
+ g = torch.detach(g)
+ x = x + self.cond(g)
+ x = self.conv_1(x * x_mask)
+ x = torch.relu(x)
+ x = self.norm_1(x)
+ x = self.drop(x)
+ x = self.conv_2(x * x_mask)
+ x = torch.relu(x)
+ x = self.norm_2(x)
+ x = self.drop(x)
+ x = self.proj(x * x_mask)
+ return x * x_mask
+
+'''
+
+class TextEncoder(nn.Module):
+ def __init__(self,
+ n_vocab,
+ out_channels,
+ hidden_channels,
+ filter_channels,
+ n_heads,
+ n_layers,
+ kernel_size,
+ p_dropout):
+ super().__init__()
+ self.n_vocab = n_vocab
+ self.out_channels = out_channels
+ self.hidden_channels = hidden_channels
+ self.filter_channels = filter_channels
+ self.n_heads = n_heads
+ self.n_layers = n_layers
+ self.kernel_size = kernel_size
+ self.p_dropout = p_dropout
+
+ self.emb = nn.Embedding(n_vocab, hidden_channels)
+ nn.init.normal_(self.emb.weight, 0.0, hidden_channels**-0.5)
+
+ self.encoder = attentions.Encoder(
+ hidden_channels,
+ filter_channels,
+ n_heads,
+ n_layers,
+ kernel_size,
+ p_dropout)
+ self.proj= nn.Conv1d(hidden_channels, out_channels * 2, 1)
+
+ def forward(self, x, x_lengths):
+ x = self.emb(x) * math.sqrt(self.hidden_channels) # [b, t, h]
+ x = torch.transpose(x, 1, -1) # [b, h, t]
+ x_mask = torch.unsqueeze(commons.sequence_mask(x_lengths, x.size(2)), 1).to(x.dtype)
+
+ x = self.encoder(x * x_mask, x_mask)
+ stats = self.proj(x) * x_mask
+
+ m, logs = torch.split(stats, self.out_channels, dim=1)
+ return x, m, logs, x_mask
+
+
+class ResidualCouplingBlock(nn.Module):
+ def __init__(self,
+ channels,
+ hidden_channels,
+ kernel_size,
+ dilation_rate,
+ n_layers,
+ n_flows=4,
+ gin_channels=0):
+ super().__init__()
+ self.channels = channels
+ self.hidden_channels = hidden_channels
+ self.kernel_size = kernel_size
+ self.dilation_rate = dilation_rate
+ self.n_layers = n_layers
+ self.n_flows = n_flows
+ self.gin_channels = gin_channels
+
+ self.flows = nn.ModuleList()
+ for i in range(n_flows):
+ self.flows.append(modules.ResidualCouplingLayer(channels, hidden_channels, kernel_size, dilation_rate, n_layers, gin_channels=gin_channels, mean_only=True))
+ self.flows.append(modules.Flip())
+
+ def forward(self, x, x_mask, g=None, reverse=False):
+ if not reverse:
+ for flow in self.flows:
+ x, _ = flow(x, x_mask, g=g, reverse=reverse)
+ else:
+ for flow in reversed(self.flows):
+ x = flow(x, x_mask, g=g, reverse=reverse)
+ return x
+
+
+class PosteriorEncoder(nn.Module):
+ def __init__(self,
+ in_channels,
+ out_channels,
+ hidden_channels,
+ kernel_size,
+ dilation_rate,
+ n_layers,
+ gin_channels=0):
+ super().__init__()
+ self.in_channels = in_channels
+ self.out_channels = out_channels
+ self.hidden_channels = hidden_channels
+ self.kernel_size = kernel_size
+ self.dilation_rate = dilation_rate
+ self.n_layers = n_layers
+ self.gin_channels = gin_channels
+
+ self.pre = nn.Conv1d(in_channels, hidden_channels, 1)
+ self.enc = modules.WN(hidden_channels, kernel_size, dilation_rate, n_layers, gin_channels=gin_channels)
+ self.proj = nn.Conv1d(hidden_channels, out_channels * 2, 1)
+
+ def forward(self, x, x_lengths, g=None):
+ x_mask = torch.unsqueeze(commons.sequence_mask(x_lengths, x.size(2)), 1).to(x.dtype)
+ x = self.pre(x) * x_mask
+ x = self.enc(x, x_mask, g=g)
+ stats = self.proj(x) * x_mask
+ m, logs = torch.split(stats, self.out_channels, dim=1)
+ z = (m + torch.randn_like(m) * torch.exp(logs)) * x_mask
+ return z, m, logs, x_mask
+
+
+class Generator(torch.nn.Module):
+ def __init__(self, initial_channel, resblock, resblock_kernel_sizes, resblock_dilation_sizes, upsample_rates, upsample_initial_channel, upsample_kernel_sizes, gin_channels=0):
+ super(Generator, self).__init__()
+ self.num_kernels = len(resblock_kernel_sizes)
+ self.num_upsamples = len(upsample_rates)
+ self.conv_pre = Conv1d(initial_channel, upsample_initial_channel, 7, 1, padding=3)
+ resblock = modules.ResBlock1 if resblock == '1' else modules.ResBlock2
+
+ self.ups = nn.ModuleList()
+ for i, (u, k) in enumerate(zip(upsample_rates, upsample_kernel_sizes)):
+ self.ups.append(weight_norm(
+ ConvTranspose1d(upsample_initial_channel//(2**i), upsample_initial_channel//(2**(i+1)),
+ k, u, padding=(k-u)//2)))
+
+ self.resblocks = nn.ModuleList()
+ for i in range(len(self.ups)):
+ ch = upsample_initial_channel//(2**(i+1))
+ for j, (k, d) in enumerate(zip(resblock_kernel_sizes, resblock_dilation_sizes)):
+ self.resblocks.append(resblock(ch, k, d))
+
+ self.conv_post = Conv1d(ch, 1, 7, 1, padding=3, bias=False)
+ self.ups.apply(init_weights)
+
+ if gin_channels != 0:
+ #self.cond = nn.Conv1d(gin_channels, upsample_initial_channel, 1)
+ gin_channels = 0
+
+ def forward(self, x, g=None):
+ x = self.conv_pre(x)
+ if g is not None:
+ #x = x + self.cond(g)
+ g=None
+
+ for i in range(self.num_upsamples):
+ x = F.leaky_relu(x, modules.LRELU_SLOPE)
+ x = self.ups[i](x)
+ xs = None
+ for j in range(self.num_kernels):
+ if xs is None:
+ xs = self.resblocks[i*self.num_kernels+j](x)
+ else:
+ xs += self.resblocks[i*self.num_kernels+j](x)
+ x = xs / self.num_kernels
+ x = F.leaky_relu(x)
+ x = self.conv_post(x)
+ x = torch.tanh(x)
+
+ return x
+
+ def remove_weight_norm(self):
+ print('Removing weight norm...')
+ for l in self.ups:
+ remove_weight_norm(l)
+ for l in self.resblocks:
+ l.remove_weight_norm()
+
+
+class DiscriminatorP(torch.nn.Module):
+ def __init__(self, period, kernel_size=5, stride=3, use_spectral_norm=False):
+ super(DiscriminatorP, self).__init__()
+ self.period = period
+ self.use_spectral_norm = use_spectral_norm
+ norm_f = weight_norm if use_spectral_norm == False else spectral_norm
+ self.convs = nn.ModuleList([
+ norm_f(Conv2d(1, 32, (kernel_size, 1), (stride, 1), padding=(get_padding(kernel_size, 1), 0))),
+ norm_f(Conv2d(32, 128, (kernel_size, 1), (stride, 1), padding=(get_padding(kernel_size, 1), 0))),
+ norm_f(Conv2d(128, 512, (kernel_size, 1), (stride, 1), padding=(get_padding(kernel_size, 1), 0))),
+ norm_f(Conv2d(512, 1024, (kernel_size, 1), (stride, 1), padding=(get_padding(kernel_size, 1), 0))),
+ norm_f(Conv2d(1024, 1024, (kernel_size, 1), 1, padding=(get_padding(kernel_size, 1), 0))),
+ ])
+ self.conv_post = norm_f(Conv2d(1024, 1, (3, 1), 1, padding=(1, 0)))
+
+ def forward(self, x):
+ fmap = []
+
+ # 1d to 2d
+ b, c, t = x.shape
+ if t % self.period != 0: # pad first
+ n_pad = self.period - (t % self.period)
+ x = F.pad(x, (0, n_pad), "reflect")
+ t = t + n_pad
+ x = x.view(b, c, t // self.period, self.period)
+
+ for l in self.convs:
+ x = l(x)
+ x = F.leaky_relu(x, modules.LRELU_SLOPE)
+ fmap.append(x)
+ x = self.conv_post(x)
+ fmap.append(x)
+ x = torch.flatten(x, 1, -1)
+
+ return x, fmap
+
+
+class DiscriminatorS(torch.nn.Module):
+ def __init__(self, use_spectral_norm=False):
+ super(DiscriminatorS, self).__init__()
+ norm_f = weight_norm if use_spectral_norm == False else spectral_norm
+ self.convs = nn.ModuleList([
+ norm_f(Conv1d(1, 16, 15, 1, padding=7)),
+ norm_f(Conv1d(16, 64, 41, 4, groups=4, padding=20)),
+ norm_f(Conv1d(64, 256, 41, 4, groups=16, padding=20)),
+ norm_f(Conv1d(256, 1024, 41, 4, groups=64, padding=20)),
+ norm_f(Conv1d(1024, 1024, 41, 4, groups=256, padding=20)),
+ norm_f(Conv1d(1024, 1024, 5, 1, padding=2)),
+ ])
+ self.conv_post = norm_f(Conv1d(1024, 1, 3, 1, padding=1))
+
+ def forward(self, x):
+ fmap = []
+
+ for l in self.convs:
+ x = l(x)
+ x = F.leaky_relu(x, modules.LRELU_SLOPE)
+ fmap.append(x)
+ x = self.conv_post(x)
+ fmap.append(x)
+ x = torch.flatten(x, 1, -1)
+
+ return x, fmap
+
+
+class MultiPeriodDiscriminator(torch.nn.Module):
+ def __init__(self, use_spectral_norm=False):
+ super(MultiPeriodDiscriminator, self).__init__()
+ periods = [2,3,5,7,11]
+
+ discs = [DiscriminatorS(use_spectral_norm=use_spectral_norm)]
+ discs = discs + [DiscriminatorP(i, use_spectral_norm=use_spectral_norm) for i in periods]
+ self.discriminators = nn.ModuleList(discs)
+
+ def forward(self, y, y_hat):
+ y_d_rs = []
+ y_d_gs = []
+ fmap_rs = []
+ fmap_gs = []
+ for i, d in enumerate(self.discriminators):
+ y_d_r, fmap_r = d(y)
+ y_d_g, fmap_g = d(y_hat)
+ y_d_rs.append(y_d_r)
+ y_d_gs.append(y_d_g)
+ fmap_rs.append(fmap_r)
+ fmap_gs.append(fmap_g)
+
+ return y_d_rs, y_d_gs, fmap_rs, fmap_gs
+
+
+
+class SynthesizerTrn(nn.Module):
+ """
+ Synthesizer for Training
+ """
+
+ def __init__(self,
+ n_vocab,
+ spec_channels,
+ segment_size,
+ inter_channels,
+ hidden_channels,
+ filter_channels,
+ n_heads,
+ n_layers,
+ kernel_size,
+ p_dropout,
+ resblock,
+ resblock_kernel_sizes,
+ resblock_dilation_sizes,
+ upsample_rates,
+ upsample_initial_channel,
+ upsample_kernel_sizes,
+ n_flow,
+ n_speakers=0,
+ gin_channels=0,
+ use_sdp=True,
+ **kwargs):
+
+ super().__init__()
+ self.n_vocab = n_vocab
+ self.spec_channels = spec_channels
+ self.hidden_channels = hidden_channels
+ self.filter_channels = filter_channels
+ self.n_heads = n_heads
+ self.n_layers = n_layers
+ self.kernel_size = kernel_size
+ self.p_dropout = p_dropout
+ self.resblock = resblock
+ self.resblock_kernel_sizes = resblock_kernel_sizes
+ self.resblock_dilation_sizes = resblock_dilation_sizes
+ self.upsample_rates = upsample_rates
+ self.upsample_initial_channel = upsample_initial_channel
+ self.upsample_kernel_sizes = upsample_kernel_sizes
+ self.segment_size = segment_size
+ self.n_speakers = n_speakers
+ self.gin_channels = gin_channels
+
+ self.use_sdp = use_sdp
+
+ self.enc_p = TextEncoder(n_vocab,
+ inter_channels,
+ hidden_channels,
+ filter_channels,
+ n_heads,
+ n_layers,
+ kernel_size,
+ p_dropout)
+ self.dec = Generator(inter_channels, resblock, resblock_kernel_sizes, resblock_dilation_sizes, upsample_rates, upsample_initial_channel, upsample_kernel_sizes, gin_channels=gin_channels)
+ self.enc_q = PosteriorEncoder(spec_channels, inter_channels, hidden_channels, 5, 1, 16, gin_channels=gin_channels)
+ self.flow = ResidualCouplingBlock(inter_channels, hidden_channels, 5, 1, 4, n_flows=n_flow, gin_channels=gin_channels)
+
+ if n_speakers > 1:
+ self.emb_g = nn.Embedding(n_speakers, gin_channels)
+
+ def forward(self, x, x_lengths, y, y_lengths, sid=None):
+
+ x, m_p, logs_p, x_mask = self.enc_p(x, x_lengths)
+ if self.n_speakers > 0:
+ g = self.emb_g(sid).unsqueeze(-1) # [b, h, 1]
+ else:
+ g = None
+
+ z, m_q, logs_q, y_mask = self.enc_q(y, y_lengths, g=g)
+ z_p = self.flow(z, y_mask, g=g)
+
+ with torch.no_grad():
+ # negative cross-entropy
+ s_p_sq_r = torch.exp(-2 * logs_p) # [b, d, t]
+ neg_cent1 = torch.sum(-0.5 * math.log(2 * math.pi) - logs_p, [1], keepdim=True) # [b, 1, t_s]
+ neg_cent2 = torch.matmul(-0.5 * (z_p ** 2).transpose(1, 2), s_p_sq_r) # [b, t_t, d] x [b, d, t_s] = [b, t_t, t_s]
+ neg_cent3 = torch.matmul(z_p.transpose(1, 2), (m_p * s_p_sq_r)) # [b, t_t, d] x [b, d, t_s] = [b, t_t, t_s]
+ neg_cent4 = torch.sum(-0.5 * (m_p ** 2) * s_p_sq_r, [1], keepdim=True) # [b, 1, t_s]
+ neg_cent = neg_cent1 + neg_cent2 + neg_cent3 + neg_cent4
+
+ attn_mask = torch.unsqueeze(x_mask, 2) * torch.unsqueeze(y_mask, -1)
+ attn = monotonic_align.maximum_path(neg_cent, attn_mask.squeeze(1)).unsqueeze(1).detach()
+
+ # expand prior
+ m_p = torch.matmul(attn.squeeze(1), m_p.transpose(1, 2)).transpose(1, 2)
+ logs_p = torch.matmul(attn.squeeze(1), logs_p.transpose(1, 2)).transpose(1, 2)
+
+ z_slice, ids_slice = commons.rand_slice_segments(z, y_lengths, self.segment_size)
+ o = self.dec(z_slice, g=g)
+ return o, attn, ids_slice, x_mask, y_mask, (z, z_p, m_p, logs_p, m_q, logs_q)
+
+ def voice_conversion(self, y, y_lengths, sid_src, sid_tgt):
+ assert self.n_speakers > 0, "n_speakers have to be larger than 0."
+ g_src = self.emb_g(sid_src).unsqueeze(-1)
+ g_tgt = self.emb_g(sid_tgt).unsqueeze(-1)
+ z, m_q, logs_q, y_mask = self.enc_q(y, y_lengths, g=g_src)
+ z_p = self.flow(z, y_mask, g=g_src)
+ z_hat = self.flow(z_p, y_mask, g=g_tgt, reverse=True)
+ o_hat = self.dec(z_hat * y_mask, g=g_tgt)
+ return o_hat, y_mask, (z, z_p, z_hat)
+
+ def voice_ra_pa_db(self, y, y_lengths, sid_src, sid_tgt):
+ assert self.n_speakers > 0, "n_speakers have to be larger than 0."
+ g_src = self.emb_g(sid_src).unsqueeze(-1)
+ g_tgt = self.emb_g(sid_tgt).unsqueeze(-1)
+ z, m_q, logs_q, y_mask = self.enc_q(y, y_lengths, g=g_src)
+ o_hat = self.dec(z * y_mask, g=g_tgt)
+ return o_hat, y_mask, (z)
+
+ def voice_ra_pa_da(self, y, y_lengths, sid_src, sid_tgt):
+ assert self.n_speakers > 0, "n_speakers have to be larger than 0."
+ g_src = self.emb_g(sid_src).unsqueeze(-1)
+ g_tgt = self.emb_g(sid_tgt).unsqueeze(-1)
+ z, m_q, logs_q, y_mask = self.enc_q(y, y_lengths, g=g_src)
+ o_hat = self.dec(z * y_mask, g=g_src)
+ return o_hat, y_mask, (z)
+
+ def voice_conversion_cycle(self, y, y_lengths, sid_src, sid_tgt):
+ assert self.n_speakers > 0, "n_speakers have to be larger than 0."
+ g_src = self.emb_g(sid_src).unsqueeze(-1)
+ g_tgt = self.emb_g(sid_tgt).unsqueeze(-1)
+ z, m_q, logs_q, y_mask = self.enc_q(y, y_lengths, g=g_src)
+ z_p = self.flow(z, y_mask, g=g_src)
+ z_hat = self.flow(z_p, y_mask, g=g_tgt, reverse=True)
+ z_p_hat = self.flow(z_hat, y_mask, g=g_tgt)
+ z_hat_hat = self.flow(z_p_hat, y_mask, g=g_src, reverse=True)
+ o_hat = self.dec(z_hat_hat * y_mask, g=g_tgt)
+ return o_hat, y_mask, (z, z_p, z_hat)
+
+
diff --git a/demo/MMVC_Trainer/modules.py b/demo/MMVC_Trainer/modules.py
new file mode 100755
index 00000000..9c7fd9cd
--- /dev/null
+++ b/demo/MMVC_Trainer/modules.py
@@ -0,0 +1,390 @@
+import copy
+import math
+import numpy as np
+import scipy
+import torch
+from torch import nn
+from torch.nn import functional as F
+
+from torch.nn import Conv1d, ConvTranspose1d, AvgPool1d, Conv2d
+from torch.nn.utils import weight_norm, remove_weight_norm
+
+import commons
+from commons import init_weights, get_padding
+from transforms import piecewise_rational_quadratic_transform
+
+
+LRELU_SLOPE = 0.1
+
+
+class LayerNorm(nn.Module):
+ def __init__(self, channels, eps=1e-5):
+ super().__init__()
+ self.channels = channels
+ self.eps = eps
+
+ self.gamma = nn.Parameter(torch.ones(channels))
+ self.beta = nn.Parameter(torch.zeros(channels))
+
+ def forward(self, x):
+ x = x.transpose(1, -1)
+ x = F.layer_norm(x, (self.channels,), self.gamma, self.beta, self.eps)
+ return x.transpose(1, -1)
+
+
+class ConvReluNorm(nn.Module):
+ def __init__(self, in_channels, hidden_channels, out_channels, kernel_size, n_layers, p_dropout):
+ super().__init__()
+ self.in_channels = in_channels
+ self.hidden_channels = hidden_channels
+ self.out_channels = out_channels
+ self.kernel_size = kernel_size
+ self.n_layers = n_layers
+ self.p_dropout = p_dropout
+ assert n_layers > 1, "Number of layers should be larger than 0."
+
+ self.conv_layers = nn.ModuleList()
+ self.norm_layers = nn.ModuleList()
+ self.conv_layers.append(nn.Conv1d(in_channels, hidden_channels, kernel_size, padding=kernel_size//2))
+ self.norm_layers.append(LayerNorm(hidden_channels))
+ self.relu_drop = nn.Sequential(
+ nn.ReLU(),
+ nn.Dropout(p_dropout))
+ for _ in range(n_layers-1):
+ self.conv_layers.append(nn.Conv1d(hidden_channels, hidden_channels, kernel_size, padding=kernel_size//2))
+ self.norm_layers.append(LayerNorm(hidden_channels))
+ self.proj = nn.Conv1d(hidden_channels, out_channels, 1)
+ self.proj.weight.data.zero_()
+ self.proj.bias.data.zero_()
+
+ def forward(self, x, x_mask):
+ x_org = x
+ for i in range(self.n_layers):
+ x = self.conv_layers[i](x * x_mask)
+ x = self.norm_layers[i](x)
+ x = self.relu_drop(x)
+ x = x_org + self.proj(x)
+ return x * x_mask
+
+
+class DDSConv(nn.Module):
+ """
+ Dialted and Depth-Separable Convolution
+ """
+ def __init__(self, channels, kernel_size, n_layers, p_dropout=0.):
+ super().__init__()
+ self.channels = channels
+ self.kernel_size = kernel_size
+ self.n_layers = n_layers
+ self.p_dropout = p_dropout
+
+ self.drop = nn.Dropout(p_dropout)
+ self.convs_sep = nn.ModuleList()
+ self.convs_1x1 = nn.ModuleList()
+ self.norms_1 = nn.ModuleList()
+ self.norms_2 = nn.ModuleList()
+ for i in range(n_layers):
+ dilation = kernel_size ** i
+ padding = (kernel_size * dilation - dilation) // 2
+ self.convs_sep.append(nn.Conv1d(channels, channels, kernel_size,
+ groups=channels, dilation=dilation, padding=padding
+ ))
+ self.convs_1x1.append(nn.Conv1d(channels, channels, 1))
+ self.norms_1.append(LayerNorm(channels))
+ self.norms_2.append(LayerNorm(channels))
+
+ def forward(self, x, x_mask, g=None):
+ if g is not None:
+ x = x + g
+ for i in range(self.n_layers):
+ y = self.convs_sep[i](x * x_mask)
+ y = self.norms_1[i](y)
+ y = F.gelu(y)
+ y = self.convs_1x1[i](y)
+ y = self.norms_2[i](y)
+ y = F.gelu(y)
+ y = self.drop(y)
+ x = x + y
+ return x * x_mask
+
+
+class WN(torch.nn.Module):
+ def __init__(self, hidden_channels, kernel_size, dilation_rate, n_layers, gin_channels=0, p_dropout=0):
+ super(WN, self).__init__()
+ assert(kernel_size % 2 == 1)
+ self.hidden_channels =hidden_channels
+ self.kernel_size = kernel_size,
+ self.dilation_rate = dilation_rate
+ self.n_layers = n_layers
+ self.gin_channels = gin_channels
+ self.p_dropout = p_dropout
+
+ self.in_layers = torch.nn.ModuleList()
+ self.res_skip_layers = torch.nn.ModuleList()
+ self.drop = nn.Dropout(p_dropout)
+
+ if gin_channels != 0:
+ cond_layer = torch.nn.Conv1d(gin_channels, 2*hidden_channels*n_layers, 1)
+ self.cond_layer = torch.nn.utils.weight_norm(cond_layer, name='weight')
+
+ for i in range(n_layers):
+ dilation = dilation_rate ** i
+ padding = int((kernel_size * dilation - dilation) / 2)
+ in_layer = torch.nn.Conv1d(hidden_channels, 2*hidden_channels, kernel_size,
+ dilation=dilation, padding=padding)
+ in_layer = torch.nn.utils.weight_norm(in_layer, name='weight')
+ self.in_layers.append(in_layer)
+
+ # last one is not necessary
+ if i < n_layers - 1:
+ res_skip_channels = 2 * hidden_channels
+ else:
+ res_skip_channels = hidden_channels
+
+ res_skip_layer = torch.nn.Conv1d(hidden_channels, res_skip_channels, 1)
+ res_skip_layer = torch.nn.utils.weight_norm(res_skip_layer, name='weight')
+ self.res_skip_layers.append(res_skip_layer)
+
+ def forward(self, x, x_mask, g=None, **kwargs):
+ output = torch.zeros_like(x)
+ n_channels_tensor = torch.IntTensor([self.hidden_channels])
+
+ if g is not None:
+ g = self.cond_layer(g)
+
+ for i in range(self.n_layers):
+ x_in = self.in_layers[i](x)
+ if g is not None:
+ cond_offset = i * 2 * self.hidden_channels
+ g_l = g[:,cond_offset:cond_offset+2*self.hidden_channels,:]
+ else:
+ g_l = torch.zeros_like(x_in)
+
+ acts = commons.fused_add_tanh_sigmoid_multiply(
+ x_in,
+ g_l,
+ n_channels_tensor)
+ acts = self.drop(acts)
+
+ res_skip_acts = self.res_skip_layers[i](acts)
+ if i < self.n_layers - 1:
+ res_acts = res_skip_acts[:,:self.hidden_channels,:]
+ x = (x + res_acts) * x_mask
+ output = output + res_skip_acts[:,self.hidden_channels:,:]
+ else:
+ output = output + res_skip_acts
+ return output * x_mask
+
+ def remove_weight_norm(self):
+ if self.gin_channels != 0:
+ torch.nn.utils.remove_weight_norm(self.cond_layer)
+ for l in self.in_layers:
+ torch.nn.utils.remove_weight_norm(l)
+ for l in self.res_skip_layers:
+ torch.nn.utils.remove_weight_norm(l)
+
+
+class ResBlock1(torch.nn.Module):
+ def __init__(self, channels, kernel_size=3, dilation=(1, 3, 5)):
+ super(ResBlock1, self).__init__()
+ self.convs1 = nn.ModuleList([
+ weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=dilation[0],
+ padding=get_padding(kernel_size, dilation[0]))),
+ weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=dilation[1],
+ padding=get_padding(kernel_size, dilation[1]))),
+ weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=dilation[2],
+ padding=get_padding(kernel_size, dilation[2])))
+ ])
+ self.convs1.apply(init_weights)
+
+ self.convs2 = nn.ModuleList([
+ weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=1,
+ padding=get_padding(kernel_size, 1))),
+ weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=1,
+ padding=get_padding(kernel_size, 1))),
+ weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=1,
+ padding=get_padding(kernel_size, 1)))
+ ])
+ self.convs2.apply(init_weights)
+
+ def forward(self, x, x_mask=None):
+ for c1, c2 in zip(self.convs1, self.convs2):
+ xt = F.leaky_relu(x, LRELU_SLOPE)
+ if x_mask is not None:
+ xt = xt * x_mask
+ xt = c1(xt)
+ xt = F.leaky_relu(xt, LRELU_SLOPE)
+ if x_mask is not None:
+ xt = xt * x_mask
+ xt = c2(xt)
+ x = xt + x
+ if x_mask is not None:
+ x = x * x_mask
+ return x
+
+ def remove_weight_norm(self):
+ for l in self.convs1:
+ remove_weight_norm(l)
+ for l in self.convs2:
+ remove_weight_norm(l)
+
+
+class ResBlock2(torch.nn.Module):
+ def __init__(self, channels, kernel_size=3, dilation=(1, 3)):
+ super(ResBlock2, self).__init__()
+ self.convs = nn.ModuleList([
+ weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=dilation[0],
+ padding=get_padding(kernel_size, dilation[0]))),
+ weight_norm(Conv1d(channels, channels, kernel_size, 1, dilation=dilation[1],
+ padding=get_padding(kernel_size, dilation[1])))
+ ])
+ self.convs.apply(init_weights)
+
+ def forward(self, x, x_mask=None):
+ for c in self.convs:
+ xt = F.leaky_relu(x, LRELU_SLOPE)
+ if x_mask is not None:
+ xt = xt * x_mask
+ xt = c(xt)
+ x = xt + x
+ if x_mask is not None:
+ x = x * x_mask
+ return x
+
+ def remove_weight_norm(self):
+ for l in self.convs:
+ remove_weight_norm(l)
+
+
+class Log(nn.Module):
+ def forward(self, x, x_mask, reverse=False, **kwargs):
+ if not reverse:
+ y = torch.log(torch.clamp_min(x, 1e-5)) * x_mask
+ logdet = torch.sum(-y, [1, 2])
+ return y, logdet
+ else:
+ x = torch.exp(x) * x_mask
+ return x
+
+
+class Flip(nn.Module):
+ def forward(self, x, *args, reverse=False, **kwargs):
+ x = torch.flip(x, [1])
+ if not reverse:
+ logdet = torch.zeros(x.size(0)).to(dtype=x.dtype, device=x.device)
+ return x, logdet
+ else:
+ return x
+
+
+class ElementwiseAffine(nn.Module):
+ def __init__(self, channels):
+ super().__init__()
+ self.channels = channels
+ self.m = nn.Parameter(torch.zeros(channels,1))
+ self.logs = nn.Parameter(torch.zeros(channels,1))
+
+ def forward(self, x, x_mask, reverse=False, **kwargs):
+ if not reverse:
+ y = self.m + torch.exp(self.logs) * x
+ y = y * x_mask
+ logdet = torch.sum(self.logs * x_mask, [1,2])
+ return y, logdet
+ else:
+ x = (x - self.m) * torch.exp(-self.logs) * x_mask
+ return x
+
+
+class ResidualCouplingLayer(nn.Module):
+ def __init__(self,
+ channels,
+ hidden_channels,
+ kernel_size,
+ dilation_rate,
+ n_layers,
+ p_dropout=0,
+ gin_channels=0,
+ mean_only=False):
+ assert channels % 2 == 0, "channels should be divisible by 2"
+ super().__init__()
+ self.channels = channels
+ self.hidden_channels = hidden_channels
+ self.kernel_size = kernel_size
+ self.dilation_rate = dilation_rate
+ self.n_layers = n_layers
+ self.half_channels = channels // 2
+ self.mean_only = mean_only
+
+ self.pre = nn.Conv1d(self.half_channels, hidden_channels, 1)
+ self.enc = WN(hidden_channels, kernel_size, dilation_rate, n_layers, p_dropout=p_dropout, gin_channels=gin_channels)
+ self.post = nn.Conv1d(hidden_channels, self.half_channels * (2 - mean_only), 1)
+ self.post.weight.data.zero_()
+ self.post.bias.data.zero_()
+
+ def forward(self, x, x_mask, g=None, reverse=False):
+ x0, x1 = torch.split(x, [self.half_channels]*2, 1)
+ h = self.pre(x0) * x_mask
+ h = self.enc(h, x_mask, g=g)
+ stats = self.post(h) * x_mask
+ if not self.mean_only:
+ m, logs = torch.split(stats, [self.half_channels]*2, 1)
+ else:
+ m = stats
+ logs = torch.zeros_like(m)
+
+ if not reverse:
+ x1 = m + x1 * torch.exp(logs) * x_mask
+ x = torch.cat([x0, x1], 1)
+ logdet = torch.sum(logs, [1,2])
+ return x, logdet
+ else:
+ x1 = (x1 - m) * torch.exp(-logs) * x_mask
+ x = torch.cat([x0, x1], 1)
+ return x
+
+
+class ConvFlow(nn.Module):
+ def __init__(self, in_channels, filter_channels, kernel_size, n_layers, num_bins=10, tail_bound=5.0):
+ super().__init__()
+ self.in_channels = in_channels
+ self.filter_channels = filter_channels
+ self.kernel_size = kernel_size
+ self.n_layers = n_layers
+ self.num_bins = num_bins
+ self.tail_bound = tail_bound
+ self.half_channels = in_channels // 2
+
+ self.pre = nn.Conv1d(self.half_channels, filter_channels, 1)
+ self.convs = DDSConv(filter_channels, kernel_size, n_layers, p_dropout=0.)
+ self.proj = nn.Conv1d(filter_channels, self.half_channels * (num_bins * 3 - 1), 1)
+ self.proj.weight.data.zero_()
+ self.proj.bias.data.zero_()
+
+ def forward(self, x, x_mask, g=None, reverse=False):
+ x0, x1 = torch.split(x, [self.half_channels]*2, 1)
+ h = self.pre(x0)
+ h = self.convs(h, x_mask, g=g)
+ h = self.proj(h) * x_mask
+
+ b, c, t = x0.shape
+ h = h.reshape(b, c, -1, t).permute(0, 1, 3, 2) # [b, cx?, t] -> [b, c, t, ?]
+
+ unnormalized_widths = h[..., :self.num_bins] / math.sqrt(self.filter_channels)
+ unnormalized_heights = h[..., self.num_bins:2*self.num_bins] / math.sqrt(self.filter_channels)
+ unnormalized_derivatives = h[..., 2 * self.num_bins:]
+
+ x1, logabsdet = piecewise_rational_quadratic_transform(x1,
+ unnormalized_widths,
+ unnormalized_heights,
+ unnormalized_derivatives,
+ inverse=reverse,
+ tails='linear',
+ tail_bound=self.tail_bound
+ )
+
+ x = torch.cat([x0, x1], 1) * x_mask
+ logdet = torch.sum(logabsdet * x_mask, [1,2])
+ if not reverse:
+ return x, logdet
+ else:
+ return x
diff --git a/demo/MMVC_Trainer/monotonic_align/__init__.py b/demo/MMVC_Trainer/monotonic_align/__init__.py
new file mode 100755
index 00000000..3d7009c4
--- /dev/null
+++ b/demo/MMVC_Trainer/monotonic_align/__init__.py
@@ -0,0 +1,19 @@
+import numpy as np
+import torch
+from .monotonic_align.core import maximum_path_c
+
+
+def maximum_path(neg_cent, mask):
+ """ Cython optimized version.
+ neg_cent: [b, t_t, t_s]
+ mask: [b, t_t, t_s]
+ """
+ device = neg_cent.device
+ dtype = neg_cent.dtype
+ neg_cent = neg_cent.data.cpu().numpy().astype(np.float32)
+ path = np.zeros(neg_cent.shape, dtype=np.int32)
+
+ t_t_max = mask.sum(1)[:, 0].data.cpu().numpy().astype(np.int32)
+ t_s_max = mask.sum(2)[:, 0].data.cpu().numpy().astype(np.int32)
+ maximum_path_c(path, neg_cent, t_t_max, t_s_max)
+ return torch.from_numpy(path).to(device=device, dtype=dtype)
diff --git a/demo/MMVC_Trainer/monotonic_align/core.c b/demo/MMVC_Trainer/monotonic_align/core.c
new file mode 100755
index 00000000..49cda983
--- /dev/null
+++ b/demo/MMVC_Trainer/monotonic_align/core.c
@@ -0,0 +1,21608 @@
+/* Generated by Cython 0.29.32 */
+
+/* BEGIN: Cython Metadata
+{
+ "distutils": {
+ "name": "monotonic_align.core",
+ "sources": [
+ "/MMVC_Trainer/monotonic_align/core.pyx"
+ ]
+ },
+ "module_name": "monotonic_align.core"
+}
+END: Cython Metadata */
+
+#ifndef PY_SSIZE_T_CLEAN
+#define PY_SSIZE_T_CLEAN
+#endif /* PY_SSIZE_T_CLEAN */
+#include "Python.h"
+#ifndef Py_PYTHON_H
+ #error Python headers needed to compile C extensions, please install development version of Python.
+#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000)
+ #error Cython requires Python 2.6+ or Python 3.3+.
+#else
+#define CYTHON_ABI "0_29_32"
+#define CYTHON_HEX_VERSION 0x001D20F0
+#define CYTHON_FUTURE_DIVISION 1
+#include
+#ifndef offsetof
+ #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
+#endif
+#if !defined(WIN32) && !defined(MS_WINDOWS)
+ #ifndef __stdcall
+ #define __stdcall
+ #endif
+ #ifndef __cdecl
+ #define __cdecl
+ #endif
+ #ifndef __fastcall
+ #define __fastcall
+ #endif
+#endif
+#ifndef DL_IMPORT
+ #define DL_IMPORT(t) t
+#endif
+#ifndef DL_EXPORT
+ #define DL_EXPORT(t) t
+#endif
+#define __PYX_COMMA ,
+#ifndef HAVE_LONG_LONG
+ #if PY_VERSION_HEX >= 0x02070000
+ #define HAVE_LONG_LONG
+ #endif
+#endif
+#ifndef PY_LONG_LONG
+ #define PY_LONG_LONG LONG_LONG
+#endif
+#ifndef Py_HUGE_VAL
+ #define Py_HUGE_VAL HUGE_VAL
+#endif
+#ifdef PYPY_VERSION
+ #define CYTHON_COMPILING_IN_PYPY 1
+ #define CYTHON_COMPILING_IN_PYSTON 0
+ #define CYTHON_COMPILING_IN_CPYTHON 0
+ #define CYTHON_COMPILING_IN_NOGIL 0
+ #undef CYTHON_USE_TYPE_SLOTS
+ #define CYTHON_USE_TYPE_SLOTS 0
+ #undef CYTHON_USE_PYTYPE_LOOKUP
+ #define CYTHON_USE_PYTYPE_LOOKUP 0
+ #if PY_VERSION_HEX < 0x03050000
+ #undef CYTHON_USE_ASYNC_SLOTS
+ #define CYTHON_USE_ASYNC_SLOTS 0
+ #elif !defined(CYTHON_USE_ASYNC_SLOTS)
+ #define CYTHON_USE_ASYNC_SLOTS 1
+ #endif
+ #undef CYTHON_USE_PYLIST_INTERNALS
+ #define CYTHON_USE_PYLIST_INTERNALS 0
+ #undef CYTHON_USE_UNICODE_INTERNALS
+ #define CYTHON_USE_UNICODE_INTERNALS 0
+ #undef CYTHON_USE_UNICODE_WRITER
+ #define CYTHON_USE_UNICODE_WRITER 0
+ #undef CYTHON_USE_PYLONG_INTERNALS
+ #define CYTHON_USE_PYLONG_INTERNALS 0
+ #undef CYTHON_AVOID_BORROWED_REFS
+ #define CYTHON_AVOID_BORROWED_REFS 1
+ #undef CYTHON_ASSUME_SAFE_MACROS
+ #define CYTHON_ASSUME_SAFE_MACROS 0
+ #undef CYTHON_UNPACK_METHODS
+ #define CYTHON_UNPACK_METHODS 0
+ #undef CYTHON_FAST_THREAD_STATE
+ #define CYTHON_FAST_THREAD_STATE 0
+ #undef CYTHON_FAST_PYCALL
+ #define CYTHON_FAST_PYCALL 0
+ #undef CYTHON_PEP489_MULTI_PHASE_INIT
+ #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+ #undef CYTHON_USE_TP_FINALIZE
+ #define CYTHON_USE_TP_FINALIZE 0
+ #undef CYTHON_USE_DICT_VERSIONS
+ #define CYTHON_USE_DICT_VERSIONS 0
+ #undef CYTHON_USE_EXC_INFO_STACK
+ #define CYTHON_USE_EXC_INFO_STACK 0
+ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
+ #define CYTHON_UPDATE_DESCRIPTOR_DOC (PYPY_VERSION_HEX >= 0x07030900)
+ #endif
+#elif defined(PYSTON_VERSION)
+ #define CYTHON_COMPILING_IN_PYPY 0
+ #define CYTHON_COMPILING_IN_PYSTON 1
+ #define CYTHON_COMPILING_IN_CPYTHON 0
+ #define CYTHON_COMPILING_IN_NOGIL 0
+ #ifndef CYTHON_USE_TYPE_SLOTS
+ #define CYTHON_USE_TYPE_SLOTS 1
+ #endif
+ #undef CYTHON_USE_PYTYPE_LOOKUP
+ #define CYTHON_USE_PYTYPE_LOOKUP 0
+ #undef CYTHON_USE_ASYNC_SLOTS
+ #define CYTHON_USE_ASYNC_SLOTS 0
+ #undef CYTHON_USE_PYLIST_INTERNALS
+ #define CYTHON_USE_PYLIST_INTERNALS 0
+ #ifndef CYTHON_USE_UNICODE_INTERNALS
+ #define CYTHON_USE_UNICODE_INTERNALS 1
+ #endif
+ #undef CYTHON_USE_UNICODE_WRITER
+ #define CYTHON_USE_UNICODE_WRITER 0
+ #undef CYTHON_USE_PYLONG_INTERNALS
+ #define CYTHON_USE_PYLONG_INTERNALS 0
+ #ifndef CYTHON_AVOID_BORROWED_REFS
+ #define CYTHON_AVOID_BORROWED_REFS 0
+ #endif
+ #ifndef CYTHON_ASSUME_SAFE_MACROS
+ #define CYTHON_ASSUME_SAFE_MACROS 1
+ #endif
+ #ifndef CYTHON_UNPACK_METHODS
+ #define CYTHON_UNPACK_METHODS 1
+ #endif
+ #undef CYTHON_FAST_THREAD_STATE
+ #define CYTHON_FAST_THREAD_STATE 0
+ #undef CYTHON_FAST_PYCALL
+ #define CYTHON_FAST_PYCALL 0
+ #undef CYTHON_PEP489_MULTI_PHASE_INIT
+ #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+ #undef CYTHON_USE_TP_FINALIZE
+ #define CYTHON_USE_TP_FINALIZE 0
+ #undef CYTHON_USE_DICT_VERSIONS
+ #define CYTHON_USE_DICT_VERSIONS 0
+ #undef CYTHON_USE_EXC_INFO_STACK
+ #define CYTHON_USE_EXC_INFO_STACK 0
+ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
+ #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
+ #endif
+#elif defined(PY_NOGIL)
+ #define CYTHON_COMPILING_IN_PYPY 0
+ #define CYTHON_COMPILING_IN_PYSTON 0
+ #define CYTHON_COMPILING_IN_CPYTHON 0
+ #define CYTHON_COMPILING_IN_NOGIL 1
+ #ifndef CYTHON_USE_TYPE_SLOTS
+ #define CYTHON_USE_TYPE_SLOTS 1
+ #endif
+ #undef CYTHON_USE_PYTYPE_LOOKUP
+ #define CYTHON_USE_PYTYPE_LOOKUP 0
+ #ifndef CYTHON_USE_ASYNC_SLOTS
+ #define CYTHON_USE_ASYNC_SLOTS 1
+ #endif
+ #undef CYTHON_USE_PYLIST_INTERNALS
+ #define CYTHON_USE_PYLIST_INTERNALS 0
+ #ifndef CYTHON_USE_UNICODE_INTERNALS
+ #define CYTHON_USE_UNICODE_INTERNALS 1
+ #endif
+ #undef CYTHON_USE_UNICODE_WRITER
+ #define CYTHON_USE_UNICODE_WRITER 0
+ #undef CYTHON_USE_PYLONG_INTERNALS
+ #define CYTHON_USE_PYLONG_INTERNALS 0
+ #ifndef CYTHON_AVOID_BORROWED_REFS
+ #define CYTHON_AVOID_BORROWED_REFS 0
+ #endif
+ #ifndef CYTHON_ASSUME_SAFE_MACROS
+ #define CYTHON_ASSUME_SAFE_MACROS 1
+ #endif
+ #ifndef CYTHON_UNPACK_METHODS
+ #define CYTHON_UNPACK_METHODS 1
+ #endif
+ #undef CYTHON_FAST_THREAD_STATE
+ #define CYTHON_FAST_THREAD_STATE 0
+ #undef CYTHON_FAST_PYCALL
+ #define CYTHON_FAST_PYCALL 0
+ #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
+ #define CYTHON_PEP489_MULTI_PHASE_INIT 1
+ #endif
+ #ifndef CYTHON_USE_TP_FINALIZE
+ #define CYTHON_USE_TP_FINALIZE 1
+ #endif
+ #undef CYTHON_USE_DICT_VERSIONS
+ #define CYTHON_USE_DICT_VERSIONS 0
+ #undef CYTHON_USE_EXC_INFO_STACK
+ #define CYTHON_USE_EXC_INFO_STACK 0
+#else
+ #define CYTHON_COMPILING_IN_PYPY 0
+ #define CYTHON_COMPILING_IN_PYSTON 0
+ #define CYTHON_COMPILING_IN_CPYTHON 1
+ #define CYTHON_COMPILING_IN_NOGIL 0
+ #ifndef CYTHON_USE_TYPE_SLOTS
+ #define CYTHON_USE_TYPE_SLOTS 1
+ #endif
+ #if PY_VERSION_HEX < 0x02070000
+ #undef CYTHON_USE_PYTYPE_LOOKUP
+ #define CYTHON_USE_PYTYPE_LOOKUP 0
+ #elif !defined(CYTHON_USE_PYTYPE_LOOKUP)
+ #define CYTHON_USE_PYTYPE_LOOKUP 1
+ #endif
+ #if PY_MAJOR_VERSION < 3
+ #undef CYTHON_USE_ASYNC_SLOTS
+ #define CYTHON_USE_ASYNC_SLOTS 0
+ #elif !defined(CYTHON_USE_ASYNC_SLOTS)
+ #define CYTHON_USE_ASYNC_SLOTS 1
+ #endif
+ #if PY_VERSION_HEX < 0x02070000
+ #undef CYTHON_USE_PYLONG_INTERNALS
+ #define CYTHON_USE_PYLONG_INTERNALS 0
+ #elif !defined(CYTHON_USE_PYLONG_INTERNALS)
+ #define CYTHON_USE_PYLONG_INTERNALS 1
+ #endif
+ #ifndef CYTHON_USE_PYLIST_INTERNALS
+ #define CYTHON_USE_PYLIST_INTERNALS 1
+ #endif
+ #ifndef CYTHON_USE_UNICODE_INTERNALS
+ #define CYTHON_USE_UNICODE_INTERNALS 1
+ #endif
+ #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2
+ #undef CYTHON_USE_UNICODE_WRITER
+ #define CYTHON_USE_UNICODE_WRITER 0
+ #elif !defined(CYTHON_USE_UNICODE_WRITER)
+ #define CYTHON_USE_UNICODE_WRITER 1
+ #endif
+ #ifndef CYTHON_AVOID_BORROWED_REFS
+ #define CYTHON_AVOID_BORROWED_REFS 0
+ #endif
+ #ifndef CYTHON_ASSUME_SAFE_MACROS
+ #define CYTHON_ASSUME_SAFE_MACROS 1
+ #endif
+ #ifndef CYTHON_UNPACK_METHODS
+ #define CYTHON_UNPACK_METHODS 1
+ #endif
+ #if PY_VERSION_HEX >= 0x030B00A4
+ #undef CYTHON_FAST_THREAD_STATE
+ #define CYTHON_FAST_THREAD_STATE 0
+ #elif !defined(CYTHON_FAST_THREAD_STATE)
+ #define CYTHON_FAST_THREAD_STATE 1
+ #endif
+ #ifndef CYTHON_FAST_PYCALL
+ #define CYTHON_FAST_PYCALL (PY_VERSION_HEX < 0x030A0000)
+ #endif
+ #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
+ #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000)
+ #endif
+ #ifndef CYTHON_USE_TP_FINALIZE
+ #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1)
+ #endif
+ #ifndef CYTHON_USE_DICT_VERSIONS
+ #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1)
+ #endif
+ #if PY_VERSION_HEX >= 0x030B00A4
+ #undef CYTHON_USE_EXC_INFO_STACK
+ #define CYTHON_USE_EXC_INFO_STACK 0
+ #elif !defined(CYTHON_USE_EXC_INFO_STACK)
+ #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3)
+ #endif
+ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
+ #define CYTHON_UPDATE_DESCRIPTOR_DOC 1
+ #endif
+#endif
+#if !defined(CYTHON_FAST_PYCCALL)
+#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1)
+#endif
+#if CYTHON_USE_PYLONG_INTERNALS
+ #if PY_MAJOR_VERSION < 3
+ #include "longintrepr.h"
+ #endif
+ #undef SHIFT
+ #undef BASE
+ #undef MASK
+ #ifdef SIZEOF_VOID_P
+ enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) };
+ #endif
+#endif
+#ifndef __has_attribute
+ #define __has_attribute(x) 0
+#endif
+#ifndef __has_cpp_attribute
+ #define __has_cpp_attribute(x) 0
+#endif
+#ifndef CYTHON_RESTRICT
+ #if defined(__GNUC__)
+ #define CYTHON_RESTRICT __restrict__
+ #elif defined(_MSC_VER) && _MSC_VER >= 1400
+ #define CYTHON_RESTRICT __restrict
+ #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+ #define CYTHON_RESTRICT restrict
+ #else
+ #define CYTHON_RESTRICT
+ #endif
+#endif
+#ifndef CYTHON_UNUSED
+# if defined(__GNUC__)
+# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
+# define CYTHON_UNUSED __attribute__ ((__unused__))
+# else
+# define CYTHON_UNUSED
+# endif
+# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
+# define CYTHON_UNUSED __attribute__ ((__unused__))
+# else
+# define CYTHON_UNUSED
+# endif
+#endif
+#ifndef CYTHON_MAYBE_UNUSED_VAR
+# if defined(__cplusplus)
+ template void CYTHON_MAYBE_UNUSED_VAR( const T& ) { }
+# else
+# define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x)
+# endif
+#endif
+#ifndef CYTHON_NCP_UNUSED
+# if CYTHON_COMPILING_IN_CPYTHON
+# define CYTHON_NCP_UNUSED
+# else
+# define CYTHON_NCP_UNUSED CYTHON_UNUSED
+# endif
+#endif
+#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None)
+#ifdef _MSC_VER
+ #ifndef _MSC_STDINT_H_
+ #if _MSC_VER < 1300
+ typedef unsigned char uint8_t;
+ typedef unsigned int uint32_t;
+ #else
+ typedef unsigned __int8 uint8_t;
+ typedef unsigned __int32 uint32_t;
+ #endif
+ #endif
+#else
+ #include
+#endif
+#ifndef CYTHON_FALLTHROUGH
+ #if defined(__cplusplus) && __cplusplus >= 201103L
+ #if __has_cpp_attribute(fallthrough)
+ #define CYTHON_FALLTHROUGH [[fallthrough]]
+ #elif __has_cpp_attribute(clang::fallthrough)
+ #define CYTHON_FALLTHROUGH [[clang::fallthrough]]
+ #elif __has_cpp_attribute(gnu::fallthrough)
+ #define CYTHON_FALLTHROUGH [[gnu::fallthrough]]
+ #endif
+ #endif
+ #ifndef CYTHON_FALLTHROUGH
+ #if __has_attribute(fallthrough)
+ #define CYTHON_FALLTHROUGH __attribute__((fallthrough))
+ #else
+ #define CYTHON_FALLTHROUGH
+ #endif
+ #endif
+ #if defined(__clang__ ) && defined(__apple_build_version__)
+ #if __apple_build_version__ < 7000000
+ #undef CYTHON_FALLTHROUGH
+ #define CYTHON_FALLTHROUGH
+ #endif
+ #endif
+#endif
+
+#ifndef CYTHON_INLINE
+ #if defined(__clang__)
+ #define CYTHON_INLINE __inline__ __attribute__ ((__unused__))
+ #elif defined(__GNUC__)
+ #define CYTHON_INLINE __inline__
+ #elif defined(_MSC_VER)
+ #define CYTHON_INLINE __inline
+ #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+ #define CYTHON_INLINE inline
+ #else
+ #define CYTHON_INLINE
+ #endif
+#endif
+
+#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag)
+ #define Py_OptimizeFlag 0
+#endif
+#define __PYX_BUILD_PY_SSIZE_T "n"
+#define CYTHON_FORMAT_SSIZE_T "z"
+#if PY_MAJOR_VERSION < 3
+ #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
+ #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
+ PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+ #define __Pyx_DefaultClassType PyClass_Type
+#else
+ #define __Pyx_BUILTIN_MODULE_NAME "builtins"
+ #define __Pyx_DefaultClassType PyType_Type
+#if PY_VERSION_HEX >= 0x030B00A1
+ static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int k, int l, int s, int f,
+ PyObject *code, PyObject *c, PyObject* n, PyObject *v,
+ PyObject *fv, PyObject *cell, PyObject* fn,
+ PyObject *name, int fline, PyObject *lnos) {
+ PyObject *kwds=NULL, *argcount=NULL, *posonlyargcount=NULL, *kwonlyargcount=NULL;
+ PyObject *nlocals=NULL, *stacksize=NULL, *flags=NULL, *replace=NULL, *call_result=NULL, *empty=NULL;
+ const char *fn_cstr=NULL;
+ const char *name_cstr=NULL;
+ PyCodeObject* co=NULL;
+ PyObject *type, *value, *traceback;
+ PyErr_Fetch(&type, &value, &traceback);
+ if (!(kwds=PyDict_New())) goto end;
+ if (!(argcount=PyLong_FromLong(a))) goto end;
+ if (PyDict_SetItemString(kwds, "co_argcount", argcount) != 0) goto end;
+ if (!(posonlyargcount=PyLong_FromLong(0))) goto end;
+ if (PyDict_SetItemString(kwds, "co_posonlyargcount", posonlyargcount) != 0) goto end;
+ if (!(kwonlyargcount=PyLong_FromLong(k))) goto end;
+ if (PyDict_SetItemString(kwds, "co_kwonlyargcount", kwonlyargcount) != 0) goto end;
+ if (!(nlocals=PyLong_FromLong(l))) goto end;
+ if (PyDict_SetItemString(kwds, "co_nlocals", nlocals) != 0) goto end;
+ if (!(stacksize=PyLong_FromLong(s))) goto end;
+ if (PyDict_SetItemString(kwds, "co_stacksize", stacksize) != 0) goto end;
+ if (!(flags=PyLong_FromLong(f))) goto end;
+ if (PyDict_SetItemString(kwds, "co_flags", flags) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_code", code) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_consts", c) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_names", n) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_varnames", v) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_freevars", fv) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_cellvars", cell) != 0) goto end;
+ if (PyDict_SetItemString(kwds, "co_linetable", lnos) != 0) goto end;
+ if (!(fn_cstr=PyUnicode_AsUTF8AndSize(fn, NULL))) goto end;
+ if (!(name_cstr=PyUnicode_AsUTF8AndSize(name, NULL))) goto end;
+ if (!(co = PyCode_NewEmpty(fn_cstr, name_cstr, fline))) goto end;
+ if (!(replace = PyObject_GetAttrString((PyObject*)co, "replace"))) goto cleanup_code_too;
+ if (!(empty = PyTuple_New(0))) goto cleanup_code_too; // unfortunately __pyx_empty_tuple isn't available here
+ if (!(call_result = PyObject_Call(replace, empty, kwds))) goto cleanup_code_too;
+ Py_XDECREF((PyObject*)co);
+ co = (PyCodeObject*)call_result;
+ call_result = NULL;
+ if (0) {
+ cleanup_code_too:
+ Py_XDECREF((PyObject*)co);
+ co = NULL;
+ }
+ end:
+ Py_XDECREF(kwds);
+ Py_XDECREF(argcount);
+ Py_XDECREF(posonlyargcount);
+ Py_XDECREF(kwonlyargcount);
+ Py_XDECREF(nlocals);
+ Py_XDECREF(stacksize);
+ Py_XDECREF(replace);
+ Py_XDECREF(call_result);
+ Py_XDECREF(empty);
+ if (type) {
+ PyErr_Restore(type, value, traceback);
+ }
+ return co;
+ }
+#else
+ #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
+ PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+#endif
+ #define __Pyx_DefaultClassType PyType_Type
+#endif
+#ifndef Py_TPFLAGS_CHECKTYPES
+ #define Py_TPFLAGS_CHECKTYPES 0
+#endif
+#ifndef Py_TPFLAGS_HAVE_INDEX
+ #define Py_TPFLAGS_HAVE_INDEX 0
+#endif
+#ifndef Py_TPFLAGS_HAVE_NEWBUFFER
+ #define Py_TPFLAGS_HAVE_NEWBUFFER 0
+#endif
+#ifndef Py_TPFLAGS_HAVE_FINALIZE
+ #define Py_TPFLAGS_HAVE_FINALIZE 0
+#endif
+#ifndef METH_STACKLESS
+ #define METH_STACKLESS 0
+#endif
+#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL)
+ #ifndef METH_FASTCALL
+ #define METH_FASTCALL 0x80
+ #endif
+ typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs);
+ typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args,
+ Py_ssize_t nargs, PyObject *kwnames);
+#else
+ #define __Pyx_PyCFunctionFast _PyCFunctionFast
+ #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords
+#endif
+#if CYTHON_FAST_PYCCALL
+#define __Pyx_PyFastCFunction_Check(func)\
+ ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS)))))
+#else
+#define __Pyx_PyFastCFunction_Check(func) 0
+#endif
+#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc)
+ #define PyObject_Malloc(s) PyMem_Malloc(s)
+ #define PyObject_Free(p) PyMem_Free(p)
+ #define PyObject_Realloc(p) PyMem_Realloc(p)
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1
+ #define PyMem_RawMalloc(n) PyMem_Malloc(n)
+ #define PyMem_RawRealloc(p, n) PyMem_Realloc(p, n)
+ #define PyMem_RawFree(p) PyMem_Free(p)
+#endif
+#if CYTHON_COMPILING_IN_PYSTON
+ #define __Pyx_PyCode_HasFreeVars(co) PyCode_HasFreeVars(co)
+ #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno)
+#else
+ #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0)
+ #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno)
+#endif
+#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000
+ #define __Pyx_PyThreadState_Current PyThreadState_GET()
+#elif PY_VERSION_HEX >= 0x03060000
+ #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet()
+#elif PY_VERSION_HEX >= 0x03000000
+ #define __Pyx_PyThreadState_Current PyThreadState_GET()
+#else
+ #define __Pyx_PyThreadState_Current _PyThreadState_Current
+#endif
+#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT)
+#include "pythread.h"
+#define Py_tss_NEEDS_INIT 0
+typedef int Py_tss_t;
+static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) {
+ *key = PyThread_create_key();
+ return 0;
+}
+static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) {
+ Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t));
+ *key = Py_tss_NEEDS_INIT;
+ return key;
+}
+static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) {
+ PyObject_Free(key);
+}
+static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) {
+ return *key != Py_tss_NEEDS_INIT;
+}
+static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) {
+ PyThread_delete_key(*key);
+ *key = Py_tss_NEEDS_INIT;
+}
+static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) {
+ return PyThread_set_key_value(*key, value);
+}
+static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
+ return PyThread_get_key_value(*key);
+}
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized)
+#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n))
+#else
+#define __Pyx_PyDict_NewPresized(n) PyDict_New()
+#endif
+#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION
+ #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y)
+ #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y)
+#else
+ #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y)
+ #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y)
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS
+#define __Pyx_PyDict_GetItemStr(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash)
+#else
+#define __Pyx_PyDict_GetItemStr(dict, name) PyDict_GetItem(dict, name)
+#endif
+#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
+ #define CYTHON_PEP393_ENABLED 1
+ #if defined(PyUnicode_IS_READY)
+ #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\
+ 0 : _PyUnicode_Ready((PyObject *)(op)))
+ #else
+ #define __Pyx_PyUnicode_READY(op) (0)
+ #endif
+ #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u)
+ #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
+ #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u)
+ #define __Pyx_PyUnicode_KIND(u) PyUnicode_KIND(u)
+ #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u)
+ #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i)
+ #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, ch)
+ #if defined(PyUnicode_IS_READY) && defined(PyUnicode_GET_SIZE)
+ #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000
+ #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length))
+ #else
+ #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
+ #endif
+ #else
+ #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u))
+ #endif
+#else
+ #define CYTHON_PEP393_ENABLED 0
+ #define PyUnicode_1BYTE_KIND 1
+ #define PyUnicode_2BYTE_KIND 2
+ #define PyUnicode_4BYTE_KIND 4
+ #define __Pyx_PyUnicode_READY(op) (0)
+ #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u)
+ #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
+ #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111)
+ #define __Pyx_PyUnicode_KIND(u) (sizeof(Py_UNICODE))
+ #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u))
+ #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
+ #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = ch)
+ #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u))
+#endif
+#if CYTHON_COMPILING_IN_PYPY
+ #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b)
+ #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b)
+#else
+ #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b)
+ #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\
+ PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b))
+#endif
+#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains)
+ #define PyUnicode_Contains(u, s) PySequence_Contains(u, s)
+#endif
+#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check)
+ #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type)
+#endif
+#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format)
+ #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt)
+#endif
+#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))
+#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))
+#if PY_MAJOR_VERSION >= 3
+ #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b)
+#else
+ #define __Pyx_PyString_Format(a, b) PyString_Format(a, b)
+#endif
+#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII)
+ #define PyObject_ASCII(o) PyObject_Repr(o)
+#endif
+#if PY_MAJOR_VERSION >= 3
+ #define PyBaseString_Type PyUnicode_Type
+ #define PyStringObject PyUnicodeObject
+ #define PyString_Type PyUnicode_Type
+ #define PyString_Check PyUnicode_Check
+ #define PyString_CheckExact PyUnicode_CheckExact
+#ifndef PyObject_Unicode
+ #define PyObject_Unicode PyObject_Str
+#endif
+#endif
+#if PY_MAJOR_VERSION >= 3
+ #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj)
+ #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj)
+#else
+ #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj))
+ #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj))
+#endif
+#ifndef PySet_CheckExact
+ #define PySet_CheckExact(obj) (Py_TYPE(obj) == &PySet_Type)
+#endif
+#if PY_VERSION_HEX >= 0x030900A4
+ #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt)
+ #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size)
+#else
+ #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt)
+ #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size)
+#endif
+#if CYTHON_ASSUME_SAFE_MACROS
+ #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq)
+#else
+ #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq)
+#endif
+#if PY_MAJOR_VERSION >= 3
+ #define PyIntObject PyLongObject
+ #define PyInt_Type PyLong_Type
+ #define PyInt_Check(op) PyLong_Check(op)
+ #define PyInt_CheckExact(op) PyLong_CheckExact(op)
+ #define PyInt_FromString PyLong_FromString
+ #define PyInt_FromUnicode PyLong_FromUnicode
+ #define PyInt_FromLong PyLong_FromLong
+ #define PyInt_FromSize_t PyLong_FromSize_t
+ #define PyInt_FromSsize_t PyLong_FromSsize_t
+ #define PyInt_AsLong PyLong_AsLong
+ #define PyInt_AS_LONG PyLong_AS_LONG
+ #define PyInt_AsSsize_t PyLong_AsSsize_t
+ #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask
+ #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
+ #define PyNumber_Int PyNumber_Long
+#endif
+#if PY_MAJOR_VERSION >= 3
+ #define PyBoolObject PyLongObject
+#endif
+#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY
+ #ifndef PyUnicode_InternFromString
+ #define PyUnicode_InternFromString(s) PyUnicode_FromString(s)
+ #endif
+#endif
+#if PY_VERSION_HEX < 0x030200A4
+ typedef long Py_hash_t;
+ #define __Pyx_PyInt_FromHash_t PyInt_FromLong
+ #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsHash_t
+#else
+ #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
+ #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t
+#endif
+#if PY_MAJOR_VERSION >= 3
+ #define __Pyx_PyMethod_New(func, self, klass) ((self) ? ((void)(klass), PyMethod_New(func, self)) : __Pyx_NewRef(func))
+#else
+ #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass)
+#endif
+#if CYTHON_USE_ASYNC_SLOTS
+ #if PY_VERSION_HEX >= 0x030500B1
+ #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods
+ #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async)
+ #else
+ #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved))
+ #endif
+#else
+ #define __Pyx_PyType_AsAsync(obj) NULL
+#endif
+#ifndef __Pyx_PyAsyncMethodsStruct
+ typedef struct {
+ unaryfunc am_await;
+ unaryfunc am_aiter;
+ unaryfunc am_anext;
+ } __Pyx_PyAsyncMethodsStruct;
+#endif
+
+#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS)
+ #if !defined(_USE_MATH_DEFINES)
+ #define _USE_MATH_DEFINES
+ #endif
+#endif
+#include
+#ifdef NAN
+#define __PYX_NAN() ((float) NAN)
+#else
+static CYTHON_INLINE float __PYX_NAN() {
+ float value;
+ memset(&value, 0xFF, sizeof(value));
+ return value;
+}
+#endif
+#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL)
+#define __Pyx_truncl trunc
+#else
+#define __Pyx_truncl truncl
+#endif
+
+#define __PYX_MARK_ERR_POS(f_index, lineno) \
+ { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; }
+#define __PYX_ERR(f_index, lineno, Ln_error) \
+ { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; }
+
+#ifndef __PYX_EXTERN_C
+ #ifdef __cplusplus
+ #define __PYX_EXTERN_C extern "C"
+ #else
+ #define __PYX_EXTERN_C extern
+ #endif
+#endif
+
+#define __PYX_HAVE__monotonic_align__core
+#define __PYX_HAVE_API__monotonic_align__core
+/* Early includes */
+#include "pythread.h"
+#include
+#include
+#include
+#include "pystate.h"
+#ifdef _OPENMP
+#include
+#endif /* _OPENMP */
+
+#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS)
+#define CYTHON_WITHOUT_ASSERTIONS
+#endif
+
+typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding;
+ const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry;
+
+#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0
+#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0
+#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8)
+#define __PYX_DEFAULT_STRING_ENCODING ""
+#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString
+#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
+#define __Pyx_uchar_cast(c) ((unsigned char)c)
+#define __Pyx_long_cast(x) ((long)x)
+#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\
+ (sizeof(type) < sizeof(Py_ssize_t)) ||\
+ (sizeof(type) > sizeof(Py_ssize_t) &&\
+ likely(v < (type)PY_SSIZE_T_MAX ||\
+ v == (type)PY_SSIZE_T_MAX) &&\
+ (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\
+ v == (type)PY_SSIZE_T_MIN))) ||\
+ (sizeof(type) == sizeof(Py_ssize_t) &&\
+ (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\
+ v == (type)PY_SSIZE_T_MAX))) )
+static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) {
+ return (size_t) i < (size_t) limit;
+}
+#if defined (__cplusplus) && __cplusplus >= 201103L
+ #include
+ #define __Pyx_sst_abs(value) std::abs(value)
+#elif SIZEOF_INT >= SIZEOF_SIZE_T
+ #define __Pyx_sst_abs(value) abs(value)
+#elif SIZEOF_LONG >= SIZEOF_SIZE_T
+ #define __Pyx_sst_abs(value) labs(value)
+#elif defined (_MSC_VER)
+ #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value))
+#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+ #define __Pyx_sst_abs(value) llabs(value)
+#elif defined (__GNUC__)
+ #define __Pyx_sst_abs(value) __builtin_llabs(value)
+#else
+ #define __Pyx_sst_abs(value) ((value<0) ? -value : value)
+#endif
+static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*);
+static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length);
+#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s))
+#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l)
+#define __Pyx_PyBytes_FromString PyBytes_FromString
+#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize
+static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*);
+#if PY_MAJOR_VERSION < 3
+ #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString
+ #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
+#else
+ #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString
+ #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize
+#endif
+#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyObject_AsWritableString(s) ((char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsWritableSString(s) ((signed char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s)
+#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s)
+#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s)
+#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s)
+#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s)
+static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) {
+ const Py_UNICODE *u_end = u;
+ while (*u_end++) ;
+ return (size_t)(u_end - u - 1);
+}
+#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u))
+#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode
+#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode
+#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj)
+#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None)
+static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b);
+static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
+static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*);
+static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x);
+#define __Pyx_PySequence_Tuple(obj)\
+ (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj))
+static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
+static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
+static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*);
+#if CYTHON_ASSUME_SAFE_MACROS
+#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
+#else
+#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
+#endif
+#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
+#if PY_MAJOR_VERSION >= 3
+#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x))
+#else
+#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x))
+#endif
+#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x))
+#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
+static int __Pyx_sys_getdefaultencoding_not_ascii;
+static int __Pyx_init_sys_getdefaultencoding_params(void) {
+ PyObject* sys;
+ PyObject* default_encoding = NULL;
+ PyObject* ascii_chars_u = NULL;
+ PyObject* ascii_chars_b = NULL;
+ const char* default_encoding_c;
+ sys = PyImport_ImportModule("sys");
+ if (!sys) goto bad;
+ default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL);
+ Py_DECREF(sys);
+ if (!default_encoding) goto bad;
+ default_encoding_c = PyBytes_AsString(default_encoding);
+ if (!default_encoding_c) goto bad;
+ if (strcmp(default_encoding_c, "ascii") == 0) {
+ __Pyx_sys_getdefaultencoding_not_ascii = 0;
+ } else {
+ char ascii_chars[128];
+ int c;
+ for (c = 0; c < 128; c++) {
+ ascii_chars[c] = c;
+ }
+ __Pyx_sys_getdefaultencoding_not_ascii = 1;
+ ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL);
+ if (!ascii_chars_u) goto bad;
+ ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL);
+ if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) {
+ PyErr_Format(
+ PyExc_ValueError,
+ "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.",
+ default_encoding_c);
+ goto bad;
+ }
+ Py_DECREF(ascii_chars_u);
+ Py_DECREF(ascii_chars_b);
+ }
+ Py_DECREF(default_encoding);
+ return 0;
+bad:
+ Py_XDECREF(default_encoding);
+ Py_XDECREF(ascii_chars_u);
+ Py_XDECREF(ascii_chars_b);
+ return -1;
+}
+#endif
+#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3
+#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL)
+#else
+#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL)
+#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
+static char* __PYX_DEFAULT_STRING_ENCODING;
+static int __Pyx_init_sys_getdefaultencoding_params(void) {
+ PyObject* sys;
+ PyObject* default_encoding = NULL;
+ char* default_encoding_c;
+ sys = PyImport_ImportModule("sys");
+ if (!sys) goto bad;
+ default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL);
+ Py_DECREF(sys);
+ if (!default_encoding) goto bad;
+ default_encoding_c = PyBytes_AsString(default_encoding);
+ if (!default_encoding_c) goto bad;
+ __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1);
+ if (!__PYX_DEFAULT_STRING_ENCODING) goto bad;
+ strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c);
+ Py_DECREF(default_encoding);
+ return 0;
+bad:
+ Py_XDECREF(default_encoding);
+ return -1;
+}
+#endif
+#endif
+
+
+/* Test for GCC > 2.95 */
+#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))
+ #define likely(x) __builtin_expect(!!(x), 1)
+ #define unlikely(x) __builtin_expect(!!(x), 0)
+#else /* !__GNUC__ or GCC < 2.95 */
+ #define likely(x) (x)
+ #define unlikely(x) (x)
+#endif /* __GNUC__ */
+static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; }
+
+static PyObject *__pyx_m = NULL;
+static PyObject *__pyx_d;
+static PyObject *__pyx_b;
+static PyObject *__pyx_cython_runtime = NULL;
+static PyObject *__pyx_empty_tuple;
+static PyObject *__pyx_empty_bytes;
+static PyObject *__pyx_empty_unicode;
+static int __pyx_lineno;
+static int __pyx_clineno = 0;
+static const char * __pyx_cfilenm= __FILE__;
+static const char *__pyx_filename;
+
+
+static const char *__pyx_f[] = {
+ "core.pyx",
+ "stringsource",
+};
+/* NoFastGil.proto */
+#define __Pyx_PyGILState_Ensure PyGILState_Ensure
+#define __Pyx_PyGILState_Release PyGILState_Release
+#define __Pyx_FastGIL_Remember()
+#define __Pyx_FastGIL_Forget()
+#define __Pyx_FastGilFuncInit()
+
+/* MemviewSliceStruct.proto */
+struct __pyx_memoryview_obj;
+typedef struct {
+ struct __pyx_memoryview_obj *memview;
+ char *data;
+ Py_ssize_t shape[8];
+ Py_ssize_t strides[8];
+ Py_ssize_t suboffsets[8];
+} __Pyx_memviewslice;
+#define __Pyx_MemoryView_Len(m) (m.shape[0])
+
+/* Atomics.proto */
+#include
+#ifndef CYTHON_ATOMICS
+ #define CYTHON_ATOMICS 1
+#endif
+#define __PYX_CYTHON_ATOMICS_ENABLED() CYTHON_ATOMICS
+#define __pyx_atomic_int_type int
+#if CYTHON_ATOMICS && (__GNUC__ >= 5 || (__GNUC__ == 4 &&\
+ (__GNUC_MINOR__ > 1 ||\
+ (__GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ >= 2))))
+ #define __pyx_atomic_incr_aligned(value) __sync_fetch_and_add(value, 1)
+ #define __pyx_atomic_decr_aligned(value) __sync_fetch_and_sub(value, 1)
+ #ifdef __PYX_DEBUG_ATOMICS
+ #warning "Using GNU atomics"
+ #endif
+#elif CYTHON_ATOMICS && defined(_MSC_VER) && CYTHON_COMPILING_IN_NOGIL
+ #include
+ #undef __pyx_atomic_int_type
+ #define __pyx_atomic_int_type long
+ #pragma intrinsic (_InterlockedExchangeAdd)
+ #define __pyx_atomic_incr_aligned(value) _InterlockedExchangeAdd(value, 1)
+ #define __pyx_atomic_decr_aligned(value) _InterlockedExchangeAdd(value, -1)
+ #ifdef __PYX_DEBUG_ATOMICS
+ #pragma message ("Using MSVC atomics")
+ #endif
+#else
+ #undef CYTHON_ATOMICS
+ #define CYTHON_ATOMICS 0
+ #ifdef __PYX_DEBUG_ATOMICS
+ #warning "Not using atomics"
+ #endif
+#endif
+typedef volatile __pyx_atomic_int_type __pyx_atomic_int;
+#if CYTHON_ATOMICS
+ #define __pyx_add_acquisition_count(memview)\
+ __pyx_atomic_incr_aligned(__pyx_get_slice_count_pointer(memview))
+ #define __pyx_sub_acquisition_count(memview)\
+ __pyx_atomic_decr_aligned(__pyx_get_slice_count_pointer(memview))
+#else
+ #define __pyx_add_acquisition_count(memview)\
+ __pyx_add_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock)
+ #define __pyx_sub_acquisition_count(memview)\
+ __pyx_sub_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock)
+#endif
+
+/* ForceInitThreads.proto */
+#ifndef __PYX_FORCE_INIT_THREADS
+ #define __PYX_FORCE_INIT_THREADS 0
+#endif
+
+/* BufferFormatStructs.proto */
+#define IS_UNSIGNED(type) (((type) -1) > 0)
+struct __Pyx_StructField_;
+#define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0)
+typedef struct {
+ const char* name;
+ struct __Pyx_StructField_* fields;
+ size_t size;
+ size_t arraysize[8];
+ int ndim;
+ char typegroup;
+ char is_unsigned;
+ int flags;
+} __Pyx_TypeInfo;
+typedef struct __Pyx_StructField_ {
+ __Pyx_TypeInfo* type;
+ const char* name;
+ size_t offset;
+} __Pyx_StructField;
+typedef struct {
+ __Pyx_StructField* field;
+ size_t parent_offset;
+} __Pyx_BufFmt_StackElem;
+typedef struct {
+ __Pyx_StructField root;
+ __Pyx_BufFmt_StackElem* head;
+ size_t fmt_offset;
+ size_t new_count, enc_count;
+ size_t struct_alignment;
+ int is_complex;
+ char enc_type;
+ char new_packmode;
+ char enc_packmode;
+ char is_valid_array;
+} __Pyx_BufFmt_Context;
+
+
+/*--- Type declarations ---*/
+struct __pyx_array_obj;
+struct __pyx_MemviewEnum_obj;
+struct __pyx_memoryview_obj;
+struct __pyx_memoryviewslice_obj;
+struct __pyx_opt_args_15monotonic_align_4core_maximum_path_each;
+
+/* "monotonic_align/core.pyx":7
+ * @cython.boundscheck(False)
+ * @cython.wraparound(False)
+ * cdef void maximum_path_each(int[:,::1] path, float[:,::1] value, int t_y, int t_x, float max_neg_val=-1e9) nogil: # <<<<<<<<<<<<<<
+ * cdef int x
+ * cdef int y
+ */
+struct __pyx_opt_args_15monotonic_align_4core_maximum_path_each {
+ int __pyx_n;
+ float max_neg_val;
+};
+
+/* "View.MemoryView":106
+ *
+ * @cname("__pyx_array")
+ * cdef class array: # <<<<<<<<<<<<<<
+ *
+ * cdef:
+ */
+struct __pyx_array_obj {
+ PyObject_HEAD
+ struct __pyx_vtabstruct_array *__pyx_vtab;
+ char *data;
+ Py_ssize_t len;
+ char *format;
+ int ndim;
+ Py_ssize_t *_shape;
+ Py_ssize_t *_strides;
+ Py_ssize_t itemsize;
+ PyObject *mode;
+ PyObject *_format;
+ void (*callback_free_data)(void *);
+ int free_data;
+ int dtype_is_object;
+};
+
+
+/* "View.MemoryView":280
+ *
+ * @cname('__pyx_MemviewEnum')
+ * cdef class Enum(object): # <<<<<<<<<<<<<<
+ * cdef object name
+ * def __init__(self, name):
+ */
+struct __pyx_MemviewEnum_obj {
+ PyObject_HEAD
+ PyObject *name;
+};
+
+
+/* "View.MemoryView":331
+ *
+ * @cname('__pyx_memoryview')
+ * cdef class memoryview(object): # <<<<<<<<<<<<<<
+ *
+ * cdef object obj
+ */
+struct __pyx_memoryview_obj {
+ PyObject_HEAD
+ struct __pyx_vtabstruct_memoryview *__pyx_vtab;
+ PyObject *obj;
+ PyObject *_size;
+ PyObject *_array_interface;
+ PyThread_type_lock lock;
+ __pyx_atomic_int acquisition_count[2];
+ __pyx_atomic_int *acquisition_count_aligned_p;
+ Py_buffer view;
+ int flags;
+ int dtype_is_object;
+ __Pyx_TypeInfo *typeinfo;
+};
+
+
+/* "View.MemoryView":967
+ *
+ * @cname('__pyx_memoryviewslice')
+ * cdef class _memoryviewslice(memoryview): # <<<<<<<<<<<<<<
+ * "Internal class for passing memoryview slices to Python"
+ *
+ */
+struct __pyx_memoryviewslice_obj {
+ struct __pyx_memoryview_obj __pyx_base;
+ __Pyx_memviewslice from_slice;
+ PyObject *from_object;
+ PyObject *(*to_object_func)(char *);
+ int (*to_dtype_func)(char *, PyObject *);
+};
+
+
+
+/* "View.MemoryView":106
+ *
+ * @cname("__pyx_array")
+ * cdef class array: # <<<<<<<<<<<<<<
+ *
+ * cdef:
+ */
+
+struct __pyx_vtabstruct_array {
+ PyObject *(*get_memview)(struct __pyx_array_obj *);
+};
+static struct __pyx_vtabstruct_array *__pyx_vtabptr_array;
+
+
+/* "View.MemoryView":331
+ *
+ * @cname('__pyx_memoryview')
+ * cdef class memoryview(object): # <<<<<<<<<<<<<<
+ *
+ * cdef object obj
+ */
+
+struct __pyx_vtabstruct_memoryview {
+ char *(*get_item_pointer)(struct __pyx_memoryview_obj *, PyObject *);
+ PyObject *(*is_slice)(struct __pyx_memoryview_obj *, PyObject *);
+ PyObject *(*setitem_slice_assignment)(struct __pyx_memoryview_obj *, PyObject *, PyObject *);
+ PyObject *(*setitem_slice_assign_scalar)(struct __pyx_memoryview_obj *, struct __pyx_memoryview_obj *, PyObject *);
+ PyObject *(*setitem_indexed)(struct __pyx_memoryview_obj *, PyObject *, PyObject *);
+ PyObject *(*convert_item_to_object)(struct __pyx_memoryview_obj *, char *);
+ PyObject *(*assign_item_from_object)(struct __pyx_memoryview_obj *, char *, PyObject *);
+};
+static struct __pyx_vtabstruct_memoryview *__pyx_vtabptr_memoryview;
+
+
+/* "View.MemoryView":967
+ *
+ * @cname('__pyx_memoryviewslice')
+ * cdef class _memoryviewslice(memoryview): # <<<<<<<<<<<<<<
+ * "Internal class for passing memoryview slices to Python"
+ *
+ */
+
+struct __pyx_vtabstruct__memoryviewslice {
+ struct __pyx_vtabstruct_memoryview __pyx_base;
+};
+static struct __pyx_vtabstruct__memoryviewslice *__pyx_vtabptr__memoryviewslice;
+
+/* --- Runtime support code (head) --- */
+/* Refnanny.proto */
+#ifndef CYTHON_REFNANNY
+ #define CYTHON_REFNANNY 0
+#endif
+#if CYTHON_REFNANNY
+ typedef struct {
+ void (*INCREF)(void*, PyObject*, int);
+ void (*DECREF)(void*, PyObject*, int);
+ void (*GOTREF)(void*, PyObject*, int);
+ void (*GIVEREF)(void*, PyObject*, int);
+ void* (*SetupContext)(const char*, int, const char*);
+ void (*FinishContext)(void**);
+ } __Pyx_RefNannyAPIStruct;
+ static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
+ static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname);
+ #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
+#ifdef WITH_THREAD
+ #define __Pyx_RefNannySetupContext(name, acquire_gil)\
+ if (acquire_gil) {\
+ PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
+ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\
+ PyGILState_Release(__pyx_gilstate_save);\
+ } else {\
+ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\
+ }
+#else
+ #define __Pyx_RefNannySetupContext(name, acquire_gil)\
+ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
+#endif
+ #define __Pyx_RefNannyFinishContext()\
+ __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
+ #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+ #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+ #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+ #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
+ #define __Pyx_XINCREF(r) do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0)
+ #define __Pyx_XDECREF(r) do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0)
+ #define __Pyx_XGOTREF(r) do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0)
+ #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0)
+#else
+ #define __Pyx_RefNannyDeclarations
+ #define __Pyx_RefNannySetupContext(name, acquire_gil)
+ #define __Pyx_RefNannyFinishContext()
+ #define __Pyx_INCREF(r) Py_INCREF(r)
+ #define __Pyx_DECREF(r) Py_DECREF(r)
+ #define __Pyx_GOTREF(r)
+ #define __Pyx_GIVEREF(r)
+ #define __Pyx_XINCREF(r) Py_XINCREF(r)
+ #define __Pyx_XDECREF(r) Py_XDECREF(r)
+ #define __Pyx_XGOTREF(r)
+ #define __Pyx_XGIVEREF(r)
+#endif
+#define __Pyx_XDECREF_SET(r, v) do {\
+ PyObject *tmp = (PyObject *) r;\
+ r = v; __Pyx_XDECREF(tmp);\
+ } while (0)
+#define __Pyx_DECREF_SET(r, v) do {\
+ PyObject *tmp = (PyObject *) r;\
+ r = v; __Pyx_DECREF(tmp);\
+ } while (0)
+#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
+#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
+
+/* PyObjectGetAttrStr.proto */
+#if CYTHON_USE_TYPE_SLOTS
+static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name);
+#else
+#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n)
+#endif
+
+/* GetBuiltinName.proto */
+static PyObject *__Pyx_GetBuiltinName(PyObject *name);
+
+/* MemviewSliceInit.proto */
+#define __Pyx_BUF_MAX_NDIMS %(BUF_MAX_NDIMS)d
+#define __Pyx_MEMVIEW_DIRECT 1
+#define __Pyx_MEMVIEW_PTR 2
+#define __Pyx_MEMVIEW_FULL 4
+#define __Pyx_MEMVIEW_CONTIG 8
+#define __Pyx_MEMVIEW_STRIDED 16
+#define __Pyx_MEMVIEW_FOLLOW 32
+#define __Pyx_IS_C_CONTIG 1
+#define __Pyx_IS_F_CONTIG 2
+static int __Pyx_init_memviewslice(
+ struct __pyx_memoryview_obj *memview,
+ int ndim,
+ __Pyx_memviewslice *memviewslice,
+ int memview_is_new_reference);
+static CYTHON_INLINE int __pyx_add_acquisition_count_locked(
+ __pyx_atomic_int *acquisition_count, PyThread_type_lock lock);
+static CYTHON_INLINE int __pyx_sub_acquisition_count_locked(
+ __pyx_atomic_int *acquisition_count, PyThread_type_lock lock);
+#define __pyx_get_slice_count_pointer(memview) (memview->acquisition_count_aligned_p)
+#define __pyx_get_slice_count(memview) (*__pyx_get_slice_count_pointer(memview))
+#define __PYX_INC_MEMVIEW(slice, have_gil) __Pyx_INC_MEMVIEW(slice, have_gil, __LINE__)
+#define __PYX_XDEC_MEMVIEW(slice, have_gil) __Pyx_XDEC_MEMVIEW(slice, have_gil, __LINE__)
+static CYTHON_INLINE void __Pyx_INC_MEMVIEW(__Pyx_memviewslice *, int, int);
+static CYTHON_INLINE void __Pyx_XDEC_MEMVIEW(__Pyx_memviewslice *, int, int);
+
+/* RaiseArgTupleInvalid.proto */
+static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
+ Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found);
+
+/* RaiseDoubleKeywords.proto */
+static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name);
+
+/* ParseKeywords.proto */
+static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\
+ PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\
+ const char* function_name);
+
+/* None.proto */
+static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname);
+
+/* ArgTypeTest.proto */
+#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\
+ ((likely((Py_TYPE(obj) == type) | (none_allowed && (obj == Py_None)))) ? 1 :\
+ __Pyx__ArgTypeTest(obj, type, name, exact))
+static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact);
+
+/* PyObjectCall.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw);
+#else
+#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw)
+#endif
+
+/* PyThreadStateGet.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate;
+#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current;
+#define __Pyx_PyErr_Occurred() __pyx_tstate->curexc_type
+#else
+#define __Pyx_PyThreadState_declare
+#define __Pyx_PyThreadState_assign
+#define __Pyx_PyErr_Occurred() PyErr_Occurred()
+#endif
+
+/* PyErrFetchRestore.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL)
+#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb)
+#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb)
+#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb)
+#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
+static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#if CYTHON_COMPILING_IN_CPYTHON
+#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL))
+#else
+#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
+#endif
+#else
+#define __Pyx_PyErr_Clear() PyErr_Clear()
+#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
+#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb)
+#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb)
+#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb)
+#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb)
+#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb)
+#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb)
+#endif
+
+/* RaiseException.proto */
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause);
+
+/* PyCFunctionFastCall.proto */
+#if CYTHON_FAST_PYCCALL
+static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs);
+#else
+#define __Pyx_PyCFunction_FastCall(func, args, nargs) (assert(0), NULL)
+#endif
+
+/* PyFunctionFastCall.proto */
+#if CYTHON_FAST_PYCALL
+#define __Pyx_PyFunction_FastCall(func, args, nargs)\
+ __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL)
+#if 1 || PY_VERSION_HEX < 0x030600B1
+static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs);
+#else
+#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs)
+#endif
+#define __Pyx_BUILD_ASSERT_EXPR(cond)\
+ (sizeof(char [1 - 2*!(cond)]) - 1)
+#ifndef Py_MEMBER_SIZE
+#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member)
+#endif
+#if CYTHON_FAST_PYCALL
+ static size_t __pyx_pyframe_localsplus_offset = 0;
+ #include "frameobject.h"
+#if PY_VERSION_HEX >= 0x030b00a6
+ #ifndef Py_BUILD_CORE
+ #define Py_BUILD_CORE 1
+ #endif
+ #include "internal/pycore_frame.h"
+#endif
+ #define __Pxy_PyFrame_Initialize_Offsets()\
+ ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\
+ (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus)))
+ #define __Pyx_PyFrame_GetLocalsplus(frame)\
+ (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset))
+#endif // CYTHON_FAST_PYCALL
+#endif
+
+/* PyObjectCall2Args.proto */
+static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2);
+
+/* PyObjectCallMethO.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg);
+#endif
+
+/* PyObjectCallOneArg.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg);
+
+/* IncludeStringH.proto */
+#include
+
+/* BytesEquals.proto */
+static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals);
+
+/* UnicodeEquals.proto */
+static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals);
+
+/* StrEquals.proto */
+#if PY_MAJOR_VERSION >= 3
+#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals
+#else
+#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals
+#endif
+
+/* DivInt[Py_ssize_t].proto */
+static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t, Py_ssize_t);
+
+/* UnaryNegOverflows.proto */
+#define UNARY_NEG_WOULD_OVERFLOW(x)\
+ (((x) < 0) & ((unsigned long)(x) == 0-(unsigned long)(x)))
+
+static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
+static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *); /*proto*/
+/* GetAttr.proto */
+static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *);
+
+/* GetItemInt.proto */
+#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
+ (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
+ __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\
+ (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\
+ __Pyx_GetItemInt_Generic(o, to_py_func(i))))
+#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
+ (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
+ __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
+ (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL))
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
+ int wraparound, int boundscheck);
+#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
+ (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
+ __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
+ (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL))
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
+ int wraparound, int boundscheck);
+static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j);
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
+ int is_list, int wraparound, int boundscheck);
+
+/* ObjectGetItem.proto */
+#if CYTHON_USE_TYPE_SLOTS
+static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key);
+#else
+#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key)
+#endif
+
+/* decode_c_string_utf16.proto */
+static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16(const char *s, Py_ssize_t size, const char *errors) {
+ int byteorder = 0;
+ return PyUnicode_DecodeUTF16(s, size, errors, &byteorder);
+}
+static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16LE(const char *s, Py_ssize_t size, const char *errors) {
+ int byteorder = -1;
+ return PyUnicode_DecodeUTF16(s, size, errors, &byteorder);
+}
+static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16BE(const char *s, Py_ssize_t size, const char *errors) {
+ int byteorder = 1;
+ return PyUnicode_DecodeUTF16(s, size, errors, &byteorder);
+}
+
+/* decode_c_string.proto */
+static CYTHON_INLINE PyObject* __Pyx_decode_c_string(
+ const char* cstring, Py_ssize_t start, Py_ssize_t stop,
+ const char* encoding, const char* errors,
+ PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors));
+
+/* PyErrExceptionMatches.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err)
+static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err);
+#else
+#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err)
+#endif
+
+/* GetAttr3.proto */
+static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *);
+
+/* PyDictVersioning.proto */
+#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS
+#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1)
+#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag)
+#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\
+ (version_var) = __PYX_GET_DICT_VERSION(dict);\
+ (cache_var) = (value);
+#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\
+ static PY_UINT64_T __pyx_dict_version = 0;\
+ static PyObject *__pyx_dict_cached_value = NULL;\
+ if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\
+ (VAR) = __pyx_dict_cached_value;\
+ } else {\
+ (VAR) = __pyx_dict_cached_value = (LOOKUP);\
+ __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\
+ }\
+}
+static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj);
+static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj);
+static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version);
+#else
+#define __PYX_GET_DICT_VERSION(dict) (0)
+#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)
+#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP);
+#endif
+
+/* GetModuleGlobalName.proto */
+#if CYTHON_USE_DICT_VERSIONS
+#define __Pyx_GetModuleGlobalName(var, name) {\
+ static PY_UINT64_T __pyx_dict_version = 0;\
+ static PyObject *__pyx_dict_cached_value = NULL;\
+ (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\
+ (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\
+ __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
+}
+#define __Pyx_GetModuleGlobalNameUncached(var, name) {\
+ PY_UINT64_T __pyx_dict_version;\
+ PyObject *__pyx_dict_cached_value;\
+ (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
+}
+static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value);
+#else
+#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name)
+#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name)
+static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name);
+#endif
+
+/* RaiseTooManyValuesToUnpack.proto */
+static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
+
+/* RaiseNeedMoreValuesToUnpack.proto */
+static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
+
+/* RaiseNoneIterError.proto */
+static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void);
+
+/* ExtTypeTest.proto */
+static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type);
+
+/* GetTopmostException.proto */
+#if CYTHON_USE_EXC_INFO_STACK
+static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate);
+#endif
+
+/* SaveResetException.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
+#else
+#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb)
+#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb)
+#endif
+
+/* GetException.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb)
+static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#else
+static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb);
+#endif
+
+/* SwapException.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#else
+static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb);
+#endif
+
+/* Import.proto */
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);
+
+/* FastTypeChecks.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type)
+static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b);
+static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type);
+static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2);
+#else
+#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
+#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type)
+#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2))
+#endif
+#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception)
+
+static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
+/* ListCompAppend.proto */
+#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
+static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) {
+ PyListObject* L = (PyListObject*) list;
+ Py_ssize_t len = Py_SIZE(list);
+ if (likely(L->allocated > len)) {
+ Py_INCREF(x);
+ PyList_SET_ITEM(list, len, x);
+ __Pyx_SET_SIZE(list, len + 1);
+ return 0;
+ }
+ return PyList_Append(list, x);
+}
+#else
+#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x)
+#endif
+
+/* PyIntBinop.proto */
+#if !CYTHON_COMPILING_IN_PYPY
+static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check);
+#else
+#define __Pyx_PyInt_AddObjC(op1, op2, intval, inplace, zerodivision_check)\
+ (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2))
+#endif
+
+/* ListExtend.proto */
+static CYTHON_INLINE int __Pyx_PyList_Extend(PyObject* L, PyObject* v) {
+#if CYTHON_COMPILING_IN_CPYTHON
+ PyObject* none = _PyList_Extend((PyListObject*)L, v);
+ if (unlikely(!none))
+ return -1;
+ Py_DECREF(none);
+ return 0;
+#else
+ return PyList_SetSlice(L, PY_SSIZE_T_MAX, PY_SSIZE_T_MAX, v);
+#endif
+}
+
+/* ListAppend.proto */
+#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
+static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
+ PyListObject* L = (PyListObject*) list;
+ Py_ssize_t len = Py_SIZE(list);
+ if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) {
+ Py_INCREF(x);
+ PyList_SET_ITEM(list, len, x);
+ __Pyx_SET_SIZE(list, len + 1);
+ return 0;
+ }
+ return PyList_Append(list, x);
+}
+#else
+#define __Pyx_PyList_Append(L,x) PyList_Append(L,x)
+#endif
+
+/* DivInt[long].proto */
+static CYTHON_INLINE long __Pyx_div_long(long, long);
+
+/* PySequenceContains.proto */
+static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* seq, int eq) {
+ int result = PySequence_Contains(seq, item);
+ return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
+}
+
+/* ImportFrom.proto */
+static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
+
+/* HasAttr.proto */
+static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *);
+
+/* PyObject_GenericGetAttrNoDict.proto */
+#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
+static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name);
+#else
+#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr
+#endif
+
+/* PyObject_GenericGetAttr.proto */
+#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
+static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name);
+#else
+#define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr
+#endif
+
+/* SetVTable.proto */
+static int __Pyx_SetVtable(PyObject *dict, void *vtable);
+
+/* PyObjectGetAttrStrNoError.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name);
+
+/* SetupReduce.proto */
+static int __Pyx_setup_reduce(PyObject* type_obj);
+
+/* CLineInTraceback.proto */
+#ifdef CYTHON_CLINE_IN_TRACEBACK
+#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0)
+#else
+static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line);
+#endif
+
+/* CodeObjectCache.proto */
+typedef struct {
+ PyCodeObject* code_object;
+ int code_line;
+} __Pyx_CodeObjectCacheEntry;
+struct __Pyx_CodeObjectCache {
+ int count;
+ int max_count;
+ __Pyx_CodeObjectCacheEntry* entries;
+};
+static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL};
+static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
+static PyCodeObject *__pyx_find_code_object(int code_line);
+static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);
+
+/* AddTraceback.proto */
+static void __Pyx_AddTraceback(const char *funcname, int c_line,
+ int py_line, const char *filename);
+
+#if PY_MAJOR_VERSION < 3
+ static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags);
+ static void __Pyx_ReleaseBuffer(Py_buffer *view);
+#else
+ #define __Pyx_GetBuffer PyObject_GetBuffer
+ #define __Pyx_ReleaseBuffer PyBuffer_Release
+#endif
+
+
+/* BufferStructDeclare.proto */
+typedef struct {
+ Py_ssize_t shape, strides, suboffsets;
+} __Pyx_Buf_DimInfo;
+typedef struct {
+ size_t refcount;
+ Py_buffer pybuffer;
+} __Pyx_Buffer;
+typedef struct {
+ __Pyx_Buffer *rcbuffer;
+ char *data;
+ __Pyx_Buf_DimInfo diminfo[8];
+} __Pyx_LocalBuf_ND;
+
+/* MemviewSliceIsContig.proto */
+static int __pyx_memviewslice_is_contig(const __Pyx_memviewslice mvs, char order, int ndim);
+
+/* OverlappingSlices.proto */
+static int __pyx_slices_overlap(__Pyx_memviewslice *slice1,
+ __Pyx_memviewslice *slice2,
+ int ndim, size_t itemsize);
+
+/* Capsule.proto */
+static CYTHON_INLINE PyObject *__pyx_capsule_create(void *p, const char *sig);
+
+/* IsLittleEndian.proto */
+static CYTHON_INLINE int __Pyx_Is_Little_Endian(void);
+
+/* BufferFormatCheck.proto */
+static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts);
+static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx,
+ __Pyx_BufFmt_StackElem* stack,
+ __Pyx_TypeInfo* type);
+
+/* TypeInfoCompare.proto */
+static int __pyx_typeinfo_cmp(__Pyx_TypeInfo *a, __Pyx_TypeInfo *b);
+
+/* MemviewSliceValidateAndInit.proto */
+static int __Pyx_ValidateAndInit_memviewslice(
+ int *axes_specs,
+ int c_or_f_flag,
+ int buf_flags,
+ int ndim,
+ __Pyx_TypeInfo *dtype,
+ __Pyx_BufFmt_StackElem stack[],
+ __Pyx_memviewslice *memviewslice,
+ PyObject *original_obj);
+
+/* ObjectToMemviewSlice.proto */
+static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_int(PyObject *, int writable_flag);
+
+/* ObjectToMemviewSlice.proto */
+static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_float(PyObject *, int writable_flag);
+
+/* ObjectToMemviewSlice.proto */
+static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dc_int(PyObject *, int writable_flag);
+
+/* GCCDiagnostics.proto */
+#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
+#define __Pyx_HAS_GCC_DIAGNOSTIC
+#endif
+
+/* MemviewSliceCopyTemplate.proto */
+static __Pyx_memviewslice
+__pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs,
+ const char *mode, int ndim,
+ size_t sizeof_dtype, int contig_flag,
+ int dtype_is_object);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *);
+
+/* CheckBinaryVersion.proto */
+static int __Pyx_check_binary_version(void);
+
+/* InitStrings.proto */
+static int __Pyx_InitStrings(__Pyx_StringTabEntry *t);
+
+static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self); /* proto*/
+static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto*/
+static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj); /* proto*/
+static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src); /* proto*/
+static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value); /* proto*/
+static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto*/
+static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/
+static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/
+static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/
+static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/
+
+/* Module declarations from 'cython.view' */
+
+/* Module declarations from 'cython' */
+
+/* Module declarations from 'monotonic_align.core' */
+static PyTypeObject *__pyx_array_type = 0;
+static PyTypeObject *__pyx_MemviewEnum_type = 0;
+static PyTypeObject *__pyx_memoryview_type = 0;
+static PyTypeObject *__pyx_memoryviewslice_type = 0;
+static PyObject *generic = 0;
+static PyObject *strided = 0;
+static PyObject *indirect = 0;
+static PyObject *contiguous = 0;
+static PyObject *indirect_contiguous = 0;
+static int __pyx_memoryview_thread_locks_used;
+static PyThread_type_lock __pyx_memoryview_thread_locks[8];
+static void __pyx_f_15monotonic_align_4core_maximum_path_each(__Pyx_memviewslice, __Pyx_memviewslice, int, int, struct __pyx_opt_args_15monotonic_align_4core_maximum_path_each *__pyx_optional_args); /*proto*/
+static void __pyx_f_15monotonic_align_4core_maximum_path_c(__Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, int __pyx_skip_dispatch); /*proto*/
+static struct __pyx_array_obj *__pyx_array_new(PyObject *, Py_ssize_t, char *, char *, char *); /*proto*/
+static void *__pyx_align_pointer(void *, size_t); /*proto*/
+static PyObject *__pyx_memoryview_new(PyObject *, int, int, __Pyx_TypeInfo *); /*proto*/
+static CYTHON_INLINE int __pyx_memoryview_check(PyObject *); /*proto*/
+static PyObject *_unellipsify(PyObject *, int); /*proto*/
+static PyObject *assert_direct_dimensions(Py_ssize_t *, int); /*proto*/
+static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *, PyObject *); /*proto*/
+static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int, int); /*proto*/
+static char *__pyx_pybuffer_index(Py_buffer *, char *, Py_ssize_t, Py_ssize_t); /*proto*/
+static int __pyx_memslice_transpose(__Pyx_memviewslice *); /*proto*/
+static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice, int, PyObject *(*)(char *), int (*)(char *, PyObject *), int); /*proto*/
+static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/
+static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/
+static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *); /*proto*/
+static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/
+static Py_ssize_t abs_py_ssize_t(Py_ssize_t); /*proto*/
+static char __pyx_get_best_slice_order(__Pyx_memviewslice *, int); /*proto*/
+static void _copy_strided_to_strided(char *, Py_ssize_t *, char *, Py_ssize_t *, Py_ssize_t *, Py_ssize_t *, int, size_t); /*proto*/
+static void copy_strided_to_strided(__Pyx_memviewslice *, __Pyx_memviewslice *, int, size_t); /*proto*/
+static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *, int); /*proto*/
+static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *, Py_ssize_t *, Py_ssize_t, int, char); /*proto*/
+static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *, __Pyx_memviewslice *, char, int); /*proto*/
+static int __pyx_memoryview_err_extents(int, Py_ssize_t, Py_ssize_t); /*proto*/
+static int __pyx_memoryview_err_dim(PyObject *, char *, int); /*proto*/
+static int __pyx_memoryview_err(PyObject *, char *); /*proto*/
+static int __pyx_memoryview_copy_contents(__Pyx_memviewslice, __Pyx_memviewslice, int, int, int); /*proto*/
+static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *, int, int); /*proto*/
+static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *, int, int, int); /*proto*/
+static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *, Py_ssize_t *, Py_ssize_t *, int, int); /*proto*/
+static void __pyx_memoryview_refcount_objects_in_slice(char *, Py_ssize_t *, Py_ssize_t *, int, int); /*proto*/
+static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *, int, size_t, void *, int); /*proto*/
+static void __pyx_memoryview__slice_assign_scalar(char *, Py_ssize_t *, Py_ssize_t *, int, size_t, void *); /*proto*/
+static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *, PyObject *); /*proto*/
+static __Pyx_TypeInfo __Pyx_TypeInfo_int = { "int", NULL, sizeof(int), { 0 }, 0, IS_UNSIGNED(int) ? 'U' : 'I', IS_UNSIGNED(int), 0 };
+static __Pyx_TypeInfo __Pyx_TypeInfo_float = { "float", NULL, sizeof(float), { 0 }, 0, 'R', 0, 0 };
+#define __Pyx_MODULE_NAME "monotonic_align.core"
+extern int __pyx_module_is_main_monotonic_align__core;
+int __pyx_module_is_main_monotonic_align__core = 0;
+
+/* Implementation of 'monotonic_align.core' */
+static PyObject *__pyx_builtin_range;
+static PyObject *__pyx_builtin_ValueError;
+static PyObject *__pyx_builtin_MemoryError;
+static PyObject *__pyx_builtin_enumerate;
+static PyObject *__pyx_builtin_TypeError;
+static PyObject *__pyx_builtin_Ellipsis;
+static PyObject *__pyx_builtin_id;
+static PyObject *__pyx_builtin_IndexError;
+static const char __pyx_k_O[] = "O";
+static const char __pyx_k_c[] = "c";
+static const char __pyx_k_id[] = "id";
+static const char __pyx_k_new[] = "__new__";
+static const char __pyx_k_obj[] = "obj";
+static const char __pyx_k_base[] = "base";
+static const char __pyx_k_dict[] = "__dict__";
+static const char __pyx_k_main[] = "__main__";
+static const char __pyx_k_mode[] = "mode";
+static const char __pyx_k_name[] = "name";
+static const char __pyx_k_ndim[] = "ndim";
+static const char __pyx_k_pack[] = "pack";
+static const char __pyx_k_size[] = "size";
+static const char __pyx_k_step[] = "step";
+static const char __pyx_k_stop[] = "stop";
+static const char __pyx_k_t_xs[] = "t_xs";
+static const char __pyx_k_t_ys[] = "t_ys";
+static const char __pyx_k_test[] = "__test__";
+static const char __pyx_k_ASCII[] = "ASCII";
+static const char __pyx_k_class[] = "__class__";
+static const char __pyx_k_error[] = "error";
+static const char __pyx_k_flags[] = "flags";
+static const char __pyx_k_paths[] = "paths";
+static const char __pyx_k_range[] = "range";
+static const char __pyx_k_shape[] = "shape";
+static const char __pyx_k_start[] = "start";
+static const char __pyx_k_encode[] = "encode";
+static const char __pyx_k_format[] = "format";
+static const char __pyx_k_import[] = "__import__";
+static const char __pyx_k_name_2[] = "__name__";
+static const char __pyx_k_pickle[] = "pickle";
+static const char __pyx_k_reduce[] = "__reduce__";
+static const char __pyx_k_struct[] = "struct";
+static const char __pyx_k_unpack[] = "unpack";
+static const char __pyx_k_update[] = "update";
+static const char __pyx_k_values[] = "values";
+static const char __pyx_k_fortran[] = "fortran";
+static const char __pyx_k_memview[] = "memview";
+static const char __pyx_k_Ellipsis[] = "Ellipsis";
+static const char __pyx_k_getstate[] = "__getstate__";
+static const char __pyx_k_itemsize[] = "itemsize";
+static const char __pyx_k_pyx_type[] = "__pyx_type";
+static const char __pyx_k_setstate[] = "__setstate__";
+static const char __pyx_k_TypeError[] = "TypeError";
+static const char __pyx_k_enumerate[] = "enumerate";
+static const char __pyx_k_pyx_state[] = "__pyx_state";
+static const char __pyx_k_reduce_ex[] = "__reduce_ex__";
+static const char __pyx_k_IndexError[] = "IndexError";
+static const char __pyx_k_ValueError[] = "ValueError";
+static const char __pyx_k_pyx_result[] = "__pyx_result";
+static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__";
+static const char __pyx_k_MemoryError[] = "MemoryError";
+static const char __pyx_k_PickleError[] = "PickleError";
+static const char __pyx_k_pyx_checksum[] = "__pyx_checksum";
+static const char __pyx_k_stringsource[] = "stringsource";
+static const char __pyx_k_pyx_getbuffer[] = "__pyx_getbuffer";
+static const char __pyx_k_reduce_cython[] = "__reduce_cython__";
+static const char __pyx_k_View_MemoryView[] = "View.MemoryView";
+static const char __pyx_k_allocate_buffer[] = "allocate_buffer";
+static const char __pyx_k_dtype_is_object[] = "dtype_is_object";
+static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError";
+static const char __pyx_k_setstate_cython[] = "__setstate_cython__";
+static const char __pyx_k_pyx_unpickle_Enum[] = "__pyx_unpickle_Enum";
+static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback";
+static const char __pyx_k_strided_and_direct[] = "";
+static const char __pyx_k_strided_and_indirect[] = "";
+static const char __pyx_k_contiguous_and_direct[] = "";
+static const char __pyx_k_MemoryView_of_r_object[] = "";
+static const char __pyx_k_MemoryView_of_r_at_0x_x[] = "";
+static const char __pyx_k_contiguous_and_indirect[] = "";
+static const char __pyx_k_Cannot_index_with_type_s[] = "Cannot index with type '%s'";
+static const char __pyx_k_Invalid_shape_in_axis_d_d[] = "Invalid shape in axis %d: %d.";
+static const char __pyx_k_itemsize_0_for_cython_array[] = "itemsize <= 0 for cython.array";
+static const char __pyx_k_unable_to_allocate_array_data[] = "unable to allocate array data.";
+static const char __pyx_k_strided_and_direct_or_indirect[] = "";
+static const char __pyx_k_Buffer_view_does_not_expose_stri[] = "Buffer view does not expose strides";
+static const char __pyx_k_Can_only_create_a_buffer_that_is[] = "Can only create a buffer that is contiguous in memory.";
+static const char __pyx_k_Cannot_assign_to_read_only_memor[] = "Cannot assign to read-only memoryview";
+static const char __pyx_k_Cannot_create_writable_memory_vi[] = "Cannot create writable memory view from read-only memoryview";
+static const char __pyx_k_Empty_shape_tuple_for_cython_arr[] = "Empty shape tuple for cython.array";
+static const char __pyx_k_Incompatible_checksums_0x_x_vs_0[] = "Incompatible checksums (0x%x vs (0xb068931, 0x82a3537, 0x6ae9995) = (name))";
+static const char __pyx_k_Indirect_dimensions_not_supporte[] = "Indirect dimensions not supported";
+static const char __pyx_k_Invalid_mode_expected_c_or_fortr[] = "Invalid mode, expected 'c' or 'fortran', got %s";
+static const char __pyx_k_Out_of_bounds_on_buffer_access_a[] = "Out of bounds on buffer access (axis %d)";
+static const char __pyx_k_Unable_to_convert_item_to_object[] = "Unable to convert item to object";
+static const char __pyx_k_got_differing_extents_in_dimensi[] = "got differing extents in dimension %d (got %d and %d)";
+static const char __pyx_k_no_default___reduce___due_to_non[] = "no default __reduce__ due to non-trivial __cinit__";
+static const char __pyx_k_unable_to_allocate_shape_and_str[] = "unable to allocate shape and strides.";
+static PyObject *__pyx_n_s_ASCII;
+static PyObject *__pyx_kp_s_Buffer_view_does_not_expose_stri;
+static PyObject *__pyx_kp_s_Can_only_create_a_buffer_that_is;
+static PyObject *__pyx_kp_s_Cannot_assign_to_read_only_memor;
+static PyObject *__pyx_kp_s_Cannot_create_writable_memory_vi;
+static PyObject *__pyx_kp_s_Cannot_index_with_type_s;
+static PyObject *__pyx_n_s_Ellipsis;
+static PyObject *__pyx_kp_s_Empty_shape_tuple_for_cython_arr;
+static PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0;
+static PyObject *__pyx_n_s_IndexError;
+static PyObject *__pyx_kp_s_Indirect_dimensions_not_supporte;
+static PyObject *__pyx_kp_s_Invalid_mode_expected_c_or_fortr;
+static PyObject *__pyx_kp_s_Invalid_shape_in_axis_d_d;
+static PyObject *__pyx_n_s_MemoryError;
+static PyObject *__pyx_kp_s_MemoryView_of_r_at_0x_x;
+static PyObject *__pyx_kp_s_MemoryView_of_r_object;
+static PyObject *__pyx_n_b_O;
+static PyObject *__pyx_kp_s_Out_of_bounds_on_buffer_access_a;
+static PyObject *__pyx_n_s_PickleError;
+static PyObject *__pyx_n_s_TypeError;
+static PyObject *__pyx_kp_s_Unable_to_convert_item_to_object;
+static PyObject *__pyx_n_s_ValueError;
+static PyObject *__pyx_n_s_View_MemoryView;
+static PyObject *__pyx_n_s_allocate_buffer;
+static PyObject *__pyx_n_s_base;
+static PyObject *__pyx_n_s_c;
+static PyObject *__pyx_n_u_c;
+static PyObject *__pyx_n_s_class;
+static PyObject *__pyx_n_s_cline_in_traceback;
+static PyObject *__pyx_kp_s_contiguous_and_direct;
+static PyObject *__pyx_kp_s_contiguous_and_indirect;
+static PyObject *__pyx_n_s_dict;
+static PyObject *__pyx_n_s_dtype_is_object;
+static PyObject *__pyx_n_s_encode;
+static PyObject *__pyx_n_s_enumerate;
+static PyObject *__pyx_n_s_error;
+static PyObject *__pyx_n_s_flags;
+static PyObject *__pyx_n_s_format;
+static PyObject *__pyx_n_s_fortran;
+static PyObject *__pyx_n_u_fortran;
+static PyObject *__pyx_n_s_getstate;
+static PyObject *__pyx_kp_s_got_differing_extents_in_dimensi;
+static PyObject *__pyx_n_s_id;
+static PyObject *__pyx_n_s_import;
+static PyObject *__pyx_n_s_itemsize;
+static PyObject *__pyx_kp_s_itemsize_0_for_cython_array;
+static PyObject *__pyx_n_s_main;
+static PyObject *__pyx_n_s_memview;
+static PyObject *__pyx_n_s_mode;
+static PyObject *__pyx_n_s_name;
+static PyObject *__pyx_n_s_name_2;
+static PyObject *__pyx_n_s_ndim;
+static PyObject *__pyx_n_s_new;
+static PyObject *__pyx_kp_s_no_default___reduce___due_to_non;
+static PyObject *__pyx_n_s_obj;
+static PyObject *__pyx_n_s_pack;
+static PyObject *__pyx_n_s_paths;
+static PyObject *__pyx_n_s_pickle;
+static PyObject *__pyx_n_s_pyx_PickleError;
+static PyObject *__pyx_n_s_pyx_checksum;
+static PyObject *__pyx_n_s_pyx_getbuffer;
+static PyObject *__pyx_n_s_pyx_result;
+static PyObject *__pyx_n_s_pyx_state;
+static PyObject *__pyx_n_s_pyx_type;
+static PyObject *__pyx_n_s_pyx_unpickle_Enum;
+static PyObject *__pyx_n_s_pyx_vtable;
+static PyObject *__pyx_n_s_range;
+static PyObject *__pyx_n_s_reduce;
+static PyObject *__pyx_n_s_reduce_cython;
+static PyObject *__pyx_n_s_reduce_ex;
+static PyObject *__pyx_n_s_setstate;
+static PyObject *__pyx_n_s_setstate_cython;
+static PyObject *__pyx_n_s_shape;
+static PyObject *__pyx_n_s_size;
+static PyObject *__pyx_n_s_start;
+static PyObject *__pyx_n_s_step;
+static PyObject *__pyx_n_s_stop;
+static PyObject *__pyx_kp_s_strided_and_direct;
+static PyObject *__pyx_kp_s_strided_and_direct_or_indirect;
+static PyObject *__pyx_kp_s_strided_and_indirect;
+static PyObject *__pyx_kp_s_stringsource;
+static PyObject *__pyx_n_s_struct;
+static PyObject *__pyx_n_s_t_xs;
+static PyObject *__pyx_n_s_t_ys;
+static PyObject *__pyx_n_s_test;
+static PyObject *__pyx_kp_s_unable_to_allocate_array_data;
+static PyObject *__pyx_kp_s_unable_to_allocate_shape_and_str;
+static PyObject *__pyx_n_s_unpack;
+static PyObject *__pyx_n_s_update;
+static PyObject *__pyx_n_s_values;
+static PyObject *__pyx_pf_15monotonic_align_4core_maximum_path_c(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_paths, __Pyx_memviewslice __pyx_v_values, __Pyx_memviewslice __pyx_v_t_ys, __Pyx_memviewslice __pyx_v_t_xs); /* proto */
+static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, PyObject *__pyx_v_format, PyObject *__pyx_v_mode, int __pyx_v_allocate_buffer); /* proto */
+static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(struct __pyx_array_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
+static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__pyx_v_self); /* proto */
+static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr); /* proto */
+static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item); /* proto */
+static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
+static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
+static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object); /* proto */
+static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto */
+static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto */
+static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
+static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf___pyx_memoryviewslice___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf___pyx_memoryviewslice_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */
+static PyObject *__pyx_tp_new_array(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_memoryview(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_int_0;
+static PyObject *__pyx_int_1;
+static PyObject *__pyx_int_112105877;
+static PyObject *__pyx_int_136983863;
+static PyObject *__pyx_int_184977713;
+static PyObject *__pyx_int_neg_1;
+static float __pyx_k_;
+static PyObject *__pyx_tuple__2;
+static PyObject *__pyx_tuple__3;
+static PyObject *__pyx_tuple__4;
+static PyObject *__pyx_tuple__5;
+static PyObject *__pyx_tuple__6;
+static PyObject *__pyx_tuple__7;
+static PyObject *__pyx_tuple__8;
+static PyObject *__pyx_tuple__9;
+static PyObject *__pyx_slice__16;
+static PyObject *__pyx_tuple__10;
+static PyObject *__pyx_tuple__11;
+static PyObject *__pyx_tuple__12;
+static PyObject *__pyx_tuple__13;
+static PyObject *__pyx_tuple__14;
+static PyObject *__pyx_tuple__15;
+static PyObject *__pyx_tuple__17;
+static PyObject *__pyx_tuple__18;
+static PyObject *__pyx_tuple__19;
+static PyObject *__pyx_tuple__20;
+static PyObject *__pyx_tuple__21;
+static PyObject *__pyx_tuple__22;
+static PyObject *__pyx_tuple__23;
+static PyObject *__pyx_tuple__24;
+static PyObject *__pyx_tuple__25;
+static PyObject *__pyx_tuple__26;
+static PyObject *__pyx_codeobj__27;
+/* Late includes */
+
+/* "monotonic_align/core.pyx":7
+ * @cython.boundscheck(False)
+ * @cython.wraparound(False)
+ * cdef void maximum_path_each(int[:,::1] path, float[:,::1] value, int t_y, int t_x, float max_neg_val=-1e9) nogil: # <<<<<<<<<<<<<<
+ * cdef int x
+ * cdef int y
+ */
+
+static void __pyx_f_15monotonic_align_4core_maximum_path_each(__Pyx_memviewslice __pyx_v_path, __Pyx_memviewslice __pyx_v_value, int __pyx_v_t_y, int __pyx_v_t_x, struct __pyx_opt_args_15monotonic_align_4core_maximum_path_each *__pyx_optional_args) {
+ float __pyx_v_max_neg_val = __pyx_k_;
+ int __pyx_v_x;
+ int __pyx_v_y;
+ float __pyx_v_v_prev;
+ float __pyx_v_v_cur;
+ int __pyx_v_index;
+ int __pyx_t_1;
+ int __pyx_t_2;
+ int __pyx_t_3;
+ long __pyx_t_4;
+ int __pyx_t_5;
+ long __pyx_t_6;
+ long __pyx_t_7;
+ int __pyx_t_8;
+ Py_ssize_t __pyx_t_9;
+ Py_ssize_t __pyx_t_10;
+ float __pyx_t_11;
+ float __pyx_t_12;
+ float __pyx_t_13;
+ int __pyx_t_14;
+ Py_ssize_t __pyx_t_15;
+ Py_ssize_t __pyx_t_16;
+ if (__pyx_optional_args) {
+ if (__pyx_optional_args->__pyx_n > 0) {
+ __pyx_v_max_neg_val = __pyx_optional_args->max_neg_val;
+ }
+ }
+
+ /* "monotonic_align/core.pyx":13
+ * cdef float v_cur
+ * cdef float tmp
+ * cdef int index = t_x - 1 # <<<<<<<<<<<<<<
+ *
+ * for y in range(t_y):
+ */
+ __pyx_v_index = (__pyx_v_t_x - 1);
+
+ /* "monotonic_align/core.pyx":15
+ * cdef int index = t_x - 1
+ *
+ * for y in range(t_y): # <<<<<<<<<<<<<<
+ * for x in range(max(0, t_x + y - t_y), min(t_x, y + 1)):
+ * if x == y:
+ */
+ __pyx_t_1 = __pyx_v_t_y;
+ __pyx_t_2 = __pyx_t_1;
+ for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
+ __pyx_v_y = __pyx_t_3;
+
+ /* "monotonic_align/core.pyx":16
+ *
+ * for y in range(t_y):
+ * for x in range(max(0, t_x + y - t_y), min(t_x, y + 1)): # <<<<<<<<<<<<<<
+ * if x == y:
+ * v_cur = max_neg_val
+ */
+ __pyx_t_4 = (__pyx_v_y + 1);
+ __pyx_t_5 = __pyx_v_t_x;
+ if (((__pyx_t_4 < __pyx_t_5) != 0)) {
+ __pyx_t_6 = __pyx_t_4;
+ } else {
+ __pyx_t_6 = __pyx_t_5;
+ }
+ __pyx_t_4 = __pyx_t_6;
+ __pyx_t_5 = ((__pyx_v_t_x + __pyx_v_y) - __pyx_v_t_y);
+ __pyx_t_6 = 0;
+ if (((__pyx_t_5 > __pyx_t_6) != 0)) {
+ __pyx_t_7 = __pyx_t_5;
+ } else {
+ __pyx_t_7 = __pyx_t_6;
+ }
+ __pyx_t_6 = __pyx_t_4;
+ for (__pyx_t_5 = __pyx_t_7; __pyx_t_5 < __pyx_t_6; __pyx_t_5+=1) {
+ __pyx_v_x = __pyx_t_5;
+
+ /* "monotonic_align/core.pyx":17
+ * for y in range(t_y):
+ * for x in range(max(0, t_x + y - t_y), min(t_x, y + 1)):
+ * if x == y: # <<<<<<<<<<<<<<
+ * v_cur = max_neg_val
+ * else:
+ */
+ __pyx_t_8 = ((__pyx_v_x == __pyx_v_y) != 0);
+ if (__pyx_t_8) {
+
+ /* "monotonic_align/core.pyx":18
+ * for x in range(max(0, t_x + y - t_y), min(t_x, y + 1)):
+ * if x == y:
+ * v_cur = max_neg_val # <<<<<<<<<<<<<<
+ * else:
+ * v_cur = value[y-1, x]
+ */
+ __pyx_v_v_cur = __pyx_v_max_neg_val;
+
+ /* "monotonic_align/core.pyx":17
+ * for y in range(t_y):
+ * for x in range(max(0, t_x + y - t_y), min(t_x, y + 1)):
+ * if x == y: # <<<<<<<<<<<<<<
+ * v_cur = max_neg_val
+ * else:
+ */
+ goto __pyx_L7;
+ }
+
+ /* "monotonic_align/core.pyx":20
+ * v_cur = max_neg_val
+ * else:
+ * v_cur = value[y-1, x] # <<<<<<<<<<<<<<
+ * if x == 0:
+ * if y == 0:
+ */
+ /*else*/ {
+ __pyx_t_9 = (__pyx_v_y - 1);
+ __pyx_t_10 = __pyx_v_x;
+ __pyx_v_v_cur = (*((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_value.data + __pyx_t_9 * __pyx_v_value.strides[0]) )) + __pyx_t_10)) )));
+ }
+ __pyx_L7:;
+
+ /* "monotonic_align/core.pyx":21
+ * else:
+ * v_cur = value[y-1, x]
+ * if x == 0: # <<<<<<<<<<<<<<
+ * if y == 0:
+ * v_prev = 0.
+ */
+ __pyx_t_8 = ((__pyx_v_x == 0) != 0);
+ if (__pyx_t_8) {
+
+ /* "monotonic_align/core.pyx":22
+ * v_cur = value[y-1, x]
+ * if x == 0:
+ * if y == 0: # <<<<<<<<<<<<<<
+ * v_prev = 0.
+ * else:
+ */
+ __pyx_t_8 = ((__pyx_v_y == 0) != 0);
+ if (__pyx_t_8) {
+
+ /* "monotonic_align/core.pyx":23
+ * if x == 0:
+ * if y == 0:
+ * v_prev = 0. # <<<<<<<<<<<<<<
+ * else:
+ * v_prev = max_neg_val
+ */
+ __pyx_v_v_prev = 0.;
+
+ /* "monotonic_align/core.pyx":22
+ * v_cur = value[y-1, x]
+ * if x == 0:
+ * if y == 0: # <<<<<<<<<<<<<<
+ * v_prev = 0.
+ * else:
+ */
+ goto __pyx_L9;
+ }
+
+ /* "monotonic_align/core.pyx":25
+ * v_prev = 0.
+ * else:
+ * v_prev = max_neg_val # <<<<<<<<<<<<<<
+ * else:
+ * v_prev = value[y-1, x-1]
+ */
+ /*else*/ {
+ __pyx_v_v_prev = __pyx_v_max_neg_val;
+ }
+ __pyx_L9:;
+
+ /* "monotonic_align/core.pyx":21
+ * else:
+ * v_cur = value[y-1, x]
+ * if x == 0: # <<<<<<<<<<<<<<
+ * if y == 0:
+ * v_prev = 0.
+ */
+ goto __pyx_L8;
+ }
+
+ /* "monotonic_align/core.pyx":27
+ * v_prev = max_neg_val
+ * else:
+ * v_prev = value[y-1, x-1] # <<<<<<<<<<<<<<
+ * value[y, x] += max(v_prev, v_cur)
+ *
+ */
+ /*else*/ {
+ __pyx_t_10 = (__pyx_v_y - 1);
+ __pyx_t_9 = (__pyx_v_x - 1);
+ __pyx_v_v_prev = (*((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_value.data + __pyx_t_10 * __pyx_v_value.strides[0]) )) + __pyx_t_9)) )));
+ }
+ __pyx_L8:;
+
+ /* "monotonic_align/core.pyx":28
+ * else:
+ * v_prev = value[y-1, x-1]
+ * value[y, x] += max(v_prev, v_cur) # <<<<<<<<<<<<<<
+ *
+ * for y in range(t_y - 1, -1, -1):
+ */
+ __pyx_t_11 = __pyx_v_v_cur;
+ __pyx_t_12 = __pyx_v_v_prev;
+ if (((__pyx_t_11 > __pyx_t_12) != 0)) {
+ __pyx_t_13 = __pyx_t_11;
+ } else {
+ __pyx_t_13 = __pyx_t_12;
+ }
+ __pyx_t_9 = __pyx_v_y;
+ __pyx_t_10 = __pyx_v_x;
+ *((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_value.data + __pyx_t_9 * __pyx_v_value.strides[0]) )) + __pyx_t_10)) )) += __pyx_t_13;
+ }
+ }
+
+ /* "monotonic_align/core.pyx":30
+ * value[y, x] += max(v_prev, v_cur)
+ *
+ * for y in range(t_y - 1, -1, -1): # <<<<<<<<<<<<<<
+ * path[y, index] = 1
+ * if index != 0 and (index == y or value[y-1, index] < value[y-1, index-1]):
+ */
+ for (__pyx_t_1 = (__pyx_v_t_y - 1); __pyx_t_1 > -1; __pyx_t_1-=1) {
+ __pyx_v_y = __pyx_t_1;
+
+ /* "monotonic_align/core.pyx":31
+ *
+ * for y in range(t_y - 1, -1, -1):
+ * path[y, index] = 1 # <<<<<<<<<<<<<<
+ * if index != 0 and (index == y or value[y-1, index] < value[y-1, index-1]):
+ * index = index - 1
+ */
+ __pyx_t_10 = __pyx_v_y;
+ __pyx_t_9 = __pyx_v_index;
+ *((int *) ( /* dim=1 */ ((char *) (((int *) ( /* dim=0 */ (__pyx_v_path.data + __pyx_t_10 * __pyx_v_path.strides[0]) )) + __pyx_t_9)) )) = 1;
+
+ /* "monotonic_align/core.pyx":32
+ * for y in range(t_y - 1, -1, -1):
+ * path[y, index] = 1
+ * if index != 0 and (index == y or value[y-1, index] < value[y-1, index-1]): # <<<<<<<<<<<<<<
+ * index = index - 1
+ *
+ */
+ __pyx_t_14 = ((__pyx_v_index != 0) != 0);
+ if (__pyx_t_14) {
+ } else {
+ __pyx_t_8 = __pyx_t_14;
+ goto __pyx_L13_bool_binop_done;
+ }
+ __pyx_t_14 = ((__pyx_v_index == __pyx_v_y) != 0);
+ if (!__pyx_t_14) {
+ } else {
+ __pyx_t_8 = __pyx_t_14;
+ goto __pyx_L13_bool_binop_done;
+ }
+ __pyx_t_9 = (__pyx_v_y - 1);
+ __pyx_t_10 = __pyx_v_index;
+ __pyx_t_15 = (__pyx_v_y - 1);
+ __pyx_t_16 = (__pyx_v_index - 1);
+ __pyx_t_14 = (((*((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_value.data + __pyx_t_9 * __pyx_v_value.strides[0]) )) + __pyx_t_10)) ))) < (*((float *) ( /* dim=1 */ ((char *) (((float *) ( /* dim=0 */ (__pyx_v_value.data + __pyx_t_15 * __pyx_v_value.strides[0]) )) + __pyx_t_16)) )))) != 0);
+ __pyx_t_8 = __pyx_t_14;
+ __pyx_L13_bool_binop_done:;
+ if (__pyx_t_8) {
+
+ /* "monotonic_align/core.pyx":33
+ * path[y, index] = 1
+ * if index != 0 and (index == y or value[y-1, index] < value[y-1, index-1]):
+ * index = index - 1 # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_v_index = (__pyx_v_index - 1);
+
+ /* "monotonic_align/core.pyx":32
+ * for y in range(t_y - 1, -1, -1):
+ * path[y, index] = 1
+ * if index != 0 and (index == y or value[y-1, index] < value[y-1, index-1]): # <<<<<<<<<<<<<<
+ * index = index - 1
+ *
+ */
+ }
+ }
+
+ /* "monotonic_align/core.pyx":7
+ * @cython.boundscheck(False)
+ * @cython.wraparound(False)
+ * cdef void maximum_path_each(int[:,::1] path, float[:,::1] value, int t_y, int t_x, float max_neg_val=-1e9) nogil: # <<<<<<<<<<<<<<
+ * cdef int x
+ * cdef int y
+ */
+
+ /* function exit code */
+}
+
+/* "monotonic_align/core.pyx":38
+ * @cython.boundscheck(False)
+ * @cython.wraparound(False)
+ * cpdef void maximum_path_c(int[:,:,::1] paths, float[:,:,::1] values, int[::1] t_ys, int[::1] t_xs) nogil: # <<<<<<<<<<<<<<
+ * cdef int b = paths.shape[0]
+ * cdef int i
+ */
+
+static PyObject *__pyx_pw_15monotonic_align_4core_1maximum_path_c(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static void __pyx_f_15monotonic_align_4core_maximum_path_c(__Pyx_memviewslice __pyx_v_paths, __Pyx_memviewslice __pyx_v_values, __Pyx_memviewslice __pyx_v_t_ys, __Pyx_memviewslice __pyx_v_t_xs, CYTHON_UNUSED int __pyx_skip_dispatch) {
+ CYTHON_UNUSED int __pyx_v_b;
+ int __pyx_v_i;
+ int __pyx_t_1;
+ int __pyx_t_2;
+ int __pyx_t_3;
+ __Pyx_memviewslice __pyx_t_4 = { 0, 0, { 0 }, { 0 }, { 0 } };
+ __Pyx_memviewslice __pyx_t_5 = { 0, 0, { 0 }, { 0 }, { 0 } };
+ Py_ssize_t __pyx_t_6;
+ Py_ssize_t __pyx_t_7;
+
+ /* "monotonic_align/core.pyx":39
+ * @cython.wraparound(False)
+ * cpdef void maximum_path_c(int[:,:,::1] paths, float[:,:,::1] values, int[::1] t_ys, int[::1] t_xs) nogil:
+ * cdef int b = paths.shape[0] # <<<<<<<<<<<<<<
+ * cdef int i
+ * for i in prange(b, nogil=True):
+ */
+ __pyx_v_b = (__pyx_v_paths.shape[0]);
+
+ /* "monotonic_align/core.pyx":41
+ * cdef int b = paths.shape[0]
+ * cdef int i
+ * for i in prange(b, nogil=True): # <<<<<<<<<<<<<<
+ * maximum_path_each(paths[i], values[i], t_ys[i], t_xs[i])
+ */
+ {
+ #ifdef WITH_THREAD
+ PyThreadState *_save;
+ Py_UNBLOCK_THREADS
+ __Pyx_FastGIL_Remember();
+ #endif
+ /*try:*/ {
+ __pyx_t_1 = __pyx_v_b;
+ if ((1 == 0)) abort();
+ {
+ #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
+ #undef likely
+ #undef unlikely
+ #define likely(x) (x)
+ #define unlikely(x) (x)
+ #endif
+ __pyx_t_3 = (__pyx_t_1 - 0 + 1 - 1/abs(1)) / 1;
+ if (__pyx_t_3 > 0)
+ {
+ #ifdef _OPENMP
+ #pragma omp parallel private(__pyx_t_6, __pyx_t_7) firstprivate(__pyx_t_4, __pyx_t_5)
+ #endif /* _OPENMP */
+ {
+ #ifdef _OPENMP
+ #pragma omp for firstprivate(__pyx_v_i) lastprivate(__pyx_v_i)
+ #endif /* _OPENMP */
+ for (__pyx_t_2 = 0; __pyx_t_2 < __pyx_t_3; __pyx_t_2++){
+ {
+ __pyx_v_i = (int)(0 + 1 * __pyx_t_2);
+
+ /* "monotonic_align/core.pyx":42
+ * cdef int i
+ * for i in prange(b, nogil=True):
+ * maximum_path_each(paths[i], values[i], t_ys[i], t_xs[i]) # <<<<<<<<<<<<<<
+ */
+ __pyx_t_4.data = __pyx_v_paths.data;
+ __pyx_t_4.memview = __pyx_v_paths.memview;
+ __PYX_INC_MEMVIEW(&__pyx_t_4, 0);
+ {
+ Py_ssize_t __pyx_tmp_idx = __pyx_v_i;
+ Py_ssize_t __pyx_tmp_stride = __pyx_v_paths.strides[0];
+ __pyx_t_4.data += __pyx_tmp_idx * __pyx_tmp_stride;
+}
+
+__pyx_t_4.shape[0] = __pyx_v_paths.shape[1];
+__pyx_t_4.strides[0] = __pyx_v_paths.strides[1];
+ __pyx_t_4.suboffsets[0] = -1;
+
+__pyx_t_4.shape[1] = __pyx_v_paths.shape[2];
+__pyx_t_4.strides[1] = __pyx_v_paths.strides[2];
+ __pyx_t_4.suboffsets[1] = -1;
+
+__pyx_t_5.data = __pyx_v_values.data;
+ __pyx_t_5.memview = __pyx_v_values.memview;
+ __PYX_INC_MEMVIEW(&__pyx_t_5, 0);
+ {
+ Py_ssize_t __pyx_tmp_idx = __pyx_v_i;
+ Py_ssize_t __pyx_tmp_stride = __pyx_v_values.strides[0];
+ __pyx_t_5.data += __pyx_tmp_idx * __pyx_tmp_stride;
+}
+
+__pyx_t_5.shape[0] = __pyx_v_values.shape[1];
+__pyx_t_5.strides[0] = __pyx_v_values.strides[1];
+ __pyx_t_5.suboffsets[0] = -1;
+
+__pyx_t_5.shape[1] = __pyx_v_values.shape[2];
+__pyx_t_5.strides[1] = __pyx_v_values.strides[2];
+ __pyx_t_5.suboffsets[1] = -1;
+
+__pyx_t_6 = __pyx_v_i;
+ __pyx_t_7 = __pyx_v_i;
+ __pyx_f_15monotonic_align_4core_maximum_path_each(__pyx_t_4, __pyx_t_5, (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_t_ys.data) + __pyx_t_6)) ))), (*((int *) ( /* dim=0 */ ((char *) (((int *) __pyx_v_t_xs.data) + __pyx_t_7)) ))), NULL);
+ __PYX_XDEC_MEMVIEW(&__pyx_t_4, 0);
+ __pyx_t_4.memview = NULL;
+ __pyx_t_4.data = NULL;
+ __PYX_XDEC_MEMVIEW(&__pyx_t_5, 0);
+ __pyx_t_5.memview = NULL;
+ __pyx_t_5.data = NULL;
+ }
+ }
+ }
+ }
+ }
+ #if ((defined(__APPLE__) || defined(__OSX__)) && (defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))))
+ #undef likely
+ #undef unlikely
+ #define likely(x) __builtin_expect(!!(x), 1)
+ #define unlikely(x) __builtin_expect(!!(x), 0)
+ #endif
+ }
+
+ /* "monotonic_align/core.pyx":41
+ * cdef int b = paths.shape[0]
+ * cdef int i
+ * for i in prange(b, nogil=True): # <<<<<<<<<<<<<<
+ * maximum_path_each(paths[i], values[i], t_ys[i], t_xs[i])
+ */
+ /*finally:*/ {
+ /*normal exit:*/{
+ #ifdef WITH_THREAD
+ __Pyx_FastGIL_Forget();
+ Py_BLOCK_THREADS
+ #endif
+ goto __pyx_L5;
+ }
+ __pyx_L5:;
+ }
+ }
+
+ /* "monotonic_align/core.pyx":38
+ * @cython.boundscheck(False)
+ * @cython.wraparound(False)
+ * cpdef void maximum_path_c(int[:,:,::1] paths, float[:,:,::1] values, int[::1] t_ys, int[::1] t_xs) nogil: # <<<<<<<<<<<<<<
+ * cdef int b = paths.shape[0]
+ * cdef int i
+ */
+
+ /* function exit code */
+}
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15monotonic_align_4core_1maximum_path_c(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyObject *__pyx_pw_15monotonic_align_4core_1maximum_path_c(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+ __Pyx_memviewslice __pyx_v_paths = { 0, 0, { 0 }, { 0 }, { 0 } };
+ __Pyx_memviewslice __pyx_v_values = { 0, 0, { 0 }, { 0 }, { 0 } };
+ __Pyx_memviewslice __pyx_v_t_ys = { 0, 0, { 0 }, { 0 }, { 0 } };
+ __Pyx_memviewslice __pyx_v_t_xs = { 0, 0, { 0 }, { 0 }, { 0 } };
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("maximum_path_c (wrapper)", 0);
+ {
+ static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_paths,&__pyx_n_s_values,&__pyx_n_s_t_ys,&__pyx_n_s_t_xs,0};
+ PyObject* values[4] = {0,0,0,0};
+ if (unlikely(__pyx_kwds)) {
+ Py_ssize_t kw_args;
+ const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+ switch (pos_args) {
+ case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+ CYTHON_FALLTHROUGH;
+ case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+ CYTHON_FALLTHROUGH;
+ case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+ CYTHON_FALLTHROUGH;
+ case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+ CYTHON_FALLTHROUGH;
+ case 0: break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ kw_args = PyDict_Size(__pyx_kwds);
+ switch (pos_args) {
+ case 0:
+ if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_paths)) != 0)) kw_args--;
+ else goto __pyx_L5_argtuple_error;
+ CYTHON_FALLTHROUGH;
+ case 1:
+ if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_values)) != 0)) kw_args--;
+ else {
+ __Pyx_RaiseArgtupleInvalid("maximum_path_c", 1, 4, 4, 1); __PYX_ERR(0, 38, __pyx_L3_error)
+ }
+ CYTHON_FALLTHROUGH;
+ case 2:
+ if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_t_ys)) != 0)) kw_args--;
+ else {
+ __Pyx_RaiseArgtupleInvalid("maximum_path_c", 1, 4, 4, 2); __PYX_ERR(0, 38, __pyx_L3_error)
+ }
+ CYTHON_FALLTHROUGH;
+ case 3:
+ if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_t_xs)) != 0)) kw_args--;
+ else {
+ __Pyx_RaiseArgtupleInvalid("maximum_path_c", 1, 4, 4, 3); __PYX_ERR(0, 38, __pyx_L3_error)
+ }
+ }
+ if (unlikely(kw_args > 0)) {
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "maximum_path_c") < 0)) __PYX_ERR(0, 38, __pyx_L3_error)
+ }
+ } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
+ goto __pyx_L5_argtuple_error;
+ } else {
+ values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+ values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+ values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+ values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+ }
+ __pyx_v_paths = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_int(values[0], PyBUF_WRITABLE); if (unlikely(!__pyx_v_paths.memview)) __PYX_ERR(0, 38, __pyx_L3_error)
+ __pyx_v_values = __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_float(values[1], PyBUF_WRITABLE); if (unlikely(!__pyx_v_values.memview)) __PYX_ERR(0, 38, __pyx_L3_error)
+ __pyx_v_t_ys = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[2], PyBUF_WRITABLE); if (unlikely(!__pyx_v_t_ys.memview)) __PYX_ERR(0, 38, __pyx_L3_error)
+ __pyx_v_t_xs = __Pyx_PyObject_to_MemoryviewSlice_dc_int(values[3], PyBUF_WRITABLE); if (unlikely(!__pyx_v_t_xs.memview)) __PYX_ERR(0, 38, __pyx_L3_error)
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L5_argtuple_error:;
+ __Pyx_RaiseArgtupleInvalid("maximum_path_c", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 38, __pyx_L3_error)
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("monotonic_align.core.maximum_path_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return NULL;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf_15monotonic_align_4core_maximum_path_c(__pyx_self, __pyx_v_paths, __pyx_v_values, __pyx_v_t_ys, __pyx_v_t_xs);
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15monotonic_align_4core_maximum_path_c(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_paths, __Pyx_memviewslice __pyx_v_values, __Pyx_memviewslice __pyx_v_t_ys, __Pyx_memviewslice __pyx_v_t_xs) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("maximum_path_c", 0);
+ __Pyx_XDECREF(__pyx_r);
+ if (unlikely(!__pyx_v_paths.memview)) { __Pyx_RaiseUnboundLocalError("paths"); __PYX_ERR(0, 38, __pyx_L1_error) }
+ if (unlikely(!__pyx_v_values.memview)) { __Pyx_RaiseUnboundLocalError("values"); __PYX_ERR(0, 38, __pyx_L1_error) }
+ if (unlikely(!__pyx_v_t_ys.memview)) { __Pyx_RaiseUnboundLocalError("t_ys"); __PYX_ERR(0, 38, __pyx_L1_error) }
+ if (unlikely(!__pyx_v_t_xs.memview)) { __Pyx_RaiseUnboundLocalError("t_xs"); __PYX_ERR(0, 38, __pyx_L1_error) }
+ __pyx_t_1 = __Pyx_void_to_None(__pyx_f_15monotonic_align_4core_maximum_path_c(__pyx_v_paths, __pyx_v_values, __pyx_v_t_ys, __pyx_v_t_xs, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 38, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("monotonic_align.core.maximum_path_c", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __PYX_XDEC_MEMVIEW(&__pyx_v_paths, 1);
+ __PYX_XDEC_MEMVIEW(&__pyx_v_values, 1);
+ __PYX_XDEC_MEMVIEW(&__pyx_v_t_ys, 1);
+ __PYX_XDEC_MEMVIEW(&__pyx_v_t_xs, 1);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":123
+ * cdef bint dtype_is_object
+ *
+ * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<<
+ * mode="c", bint allocate_buffer=True):
+ *
+ */
+
+/* Python wrapper */
+static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+ PyObject *__pyx_v_shape = 0;
+ Py_ssize_t __pyx_v_itemsize;
+ PyObject *__pyx_v_format = 0;
+ PyObject *__pyx_v_mode = 0;
+ int __pyx_v_allocate_buffer;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+ {
+ static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_shape,&__pyx_n_s_itemsize,&__pyx_n_s_format,&__pyx_n_s_mode,&__pyx_n_s_allocate_buffer,0};
+ PyObject* values[5] = {0,0,0,0,0};
+ values[3] = ((PyObject *)__pyx_n_s_c);
+ if (unlikely(__pyx_kwds)) {
+ Py_ssize_t kw_args;
+ const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+ switch (pos_args) {
+ case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+ CYTHON_FALLTHROUGH;
+ case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+ CYTHON_FALLTHROUGH;
+ case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+ CYTHON_FALLTHROUGH;
+ case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+ CYTHON_FALLTHROUGH;
+ case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+ CYTHON_FALLTHROUGH;
+ case 0: break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ kw_args = PyDict_Size(__pyx_kwds);
+ switch (pos_args) {
+ case 0:
+ if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shape)) != 0)) kw_args--;
+ else goto __pyx_L5_argtuple_error;
+ CYTHON_FALLTHROUGH;
+ case 1:
+ if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_itemsize)) != 0)) kw_args--;
+ else {
+ __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 1); __PYX_ERR(1, 123, __pyx_L3_error)
+ }
+ CYTHON_FALLTHROUGH;
+ case 2:
+ if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_format)) != 0)) kw_args--;
+ else {
+ __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 2); __PYX_ERR(1, 123, __pyx_L3_error)
+ }
+ CYTHON_FALLTHROUGH;
+ case 3:
+ if (kw_args > 0) {
+ PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_mode);
+ if (value) { values[3] = value; kw_args--; }
+ }
+ CYTHON_FALLTHROUGH;
+ case 4:
+ if (kw_args > 0) {
+ PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_allocate_buffer);
+ if (value) { values[4] = value; kw_args--; }
+ }
+ }
+ if (unlikely(kw_args > 0)) {
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(1, 123, __pyx_L3_error)
+ }
+ } else {
+ switch (PyTuple_GET_SIZE(__pyx_args)) {
+ case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+ CYTHON_FALLTHROUGH;
+ case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+ CYTHON_FALLTHROUGH;
+ case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+ values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+ values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+ break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ }
+ __pyx_v_shape = ((PyObject*)values[0]);
+ __pyx_v_itemsize = __Pyx_PyIndex_AsSsize_t(values[1]); if (unlikely((__pyx_v_itemsize == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 123, __pyx_L3_error)
+ __pyx_v_format = values[2];
+ __pyx_v_mode = values[3];
+ if (values[4]) {
+ __pyx_v_allocate_buffer = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_allocate_buffer == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 124, __pyx_L3_error)
+ } else {
+
+ /* "View.MemoryView":124
+ *
+ * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None,
+ * mode="c", bint allocate_buffer=True): # <<<<<<<<<<<<<<
+ *
+ * cdef int idx
+ */
+ __pyx_v_allocate_buffer = ((int)1);
+ }
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L5_argtuple_error:;
+ __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 123, __pyx_L3_error)
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return -1;
+ __pyx_L4_argument_unpacking_done:;
+ if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_shape), (&PyTuple_Type), 1, "shape", 1))) __PYX_ERR(1, 123, __pyx_L1_error)
+ if (unlikely(((PyObject *)__pyx_v_format) == Py_None)) {
+ PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "format"); __PYX_ERR(1, 123, __pyx_L1_error)
+ }
+ __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(((struct __pyx_array_obj *)__pyx_v_self), __pyx_v_shape, __pyx_v_itemsize, __pyx_v_format, __pyx_v_mode, __pyx_v_allocate_buffer);
+
+ /* "View.MemoryView":123
+ * cdef bint dtype_is_object
+ *
+ * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<<
+ * mode="c", bint allocate_buffer=True):
+ *
+ */
+
+ /* function exit code */
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __pyx_r = -1;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, PyObject *__pyx_v_format, PyObject *__pyx_v_mode, int __pyx_v_allocate_buffer) {
+ int __pyx_v_idx;
+ Py_ssize_t __pyx_v_i;
+ Py_ssize_t __pyx_v_dim;
+ PyObject **__pyx_v_p;
+ char __pyx_v_order;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ Py_ssize_t __pyx_t_1;
+ int __pyx_t_2;
+ PyObject *__pyx_t_3 = NULL;
+ int __pyx_t_4;
+ PyObject *__pyx_t_5 = NULL;
+ PyObject *__pyx_t_6 = NULL;
+ char *__pyx_t_7;
+ int __pyx_t_8;
+ Py_ssize_t __pyx_t_9;
+ PyObject *__pyx_t_10 = NULL;
+ Py_ssize_t __pyx_t_11;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__cinit__", 0);
+ __Pyx_INCREF(__pyx_v_format);
+
+ /* "View.MemoryView":130
+ * cdef PyObject **p
+ *
+ * self.ndim = len(shape) # <<<<<<<<<<<<<<
+ * self.itemsize = itemsize
+ *
+ */
+ if (unlikely(__pyx_v_shape == Py_None)) {
+ PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
+ __PYX_ERR(1, 130, __pyx_L1_error)
+ }
+ __pyx_t_1 = PyTuple_GET_SIZE(__pyx_v_shape); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(1, 130, __pyx_L1_error)
+ __pyx_v_self->ndim = ((int)__pyx_t_1);
+
+ /* "View.MemoryView":131
+ *
+ * self.ndim = len(shape)
+ * self.itemsize = itemsize # <<<<<<<<<<<<<<
+ *
+ * if not self.ndim:
+ */
+ __pyx_v_self->itemsize = __pyx_v_itemsize;
+
+ /* "View.MemoryView":133
+ * self.itemsize = itemsize
+ *
+ * if not self.ndim: # <<<<<<<<<<<<<<
+ * raise ValueError("Empty shape tuple for cython.array")
+ *
+ */
+ __pyx_t_2 = ((!(__pyx_v_self->ndim != 0)) != 0);
+ if (unlikely(__pyx_t_2)) {
+
+ /* "View.MemoryView":134
+ *
+ * if not self.ndim:
+ * raise ValueError("Empty shape tuple for cython.array") # <<<<<<<<<<<<<<
+ *
+ * if itemsize <= 0:
+ */
+ __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 134, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __PYX_ERR(1, 134, __pyx_L1_error)
+
+ /* "View.MemoryView":133
+ * self.itemsize = itemsize
+ *
+ * if not self.ndim: # <<<<<<<<<<<<<<
+ * raise ValueError("Empty shape tuple for cython.array")
+ *
+ */
+ }
+
+ /* "View.MemoryView":136
+ * raise ValueError("Empty shape tuple for cython.array")
+ *
+ * if itemsize <= 0: # <<<<<<<<<<<<<<
+ * raise ValueError("itemsize <= 0 for cython.array")
+ *
+ */
+ __pyx_t_2 = ((__pyx_v_itemsize <= 0) != 0);
+ if (unlikely(__pyx_t_2)) {
+
+ /* "View.MemoryView":137
+ *
+ * if itemsize <= 0:
+ * raise ValueError("itemsize <= 0 for cython.array") # <<<<<<<<<<<<<<
+ *
+ * if not isinstance(format, bytes):
+ */
+ __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 137, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __PYX_ERR(1, 137, __pyx_L1_error)
+
+ /* "View.MemoryView":136
+ * raise ValueError("Empty shape tuple for cython.array")
+ *
+ * if itemsize <= 0: # <<<<<<<<<<<<<<
+ * raise ValueError("itemsize <= 0 for cython.array")
+ *
+ */
+ }
+
+ /* "View.MemoryView":139
+ * raise ValueError("itemsize <= 0 for cython.array")
+ *
+ * if not isinstance(format, bytes): # <<<<<<<<<<<<<<
+ * format = format.encode('ASCII')
+ * self._format = format # keep a reference to the byte string
+ */
+ __pyx_t_2 = PyBytes_Check(__pyx_v_format);
+ __pyx_t_4 = ((!(__pyx_t_2 != 0)) != 0);
+ if (__pyx_t_4) {
+
+ /* "View.MemoryView":140
+ *
+ * if not isinstance(format, bytes):
+ * format = format.encode('ASCII') # <<<<<<<<<<<<<<
+ * self._format = format # keep a reference to the byte string
+ * self.format = self._format
+ */
+ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_format, __pyx_n_s_encode); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 140, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __pyx_t_6 = NULL;
+ if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
+ __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
+ if (likely(__pyx_t_6)) {
+ PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
+ __Pyx_INCREF(__pyx_t_6);
+ __Pyx_INCREF(function);
+ __Pyx_DECREF_SET(__pyx_t_5, function);
+ }
+ }
+ __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_6, __pyx_n_s_ASCII) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_n_s_ASCII);
+ __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+ if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 140, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ __Pyx_DECREF_SET(__pyx_v_format, __pyx_t_3);
+ __pyx_t_3 = 0;
+
+ /* "View.MemoryView":139
+ * raise ValueError("itemsize <= 0 for cython.array")
+ *
+ * if not isinstance(format, bytes): # <<<<<<<<<<<<<<
+ * format = format.encode('ASCII')
+ * self._format = format # keep a reference to the byte string
+ */
+ }
+
+ /* "View.MemoryView":141
+ * if not isinstance(format, bytes):
+ * format = format.encode('ASCII')
+ * self._format = format # keep a reference to the byte string # <<<<<<<<<<<<<<
+ * self.format = self._format
+ *
+ */
+ if (!(likely(PyBytes_CheckExact(__pyx_v_format))||((__pyx_v_format) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_v_format)->tp_name), 0))) __PYX_ERR(1, 141, __pyx_L1_error)
+ __pyx_t_3 = __pyx_v_format;
+ __Pyx_INCREF(__pyx_t_3);
+ __Pyx_GIVEREF(__pyx_t_3);
+ __Pyx_GOTREF(__pyx_v_self->_format);
+ __Pyx_DECREF(__pyx_v_self->_format);
+ __pyx_v_self->_format = ((PyObject*)__pyx_t_3);
+ __pyx_t_3 = 0;
+
+ /* "View.MemoryView":142
+ * format = format.encode('ASCII')
+ * self._format = format # keep a reference to the byte string
+ * self.format = self._format # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ if (unlikely(__pyx_v_self->_format == Py_None)) {
+ PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
+ __PYX_ERR(1, 142, __pyx_L1_error)
+ }
+ __pyx_t_7 = __Pyx_PyBytes_AsWritableString(__pyx_v_self->_format); if (unlikely((!__pyx_t_7) && PyErr_Occurred())) __PYX_ERR(1, 142, __pyx_L1_error)
+ __pyx_v_self->format = __pyx_t_7;
+
+ /* "View.MemoryView":145
+ *
+ *
+ * self._shape = PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2) # <<<<<<<<<<<<<<
+ * self._strides = self._shape + self.ndim
+ *
+ */
+ __pyx_v_self->_shape = ((Py_ssize_t *)PyObject_Malloc((((sizeof(Py_ssize_t)) * __pyx_v_self->ndim) * 2)));
+
+ /* "View.MemoryView":146
+ *
+ * self._shape = PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2)
+ * self._strides = self._shape + self.ndim # <<<<<<<<<<<<<<
+ *
+ * if not self._shape:
+ */
+ __pyx_v_self->_strides = (__pyx_v_self->_shape + __pyx_v_self->ndim);
+
+ /* "View.MemoryView":148
+ * self._strides = self._shape + self.ndim
+ *
+ * if not self._shape: # <<<<<<<<<<<<<<
+ * raise MemoryError("unable to allocate shape and strides.")
+ *
+ */
+ __pyx_t_4 = ((!(__pyx_v_self->_shape != 0)) != 0);
+ if (unlikely(__pyx_t_4)) {
+
+ /* "View.MemoryView":149
+ *
+ * if not self._shape:
+ * raise MemoryError("unable to allocate shape and strides.") # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 149, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __PYX_ERR(1, 149, __pyx_L1_error)
+
+ /* "View.MemoryView":148
+ * self._strides = self._shape + self.ndim
+ *
+ * if not self._shape: # <<<<<<<<<<<<<<
+ * raise MemoryError("unable to allocate shape and strides.")
+ *
+ */
+ }
+
+ /* "View.MemoryView":152
+ *
+ *
+ * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<<
+ * if dim <= 0:
+ * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim))
+ */
+ __pyx_t_8 = 0;
+ __pyx_t_3 = __pyx_v_shape; __Pyx_INCREF(__pyx_t_3); __pyx_t_1 = 0;
+ for (;;) {
+ if (__pyx_t_1 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
+ #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+ __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_1); __Pyx_INCREF(__pyx_t_5); __pyx_t_1++; if (unlikely(0 < 0)) __PYX_ERR(1, 152, __pyx_L1_error)
+ #else
+ __pyx_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 152, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ #endif
+ __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 152, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ __pyx_v_dim = __pyx_t_9;
+ __pyx_v_idx = __pyx_t_8;
+ __pyx_t_8 = (__pyx_t_8 + 1);
+
+ /* "View.MemoryView":153
+ *
+ * for idx, dim in enumerate(shape):
+ * if dim <= 0: # <<<<<<<<<<<<<<
+ * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim))
+ * self._shape[idx] = dim
+ */
+ __pyx_t_4 = ((__pyx_v_dim <= 0) != 0);
+ if (unlikely(__pyx_t_4)) {
+
+ /* "View.MemoryView":154
+ * for idx, dim in enumerate(shape):
+ * if dim <= 0:
+ * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim)) # <<<<<<<<<<<<<<
+ * self._shape[idx] = dim
+ *
+ */
+ __pyx_t_5 = __Pyx_PyInt_From_int(__pyx_v_idx); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 154, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 154, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_6);
+ __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 154, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_10);
+ __Pyx_GIVEREF(__pyx_t_5);
+ PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_5);
+ __Pyx_GIVEREF(__pyx_t_6);
+ PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_6);
+ __pyx_t_5 = 0;
+ __pyx_t_6 = 0;
+ __pyx_t_6 = __Pyx_PyString_Format(__pyx_kp_s_Invalid_shape_in_axis_d_d, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 154, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_6);
+ __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+ __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 154, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_10);
+ __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+ __Pyx_Raise(__pyx_t_10, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+ __PYX_ERR(1, 154, __pyx_L1_error)
+
+ /* "View.MemoryView":153
+ *
+ * for idx, dim in enumerate(shape):
+ * if dim <= 0: # <<<<<<<<<<<<<<
+ * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim))
+ * self._shape[idx] = dim
+ */
+ }
+
+ /* "View.MemoryView":155
+ * if dim <= 0:
+ * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim))
+ * self._shape[idx] = dim # <<<<<<<<<<<<<<
+ *
+ * cdef char order
+ */
+ (__pyx_v_self->_shape[__pyx_v_idx]) = __pyx_v_dim;
+
+ /* "View.MemoryView":152
+ *
+ *
+ * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<<
+ * if dim <= 0:
+ * raise ValueError("Invalid shape in axis %d: %d." % (idx, dim))
+ */
+ }
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+ /* "View.MemoryView":158
+ *
+ * cdef char order
+ * if mode == 'fortran': # <<<<<<<<<<<<<<
+ * order = b'F'
+ * self.mode = u'fortran'
+ */
+ __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_fortran, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(1, 158, __pyx_L1_error)
+ if (__pyx_t_4) {
+
+ /* "View.MemoryView":159
+ * cdef char order
+ * if mode == 'fortran':
+ * order = b'F' # <<<<<<<<<<<<<<
+ * self.mode = u'fortran'
+ * elif mode == 'c':
+ */
+ __pyx_v_order = 'F';
+
+ /* "View.MemoryView":160
+ * if mode == 'fortran':
+ * order = b'F'
+ * self.mode = u'fortran' # <<<<<<<<<<<<<<
+ * elif mode == 'c':
+ * order = b'C'
+ */
+ __Pyx_INCREF(__pyx_n_u_fortran);
+ __Pyx_GIVEREF(__pyx_n_u_fortran);
+ __Pyx_GOTREF(__pyx_v_self->mode);
+ __Pyx_DECREF(__pyx_v_self->mode);
+ __pyx_v_self->mode = __pyx_n_u_fortran;
+
+ /* "View.MemoryView":158
+ *
+ * cdef char order
+ * if mode == 'fortran': # <<<<<<<<<<<<<<
+ * order = b'F'
+ * self.mode = u'fortran'
+ */
+ goto __pyx_L10;
+ }
+
+ /* "View.MemoryView":161
+ * order = b'F'
+ * self.mode = u'fortran'
+ * elif mode == 'c': # <<<<<<<<<<<<<<
+ * order = b'C'
+ * self.mode = u'c'
+ */
+ __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_c, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(1, 161, __pyx_L1_error)
+ if (likely(__pyx_t_4)) {
+
+ /* "View.MemoryView":162
+ * self.mode = u'fortran'
+ * elif mode == 'c':
+ * order = b'C' # <<<<<<<<<<<<<<
+ * self.mode = u'c'
+ * else:
+ */
+ __pyx_v_order = 'C';
+
+ /* "View.MemoryView":163
+ * elif mode == 'c':
+ * order = b'C'
+ * self.mode = u'c' # <<<<<<<<<<<<<<
+ * else:
+ * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode)
+ */
+ __Pyx_INCREF(__pyx_n_u_c);
+ __Pyx_GIVEREF(__pyx_n_u_c);
+ __Pyx_GOTREF(__pyx_v_self->mode);
+ __Pyx_DECREF(__pyx_v_self->mode);
+ __pyx_v_self->mode = __pyx_n_u_c;
+
+ /* "View.MemoryView":161
+ * order = b'F'
+ * self.mode = u'fortran'
+ * elif mode == 'c': # <<<<<<<<<<<<<<
+ * order = b'C'
+ * self.mode = u'c'
+ */
+ goto __pyx_L10;
+ }
+
+ /* "View.MemoryView":165
+ * self.mode = u'c'
+ * else:
+ * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode) # <<<<<<<<<<<<<<
+ *
+ * self.len = fill_contig_strides_array(self._shape, self._strides,
+ */
+ /*else*/ {
+ __pyx_t_3 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Invalid_mode_expected_c_or_fortr, __pyx_v_mode); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 165, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_10 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 165, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_10);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __Pyx_Raise(__pyx_t_10, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+ __PYX_ERR(1, 165, __pyx_L1_error)
+ }
+ __pyx_L10:;
+
+ /* "View.MemoryView":167
+ * raise ValueError("Invalid mode, expected 'c' or 'fortran', got %s" % mode)
+ *
+ * self.len = fill_contig_strides_array(self._shape, self._strides, # <<<<<<<<<<<<<<
+ * itemsize, self.ndim, order)
+ *
+ */
+ __pyx_v_self->len = __pyx_fill_contig_strides_array(__pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_itemsize, __pyx_v_self->ndim, __pyx_v_order);
+
+ /* "View.MemoryView":170
+ * itemsize, self.ndim, order)
+ *
+ * self.free_data = allocate_buffer # <<<<<<<<<<<<<<
+ * self.dtype_is_object = format == b'O'
+ * if allocate_buffer:
+ */
+ __pyx_v_self->free_data = __pyx_v_allocate_buffer;
+
+ /* "View.MemoryView":171
+ *
+ * self.free_data = allocate_buffer
+ * self.dtype_is_object = format == b'O' # <<<<<<<<<<<<<<
+ * if allocate_buffer:
+ *
+ */
+ __pyx_t_10 = PyObject_RichCompare(__pyx_v_format, __pyx_n_b_O, Py_EQ); __Pyx_XGOTREF(__pyx_t_10); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 171, __pyx_L1_error)
+ __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 171, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+ __pyx_v_self->dtype_is_object = __pyx_t_4;
+
+ /* "View.MemoryView":172
+ * self.free_data = allocate_buffer
+ * self.dtype_is_object = format == b'O'
+ * if allocate_buffer: # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_t_4 = (__pyx_v_allocate_buffer != 0);
+ if (__pyx_t_4) {
+
+ /* "View.MemoryView":175
+ *
+ *
+ * self.data = malloc(self.len) # <<<<<<<<<<<<<<
+ * if not self.data:
+ * raise MemoryError("unable to allocate array data.")
+ */
+ __pyx_v_self->data = ((char *)malloc(__pyx_v_self->len));
+
+ /* "View.MemoryView":176
+ *
+ * self.data = malloc(self.len)
+ * if not self.data: # <<<<<<<<<<<<<<
+ * raise MemoryError("unable to allocate array data.")
+ *
+ */
+ __pyx_t_4 = ((!(__pyx_v_self->data != 0)) != 0);
+ if (unlikely(__pyx_t_4)) {
+
+ /* "View.MemoryView":177
+ * self.data = malloc(self.len)
+ * if not self.data:
+ * raise MemoryError("unable to allocate array data.") # <<<<<<<<<<<<<<
+ *
+ * if self.dtype_is_object:
+ */
+ __pyx_t_10 = __Pyx_PyObject_Call(__pyx_builtin_MemoryError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(1, 177, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_10);
+ __Pyx_Raise(__pyx_t_10, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+ __PYX_ERR(1, 177, __pyx_L1_error)
+
+ /* "View.MemoryView":176
+ *
+ * self.data = malloc(self.len)
+ * if not self.data: # <<<<<<<<<<<<<<
+ * raise MemoryError("unable to allocate array data.")
+ *
+ */
+ }
+
+ /* "View.MemoryView":179
+ * raise MemoryError("unable to allocate array data.")
+ *
+ * if self.dtype_is_object: # <<<<<<<<<<<<<<
+ * p = self.data
+ * for i in range(self.len / itemsize):
+ */
+ __pyx_t_4 = (__pyx_v_self->dtype_is_object != 0);
+ if (__pyx_t_4) {
+
+ /* "View.MemoryView":180
+ *
+ * if self.dtype_is_object:
+ * p = self.data # <<<<<<<<<<<<<<
+ * for i in range(self.len / itemsize):
+ * p[i] = Py_None
+ */
+ __pyx_v_p = ((PyObject **)__pyx_v_self->data);
+
+ /* "View.MemoryView":181
+ * if self.dtype_is_object:
+ * p = self.data
+ * for i in range(self.len / itemsize): # <<<<<<<<<<<<<<
+ * p[i] = Py_None
+ * Py_INCREF(Py_None)
+ */
+ if (unlikely(__pyx_v_itemsize == 0)) {
+ PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
+ __PYX_ERR(1, 181, __pyx_L1_error)
+ }
+ else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_self->len))) {
+ PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
+ __PYX_ERR(1, 181, __pyx_L1_error)
+ }
+ __pyx_t_1 = __Pyx_div_Py_ssize_t(__pyx_v_self->len, __pyx_v_itemsize);
+ __pyx_t_9 = __pyx_t_1;
+ for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_9; __pyx_t_11+=1) {
+ __pyx_v_i = __pyx_t_11;
+
+ /* "View.MemoryView":182
+ * p = self.data
+ * for i in range(self.len / itemsize):
+ * p[i] = Py_None # <<<<<<<<<<<<<<
+ * Py_INCREF(Py_None)
+ *
+ */
+ (__pyx_v_p[__pyx_v_i]) = Py_None;
+
+ /* "View.MemoryView":183
+ * for i in range(self.len / itemsize):
+ * p[i] = Py_None
+ * Py_INCREF(Py_None) # <<<<<<<<<<<<<<
+ *
+ * @cname('getbuffer')
+ */
+ Py_INCREF(Py_None);
+ }
+
+ /* "View.MemoryView":179
+ * raise MemoryError("unable to allocate array data.")
+ *
+ * if self.dtype_is_object: # <<<<<<<<<<<<<<
+ * p = self.data
+ * for i in range(self.len / itemsize):
+ */
+ }
+
+ /* "View.MemoryView":172
+ * self.free_data = allocate_buffer
+ * self.dtype_is_object = format == b'O'
+ * if allocate_buffer: # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ }
+
+ /* "View.MemoryView":123
+ * cdef bint dtype_is_object
+ *
+ * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<<
+ * mode="c", bint allocate_buffer=True):
+ *
+ */
+
+ /* function exit code */
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_XDECREF(__pyx_t_5);
+ __Pyx_XDECREF(__pyx_t_6);
+ __Pyx_XDECREF(__pyx_t_10);
+ __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __pyx_L0:;
+ __Pyx_XDECREF(__pyx_v_format);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":186
+ *
+ * @cname('getbuffer')
+ * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<<
+ * cdef int bufmode = -1
+ * if self.mode == u"c":
+ */
+
+/* Python wrapper */
+static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
+static CYTHON_UNUSED int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0);
+ __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(((struct __pyx_array_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(struct __pyx_array_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
+ int __pyx_v_bufmode;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ int __pyx_t_2;
+ PyObject *__pyx_t_3 = NULL;
+ char *__pyx_t_4;
+ Py_ssize_t __pyx_t_5;
+ int __pyx_t_6;
+ Py_ssize_t *__pyx_t_7;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ if (__pyx_v_info == NULL) {
+ PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete");
+ return -1;
+ }
+ __Pyx_RefNannySetupContext("__getbuffer__", 0);
+ __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None);
+ __Pyx_GIVEREF(__pyx_v_info->obj);
+
+ /* "View.MemoryView":187
+ * @cname('getbuffer')
+ * def __getbuffer__(self, Py_buffer *info, int flags):
+ * cdef int bufmode = -1 # <<<<<<<<<<<<<<
+ * if self.mode == u"c":
+ * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ */
+ __pyx_v_bufmode = -1;
+
+ /* "View.MemoryView":188
+ * def __getbuffer__(self, Py_buffer *info, int flags):
+ * cdef int bufmode = -1
+ * if self.mode == u"c": # <<<<<<<<<<<<<<
+ * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ * elif self.mode == u"fortran":
+ */
+ __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_c, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 188, __pyx_L1_error)
+ __pyx_t_2 = (__pyx_t_1 != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":189
+ * cdef int bufmode = -1
+ * if self.mode == u"c":
+ * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<<
+ * elif self.mode == u"fortran":
+ * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ */
+ __pyx_v_bufmode = (PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS);
+
+ /* "View.MemoryView":188
+ * def __getbuffer__(self, Py_buffer *info, int flags):
+ * cdef int bufmode = -1
+ * if self.mode == u"c": # <<<<<<<<<<<<<<
+ * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ * elif self.mode == u"fortran":
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":190
+ * if self.mode == u"c":
+ * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ * elif self.mode == u"fortran": # <<<<<<<<<<<<<<
+ * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ * if not (flags & bufmode):
+ */
+ __pyx_t_2 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_fortran, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 190, __pyx_L1_error)
+ __pyx_t_1 = (__pyx_t_2 != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":191
+ * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ * elif self.mode == u"fortran":
+ * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<<
+ * if not (flags & bufmode):
+ * raise ValueError("Can only create a buffer that is contiguous in memory.")
+ */
+ __pyx_v_bufmode = (PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS);
+
+ /* "View.MemoryView":190
+ * if self.mode == u"c":
+ * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ * elif self.mode == u"fortran": # <<<<<<<<<<<<<<
+ * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ * if not (flags & bufmode):
+ */
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":192
+ * elif self.mode == u"fortran":
+ * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ * if not (flags & bufmode): # <<<<<<<<<<<<<<
+ * raise ValueError("Can only create a buffer that is contiguous in memory.")
+ * info.buf = self.data
+ */
+ __pyx_t_1 = ((!((__pyx_v_flags & __pyx_v_bufmode) != 0)) != 0);
+ if (unlikely(__pyx_t_1)) {
+
+ /* "View.MemoryView":193
+ * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ * if not (flags & bufmode):
+ * raise ValueError("Can only create a buffer that is contiguous in memory.") # <<<<<<<<<<<<<<
+ * info.buf = self.data
+ * info.len = self.len
+ */
+ __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 193, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __PYX_ERR(1, 193, __pyx_L1_error)
+
+ /* "View.MemoryView":192
+ * elif self.mode == u"fortran":
+ * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ * if not (flags & bufmode): # <<<<<<<<<<<<<<
+ * raise ValueError("Can only create a buffer that is contiguous in memory.")
+ * info.buf = self.data
+ */
+ }
+
+ /* "View.MemoryView":194
+ * if not (flags & bufmode):
+ * raise ValueError("Can only create a buffer that is contiguous in memory.")
+ * info.buf = self.data # <<<<<<<<<<<<<<
+ * info.len = self.len
+ * info.ndim = self.ndim
+ */
+ __pyx_t_4 = __pyx_v_self->data;
+ __pyx_v_info->buf = __pyx_t_4;
+
+ /* "View.MemoryView":195
+ * raise ValueError("Can only create a buffer that is contiguous in memory.")
+ * info.buf = self.data
+ * info.len = self.len # <<<<<<<<<<<<<<
+ * info.ndim = self.ndim
+ * info.shape = self._shape
+ */
+ __pyx_t_5 = __pyx_v_self->len;
+ __pyx_v_info->len = __pyx_t_5;
+
+ /* "View.MemoryView":196
+ * info.buf = self.data
+ * info.len = self.len
+ * info.ndim = self.ndim # <<<<<<<<<<<<<<
+ * info.shape = self._shape
+ * info.strides = self._strides
+ */
+ __pyx_t_6 = __pyx_v_self->ndim;
+ __pyx_v_info->ndim = __pyx_t_6;
+
+ /* "View.MemoryView":197
+ * info.len = self.len
+ * info.ndim = self.ndim
+ * info.shape = self._shape # <<<<<<<<<<<<<<
+ * info.strides = self._strides
+ * info.suboffsets = NULL
+ */
+ __pyx_t_7 = __pyx_v_self->_shape;
+ __pyx_v_info->shape = __pyx_t_7;
+
+ /* "View.MemoryView":198
+ * info.ndim = self.ndim
+ * info.shape = self._shape
+ * info.strides = self._strides # <<<<<<<<<<<<<<
+ * info.suboffsets = NULL
+ * info.itemsize = self.itemsize
+ */
+ __pyx_t_7 = __pyx_v_self->_strides;
+ __pyx_v_info->strides = __pyx_t_7;
+
+ /* "View.MemoryView":199
+ * info.shape = self._shape
+ * info.strides = self._strides
+ * info.suboffsets = NULL # <<<<<<<<<<<<<<
+ * info.itemsize = self.itemsize
+ * info.readonly = 0
+ */
+ __pyx_v_info->suboffsets = NULL;
+
+ /* "View.MemoryView":200
+ * info.strides = self._strides
+ * info.suboffsets = NULL
+ * info.itemsize = self.itemsize # <<<<<<<<<<<<<<
+ * info.readonly = 0
+ *
+ */
+ __pyx_t_5 = __pyx_v_self->itemsize;
+ __pyx_v_info->itemsize = __pyx_t_5;
+
+ /* "View.MemoryView":201
+ * info.suboffsets = NULL
+ * info.itemsize = self.itemsize
+ * info.readonly = 0 # <<<<<<<<<<<<<<
+ *
+ * if flags & PyBUF_FORMAT:
+ */
+ __pyx_v_info->readonly = 0;
+
+ /* "View.MemoryView":203
+ * info.readonly = 0
+ *
+ * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<<
+ * info.format = self.format
+ * else:
+ */
+ __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":204
+ *
+ * if flags & PyBUF_FORMAT:
+ * info.format = self.format # <<<<<<<<<<<<<<
+ * else:
+ * info.format = NULL
+ */
+ __pyx_t_4 = __pyx_v_self->format;
+ __pyx_v_info->format = __pyx_t_4;
+
+ /* "View.MemoryView":203
+ * info.readonly = 0
+ *
+ * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<<
+ * info.format = self.format
+ * else:
+ */
+ goto __pyx_L5;
+ }
+
+ /* "View.MemoryView":206
+ * info.format = self.format
+ * else:
+ * info.format = NULL # <<<<<<<<<<<<<<
+ *
+ * info.obj = self
+ */
+ /*else*/ {
+ __pyx_v_info->format = NULL;
+ }
+ __pyx_L5:;
+
+ /* "View.MemoryView":208
+ * info.format = NULL
+ *
+ * info.obj = self # <<<<<<<<<<<<<<
+ *
+ * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)")
+ */
+ __Pyx_INCREF(((PyObject *)__pyx_v_self));
+ __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
+ __Pyx_GOTREF(__pyx_v_info->obj);
+ __Pyx_DECREF(__pyx_v_info->obj);
+ __pyx_v_info->obj = ((PyObject *)__pyx_v_self);
+
+ /* "View.MemoryView":186
+ *
+ * @cname('getbuffer')
+ * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<<
+ * cdef int bufmode = -1
+ * if self.mode == u"c":
+ */
+
+ /* function exit code */
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_AddTraceback("View.MemoryView.array.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ if (__pyx_v_info->obj != NULL) {
+ __Pyx_GOTREF(__pyx_v_info->obj);
+ __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0;
+ }
+ goto __pyx_L2;
+ __pyx_L0:;
+ if (__pyx_v_info->obj == Py_None) {
+ __Pyx_GOTREF(__pyx_v_info->obj);
+ __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0;
+ }
+ __pyx_L2:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":212
+ * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)")
+ *
+ * def __dealloc__(array self): # <<<<<<<<<<<<<<
+ * if self.callback_free_data != NULL:
+ * self.callback_free_data(self.data)
+ */
+
+/* Python wrapper */
+static void __pyx_array___dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_array___dealloc__(PyObject *__pyx_v_self) {
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
+ __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(((struct __pyx_array_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+}
+
+static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self) {
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ __Pyx_RefNannySetupContext("__dealloc__", 0);
+
+ /* "View.MemoryView":213
+ *
+ * def __dealloc__(array self):
+ * if self.callback_free_data != NULL: # <<<<<<<<<<<<<<
+ * self.callback_free_data(self.data)
+ * elif self.free_data:
+ */
+ __pyx_t_1 = ((__pyx_v_self->callback_free_data != NULL) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":214
+ * def __dealloc__(array self):
+ * if self.callback_free_data != NULL:
+ * self.callback_free_data(self.data) # <<<<<<<<<<<<<<
+ * elif self.free_data:
+ * if self.dtype_is_object:
+ */
+ __pyx_v_self->callback_free_data(__pyx_v_self->data);
+
+ /* "View.MemoryView":213
+ *
+ * def __dealloc__(array self):
+ * if self.callback_free_data != NULL: # <<<<<<<<<<<<<<
+ * self.callback_free_data(self.data)
+ * elif self.free_data:
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":215
+ * if self.callback_free_data != NULL:
+ * self.callback_free_data(self.data)
+ * elif self.free_data: # <<<<<<<<<<<<<<
+ * if self.dtype_is_object:
+ * refcount_objects_in_slice(self.data, self._shape,
+ */
+ __pyx_t_1 = (__pyx_v_self->free_data != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":216
+ * self.callback_free_data(self.data)
+ * elif self.free_data:
+ * if self.dtype_is_object: # <<<<<<<<<<<<<<
+ * refcount_objects_in_slice(self.data, self._shape,
+ * self._strides, self.ndim, False)
+ */
+ __pyx_t_1 = (__pyx_v_self->dtype_is_object != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":217
+ * elif self.free_data:
+ * if self.dtype_is_object:
+ * refcount_objects_in_slice(self.data, self._shape, # <<<<<<<<<<<<<<
+ * self._strides, self.ndim, False)
+ * free(self.data)
+ */
+ __pyx_memoryview_refcount_objects_in_slice(__pyx_v_self->data, __pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_self->ndim, 0);
+
+ /* "View.MemoryView":216
+ * self.callback_free_data(self.data)
+ * elif self.free_data:
+ * if self.dtype_is_object: # <<<<<<<<<<<<<<
+ * refcount_objects_in_slice(self.data, self._shape,
+ * self._strides, self.ndim, False)
+ */
+ }
+
+ /* "View.MemoryView":219
+ * refcount_objects_in_slice(self.data, self._shape,
+ * self._strides, self.ndim, False)
+ * free(self.data) # <<<<<<<<<<<<<<
+ * PyObject_Free(self._shape)
+ *
+ */
+ free(__pyx_v_self->data);
+
+ /* "View.MemoryView":215
+ * if self.callback_free_data != NULL:
+ * self.callback_free_data(self.data)
+ * elif self.free_data: # <<<<<<<<<<<<<<
+ * if self.dtype_is_object:
+ * refcount_objects_in_slice(self.data, self._shape,
+ */
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":220
+ * self._strides, self.ndim, False)
+ * free(self.data)
+ * PyObject_Free(self._shape) # <<<<<<<<<<<<<<
+ *
+ * @property
+ */
+ PyObject_Free(__pyx_v_self->_shape);
+
+ /* "View.MemoryView":212
+ * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)")
+ *
+ * def __dealloc__(array self): # <<<<<<<<<<<<<<
+ * if self.callback_free_data != NULL:
+ * self.callback_free_data(self.data)
+ */
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+}
+
+/* "View.MemoryView":223
+ *
+ * @property
+ * def memview(self): # <<<<<<<<<<<<<<
+ * return self.get_memview()
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_15View_dot_MemoryView_5array_7memview___get__(((struct __pyx_array_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+
+ /* "View.MemoryView":224
+ * @property
+ * def memview(self):
+ * return self.get_memview() # <<<<<<<<<<<<<<
+ *
+ * @cname('get_memview')
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = ((struct __pyx_vtabstruct_array *)__pyx_v_self->__pyx_vtab)->get_memview(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 224, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":223
+ *
+ * @property
+ * def memview(self): # <<<<<<<<<<<<<<
+ * return self.get_memview()
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("View.MemoryView.array.memview.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":227
+ *
+ * @cname('get_memview')
+ * cdef get_memview(self): # <<<<<<<<<<<<<<
+ * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE
+ * return memoryview(self, flags, self.dtype_is_object)
+ */
+
+static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self) {
+ int __pyx_v_flags;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("get_memview", 0);
+
+ /* "View.MemoryView":228
+ * @cname('get_memview')
+ * cdef get_memview(self):
+ * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE # <<<<<<<<<<<<<<
+ * return memoryview(self, flags, self.dtype_is_object)
+ *
+ */
+ __pyx_v_flags = ((PyBUF_ANY_CONTIGUOUS | PyBUF_FORMAT) | PyBUF_WRITABLE);
+
+ /* "View.MemoryView":229
+ * cdef get_memview(self):
+ * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE
+ * return memoryview(self, flags, self.dtype_is_object) # <<<<<<<<<<<<<<
+ *
+ * def __len__(self):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 229, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 229, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 229, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_INCREF(((PyObject *)__pyx_v_self));
+ __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
+ PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self));
+ __Pyx_GIVEREF(__pyx_t_1);
+ PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
+ __Pyx_GIVEREF(__pyx_t_2);
+ PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2);
+ __pyx_t_1 = 0;
+ __pyx_t_2 = 0;
+ __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 229, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":227
+ *
+ * @cname('get_memview')
+ * cdef get_memview(self): # <<<<<<<<<<<<<<
+ * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE
+ * return memoryview(self, flags, self.dtype_is_object)
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_AddTraceback("View.MemoryView.array.get_memview", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":231
+ * return memoryview(self, flags, self.dtype_is_object)
+ *
+ * def __len__(self): # <<<<<<<<<<<<<<
+ * return self._shape[0]
+ *
+ */
+
+/* Python wrapper */
+static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self); /*proto*/
+static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self) {
+ Py_ssize_t __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
+ __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(((struct __pyx_array_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self) {
+ Py_ssize_t __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__len__", 0);
+
+ /* "View.MemoryView":232
+ *
+ * def __len__(self):
+ * return self._shape[0] # <<<<<<<<<<<<<<
+ *
+ * def __getattr__(self, attr):
+ */
+ __pyx_r = (__pyx_v_self->_shape[0]);
+ goto __pyx_L0;
+
+ /* "View.MemoryView":231
+ * return memoryview(self, flags, self.dtype_is_object)
+ *
+ * def __len__(self): # <<<<<<<<<<<<<<
+ * return self._shape[0]
+ *
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":234
+ * return self._shape[0]
+ *
+ * def __getattr__(self, attr): # <<<<<<<<<<<<<<
+ * return getattr(self.memview, attr)
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr); /*proto*/
+static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__getattr__ (wrapper)", 0);
+ __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_attr));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__getattr__", 0);
+
+ /* "View.MemoryView":235
+ *
+ * def __getattr__(self, attr):
+ * return getattr(self.memview, attr) # <<<<<<<<<<<<<<
+ *
+ * def __getitem__(self, item):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 235, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_2 = __Pyx_GetAttr(__pyx_t_1, __pyx_v_attr); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 235, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":234
+ * return self._shape[0]
+ *
+ * def __getattr__(self, attr): # <<<<<<<<<<<<<<
+ * return getattr(self.memview, attr)
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("View.MemoryView.array.__getattr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":237
+ * return getattr(self.memview, attr)
+ *
+ * def __getitem__(self, item): # <<<<<<<<<<<<<<
+ * return self.memview[item]
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/
+static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
+ __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__getitem__", 0);
+
+ /* "View.MemoryView":238
+ *
+ * def __getitem__(self, item):
+ * return self.memview[item] # <<<<<<<<<<<<<<
+ *
+ * def __setitem__(self, item, value):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 238, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_item); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 238, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":237
+ * return getattr(self.memview, attr)
+ *
+ * def __getitem__(self, item): # <<<<<<<<<<<<<<
+ * return self.memview[item]
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("View.MemoryView.array.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":240
+ * return self.memview[item]
+ *
+ * def __setitem__(self, item, value): # <<<<<<<<<<<<<<
+ * self.memview[item] = value
+ *
+ */
+
+/* Python wrapper */
+static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0);
+ __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item), ((PyObject *)__pyx_v_value));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__setitem__", 0);
+
+ /* "View.MemoryView":241
+ *
+ * def __setitem__(self, item, value):
+ * self.memview[item] = value # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 241, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ if (unlikely(PyObject_SetItem(__pyx_t_1, __pyx_v_item, __pyx_v_value) < 0)) __PYX_ERR(1, 241, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+ /* "View.MemoryView":240
+ * return self.memview[item]
+ *
+ * def __setitem__(self, item, value): # <<<<<<<<<<<<<<
+ * self.memview[item] = value
+ *
+ */
+
+ /* function exit code */
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("View.MemoryView.array.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":1
+ * def __reduce_cython__(self): # <<<<<<<<<<<<<<
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
+ __pyx_r = __pyx_pf___pyx_array___reduce_cython__(((struct __pyx_array_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__reduce_cython__", 0);
+
+ /* "(tree fragment)":2
+ * def __reduce_cython__(self):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<<
+ * def __setstate_cython__(self, __pyx_state):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+ __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_Raise(__pyx_t_1, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __PYX_ERR(1, 2, __pyx_L1_error)
+
+ /* "(tree fragment)":1
+ * def __reduce_cython__(self): # <<<<<<<<<<<<<<
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("View.MemoryView.array.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":3
+ * def __reduce_cython__(self):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<<
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
+static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
+ __pyx_r = __pyx_pf___pyx_array_2__setstate_cython__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__setstate_cython__", 0);
+
+ /* "(tree fragment)":4
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<<
+ */
+ __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_Raise(__pyx_t_1, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __PYX_ERR(1, 4, __pyx_L1_error)
+
+ /* "(tree fragment)":3
+ * def __reduce_cython__(self):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<<
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("View.MemoryView.array.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":245
+ *
+ * @cname("__pyx_array_new")
+ * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, # <<<<<<<<<<<<<<
+ * char *mode, char *buf):
+ * cdef array result
+ */
+
+static struct __pyx_array_obj *__pyx_array_new(PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, char *__pyx_v_format, char *__pyx_v_mode, char *__pyx_v_buf) {
+ struct __pyx_array_obj *__pyx_v_result = 0;
+ struct __pyx_array_obj *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ PyObject *__pyx_t_4 = NULL;
+ PyObject *__pyx_t_5 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("array_cwrapper", 0);
+
+ /* "View.MemoryView":249
+ * cdef array result
+ *
+ * if buf == NULL: # <<<<<<<<<<<<<<
+ * result = array(shape, itemsize, format, mode.decode('ASCII'))
+ * else:
+ */
+ __pyx_t_1 = ((__pyx_v_buf == NULL) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":250
+ *
+ * if buf == NULL:
+ * result = array(shape, itemsize, format, mode.decode('ASCII')) # <<<<<<<<<<<<<<
+ * else:
+ * result = array(shape, itemsize, format, mode.decode('ASCII'),
+ */
+ __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 250, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 250, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_4 = __Pyx_decode_c_string(__pyx_v_mode, 0, strlen(__pyx_v_mode), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 250, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 250, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __Pyx_INCREF(__pyx_v_shape);
+ __Pyx_GIVEREF(__pyx_v_shape);
+ PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_shape);
+ __Pyx_GIVEREF(__pyx_t_2);
+ PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2);
+ __Pyx_GIVEREF(__pyx_t_3);
+ PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3);
+ __Pyx_GIVEREF(__pyx_t_4);
+ PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4);
+ __pyx_t_2 = 0;
+ __pyx_t_3 = 0;
+ __pyx_t_4 = 0;
+ __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 250, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_4);
+ __pyx_t_4 = 0;
+
+ /* "View.MemoryView":249
+ * cdef array result
+ *
+ * if buf == NULL: # <<<<<<<<<<<<<<
+ * result = array(shape, itemsize, format, mode.decode('ASCII'))
+ * else:
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":252
+ * result = array(shape, itemsize, format, mode.decode('ASCII'))
+ * else:
+ * result = array(shape, itemsize, format, mode.decode('ASCII'), # <<<<<<<<<<<<<<
+ * allocate_buffer=False)
+ * result.data = buf
+ */
+ /*else*/ {
+ __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 252, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __pyx_t_5 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 252, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_mode, 0, strlen(__pyx_v_mode), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 252, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 252, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_INCREF(__pyx_v_shape);
+ __Pyx_GIVEREF(__pyx_v_shape);
+ PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_shape);
+ __Pyx_GIVEREF(__pyx_t_4);
+ PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4);
+ __Pyx_GIVEREF(__pyx_t_5);
+ PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_t_5);
+ __Pyx_GIVEREF(__pyx_t_3);
+ PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_t_3);
+ __pyx_t_4 = 0;
+ __pyx_t_5 = 0;
+ __pyx_t_3 = 0;
+
+ /* "View.MemoryView":253
+ * else:
+ * result = array(shape, itemsize, format, mode.decode('ASCII'),
+ * allocate_buffer=False) # <<<<<<<<<<<<<<
+ * result.data = buf
+ *
+ */
+ __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 253, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_allocate_buffer, Py_False) < 0) __PYX_ERR(1, 253, __pyx_L1_error)
+
+ /* "View.MemoryView":252
+ * result = array(shape, itemsize, format, mode.decode('ASCII'))
+ * else:
+ * result = array(shape, itemsize, format, mode.decode('ASCII'), # <<<<<<<<<<<<<<
+ * allocate_buffer=False)
+ * result.data = buf
+ */
+ __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_array_type), __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 252, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_5);
+ __pyx_t_5 = 0;
+
+ /* "View.MemoryView":254
+ * result = array(shape, itemsize, format, mode.decode('ASCII'),
+ * allocate_buffer=False)
+ * result.data = buf # <<<<<<<<<<<<<<
+ *
+ * return result
+ */
+ __pyx_v_result->data = __pyx_v_buf;
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":256
+ * result.data = buf
+ *
+ * return result # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __Pyx_XDECREF(((PyObject *)__pyx_r));
+ __Pyx_INCREF(((PyObject *)__pyx_v_result));
+ __pyx_r = __pyx_v_result;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":245
+ *
+ * @cname("__pyx_array_new")
+ * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, # <<<<<<<<<<<<<<
+ * char *mode, char *buf):
+ * cdef array result
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_XDECREF(__pyx_t_4);
+ __Pyx_XDECREF(__pyx_t_5);
+ __Pyx_AddTraceback("View.MemoryView.array_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XDECREF((PyObject *)__pyx_v_result);
+ __Pyx_XGIVEREF((PyObject *)__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":282
+ * cdef class Enum(object):
+ * cdef object name
+ * def __init__(self, name): # <<<<<<<<<<<<<<
+ * self.name = name
+ * def __repr__(self):
+ */
+
+/* Python wrapper */
+static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+ PyObject *__pyx_v_name = 0;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
+ {
+ static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,0};
+ PyObject* values[1] = {0};
+ if (unlikely(__pyx_kwds)) {
+ Py_ssize_t kw_args;
+ const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+ switch (pos_args) {
+ case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+ CYTHON_FALLTHROUGH;
+ case 0: break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ kw_args = PyDict_Size(__pyx_kwds);
+ switch (pos_args) {
+ case 0:
+ if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
+ else goto __pyx_L5_argtuple_error;
+ }
+ if (unlikely(kw_args > 0)) {
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(1, 282, __pyx_L3_error)
+ }
+ } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+ goto __pyx_L5_argtuple_error;
+ } else {
+ values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+ }
+ __pyx_v_name = values[0];
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L5_argtuple_error:;
+ __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 282, __pyx_L3_error)
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("View.MemoryView.Enum.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return -1;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), __pyx_v_name);
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__init__", 0);
+
+ /* "View.MemoryView":283
+ * cdef object name
+ * def __init__(self, name):
+ * self.name = name # <<<<<<<<<<<<<<
+ * def __repr__(self):
+ * return self.name
+ */
+ __Pyx_INCREF(__pyx_v_name);
+ __Pyx_GIVEREF(__pyx_v_name);
+ __Pyx_GOTREF(__pyx_v_self->name);
+ __Pyx_DECREF(__pyx_v_self->name);
+ __pyx_v_self->name = __pyx_v_name;
+
+ /* "View.MemoryView":282
+ * cdef class Enum(object):
+ * cdef object name
+ * def __init__(self, name): # <<<<<<<<<<<<<<
+ * self.name = name
+ * def __repr__(self):
+ */
+
+ /* function exit code */
+ __pyx_r = 0;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":284
+ * def __init__(self, name):
+ * self.name = name
+ * def __repr__(self): # <<<<<<<<<<<<<<
+ * return self.name
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
+ __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__repr__", 0);
+
+ /* "View.MemoryView":285
+ * self.name = name
+ * def __repr__(self):
+ * return self.name # <<<<<<<<<<<<<<
+ *
+ * cdef generic = Enum("")
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF(__pyx_v_self->name);
+ __pyx_r = __pyx_v_self->name;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":284
+ * def __init__(self, name):
+ * self.name = name
+ * def __repr__(self): # <<<<<<<<<<<<<<
+ * return self.name
+ *
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":1
+ * def __reduce_cython__(self): # <<<<<<<<<<<<<<
+ * cdef tuple state
+ * cdef object _dict
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
+ __pyx_r = __pyx_pf___pyx_MemviewEnum___reduce_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self) {
+ PyObject *__pyx_v_state = 0;
+ PyObject *__pyx_v__dict = 0;
+ int __pyx_v_use_setstate;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_t_2;
+ int __pyx_t_3;
+ PyObject *__pyx_t_4 = NULL;
+ PyObject *__pyx_t_5 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__reduce_cython__", 0);
+
+ /* "(tree fragment)":5
+ * cdef object _dict
+ * cdef bint use_setstate
+ * state = (self.name,) # <<<<<<<<<<<<<<
+ * _dict = getattr(self, '__dict__', None)
+ * if _dict is not None:
+ */
+ __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_INCREF(__pyx_v_self->name);
+ __Pyx_GIVEREF(__pyx_v_self->name);
+ PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->name);
+ __pyx_v_state = ((PyObject*)__pyx_t_1);
+ __pyx_t_1 = 0;
+
+ /* "(tree fragment)":6
+ * cdef bint use_setstate
+ * state = (self.name,)
+ * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<<
+ * if _dict is not None:
+ * state += (_dict,)
+ */
+ __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_v__dict = __pyx_t_1;
+ __pyx_t_1 = 0;
+
+ /* "(tree fragment)":7
+ * state = (self.name,)
+ * _dict = getattr(self, '__dict__', None)
+ * if _dict is not None: # <<<<<<<<<<<<<<
+ * state += (_dict,)
+ * use_setstate = True
+ */
+ __pyx_t_2 = (__pyx_v__dict != Py_None);
+ __pyx_t_3 = (__pyx_t_2 != 0);
+ if (__pyx_t_3) {
+
+ /* "(tree fragment)":8
+ * _dict = getattr(self, '__dict__', None)
+ * if _dict is not None:
+ * state += (_dict,) # <<<<<<<<<<<<<<
+ * use_setstate = True
+ * else:
+ */
+ __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_INCREF(__pyx_v__dict);
+ __Pyx_GIVEREF(__pyx_v__dict);
+ PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict);
+ __pyx_t_4 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 8, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_4));
+ __pyx_t_4 = 0;
+
+ /* "(tree fragment)":9
+ * if _dict is not None:
+ * state += (_dict,)
+ * use_setstate = True # <<<<<<<<<<<<<<
+ * else:
+ * use_setstate = self.name is not None
+ */
+ __pyx_v_use_setstate = 1;
+
+ /* "(tree fragment)":7
+ * state = (self.name,)
+ * _dict = getattr(self, '__dict__', None)
+ * if _dict is not None: # <<<<<<<<<<<<<<
+ * state += (_dict,)
+ * use_setstate = True
+ */
+ goto __pyx_L3;
+ }
+
+ /* "(tree fragment)":11
+ * use_setstate = True
+ * else:
+ * use_setstate = self.name is not None # <<<<<<<<<<<<<<
+ * if use_setstate:
+ * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state
+ */
+ /*else*/ {
+ __pyx_t_3 = (__pyx_v_self->name != Py_None);
+ __pyx_v_use_setstate = __pyx_t_3;
+ }
+ __pyx_L3:;
+
+ /* "(tree fragment)":12
+ * else:
+ * use_setstate = self.name is not None
+ * if use_setstate: # <<<<<<<<<<<<<<
+ * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state
+ * else:
+ */
+ __pyx_t_3 = (__pyx_v_use_setstate != 0);
+ if (__pyx_t_3) {
+
+ /* "(tree fragment)":13
+ * use_setstate = self.name is not None
+ * if use_setstate:
+ * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state # <<<<<<<<<<<<<<
+ * else:
+ * return __pyx_unpickle_Enum, (type(self), 0xb068931, state)
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 13, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+ __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+ PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+ __Pyx_INCREF(__pyx_int_184977713);
+ __Pyx_GIVEREF(__pyx_int_184977713);
+ PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_184977713);
+ __Pyx_INCREF(Py_None);
+ __Pyx_GIVEREF(Py_None);
+ PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None);
+ __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 13, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __Pyx_GIVEREF(__pyx_t_4);
+ PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
+ __Pyx_GIVEREF(__pyx_t_1);
+ PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
+ __Pyx_INCREF(__pyx_v_state);
+ __Pyx_GIVEREF(__pyx_v_state);
+ PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_v_state);
+ __pyx_t_4 = 0;
+ __pyx_t_1 = 0;
+ __pyx_r = __pyx_t_5;
+ __pyx_t_5 = 0;
+ goto __pyx_L0;
+
+ /* "(tree fragment)":12
+ * else:
+ * use_setstate = self.name is not None
+ * if use_setstate: # <<<<<<<<<<<<<<
+ * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state
+ * else:
+ */
+ }
+
+ /* "(tree fragment)":15
+ * return __pyx_unpickle_Enum, (type(self), 0xb068931, None), state
+ * else:
+ * return __pyx_unpickle_Enum, (type(self), 0xb068931, state) # <<<<<<<<<<<<<<
+ * def __setstate_cython__(self, __pyx_state):
+ * __pyx_unpickle_Enum__set_state(self, __pyx_state)
+ */
+ /*else*/ {
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 15, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+ __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+ PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+ __Pyx_INCREF(__pyx_int_184977713);
+ __Pyx_GIVEREF(__pyx_int_184977713);
+ PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_184977713);
+ __Pyx_INCREF(__pyx_v_state);
+ __Pyx_GIVEREF(__pyx_v_state);
+ PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state);
+ __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 15, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __Pyx_GIVEREF(__pyx_t_5);
+ PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
+ __Pyx_GIVEREF(__pyx_t_1);
+ PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
+ __pyx_t_5 = 0;
+ __pyx_t_1 = 0;
+ __pyx_r = __pyx_t_4;
+ __pyx_t_4 = 0;
+ goto __pyx_L0;
+ }
+
+ /* "(tree fragment)":1
+ * def __reduce_cython__(self): # <<<<<<<<<<<<<<
+ * cdef tuple state
+ * cdef object _dict
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_4);
+ __Pyx_XDECREF(__pyx_t_5);
+ __Pyx_AddTraceback("View.MemoryView.Enum.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XDECREF(__pyx_v_state);
+ __Pyx_XDECREF(__pyx_v__dict);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":16
+ * else:
+ * return __pyx_unpickle_Enum, (type(self), 0xb068931, state)
+ * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<<
+ * __pyx_unpickle_Enum__set_state(self, __pyx_state)
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
+static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
+ __pyx_r = __pyx_pf___pyx_MemviewEnum_2__setstate_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__setstate_cython__", 0);
+
+ /* "(tree fragment)":17
+ * return __pyx_unpickle_Enum, (type(self), 0xb068931, state)
+ * def __setstate_cython__(self, __pyx_state):
+ * __pyx_unpickle_Enum__set_state(self, __pyx_state) # <<<<<<<<<<<<<<
+ */
+ if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 17, __pyx_L1_error)
+ __pyx_t_1 = __pyx_unpickle_Enum__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+ /* "(tree fragment)":16
+ * else:
+ * return __pyx_unpickle_Enum, (type(self), 0xb068931, state)
+ * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<<
+ * __pyx_unpickle_Enum__set_state(self, __pyx_state)
+ */
+
+ /* function exit code */
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("View.MemoryView.Enum.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":299
+ *
+ * @cname('__pyx_align_pointer')
+ * cdef void *align_pointer(void *memory, size_t alignment) nogil: # <<<<<<<<<<<<<<
+ * "Align pointer memory on a given boundary"
+ * cdef Py_intptr_t aligned_p = memory
+ */
+
+static void *__pyx_align_pointer(void *__pyx_v_memory, size_t __pyx_v_alignment) {
+ Py_intptr_t __pyx_v_aligned_p;
+ size_t __pyx_v_offset;
+ void *__pyx_r;
+ int __pyx_t_1;
+
+ /* "View.MemoryView":301
+ * cdef void *align_pointer(void *memory, size_t alignment) nogil:
+ * "Align pointer memory on a given boundary"
+ * cdef Py_intptr_t aligned_p = memory # <<<<<<<<<<<<<<
+ * cdef size_t offset
+ *
+ */
+ __pyx_v_aligned_p = ((Py_intptr_t)__pyx_v_memory);
+
+ /* "View.MemoryView":305
+ *
+ * with cython.cdivision(True):
+ * offset = aligned_p % alignment # <<<<<<<<<<<<<<
+ *
+ * if offset > 0:
+ */
+ __pyx_v_offset = (__pyx_v_aligned_p % __pyx_v_alignment);
+
+ /* "View.MemoryView":307
+ * offset = aligned_p % alignment
+ *
+ * if offset > 0: # <<<<<<<<<<<<<<
+ * aligned_p += alignment - offset
+ *
+ */
+ __pyx_t_1 = ((__pyx_v_offset > 0) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":308
+ *
+ * if offset > 0:
+ * aligned_p += alignment - offset # <<<<<<<<<<<<<<
+ *
+ * return aligned_p
+ */
+ __pyx_v_aligned_p = (__pyx_v_aligned_p + (__pyx_v_alignment - __pyx_v_offset));
+
+ /* "View.MemoryView":307
+ * offset = aligned_p % alignment
+ *
+ * if offset > 0: # <<<<<<<<<<<<<<
+ * aligned_p += alignment - offset
+ *
+ */
+ }
+
+ /* "View.MemoryView":310
+ * aligned_p += alignment - offset
+ *
+ * return aligned_p # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_r = ((void *)__pyx_v_aligned_p);
+ goto __pyx_L0;
+
+ /* "View.MemoryView":299
+ *
+ * @cname('__pyx_align_pointer')
+ * cdef void *align_pointer(void *memory, size_t alignment) nogil: # <<<<<<<<<<<<<<
+ * "Align pointer memory on a given boundary"
+ * cdef Py_intptr_t aligned_p = memory
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ return __pyx_r;
+}
+
+/* "View.MemoryView":346
+ * cdef __Pyx_TypeInfo *typeinfo
+ *
+ * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<<
+ * self.obj = obj
+ * self.flags = flags
+ */
+
+/* Python wrapper */
+static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+ PyObject *__pyx_v_obj = 0;
+ int __pyx_v_flags;
+ int __pyx_v_dtype_is_object;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+ {
+ static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,&__pyx_n_s_flags,&__pyx_n_s_dtype_is_object,0};
+ PyObject* values[3] = {0,0,0};
+ if (unlikely(__pyx_kwds)) {
+ Py_ssize_t kw_args;
+ const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+ switch (pos_args) {
+ case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+ CYTHON_FALLTHROUGH;
+ case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+ CYTHON_FALLTHROUGH;
+ case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+ CYTHON_FALLTHROUGH;
+ case 0: break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ kw_args = PyDict_Size(__pyx_kwds);
+ switch (pos_args) {
+ case 0:
+ if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_obj)) != 0)) kw_args--;
+ else goto __pyx_L5_argtuple_error;
+ CYTHON_FALLTHROUGH;
+ case 1:
+ if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flags)) != 0)) kw_args--;
+ else {
+ __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, 1); __PYX_ERR(1, 346, __pyx_L3_error)
+ }
+ CYTHON_FALLTHROUGH;
+ case 2:
+ if (kw_args > 0) {
+ PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_dtype_is_object);
+ if (value) { values[2] = value; kw_args--; }
+ }
+ }
+ if (unlikely(kw_args > 0)) {
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(1, 346, __pyx_L3_error)
+ }
+ } else {
+ switch (PyTuple_GET_SIZE(__pyx_args)) {
+ case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+ CYTHON_FALLTHROUGH;
+ case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+ values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+ break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ }
+ __pyx_v_obj = values[0];
+ __pyx_v_flags = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_flags == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 346, __pyx_L3_error)
+ if (values[2]) {
+ __pyx_v_dtype_is_object = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_dtype_is_object == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 346, __pyx_L3_error)
+ } else {
+ __pyx_v_dtype_is_object = ((int)0);
+ }
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L5_argtuple_error:;
+ __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 346, __pyx_L3_error)
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return -1;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_obj, __pyx_v_flags, __pyx_v_dtype_is_object);
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ int __pyx_t_2;
+ int __pyx_t_3;
+ int __pyx_t_4;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__cinit__", 0);
+
+ /* "View.MemoryView":347
+ *
+ * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False):
+ * self.obj = obj # <<<<<<<<<<<<<<
+ * self.flags = flags
+ * if type(self) is memoryview or obj is not None:
+ */
+ __Pyx_INCREF(__pyx_v_obj);
+ __Pyx_GIVEREF(__pyx_v_obj);
+ __Pyx_GOTREF(__pyx_v_self->obj);
+ __Pyx_DECREF(__pyx_v_self->obj);
+ __pyx_v_self->obj = __pyx_v_obj;
+
+ /* "View.MemoryView":348
+ * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False):
+ * self.obj = obj
+ * self.flags = flags # <<<<<<<<<<<<<<
+ * if type(self) is memoryview or obj is not None:
+ * __Pyx_GetBuffer(obj, &self.view, flags)
+ */
+ __pyx_v_self->flags = __pyx_v_flags;
+
+ /* "View.MemoryView":349
+ * self.obj = obj
+ * self.flags = flags
+ * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<<
+ * __Pyx_GetBuffer(obj, &self.view, flags)
+ * if self.view.obj == NULL:
+ */
+ __pyx_t_2 = (((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))) == ((PyObject *)__pyx_memoryview_type));
+ __pyx_t_3 = (__pyx_t_2 != 0);
+ if (!__pyx_t_3) {
+ } else {
+ __pyx_t_1 = __pyx_t_3;
+ goto __pyx_L4_bool_binop_done;
+ }
+ __pyx_t_3 = (__pyx_v_obj != Py_None);
+ __pyx_t_2 = (__pyx_t_3 != 0);
+ __pyx_t_1 = __pyx_t_2;
+ __pyx_L4_bool_binop_done:;
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":350
+ * self.flags = flags
+ * if type(self) is memoryview or obj is not None:
+ * __Pyx_GetBuffer(obj, &self.view, flags) # <<<<<<<<<<<<<<
+ * if self.view.obj == NULL:
+ * (<__pyx_buffer *> &self.view).obj = Py_None
+ */
+ __pyx_t_4 = __Pyx_GetBuffer(__pyx_v_obj, (&__pyx_v_self->view), __pyx_v_flags); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 350, __pyx_L1_error)
+
+ /* "View.MemoryView":351
+ * if type(self) is memoryview or obj is not None:
+ * __Pyx_GetBuffer(obj, &self.view, flags)
+ * if self.view.obj == NULL: # <<<<<<<<<<<<<<
+ * (<__pyx_buffer *> &self.view).obj = Py_None
+ * Py_INCREF(Py_None)
+ */
+ __pyx_t_1 = ((((PyObject *)__pyx_v_self->view.obj) == NULL) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":352
+ * __Pyx_GetBuffer(obj, &self.view, flags)
+ * if self.view.obj == NULL:
+ * (<__pyx_buffer *> &self.view).obj = Py_None # <<<<<<<<<<<<<<
+ * Py_INCREF(Py_None)
+ *
+ */
+ ((Py_buffer *)(&__pyx_v_self->view))->obj = Py_None;
+
+ /* "View.MemoryView":353
+ * if self.view.obj == NULL:
+ * (<__pyx_buffer *> &self.view).obj = Py_None
+ * Py_INCREF(Py_None) # <<<<<<<<<<<<<<
+ *
+ * if not __PYX_CYTHON_ATOMICS_ENABLED():
+ */
+ Py_INCREF(Py_None);
+
+ /* "View.MemoryView":351
+ * if type(self) is memoryview or obj is not None:
+ * __Pyx_GetBuffer(obj, &self.view, flags)
+ * if self.view.obj == NULL: # <<<<<<<<<<<<<<
+ * (<__pyx_buffer *> &self.view).obj = Py_None
+ * Py_INCREF(Py_None)
+ */
+ }
+
+ /* "View.MemoryView":349
+ * self.obj = obj
+ * self.flags = flags
+ * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<<
+ * __Pyx_GetBuffer(obj, &self.view, flags)
+ * if self.view.obj == NULL:
+ */
+ }
+
+ /* "View.MemoryView":355
+ * Py_INCREF(Py_None)
+ *
+ * if not __PYX_CYTHON_ATOMICS_ENABLED(): # <<<<<<<<<<<<<<
+ * global __pyx_memoryview_thread_locks_used
+ * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED:
+ */
+ __pyx_t_1 = ((!(__PYX_CYTHON_ATOMICS_ENABLED() != 0)) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":357
+ * if not __PYX_CYTHON_ATOMICS_ENABLED():
+ * global __pyx_memoryview_thread_locks_used
+ * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: # <<<<<<<<<<<<<<
+ * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]
+ * __pyx_memoryview_thread_locks_used += 1
+ */
+ __pyx_t_1 = ((__pyx_memoryview_thread_locks_used < 8) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":358
+ * global __pyx_memoryview_thread_locks_used
+ * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED:
+ * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] # <<<<<<<<<<<<<<
+ * __pyx_memoryview_thread_locks_used += 1
+ * if self.lock is NULL:
+ */
+ __pyx_v_self->lock = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]);
+
+ /* "View.MemoryView":359
+ * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED:
+ * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]
+ * __pyx_memoryview_thread_locks_used += 1 # <<<<<<<<<<<<<<
+ * if self.lock is NULL:
+ * self.lock = PyThread_allocate_lock()
+ */
+ __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used + 1);
+
+ /* "View.MemoryView":357
+ * if not __PYX_CYTHON_ATOMICS_ENABLED():
+ * global __pyx_memoryview_thread_locks_used
+ * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED: # <<<<<<<<<<<<<<
+ * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]
+ * __pyx_memoryview_thread_locks_used += 1
+ */
+ }
+
+ /* "View.MemoryView":360
+ * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]
+ * __pyx_memoryview_thread_locks_used += 1
+ * if self.lock is NULL: # <<<<<<<<<<<<<<
+ * self.lock = PyThread_allocate_lock()
+ * if self.lock is NULL:
+ */
+ __pyx_t_1 = ((__pyx_v_self->lock == NULL) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":361
+ * __pyx_memoryview_thread_locks_used += 1
+ * if self.lock is NULL:
+ * self.lock = PyThread_allocate_lock() # <<<<<<<<<<<<<<
+ * if self.lock is NULL:
+ * raise MemoryError
+ */
+ __pyx_v_self->lock = PyThread_allocate_lock();
+
+ /* "View.MemoryView":362
+ * if self.lock is NULL:
+ * self.lock = PyThread_allocate_lock()
+ * if self.lock is NULL: # <<<<<<<<<<<<<<
+ * raise MemoryError
+ *
+ */
+ __pyx_t_1 = ((__pyx_v_self->lock == NULL) != 0);
+ if (unlikely(__pyx_t_1)) {
+
+ /* "View.MemoryView":363
+ * self.lock = PyThread_allocate_lock()
+ * if self.lock is NULL:
+ * raise MemoryError # <<<<<<<<<<<<<<
+ *
+ * if flags & PyBUF_FORMAT:
+ */
+ PyErr_NoMemory(); __PYX_ERR(1, 363, __pyx_L1_error)
+
+ /* "View.MemoryView":362
+ * if self.lock is NULL:
+ * self.lock = PyThread_allocate_lock()
+ * if self.lock is NULL: # <<<<<<<<<<<<<<
+ * raise MemoryError
+ *
+ */
+ }
+
+ /* "View.MemoryView":360
+ * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]
+ * __pyx_memoryview_thread_locks_used += 1
+ * if self.lock is NULL: # <<<<<<<<<<<<<<
+ * self.lock = PyThread_allocate_lock()
+ * if self.lock is NULL:
+ */
+ }
+
+ /* "View.MemoryView":355
+ * Py_INCREF(Py_None)
+ *
+ * if not __PYX_CYTHON_ATOMICS_ENABLED(): # <<<<<<<<<<<<<<
+ * global __pyx_memoryview_thread_locks_used
+ * if __pyx_memoryview_thread_locks_used < THREAD_LOCKS_PREALLOCATED:
+ */
+ }
+
+ /* "View.MemoryView":365
+ * raise MemoryError
+ *
+ * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<<
+ * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0')
+ * else:
+ */
+ __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":366
+ *
+ * if flags & PyBUF_FORMAT:
+ * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') # <<<<<<<<<<<<<<
+ * else:
+ * self.dtype_is_object = dtype_is_object
+ */
+ __pyx_t_2 = (((__pyx_v_self->view.format[0]) == 'O') != 0);
+ if (__pyx_t_2) {
+ } else {
+ __pyx_t_1 = __pyx_t_2;
+ goto __pyx_L12_bool_binop_done;
+ }
+ __pyx_t_2 = (((__pyx_v_self->view.format[1]) == '\x00') != 0);
+ __pyx_t_1 = __pyx_t_2;
+ __pyx_L12_bool_binop_done:;
+ __pyx_v_self->dtype_is_object = __pyx_t_1;
+
+ /* "View.MemoryView":365
+ * raise MemoryError
+ *
+ * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<<
+ * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0')
+ * else:
+ */
+ goto __pyx_L11;
+ }
+
+ /* "View.MemoryView":368
+ * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0')
+ * else:
+ * self.dtype_is_object = dtype_is_object # <<<<<<<<<<<<<<
+ *
+ * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer(
+ */
+ /*else*/ {
+ __pyx_v_self->dtype_is_object = __pyx_v_dtype_is_object;
+ }
+ __pyx_L11:;
+
+ /* "View.MemoryView":370
+ * self.dtype_is_object = dtype_is_object
+ *
+ * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer( # <<<<<<<<<<<<<<
+ * &self.acquisition_count[0], sizeof(__pyx_atomic_int))
+ * self.typeinfo = NULL
+ */
+ __pyx_v_self->acquisition_count_aligned_p = ((__pyx_atomic_int *)__pyx_align_pointer(((void *)(&(__pyx_v_self->acquisition_count[0]))), (sizeof(__pyx_atomic_int))));
+
+ /* "View.MemoryView":372
+ * self.acquisition_count_aligned_p = <__pyx_atomic_int *> align_pointer(
+ * &self.acquisition_count[0], sizeof(__pyx_atomic_int))
+ * self.typeinfo = NULL # <<<<<<<<<<<<<<
+ *
+ * def __dealloc__(memoryview self):
+ */
+ __pyx_v_self->typeinfo = NULL;
+
+ /* "View.MemoryView":346
+ * cdef __Pyx_TypeInfo *typeinfo
+ *
+ * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<<
+ * self.obj = obj
+ * self.flags = flags
+ */
+
+ /* function exit code */
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":374
+ * self.typeinfo = NULL
+ *
+ * def __dealloc__(memoryview self): # <<<<<<<<<<<<<<
+ * if self.obj is not None:
+ * __Pyx_ReleaseBuffer(&self.view)
+ */
+
+/* Python wrapper */
+static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self) {
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
+ __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+}
+
+static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self) {
+ int __pyx_v_i;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ int __pyx_t_2;
+ int __pyx_t_3;
+ int __pyx_t_4;
+ int __pyx_t_5;
+ PyThread_type_lock __pyx_t_6;
+ PyThread_type_lock __pyx_t_7;
+ __Pyx_RefNannySetupContext("__dealloc__", 0);
+
+ /* "View.MemoryView":375
+ *
+ * def __dealloc__(memoryview self):
+ * if self.obj is not None: # <<<<<<<<<<<<<<
+ * __Pyx_ReleaseBuffer(&self.view)
+ * elif (<__pyx_buffer *> &self.view).obj == Py_None:
+ */
+ __pyx_t_1 = (__pyx_v_self->obj != Py_None);
+ __pyx_t_2 = (__pyx_t_1 != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":376
+ * def __dealloc__(memoryview self):
+ * if self.obj is not None:
+ * __Pyx_ReleaseBuffer(&self.view) # <<<<<<<<<<<<<<
+ * elif (<__pyx_buffer *> &self.view).obj == Py_None:
+ *
+ */
+ __Pyx_ReleaseBuffer((&__pyx_v_self->view));
+
+ /* "View.MemoryView":375
+ *
+ * def __dealloc__(memoryview self):
+ * if self.obj is not None: # <<<<<<<<<<<<<<
+ * __Pyx_ReleaseBuffer(&self.view)
+ * elif (<__pyx_buffer *> &self.view).obj == Py_None:
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":377
+ * if self.obj is not None:
+ * __Pyx_ReleaseBuffer(&self.view)
+ * elif (<__pyx_buffer *> &self.view).obj == Py_None: # <<<<<<<<<<<<<<
+ *
+ * (<__pyx_buffer *> &self.view).obj = NULL
+ */
+ __pyx_t_2 = ((((Py_buffer *)(&__pyx_v_self->view))->obj == Py_None) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":379
+ * elif (<__pyx_buffer *> &self.view).obj == Py_None:
+ *
+ * (<__pyx_buffer *> &self.view).obj = NULL # <<<<<<<<<<<<<<
+ * Py_DECREF(Py_None)
+ *
+ */
+ ((Py_buffer *)(&__pyx_v_self->view))->obj = NULL;
+
+ /* "View.MemoryView":380
+ *
+ * (<__pyx_buffer *> &self.view).obj = NULL
+ * Py_DECREF(Py_None) # <<<<<<<<<<<<<<
+ *
+ * cdef int i
+ */
+ Py_DECREF(Py_None);
+
+ /* "View.MemoryView":377
+ * if self.obj is not None:
+ * __Pyx_ReleaseBuffer(&self.view)
+ * elif (<__pyx_buffer *> &self.view).obj == Py_None: # <<<<<<<<<<<<<<
+ *
+ * (<__pyx_buffer *> &self.view).obj = NULL
+ */
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":384
+ * cdef int i
+ * global __pyx_memoryview_thread_locks_used
+ * if self.lock != NULL: # <<<<<<<<<<<<<<
+ * for i in range(__pyx_memoryview_thread_locks_used):
+ * if __pyx_memoryview_thread_locks[i] is self.lock:
+ */
+ __pyx_t_2 = ((__pyx_v_self->lock != NULL) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":385
+ * global __pyx_memoryview_thread_locks_used
+ * if self.lock != NULL:
+ * for i in range(__pyx_memoryview_thread_locks_used): # <<<<<<<<<<<<<<
+ * if __pyx_memoryview_thread_locks[i] is self.lock:
+ * __pyx_memoryview_thread_locks_used -= 1
+ */
+ __pyx_t_3 = __pyx_memoryview_thread_locks_used;
+ __pyx_t_4 = __pyx_t_3;
+ for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
+ __pyx_v_i = __pyx_t_5;
+
+ /* "View.MemoryView":386
+ * if self.lock != NULL:
+ * for i in range(__pyx_memoryview_thread_locks_used):
+ * if __pyx_memoryview_thread_locks[i] is self.lock: # <<<<<<<<<<<<<<
+ * __pyx_memoryview_thread_locks_used -= 1
+ * if i != __pyx_memoryview_thread_locks_used:
+ */
+ __pyx_t_2 = (((__pyx_memoryview_thread_locks[__pyx_v_i]) == __pyx_v_self->lock) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":387
+ * for i in range(__pyx_memoryview_thread_locks_used):
+ * if __pyx_memoryview_thread_locks[i] is self.lock:
+ * __pyx_memoryview_thread_locks_used -= 1 # <<<<<<<<<<<<<<
+ * if i != __pyx_memoryview_thread_locks_used:
+ * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = (
+ */
+ __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used - 1);
+
+ /* "View.MemoryView":388
+ * if __pyx_memoryview_thread_locks[i] is self.lock:
+ * __pyx_memoryview_thread_locks_used -= 1
+ * if i != __pyx_memoryview_thread_locks_used: # <<<<<<<<<<<<<<
+ * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = (
+ * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i])
+ */
+ __pyx_t_2 = ((__pyx_v_i != __pyx_memoryview_thread_locks_used) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":390
+ * if i != __pyx_memoryview_thread_locks_used:
+ * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = (
+ * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) # <<<<<<<<<<<<<<
+ * break
+ * else:
+ */
+ __pyx_t_6 = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]);
+ __pyx_t_7 = (__pyx_memoryview_thread_locks[__pyx_v_i]);
+
+ /* "View.MemoryView":389
+ * __pyx_memoryview_thread_locks_used -= 1
+ * if i != __pyx_memoryview_thread_locks_used:
+ * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( # <<<<<<<<<<<<<<
+ * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i])
+ * break
+ */
+ (__pyx_memoryview_thread_locks[__pyx_v_i]) = __pyx_t_6;
+ (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]) = __pyx_t_7;
+
+ /* "View.MemoryView":388
+ * if __pyx_memoryview_thread_locks[i] is self.lock:
+ * __pyx_memoryview_thread_locks_used -= 1
+ * if i != __pyx_memoryview_thread_locks_used: # <<<<<<<<<<<<<<
+ * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = (
+ * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i])
+ */
+ }
+
+ /* "View.MemoryView":391
+ * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = (
+ * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i])
+ * break # <<<<<<<<<<<<<<
+ * else:
+ * PyThread_free_lock(self.lock)
+ */
+ goto __pyx_L6_break;
+
+ /* "View.MemoryView":386
+ * if self.lock != NULL:
+ * for i in range(__pyx_memoryview_thread_locks_used):
+ * if __pyx_memoryview_thread_locks[i] is self.lock: # <<<<<<<<<<<<<<
+ * __pyx_memoryview_thread_locks_used -= 1
+ * if i != __pyx_memoryview_thread_locks_used:
+ */
+ }
+ }
+ /*else*/ {
+
+ /* "View.MemoryView":393
+ * break
+ * else:
+ * PyThread_free_lock(self.lock) # <<<<<<<<<<<<<<
+ *
+ * cdef char *get_item_pointer(memoryview self, object index) except NULL:
+ */
+ PyThread_free_lock(__pyx_v_self->lock);
+ }
+ __pyx_L6_break:;
+
+ /* "View.MemoryView":384
+ * cdef int i
+ * global __pyx_memoryview_thread_locks_used
+ * if self.lock != NULL: # <<<<<<<<<<<<<<
+ * for i in range(__pyx_memoryview_thread_locks_used):
+ * if __pyx_memoryview_thread_locks[i] is self.lock:
+ */
+ }
+
+ /* "View.MemoryView":374
+ * self.typeinfo = NULL
+ *
+ * def __dealloc__(memoryview self): # <<<<<<<<<<<<<<
+ * if self.obj is not None:
+ * __Pyx_ReleaseBuffer(&self.view)
+ */
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+}
+
+/* "View.MemoryView":395
+ * PyThread_free_lock(self.lock)
+ *
+ * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<<
+ * cdef Py_ssize_t dim
+ * cdef char *itemp = self.view.buf
+ */
+
+static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) {
+ Py_ssize_t __pyx_v_dim;
+ char *__pyx_v_itemp;
+ PyObject *__pyx_v_idx = NULL;
+ char *__pyx_r;
+ __Pyx_RefNannyDeclarations
+ Py_ssize_t __pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ Py_ssize_t __pyx_t_3;
+ PyObject *(*__pyx_t_4)(PyObject *);
+ PyObject *__pyx_t_5 = NULL;
+ Py_ssize_t __pyx_t_6;
+ char *__pyx_t_7;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("get_item_pointer", 0);
+
+ /* "View.MemoryView":397
+ * cdef char *get_item_pointer(memoryview self, object index) except NULL:
+ * cdef Py_ssize_t dim
+ * cdef char *itemp = self.view.buf # <<<<<<<<<<<<<<
+ *
+ * for dim, idx in enumerate(index):
+ */
+ __pyx_v_itemp = ((char *)__pyx_v_self->view.buf);
+
+ /* "View.MemoryView":399
+ * cdef char *itemp = self.view.buf
+ *
+ * for dim, idx in enumerate(index): # <<<<<<<<<<<<<<
+ * itemp = pybuffer_index(&self.view, itemp, idx, dim)
+ *
+ */
+ __pyx_t_1 = 0;
+ if (likely(PyList_CheckExact(__pyx_v_index)) || PyTuple_CheckExact(__pyx_v_index)) {
+ __pyx_t_2 = __pyx_v_index; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
+ __pyx_t_4 = NULL;
+ } else {
+ __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 399, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 399, __pyx_L1_error)
+ }
+ for (;;) {
+ if (likely(!__pyx_t_4)) {
+ if (likely(PyList_CheckExact(__pyx_t_2))) {
+ if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
+ #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+ __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(1, 399, __pyx_L1_error)
+ #else
+ __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 399, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ #endif
+ } else {
+ if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
+ #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+ __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(1, 399, __pyx_L1_error)
+ #else
+ __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 399, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ #endif
+ }
+ } else {
+ __pyx_t_5 = __pyx_t_4(__pyx_t_2);
+ if (unlikely(!__pyx_t_5)) {
+ PyObject* exc_type = PyErr_Occurred();
+ if (exc_type) {
+ if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+ else __PYX_ERR(1, 399, __pyx_L1_error)
+ }
+ break;
+ }
+ __Pyx_GOTREF(__pyx_t_5);
+ }
+ __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_5);
+ __pyx_t_5 = 0;
+ __pyx_v_dim = __pyx_t_1;
+ __pyx_t_1 = (__pyx_t_1 + 1);
+
+ /* "View.MemoryView":400
+ *
+ * for dim, idx in enumerate(index):
+ * itemp = pybuffer_index(&self.view, itemp, idx, dim) # <<<<<<<<<<<<<<
+ *
+ * return itemp
+ */
+ __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_v_idx); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 400, __pyx_L1_error)
+ __pyx_t_7 = __pyx_pybuffer_index((&__pyx_v_self->view), __pyx_v_itemp, __pyx_t_6, __pyx_v_dim); if (unlikely(__pyx_t_7 == ((char *)NULL))) __PYX_ERR(1, 400, __pyx_L1_error)
+ __pyx_v_itemp = __pyx_t_7;
+
+ /* "View.MemoryView":399
+ * cdef char *itemp = self.view.buf
+ *
+ * for dim, idx in enumerate(index): # <<<<<<<<<<<<<<
+ * itemp = pybuffer_index(&self.view, itemp, idx, dim)
+ *
+ */
+ }
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+ /* "View.MemoryView":402
+ * itemp = pybuffer_index(&self.view, itemp, idx, dim)
+ *
+ * return itemp # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_r = __pyx_v_itemp;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":395
+ * PyThread_free_lock(self.lock)
+ *
+ * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<<
+ * cdef Py_ssize_t dim
+ * cdef char *itemp = self.view.buf
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_5);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.get_item_pointer", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XDECREF(__pyx_v_idx);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":405
+ *
+ *
+ * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<<
+ * if index is Ellipsis:
+ * return self
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index); /*proto*/
+static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
+ __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) {
+ PyObject *__pyx_v_have_slices = NULL;
+ PyObject *__pyx_v_indices = NULL;
+ char *__pyx_v_itemp;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ int __pyx_t_2;
+ PyObject *__pyx_t_3 = NULL;
+ PyObject *__pyx_t_4 = NULL;
+ PyObject *__pyx_t_5 = NULL;
+ char *__pyx_t_6;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__getitem__", 0);
+
+ /* "View.MemoryView":406
+ *
+ * def __getitem__(memoryview self, object index):
+ * if index is Ellipsis: # <<<<<<<<<<<<<<
+ * return self
+ *
+ */
+ __pyx_t_1 = (__pyx_v_index == __pyx_builtin_Ellipsis);
+ __pyx_t_2 = (__pyx_t_1 != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":407
+ * def __getitem__(memoryview self, object index):
+ * if index is Ellipsis:
+ * return self # <<<<<<<<<<<<<<
+ *
+ * have_slices, indices = _unellipsify(index, self.view.ndim)
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF(((PyObject *)__pyx_v_self));
+ __pyx_r = ((PyObject *)__pyx_v_self);
+ goto __pyx_L0;
+
+ /* "View.MemoryView":406
+ *
+ * def __getitem__(memoryview self, object index):
+ * if index is Ellipsis: # <<<<<<<<<<<<<<
+ * return self
+ *
+ */
+ }
+
+ /* "View.MemoryView":409
+ * return self
+ *
+ * have_slices, indices = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<<
+ *
+ * cdef char *itemp
+ */
+ __pyx_t_3 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 409, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ if (likely(__pyx_t_3 != Py_None)) {
+ PyObject* sequence = __pyx_t_3;
+ Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+ if (unlikely(size != 2)) {
+ if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+ else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+ __PYX_ERR(1, 409, __pyx_L1_error)
+ }
+ #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+ __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0);
+ __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1);
+ __Pyx_INCREF(__pyx_t_4);
+ __Pyx_INCREF(__pyx_t_5);
+ #else
+ __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 409, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 409, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ #endif
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ } else {
+ __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(1, 409, __pyx_L1_error)
+ }
+ __pyx_v_have_slices = __pyx_t_4;
+ __pyx_t_4 = 0;
+ __pyx_v_indices = __pyx_t_5;
+ __pyx_t_5 = 0;
+
+ /* "View.MemoryView":412
+ *
+ * cdef char *itemp
+ * if have_slices: # <<<<<<<<<<<<<<
+ * return memview_slice(self, indices)
+ * else:
+ */
+ __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 412, __pyx_L1_error)
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":413
+ * cdef char *itemp
+ * if have_slices:
+ * return memview_slice(self, indices) # <<<<<<<<<<<<<<
+ * else:
+ * itemp = self.get_item_pointer(indices)
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_3 = ((PyObject *)__pyx_memview_slice(__pyx_v_self, __pyx_v_indices)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 413, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_r = __pyx_t_3;
+ __pyx_t_3 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":412
+ *
+ * cdef char *itemp
+ * if have_slices: # <<<<<<<<<<<<<<
+ * return memview_slice(self, indices)
+ * else:
+ */
+ }
+
+ /* "View.MemoryView":415
+ * return memview_slice(self, indices)
+ * else:
+ * itemp = self.get_item_pointer(indices) # <<<<<<<<<<<<<<
+ * return self.convert_item_to_object(itemp)
+ *
+ */
+ /*else*/ {
+ __pyx_t_6 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_indices); if (unlikely(__pyx_t_6 == ((char *)NULL))) __PYX_ERR(1, 415, __pyx_L1_error)
+ __pyx_v_itemp = __pyx_t_6;
+
+ /* "View.MemoryView":416
+ * else:
+ * itemp = self.get_item_pointer(indices)
+ * return self.convert_item_to_object(itemp) # <<<<<<<<<<<<<<
+ *
+ * def __setitem__(memoryview self, object index, object value):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->convert_item_to_object(__pyx_v_self, __pyx_v_itemp); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 416, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_r = __pyx_t_3;
+ __pyx_t_3 = 0;
+ goto __pyx_L0;
+ }
+
+ /* "View.MemoryView":405
+ *
+ *
+ * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<<
+ * if index is Ellipsis:
+ * return self
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_XDECREF(__pyx_t_4);
+ __Pyx_XDECREF(__pyx_t_5);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XDECREF(__pyx_v_have_slices);
+ __Pyx_XDECREF(__pyx_v_indices);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":418
+ * return self.convert_item_to_object(itemp)
+ *
+ * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<<
+ * if self.view.readonly:
+ * raise TypeError("Cannot assign to read-only memoryview")
+ */
+
+/* Python wrapper */
+static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0);
+ __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index), ((PyObject *)__pyx_v_value));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) {
+ PyObject *__pyx_v_have_slices = NULL;
+ PyObject *__pyx_v_obj = NULL;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ PyObject *__pyx_t_4 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__setitem__", 0);
+ __Pyx_INCREF(__pyx_v_index);
+
+ /* "View.MemoryView":419
+ *
+ * def __setitem__(memoryview self, object index, object value):
+ * if self.view.readonly: # <<<<<<<<<<<<<<
+ * raise TypeError("Cannot assign to read-only memoryview")
+ *
+ */
+ __pyx_t_1 = (__pyx_v_self->view.readonly != 0);
+ if (unlikely(__pyx_t_1)) {
+
+ /* "View.MemoryView":420
+ * def __setitem__(memoryview self, object index, object value):
+ * if self.view.readonly:
+ * raise TypeError("Cannot assign to read-only memoryview") # <<<<<<<<<<<<<<
+ *
+ * have_slices, index = _unellipsify(index, self.view.ndim)
+ */
+ __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 420, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_Raise(__pyx_t_2, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __PYX_ERR(1, 420, __pyx_L1_error)
+
+ /* "View.MemoryView":419
+ *
+ * def __setitem__(memoryview self, object index, object value):
+ * if self.view.readonly: # <<<<<<<<<<<<<<
+ * raise TypeError("Cannot assign to read-only memoryview")
+ *
+ */
+ }
+
+ /* "View.MemoryView":422
+ * raise TypeError("Cannot assign to read-only memoryview")
+ *
+ * have_slices, index = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<<
+ *
+ * if have_slices:
+ */
+ __pyx_t_2 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 422, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ if (likely(__pyx_t_2 != Py_None)) {
+ PyObject* sequence = __pyx_t_2;
+ Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+ if (unlikely(size != 2)) {
+ if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+ else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+ __PYX_ERR(1, 422, __pyx_L1_error)
+ }
+ #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+ __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0);
+ __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1);
+ __Pyx_INCREF(__pyx_t_3);
+ __Pyx_INCREF(__pyx_t_4);
+ #else
+ __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 422, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 422, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ #endif
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ } else {
+ __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(1, 422, __pyx_L1_error)
+ }
+ __pyx_v_have_slices = __pyx_t_3;
+ __pyx_t_3 = 0;
+ __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_4);
+ __pyx_t_4 = 0;
+
+ /* "View.MemoryView":424
+ * have_slices, index = _unellipsify(index, self.view.ndim)
+ *
+ * if have_slices: # <<<<<<<<<<<<<<
+ * obj = self.is_slice(value)
+ * if obj:
+ */
+ __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 424, __pyx_L1_error)
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":425
+ *
+ * if have_slices:
+ * obj = self.is_slice(value) # <<<<<<<<<<<<<<
+ * if obj:
+ * self.setitem_slice_assignment(self[index], obj)
+ */
+ __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->is_slice(__pyx_v_self, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 425, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_v_obj = __pyx_t_2;
+ __pyx_t_2 = 0;
+
+ /* "View.MemoryView":426
+ * if have_slices:
+ * obj = self.is_slice(value)
+ * if obj: # <<<<<<<<<<<<<<
+ * self.setitem_slice_assignment(self[index], obj)
+ * else:
+ */
+ __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_obj); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 426, __pyx_L1_error)
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":427
+ * obj = self.is_slice(value)
+ * if obj:
+ * self.setitem_slice_assignment(self[index], obj) # <<<<<<<<<<<<<<
+ * else:
+ * self.setitem_slice_assign_scalar(self[index], value)
+ */
+ __pyx_t_2 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 427, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_4 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assignment(__pyx_v_self, __pyx_t_2, __pyx_v_obj); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 427, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+ /* "View.MemoryView":426
+ * if have_slices:
+ * obj = self.is_slice(value)
+ * if obj: # <<<<<<<<<<<<<<
+ * self.setitem_slice_assignment(self[index], obj)
+ * else:
+ */
+ goto __pyx_L5;
+ }
+
+ /* "View.MemoryView":429
+ * self.setitem_slice_assignment(self[index], obj)
+ * else:
+ * self.setitem_slice_assign_scalar(self[index], value) # <<<<<<<<<<<<<<
+ * else:
+ * self.setitem_indexed(index, value)
+ */
+ /*else*/ {
+ __pyx_t_4 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 429, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_memoryview_type))))) __PYX_ERR(1, 429, __pyx_L1_error)
+ __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assign_scalar(__pyx_v_self, ((struct __pyx_memoryview_obj *)__pyx_t_4), __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 429, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ }
+ __pyx_L5:;
+
+ /* "View.MemoryView":424
+ * have_slices, index = _unellipsify(index, self.view.ndim)
+ *
+ * if have_slices: # <<<<<<<<<<<<<<
+ * obj = self.is_slice(value)
+ * if obj:
+ */
+ goto __pyx_L4;
+ }
+
+ /* "View.MemoryView":431
+ * self.setitem_slice_assign_scalar(self[index], value)
+ * else:
+ * self.setitem_indexed(index, value) # <<<<<<<<<<<<<<
+ *
+ * cdef is_slice(self, obj):
+ */
+ /*else*/ {
+ __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_indexed(__pyx_v_self, __pyx_v_index, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 431, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ }
+ __pyx_L4:;
+
+ /* "View.MemoryView":418
+ * return self.convert_item_to_object(itemp)
+ *
+ * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<<
+ * if self.view.readonly:
+ * raise TypeError("Cannot assign to read-only memoryview")
+ */
+
+ /* function exit code */
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_XDECREF(__pyx_t_4);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __pyx_L0:;
+ __Pyx_XDECREF(__pyx_v_have_slices);
+ __Pyx_XDECREF(__pyx_v_obj);
+ __Pyx_XDECREF(__pyx_v_index);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":433
+ * self.setitem_indexed(index, value)
+ *
+ * cdef is_slice(self, obj): # <<<<<<<<<<<<<<
+ * if not isinstance(obj, memoryview):
+ * try:
+ */
+
+static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ int __pyx_t_2;
+ PyObject *__pyx_t_3 = NULL;
+ PyObject *__pyx_t_4 = NULL;
+ PyObject *__pyx_t_5 = NULL;
+ PyObject *__pyx_t_6 = NULL;
+ PyObject *__pyx_t_7 = NULL;
+ PyObject *__pyx_t_8 = NULL;
+ int __pyx_t_9;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("is_slice", 0);
+ __Pyx_INCREF(__pyx_v_obj);
+
+ /* "View.MemoryView":434
+ *
+ * cdef is_slice(self, obj):
+ * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<<
+ * try:
+ * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
+ */
+ __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_memoryview_type);
+ __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":435
+ * cdef is_slice(self, obj):
+ * if not isinstance(obj, memoryview):
+ * try: # <<<<<<<<<<<<<<
+ * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
+ * self.dtype_is_object)
+ */
+ {
+ __Pyx_PyThreadState_declare
+ __Pyx_PyThreadState_assign
+ __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
+ __Pyx_XGOTREF(__pyx_t_3);
+ __Pyx_XGOTREF(__pyx_t_4);
+ __Pyx_XGOTREF(__pyx_t_5);
+ /*try:*/ {
+
+ /* "View.MemoryView":436
+ * if not isinstance(obj, memoryview):
+ * try:
+ * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<<
+ * self.dtype_is_object)
+ * except TypeError:
+ */
+ __pyx_t_6 = __Pyx_PyInt_From_int(((__pyx_v_self->flags & (~PyBUF_WRITABLE)) | PyBUF_ANY_CONTIGUOUS)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 436, __pyx_L4_error)
+ __Pyx_GOTREF(__pyx_t_6);
+
+ /* "View.MemoryView":437
+ * try:
+ * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
+ * self.dtype_is_object) # <<<<<<<<<<<<<<
+ * except TypeError:
+ * return None
+ */
+ __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 437, __pyx_L4_error)
+ __Pyx_GOTREF(__pyx_t_7);
+
+ /* "View.MemoryView":436
+ * if not isinstance(obj, memoryview):
+ * try:
+ * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<<
+ * self.dtype_is_object)
+ * except TypeError:
+ */
+ __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 436, __pyx_L4_error)
+ __Pyx_GOTREF(__pyx_t_8);
+ __Pyx_INCREF(__pyx_v_obj);
+ __Pyx_GIVEREF(__pyx_v_obj);
+ PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_obj);
+ __Pyx_GIVEREF(__pyx_t_6);
+ PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6);
+ __Pyx_GIVEREF(__pyx_t_7);
+ PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_7);
+ __pyx_t_6 = 0;
+ __pyx_t_7 = 0;
+ __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 436, __pyx_L4_error)
+ __Pyx_GOTREF(__pyx_t_7);
+ __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+ __Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_7);
+ __pyx_t_7 = 0;
+
+ /* "View.MemoryView":435
+ * cdef is_slice(self, obj):
+ * if not isinstance(obj, memoryview):
+ * try: # <<<<<<<<<<<<<<
+ * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
+ * self.dtype_is_object)
+ */
+ }
+ __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+ __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+ goto __pyx_L9_try_end;
+ __pyx_L4_error:;
+ __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+ __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+ __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+ /* "View.MemoryView":438
+ * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
+ * self.dtype_is_object)
+ * except TypeError: # <<<<<<<<<<<<<<
+ * return None
+ *
+ */
+ __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
+ if (__pyx_t_9) {
+ __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_6) < 0) __PYX_ERR(1, 438, __pyx_L6_except_error)
+ __Pyx_GOTREF(__pyx_t_7);
+ __Pyx_GOTREF(__pyx_t_8);
+ __Pyx_GOTREF(__pyx_t_6);
+
+ /* "View.MemoryView":439
+ * self.dtype_is_object)
+ * except TypeError:
+ * return None # <<<<<<<<<<<<<<
+ *
+ * return obj
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+ __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+ __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+ goto __pyx_L7_except_return;
+ }
+ goto __pyx_L6_except_error;
+ __pyx_L6_except_error:;
+
+ /* "View.MemoryView":435
+ * cdef is_slice(self, obj):
+ * if not isinstance(obj, memoryview):
+ * try: # <<<<<<<<<<<<<<
+ * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
+ * self.dtype_is_object)
+ */
+ __Pyx_XGIVEREF(__pyx_t_3);
+ __Pyx_XGIVEREF(__pyx_t_4);
+ __Pyx_XGIVEREF(__pyx_t_5);
+ __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
+ goto __pyx_L1_error;
+ __pyx_L7_except_return:;
+ __Pyx_XGIVEREF(__pyx_t_3);
+ __Pyx_XGIVEREF(__pyx_t_4);
+ __Pyx_XGIVEREF(__pyx_t_5);
+ __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
+ goto __pyx_L0;
+ __pyx_L9_try_end:;
+ }
+
+ /* "View.MemoryView":434
+ *
+ * cdef is_slice(self, obj):
+ * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<<
+ * try:
+ * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
+ */
+ }
+
+ /* "View.MemoryView":441
+ * return None
+ *
+ * return obj # <<<<<<<<<<<<<<
+ *
+ * cdef setitem_slice_assignment(self, dst, src):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF(__pyx_v_obj);
+ __pyx_r = __pyx_v_obj;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":433
+ * self.setitem_indexed(index, value)
+ *
+ * cdef is_slice(self, obj): # <<<<<<<<<<<<<<
+ * if not isinstance(obj, memoryview):
+ * try:
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_6);
+ __Pyx_XDECREF(__pyx_t_7);
+ __Pyx_XDECREF(__pyx_t_8);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XDECREF(__pyx_v_obj);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":443
+ * return obj
+ *
+ * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<<
+ * cdef __Pyx_memviewslice dst_slice
+ * cdef __Pyx_memviewslice src_slice
+ */
+
+static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src) {
+ __Pyx_memviewslice __pyx_v_dst_slice;
+ __Pyx_memviewslice __pyx_v_src_slice;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ __Pyx_memviewslice *__pyx_t_1;
+ __Pyx_memviewslice *__pyx_t_2;
+ PyObject *__pyx_t_3 = NULL;
+ int __pyx_t_4;
+ int __pyx_t_5;
+ int __pyx_t_6;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("setitem_slice_assignment", 0);
+
+ /* "View.MemoryView":447
+ * cdef __Pyx_memviewslice src_slice
+ *
+ * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], # <<<<<<<<<<<<<<
+ * get_slice_from_memview(dst, &dst_slice)[0],
+ * src.ndim, dst.ndim, self.dtype_is_object)
+ */
+ if (!(likely(((__pyx_v_src) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_src, __pyx_memoryview_type))))) __PYX_ERR(1, 447, __pyx_L1_error)
+ __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_src), (&__pyx_v_src_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 447, __pyx_L1_error)
+
+ /* "View.MemoryView":448
+ *
+ * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0],
+ * get_slice_from_memview(dst, &dst_slice)[0], # <<<<<<<<<<<<<<
+ * src.ndim, dst.ndim, self.dtype_is_object)
+ *
+ */
+ if (!(likely(((__pyx_v_dst) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dst, __pyx_memoryview_type))))) __PYX_ERR(1, 448, __pyx_L1_error)
+ __pyx_t_2 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_dst), (&__pyx_v_dst_slice)); if (unlikely(__pyx_t_2 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 448, __pyx_L1_error)
+
+ /* "View.MemoryView":449
+ * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0],
+ * get_slice_from_memview(dst, &dst_slice)[0],
+ * src.ndim, dst.ndim, self.dtype_is_object) # <<<<<<<<<<<<<<
+ *
+ * cdef setitem_slice_assign_scalar(self, memoryview dst, value):
+ */
+ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_src, __pyx_n_s_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 449, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 449, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_dst, __pyx_n_s_ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 449, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_3); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 449, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+ /* "View.MemoryView":447
+ * cdef __Pyx_memviewslice src_slice
+ *
+ * memoryview_copy_contents(get_slice_from_memview(src, &src_slice)[0], # <<<<<<<<<<<<<<
+ * get_slice_from_memview(dst, &dst_slice)[0],
+ * src.ndim, dst.ndim, self.dtype_is_object)
+ */
+ __pyx_t_6 = __pyx_memoryview_copy_contents((__pyx_t_1[0]), (__pyx_t_2[0]), __pyx_t_4, __pyx_t_5, __pyx_v_self->dtype_is_object); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 447, __pyx_L1_error)
+
+ /* "View.MemoryView":443
+ * return obj
+ *
+ * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<<
+ * cdef __Pyx_memviewslice dst_slice
+ * cdef __Pyx_memviewslice src_slice
+ */
+
+ /* function exit code */
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assignment", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":451
+ * src.ndim, dst.ndim, self.dtype_is_object)
+ *
+ * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<<
+ * cdef int array[128]
+ * cdef void *tmp = NULL
+ */
+
+static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value) {
+ int __pyx_v_array[0x80];
+ void *__pyx_v_tmp;
+ void *__pyx_v_item;
+ __Pyx_memviewslice *__pyx_v_dst_slice;
+ __Pyx_memviewslice __pyx_v_tmp_slice;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ __Pyx_memviewslice *__pyx_t_1;
+ int __pyx_t_2;
+ PyObject *__pyx_t_3 = NULL;
+ int __pyx_t_4;
+ int __pyx_t_5;
+ char const *__pyx_t_6;
+ PyObject *__pyx_t_7 = NULL;
+ PyObject *__pyx_t_8 = NULL;
+ PyObject *__pyx_t_9 = NULL;
+ PyObject *__pyx_t_10 = NULL;
+ PyObject *__pyx_t_11 = NULL;
+ PyObject *__pyx_t_12 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("setitem_slice_assign_scalar", 0);
+
+ /* "View.MemoryView":453
+ * cdef setitem_slice_assign_scalar(self, memoryview dst, value):
+ * cdef int array[128]
+ * cdef void *tmp = NULL # <<<<<<<<<<<<<<
+ * cdef void *item
+ *
+ */
+ __pyx_v_tmp = NULL;
+
+ /* "View.MemoryView":458
+ * cdef __Pyx_memviewslice *dst_slice
+ * cdef __Pyx_memviewslice tmp_slice
+ * dst_slice = get_slice_from_memview(dst, &tmp_slice) # <<<<<<<<<<<<<<
+ *
+ * if self.view.itemsize > sizeof(array):
+ */
+ __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_dst, (&__pyx_v_tmp_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 458, __pyx_L1_error)
+ __pyx_v_dst_slice = __pyx_t_1;
+
+ /* "View.MemoryView":460
+ * dst_slice = get_slice_from_memview(dst, &tmp_slice)
+ *
+ * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<<
+ * tmp = PyMem_Malloc(self.view.itemsize)
+ * if tmp == NULL:
+ */
+ __pyx_t_2 = ((((size_t)__pyx_v_self->view.itemsize) > (sizeof(__pyx_v_array))) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":461
+ *
+ * if self.view.itemsize > sizeof(array):
+ * tmp = PyMem_Malloc(self.view.itemsize) # <<<<<<<<<<<<<<
+ * if tmp == NULL:
+ * raise MemoryError
+ */
+ __pyx_v_tmp = PyMem_Malloc(__pyx_v_self->view.itemsize);
+
+ /* "View.MemoryView":462
+ * if self.view.itemsize > sizeof(array):
+ * tmp = PyMem_Malloc(self.view.itemsize)
+ * if tmp == NULL: # <<<<<<<<<<<<<<
+ * raise MemoryError
+ * item = tmp
+ */
+ __pyx_t_2 = ((__pyx_v_tmp == NULL) != 0);
+ if (unlikely(__pyx_t_2)) {
+
+ /* "View.MemoryView":463
+ * tmp = PyMem_Malloc(self.view.itemsize)
+ * if tmp == NULL:
+ * raise MemoryError # <<<<<<<<<<<<<<
+ * item = tmp
+ * else:
+ */
+ PyErr_NoMemory(); __PYX_ERR(1, 463, __pyx_L1_error)
+
+ /* "View.MemoryView":462
+ * if self.view.itemsize > sizeof(array):
+ * tmp = PyMem_Malloc(self.view.itemsize)
+ * if tmp == NULL: # <<<<<<<<<<<<<<
+ * raise MemoryError
+ * item = tmp
+ */
+ }
+
+ /* "View.MemoryView":464
+ * if tmp == NULL:
+ * raise MemoryError
+ * item = tmp # <<<<<<<<<<<<<<
+ * else:
+ * item = array
+ */
+ __pyx_v_item = __pyx_v_tmp;
+
+ /* "View.MemoryView":460
+ * dst_slice = get_slice_from_memview(dst, &tmp_slice)
+ *
+ * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<<
+ * tmp = PyMem_Malloc(self.view.itemsize)
+ * if tmp == NULL:
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":466
+ * item = tmp
+ * else:
+ * item = array # <<<<<<<<<<<<<<
+ *
+ * try:
+ */
+ /*else*/ {
+ __pyx_v_item = ((void *)__pyx_v_array);
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":468
+ * item = array
+ *
+ * try: # <<<<<<<<<<<<<<
+ * if self.dtype_is_object:
+ * ( item)[0] = value
+ */
+ /*try:*/ {
+
+ /* "View.MemoryView":469
+ *
+ * try:
+ * if self.dtype_is_object: # <<<<<<<<<<<<<<
+ * ( item)[0] = value
+ * else:
+ */
+ __pyx_t_2 = (__pyx_v_self->dtype_is_object != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":470
+ * try:
+ * if self.dtype_is_object:
+ * ( item)[0] = value # <<<<<<<<<<<<<<
+ * else:
+ * self.assign_item_from_object( item, value)
+ */
+ (((PyObject **)__pyx_v_item)[0]) = ((PyObject *)__pyx_v_value);
+
+ /* "View.MemoryView":469
+ *
+ * try:
+ * if self.dtype_is_object: # <<<<<<<<<<<<<<
+ * ( item)[0] = value
+ * else:
+ */
+ goto __pyx_L8;
+ }
+
+ /* "View.MemoryView":472
+ * ( item)[0] = value
+ * else:
+ * self.assign_item_from_object( item, value) # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ /*else*/ {
+ __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, ((char *)__pyx_v_item), __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 472, __pyx_L6_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ }
+ __pyx_L8:;
+
+ /* "View.MemoryView":476
+ *
+ *
+ * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<<
+ * assert_direct_dimensions(self.view.suboffsets, self.view.ndim)
+ * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize,
+ */
+ __pyx_t_2 = ((__pyx_v_self->view.suboffsets != NULL) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":477
+ *
+ * if self.view.suboffsets != NULL:
+ * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) # <<<<<<<<<<<<<<
+ * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize,
+ * item, self.dtype_is_object)
+ */
+ __pyx_t_3 = assert_direct_dimensions(__pyx_v_self->view.suboffsets, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 477, __pyx_L6_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+ /* "View.MemoryView":476
+ *
+ *
+ * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<<
+ * assert_direct_dimensions(self.view.suboffsets, self.view.ndim)
+ * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize,
+ */
+ }
+
+ /* "View.MemoryView":478
+ * if self.view.suboffsets != NULL:
+ * assert_direct_dimensions(self.view.suboffsets, self.view.ndim)
+ * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, # <<<<<<<<<<<<<<
+ * item, self.dtype_is_object)
+ * finally:
+ */
+ __pyx_memoryview_slice_assign_scalar(__pyx_v_dst_slice, __pyx_v_dst->view.ndim, __pyx_v_self->view.itemsize, __pyx_v_item, __pyx_v_self->dtype_is_object);
+ }
+
+ /* "View.MemoryView":481
+ * item, self.dtype_is_object)
+ * finally:
+ * PyMem_Free(tmp) # <<<<<<<<<<<<<<
+ *
+ * cdef setitem_indexed(self, index, value):
+ */
+ /*finally:*/ {
+ /*normal exit:*/{
+ PyMem_Free(__pyx_v_tmp);
+ goto __pyx_L7;
+ }
+ __pyx_L6_error:;
+ /*exception exit:*/{
+ __Pyx_PyThreadState_declare
+ __Pyx_PyThreadState_assign
+ __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
+ __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+ if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
+ if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
+ __Pyx_XGOTREF(__pyx_t_7);
+ __Pyx_XGOTREF(__pyx_t_8);
+ __Pyx_XGOTREF(__pyx_t_9);
+ __Pyx_XGOTREF(__pyx_t_10);
+ __Pyx_XGOTREF(__pyx_t_11);
+ __Pyx_XGOTREF(__pyx_t_12);
+ __pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
+ {
+ PyMem_Free(__pyx_v_tmp);
+ }
+ if (PY_MAJOR_VERSION >= 3) {
+ __Pyx_XGIVEREF(__pyx_t_10);
+ __Pyx_XGIVEREF(__pyx_t_11);
+ __Pyx_XGIVEREF(__pyx_t_12);
+ __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
+ }
+ __Pyx_XGIVEREF(__pyx_t_7);
+ __Pyx_XGIVEREF(__pyx_t_8);
+ __Pyx_XGIVEREF(__pyx_t_9);
+ __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
+ __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
+ __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
+ goto __pyx_L1_error;
+ }
+ __pyx_L7:;
+ }
+
+ /* "View.MemoryView":451
+ * src.ndim, dst.ndim, self.dtype_is_object)
+ *
+ * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<<
+ * cdef int array[128]
+ * cdef void *tmp = NULL
+ */
+
+ /* function exit code */
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assign_scalar", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":483
+ * PyMem_Free(tmp)
+ *
+ * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<<
+ * cdef char *itemp = self.get_item_pointer(index)
+ * self.assign_item_from_object(itemp, value)
+ */
+
+static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) {
+ char *__pyx_v_itemp;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ char *__pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("setitem_indexed", 0);
+
+ /* "View.MemoryView":484
+ *
+ * cdef setitem_indexed(self, index, value):
+ * cdef char *itemp = self.get_item_pointer(index) # <<<<<<<<<<<<<<
+ * self.assign_item_from_object(itemp, value)
+ *
+ */
+ __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_index); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(1, 484, __pyx_L1_error)
+ __pyx_v_itemp = __pyx_t_1;
+
+ /* "View.MemoryView":485
+ * cdef setitem_indexed(self, index, value):
+ * cdef char *itemp = self.get_item_pointer(index)
+ * self.assign_item_from_object(itemp, value) # <<<<<<<<<<<<<<
+ *
+ * cdef convert_item_to_object(self, char *itemp):
+ */
+ __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 485, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+ /* "View.MemoryView":483
+ * PyMem_Free(tmp)
+ *
+ * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<<
+ * cdef char *itemp = self.get_item_pointer(index)
+ * self.assign_item_from_object(itemp, value)
+ */
+
+ /* function exit code */
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_indexed", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":487
+ * self.assign_item_from_object(itemp, value)
+ *
+ * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<<
+ * """Only used if instantiated manually by the user, or if Cython doesn't
+ * know how to convert the type"""
+ */
+
+static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp) {
+ PyObject *__pyx_v_struct = NULL;
+ PyObject *__pyx_v_bytesitem = 0;
+ PyObject *__pyx_v_result = NULL;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ PyObject *__pyx_t_4 = NULL;
+ PyObject *__pyx_t_5 = NULL;
+ PyObject *__pyx_t_6 = NULL;
+ PyObject *__pyx_t_7 = NULL;
+ int __pyx_t_8;
+ PyObject *__pyx_t_9 = NULL;
+ size_t __pyx_t_10;
+ int __pyx_t_11;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("convert_item_to_object", 0);
+
+ /* "View.MemoryView":490
+ * """Only used if instantiated manually by the user, or if Cython doesn't
+ * know how to convert the type"""
+ * import struct # <<<<<<<<<<<<<<
+ * cdef bytes bytesitem
+ *
+ */
+ __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 490, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_v_struct = __pyx_t_1;
+ __pyx_t_1 = 0;
+
+ /* "View.MemoryView":493
+ * cdef bytes bytesitem
+ *
+ * bytesitem = itemp[:self.view.itemsize] # <<<<<<<<<<<<<<
+ * try:
+ * result = struct.unpack(self.view.format, bytesitem)
+ */
+ __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_itemp + 0, __pyx_v_self->view.itemsize - 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 493, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_v_bytesitem = ((PyObject*)__pyx_t_1);
+ __pyx_t_1 = 0;
+
+ /* "View.MemoryView":494
+ *
+ * bytesitem = itemp[:self.view.itemsize]
+ * try: # <<<<<<<<<<<<<<
+ * result = struct.unpack(self.view.format, bytesitem)
+ * except struct.error:
+ */
+ {
+ __Pyx_PyThreadState_declare
+ __Pyx_PyThreadState_assign
+ __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
+ __Pyx_XGOTREF(__pyx_t_2);
+ __Pyx_XGOTREF(__pyx_t_3);
+ __Pyx_XGOTREF(__pyx_t_4);
+ /*try:*/ {
+
+ /* "View.MemoryView":495
+ * bytesitem = itemp[:self.view.itemsize]
+ * try:
+ * result = struct.unpack(self.view.format, bytesitem) # <<<<<<<<<<<<<<
+ * except struct.error:
+ * raise ValueError("Unable to convert item to object")
+ */
+ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_unpack); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 495, __pyx_L3_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __pyx_t_6 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 495, __pyx_L3_error)
+ __Pyx_GOTREF(__pyx_t_6);
+ __pyx_t_7 = NULL;
+ __pyx_t_8 = 0;
+ if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
+ __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
+ if (likely(__pyx_t_7)) {
+ PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
+ __Pyx_INCREF(__pyx_t_7);
+ __Pyx_INCREF(function);
+ __Pyx_DECREF_SET(__pyx_t_5, function);
+ __pyx_t_8 = 1;
+ }
+ }
+ #if CYTHON_FAST_PYCALL
+ if (PyFunction_Check(__pyx_t_5)) {
+ PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem};
+ __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 495, __pyx_L3_error)
+ __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+ } else
+ #endif
+ #if CYTHON_FAST_PYCCALL
+ if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+ PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem};
+ __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 495, __pyx_L3_error)
+ __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+ } else
+ #endif
+ {
+ __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 495, __pyx_L3_error)
+ __Pyx_GOTREF(__pyx_t_9);
+ if (__pyx_t_7) {
+ __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL;
+ }
+ __Pyx_GIVEREF(__pyx_t_6);
+ PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_6);
+ __Pyx_INCREF(__pyx_v_bytesitem);
+ __Pyx_GIVEREF(__pyx_v_bytesitem);
+ PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_v_bytesitem);
+ __pyx_t_6 = 0;
+ __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 495, __pyx_L3_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+ }
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ __pyx_v_result = __pyx_t_1;
+ __pyx_t_1 = 0;
+
+ /* "View.MemoryView":494
+ *
+ * bytesitem = itemp[:self.view.itemsize]
+ * try: # <<<<<<<<<<<<<<
+ * result = struct.unpack(self.view.format, bytesitem)
+ * except struct.error:
+ */
+ }
+
+ /* "View.MemoryView":499
+ * raise ValueError("Unable to convert item to object")
+ * else:
+ * if len(self.view.format) == 1: # <<<<<<<<<<<<<<
+ * return result[0]
+ * return result
+ */
+ /*else:*/ {
+ __pyx_t_10 = strlen(__pyx_v_self->view.format);
+ __pyx_t_11 = ((__pyx_t_10 == 1) != 0);
+ if (__pyx_t_11) {
+
+ /* "View.MemoryView":500
+ * else:
+ * if len(self.view.format) == 1:
+ * return result[0] # <<<<<<<<<<<<<<
+ * return result
+ *
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_result, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 500, __pyx_L5_except_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L6_except_return;
+
+ /* "View.MemoryView":499
+ * raise ValueError("Unable to convert item to object")
+ * else:
+ * if len(self.view.format) == 1: # <<<<<<<<<<<<<<
+ * return result[0]
+ * return result
+ */
+ }
+
+ /* "View.MemoryView":501
+ * if len(self.view.format) == 1:
+ * return result[0]
+ * return result # <<<<<<<<<<<<<<
+ *
+ * cdef assign_item_from_object(self, char *itemp, object value):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF(__pyx_v_result);
+ __pyx_r = __pyx_v_result;
+ goto __pyx_L6_except_return;
+ }
+ __pyx_L3_error:;
+ __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+ __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+ __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+ __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+
+ /* "View.MemoryView":496
+ * try:
+ * result = struct.unpack(self.view.format, bytesitem)
+ * except struct.error: # <<<<<<<<<<<<<<
+ * raise ValueError("Unable to convert item to object")
+ * else:
+ */
+ __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_5, &__pyx_t_9);
+ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_error); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 496, __pyx_L5_except_error)
+ __Pyx_GOTREF(__pyx_t_6);
+ __pyx_t_8 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_6);
+ __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+ __Pyx_ErrRestore(__pyx_t_1, __pyx_t_5, __pyx_t_9);
+ __pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_9 = 0;
+ if (__pyx_t_8) {
+ __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(1, 496, __pyx_L5_except_error)
+ __Pyx_GOTREF(__pyx_t_9);
+ __Pyx_GOTREF(__pyx_t_5);
+ __Pyx_GOTREF(__pyx_t_1);
+
+ /* "View.MemoryView":497
+ * result = struct.unpack(self.view.format, bytesitem)
+ * except struct.error:
+ * raise ValueError("Unable to convert item to object") # <<<<<<<<<<<<<<
+ * else:
+ * if len(self.view.format) == 1:
+ */
+ __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 497, __pyx_L5_except_error)
+ __Pyx_GOTREF(__pyx_t_6);
+ __Pyx_Raise(__pyx_t_6, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+ __PYX_ERR(1, 497, __pyx_L5_except_error)
+ }
+ goto __pyx_L5_except_error;
+ __pyx_L5_except_error:;
+
+ /* "View.MemoryView":494
+ *
+ * bytesitem = itemp[:self.view.itemsize]
+ * try: # <<<<<<<<<<<<<<
+ * result = struct.unpack(self.view.format, bytesitem)
+ * except struct.error:
+ */
+ __Pyx_XGIVEREF(__pyx_t_2);
+ __Pyx_XGIVEREF(__pyx_t_3);
+ __Pyx_XGIVEREF(__pyx_t_4);
+ __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
+ goto __pyx_L1_error;
+ __pyx_L6_except_return:;
+ __Pyx_XGIVEREF(__pyx_t_2);
+ __Pyx_XGIVEREF(__pyx_t_3);
+ __Pyx_XGIVEREF(__pyx_t_4);
+ __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
+ goto __pyx_L0;
+ }
+
+ /* "View.MemoryView":487
+ * self.assign_item_from_object(itemp, value)
+ *
+ * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<<
+ * """Only used if instantiated manually by the user, or if Cython doesn't
+ * know how to convert the type"""
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_5);
+ __Pyx_XDECREF(__pyx_t_6);
+ __Pyx_XDECREF(__pyx_t_7);
+ __Pyx_XDECREF(__pyx_t_9);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XDECREF(__pyx_v_struct);
+ __Pyx_XDECREF(__pyx_v_bytesitem);
+ __Pyx_XDECREF(__pyx_v_result);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":503
+ * return result
+ *
+ * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<<
+ * """Only used if instantiated manually by the user, or if Cython doesn't
+ * know how to convert the type"""
+ */
+
+static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) {
+ PyObject *__pyx_v_struct = NULL;
+ char __pyx_v_c;
+ PyObject *__pyx_v_bytesvalue = 0;
+ Py_ssize_t __pyx_v_i;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_t_2;
+ int __pyx_t_3;
+ PyObject *__pyx_t_4 = NULL;
+ PyObject *__pyx_t_5 = NULL;
+ PyObject *__pyx_t_6 = NULL;
+ int __pyx_t_7;
+ PyObject *__pyx_t_8 = NULL;
+ Py_ssize_t __pyx_t_9;
+ PyObject *__pyx_t_10 = NULL;
+ char *__pyx_t_11;
+ char *__pyx_t_12;
+ char *__pyx_t_13;
+ char *__pyx_t_14;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("assign_item_from_object", 0);
+
+ /* "View.MemoryView":506
+ * """Only used if instantiated manually by the user, or if Cython doesn't
+ * know how to convert the type"""
+ * import struct # <<<<<<<<<<<<<<
+ * cdef char c
+ * cdef bytes bytesvalue
+ */
+ __pyx_t_1 = __Pyx_Import(__pyx_n_s_struct, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 506, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_v_struct = __pyx_t_1;
+ __pyx_t_1 = 0;
+
+ /* "View.MemoryView":511
+ * cdef Py_ssize_t i
+ *
+ * if isinstance(value, tuple): # <<<<<<<<<<<<<<
+ * bytesvalue = struct.pack(self.view.format, *value)
+ * else:
+ */
+ __pyx_t_2 = PyTuple_Check(__pyx_v_value);
+ __pyx_t_3 = (__pyx_t_2 != 0);
+ if (__pyx_t_3) {
+
+ /* "View.MemoryView":512
+ *
+ * if isinstance(value, tuple):
+ * bytesvalue = struct.pack(self.view.format, *value) # <<<<<<<<<<<<<<
+ * else:
+ * bytesvalue = struct.pack(self.view.format, value)
+ */
+ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 512, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_4 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 512, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 512, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __Pyx_GIVEREF(__pyx_t_4);
+ PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
+ __pyx_t_4 = 0;
+ __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 512, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __pyx_t_6 = PyNumber_Add(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 512, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_6);
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+ __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 512, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+ if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(1, 512, __pyx_L1_error)
+ __pyx_v_bytesvalue = ((PyObject*)__pyx_t_4);
+ __pyx_t_4 = 0;
+
+ /* "View.MemoryView":511
+ * cdef Py_ssize_t i
+ *
+ * if isinstance(value, tuple): # <<<<<<<<<<<<<<
+ * bytesvalue = struct.pack(self.view.format, *value)
+ * else:
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":514
+ * bytesvalue = struct.pack(self.view.format, *value)
+ * else:
+ * bytesvalue = struct.pack(self.view.format, value) # <<<<<<<<<<<<<<
+ *
+ * for i, c in enumerate(bytesvalue):
+ */
+ /*else*/ {
+ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 514, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_6);
+ __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 514, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_5 = NULL;
+ __pyx_t_7 = 0;
+ if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
+ __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
+ if (likely(__pyx_t_5)) {
+ PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
+ __Pyx_INCREF(__pyx_t_5);
+ __Pyx_INCREF(function);
+ __Pyx_DECREF_SET(__pyx_t_6, function);
+ __pyx_t_7 = 1;
+ }
+ }
+ #if CYTHON_FAST_PYCALL
+ if (PyFunction_Check(__pyx_t_6)) {
+ PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_1, __pyx_v_value};
+ __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 514, __pyx_L1_error)
+ __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+ __Pyx_GOTREF(__pyx_t_4);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ } else
+ #endif
+ #if CYTHON_FAST_PYCCALL
+ if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
+ PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_1, __pyx_v_value};
+ __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 514, __pyx_L1_error)
+ __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+ __Pyx_GOTREF(__pyx_t_4);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ } else
+ #endif
+ {
+ __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 514, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_8);
+ if (__pyx_t_5) {
+ __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5); __pyx_t_5 = NULL;
+ }
+ __Pyx_GIVEREF(__pyx_t_1);
+ PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_1);
+ __Pyx_INCREF(__pyx_v_value);
+ __Pyx_GIVEREF(__pyx_v_value);
+ PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_v_value);
+ __pyx_t_1 = 0;
+ __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 514, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+ }
+ __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+ if (!(likely(PyBytes_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "bytes", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(1, 514, __pyx_L1_error)
+ __pyx_v_bytesvalue = ((PyObject*)__pyx_t_4);
+ __pyx_t_4 = 0;
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":516
+ * bytesvalue = struct.pack(self.view.format, value)
+ *
+ * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<<
+ * itemp[i] = c
+ *
+ */
+ __pyx_t_9 = 0;
+ if (unlikely(__pyx_v_bytesvalue == Py_None)) {
+ PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable");
+ __PYX_ERR(1, 516, __pyx_L1_error)
+ }
+ __Pyx_INCREF(__pyx_v_bytesvalue);
+ __pyx_t_10 = __pyx_v_bytesvalue;
+ __pyx_t_12 = PyBytes_AS_STRING(__pyx_t_10);
+ __pyx_t_13 = (__pyx_t_12 + PyBytes_GET_SIZE(__pyx_t_10));
+ for (__pyx_t_14 = __pyx_t_12; __pyx_t_14 < __pyx_t_13; __pyx_t_14++) {
+ __pyx_t_11 = __pyx_t_14;
+ __pyx_v_c = (__pyx_t_11[0]);
+
+ /* "View.MemoryView":517
+ *
+ * for i, c in enumerate(bytesvalue):
+ * itemp[i] = c # <<<<<<<<<<<<<<
+ *
+ * @cname('getbuffer')
+ */
+ __pyx_v_i = __pyx_t_9;
+
+ /* "View.MemoryView":516
+ * bytesvalue = struct.pack(self.view.format, value)
+ *
+ * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<<
+ * itemp[i] = c
+ *
+ */
+ __pyx_t_9 = (__pyx_t_9 + 1);
+
+ /* "View.MemoryView":517
+ *
+ * for i, c in enumerate(bytesvalue):
+ * itemp[i] = c # <<<<<<<<<<<<<<
+ *
+ * @cname('getbuffer')
+ */
+ (__pyx_v_itemp[__pyx_v_i]) = __pyx_v_c;
+ }
+ __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+
+ /* "View.MemoryView":503
+ * return result
+ *
+ * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<<
+ * """Only used if instantiated manually by the user, or if Cython doesn't
+ * know how to convert the type"""
+ */
+
+ /* function exit code */
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_4);
+ __Pyx_XDECREF(__pyx_t_5);
+ __Pyx_XDECREF(__pyx_t_6);
+ __Pyx_XDECREF(__pyx_t_8);
+ __Pyx_XDECREF(__pyx_t_10);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XDECREF(__pyx_v_struct);
+ __Pyx_XDECREF(__pyx_v_bytesvalue);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":520
+ *
+ * @cname('getbuffer')
+ * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<<
+ * if flags & PyBUF_WRITABLE and self.view.readonly:
+ * raise ValueError("Cannot create writable memory view from read-only memoryview")
+ */
+
+/* Python wrapper */
+static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
+static CYTHON_UNUSED int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0);
+ __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ int __pyx_t_2;
+ PyObject *__pyx_t_3 = NULL;
+ Py_ssize_t *__pyx_t_4;
+ char *__pyx_t_5;
+ void *__pyx_t_6;
+ int __pyx_t_7;
+ Py_ssize_t __pyx_t_8;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ if (__pyx_v_info == NULL) {
+ PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete");
+ return -1;
+ }
+ __Pyx_RefNannySetupContext("__getbuffer__", 0);
+ __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None);
+ __Pyx_GIVEREF(__pyx_v_info->obj);
+
+ /* "View.MemoryView":521
+ * @cname('getbuffer')
+ * def __getbuffer__(self, Py_buffer *info, int flags):
+ * if flags & PyBUF_WRITABLE and self.view.readonly: # <<<<<<<<<<<<<<
+ * raise ValueError("Cannot create writable memory view from read-only memoryview")
+ *
+ */
+ __pyx_t_2 = ((__pyx_v_flags & PyBUF_WRITABLE) != 0);
+ if (__pyx_t_2) {
+ } else {
+ __pyx_t_1 = __pyx_t_2;
+ goto __pyx_L4_bool_binop_done;
+ }
+ __pyx_t_2 = (__pyx_v_self->view.readonly != 0);
+ __pyx_t_1 = __pyx_t_2;
+ __pyx_L4_bool_binop_done:;
+ if (unlikely(__pyx_t_1)) {
+
+ /* "View.MemoryView":522
+ * def __getbuffer__(self, Py_buffer *info, int flags):
+ * if flags & PyBUF_WRITABLE and self.view.readonly:
+ * raise ValueError("Cannot create writable memory view from read-only memoryview") # <<<<<<<<<<<<<<
+ *
+ * if flags & PyBUF_ND:
+ */
+ __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 522, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __PYX_ERR(1, 522, __pyx_L1_error)
+
+ /* "View.MemoryView":521
+ * @cname('getbuffer')
+ * def __getbuffer__(self, Py_buffer *info, int flags):
+ * if flags & PyBUF_WRITABLE and self.view.readonly: # <<<<<<<<<<<<<<
+ * raise ValueError("Cannot create writable memory view from read-only memoryview")
+ *
+ */
+ }
+
+ /* "View.MemoryView":524
+ * raise ValueError("Cannot create writable memory view from read-only memoryview")
+ *
+ * if flags & PyBUF_ND: # <<<<<<<<<<<<<<
+ * info.shape = self.view.shape
+ * else:
+ */
+ __pyx_t_1 = ((__pyx_v_flags & PyBUF_ND) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":525
+ *
+ * if flags & PyBUF_ND:
+ * info.shape = self.view.shape # <<<<<<<<<<<<<<
+ * else:
+ * info.shape = NULL
+ */
+ __pyx_t_4 = __pyx_v_self->view.shape;
+ __pyx_v_info->shape = __pyx_t_4;
+
+ /* "View.MemoryView":524
+ * raise ValueError("Cannot create writable memory view from read-only memoryview")
+ *
+ * if flags & PyBUF_ND: # <<<<<<<<<<<<<<
+ * info.shape = self.view.shape
+ * else:
+ */
+ goto __pyx_L6;
+ }
+
+ /* "View.MemoryView":527
+ * info.shape = self.view.shape
+ * else:
+ * info.shape = NULL # <<<<<<<<<<<<<<
+ *
+ * if flags & PyBUF_STRIDES:
+ */
+ /*else*/ {
+ __pyx_v_info->shape = NULL;
+ }
+ __pyx_L6:;
+
+ /* "View.MemoryView":529
+ * info.shape = NULL
+ *
+ * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<<
+ * info.strides = self.view.strides
+ * else:
+ */
+ __pyx_t_1 = ((__pyx_v_flags & PyBUF_STRIDES) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":530
+ *
+ * if flags & PyBUF_STRIDES:
+ * info.strides = self.view.strides # <<<<<<<<<<<<<<
+ * else:
+ * info.strides = NULL
+ */
+ __pyx_t_4 = __pyx_v_self->view.strides;
+ __pyx_v_info->strides = __pyx_t_4;
+
+ /* "View.MemoryView":529
+ * info.shape = NULL
+ *
+ * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<<
+ * info.strides = self.view.strides
+ * else:
+ */
+ goto __pyx_L7;
+ }
+
+ /* "View.MemoryView":532
+ * info.strides = self.view.strides
+ * else:
+ * info.strides = NULL # <<<<<<<<<<<<<<
+ *
+ * if flags & PyBUF_INDIRECT:
+ */
+ /*else*/ {
+ __pyx_v_info->strides = NULL;
+ }
+ __pyx_L7:;
+
+ /* "View.MemoryView":534
+ * info.strides = NULL
+ *
+ * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<<
+ * info.suboffsets = self.view.suboffsets
+ * else:
+ */
+ __pyx_t_1 = ((__pyx_v_flags & PyBUF_INDIRECT) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":535
+ *
+ * if flags & PyBUF_INDIRECT:
+ * info.suboffsets = self.view.suboffsets # <<<<<<<<<<<<<<
+ * else:
+ * info.suboffsets = NULL
+ */
+ __pyx_t_4 = __pyx_v_self->view.suboffsets;
+ __pyx_v_info->suboffsets = __pyx_t_4;
+
+ /* "View.MemoryView":534
+ * info.strides = NULL
+ *
+ * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<<
+ * info.suboffsets = self.view.suboffsets
+ * else:
+ */
+ goto __pyx_L8;
+ }
+
+ /* "View.MemoryView":537
+ * info.suboffsets = self.view.suboffsets
+ * else:
+ * info.suboffsets = NULL # <<<<<<<<<<<<<<
+ *
+ * if flags & PyBUF_FORMAT:
+ */
+ /*else*/ {
+ __pyx_v_info->suboffsets = NULL;
+ }
+ __pyx_L8:;
+
+ /* "View.MemoryView":539
+ * info.suboffsets = NULL
+ *
+ * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<<
+ * info.format = self.view.format
+ * else:
+ */
+ __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":540
+ *
+ * if flags & PyBUF_FORMAT:
+ * info.format = self.view.format # <<<<<<<<<<<<<<
+ * else:
+ * info.format = NULL
+ */
+ __pyx_t_5 = __pyx_v_self->view.format;
+ __pyx_v_info->format = __pyx_t_5;
+
+ /* "View.MemoryView":539
+ * info.suboffsets = NULL
+ *
+ * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<<
+ * info.format = self.view.format
+ * else:
+ */
+ goto __pyx_L9;
+ }
+
+ /* "View.MemoryView":542
+ * info.format = self.view.format
+ * else:
+ * info.format = NULL # <<<<<<<<<<<<<<
+ *
+ * info.buf = self.view.buf
+ */
+ /*else*/ {
+ __pyx_v_info->format = NULL;
+ }
+ __pyx_L9:;
+
+ /* "View.MemoryView":544
+ * info.format = NULL
+ *
+ * info.buf = self.view.buf # <<<<<<<<<<<<<<
+ * info.ndim = self.view.ndim
+ * info.itemsize = self.view.itemsize
+ */
+ __pyx_t_6 = __pyx_v_self->view.buf;
+ __pyx_v_info->buf = __pyx_t_6;
+
+ /* "View.MemoryView":545
+ *
+ * info.buf = self.view.buf
+ * info.ndim = self.view.ndim # <<<<<<<<<<<<<<
+ * info.itemsize = self.view.itemsize
+ * info.len = self.view.len
+ */
+ __pyx_t_7 = __pyx_v_self->view.ndim;
+ __pyx_v_info->ndim = __pyx_t_7;
+
+ /* "View.MemoryView":546
+ * info.buf = self.view.buf
+ * info.ndim = self.view.ndim
+ * info.itemsize = self.view.itemsize # <<<<<<<<<<<<<<
+ * info.len = self.view.len
+ * info.readonly = self.view.readonly
+ */
+ __pyx_t_8 = __pyx_v_self->view.itemsize;
+ __pyx_v_info->itemsize = __pyx_t_8;
+
+ /* "View.MemoryView":547
+ * info.ndim = self.view.ndim
+ * info.itemsize = self.view.itemsize
+ * info.len = self.view.len # <<<<<<<<<<<<<<
+ * info.readonly = self.view.readonly
+ * info.obj = self
+ */
+ __pyx_t_8 = __pyx_v_self->view.len;
+ __pyx_v_info->len = __pyx_t_8;
+
+ /* "View.MemoryView":548
+ * info.itemsize = self.view.itemsize
+ * info.len = self.view.len
+ * info.readonly = self.view.readonly # <<<<<<<<<<<<<<
+ * info.obj = self
+ *
+ */
+ __pyx_t_1 = __pyx_v_self->view.readonly;
+ __pyx_v_info->readonly = __pyx_t_1;
+
+ /* "View.MemoryView":549
+ * info.len = self.view.len
+ * info.readonly = self.view.readonly
+ * info.obj = self # <<<<<<<<<<<<<<
+ *
+ * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)")
+ */
+ __Pyx_INCREF(((PyObject *)__pyx_v_self));
+ __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
+ __Pyx_GOTREF(__pyx_v_info->obj);
+ __Pyx_DECREF(__pyx_v_info->obj);
+ __pyx_v_info->obj = ((PyObject *)__pyx_v_self);
+
+ /* "View.MemoryView":520
+ *
+ * @cname('getbuffer')
+ * def __getbuffer__(self, Py_buffer *info, int flags): # <<<<<<<<<<<<<<
+ * if flags & PyBUF_WRITABLE and self.view.readonly:
+ * raise ValueError("Cannot create writable memory view from read-only memoryview")
+ */
+
+ /* function exit code */
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ if (__pyx_v_info->obj != NULL) {
+ __Pyx_GOTREF(__pyx_v_info->obj);
+ __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0;
+ }
+ goto __pyx_L2;
+ __pyx_L0:;
+ if (__pyx_v_info->obj == Py_None) {
+ __Pyx_GOTREF(__pyx_v_info->obj);
+ __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0;
+ }
+ __pyx_L2:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":555
+ *
+ * @property
+ * def T(self): # <<<<<<<<<<<<<<
+ * cdef _memoryviewslice result = memoryview_copy(self)
+ * transpose_memslice(&result.from_slice)
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+ struct __pyx_memoryviewslice_obj *__pyx_v_result = 0;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_t_2;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+
+ /* "View.MemoryView":556
+ * @property
+ * def T(self):
+ * cdef _memoryviewslice result = memoryview_copy(self) # <<<<<<<<<<<<<<
+ * transpose_memslice(&result.from_slice)
+ * return result
+ */
+ __pyx_t_1 = __pyx_memoryview_copy_object(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 556, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_memoryviewslice_type))))) __PYX_ERR(1, 556, __pyx_L1_error)
+ __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_1);
+ __pyx_t_1 = 0;
+
+ /* "View.MemoryView":557
+ * def T(self):
+ * cdef _memoryviewslice result = memoryview_copy(self)
+ * transpose_memslice(&result.from_slice) # <<<<<<<<<<<<<<
+ * return result
+ *
+ */
+ __pyx_t_2 = __pyx_memslice_transpose((&__pyx_v_result->from_slice)); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(1, 557, __pyx_L1_error)
+
+ /* "View.MemoryView":558
+ * cdef _memoryviewslice result = memoryview_copy(self)
+ * transpose_memslice(&result.from_slice)
+ * return result # <<<<<<<<<<<<<<
+ *
+ * @property
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF(((PyObject *)__pyx_v_result));
+ __pyx_r = ((PyObject *)__pyx_v_result);
+ goto __pyx_L0;
+
+ /* "View.MemoryView":555
+ *
+ * @property
+ * def T(self): # <<<<<<<<<<<<<<
+ * cdef _memoryviewslice result = memoryview_copy(self)
+ * transpose_memslice(&result.from_slice)
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.T.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XDECREF((PyObject *)__pyx_v_result);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":561
+ *
+ * @property
+ * def base(self): # <<<<<<<<<<<<<<
+ * return self.obj
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__", 0);
+
+ /* "View.MemoryView":562
+ * @property
+ * def base(self):
+ * return self.obj # <<<<<<<<<<<<<<
+ *
+ * @property
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF(__pyx_v_self->obj);
+ __pyx_r = __pyx_v_self->obj;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":561
+ *
+ * @property
+ * def base(self): # <<<<<<<<<<<<<<
+ * return self.obj
+ *
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":565
+ *
+ * @property
+ * def shape(self): # <<<<<<<<<<<<<<
+ * return tuple([length for length in self.view.shape[:self.view.ndim]])
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+ Py_ssize_t __pyx_v_length;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ Py_ssize_t *__pyx_t_2;
+ Py_ssize_t *__pyx_t_3;
+ Py_ssize_t *__pyx_t_4;
+ PyObject *__pyx_t_5 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+
+ /* "View.MemoryView":566
+ * @property
+ * def shape(self):
+ * return tuple([length for length in self.view.shape[:self.view.ndim]]) # <<<<<<<<<<<<<<
+ *
+ * @property
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 566, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_3 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim);
+ for (__pyx_t_4 = __pyx_v_self->view.shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) {
+ __pyx_t_2 = __pyx_t_4;
+ __pyx_v_length = (__pyx_t_2[0]);
+ __pyx_t_5 = PyInt_FromSsize_t(__pyx_v_length); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 566, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(1, 566, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ }
+ __pyx_t_5 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 566, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __pyx_r = __pyx_t_5;
+ __pyx_t_5 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":565
+ *
+ * @property
+ * def shape(self): # <<<<<<<<<<<<<<
+ * return tuple([length for length in self.view.shape[:self.view.ndim]])
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_5);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.shape.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":569
+ *
+ * @property
+ * def strides(self): # <<<<<<<<<<<<<<
+ * if self.view.strides == NULL:
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+ Py_ssize_t __pyx_v_stride;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ Py_ssize_t *__pyx_t_3;
+ Py_ssize_t *__pyx_t_4;
+ Py_ssize_t *__pyx_t_5;
+ PyObject *__pyx_t_6 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+
+ /* "View.MemoryView":570
+ * @property
+ * def strides(self):
+ * if self.view.strides == NULL: # <<<<<<<<<<<<<<
+ *
+ * raise ValueError("Buffer view does not expose strides")
+ */
+ __pyx_t_1 = ((__pyx_v_self->view.strides == NULL) != 0);
+ if (unlikely(__pyx_t_1)) {
+
+ /* "View.MemoryView":572
+ * if self.view.strides == NULL:
+ *
+ * raise ValueError("Buffer view does not expose strides") # <<<<<<<<<<<<<<
+ *
+ * return tuple([stride for stride in self.view.strides[:self.view.ndim]])
+ */
+ __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 572, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_Raise(__pyx_t_2, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __PYX_ERR(1, 572, __pyx_L1_error)
+
+ /* "View.MemoryView":570
+ * @property
+ * def strides(self):
+ * if self.view.strides == NULL: # <<<<<<<<<<<<<<
+ *
+ * raise ValueError("Buffer view does not expose strides")
+ */
+ }
+
+ /* "View.MemoryView":574
+ * raise ValueError("Buffer view does not expose strides")
+ *
+ * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) # <<<<<<<<<<<<<<
+ *
+ * @property
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 574, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_4 = (__pyx_v_self->view.strides + __pyx_v_self->view.ndim);
+ for (__pyx_t_5 = __pyx_v_self->view.strides; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) {
+ __pyx_t_3 = __pyx_t_5;
+ __pyx_v_stride = (__pyx_t_3[0]);
+ __pyx_t_6 = PyInt_FromSsize_t(__pyx_v_stride); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 574, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_6);
+ if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_6))) __PYX_ERR(1, 574, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+ }
+ __pyx_t_6 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 574, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_6);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __pyx_r = __pyx_t_6;
+ __pyx_t_6 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":569
+ *
+ * @property
+ * def strides(self): # <<<<<<<<<<<<<<
+ * if self.view.strides == NULL:
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_6);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.strides.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":577
+ *
+ * @property
+ * def suboffsets(self): # <<<<<<<<<<<<<<
+ * if self.view.suboffsets == NULL:
+ * return (-1,) * self.view.ndim
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+ Py_ssize_t __pyx_v_suboffset;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ Py_ssize_t *__pyx_t_4;
+ Py_ssize_t *__pyx_t_5;
+ Py_ssize_t *__pyx_t_6;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+
+ /* "View.MemoryView":578
+ * @property
+ * def suboffsets(self):
+ * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<<
+ * return (-1,) * self.view.ndim
+ *
+ */
+ __pyx_t_1 = ((__pyx_v_self->view.suboffsets == NULL) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":579
+ * def suboffsets(self):
+ * if self.view.suboffsets == NULL:
+ * return (-1,) * self.view.ndim # <<<<<<<<<<<<<<
+ *
+ * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]])
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 579, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_3 = PyNumber_Multiply(__pyx_tuple__13, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 579, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __pyx_r = __pyx_t_3;
+ __pyx_t_3 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":578
+ * @property
+ * def suboffsets(self):
+ * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<<
+ * return (-1,) * self.view.ndim
+ *
+ */
+ }
+
+ /* "View.MemoryView":581
+ * return (-1,) * self.view.ndim
+ *
+ * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) # <<<<<<<<<<<<<<
+ *
+ * @property
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 581, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_5 = (__pyx_v_self->view.suboffsets + __pyx_v_self->view.ndim);
+ for (__pyx_t_6 = __pyx_v_self->view.suboffsets; __pyx_t_6 < __pyx_t_5; __pyx_t_6++) {
+ __pyx_t_4 = __pyx_t_6;
+ __pyx_v_suboffset = (__pyx_t_4[0]);
+ __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_suboffset); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 581, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_2))) __PYX_ERR(1, 581, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ }
+ __pyx_t_2 = PyList_AsTuple(((PyObject*)__pyx_t_3)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 581, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":577
+ *
+ * @property
+ * def suboffsets(self): # <<<<<<<<<<<<<<
+ * if self.view.suboffsets == NULL:
+ * return (-1,) * self.view.ndim
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.suboffsets.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":584
+ *
+ * @property
+ * def ndim(self): # <<<<<<<<<<<<<<
+ * return self.view.ndim
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+
+ /* "View.MemoryView":585
+ * @property
+ * def ndim(self):
+ * return self.view.ndim # <<<<<<<<<<<<<<
+ *
+ * @property
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 585, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":584
+ *
+ * @property
+ * def ndim(self): # <<<<<<<<<<<<<<
+ * return self.view.ndim
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.ndim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":588
+ *
+ * @property
+ * def itemsize(self): # <<<<<<<<<<<<<<
+ * return self.view.itemsize
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+
+ /* "View.MemoryView":589
+ * @property
+ * def itemsize(self):
+ * return self.view.itemsize # <<<<<<<<<<<<<<
+ *
+ * @property
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 589, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":588
+ *
+ * @property
+ * def itemsize(self): # <<<<<<<<<<<<<<
+ * return self.view.itemsize
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.itemsize.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":592
+ *
+ * @property
+ * def nbytes(self): # <<<<<<<<<<<<<<
+ * return self.size * self.view.itemsize
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+
+ /* "View.MemoryView":593
+ * @property
+ * def nbytes(self):
+ * return self.size * self.view.itemsize # <<<<<<<<<<<<<<
+ *
+ * @property
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 593, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 593, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 593, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __pyx_r = __pyx_t_3;
+ __pyx_t_3 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":592
+ *
+ * @property
+ * def nbytes(self): # <<<<<<<<<<<<<<
+ * return self.size * self.view.itemsize
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.nbytes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":596
+ *
+ * @property
+ * def size(self): # <<<<<<<<<<<<<<
+ * if self._size is None:
+ * result = 1
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+ PyObject *__pyx_v_result = NULL;
+ PyObject *__pyx_v_length = NULL;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ int __pyx_t_2;
+ Py_ssize_t *__pyx_t_3;
+ Py_ssize_t *__pyx_t_4;
+ Py_ssize_t *__pyx_t_5;
+ PyObject *__pyx_t_6 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+
+ /* "View.MemoryView":597
+ * @property
+ * def size(self):
+ * if self._size is None: # <<<<<<<<<<<<<<
+ * result = 1
+ *
+ */
+ __pyx_t_1 = (__pyx_v_self->_size == Py_None);
+ __pyx_t_2 = (__pyx_t_1 != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":598
+ * def size(self):
+ * if self._size is None:
+ * result = 1 # <<<<<<<<<<<<<<
+ *
+ * for length in self.view.shape[:self.view.ndim]:
+ */
+ __Pyx_INCREF(__pyx_int_1);
+ __pyx_v_result = __pyx_int_1;
+
+ /* "View.MemoryView":600
+ * result = 1
+ *
+ * for length in self.view.shape[:self.view.ndim]: # <<<<<<<<<<<<<<
+ * result *= length
+ *
+ */
+ __pyx_t_4 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim);
+ for (__pyx_t_5 = __pyx_v_self->view.shape; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) {
+ __pyx_t_3 = __pyx_t_5;
+ __pyx_t_6 = PyInt_FromSsize_t((__pyx_t_3[0])); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 600, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_6);
+ __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_6);
+ __pyx_t_6 = 0;
+
+ /* "View.MemoryView":601
+ *
+ * for length in self.view.shape[:self.view.ndim]:
+ * result *= length # <<<<<<<<<<<<<<
+ *
+ * self._size = result
+ */
+ __pyx_t_6 = PyNumber_InPlaceMultiply(__pyx_v_result, __pyx_v_length); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 601, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_6);
+ __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_6);
+ __pyx_t_6 = 0;
+ }
+
+ /* "View.MemoryView":603
+ * result *= length
+ *
+ * self._size = result # <<<<<<<<<<<<<<
+ *
+ * return self._size
+ */
+ __Pyx_INCREF(__pyx_v_result);
+ __Pyx_GIVEREF(__pyx_v_result);
+ __Pyx_GOTREF(__pyx_v_self->_size);
+ __Pyx_DECREF(__pyx_v_self->_size);
+ __pyx_v_self->_size = __pyx_v_result;
+
+ /* "View.MemoryView":597
+ * @property
+ * def size(self):
+ * if self._size is None: # <<<<<<<<<<<<<<
+ * result = 1
+ *
+ */
+ }
+
+ /* "View.MemoryView":605
+ * self._size = result
+ *
+ * return self._size # <<<<<<<<<<<<<<
+ *
+ * def __len__(self):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF(__pyx_v_self->_size);
+ __pyx_r = __pyx_v_self->_size;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":596
+ *
+ * @property
+ * def size(self): # <<<<<<<<<<<<<<
+ * if self._size is None:
+ * result = 1
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_6);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XDECREF(__pyx_v_result);
+ __Pyx_XDECREF(__pyx_v_length);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":607
+ * return self._size
+ *
+ * def __len__(self): # <<<<<<<<<<<<<<
+ * if self.view.ndim >= 1:
+ * return self.view.shape[0]
+ */
+
+/* Python wrapper */
+static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self); /*proto*/
+static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self) {
+ Py_ssize_t __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
+ __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self) {
+ Py_ssize_t __pyx_r;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ __Pyx_RefNannySetupContext("__len__", 0);
+
+ /* "View.MemoryView":608
+ *
+ * def __len__(self):
+ * if self.view.ndim >= 1: # <<<<<<<<<<<<<<
+ * return self.view.shape[0]
+ *
+ */
+ __pyx_t_1 = ((__pyx_v_self->view.ndim >= 1) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":609
+ * def __len__(self):
+ * if self.view.ndim >= 1:
+ * return self.view.shape[0] # <<<<<<<<<<<<<<
+ *
+ * return 0
+ */
+ __pyx_r = (__pyx_v_self->view.shape[0]);
+ goto __pyx_L0;
+
+ /* "View.MemoryView":608
+ *
+ * def __len__(self):
+ * if self.view.ndim >= 1: # <<<<<<<<<<<<<<
+ * return self.view.shape[0]
+ *
+ */
+ }
+
+ /* "View.MemoryView":611
+ * return self.view.shape[0]
+ *
+ * return 0 # <<<<<<<<<<<<<<
+ *
+ * def __repr__(self):
+ */
+ __pyx_r = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":607
+ * return self._size
+ *
+ * def __len__(self): # <<<<<<<<<<<<<<
+ * if self.view.ndim >= 1:
+ * return self.view.shape[0]
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":613
+ * return 0
+ *
+ * def __repr__(self): # <<<<<<<<<<<<<<
+ * return "" % (self.base.__class__.__name__,
+ * id(self))
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
+ __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__repr__", 0);
+
+ /* "View.MemoryView":614
+ *
+ * def __repr__(self):
+ * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<<
+ * id(self))
+ *
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 614, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 614, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 614, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+ /* "View.MemoryView":615
+ * def __repr__(self):
+ * return "" % (self.base.__class__.__name__,
+ * id(self)) # <<<<<<<<<<<<<<
+ *
+ * def __str__(self):
+ */
+ __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 615, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+
+ /* "View.MemoryView":614
+ *
+ * def __repr__(self):
+ * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<<
+ * id(self))
+ *
+ */
+ __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 614, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_GIVEREF(__pyx_t_1);
+ PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
+ __Pyx_GIVEREF(__pyx_t_2);
+ PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
+ __pyx_t_1 = 0;
+ __pyx_t_2 = 0;
+ __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 614, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":613
+ * return 0
+ *
+ * def __repr__(self): # <<<<<<<<<<<<<<
+ * return "" % (self.base.__class__.__name__,
+ * id(self))
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":617
+ * id(self))
+ *
+ * def __str__(self): # <<<<<<<<<<<<<<
+ * return "" % (self.base.__class__.__name__,)
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
+ __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__str__", 0);
+
+ /* "View.MemoryView":618
+ *
+ * def __str__(self):
+ * return "" % (self.base.__class__.__name__,) # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 618, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 618, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 618, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 618, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_GIVEREF(__pyx_t_1);
+ PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
+ __pyx_t_1 = 0;
+ __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_object, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 618, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":617
+ * id(self))
+ *
+ * def __str__(self): # <<<<<<<<<<<<<<
+ * return "" % (self.base.__class__.__name__,)
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":621
+ *
+ *
+ * def is_c_contig(self): # <<<<<<<<<<<<<<
+ * cdef __Pyx_memviewslice *mslice
+ * cdef __Pyx_memviewslice tmp
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("is_c_contig (wrapper)", 0);
+ __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self) {
+ __Pyx_memviewslice *__pyx_v_mslice;
+ __Pyx_memviewslice __pyx_v_tmp;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ __Pyx_memviewslice *__pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("is_c_contig", 0);
+
+ /* "View.MemoryView":624
+ * cdef __Pyx_memviewslice *mslice
+ * cdef __Pyx_memviewslice tmp
+ * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<<
+ * return slice_is_contig(mslice[0], 'C', self.view.ndim)
+ *
+ */
+ __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 624, __pyx_L1_error)
+ __pyx_v_mslice = __pyx_t_1;
+
+ /* "View.MemoryView":625
+ * cdef __Pyx_memviewslice tmp
+ * mslice = get_slice_from_memview(self, &tmp)
+ * return slice_is_contig(mslice[0], 'C', self.view.ndim) # <<<<<<<<<<<<<<
+ *
+ * def is_f_contig(self):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'C', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 625, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":621
+ *
+ *
+ * def is_c_contig(self): # <<<<<<<<<<<<<<
+ * cdef __Pyx_memviewslice *mslice
+ * cdef __Pyx_memviewslice tmp
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.is_c_contig", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":627
+ * return slice_is_contig(mslice[0], 'C', self.view.ndim)
+ *
+ * def is_f_contig(self): # <<<<<<<<<<<<<<
+ * cdef __Pyx_memviewslice *mslice
+ * cdef __Pyx_memviewslice tmp
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("is_f_contig (wrapper)", 0);
+ __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self) {
+ __Pyx_memviewslice *__pyx_v_mslice;
+ __Pyx_memviewslice __pyx_v_tmp;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ __Pyx_memviewslice *__pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("is_f_contig", 0);
+
+ /* "View.MemoryView":630
+ * cdef __Pyx_memviewslice *mslice
+ * cdef __Pyx_memviewslice tmp
+ * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<<
+ * return slice_is_contig(mslice[0], 'F', self.view.ndim)
+ *
+ */
+ __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 630, __pyx_L1_error)
+ __pyx_v_mslice = __pyx_t_1;
+
+ /* "View.MemoryView":631
+ * cdef __Pyx_memviewslice tmp
+ * mslice = get_slice_from_memview(self, &tmp)
+ * return slice_is_contig(mslice[0], 'F', self.view.ndim) # <<<<<<<<<<<<<<
+ *
+ * def copy(self):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'F', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 631, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":627
+ * return slice_is_contig(mslice[0], 'C', self.view.ndim)
+ *
+ * def is_f_contig(self): # <<<<<<<<<<<<<<
+ * cdef __Pyx_memviewslice *mslice
+ * cdef __Pyx_memviewslice tmp
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.is_f_contig", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":633
+ * return slice_is_contig(mslice[0], 'F', self.view.ndim)
+ *
+ * def copy(self): # <<<<<<<<<<<<<<
+ * cdef __Pyx_memviewslice mslice
+ * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("copy (wrapper)", 0);
+ __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self) {
+ __Pyx_memviewslice __pyx_v_mslice;
+ int __pyx_v_flags;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ __Pyx_memviewslice __pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("copy", 0);
+
+ /* "View.MemoryView":635
+ * def copy(self):
+ * cdef __Pyx_memviewslice mslice
+ * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS # <<<<<<<<<<<<<<
+ *
+ * slice_copy(self, &mslice)
+ */
+ __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_F_CONTIGUOUS));
+
+ /* "View.MemoryView":637
+ * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS
+ *
+ * slice_copy(self, &mslice) # <<<<<<<<<<<<<<
+ * mslice = slice_copy_contig(&mslice, "c", self.view.ndim,
+ * self.view.itemsize,
+ */
+ __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_mslice));
+
+ /* "View.MemoryView":638
+ *
+ * slice_copy(self, &mslice)
+ * mslice = slice_copy_contig(&mslice, "c", self.view.ndim, # <<<<<<<<<<<<<<
+ * self.view.itemsize,
+ * flags|PyBUF_C_CONTIGUOUS,
+ */
+ __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_mslice), ((char *)"c"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_C_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 638, __pyx_L1_error)
+ __pyx_v_mslice = __pyx_t_1;
+
+ /* "View.MemoryView":643
+ * self.dtype_is_object)
+ *
+ * return memoryview_copy_from_slice(self, &mslice) # <<<<<<<<<<<<<<
+ *
+ * def copy_fortran(self):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_mslice)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 643, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":633
+ * return slice_is_contig(mslice[0], 'F', self.view.ndim)
+ *
+ * def copy(self): # <<<<<<<<<<<<<<
+ * cdef __Pyx_memviewslice mslice
+ * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":645
+ * return memoryview_copy_from_slice(self, &mslice)
+ *
+ * def copy_fortran(self): # <<<<<<<<<<<<<<
+ * cdef __Pyx_memviewslice src, dst
+ * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("copy_fortran (wrapper)", 0);
+ __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self) {
+ __Pyx_memviewslice __pyx_v_src;
+ __Pyx_memviewslice __pyx_v_dst;
+ int __pyx_v_flags;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ __Pyx_memviewslice __pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("copy_fortran", 0);
+
+ /* "View.MemoryView":647
+ * def copy_fortran(self):
+ * cdef __Pyx_memviewslice src, dst
+ * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS # <<<<<<<<<<<<<<
+ *
+ * slice_copy(self, &src)
+ */
+ __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_C_CONTIGUOUS));
+
+ /* "View.MemoryView":649
+ * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS
+ *
+ * slice_copy(self, &src) # <<<<<<<<<<<<<<
+ * dst = slice_copy_contig(&src, "fortran", self.view.ndim,
+ * self.view.itemsize,
+ */
+ __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_src));
+
+ /* "View.MemoryView":650
+ *
+ * slice_copy(self, &src)
+ * dst = slice_copy_contig(&src, "fortran", self.view.ndim, # <<<<<<<<<<<<<<
+ * self.view.itemsize,
+ * flags|PyBUF_F_CONTIGUOUS,
+ */
+ __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_src), ((char *)"fortran"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_F_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 650, __pyx_L1_error)
+ __pyx_v_dst = __pyx_t_1;
+
+ /* "View.MemoryView":655
+ * self.dtype_is_object)
+ *
+ * return memoryview_copy_from_slice(self, &dst) # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_dst)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 655, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":645
+ * return memoryview_copy_from_slice(self, &mslice)
+ *
+ * def copy_fortran(self): # <<<<<<<<<<<<<<
+ * cdef __Pyx_memviewslice src, dst
+ * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.copy_fortran", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":1
+ * def __reduce_cython__(self): # <<<<<<<<<<<<<<
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
+ __pyx_r = __pyx_pf___pyx_memoryview___reduce_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__reduce_cython__", 0);
+
+ /* "(tree fragment)":2
+ * def __reduce_cython__(self):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<<
+ * def __setstate_cython__(self, __pyx_state):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+ __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_Raise(__pyx_t_1, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __PYX_ERR(1, 2, __pyx_L1_error)
+
+ /* "(tree fragment)":1
+ * def __reduce_cython__(self): # <<<<<<<<<<<<<<
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":3
+ * def __reduce_cython__(self):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<<
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
+static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
+ __pyx_r = __pyx_pf___pyx_memoryview_2__setstate_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__setstate_cython__", 0);
+
+ /* "(tree fragment)":4
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<<
+ */
+ __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_Raise(__pyx_t_1, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __PYX_ERR(1, 4, __pyx_L1_error)
+
+ /* "(tree fragment)":3
+ * def __reduce_cython__(self):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<<
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":659
+ *
+ * @cname('__pyx_memoryview_new')
+ * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<<
+ * cdef memoryview result = memoryview(o, flags, dtype_is_object)
+ * result.typeinfo = typeinfo
+ */
+
+static PyObject *__pyx_memoryview_new(PyObject *__pyx_v_o, int __pyx_v_flags, int __pyx_v_dtype_is_object, __Pyx_TypeInfo *__pyx_v_typeinfo) {
+ struct __pyx_memoryview_obj *__pyx_v_result = 0;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("memoryview_cwrapper", 0);
+
+ /* "View.MemoryView":660
+ * @cname('__pyx_memoryview_new')
+ * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo):
+ * cdef memoryview result = memoryview(o, flags, dtype_is_object) # <<<<<<<<<<<<<<
+ * result.typeinfo = typeinfo
+ * return result
+ */
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 660, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 660, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 660, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_INCREF(__pyx_v_o);
+ __Pyx_GIVEREF(__pyx_v_o);
+ PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_o);
+ __Pyx_GIVEREF(__pyx_t_1);
+ PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
+ __Pyx_GIVEREF(__pyx_t_2);
+ PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2);
+ __pyx_t_1 = 0;
+ __pyx_t_2 = 0;
+ __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 660, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __pyx_v_result = ((struct __pyx_memoryview_obj *)__pyx_t_2);
+ __pyx_t_2 = 0;
+
+ /* "View.MemoryView":661
+ * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo):
+ * cdef memoryview result = memoryview(o, flags, dtype_is_object)
+ * result.typeinfo = typeinfo # <<<<<<<<<<<<<<
+ * return result
+ *
+ */
+ __pyx_v_result->typeinfo = __pyx_v_typeinfo;
+
+ /* "View.MemoryView":662
+ * cdef memoryview result = memoryview(o, flags, dtype_is_object)
+ * result.typeinfo = typeinfo
+ * return result # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_memoryview_check')
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF(((PyObject *)__pyx_v_result));
+ __pyx_r = ((PyObject *)__pyx_v_result);
+ goto __pyx_L0;
+
+ /* "View.MemoryView":659
+ *
+ * @cname('__pyx_memoryview_new')
+ * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<<
+ * cdef memoryview result = memoryview(o, flags, dtype_is_object)
+ * result.typeinfo = typeinfo
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_AddTraceback("View.MemoryView.memoryview_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XDECREF((PyObject *)__pyx_v_result);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":665
+ *
+ * @cname('__pyx_memoryview_check')
+ * cdef inline bint memoryview_check(object o): # <<<<<<<<<<<<<<
+ * return isinstance(o, memoryview)
+ *
+ */
+
+static CYTHON_INLINE int __pyx_memoryview_check(PyObject *__pyx_v_o) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ __Pyx_RefNannySetupContext("memoryview_check", 0);
+
+ /* "View.MemoryView":666
+ * @cname('__pyx_memoryview_check')
+ * cdef inline bint memoryview_check(object o):
+ * return isinstance(o, memoryview) # <<<<<<<<<<<<<<
+ *
+ * cdef tuple _unellipsify(object index, int ndim):
+ */
+ __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_o, __pyx_memoryview_type);
+ __pyx_r = __pyx_t_1;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":665
+ *
+ * @cname('__pyx_memoryview_check')
+ * cdef inline bint memoryview_check(object o): # <<<<<<<<<<<<<<
+ * return isinstance(o, memoryview)
+ *
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":668
+ * return isinstance(o, memoryview)
+ *
+ * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<<
+ * """
+ * Replace all ellipses with full slices and fill incomplete indices with
+ */
+
+static PyObject *_unellipsify(PyObject *__pyx_v_index, int __pyx_v_ndim) {
+ PyObject *__pyx_v_tup = NULL;
+ PyObject *__pyx_v_result = NULL;
+ int __pyx_v_have_slices;
+ int __pyx_v_seen_ellipsis;
+ CYTHON_UNUSED PyObject *__pyx_v_idx = NULL;
+ PyObject *__pyx_v_item = NULL;
+ Py_ssize_t __pyx_v_nslices;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ int __pyx_t_2;
+ PyObject *__pyx_t_3 = NULL;
+ PyObject *__pyx_t_4 = NULL;
+ Py_ssize_t __pyx_t_5;
+ PyObject *(*__pyx_t_6)(PyObject *);
+ PyObject *__pyx_t_7 = NULL;
+ Py_ssize_t __pyx_t_8;
+ int __pyx_t_9;
+ int __pyx_t_10;
+ PyObject *__pyx_t_11 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("_unellipsify", 0);
+
+ /* "View.MemoryView":673
+ * full slices.
+ * """
+ * if not isinstance(index, tuple): # <<<<<<<<<<<<<<
+ * tup = (index,)
+ * else:
+ */
+ __pyx_t_1 = PyTuple_Check(__pyx_v_index);
+ __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":674
+ * """
+ * if not isinstance(index, tuple):
+ * tup = (index,) # <<<<<<<<<<<<<<
+ * else:
+ * tup = index
+ */
+ __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 674, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_INCREF(__pyx_v_index);
+ __Pyx_GIVEREF(__pyx_v_index);
+ PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_index);
+ __pyx_v_tup = __pyx_t_3;
+ __pyx_t_3 = 0;
+
+ /* "View.MemoryView":673
+ * full slices.
+ * """
+ * if not isinstance(index, tuple): # <<<<<<<<<<<<<<
+ * tup = (index,)
+ * else:
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":676
+ * tup = (index,)
+ * else:
+ * tup = index # <<<<<<<<<<<<<<
+ *
+ * result = []
+ */
+ /*else*/ {
+ __Pyx_INCREF(__pyx_v_index);
+ __pyx_v_tup = __pyx_v_index;
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":678
+ * tup = index
+ *
+ * result = [] # <<<<<<<<<<<<<<
+ * have_slices = False
+ * seen_ellipsis = False
+ */
+ __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 678, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_v_result = ((PyObject*)__pyx_t_3);
+ __pyx_t_3 = 0;
+
+ /* "View.MemoryView":679
+ *
+ * result = []
+ * have_slices = False # <<<<<<<<<<<<<<
+ * seen_ellipsis = False
+ * for idx, item in enumerate(tup):
+ */
+ __pyx_v_have_slices = 0;
+
+ /* "View.MemoryView":680
+ * result = []
+ * have_slices = False
+ * seen_ellipsis = False # <<<<<<<<<<<<<<
+ * for idx, item in enumerate(tup):
+ * if item is Ellipsis:
+ */
+ __pyx_v_seen_ellipsis = 0;
+
+ /* "View.MemoryView":681
+ * have_slices = False
+ * seen_ellipsis = False
+ * for idx, item in enumerate(tup): # <<<<<<<<<<<<<<
+ * if item is Ellipsis:
+ * if not seen_ellipsis:
+ */
+ __Pyx_INCREF(__pyx_int_0);
+ __pyx_t_3 = __pyx_int_0;
+ if (likely(PyList_CheckExact(__pyx_v_tup)) || PyTuple_CheckExact(__pyx_v_tup)) {
+ __pyx_t_4 = __pyx_v_tup; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0;
+ __pyx_t_6 = NULL;
+ } else {
+ __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_tup); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 681, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 681, __pyx_L1_error)
+ }
+ for (;;) {
+ if (likely(!__pyx_t_6)) {
+ if (likely(PyList_CheckExact(__pyx_t_4))) {
+ if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break;
+ #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+ __pyx_t_7 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(1, 681, __pyx_L1_error)
+ #else
+ __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 681, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_7);
+ #endif
+ } else {
+ if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
+ #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+ __pyx_t_7 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_7); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(1, 681, __pyx_L1_error)
+ #else
+ __pyx_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 681, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_7);
+ #endif
+ }
+ } else {
+ __pyx_t_7 = __pyx_t_6(__pyx_t_4);
+ if (unlikely(!__pyx_t_7)) {
+ PyObject* exc_type = PyErr_Occurred();
+ if (exc_type) {
+ if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+ else __PYX_ERR(1, 681, __pyx_L1_error)
+ }
+ break;
+ }
+ __Pyx_GOTREF(__pyx_t_7);
+ }
+ __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_7);
+ __pyx_t_7 = 0;
+ __Pyx_INCREF(__pyx_t_3);
+ __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_3);
+ __pyx_t_7 = __Pyx_PyInt_AddObjC(__pyx_t_3, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 681, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_7);
+ __Pyx_DECREF(__pyx_t_3);
+ __pyx_t_3 = __pyx_t_7;
+ __pyx_t_7 = 0;
+
+ /* "View.MemoryView":682
+ * seen_ellipsis = False
+ * for idx, item in enumerate(tup):
+ * if item is Ellipsis: # <<<<<<<<<<<<<<
+ * if not seen_ellipsis:
+ * result.extend([slice(None)] * (ndim - len(tup) + 1))
+ */
+ __pyx_t_2 = (__pyx_v_item == __pyx_builtin_Ellipsis);
+ __pyx_t_1 = (__pyx_t_2 != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":683
+ * for idx, item in enumerate(tup):
+ * if item is Ellipsis:
+ * if not seen_ellipsis: # <<<<<<<<<<<<<<
+ * result.extend([slice(None)] * (ndim - len(tup) + 1))
+ * seen_ellipsis = True
+ */
+ __pyx_t_1 = ((!(__pyx_v_seen_ellipsis != 0)) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":684
+ * if item is Ellipsis:
+ * if not seen_ellipsis:
+ * result.extend([slice(None)] * (ndim - len(tup) + 1)) # <<<<<<<<<<<<<<
+ * seen_ellipsis = True
+ * else:
+ */
+ __pyx_t_8 = PyObject_Length(__pyx_v_tup); if (unlikely(__pyx_t_8 == ((Py_ssize_t)-1))) __PYX_ERR(1, 684, __pyx_L1_error)
+ __pyx_t_7 = PyList_New(1 * ((((__pyx_v_ndim - __pyx_t_8) + 1)<0) ? 0:((__pyx_v_ndim - __pyx_t_8) + 1))); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 684, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_7);
+ { Py_ssize_t __pyx_temp;
+ for (__pyx_temp=0; __pyx_temp < ((__pyx_v_ndim - __pyx_t_8) + 1); __pyx_temp++) {
+ __Pyx_INCREF(__pyx_slice__16);
+ __Pyx_GIVEREF(__pyx_slice__16);
+ PyList_SET_ITEM(__pyx_t_7, __pyx_temp, __pyx_slice__16);
+ }
+ }
+ __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_result, __pyx_t_7); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 684, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+
+ /* "View.MemoryView":685
+ * if not seen_ellipsis:
+ * result.extend([slice(None)] * (ndim - len(tup) + 1))
+ * seen_ellipsis = True # <<<<<<<<<<<<<<
+ * else:
+ * result.append(slice(None))
+ */
+ __pyx_v_seen_ellipsis = 1;
+
+ /* "View.MemoryView":683
+ * for idx, item in enumerate(tup):
+ * if item is Ellipsis:
+ * if not seen_ellipsis: # <<<<<<<<<<<<<<
+ * result.extend([slice(None)] * (ndim - len(tup) + 1))
+ * seen_ellipsis = True
+ */
+ goto __pyx_L7;
+ }
+
+ /* "View.MemoryView":687
+ * seen_ellipsis = True
+ * else:
+ * result.append(slice(None)) # <<<<<<<<<<<<<<
+ * have_slices = True
+ * else:
+ */
+ /*else*/ {
+ __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_result, __pyx_slice__16); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 687, __pyx_L1_error)
+ }
+ __pyx_L7:;
+
+ /* "View.MemoryView":688
+ * else:
+ * result.append(slice(None))
+ * have_slices = True # <<<<<<<<<<<<<<
+ * else:
+ * if not isinstance(item, slice) and not PyIndex_Check(item):
+ */
+ __pyx_v_have_slices = 1;
+
+ /* "View.MemoryView":682
+ * seen_ellipsis = False
+ * for idx, item in enumerate(tup):
+ * if item is Ellipsis: # <<<<<<<<<<<<<<
+ * if not seen_ellipsis:
+ * result.extend([slice(None)] * (ndim - len(tup) + 1))
+ */
+ goto __pyx_L6;
+ }
+
+ /* "View.MemoryView":690
+ * have_slices = True
+ * else:
+ * if not isinstance(item, slice) and not PyIndex_Check(item): # <<<<<<<<<<<<<<
+ * raise TypeError("Cannot index with type '%s'" % type(item))
+ *
+ */
+ /*else*/ {
+ __pyx_t_2 = PySlice_Check(__pyx_v_item);
+ __pyx_t_10 = ((!(__pyx_t_2 != 0)) != 0);
+ if (__pyx_t_10) {
+ } else {
+ __pyx_t_1 = __pyx_t_10;
+ goto __pyx_L9_bool_binop_done;
+ }
+ __pyx_t_10 = ((!(PyIndex_Check(__pyx_v_item) != 0)) != 0);
+ __pyx_t_1 = __pyx_t_10;
+ __pyx_L9_bool_binop_done:;
+ if (unlikely(__pyx_t_1)) {
+
+ /* "View.MemoryView":691
+ * else:
+ * if not isinstance(item, slice) and not PyIndex_Check(item):
+ * raise TypeError("Cannot index with type '%s'" % type(item)) # <<<<<<<<<<<<<<
+ *
+ * have_slices = have_slices or isinstance(item, slice)
+ */
+ __pyx_t_7 = __Pyx_PyString_FormatSafe(__pyx_kp_s_Cannot_index_with_type_s, ((PyObject *)Py_TYPE(__pyx_v_item))); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 691, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_7);
+ __pyx_t_11 = __Pyx_PyObject_CallOneArg(__pyx_builtin_TypeError, __pyx_t_7); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 691, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_11);
+ __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+ __Pyx_Raise(__pyx_t_11, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+ __PYX_ERR(1, 691, __pyx_L1_error)
+
+ /* "View.MemoryView":690
+ * have_slices = True
+ * else:
+ * if not isinstance(item, slice) and not PyIndex_Check(item): # <<<<<<<<<<<<<<
+ * raise TypeError("Cannot index with type '%s'" % type(item))
+ *
+ */
+ }
+
+ /* "View.MemoryView":693
+ * raise TypeError("Cannot index with type '%s'" % type(item))
+ *
+ * have_slices = have_slices or isinstance(item, slice) # <<<<<<<<<<<<<<
+ * result.append(item)
+ *
+ */
+ __pyx_t_10 = (__pyx_v_have_slices != 0);
+ if (!__pyx_t_10) {
+ } else {
+ __pyx_t_1 = __pyx_t_10;
+ goto __pyx_L11_bool_binop_done;
+ }
+ __pyx_t_10 = PySlice_Check(__pyx_v_item);
+ __pyx_t_2 = (__pyx_t_10 != 0);
+ __pyx_t_1 = __pyx_t_2;
+ __pyx_L11_bool_binop_done:;
+ __pyx_v_have_slices = __pyx_t_1;
+
+ /* "View.MemoryView":694
+ *
+ * have_slices = have_slices or isinstance(item, slice)
+ * result.append(item) # <<<<<<<<<<<<<<
+ *
+ * nslices = ndim - len(result)
+ */
+ __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_result, __pyx_v_item); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 694, __pyx_L1_error)
+ }
+ __pyx_L6:;
+
+ /* "View.MemoryView":681
+ * have_slices = False
+ * seen_ellipsis = False
+ * for idx, item in enumerate(tup): # <<<<<<<<<<<<<<
+ * if item is Ellipsis:
+ * if not seen_ellipsis:
+ */
+ }
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+ /* "View.MemoryView":696
+ * result.append(item)
+ *
+ * nslices = ndim - len(result) # <<<<<<<<<<<<<<
+ * if nslices:
+ * result.extend([slice(None)] * nslices)
+ */
+ __pyx_t_5 = PyList_GET_SIZE(__pyx_v_result); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(1, 696, __pyx_L1_error)
+ __pyx_v_nslices = (__pyx_v_ndim - __pyx_t_5);
+
+ /* "View.MemoryView":697
+ *
+ * nslices = ndim - len(result)
+ * if nslices: # <<<<<<<<<<<<<<
+ * result.extend([slice(None)] * nslices)
+ *
+ */
+ __pyx_t_1 = (__pyx_v_nslices != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":698
+ * nslices = ndim - len(result)
+ * if nslices:
+ * result.extend([slice(None)] * nslices) # <<<<<<<<<<<<<<
+ *
+ * return have_slices or nslices, tuple(result)
+ */
+ __pyx_t_3 = PyList_New(1 * ((__pyx_v_nslices<0) ? 0:__pyx_v_nslices)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 698, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ { Py_ssize_t __pyx_temp;
+ for (__pyx_temp=0; __pyx_temp < __pyx_v_nslices; __pyx_temp++) {
+ __Pyx_INCREF(__pyx_slice__16);
+ __Pyx_GIVEREF(__pyx_slice__16);
+ PyList_SET_ITEM(__pyx_t_3, __pyx_temp, __pyx_slice__16);
+ }
+ }
+ __pyx_t_9 = __Pyx_PyList_Extend(__pyx_v_result, __pyx_t_3); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 698, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+ /* "View.MemoryView":697
+ *
+ * nslices = ndim - len(result)
+ * if nslices: # <<<<<<<<<<<<<<
+ * result.extend([slice(None)] * nslices)
+ *
+ */
+ }
+
+ /* "View.MemoryView":700
+ * result.extend([slice(None)] * nslices)
+ *
+ * return have_slices or nslices, tuple(result) # <<<<<<<<<<<<<<
+ *
+ * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ if (!__pyx_v_have_slices) {
+ } else {
+ __pyx_t_4 = __Pyx_PyBool_FromLong(__pyx_v_have_slices); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 700, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __pyx_t_3 = __pyx_t_4;
+ __pyx_t_4 = 0;
+ goto __pyx_L14_bool_binop_done;
+ }
+ __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_nslices); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 700, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __pyx_t_3 = __pyx_t_4;
+ __pyx_t_4 = 0;
+ __pyx_L14_bool_binop_done:;
+ __pyx_t_4 = PyList_AsTuple(__pyx_v_result); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 700, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __pyx_t_11 = PyTuple_New(2); if (unlikely(!__pyx_t_11)) __PYX_ERR(1, 700, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_11);
+ __Pyx_GIVEREF(__pyx_t_3);
+ PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_3);
+ __Pyx_GIVEREF(__pyx_t_4);
+ PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_4);
+ __pyx_t_3 = 0;
+ __pyx_t_4 = 0;
+ __pyx_r = ((PyObject*)__pyx_t_11);
+ __pyx_t_11 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":668
+ * return isinstance(o, memoryview)
+ *
+ * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<<
+ * """
+ * Replace all ellipses with full slices and fill incomplete indices with
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_XDECREF(__pyx_t_4);
+ __Pyx_XDECREF(__pyx_t_7);
+ __Pyx_XDECREF(__pyx_t_11);
+ __Pyx_AddTraceback("View.MemoryView._unellipsify", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XDECREF(__pyx_v_tup);
+ __Pyx_XDECREF(__pyx_v_result);
+ __Pyx_XDECREF(__pyx_v_idx);
+ __Pyx_XDECREF(__pyx_v_item);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":702
+ * return have_slices or nslices, tuple(result)
+ *
+ * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): # <<<<<<<<<<<<<<
+ * for suboffset in suboffsets[:ndim]:
+ * if suboffset >= 0:
+ */
+
+static PyObject *assert_direct_dimensions(Py_ssize_t *__pyx_v_suboffsets, int __pyx_v_ndim) {
+ Py_ssize_t __pyx_v_suboffset;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ Py_ssize_t *__pyx_t_1;
+ Py_ssize_t *__pyx_t_2;
+ Py_ssize_t *__pyx_t_3;
+ int __pyx_t_4;
+ PyObject *__pyx_t_5 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("assert_direct_dimensions", 0);
+
+ /* "View.MemoryView":703
+ *
+ * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim):
+ * for suboffset in suboffsets[:ndim]: # <<<<<<<<<<<<<<
+ * if suboffset >= 0:
+ * raise ValueError("Indirect dimensions not supported")
+ */
+ __pyx_t_2 = (__pyx_v_suboffsets + __pyx_v_ndim);
+ for (__pyx_t_3 = __pyx_v_suboffsets; __pyx_t_3 < __pyx_t_2; __pyx_t_3++) {
+ __pyx_t_1 = __pyx_t_3;
+ __pyx_v_suboffset = (__pyx_t_1[0]);
+
+ /* "View.MemoryView":704
+ * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim):
+ * for suboffset in suboffsets[:ndim]:
+ * if suboffset >= 0: # <<<<<<<<<<<<<<
+ * raise ValueError("Indirect dimensions not supported")
+ *
+ */
+ __pyx_t_4 = ((__pyx_v_suboffset >= 0) != 0);
+ if (unlikely(__pyx_t_4)) {
+
+ /* "View.MemoryView":705
+ * for suboffset in suboffsets[:ndim]:
+ * if suboffset >= 0:
+ * raise ValueError("Indirect dimensions not supported") # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 705, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __Pyx_Raise(__pyx_t_5, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ __PYX_ERR(1, 705, __pyx_L1_error)
+
+ /* "View.MemoryView":704
+ * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim):
+ * for suboffset in suboffsets[:ndim]:
+ * if suboffset >= 0: # <<<<<<<<<<<<<<
+ * raise ValueError("Indirect dimensions not supported")
+ *
+ */
+ }
+ }
+
+ /* "View.MemoryView":702
+ * return have_slices or nslices, tuple(result)
+ *
+ * cdef assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim): # <<<<<<<<<<<<<<
+ * for suboffset in suboffsets[:ndim]:
+ * if suboffset >= 0:
+ */
+
+ /* function exit code */
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_5);
+ __Pyx_AddTraceback("View.MemoryView.assert_direct_dimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":712
+ *
+ * @cname('__pyx_memview_slice')
+ * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<<
+ * cdef int new_ndim = 0, suboffset_dim = -1, dim
+ * cdef bint negative_step
+ */
+
+static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *__pyx_v_memview, PyObject *__pyx_v_indices) {
+ int __pyx_v_new_ndim;
+ int __pyx_v_suboffset_dim;
+ int __pyx_v_dim;
+ __Pyx_memviewslice __pyx_v_src;
+ __Pyx_memviewslice __pyx_v_dst;
+ __Pyx_memviewslice *__pyx_v_p_src;
+ struct __pyx_memoryviewslice_obj *__pyx_v_memviewsliceobj = 0;
+ __Pyx_memviewslice *__pyx_v_p_dst;
+ int *__pyx_v_p_suboffset_dim;
+ Py_ssize_t __pyx_v_start;
+ Py_ssize_t __pyx_v_stop;
+ Py_ssize_t __pyx_v_step;
+ int __pyx_v_have_start;
+ int __pyx_v_have_stop;
+ int __pyx_v_have_step;
+ PyObject *__pyx_v_index = NULL;
+ struct __pyx_memoryview_obj *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ int __pyx_t_2;
+ PyObject *__pyx_t_3 = NULL;
+ struct __pyx_memoryview_obj *__pyx_t_4;
+ char *__pyx_t_5;
+ int __pyx_t_6;
+ Py_ssize_t __pyx_t_7;
+ PyObject *(*__pyx_t_8)(PyObject *);
+ PyObject *__pyx_t_9 = NULL;
+ Py_ssize_t __pyx_t_10;
+ int __pyx_t_11;
+ Py_ssize_t __pyx_t_12;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("memview_slice", 0);
+
+ /* "View.MemoryView":713
+ * @cname('__pyx_memview_slice')
+ * cdef memoryview memview_slice(memoryview memview, object indices):
+ * cdef int new_ndim = 0, suboffset_dim = -1, dim # <<<<<<<<<<<<<<
+ * cdef bint negative_step
+ * cdef __Pyx_memviewslice src, dst
+ */
+ __pyx_v_new_ndim = 0;
+ __pyx_v_suboffset_dim = -1;
+
+ /* "View.MemoryView":720
+ *
+ *
+ * memset(&dst, 0, sizeof(dst)) # <<<<<<<<<<<<<<
+ *
+ * cdef _memoryviewslice memviewsliceobj
+ */
+ (void)(memset((&__pyx_v_dst), 0, (sizeof(__pyx_v_dst))));
+
+ /* "View.MemoryView":724
+ * cdef _memoryviewslice memviewsliceobj
+ *
+ * assert memview.view.ndim > 0 # <<<<<<<<<<<<<<
+ *
+ * if isinstance(memview, _memoryviewslice):
+ */
+ #ifndef CYTHON_WITHOUT_ASSERTIONS
+ if (unlikely(!Py_OptimizeFlag)) {
+ if (unlikely(!((__pyx_v_memview->view.ndim > 0) != 0))) {
+ PyErr_SetNone(PyExc_AssertionError);
+ __PYX_ERR(1, 724, __pyx_L1_error)
+ }
+ }
+ #endif
+
+ /* "View.MemoryView":726
+ * assert memview.view.ndim > 0
+ *
+ * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<<
+ * memviewsliceobj = memview
+ * p_src = &memviewsliceobj.from_slice
+ */
+ __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type);
+ __pyx_t_2 = (__pyx_t_1 != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":727
+ *
+ * if isinstance(memview, _memoryviewslice):
+ * memviewsliceobj = memview # <<<<<<<<<<<<<<
+ * p_src = &memviewsliceobj.from_slice
+ * else:
+ */
+ if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(1, 727, __pyx_L1_error)
+ __pyx_t_3 = ((PyObject *)__pyx_v_memview);
+ __Pyx_INCREF(__pyx_t_3);
+ __pyx_v_memviewsliceobj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_3);
+ __pyx_t_3 = 0;
+
+ /* "View.MemoryView":728
+ * if isinstance(memview, _memoryviewslice):
+ * memviewsliceobj = memview
+ * p_src = &memviewsliceobj.from_slice # <<<<<<<<<<<<<<
+ * else:
+ * slice_copy(memview, &src)
+ */
+ __pyx_v_p_src = (&__pyx_v_memviewsliceobj->from_slice);
+
+ /* "View.MemoryView":726
+ * assert memview.view.ndim > 0
+ *
+ * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<<
+ * memviewsliceobj = memview
+ * p_src = &memviewsliceobj.from_slice
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":730
+ * p_src = &memviewsliceobj.from_slice
+ * else:
+ * slice_copy(memview, &src) # <<<<<<<<<<<<<<
+ * p_src = &src
+ *
+ */
+ /*else*/ {
+ __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_src));
+
+ /* "View.MemoryView":731
+ * else:
+ * slice_copy(memview, &src)
+ * p_src = &src # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_v_p_src = (&__pyx_v_src);
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":737
+ *
+ *
+ * dst.memview = p_src.memview # <<<<<<<<<<<<<<
+ * dst.data = p_src.data
+ *
+ */
+ __pyx_t_4 = __pyx_v_p_src->memview;
+ __pyx_v_dst.memview = __pyx_t_4;
+
+ /* "View.MemoryView":738
+ *
+ * dst.memview = p_src.memview
+ * dst.data = p_src.data # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_t_5 = __pyx_v_p_src->data;
+ __pyx_v_dst.data = __pyx_t_5;
+
+ /* "View.MemoryView":743
+ *
+ *
+ * cdef __Pyx_memviewslice *p_dst = &dst # <<<<<<<<<<<<<<
+ * cdef int *p_suboffset_dim = &suboffset_dim
+ * cdef Py_ssize_t start, stop, step
+ */
+ __pyx_v_p_dst = (&__pyx_v_dst);
+
+ /* "View.MemoryView":744
+ *
+ * cdef __Pyx_memviewslice *p_dst = &dst
+ * cdef int *p_suboffset_dim = &suboffset_dim # <<<<<<<<<<<<<<
+ * cdef Py_ssize_t start, stop, step
+ * cdef bint have_start, have_stop, have_step
+ */
+ __pyx_v_p_suboffset_dim = (&__pyx_v_suboffset_dim);
+
+ /* "View.MemoryView":748
+ * cdef bint have_start, have_stop, have_step
+ *
+ * for dim, index in enumerate(indices): # <<<<<<<<<<<<<<
+ * if PyIndex_Check(index):
+ * slice_memviewslice(
+ */
+ __pyx_t_6 = 0;
+ if (likely(PyList_CheckExact(__pyx_v_indices)) || PyTuple_CheckExact(__pyx_v_indices)) {
+ __pyx_t_3 = __pyx_v_indices; __Pyx_INCREF(__pyx_t_3); __pyx_t_7 = 0;
+ __pyx_t_8 = NULL;
+ } else {
+ __pyx_t_7 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_v_indices); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 748, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_8 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 748, __pyx_L1_error)
+ }
+ for (;;) {
+ if (likely(!__pyx_t_8)) {
+ if (likely(PyList_CheckExact(__pyx_t_3))) {
+ if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_3)) break;
+ #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+ __pyx_t_9 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(1, 748, __pyx_L1_error)
+ #else
+ __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 748, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_9);
+ #endif
+ } else {
+ if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
+ #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+ __pyx_t_9 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_7); __Pyx_INCREF(__pyx_t_9); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(1, 748, __pyx_L1_error)
+ #else
+ __pyx_t_9 = PySequence_ITEM(__pyx_t_3, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 748, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_9);
+ #endif
+ }
+ } else {
+ __pyx_t_9 = __pyx_t_8(__pyx_t_3);
+ if (unlikely(!__pyx_t_9)) {
+ PyObject* exc_type = PyErr_Occurred();
+ if (exc_type) {
+ if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+ else __PYX_ERR(1, 748, __pyx_L1_error)
+ }
+ break;
+ }
+ __Pyx_GOTREF(__pyx_t_9);
+ }
+ __Pyx_XDECREF_SET(__pyx_v_index, __pyx_t_9);
+ __pyx_t_9 = 0;
+ __pyx_v_dim = __pyx_t_6;
+ __pyx_t_6 = (__pyx_t_6 + 1);
+
+ /* "View.MemoryView":749
+ *
+ * for dim, index in enumerate(indices):
+ * if PyIndex_Check(index): # <<<<<<<<<<<<<<
+ * slice_memviewslice(
+ * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim],
+ */
+ __pyx_t_2 = (PyIndex_Check(__pyx_v_index) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":753
+ * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim],
+ * dim, new_ndim, p_suboffset_dim,
+ * index, 0, 0, # start, stop, step # <<<<<<<<<<<<<<
+ * 0, 0, 0, # have_{start,stop,step}
+ * False)
+ */
+ __pyx_t_10 = __Pyx_PyIndex_AsSsize_t(__pyx_v_index); if (unlikely((__pyx_t_10 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 753, __pyx_L1_error)
+
+ /* "View.MemoryView":750
+ * for dim, index in enumerate(indices):
+ * if PyIndex_Check(index):
+ * slice_memviewslice( # <<<<<<<<<<<<<<
+ * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim],
+ * dim, new_ndim, p_suboffset_dim,
+ */
+ __pyx_t_11 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_t_10, 0, 0, 0, 0, 0, 0); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(1, 750, __pyx_L1_error)
+
+ /* "View.MemoryView":749
+ *
+ * for dim, index in enumerate(indices):
+ * if PyIndex_Check(index): # <<<<<<<<<<<<<<
+ * slice_memviewslice(
+ * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim],
+ */
+ goto __pyx_L6;
+ }
+
+ /* "View.MemoryView":756
+ * 0, 0, 0, # have_{start,stop,step}
+ * False)
+ * elif index is None: # <<<<<<<<<<<<<<
+ * p_dst.shape[new_ndim] = 1
+ * p_dst.strides[new_ndim] = 0
+ */
+ __pyx_t_2 = (__pyx_v_index == Py_None);
+ __pyx_t_1 = (__pyx_t_2 != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":757
+ * False)
+ * elif index is None:
+ * p_dst.shape[new_ndim] = 1 # <<<<<<<<<<<<<<
+ * p_dst.strides[new_ndim] = 0
+ * p_dst.suboffsets[new_ndim] = -1
+ */
+ (__pyx_v_p_dst->shape[__pyx_v_new_ndim]) = 1;
+
+ /* "View.MemoryView":758
+ * elif index is None:
+ * p_dst.shape[new_ndim] = 1
+ * p_dst.strides[new_ndim] = 0 # <<<<<<<<<<<<<<
+ * p_dst.suboffsets[new_ndim] = -1
+ * new_ndim += 1
+ */
+ (__pyx_v_p_dst->strides[__pyx_v_new_ndim]) = 0;
+
+ /* "View.MemoryView":759
+ * p_dst.shape[new_ndim] = 1
+ * p_dst.strides[new_ndim] = 0
+ * p_dst.suboffsets[new_ndim] = -1 # <<<<<<<<<<<<<<
+ * new_ndim += 1
+ * else:
+ */
+ (__pyx_v_p_dst->suboffsets[__pyx_v_new_ndim]) = -1L;
+
+ /* "View.MemoryView":760
+ * p_dst.strides[new_ndim] = 0
+ * p_dst.suboffsets[new_ndim] = -1
+ * new_ndim += 1 # <<<<<<<<<<<<<<
+ * else:
+ * start = index.start or 0
+ */
+ __pyx_v_new_ndim = (__pyx_v_new_ndim + 1);
+
+ /* "View.MemoryView":756
+ * 0, 0, 0, # have_{start,stop,step}
+ * False)
+ * elif index is None: # <<<<<<<<<<<<<<
+ * p_dst.shape[new_ndim] = 1
+ * p_dst.strides[new_ndim] = 0
+ */
+ goto __pyx_L6;
+ }
+
+ /* "View.MemoryView":762
+ * new_ndim += 1
+ * else:
+ * start = index.start or 0 # <<<<<<<<<<<<<<
+ * stop = index.stop or 0
+ * step = index.step or 0
+ */
+ /*else*/ {
+ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 762, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_9);
+ __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 762, __pyx_L1_error)
+ if (!__pyx_t_1) {
+ __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+ } else {
+ __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 762, __pyx_L1_error)
+ __pyx_t_10 = __pyx_t_12;
+ __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+ goto __pyx_L7_bool_binop_done;
+ }
+ __pyx_t_10 = 0;
+ __pyx_L7_bool_binop_done:;
+ __pyx_v_start = __pyx_t_10;
+
+ /* "View.MemoryView":763
+ * else:
+ * start = index.start or 0
+ * stop = index.stop or 0 # <<<<<<<<<<<<<<
+ * step = index.step or 0
+ *
+ */
+ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 763, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_9);
+ __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 763, __pyx_L1_error)
+ if (!__pyx_t_1) {
+ __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+ } else {
+ __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 763, __pyx_L1_error)
+ __pyx_t_10 = __pyx_t_12;
+ __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+ goto __pyx_L9_bool_binop_done;
+ }
+ __pyx_t_10 = 0;
+ __pyx_L9_bool_binop_done:;
+ __pyx_v_stop = __pyx_t_10;
+
+ /* "View.MemoryView":764
+ * start = index.start or 0
+ * stop = index.stop or 0
+ * step = index.step or 0 # <<<<<<<<<<<<<<
+ *
+ * have_start = index.start is not None
+ */
+ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 764, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_9);
+ __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(1, 764, __pyx_L1_error)
+ if (!__pyx_t_1) {
+ __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+ } else {
+ __pyx_t_12 = __Pyx_PyIndex_AsSsize_t(__pyx_t_9); if (unlikely((__pyx_t_12 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 764, __pyx_L1_error)
+ __pyx_t_10 = __pyx_t_12;
+ __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+ goto __pyx_L11_bool_binop_done;
+ }
+ __pyx_t_10 = 0;
+ __pyx_L11_bool_binop_done:;
+ __pyx_v_step = __pyx_t_10;
+
+ /* "View.MemoryView":766
+ * step = index.step or 0
+ *
+ * have_start = index.start is not None # <<<<<<<<<<<<<<
+ * have_stop = index.stop is not None
+ * have_step = index.step is not None
+ */
+ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 766, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_9);
+ __pyx_t_1 = (__pyx_t_9 != Py_None);
+ __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+ __pyx_v_have_start = __pyx_t_1;
+
+ /* "View.MemoryView":767
+ *
+ * have_start = index.start is not None
+ * have_stop = index.stop is not None # <<<<<<<<<<<<<<
+ * have_step = index.step is not None
+ *
+ */
+ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 767, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_9);
+ __pyx_t_1 = (__pyx_t_9 != Py_None);
+ __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+ __pyx_v_have_stop = __pyx_t_1;
+
+ /* "View.MemoryView":768
+ * have_start = index.start is not None
+ * have_stop = index.stop is not None
+ * have_step = index.step is not None # <<<<<<<<<<<<<<
+ *
+ * slice_memviewslice(
+ */
+ __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_9)) __PYX_ERR(1, 768, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_9);
+ __pyx_t_1 = (__pyx_t_9 != Py_None);
+ __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+ __pyx_v_have_step = __pyx_t_1;
+
+ /* "View.MemoryView":770
+ * have_step = index.step is not None
+ *
+ * slice_memviewslice( # <<<<<<<<<<<<<<
+ * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim],
+ * dim, new_ndim, p_suboffset_dim,
+ */
+ __pyx_t_11 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_v_start, __pyx_v_stop, __pyx_v_step, __pyx_v_have_start, __pyx_v_have_stop, __pyx_v_have_step, 1); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(1, 770, __pyx_L1_error)
+
+ /* "View.MemoryView":776
+ * have_start, have_stop, have_step,
+ * True)
+ * new_ndim += 1 # <<<<<<<<<<<<<<
+ *
+ * if isinstance(memview, _memoryviewslice):
+ */
+ __pyx_v_new_ndim = (__pyx_v_new_ndim + 1);
+ }
+ __pyx_L6:;
+
+ /* "View.MemoryView":748
+ * cdef bint have_start, have_stop, have_step
+ *
+ * for dim, index in enumerate(indices): # <<<<<<<<<<<<<<
+ * if PyIndex_Check(index):
+ * slice_memviewslice(
+ */
+ }
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+ /* "View.MemoryView":778
+ * new_ndim += 1
+ *
+ * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<<
+ * return memoryview_fromslice(dst, new_ndim,
+ * memviewsliceobj.to_object_func,
+ */
+ __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type);
+ __pyx_t_2 = (__pyx_t_1 != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":779
+ *
+ * if isinstance(memview, _memoryviewslice):
+ * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<<
+ * memviewsliceobj.to_object_func,
+ * memviewsliceobj.to_dtype_func,
+ */
+ __Pyx_XDECREF(((PyObject *)__pyx_r));
+
+ /* "View.MemoryView":780
+ * if isinstance(memview, _memoryviewslice):
+ * return memoryview_fromslice(dst, new_ndim,
+ * memviewsliceobj.to_object_func, # <<<<<<<<<<<<<<
+ * memviewsliceobj.to_dtype_func,
+ * memview.dtype_is_object)
+ */
+ if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(1, 780, __pyx_L1_error) }
+
+ /* "View.MemoryView":781
+ * return memoryview_fromslice(dst, new_ndim,
+ * memviewsliceobj.to_object_func,
+ * memviewsliceobj.to_dtype_func, # <<<<<<<<<<<<<<
+ * memview.dtype_is_object)
+ * else:
+ */
+ if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(1, 781, __pyx_L1_error) }
+
+ /* "View.MemoryView":779
+ *
+ * if isinstance(memview, _memoryviewslice):
+ * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<<
+ * memviewsliceobj.to_object_func,
+ * memviewsliceobj.to_dtype_func,
+ */
+ __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, __pyx_v_memviewsliceobj->to_object_func, __pyx_v_memviewsliceobj->to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 779, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(1, 779, __pyx_L1_error)
+ __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_3);
+ __pyx_t_3 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":778
+ * new_ndim += 1
+ *
+ * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<<
+ * return memoryview_fromslice(dst, new_ndim,
+ * memviewsliceobj.to_object_func,
+ */
+ }
+
+ /* "View.MemoryView":784
+ * memview.dtype_is_object)
+ * else:
+ * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<<
+ * memview.dtype_is_object)
+ *
+ */
+ /*else*/ {
+ __Pyx_XDECREF(((PyObject *)__pyx_r));
+
+ /* "View.MemoryView":785
+ * else:
+ * return memoryview_fromslice(dst, new_ndim, NULL, NULL,
+ * memview.dtype_is_object) # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_t_3 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, NULL, NULL, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 784, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+
+ /* "View.MemoryView":784
+ * memview.dtype_is_object)
+ * else:
+ * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<<
+ * memview.dtype_is_object)
+ *
+ */
+ if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(1, 784, __pyx_L1_error)
+ __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_3);
+ __pyx_t_3 = 0;
+ goto __pyx_L0;
+ }
+
+ /* "View.MemoryView":712
+ *
+ * @cname('__pyx_memview_slice')
+ * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<<
+ * cdef int new_ndim = 0, suboffset_dim = -1, dim
+ * cdef bint negative_step
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_XDECREF(__pyx_t_9);
+ __Pyx_AddTraceback("View.MemoryView.memview_slice", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XDECREF((PyObject *)__pyx_v_memviewsliceobj);
+ __Pyx_XDECREF(__pyx_v_index);
+ __Pyx_XGIVEREF((PyObject *)__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":809
+ *
+ * @cname('__pyx_memoryview_slice_memviewslice')
+ * cdef int slice_memviewslice( # <<<<<<<<<<<<<<
+ * __Pyx_memviewslice *dst,
+ * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset,
+ */
+
+static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *__pyx_v_dst, Py_ssize_t __pyx_v_shape, Py_ssize_t __pyx_v_stride, Py_ssize_t __pyx_v_suboffset, int __pyx_v_dim, int __pyx_v_new_ndim, int *__pyx_v_suboffset_dim, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_stop, Py_ssize_t __pyx_v_step, int __pyx_v_have_start, int __pyx_v_have_stop, int __pyx_v_have_step, int __pyx_v_is_slice) {
+ Py_ssize_t __pyx_v_new_shape;
+ int __pyx_v_negative_step;
+ int __pyx_r;
+ int __pyx_t_1;
+ int __pyx_t_2;
+ int __pyx_t_3;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+
+ /* "View.MemoryView":829
+ * cdef bint negative_step
+ *
+ * if not is_slice: # <<<<<<<<<<<<<<
+ *
+ * if start < 0:
+ */
+ __pyx_t_1 = ((!(__pyx_v_is_slice != 0)) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":831
+ * if not is_slice:
+ *
+ * if start < 0: # <<<<<<<<<<<<<<
+ * start += shape
+ * if not 0 <= start < shape:
+ */
+ __pyx_t_1 = ((__pyx_v_start < 0) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":832
+ *
+ * if start < 0:
+ * start += shape # <<<<<<<<<<<<<<
+ * if not 0 <= start < shape:
+ * _err_dim(IndexError, "Index out of bounds (axis %d)", dim)
+ */
+ __pyx_v_start = (__pyx_v_start + __pyx_v_shape);
+
+ /* "View.MemoryView":831
+ * if not is_slice:
+ *
+ * if start < 0: # <<<<<<<<<<<<<<
+ * start += shape
+ * if not 0 <= start < shape:
+ */
+ }
+
+ /* "View.MemoryView":833
+ * if start < 0:
+ * start += shape
+ * if not 0 <= start < shape: # <<<<<<<<<<<<<<
+ * _err_dim(IndexError, "Index out of bounds (axis %d)", dim)
+ * else:
+ */
+ __pyx_t_1 = (0 <= __pyx_v_start);
+ if (__pyx_t_1) {
+ __pyx_t_1 = (__pyx_v_start < __pyx_v_shape);
+ }
+ __pyx_t_2 = ((!(__pyx_t_1 != 0)) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":834
+ * start += shape
+ * if not 0 <= start < shape:
+ * _err_dim(IndexError, "Index out of bounds (axis %d)", dim) # <<<<<<<<<<<<<<
+ * else:
+ *
+ */
+ __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_IndexError, ((char *)"Index out of bounds (axis %d)"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 834, __pyx_L1_error)
+
+ /* "View.MemoryView":833
+ * if start < 0:
+ * start += shape
+ * if not 0 <= start < shape: # <<<<<<<<<<<<<<
+ * _err_dim(IndexError, "Index out of bounds (axis %d)", dim)
+ * else:
+ */
+ }
+
+ /* "View.MemoryView":829
+ * cdef bint negative_step
+ *
+ * if not is_slice: # <<<<<<<<<<<<<<
+ *
+ * if start < 0:
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":837
+ * else:
+ *
+ * negative_step = have_step != 0 and step < 0 # <<<<<<<<<<<<<<
+ *
+ * if have_step and step == 0:
+ */
+ /*else*/ {
+ __pyx_t_1 = ((__pyx_v_have_step != 0) != 0);
+ if (__pyx_t_1) {
+ } else {
+ __pyx_t_2 = __pyx_t_1;
+ goto __pyx_L6_bool_binop_done;
+ }
+ __pyx_t_1 = ((__pyx_v_step < 0) != 0);
+ __pyx_t_2 = __pyx_t_1;
+ __pyx_L6_bool_binop_done:;
+ __pyx_v_negative_step = __pyx_t_2;
+
+ /* "View.MemoryView":839
+ * negative_step = have_step != 0 and step < 0
+ *
+ * if have_step and step == 0: # <<<<<<<<<<<<<<
+ * _err_dim(ValueError, "Step may not be zero (axis %d)", dim)
+ *
+ */
+ __pyx_t_1 = (__pyx_v_have_step != 0);
+ if (__pyx_t_1) {
+ } else {
+ __pyx_t_2 = __pyx_t_1;
+ goto __pyx_L9_bool_binop_done;
+ }
+ __pyx_t_1 = ((__pyx_v_step == 0) != 0);
+ __pyx_t_2 = __pyx_t_1;
+ __pyx_L9_bool_binop_done:;
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":840
+ *
+ * if have_step and step == 0:
+ * _err_dim(ValueError, "Step may not be zero (axis %d)", dim) # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Step may not be zero (axis %d)"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 840, __pyx_L1_error)
+
+ /* "View.MemoryView":839
+ * negative_step = have_step != 0 and step < 0
+ *
+ * if have_step and step == 0: # <<<<<<<<<<<<<<
+ * _err_dim(ValueError, "Step may not be zero (axis %d)", dim)
+ *
+ */
+ }
+
+ /* "View.MemoryView":843
+ *
+ *
+ * if have_start: # <<<<<<<<<<<<<<
+ * if start < 0:
+ * start += shape
+ */
+ __pyx_t_2 = (__pyx_v_have_start != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":844
+ *
+ * if have_start:
+ * if start < 0: # <<<<<<<<<<<<<<
+ * start += shape
+ * if start < 0:
+ */
+ __pyx_t_2 = ((__pyx_v_start < 0) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":845
+ * if have_start:
+ * if start < 0:
+ * start += shape # <<<<<<<<<<<<<<
+ * if start < 0:
+ * start = 0
+ */
+ __pyx_v_start = (__pyx_v_start + __pyx_v_shape);
+
+ /* "View.MemoryView":846
+ * if start < 0:
+ * start += shape
+ * if start < 0: # <<<<<<<<<<<<<<
+ * start = 0
+ * elif start >= shape:
+ */
+ __pyx_t_2 = ((__pyx_v_start < 0) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":847
+ * start += shape
+ * if start < 0:
+ * start = 0 # <<<<<<<<<<<<<<
+ * elif start >= shape:
+ * if negative_step:
+ */
+ __pyx_v_start = 0;
+
+ /* "View.MemoryView":846
+ * if start < 0:
+ * start += shape
+ * if start < 0: # <<<<<<<<<<<<<<
+ * start = 0
+ * elif start >= shape:
+ */
+ }
+
+ /* "View.MemoryView":844
+ *
+ * if have_start:
+ * if start < 0: # <<<<<<<<<<<<<<
+ * start += shape
+ * if start < 0:
+ */
+ goto __pyx_L12;
+ }
+
+ /* "View.MemoryView":848
+ * if start < 0:
+ * start = 0
+ * elif start >= shape: # <<<<<<<<<<<<<<
+ * if negative_step:
+ * start = shape - 1
+ */
+ __pyx_t_2 = ((__pyx_v_start >= __pyx_v_shape) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":849
+ * start = 0
+ * elif start >= shape:
+ * if negative_step: # <<<<<<<<<<<<<<
+ * start = shape - 1
+ * else:
+ */
+ __pyx_t_2 = (__pyx_v_negative_step != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":850
+ * elif start >= shape:
+ * if negative_step:
+ * start = shape - 1 # <<<<<<<<<<<<<<
+ * else:
+ * start = shape
+ */
+ __pyx_v_start = (__pyx_v_shape - 1);
+
+ /* "View.MemoryView":849
+ * start = 0
+ * elif start >= shape:
+ * if negative_step: # <<<<<<<<<<<<<<
+ * start = shape - 1
+ * else:
+ */
+ goto __pyx_L14;
+ }
+
+ /* "View.MemoryView":852
+ * start = shape - 1
+ * else:
+ * start = shape # <<<<<<<<<<<<<<
+ * else:
+ * if negative_step:
+ */
+ /*else*/ {
+ __pyx_v_start = __pyx_v_shape;
+ }
+ __pyx_L14:;
+
+ /* "View.MemoryView":848
+ * if start < 0:
+ * start = 0
+ * elif start >= shape: # <<<<<<<<<<<<<<
+ * if negative_step:
+ * start = shape - 1
+ */
+ }
+ __pyx_L12:;
+
+ /* "View.MemoryView":843
+ *
+ *
+ * if have_start: # <<<<<<<<<<<<<<
+ * if start < 0:
+ * start += shape
+ */
+ goto __pyx_L11;
+ }
+
+ /* "View.MemoryView":854
+ * start = shape
+ * else:
+ * if negative_step: # <<<<<<<<<<<<<<
+ * start = shape - 1
+ * else:
+ */
+ /*else*/ {
+ __pyx_t_2 = (__pyx_v_negative_step != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":855
+ * else:
+ * if negative_step:
+ * start = shape - 1 # <<<<<<<<<<<<<<
+ * else:
+ * start = 0
+ */
+ __pyx_v_start = (__pyx_v_shape - 1);
+
+ /* "View.MemoryView":854
+ * start = shape
+ * else:
+ * if negative_step: # <<<<<<<<<<<<<<
+ * start = shape - 1
+ * else:
+ */
+ goto __pyx_L15;
+ }
+
+ /* "View.MemoryView":857
+ * start = shape - 1
+ * else:
+ * start = 0 # <<<<<<<<<<<<<<
+ *
+ * if have_stop:
+ */
+ /*else*/ {
+ __pyx_v_start = 0;
+ }
+ __pyx_L15:;
+ }
+ __pyx_L11:;
+
+ /* "View.MemoryView":859
+ * start = 0
+ *
+ * if have_stop: # <<<<<<<<<<<<<<
+ * if stop < 0:
+ * stop += shape
+ */
+ __pyx_t_2 = (__pyx_v_have_stop != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":860
+ *
+ * if have_stop:
+ * if stop < 0: # <<<<<<<<<<<<<<
+ * stop += shape
+ * if stop < 0:
+ */
+ __pyx_t_2 = ((__pyx_v_stop < 0) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":861
+ * if have_stop:
+ * if stop < 0:
+ * stop += shape # <<<<<<<<<<<<<<
+ * if stop < 0:
+ * stop = 0
+ */
+ __pyx_v_stop = (__pyx_v_stop + __pyx_v_shape);
+
+ /* "View.MemoryView":862
+ * if stop < 0:
+ * stop += shape
+ * if stop < 0: # <<<<<<<<<<<<<<
+ * stop = 0
+ * elif stop > shape:
+ */
+ __pyx_t_2 = ((__pyx_v_stop < 0) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":863
+ * stop += shape
+ * if stop < 0:
+ * stop = 0 # <<<<<<<<<<<<<<
+ * elif stop > shape:
+ * stop = shape
+ */
+ __pyx_v_stop = 0;
+
+ /* "View.MemoryView":862
+ * if stop < 0:
+ * stop += shape
+ * if stop < 0: # <<<<<<<<<<<<<<
+ * stop = 0
+ * elif stop > shape:
+ */
+ }
+
+ /* "View.MemoryView":860
+ *
+ * if have_stop:
+ * if stop < 0: # <<<<<<<<<<<<<<
+ * stop += shape
+ * if stop < 0:
+ */
+ goto __pyx_L17;
+ }
+
+ /* "View.MemoryView":864
+ * if stop < 0:
+ * stop = 0
+ * elif stop > shape: # <<<<<<<<<<<<<<
+ * stop = shape
+ * else:
+ */
+ __pyx_t_2 = ((__pyx_v_stop > __pyx_v_shape) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":865
+ * stop = 0
+ * elif stop > shape:
+ * stop = shape # <<<<<<<<<<<<<<
+ * else:
+ * if negative_step:
+ */
+ __pyx_v_stop = __pyx_v_shape;
+
+ /* "View.MemoryView":864
+ * if stop < 0:
+ * stop = 0
+ * elif stop > shape: # <<<<<<<<<<<<<<
+ * stop = shape
+ * else:
+ */
+ }
+ __pyx_L17:;
+
+ /* "View.MemoryView":859
+ * start = 0
+ *
+ * if have_stop: # <<<<<<<<<<<<<<
+ * if stop < 0:
+ * stop += shape
+ */
+ goto __pyx_L16;
+ }
+
+ /* "View.MemoryView":867
+ * stop = shape
+ * else:
+ * if negative_step: # <<<<<<<<<<<<<<
+ * stop = -1
+ * else:
+ */
+ /*else*/ {
+ __pyx_t_2 = (__pyx_v_negative_step != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":868
+ * else:
+ * if negative_step:
+ * stop = -1 # <<<<<<<<<<<<<<
+ * else:
+ * stop = shape
+ */
+ __pyx_v_stop = -1L;
+
+ /* "View.MemoryView":867
+ * stop = shape
+ * else:
+ * if negative_step: # <<<<<<<<<<<<<<
+ * stop = -1
+ * else:
+ */
+ goto __pyx_L19;
+ }
+
+ /* "View.MemoryView":870
+ * stop = -1
+ * else:
+ * stop = shape # <<<<<<<<<<<<<<
+ *
+ * if not have_step:
+ */
+ /*else*/ {
+ __pyx_v_stop = __pyx_v_shape;
+ }
+ __pyx_L19:;
+ }
+ __pyx_L16:;
+
+ /* "View.MemoryView":872
+ * stop = shape
+ *
+ * if not have_step: # <<<<<<<<<<<<<<
+ * step = 1
+ *
+ */
+ __pyx_t_2 = ((!(__pyx_v_have_step != 0)) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":873
+ *
+ * if not have_step:
+ * step = 1 # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_v_step = 1;
+
+ /* "View.MemoryView":872
+ * stop = shape
+ *
+ * if not have_step: # <<<<<<<<<<<<<<
+ * step = 1
+ *
+ */
+ }
+
+ /* "View.MemoryView":877
+ *
+ * with cython.cdivision(True):
+ * new_shape = (stop - start) // step # <<<<<<<<<<<<<<
+ *
+ * if (stop - start) - step * new_shape:
+ */
+ __pyx_v_new_shape = ((__pyx_v_stop - __pyx_v_start) / __pyx_v_step);
+
+ /* "View.MemoryView":879
+ * new_shape = (stop - start) // step
+ *
+ * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<<
+ * new_shape += 1
+ *
+ */
+ __pyx_t_2 = (((__pyx_v_stop - __pyx_v_start) - (__pyx_v_step * __pyx_v_new_shape)) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":880
+ *
+ * if (stop - start) - step * new_shape:
+ * new_shape += 1 # <<<<<<<<<<<<<<
+ *
+ * if new_shape < 0:
+ */
+ __pyx_v_new_shape = (__pyx_v_new_shape + 1);
+
+ /* "View.MemoryView":879
+ * new_shape = (stop - start) // step
+ *
+ * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<<
+ * new_shape += 1
+ *
+ */
+ }
+
+ /* "View.MemoryView":882
+ * new_shape += 1
+ *
+ * if new_shape < 0: # <<<<<<<<<<<<<<
+ * new_shape = 0
+ *
+ */
+ __pyx_t_2 = ((__pyx_v_new_shape < 0) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":883
+ *
+ * if new_shape < 0:
+ * new_shape = 0 # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_v_new_shape = 0;
+
+ /* "View.MemoryView":882
+ * new_shape += 1
+ *
+ * if new_shape < 0: # <<<<<<<<<<<<<<
+ * new_shape = 0
+ *
+ */
+ }
+
+ /* "View.MemoryView":886
+ *
+ *
+ * dst.strides[new_ndim] = stride * step # <<<<<<<<<<<<<<
+ * dst.shape[new_ndim] = new_shape
+ * dst.suboffsets[new_ndim] = suboffset
+ */
+ (__pyx_v_dst->strides[__pyx_v_new_ndim]) = (__pyx_v_stride * __pyx_v_step);
+
+ /* "View.MemoryView":887
+ *
+ * dst.strides[new_ndim] = stride * step
+ * dst.shape[new_ndim] = new_shape # <<<<<<<<<<<<<<
+ * dst.suboffsets[new_ndim] = suboffset
+ *
+ */
+ (__pyx_v_dst->shape[__pyx_v_new_ndim]) = __pyx_v_new_shape;
+
+ /* "View.MemoryView":888
+ * dst.strides[new_ndim] = stride * step
+ * dst.shape[new_ndim] = new_shape
+ * dst.suboffsets[new_ndim] = suboffset # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ (__pyx_v_dst->suboffsets[__pyx_v_new_ndim]) = __pyx_v_suboffset;
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":891
+ *
+ *
+ * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<<
+ * dst.data += start * stride
+ * else:
+ */
+ __pyx_t_2 = (((__pyx_v_suboffset_dim[0]) < 0) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":892
+ *
+ * if suboffset_dim[0] < 0:
+ * dst.data += start * stride # <<<<<<<<<<<<<<
+ * else:
+ * dst.suboffsets[suboffset_dim[0]] += start * stride
+ */
+ __pyx_v_dst->data = (__pyx_v_dst->data + (__pyx_v_start * __pyx_v_stride));
+
+ /* "View.MemoryView":891
+ *
+ *
+ * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<<
+ * dst.data += start * stride
+ * else:
+ */
+ goto __pyx_L23;
+ }
+
+ /* "View.MemoryView":894
+ * dst.data += start * stride
+ * else:
+ * dst.suboffsets[suboffset_dim[0]] += start * stride # <<<<<<<<<<<<<<
+ *
+ * if suboffset >= 0:
+ */
+ /*else*/ {
+ __pyx_t_3 = (__pyx_v_suboffset_dim[0]);
+ (__pyx_v_dst->suboffsets[__pyx_t_3]) = ((__pyx_v_dst->suboffsets[__pyx_t_3]) + (__pyx_v_start * __pyx_v_stride));
+ }
+ __pyx_L23:;
+
+ /* "View.MemoryView":896
+ * dst.suboffsets[suboffset_dim[0]] += start * stride
+ *
+ * if suboffset >= 0: # <<<<<<<<<<<<<<
+ * if not is_slice:
+ * if new_ndim == 0:
+ */
+ __pyx_t_2 = ((__pyx_v_suboffset >= 0) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":897
+ *
+ * if suboffset >= 0:
+ * if not is_slice: # <<<<<<<<<<<<<<
+ * if new_ndim == 0:
+ * dst.data = ( dst.data)[0] + suboffset
+ */
+ __pyx_t_2 = ((!(__pyx_v_is_slice != 0)) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":898
+ * if suboffset >= 0:
+ * if not is_slice:
+ * if new_ndim == 0: # <<<<<<<<<<<<<<
+ * dst.data = ( dst.data)[0] + suboffset
+ * else:
+ */
+ __pyx_t_2 = ((__pyx_v_new_ndim == 0) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":899
+ * if not is_slice:
+ * if new_ndim == 0:
+ * dst.data = ( dst.data)[0] + suboffset # <<<<<<<<<<<<<<
+ * else:
+ * _err_dim(IndexError, "All dimensions preceding dimension %d "
+ */
+ __pyx_v_dst->data = ((((char **)__pyx_v_dst->data)[0]) + __pyx_v_suboffset);
+
+ /* "View.MemoryView":898
+ * if suboffset >= 0:
+ * if not is_slice:
+ * if new_ndim == 0: # <<<<<<<<<<<<<<
+ * dst.data = ( dst.data)[0] + suboffset
+ * else:
+ */
+ goto __pyx_L26;
+ }
+
+ /* "View.MemoryView":901
+ * dst.data = ( dst.data)[0] + suboffset
+ * else:
+ * _err_dim(IndexError, "All dimensions preceding dimension %d " # <<<<<<<<<<<<<<
+ * "must be indexed and not sliced", dim)
+ * else:
+ */
+ /*else*/ {
+
+ /* "View.MemoryView":902
+ * else:
+ * _err_dim(IndexError, "All dimensions preceding dimension %d "
+ * "must be indexed and not sliced", dim) # <<<<<<<<<<<<<<
+ * else:
+ * suboffset_dim[0] = new_ndim
+ */
+ __pyx_t_3 = __pyx_memoryview_err_dim(__pyx_builtin_IndexError, ((char *)"All dimensions preceding dimension %d must be indexed and not sliced"), __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 901, __pyx_L1_error)
+ }
+ __pyx_L26:;
+
+ /* "View.MemoryView":897
+ *
+ * if suboffset >= 0:
+ * if not is_slice: # <<<<<<<<<<<<<<
+ * if new_ndim == 0:
+ * dst.data = ( dst.data)[0] + suboffset
+ */
+ goto __pyx_L25;
+ }
+
+ /* "View.MemoryView":904
+ * "must be indexed and not sliced", dim)
+ * else:
+ * suboffset_dim[0] = new_ndim # <<<<<<<<<<<<<<
+ *
+ * return 0
+ */
+ /*else*/ {
+ (__pyx_v_suboffset_dim[0]) = __pyx_v_new_ndim;
+ }
+ __pyx_L25:;
+
+ /* "View.MemoryView":896
+ * dst.suboffsets[suboffset_dim[0]] += start * stride
+ *
+ * if suboffset >= 0: # <<<<<<<<<<<<<<
+ * if not is_slice:
+ * if new_ndim == 0:
+ */
+ }
+
+ /* "View.MemoryView":906
+ * suboffset_dim[0] = new_ndim
+ *
+ * return 0 # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_r = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":809
+ *
+ * @cname('__pyx_memoryview_slice_memviewslice')
+ * cdef int slice_memviewslice( # <<<<<<<<<<<<<<
+ * __Pyx_memviewslice *dst,
+ * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset,
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ {
+ #ifdef WITH_THREAD
+ PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+ #endif
+ __Pyx_AddTraceback("View.MemoryView.slice_memviewslice", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ #ifdef WITH_THREAD
+ __Pyx_PyGILState_Release(__pyx_gilstate_save);
+ #endif
+ }
+ __pyx_r = -1;
+ __pyx_L0:;
+ return __pyx_r;
+}
+
+/* "View.MemoryView":912
+ *
+ * @cname('__pyx_pybuffer_index')
+ * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<<
+ * Py_ssize_t dim) except NULL:
+ * cdef Py_ssize_t shape, stride, suboffset = -1
+ */
+
+static char *__pyx_pybuffer_index(Py_buffer *__pyx_v_view, char *__pyx_v_bufp, Py_ssize_t __pyx_v_index, Py_ssize_t __pyx_v_dim) {
+ Py_ssize_t __pyx_v_shape;
+ Py_ssize_t __pyx_v_stride;
+ Py_ssize_t __pyx_v_suboffset;
+ Py_ssize_t __pyx_v_itemsize;
+ char *__pyx_v_resultp;
+ char *__pyx_r;
+ __Pyx_RefNannyDeclarations
+ Py_ssize_t __pyx_t_1;
+ int __pyx_t_2;
+ PyObject *__pyx_t_3 = NULL;
+ PyObject *__pyx_t_4 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("pybuffer_index", 0);
+
+ /* "View.MemoryView":914
+ * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index,
+ * Py_ssize_t dim) except NULL:
+ * cdef Py_ssize_t shape, stride, suboffset = -1 # <<<<<<<<<<<<<<
+ * cdef Py_ssize_t itemsize = view.itemsize
+ * cdef char *resultp
+ */
+ __pyx_v_suboffset = -1L;
+
+ /* "View.MemoryView":915
+ * Py_ssize_t dim) except NULL:
+ * cdef Py_ssize_t shape, stride, suboffset = -1
+ * cdef Py_ssize_t itemsize = view.itemsize # <<<<<<<<<<<<<<
+ * cdef char *resultp
+ *
+ */
+ __pyx_t_1 = __pyx_v_view->itemsize;
+ __pyx_v_itemsize = __pyx_t_1;
+
+ /* "View.MemoryView":918
+ * cdef char *resultp
+ *
+ * if view.ndim == 0: # <<<<<<<<<<<<<<
+ * shape = view.len / itemsize
+ * stride = itemsize
+ */
+ __pyx_t_2 = ((__pyx_v_view->ndim == 0) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":919
+ *
+ * if view.ndim == 0:
+ * shape = view.len / itemsize # <<<<<<<<<<<<<<
+ * stride = itemsize
+ * else:
+ */
+ if (unlikely(__pyx_v_itemsize == 0)) {
+ PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
+ __PYX_ERR(1, 919, __pyx_L1_error)
+ }
+ else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1) && unlikely(UNARY_NEG_WOULD_OVERFLOW(__pyx_v_view->len))) {
+ PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
+ __PYX_ERR(1, 919, __pyx_L1_error)
+ }
+ __pyx_v_shape = __Pyx_div_Py_ssize_t(__pyx_v_view->len, __pyx_v_itemsize);
+
+ /* "View.MemoryView":920
+ * if view.ndim == 0:
+ * shape = view.len / itemsize
+ * stride = itemsize # <<<<<<<<<<<<<<
+ * else:
+ * shape = view.shape[dim]
+ */
+ __pyx_v_stride = __pyx_v_itemsize;
+
+ /* "View.MemoryView":918
+ * cdef char *resultp
+ *
+ * if view.ndim == 0: # <<<<<<<<<<<<<<
+ * shape = view.len / itemsize
+ * stride = itemsize
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":922
+ * stride = itemsize
+ * else:
+ * shape = view.shape[dim] # <<<<<<<<<<<<<<
+ * stride = view.strides[dim]
+ * if view.suboffsets != NULL:
+ */
+ /*else*/ {
+ __pyx_v_shape = (__pyx_v_view->shape[__pyx_v_dim]);
+
+ /* "View.MemoryView":923
+ * else:
+ * shape = view.shape[dim]
+ * stride = view.strides[dim] # <<<<<<<<<<<<<<
+ * if view.suboffsets != NULL:
+ * suboffset = view.suboffsets[dim]
+ */
+ __pyx_v_stride = (__pyx_v_view->strides[__pyx_v_dim]);
+
+ /* "View.MemoryView":924
+ * shape = view.shape[dim]
+ * stride = view.strides[dim]
+ * if view.suboffsets != NULL: # <<<<<<<<<<<<<<
+ * suboffset = view.suboffsets[dim]
+ *
+ */
+ __pyx_t_2 = ((__pyx_v_view->suboffsets != NULL) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":925
+ * stride = view.strides[dim]
+ * if view.suboffsets != NULL:
+ * suboffset = view.suboffsets[dim] # <<<<<<<<<<<<<<
+ *
+ * if index < 0:
+ */
+ __pyx_v_suboffset = (__pyx_v_view->suboffsets[__pyx_v_dim]);
+
+ /* "View.MemoryView":924
+ * shape = view.shape[dim]
+ * stride = view.strides[dim]
+ * if view.suboffsets != NULL: # <<<<<<<<<<<<<<
+ * suboffset = view.suboffsets[dim]
+ *
+ */
+ }
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":927
+ * suboffset = view.suboffsets[dim]
+ *
+ * if index < 0: # <<<<<<<<<<<<<<
+ * index += view.shape[dim]
+ * if index < 0:
+ */
+ __pyx_t_2 = ((__pyx_v_index < 0) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":928
+ *
+ * if index < 0:
+ * index += view.shape[dim] # <<<<<<<<<<<<<<
+ * if index < 0:
+ * raise IndexError("Out of bounds on buffer access (axis %d)" % dim)
+ */
+ __pyx_v_index = (__pyx_v_index + (__pyx_v_view->shape[__pyx_v_dim]));
+
+ /* "View.MemoryView":929
+ * if index < 0:
+ * index += view.shape[dim]
+ * if index < 0: # <<<<<<<<<<<<<<
+ * raise IndexError("Out of bounds on buffer access (axis %d)" % dim)
+ *
+ */
+ __pyx_t_2 = ((__pyx_v_index < 0) != 0);
+ if (unlikely(__pyx_t_2)) {
+
+ /* "View.MemoryView":930
+ * index += view.shape[dim]
+ * if index < 0:
+ * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) # <<<<<<<<<<<<<<
+ *
+ * if index >= shape:
+ */
+ __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 930, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 930, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 930, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+ __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __PYX_ERR(1, 930, __pyx_L1_error)
+
+ /* "View.MemoryView":929
+ * if index < 0:
+ * index += view.shape[dim]
+ * if index < 0: # <<<<<<<<<<<<<<
+ * raise IndexError("Out of bounds on buffer access (axis %d)" % dim)
+ *
+ */
+ }
+
+ /* "View.MemoryView":927
+ * suboffset = view.suboffsets[dim]
+ *
+ * if index < 0: # <<<<<<<<<<<<<<
+ * index += view.shape[dim]
+ * if index < 0:
+ */
+ }
+
+ /* "View.MemoryView":932
+ * raise IndexError("Out of bounds on buffer access (axis %d)" % dim)
+ *
+ * if index >= shape: # <<<<<<<<<<<<<<
+ * raise IndexError("Out of bounds on buffer access (axis %d)" % dim)
+ *
+ */
+ __pyx_t_2 = ((__pyx_v_index >= __pyx_v_shape) != 0);
+ if (unlikely(__pyx_t_2)) {
+
+ /* "View.MemoryView":933
+ *
+ * if index >= shape:
+ * raise IndexError("Out of bounds on buffer access (axis %d)" % dim) # <<<<<<<<<<<<<<
+ *
+ * resultp = bufp + index * stride
+ */
+ __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 933, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 933, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_IndexError, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 933, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+ __Pyx_Raise(__pyx_t_3, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __PYX_ERR(1, 933, __pyx_L1_error)
+
+ /* "View.MemoryView":932
+ * raise IndexError("Out of bounds on buffer access (axis %d)" % dim)
+ *
+ * if index >= shape: # <<<<<<<<<<<<<<
+ * raise IndexError("Out of bounds on buffer access (axis %d)" % dim)
+ *
+ */
+ }
+
+ /* "View.MemoryView":935
+ * raise IndexError("Out of bounds on buffer access (axis %d)" % dim)
+ *
+ * resultp = bufp + index * stride # <<<<<<<<<<<<<<
+ * if suboffset >= 0:
+ * resultp = ( resultp)[0] + suboffset
+ */
+ __pyx_v_resultp = (__pyx_v_bufp + (__pyx_v_index * __pyx_v_stride));
+
+ /* "View.MemoryView":936
+ *
+ * resultp = bufp + index * stride
+ * if suboffset >= 0: # <<<<<<<<<<<<<<
+ * resultp = ( resultp)[0] + suboffset
+ *
+ */
+ __pyx_t_2 = ((__pyx_v_suboffset >= 0) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":937
+ * resultp = bufp + index * stride
+ * if suboffset >= 0:
+ * resultp = ( resultp)[0] + suboffset # <<<<<<<<<<<<<<
+ *
+ * return resultp
+ */
+ __pyx_v_resultp = ((((char **)__pyx_v_resultp)[0]) + __pyx_v_suboffset);
+
+ /* "View.MemoryView":936
+ *
+ * resultp = bufp + index * stride
+ * if suboffset >= 0: # <<<<<<<<<<<<<<
+ * resultp = ( resultp)[0] + suboffset
+ *
+ */
+ }
+
+ /* "View.MemoryView":939
+ * resultp = ( resultp)[0] + suboffset
+ *
+ * return resultp # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_r = __pyx_v_resultp;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":912
+ *
+ * @cname('__pyx_pybuffer_index')
+ * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<<
+ * Py_ssize_t dim) except NULL:
+ * cdef Py_ssize_t shape, stride, suboffset = -1
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_XDECREF(__pyx_t_4);
+ __Pyx_AddTraceback("View.MemoryView.pybuffer_index", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":945
+ *
+ * @cname('__pyx_memslice_transpose')
+ * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: # <<<<<<<<<<<<<<
+ * cdef int ndim = memslice.memview.view.ndim
+ *
+ */
+
+static int __pyx_memslice_transpose(__Pyx_memviewslice *__pyx_v_memslice) {
+ int __pyx_v_ndim;
+ Py_ssize_t *__pyx_v_shape;
+ Py_ssize_t *__pyx_v_strides;
+ int __pyx_v_i;
+ int __pyx_v_j;
+ int __pyx_r;
+ int __pyx_t_1;
+ Py_ssize_t *__pyx_t_2;
+ long __pyx_t_3;
+ long __pyx_t_4;
+ Py_ssize_t __pyx_t_5;
+ Py_ssize_t __pyx_t_6;
+ int __pyx_t_7;
+ int __pyx_t_8;
+ int __pyx_t_9;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+
+ /* "View.MemoryView":946
+ * @cname('__pyx_memslice_transpose')
+ * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0:
+ * cdef int ndim = memslice.memview.view.ndim # <<<<<<<<<<<<<<
+ *
+ * cdef Py_ssize_t *shape = memslice.shape
+ */
+ __pyx_t_1 = __pyx_v_memslice->memview->view.ndim;
+ __pyx_v_ndim = __pyx_t_1;
+
+ /* "View.MemoryView":948
+ * cdef int ndim = memslice.memview.view.ndim
+ *
+ * cdef Py_ssize_t *shape = memslice.shape # <<<<<<<<<<<<<<
+ * cdef Py_ssize_t *strides = memslice.strides
+ *
+ */
+ __pyx_t_2 = __pyx_v_memslice->shape;
+ __pyx_v_shape = __pyx_t_2;
+
+ /* "View.MemoryView":949
+ *
+ * cdef Py_ssize_t *shape = memslice.shape
+ * cdef Py_ssize_t *strides = memslice.strides # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_t_2 = __pyx_v_memslice->strides;
+ __pyx_v_strides = __pyx_t_2;
+
+ /* "View.MemoryView":953
+ *
+ * cdef int i, j
+ * for i in range(ndim / 2): # <<<<<<<<<<<<<<
+ * j = ndim - 1 - i
+ * strides[i], strides[j] = strides[j], strides[i]
+ */
+ __pyx_t_3 = __Pyx_div_long(__pyx_v_ndim, 2);
+ __pyx_t_4 = __pyx_t_3;
+ for (__pyx_t_1 = 0; __pyx_t_1 < __pyx_t_4; __pyx_t_1+=1) {
+ __pyx_v_i = __pyx_t_1;
+
+ /* "View.MemoryView":954
+ * cdef int i, j
+ * for i in range(ndim / 2):
+ * j = ndim - 1 - i # <<<<<<<<<<<<<<
+ * strides[i], strides[j] = strides[j], strides[i]
+ * shape[i], shape[j] = shape[j], shape[i]
+ */
+ __pyx_v_j = ((__pyx_v_ndim - 1) - __pyx_v_i);
+
+ /* "View.MemoryView":955
+ * for i in range(ndim / 2):
+ * j = ndim - 1 - i
+ * strides[i], strides[j] = strides[j], strides[i] # <<<<<<<<<<<<<<
+ * shape[i], shape[j] = shape[j], shape[i]
+ *
+ */
+ __pyx_t_5 = (__pyx_v_strides[__pyx_v_j]);
+ __pyx_t_6 = (__pyx_v_strides[__pyx_v_i]);
+ (__pyx_v_strides[__pyx_v_i]) = __pyx_t_5;
+ (__pyx_v_strides[__pyx_v_j]) = __pyx_t_6;
+
+ /* "View.MemoryView":956
+ * j = ndim - 1 - i
+ * strides[i], strides[j] = strides[j], strides[i]
+ * shape[i], shape[j] = shape[j], shape[i] # <<<<<<<<<<<<<<
+ *
+ * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0:
+ */
+ __pyx_t_6 = (__pyx_v_shape[__pyx_v_j]);
+ __pyx_t_5 = (__pyx_v_shape[__pyx_v_i]);
+ (__pyx_v_shape[__pyx_v_i]) = __pyx_t_6;
+ (__pyx_v_shape[__pyx_v_j]) = __pyx_t_5;
+
+ /* "View.MemoryView":958
+ * shape[i], shape[j] = shape[j], shape[i]
+ *
+ * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<<
+ * _err(ValueError, "Cannot transpose memoryview with indirect dimensions")
+ *
+ */
+ __pyx_t_8 = (((__pyx_v_memslice->suboffsets[__pyx_v_i]) >= 0) != 0);
+ if (!__pyx_t_8) {
+ } else {
+ __pyx_t_7 = __pyx_t_8;
+ goto __pyx_L6_bool_binop_done;
+ }
+ __pyx_t_8 = (((__pyx_v_memslice->suboffsets[__pyx_v_j]) >= 0) != 0);
+ __pyx_t_7 = __pyx_t_8;
+ __pyx_L6_bool_binop_done:;
+ if (__pyx_t_7) {
+
+ /* "View.MemoryView":959
+ *
+ * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0:
+ * _err(ValueError, "Cannot transpose memoryview with indirect dimensions") # <<<<<<<<<<<<<<
+ *
+ * return 1
+ */
+ __pyx_t_9 = __pyx_memoryview_err(__pyx_builtin_ValueError, ((char *)"Cannot transpose memoryview with indirect dimensions")); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 959, __pyx_L1_error)
+
+ /* "View.MemoryView":958
+ * shape[i], shape[j] = shape[j], shape[i]
+ *
+ * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<<
+ * _err(ValueError, "Cannot transpose memoryview with indirect dimensions")
+ *
+ */
+ }
+ }
+
+ /* "View.MemoryView":961
+ * _err(ValueError, "Cannot transpose memoryview with indirect dimensions")
+ *
+ * return 1 # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_r = 1;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":945
+ *
+ * @cname('__pyx_memslice_transpose')
+ * cdef int transpose_memslice(__Pyx_memviewslice *memslice) nogil except 0: # <<<<<<<<<<<<<<
+ * cdef int ndim = memslice.memview.view.ndim
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ {
+ #ifdef WITH_THREAD
+ PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+ #endif
+ __Pyx_AddTraceback("View.MemoryView.transpose_memslice", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ #ifdef WITH_THREAD
+ __Pyx_PyGILState_Release(__pyx_gilstate_save);
+ #endif
+ }
+ __pyx_r = 0;
+ __pyx_L0:;
+ return __pyx_r;
+}
+
+/* "View.MemoryView":978
+ * cdef int (*to_dtype_func)(char *, object) except 0
+ *
+ * def __dealloc__(self): # <<<<<<<<<<<<<<
+ * __PYX_XDEC_MEMVIEW(&self.from_slice, 1)
+ *
+ */
+
+/* Python wrapper */
+static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self) {
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
+ __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+}
+
+static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self) {
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__dealloc__", 0);
+
+ /* "View.MemoryView":979
+ *
+ * def __dealloc__(self):
+ * __PYX_XDEC_MEMVIEW(&self.from_slice, 1) # <<<<<<<<<<<<<<
+ *
+ * cdef convert_item_to_object(self, char *itemp):
+ */
+ __PYX_XDEC_MEMVIEW((&__pyx_v_self->from_slice), 1);
+
+ /* "View.MemoryView":978
+ * cdef int (*to_dtype_func)(char *, object) except 0
+ *
+ * def __dealloc__(self): # <<<<<<<<<<<<<<
+ * __PYX_XDEC_MEMVIEW(&self.from_slice, 1)
+ *
+ */
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+}
+
+/* "View.MemoryView":981
+ * __PYX_XDEC_MEMVIEW(&self.from_slice, 1)
+ *
+ * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<<
+ * if self.to_object_func != NULL:
+ * return self.to_object_func(itemp)
+ */
+
+static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("convert_item_to_object", 0);
+
+ /* "View.MemoryView":982
+ *
+ * cdef convert_item_to_object(self, char *itemp):
+ * if self.to_object_func != NULL: # <<<<<<<<<<<<<<
+ * return self.to_object_func(itemp)
+ * else:
+ */
+ __pyx_t_1 = ((__pyx_v_self->to_object_func != NULL) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":983
+ * cdef convert_item_to_object(self, char *itemp):
+ * if self.to_object_func != NULL:
+ * return self.to_object_func(itemp) # <<<<<<<<<<<<<<
+ * else:
+ * return memoryview.convert_item_to_object(self, itemp)
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_2 = __pyx_v_self->to_object_func(__pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 983, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":982
+ *
+ * cdef convert_item_to_object(self, char *itemp):
+ * if self.to_object_func != NULL: # <<<<<<<<<<<<<<
+ * return self.to_object_func(itemp)
+ * else:
+ */
+ }
+
+ /* "View.MemoryView":985
+ * return self.to_object_func(itemp)
+ * else:
+ * return memoryview.convert_item_to_object(self, itemp) # <<<<<<<<<<<<<<
+ *
+ * cdef assign_item_from_object(self, char *itemp, object value):
+ */
+ /*else*/ {
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_2 = __pyx_memoryview_convert_item_to_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 985, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+ }
+
+ /* "View.MemoryView":981
+ * __PYX_XDEC_MEMVIEW(&self.from_slice, 1)
+ *
+ * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<<
+ * if self.to_object_func != NULL:
+ * return self.to_object_func(itemp)
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("View.MemoryView._memoryviewslice.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":987
+ * return memoryview.convert_item_to_object(self, itemp)
+ *
+ * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<<
+ * if self.to_dtype_func != NULL:
+ * self.to_dtype_func(itemp, value)
+ */
+
+static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ int __pyx_t_2;
+ PyObject *__pyx_t_3 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("assign_item_from_object", 0);
+
+ /* "View.MemoryView":988
+ *
+ * cdef assign_item_from_object(self, char *itemp, object value):
+ * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<<
+ * self.to_dtype_func(itemp, value)
+ * else:
+ */
+ __pyx_t_1 = ((__pyx_v_self->to_dtype_func != NULL) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":989
+ * cdef assign_item_from_object(self, char *itemp, object value):
+ * if self.to_dtype_func != NULL:
+ * self.to_dtype_func(itemp, value) # <<<<<<<<<<<<<<
+ * else:
+ * memoryview.assign_item_from_object(self, itemp, value)
+ */
+ __pyx_t_2 = __pyx_v_self->to_dtype_func(__pyx_v_itemp, __pyx_v_value); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(1, 989, __pyx_L1_error)
+
+ /* "View.MemoryView":988
+ *
+ * cdef assign_item_from_object(self, char *itemp, object value):
+ * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<<
+ * self.to_dtype_func(itemp, value)
+ * else:
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":991
+ * self.to_dtype_func(itemp, value)
+ * else:
+ * memoryview.assign_item_from_object(self, itemp, value) # <<<<<<<<<<<<<<
+ *
+ * @property
+ */
+ /*else*/ {
+ __pyx_t_3 = __pyx_memoryview_assign_item_from_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 991, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":987
+ * return memoryview.convert_item_to_object(self, itemp)
+ *
+ * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<<
+ * if self.to_dtype_func != NULL:
+ * self.to_dtype_func(itemp, value)
+ */
+
+ /* function exit code */
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_AddTraceback("View.MemoryView._memoryviewslice.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":994
+ *
+ * @property
+ * def base(self): # <<<<<<<<<<<<<<
+ * return self.from_object
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(PyObject *__pyx_v_self) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_r = __pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_16_memoryviewslice_4base___get__(struct __pyx_memoryviewslice_obj *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__", 0);
+
+ /* "View.MemoryView":995
+ * @property
+ * def base(self):
+ * return self.from_object # <<<<<<<<<<<<<<
+ *
+ * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)")
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF(__pyx_v_self->from_object);
+ __pyx_r = __pyx_v_self->from_object;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":994
+ *
+ * @property
+ * def base(self): # <<<<<<<<<<<<<<
+ * return self.from_object
+ *
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":1
+ * def __reduce_cython__(self): # <<<<<<<<<<<<<<
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
+static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
+ __pyx_r = __pyx_pf___pyx_memoryviewslice___reduce_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf___pyx_memoryviewslice___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__reduce_cython__", 0);
+
+ /* "(tree fragment)":2
+ * def __reduce_cython__(self):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<<
+ * def __setstate_cython__(self, __pyx_state):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+ __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 2, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_Raise(__pyx_t_1, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __PYX_ERR(1, 2, __pyx_L1_error)
+
+ /* "(tree fragment)":1
+ * def __reduce_cython__(self): # <<<<<<<<<<<<<<
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":3
+ * def __reduce_cython__(self):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<<
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
+static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
+ __pyx_r = __pyx_pf___pyx_memoryviewslice_2__setstate_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf___pyx_memoryviewslice_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__setstate_cython__", 0);
+
+ /* "(tree fragment)":4
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<<
+ */
+ __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_Raise(__pyx_t_1, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __PYX_ERR(1, 4, __pyx_L1_error)
+
+ /* "(tree fragment)":3
+ * def __reduce_cython__(self):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<<
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1001
+ *
+ * @cname('__pyx_memoryview_fromslice')
+ * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<<
+ * int ndim,
+ * object (*to_object_func)(char *),
+ */
+
+static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice __pyx_v_memviewslice, int __pyx_v_ndim, PyObject *(*__pyx_v_to_object_func)(char *), int (*__pyx_v_to_dtype_func)(char *, PyObject *), int __pyx_v_dtype_is_object) {
+ struct __pyx_memoryviewslice_obj *__pyx_v_result = 0;
+ Py_ssize_t __pyx_v_suboffset;
+ PyObject *__pyx_v_length = NULL;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ __Pyx_TypeInfo *__pyx_t_4;
+ Py_buffer __pyx_t_5;
+ Py_ssize_t *__pyx_t_6;
+ Py_ssize_t *__pyx_t_7;
+ Py_ssize_t *__pyx_t_8;
+ Py_ssize_t __pyx_t_9;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("memoryview_fromslice", 0);
+
+ /* "View.MemoryView":1009
+ * cdef _memoryviewslice result
+ *
+ * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<<
+ * return None
+ *
+ */
+ __pyx_t_1 = ((((PyObject *)__pyx_v_memviewslice.memview) == Py_None) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":1010
+ *
+ * if memviewslice.memview == Py_None:
+ * return None # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+
+ /* "View.MemoryView":1009
+ * cdef _memoryviewslice result
+ *
+ * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<<
+ * return None
+ *
+ */
+ }
+
+ /* "View.MemoryView":1015
+ *
+ *
+ * result = _memoryviewslice(None, 0, dtype_is_object) # <<<<<<<<<<<<<<
+ *
+ * result.from_slice = memviewslice
+ */
+ __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1015, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1015, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_INCREF(Py_None);
+ __Pyx_GIVEREF(Py_None);
+ PyTuple_SET_ITEM(__pyx_t_3, 0, Py_None);
+ __Pyx_INCREF(__pyx_int_0);
+ __Pyx_GIVEREF(__pyx_int_0);
+ PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_0);
+ __Pyx_GIVEREF(__pyx_t_2);
+ PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2);
+ __pyx_t_2 = 0;
+ __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryviewslice_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1015, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_2);
+ __pyx_t_2 = 0;
+
+ /* "View.MemoryView":1017
+ * result = _memoryviewslice(None, 0, dtype_is_object)
+ *
+ * result.from_slice = memviewslice # <<<<<<<<<<<<<<
+ * __PYX_INC_MEMVIEW(&memviewslice, 1)
+ *
+ */
+ __pyx_v_result->from_slice = __pyx_v_memviewslice;
+
+ /* "View.MemoryView":1018
+ *
+ * result.from_slice = memviewslice
+ * __PYX_INC_MEMVIEW(&memviewslice, 1) # <<<<<<<<<<<<<<
+ *
+ * result.from_object = ( memviewslice.memview).base
+ */
+ __PYX_INC_MEMVIEW((&__pyx_v_memviewslice), 1);
+
+ /* "View.MemoryView":1020
+ * __PYX_INC_MEMVIEW(&memviewslice, 1)
+ *
+ * result.from_object = ( memviewslice.memview).base # <<<<<<<<<<<<<<
+ * result.typeinfo = memviewslice.memview.typeinfo
+ *
+ */
+ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_memviewslice.memview), __pyx_n_s_base); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1020, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_GIVEREF(__pyx_t_2);
+ __Pyx_GOTREF(__pyx_v_result->from_object);
+ __Pyx_DECREF(__pyx_v_result->from_object);
+ __pyx_v_result->from_object = __pyx_t_2;
+ __pyx_t_2 = 0;
+
+ /* "View.MemoryView":1021
+ *
+ * result.from_object = ( memviewslice.memview).base
+ * result.typeinfo = memviewslice.memview.typeinfo # <<<<<<<<<<<<<<
+ *
+ * result.view = memviewslice.memview.view
+ */
+ __pyx_t_4 = __pyx_v_memviewslice.memview->typeinfo;
+ __pyx_v_result->__pyx_base.typeinfo = __pyx_t_4;
+
+ /* "View.MemoryView":1023
+ * result.typeinfo = memviewslice.memview.typeinfo
+ *
+ * result.view = memviewslice.memview.view # <<<<<<<<<<<<<<
+ * result.view.buf = memviewslice.data
+ * result.view.ndim = ndim
+ */
+ __pyx_t_5 = __pyx_v_memviewslice.memview->view;
+ __pyx_v_result->__pyx_base.view = __pyx_t_5;
+
+ /* "View.MemoryView":1024
+ *
+ * result.view = memviewslice.memview.view
+ * result.view.buf = memviewslice.data # <<<<<<<<<<<<<<
+ * result.view.ndim = ndim
+ * (<__pyx_buffer *> &result.view).obj = Py_None
+ */
+ __pyx_v_result->__pyx_base.view.buf = ((void *)__pyx_v_memviewslice.data);
+
+ /* "View.MemoryView":1025
+ * result.view = memviewslice.memview.view
+ * result.view.buf = memviewslice.data
+ * result.view.ndim = ndim # <<<<<<<<<<<<<<
+ * (<__pyx_buffer *> &result.view).obj = Py_None
+ * Py_INCREF(Py_None)
+ */
+ __pyx_v_result->__pyx_base.view.ndim = __pyx_v_ndim;
+
+ /* "View.MemoryView":1026
+ * result.view.buf = memviewslice.data
+ * result.view.ndim = ndim
+ * (<__pyx_buffer *> &result.view).obj = Py_None # <<<<<<<<<<<<<<
+ * Py_INCREF(Py_None)
+ *
+ */
+ ((Py_buffer *)(&__pyx_v_result->__pyx_base.view))->obj = Py_None;
+
+ /* "View.MemoryView":1027
+ * result.view.ndim = ndim
+ * (<__pyx_buffer *> &result.view).obj = Py_None
+ * Py_INCREF(Py_None) # <<<<<<<<<<<<<<
+ *
+ * if (memviewslice.memview).flags & PyBUF_WRITABLE:
+ */
+ Py_INCREF(Py_None);
+
+ /* "View.MemoryView":1029
+ * Py_INCREF(Py_None)
+ *
+ * if (memviewslice.memview).flags & PyBUF_WRITABLE: # <<<<<<<<<<<<<<
+ * result.flags = PyBUF_RECORDS
+ * else:
+ */
+ __pyx_t_1 = ((((struct __pyx_memoryview_obj *)__pyx_v_memviewslice.memview)->flags & PyBUF_WRITABLE) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":1030
+ *
+ * if (memviewslice.memview).flags & PyBUF_WRITABLE:
+ * result.flags = PyBUF_RECORDS # <<<<<<<<<<<<<<
+ * else:
+ * result.flags = PyBUF_RECORDS_RO
+ */
+ __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS;
+
+ /* "View.MemoryView":1029
+ * Py_INCREF(Py_None)
+ *
+ * if (memviewslice.memview).flags & PyBUF_WRITABLE: # <<<<<<<<<<<<<<
+ * result.flags = PyBUF_RECORDS
+ * else:
+ */
+ goto __pyx_L4;
+ }
+
+ /* "View.MemoryView":1032
+ * result.flags = PyBUF_RECORDS
+ * else:
+ * result.flags = PyBUF_RECORDS_RO # <<<<<<<<<<<<<<
+ *
+ * result.view.shape = result.from_slice.shape
+ */
+ /*else*/ {
+ __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS_RO;
+ }
+ __pyx_L4:;
+
+ /* "View.MemoryView":1034
+ * result.flags = PyBUF_RECORDS_RO
+ *
+ * result.view.shape = result.from_slice.shape # <<<<<<<<<<<<<<
+ * result.view.strides = result.from_slice.strides
+ *
+ */
+ __pyx_v_result->__pyx_base.view.shape = ((Py_ssize_t *)__pyx_v_result->from_slice.shape);
+
+ /* "View.MemoryView":1035
+ *
+ * result.view.shape = result.from_slice.shape
+ * result.view.strides = result.from_slice.strides # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_v_result->__pyx_base.view.strides = ((Py_ssize_t *)__pyx_v_result->from_slice.strides);
+
+ /* "View.MemoryView":1038
+ *
+ *
+ * result.view.suboffsets = NULL # <<<<<<<<<<<<<<
+ * for suboffset in result.from_slice.suboffsets[:ndim]:
+ * if suboffset >= 0:
+ */
+ __pyx_v_result->__pyx_base.view.suboffsets = NULL;
+
+ /* "View.MemoryView":1039
+ *
+ * result.view.suboffsets = NULL
+ * for suboffset in result.from_slice.suboffsets[:ndim]: # <<<<<<<<<<<<<<
+ * if suboffset >= 0:
+ * result.view.suboffsets = result.from_slice.suboffsets
+ */
+ __pyx_t_7 = (__pyx_v_result->from_slice.suboffsets + __pyx_v_ndim);
+ for (__pyx_t_8 = __pyx_v_result->from_slice.suboffsets; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) {
+ __pyx_t_6 = __pyx_t_8;
+ __pyx_v_suboffset = (__pyx_t_6[0]);
+
+ /* "View.MemoryView":1040
+ * result.view.suboffsets = NULL
+ * for suboffset in result.from_slice.suboffsets[:ndim]:
+ * if suboffset >= 0: # <<<<<<<<<<<<<<
+ * result.view.suboffsets = result.from_slice.suboffsets
+ * break
+ */
+ __pyx_t_1 = ((__pyx_v_suboffset >= 0) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":1041
+ * for suboffset in result.from_slice.suboffsets[:ndim]:
+ * if suboffset >= 0:
+ * result.view.suboffsets = result.from_slice.suboffsets # <<<<<<<<<<<<<<
+ * break
+ *
+ */
+ __pyx_v_result->__pyx_base.view.suboffsets = ((Py_ssize_t *)__pyx_v_result->from_slice.suboffsets);
+
+ /* "View.MemoryView":1042
+ * if suboffset >= 0:
+ * result.view.suboffsets = result.from_slice.suboffsets
+ * break # <<<<<<<<<<<<<<
+ *
+ * result.view.len = result.view.itemsize
+ */
+ goto __pyx_L6_break;
+
+ /* "View.MemoryView":1040
+ * result.view.suboffsets = NULL
+ * for suboffset in result.from_slice.suboffsets[:ndim]:
+ * if suboffset >= 0: # <<<<<<<<<<<<<<
+ * result.view.suboffsets = result.from_slice.suboffsets
+ * break
+ */
+ }
+ }
+ __pyx_L6_break:;
+
+ /* "View.MemoryView":1044
+ * break
+ *
+ * result.view.len = result.view.itemsize # <<<<<<<<<<<<<<
+ * for length in result.view.shape[:ndim]:
+ * result.view.len *= length
+ */
+ __pyx_t_9 = __pyx_v_result->__pyx_base.view.itemsize;
+ __pyx_v_result->__pyx_base.view.len = __pyx_t_9;
+
+ /* "View.MemoryView":1045
+ *
+ * result.view.len = result.view.itemsize
+ * for length in result.view.shape[:ndim]: # <<<<<<<<<<<<<<
+ * result.view.len *= length
+ *
+ */
+ __pyx_t_7 = (__pyx_v_result->__pyx_base.view.shape + __pyx_v_ndim);
+ for (__pyx_t_8 = __pyx_v_result->__pyx_base.view.shape; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) {
+ __pyx_t_6 = __pyx_t_8;
+ __pyx_t_2 = PyInt_FromSsize_t((__pyx_t_6[0])); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1045, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_2);
+ __pyx_t_2 = 0;
+
+ /* "View.MemoryView":1046
+ * result.view.len = result.view.itemsize
+ * for length in result.view.shape[:ndim]:
+ * result.view.len *= length # <<<<<<<<<<<<<<
+ *
+ * result.to_object_func = to_object_func
+ */
+ __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_result->__pyx_base.view.len); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1046, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_3 = PyNumber_InPlaceMultiply(__pyx_t_2, __pyx_v_length); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1046, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 1046, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __pyx_v_result->__pyx_base.view.len = __pyx_t_9;
+ }
+
+ /* "View.MemoryView":1048
+ * result.view.len *= length
+ *
+ * result.to_object_func = to_object_func # <<<<<<<<<<<<<<
+ * result.to_dtype_func = to_dtype_func
+ *
+ */
+ __pyx_v_result->to_object_func = __pyx_v_to_object_func;
+
+ /* "View.MemoryView":1049
+ *
+ * result.to_object_func = to_object_func
+ * result.to_dtype_func = to_dtype_func # <<<<<<<<<<<<<<
+ *
+ * return result
+ */
+ __pyx_v_result->to_dtype_func = __pyx_v_to_dtype_func;
+
+ /* "View.MemoryView":1051
+ * result.to_dtype_func = to_dtype_func
+ *
+ * return result # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_memoryview_get_slice_from_memoryview')
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF(((PyObject *)__pyx_v_result));
+ __pyx_r = ((PyObject *)__pyx_v_result);
+ goto __pyx_L0;
+
+ /* "View.MemoryView":1001
+ *
+ * @cname('__pyx_memoryview_fromslice')
+ * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<<
+ * int ndim,
+ * object (*to_object_func)(char *),
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_AddTraceback("View.MemoryView.memoryview_fromslice", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XDECREF((PyObject *)__pyx_v_result);
+ __Pyx_XDECREF(__pyx_v_length);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1054
+ *
+ * @cname('__pyx_memoryview_get_slice_from_memoryview')
+ * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<<
+ * __Pyx_memviewslice *mslice) except NULL:
+ * cdef _memoryviewslice obj
+ */
+
+static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_mslice) {
+ struct __pyx_memoryviewslice_obj *__pyx_v_obj = 0;
+ __Pyx_memviewslice *__pyx_r;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ int __pyx_t_2;
+ PyObject *__pyx_t_3 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("get_slice_from_memview", 0);
+
+ /* "View.MemoryView":1057
+ * __Pyx_memviewslice *mslice) except NULL:
+ * cdef _memoryviewslice obj
+ * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<<
+ * obj = memview
+ * return &obj.from_slice
+ */
+ __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type);
+ __pyx_t_2 = (__pyx_t_1 != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1058
+ * cdef _memoryviewslice obj
+ * if isinstance(memview, _memoryviewslice):
+ * obj = memview # <<<<<<<<<<<<<<
+ * return &obj.from_slice
+ * else:
+ */
+ if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(1, 1058, __pyx_L1_error)
+ __pyx_t_3 = ((PyObject *)__pyx_v_memview);
+ __Pyx_INCREF(__pyx_t_3);
+ __pyx_v_obj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_3);
+ __pyx_t_3 = 0;
+
+ /* "View.MemoryView":1059
+ * if isinstance(memview, _memoryviewslice):
+ * obj = memview
+ * return &obj.from_slice # <<<<<<<<<<<<<<
+ * else:
+ * slice_copy(memview, mslice)
+ */
+ __pyx_r = (&__pyx_v_obj->from_slice);
+ goto __pyx_L0;
+
+ /* "View.MemoryView":1057
+ * __Pyx_memviewslice *mslice) except NULL:
+ * cdef _memoryviewslice obj
+ * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<<
+ * obj = memview
+ * return &obj.from_slice
+ */
+ }
+
+ /* "View.MemoryView":1061
+ * return &obj.from_slice
+ * else:
+ * slice_copy(memview, mslice) # <<<<<<<<<<<<<<
+ * return mslice
+ *
+ */
+ /*else*/ {
+ __pyx_memoryview_slice_copy(__pyx_v_memview, __pyx_v_mslice);
+
+ /* "View.MemoryView":1062
+ * else:
+ * slice_copy(memview, mslice)
+ * return mslice # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_memoryview_slice_copy')
+ */
+ __pyx_r = __pyx_v_mslice;
+ goto __pyx_L0;
+ }
+
+ /* "View.MemoryView":1054
+ *
+ * @cname('__pyx_memoryview_get_slice_from_memoryview')
+ * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<<
+ * __Pyx_memviewslice *mslice) except NULL:
+ * cdef _memoryviewslice obj
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_AddTraceback("View.MemoryView.get_slice_from_memview", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XDECREF((PyObject *)__pyx_v_obj);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1065
+ *
+ * @cname('__pyx_memoryview_slice_copy')
+ * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst): # <<<<<<<<<<<<<<
+ * cdef int dim
+ * cdef (Py_ssize_t*) shape, strides, suboffsets
+ */
+
+static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_dst) {
+ int __pyx_v_dim;
+ Py_ssize_t *__pyx_v_shape;
+ Py_ssize_t *__pyx_v_strides;
+ Py_ssize_t *__pyx_v_suboffsets;
+ __Pyx_RefNannyDeclarations
+ Py_ssize_t *__pyx_t_1;
+ int __pyx_t_2;
+ int __pyx_t_3;
+ int __pyx_t_4;
+ Py_ssize_t __pyx_t_5;
+ __Pyx_RefNannySetupContext("slice_copy", 0);
+
+ /* "View.MemoryView":1069
+ * cdef (Py_ssize_t*) shape, strides, suboffsets
+ *
+ * shape = memview.view.shape # <<<<<<<<<<<<<<
+ * strides = memview.view.strides
+ * suboffsets = memview.view.suboffsets
+ */
+ __pyx_t_1 = __pyx_v_memview->view.shape;
+ __pyx_v_shape = __pyx_t_1;
+
+ /* "View.MemoryView":1070
+ *
+ * shape = memview.view.shape
+ * strides = memview.view.strides # <<<<<<<<<<<<<<
+ * suboffsets = memview.view.suboffsets
+ *
+ */
+ __pyx_t_1 = __pyx_v_memview->view.strides;
+ __pyx_v_strides = __pyx_t_1;
+
+ /* "View.MemoryView":1071
+ * shape = memview.view.shape
+ * strides = memview.view.strides
+ * suboffsets = memview.view.suboffsets # <<<<<<<<<<<<<<
+ *
+ * dst.memview = <__pyx_memoryview *> memview
+ */
+ __pyx_t_1 = __pyx_v_memview->view.suboffsets;
+ __pyx_v_suboffsets = __pyx_t_1;
+
+ /* "View.MemoryView":1073
+ * suboffsets = memview.view.suboffsets
+ *
+ * dst.memview = <__pyx_memoryview *> memview # <<<<<<<<<<<<<<
+ * dst.data = memview.view.buf
+ *
+ */
+ __pyx_v_dst->memview = ((struct __pyx_memoryview_obj *)__pyx_v_memview);
+
+ /* "View.MemoryView":1074
+ *
+ * dst.memview = <__pyx_memoryview *> memview
+ * dst.data = memview.view.buf # <<<<<<<<<<<<<<
+ *
+ * for dim in range(memview.view.ndim):
+ */
+ __pyx_v_dst->data = ((char *)__pyx_v_memview->view.buf);
+
+ /* "View.MemoryView":1076
+ * dst.data = memview.view.buf
+ *
+ * for dim in range(memview.view.ndim): # <<<<<<<<<<<<<<
+ * dst.shape[dim] = shape[dim]
+ * dst.strides[dim] = strides[dim]
+ */
+ __pyx_t_2 = __pyx_v_memview->view.ndim;
+ __pyx_t_3 = __pyx_t_2;
+ for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+ __pyx_v_dim = __pyx_t_4;
+
+ /* "View.MemoryView":1077
+ *
+ * for dim in range(memview.view.ndim):
+ * dst.shape[dim] = shape[dim] # <<<<<<<<<<<<<<
+ * dst.strides[dim] = strides[dim]
+ * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1
+ */
+ (__pyx_v_dst->shape[__pyx_v_dim]) = (__pyx_v_shape[__pyx_v_dim]);
+
+ /* "View.MemoryView":1078
+ * for dim in range(memview.view.ndim):
+ * dst.shape[dim] = shape[dim]
+ * dst.strides[dim] = strides[dim] # <<<<<<<<<<<<<<
+ * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1
+ *
+ */
+ (__pyx_v_dst->strides[__pyx_v_dim]) = (__pyx_v_strides[__pyx_v_dim]);
+
+ /* "View.MemoryView":1079
+ * dst.shape[dim] = shape[dim]
+ * dst.strides[dim] = strides[dim]
+ * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_memoryview_copy_object')
+ */
+ if ((__pyx_v_suboffsets != 0)) {
+ __pyx_t_5 = (__pyx_v_suboffsets[__pyx_v_dim]);
+ } else {
+ __pyx_t_5 = -1L;
+ }
+ (__pyx_v_dst->suboffsets[__pyx_v_dim]) = __pyx_t_5;
+ }
+
+ /* "View.MemoryView":1065
+ *
+ * @cname('__pyx_memoryview_slice_copy')
+ * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst): # <<<<<<<<<<<<<<
+ * cdef int dim
+ * cdef (Py_ssize_t*) shape, strides, suboffsets
+ */
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+}
+
+/* "View.MemoryView":1082
+ *
+ * @cname('__pyx_memoryview_copy_object')
+ * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<<
+ * "Create a new memoryview object"
+ * cdef __Pyx_memviewslice memviewslice
+ */
+
+static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *__pyx_v_memview) {
+ __Pyx_memviewslice __pyx_v_memviewslice;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("memoryview_copy", 0);
+
+ /* "View.MemoryView":1085
+ * "Create a new memoryview object"
+ * cdef __Pyx_memviewslice memviewslice
+ * slice_copy(memview, &memviewslice) # <<<<<<<<<<<<<<
+ * return memoryview_copy_from_slice(memview, &memviewslice)
+ *
+ */
+ __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_memviewslice));
+
+ /* "View.MemoryView":1086
+ * cdef __Pyx_memviewslice memviewslice
+ * slice_copy(memview, &memviewslice)
+ * return memoryview_copy_from_slice(memview, &memviewslice) # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_memoryview_copy_object_from_slice')
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __pyx_memoryview_copy_object_from_slice(__pyx_v_memview, (&__pyx_v_memviewslice)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1086, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":1082
+ *
+ * @cname('__pyx_memoryview_copy_object')
+ * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<<
+ * "Create a new memoryview object"
+ * cdef __Pyx_memviewslice memviewslice
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("View.MemoryView.memoryview_copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1089
+ *
+ * @cname('__pyx_memoryview_copy_object_from_slice')
+ * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<<
+ * """
+ * Create a new memoryview object from a given memoryview object and slice.
+ */
+
+static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_memviewslice) {
+ PyObject *(*__pyx_v_to_object_func)(char *);
+ int (*__pyx_v_to_dtype_func)(char *, PyObject *);
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ int __pyx_t_2;
+ PyObject *(*__pyx_t_3)(char *);
+ int (*__pyx_t_4)(char *, PyObject *);
+ PyObject *__pyx_t_5 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("memoryview_copy_from_slice", 0);
+
+ /* "View.MemoryView":1096
+ * cdef int (*to_dtype_func)(char *, object) except 0
+ *
+ * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<<
+ * to_object_func = (<_memoryviewslice> memview).to_object_func
+ * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func
+ */
+ __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type);
+ __pyx_t_2 = (__pyx_t_1 != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1097
+ *
+ * if isinstance(memview, _memoryviewslice):
+ * to_object_func = (<_memoryviewslice> memview).to_object_func # <<<<<<<<<<<<<<
+ * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func
+ * else:
+ */
+ __pyx_t_3 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_object_func;
+ __pyx_v_to_object_func = __pyx_t_3;
+
+ /* "View.MemoryView":1098
+ * if isinstance(memview, _memoryviewslice):
+ * to_object_func = (<_memoryviewslice> memview).to_object_func
+ * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func # <<<<<<<<<<<<<<
+ * else:
+ * to_object_func = NULL
+ */
+ __pyx_t_4 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_dtype_func;
+ __pyx_v_to_dtype_func = __pyx_t_4;
+
+ /* "View.MemoryView":1096
+ * cdef int (*to_dtype_func)(char *, object) except 0
+ *
+ * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<<
+ * to_object_func = (<_memoryviewslice> memview).to_object_func
+ * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":1100
+ * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func
+ * else:
+ * to_object_func = NULL # <<<<<<<<<<<<<<
+ * to_dtype_func = NULL
+ *
+ */
+ /*else*/ {
+ __pyx_v_to_object_func = NULL;
+
+ /* "View.MemoryView":1101
+ * else:
+ * to_object_func = NULL
+ * to_dtype_func = NULL # <<<<<<<<<<<<<<
+ *
+ * return memoryview_fromslice(memviewslice[0], memview.view.ndim,
+ */
+ __pyx_v_to_dtype_func = NULL;
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":1103
+ * to_dtype_func = NULL
+ *
+ * return memoryview_fromslice(memviewslice[0], memview.view.ndim, # <<<<<<<<<<<<<<
+ * to_object_func, to_dtype_func,
+ * memview.dtype_is_object)
+ */
+ __Pyx_XDECREF(__pyx_r);
+
+ /* "View.MemoryView":1105
+ * return memoryview_fromslice(memviewslice[0], memview.view.ndim,
+ * to_object_func, to_dtype_func,
+ * memview.dtype_is_object) # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_t_5 = __pyx_memoryview_fromslice((__pyx_v_memviewslice[0]), __pyx_v_memview->view.ndim, __pyx_v_to_object_func, __pyx_v_to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 1103, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __pyx_r = __pyx_t_5;
+ __pyx_t_5 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":1089
+ *
+ * @cname('__pyx_memoryview_copy_object_from_slice')
+ * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<<
+ * """
+ * Create a new memoryview object from a given memoryview object and slice.
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_5);
+ __Pyx_AddTraceback("View.MemoryView.memoryview_copy_from_slice", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1111
+ *
+ *
+ * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: # <<<<<<<<<<<<<<
+ * if arg < 0:
+ * return -arg
+ */
+
+static Py_ssize_t abs_py_ssize_t(Py_ssize_t __pyx_v_arg) {
+ Py_ssize_t __pyx_r;
+ int __pyx_t_1;
+
+ /* "View.MemoryView":1112
+ *
+ * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil:
+ * if arg < 0: # <<<<<<<<<<<<<<
+ * return -arg
+ * else:
+ */
+ __pyx_t_1 = ((__pyx_v_arg < 0) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":1113
+ * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil:
+ * if arg < 0:
+ * return -arg # <<<<<<<<<<<<<<
+ * else:
+ * return arg
+ */
+ __pyx_r = (-__pyx_v_arg);
+ goto __pyx_L0;
+
+ /* "View.MemoryView":1112
+ *
+ * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil:
+ * if arg < 0: # <<<<<<<<<<<<<<
+ * return -arg
+ * else:
+ */
+ }
+
+ /* "View.MemoryView":1115
+ * return -arg
+ * else:
+ * return arg # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_get_best_slice_order')
+ */
+ /*else*/ {
+ __pyx_r = __pyx_v_arg;
+ goto __pyx_L0;
+ }
+
+ /* "View.MemoryView":1111
+ *
+ *
+ * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) nogil: # <<<<<<<<<<<<<<
+ * if arg < 0:
+ * return -arg
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1118
+ *
+ * @cname('__pyx_get_best_slice_order')
+ * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) nogil: # <<<<<<<<<<<<<<
+ * """
+ * Figure out the best memory access order for a given slice.
+ */
+
+static char __pyx_get_best_slice_order(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim) {
+ int __pyx_v_i;
+ Py_ssize_t __pyx_v_c_stride;
+ Py_ssize_t __pyx_v_f_stride;
+ char __pyx_r;
+ int __pyx_t_1;
+ int __pyx_t_2;
+ int __pyx_t_3;
+ int __pyx_t_4;
+
+ /* "View.MemoryView":1123
+ * """
+ * cdef int i
+ * cdef Py_ssize_t c_stride = 0 # <<<<<<<<<<<<<<
+ * cdef Py_ssize_t f_stride = 0
+ *
+ */
+ __pyx_v_c_stride = 0;
+
+ /* "View.MemoryView":1124
+ * cdef int i
+ * cdef Py_ssize_t c_stride = 0
+ * cdef Py_ssize_t f_stride = 0 # <<<<<<<<<<<<<<
+ *
+ * for i in range(ndim - 1, -1, -1):
+ */
+ __pyx_v_f_stride = 0;
+
+ /* "View.MemoryView":1126
+ * cdef Py_ssize_t f_stride = 0
+ *
+ * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<<
+ * if mslice.shape[i] > 1:
+ * c_stride = mslice.strides[i]
+ */
+ for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) {
+ __pyx_v_i = __pyx_t_1;
+
+ /* "View.MemoryView":1127
+ *
+ * for i in range(ndim - 1, -1, -1):
+ * if mslice.shape[i] > 1: # <<<<<<<<<<<<<<
+ * c_stride = mslice.strides[i]
+ * break
+ */
+ __pyx_t_2 = (((__pyx_v_mslice->shape[__pyx_v_i]) > 1) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1128
+ * for i in range(ndim - 1, -1, -1):
+ * if mslice.shape[i] > 1:
+ * c_stride = mslice.strides[i] # <<<<<<<<<<<<<<
+ * break
+ *
+ */
+ __pyx_v_c_stride = (__pyx_v_mslice->strides[__pyx_v_i]);
+
+ /* "View.MemoryView":1129
+ * if mslice.shape[i] > 1:
+ * c_stride = mslice.strides[i]
+ * break # <<<<<<<<<<<<<<
+ *
+ * for i in range(ndim):
+ */
+ goto __pyx_L4_break;
+
+ /* "View.MemoryView":1127
+ *
+ * for i in range(ndim - 1, -1, -1):
+ * if mslice.shape[i] > 1: # <<<<<<<<<<<<<<
+ * c_stride = mslice.strides[i]
+ * break
+ */
+ }
+ }
+ __pyx_L4_break:;
+
+ /* "View.MemoryView":1131
+ * break
+ *
+ * for i in range(ndim): # <<<<<<<<<<<<<<
+ * if mslice.shape[i] > 1:
+ * f_stride = mslice.strides[i]
+ */
+ __pyx_t_1 = __pyx_v_ndim;
+ __pyx_t_3 = __pyx_t_1;
+ for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+ __pyx_v_i = __pyx_t_4;
+
+ /* "View.MemoryView":1132
+ *
+ * for i in range(ndim):
+ * if mslice.shape[i] > 1: # <<<<<<<<<<<<<<
+ * f_stride = mslice.strides[i]
+ * break
+ */
+ __pyx_t_2 = (((__pyx_v_mslice->shape[__pyx_v_i]) > 1) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1133
+ * for i in range(ndim):
+ * if mslice.shape[i] > 1:
+ * f_stride = mslice.strides[i] # <<<<<<<<<<<<<<
+ * break
+ *
+ */
+ __pyx_v_f_stride = (__pyx_v_mslice->strides[__pyx_v_i]);
+
+ /* "View.MemoryView":1134
+ * if mslice.shape[i] > 1:
+ * f_stride = mslice.strides[i]
+ * break # <<<<<<<<<<<<<<
+ *
+ * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride):
+ */
+ goto __pyx_L7_break;
+
+ /* "View.MemoryView":1132
+ *
+ * for i in range(ndim):
+ * if mslice.shape[i] > 1: # <<<<<<<<<<<<<<
+ * f_stride = mslice.strides[i]
+ * break
+ */
+ }
+ }
+ __pyx_L7_break:;
+
+ /* "View.MemoryView":1136
+ * break
+ *
+ * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<<
+ * return 'C'
+ * else:
+ */
+ __pyx_t_2 = ((abs_py_ssize_t(__pyx_v_c_stride) <= abs_py_ssize_t(__pyx_v_f_stride)) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1137
+ *
+ * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride):
+ * return 'C' # <<<<<<<<<<<<<<
+ * else:
+ * return 'F'
+ */
+ __pyx_r = 'C';
+ goto __pyx_L0;
+
+ /* "View.MemoryView":1136
+ * break
+ *
+ * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<<
+ * return 'C'
+ * else:
+ */
+ }
+
+ /* "View.MemoryView":1139
+ * return 'C'
+ * else:
+ * return 'F' # <<<<<<<<<<<<<<
+ *
+ * @cython.cdivision(True)
+ */
+ /*else*/ {
+ __pyx_r = 'F';
+ goto __pyx_L0;
+ }
+
+ /* "View.MemoryView":1118
+ *
+ * @cname('__pyx_get_best_slice_order')
+ * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) nogil: # <<<<<<<<<<<<<<
+ * """
+ * Figure out the best memory access order for a given slice.
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1142
+ *
+ * @cython.cdivision(True)
+ * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<<
+ * char *dst_data, Py_ssize_t *dst_strides,
+ * Py_ssize_t *src_shape, Py_ssize_t *dst_shape,
+ */
+
+static void _copy_strided_to_strided(char *__pyx_v_src_data, Py_ssize_t *__pyx_v_src_strides, char *__pyx_v_dst_data, Py_ssize_t *__pyx_v_dst_strides, Py_ssize_t *__pyx_v_src_shape, Py_ssize_t *__pyx_v_dst_shape, int __pyx_v_ndim, size_t __pyx_v_itemsize) {
+ CYTHON_UNUSED Py_ssize_t __pyx_v_i;
+ CYTHON_UNUSED Py_ssize_t __pyx_v_src_extent;
+ Py_ssize_t __pyx_v_dst_extent;
+ Py_ssize_t __pyx_v_src_stride;
+ Py_ssize_t __pyx_v_dst_stride;
+ int __pyx_t_1;
+ int __pyx_t_2;
+ int __pyx_t_3;
+ Py_ssize_t __pyx_t_4;
+ Py_ssize_t __pyx_t_5;
+ Py_ssize_t __pyx_t_6;
+
+ /* "View.MemoryView":1149
+ *
+ * cdef Py_ssize_t i
+ * cdef Py_ssize_t src_extent = src_shape[0] # <<<<<<<<<<<<<<
+ * cdef Py_ssize_t dst_extent = dst_shape[0]
+ * cdef Py_ssize_t src_stride = src_strides[0]
+ */
+ __pyx_v_src_extent = (__pyx_v_src_shape[0]);
+
+ /* "View.MemoryView":1150
+ * cdef Py_ssize_t i
+ * cdef Py_ssize_t src_extent = src_shape[0]
+ * cdef Py_ssize_t dst_extent = dst_shape[0] # <<<<<<<<<<<<<<
+ * cdef Py_ssize_t src_stride = src_strides[0]
+ * cdef Py_ssize_t dst_stride = dst_strides[0]
+ */
+ __pyx_v_dst_extent = (__pyx_v_dst_shape[0]);
+
+ /* "View.MemoryView":1151
+ * cdef Py_ssize_t src_extent = src_shape[0]
+ * cdef Py_ssize_t dst_extent = dst_shape[0]
+ * cdef Py_ssize_t src_stride = src_strides[0] # <<<<<<<<<<<<<<
+ * cdef Py_ssize_t dst_stride = dst_strides[0]
+ *
+ */
+ __pyx_v_src_stride = (__pyx_v_src_strides[0]);
+
+ /* "View.MemoryView":1152
+ * cdef Py_ssize_t dst_extent = dst_shape[0]
+ * cdef Py_ssize_t src_stride = src_strides[0]
+ * cdef Py_ssize_t dst_stride = dst_strides[0] # <<<<<<<<<<<<<<
+ *
+ * if ndim == 1:
+ */
+ __pyx_v_dst_stride = (__pyx_v_dst_strides[0]);
+
+ /* "View.MemoryView":1154
+ * cdef Py_ssize_t dst_stride = dst_strides[0]
+ *
+ * if ndim == 1: # <<<<<<<<<<<<<<
+ * if (src_stride > 0 and dst_stride > 0 and
+ * src_stride == itemsize == dst_stride):
+ */
+ __pyx_t_1 = ((__pyx_v_ndim == 1) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":1155
+ *
+ * if ndim == 1:
+ * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<<
+ * src_stride == itemsize == dst_stride):
+ * memcpy(dst_data, src_data, itemsize * dst_extent)
+ */
+ __pyx_t_2 = ((__pyx_v_src_stride > 0) != 0);
+ if (__pyx_t_2) {
+ } else {
+ __pyx_t_1 = __pyx_t_2;
+ goto __pyx_L5_bool_binop_done;
+ }
+ __pyx_t_2 = ((__pyx_v_dst_stride > 0) != 0);
+ if (__pyx_t_2) {
+ } else {
+ __pyx_t_1 = __pyx_t_2;
+ goto __pyx_L5_bool_binop_done;
+ }
+
+ /* "View.MemoryView":1156
+ * if ndim == 1:
+ * if (src_stride > 0 and dst_stride > 0 and
+ * src_stride == itemsize == dst_stride): # <<<<<<<<<<<<<<
+ * memcpy(dst_data, src_data, itemsize * dst_extent)
+ * else:
+ */
+ __pyx_t_2 = (((size_t)__pyx_v_src_stride) == __pyx_v_itemsize);
+ if (__pyx_t_2) {
+ __pyx_t_2 = (__pyx_v_itemsize == ((size_t)__pyx_v_dst_stride));
+ }
+ __pyx_t_3 = (__pyx_t_2 != 0);
+ __pyx_t_1 = __pyx_t_3;
+ __pyx_L5_bool_binop_done:;
+
+ /* "View.MemoryView":1155
+ *
+ * if ndim == 1:
+ * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<<
+ * src_stride == itemsize == dst_stride):
+ * memcpy(dst_data, src_data, itemsize * dst_extent)
+ */
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":1157
+ * if (src_stride > 0 and dst_stride > 0 and
+ * src_stride == itemsize == dst_stride):
+ * memcpy(dst_data, src_data, itemsize * dst_extent) # <<<<<<<<<<<<<<
+ * else:
+ * for i in range(dst_extent):
+ */
+ (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, (__pyx_v_itemsize * __pyx_v_dst_extent)));
+
+ /* "View.MemoryView":1155
+ *
+ * if ndim == 1:
+ * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<<
+ * src_stride == itemsize == dst_stride):
+ * memcpy(dst_data, src_data, itemsize * dst_extent)
+ */
+ goto __pyx_L4;
+ }
+
+ /* "View.MemoryView":1159
+ * memcpy(dst_data, src_data, itemsize * dst_extent)
+ * else:
+ * for i in range(dst_extent): # <<<<<<<<<<<<<<
+ * memcpy(dst_data, src_data, itemsize)
+ * src_data += src_stride
+ */
+ /*else*/ {
+ __pyx_t_4 = __pyx_v_dst_extent;
+ __pyx_t_5 = __pyx_t_4;
+ for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
+ __pyx_v_i = __pyx_t_6;
+
+ /* "View.MemoryView":1160
+ * else:
+ * for i in range(dst_extent):
+ * memcpy(dst_data, src_data, itemsize) # <<<<<<<<<<<<<<
+ * src_data += src_stride
+ * dst_data += dst_stride
+ */
+ (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, __pyx_v_itemsize));
+
+ /* "View.MemoryView":1161
+ * for i in range(dst_extent):
+ * memcpy(dst_data, src_data, itemsize)
+ * src_data += src_stride # <<<<<<<<<<<<<<
+ * dst_data += dst_stride
+ * else:
+ */
+ __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride);
+
+ /* "View.MemoryView":1162
+ * memcpy(dst_data, src_data, itemsize)
+ * src_data += src_stride
+ * dst_data += dst_stride # <<<<<<<<<<<<<<
+ * else:
+ * for i in range(dst_extent):
+ */
+ __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride);
+ }
+ }
+ __pyx_L4:;
+
+ /* "View.MemoryView":1154
+ * cdef Py_ssize_t dst_stride = dst_strides[0]
+ *
+ * if ndim == 1: # <<<<<<<<<<<<<<
+ * if (src_stride > 0 and dst_stride > 0 and
+ * src_stride == itemsize == dst_stride):
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":1164
+ * dst_data += dst_stride
+ * else:
+ * for i in range(dst_extent): # <<<<<<<<<<<<<<
+ * _copy_strided_to_strided(src_data, src_strides + 1,
+ * dst_data, dst_strides + 1,
+ */
+ /*else*/ {
+ __pyx_t_4 = __pyx_v_dst_extent;
+ __pyx_t_5 = __pyx_t_4;
+ for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
+ __pyx_v_i = __pyx_t_6;
+
+ /* "View.MemoryView":1165
+ * else:
+ * for i in range(dst_extent):
+ * _copy_strided_to_strided(src_data, src_strides + 1, # <<<<<<<<<<<<<<
+ * dst_data, dst_strides + 1,
+ * src_shape + 1, dst_shape + 1,
+ */
+ _copy_strided_to_strided(__pyx_v_src_data, (__pyx_v_src_strides + 1), __pyx_v_dst_data, (__pyx_v_dst_strides + 1), (__pyx_v_src_shape + 1), (__pyx_v_dst_shape + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize);
+
+ /* "View.MemoryView":1169
+ * src_shape + 1, dst_shape + 1,
+ * ndim - 1, itemsize)
+ * src_data += src_stride # <<<<<<<<<<<<<<
+ * dst_data += dst_stride
+ *
+ */
+ __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride);
+
+ /* "View.MemoryView":1170
+ * ndim - 1, itemsize)
+ * src_data += src_stride
+ * dst_data += dst_stride # <<<<<<<<<<<<<<
+ *
+ * cdef void copy_strided_to_strided(__Pyx_memviewslice *src,
+ */
+ __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride);
+ }
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":1142
+ *
+ * @cython.cdivision(True)
+ * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<<
+ * char *dst_data, Py_ssize_t *dst_strides,
+ * Py_ssize_t *src_shape, Py_ssize_t *dst_shape,
+ */
+
+ /* function exit code */
+}
+
+/* "View.MemoryView":1172
+ * dst_data += dst_stride
+ *
+ * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<<
+ * __Pyx_memviewslice *dst,
+ * int ndim, size_t itemsize) nogil:
+ */
+
+static void copy_strided_to_strided(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize) {
+
+ /* "View.MemoryView":1175
+ * __Pyx_memviewslice *dst,
+ * int ndim, size_t itemsize) nogil:
+ * _copy_strided_to_strided(src.data, src.strides, dst.data, dst.strides, # <<<<<<<<<<<<<<
+ * src.shape, dst.shape, ndim, itemsize)
+ *
+ */
+ _copy_strided_to_strided(__pyx_v_src->data, __pyx_v_src->strides, __pyx_v_dst->data, __pyx_v_dst->strides, __pyx_v_src->shape, __pyx_v_dst->shape, __pyx_v_ndim, __pyx_v_itemsize);
+
+ /* "View.MemoryView":1172
+ * dst_data += dst_stride
+ *
+ * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<<
+ * __Pyx_memviewslice *dst,
+ * int ndim, size_t itemsize) nogil:
+ */
+
+ /* function exit code */
+}
+
+/* "View.MemoryView":1179
+ *
+ * @cname('__pyx_memoryview_slice_get_size')
+ * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: # <<<<<<<<<<<<<<
+ * "Return the size of the memory occupied by the slice in number of bytes"
+ * cdef Py_ssize_t shape, size = src.memview.view.itemsize
+ */
+
+static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *__pyx_v_src, int __pyx_v_ndim) {
+ Py_ssize_t __pyx_v_shape;
+ Py_ssize_t __pyx_v_size;
+ Py_ssize_t __pyx_r;
+ Py_ssize_t __pyx_t_1;
+ Py_ssize_t *__pyx_t_2;
+ Py_ssize_t *__pyx_t_3;
+ Py_ssize_t *__pyx_t_4;
+
+ /* "View.MemoryView":1181
+ * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil:
+ * "Return the size of the memory occupied by the slice in number of bytes"
+ * cdef Py_ssize_t shape, size = src.memview.view.itemsize # <<<<<<<<<<<<<<
+ *
+ * for shape in src.shape[:ndim]:
+ */
+ __pyx_t_1 = __pyx_v_src->memview->view.itemsize;
+ __pyx_v_size = __pyx_t_1;
+
+ /* "View.MemoryView":1183
+ * cdef Py_ssize_t shape, size = src.memview.view.itemsize
+ *
+ * for shape in src.shape[:ndim]: # <<<<<<<<<<<<<<
+ * size *= shape
+ *
+ */
+ __pyx_t_3 = (__pyx_v_src->shape + __pyx_v_ndim);
+ for (__pyx_t_4 = __pyx_v_src->shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) {
+ __pyx_t_2 = __pyx_t_4;
+ __pyx_v_shape = (__pyx_t_2[0]);
+
+ /* "View.MemoryView":1184
+ *
+ * for shape in src.shape[:ndim]:
+ * size *= shape # <<<<<<<<<<<<<<
+ *
+ * return size
+ */
+ __pyx_v_size = (__pyx_v_size * __pyx_v_shape);
+ }
+
+ /* "View.MemoryView":1186
+ * size *= shape
+ *
+ * return size # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_fill_contig_strides_array')
+ */
+ __pyx_r = __pyx_v_size;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":1179
+ *
+ * @cname('__pyx_memoryview_slice_get_size')
+ * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) nogil: # <<<<<<<<<<<<<<
+ * "Return the size of the memory occupied by the slice in number of bytes"
+ * cdef Py_ssize_t shape, size = src.memview.view.itemsize
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1189
+ *
+ * @cname('__pyx_fill_contig_strides_array')
+ * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<<
+ * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride,
+ * int ndim, char order) nogil:
+ */
+
+static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, Py_ssize_t __pyx_v_stride, int __pyx_v_ndim, char __pyx_v_order) {
+ int __pyx_v_idx;
+ Py_ssize_t __pyx_r;
+ int __pyx_t_1;
+ int __pyx_t_2;
+ int __pyx_t_3;
+ int __pyx_t_4;
+
+ /* "View.MemoryView":1198
+ * cdef int idx
+ *
+ * if order == 'F': # <<<<<<<<<<<<<<
+ * for idx in range(ndim):
+ * strides[idx] = stride
+ */
+ __pyx_t_1 = ((__pyx_v_order == 'F') != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":1199
+ *
+ * if order == 'F':
+ * for idx in range(ndim): # <<<<<<<<<<<<<<
+ * strides[idx] = stride
+ * stride *= shape[idx]
+ */
+ __pyx_t_2 = __pyx_v_ndim;
+ __pyx_t_3 = __pyx_t_2;
+ for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+ __pyx_v_idx = __pyx_t_4;
+
+ /* "View.MemoryView":1200
+ * if order == 'F':
+ * for idx in range(ndim):
+ * strides[idx] = stride # <<<<<<<<<<<<<<
+ * stride *= shape[idx]
+ * else:
+ */
+ (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride;
+
+ /* "View.MemoryView":1201
+ * for idx in range(ndim):
+ * strides[idx] = stride
+ * stride *= shape[idx] # <<<<<<<<<<<<<<
+ * else:
+ * for idx in range(ndim - 1, -1, -1):
+ */
+ __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx]));
+ }
+
+ /* "View.MemoryView":1198
+ * cdef int idx
+ *
+ * if order == 'F': # <<<<<<<<<<<<<<
+ * for idx in range(ndim):
+ * strides[idx] = stride
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":1203
+ * stride *= shape[idx]
+ * else:
+ * for idx in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<<
+ * strides[idx] = stride
+ * stride *= shape[idx]
+ */
+ /*else*/ {
+ for (__pyx_t_2 = (__pyx_v_ndim - 1); __pyx_t_2 > -1; __pyx_t_2-=1) {
+ __pyx_v_idx = __pyx_t_2;
+
+ /* "View.MemoryView":1204
+ * else:
+ * for idx in range(ndim - 1, -1, -1):
+ * strides[idx] = stride # <<<<<<<<<<<<<<
+ * stride *= shape[idx]
+ *
+ */
+ (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride;
+
+ /* "View.MemoryView":1205
+ * for idx in range(ndim - 1, -1, -1):
+ * strides[idx] = stride
+ * stride *= shape[idx] # <<<<<<<<<<<<<<
+ *
+ * return stride
+ */
+ __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx]));
+ }
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":1207
+ * stride *= shape[idx]
+ *
+ * return stride # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_memoryview_copy_data_to_temp')
+ */
+ __pyx_r = __pyx_v_stride;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":1189
+ *
+ * @cname('__pyx_fill_contig_strides_array')
+ * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<<
+ * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride,
+ * int ndim, char order) nogil:
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1210
+ *
+ * @cname('__pyx_memoryview_copy_data_to_temp')
+ * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<<
+ * __Pyx_memviewslice *tmpslice,
+ * char order,
+ */
+
+static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_tmpslice, char __pyx_v_order, int __pyx_v_ndim) {
+ int __pyx_v_i;
+ void *__pyx_v_result;
+ size_t __pyx_v_itemsize;
+ size_t __pyx_v_size;
+ void *__pyx_r;
+ Py_ssize_t __pyx_t_1;
+ int __pyx_t_2;
+ int __pyx_t_3;
+ struct __pyx_memoryview_obj *__pyx_t_4;
+ int __pyx_t_5;
+ int __pyx_t_6;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+
+ /* "View.MemoryView":1221
+ * cdef void *result
+ *
+ * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<<
+ * cdef size_t size = slice_get_size(src, ndim)
+ *
+ */
+ __pyx_t_1 = __pyx_v_src->memview->view.itemsize;
+ __pyx_v_itemsize = __pyx_t_1;
+
+ /* "View.MemoryView":1222
+ *
+ * cdef size_t itemsize = src.memview.view.itemsize
+ * cdef size_t size = slice_get_size(src, ndim) # <<<<<<<<<<<<<<
+ *
+ * result = malloc(size)
+ */
+ __pyx_v_size = __pyx_memoryview_slice_get_size(__pyx_v_src, __pyx_v_ndim);
+
+ /* "View.MemoryView":1224
+ * cdef size_t size = slice_get_size(src, ndim)
+ *
+ * result = malloc(size) # <<<<<<<<<<<<<<
+ * if not result:
+ * _err(MemoryError, NULL)
+ */
+ __pyx_v_result = malloc(__pyx_v_size);
+
+ /* "View.MemoryView":1225
+ *
+ * result = malloc(size)
+ * if not result: # <<<<<<<<<<<<<<
+ * _err(MemoryError, NULL)
+ *
+ */
+ __pyx_t_2 = ((!(__pyx_v_result != 0)) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1226
+ * result = malloc(size)
+ * if not result:
+ * _err(MemoryError, NULL) # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_t_3 = __pyx_memoryview_err(__pyx_builtin_MemoryError, NULL); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1226, __pyx_L1_error)
+
+ /* "View.MemoryView":1225
+ *
+ * result = malloc(size)
+ * if not result: # <<<<<<<<<<<<<<
+ * _err(MemoryError, NULL)
+ *
+ */
+ }
+
+ /* "View.MemoryView":1229
+ *
+ *
+ * tmpslice.data = result # <<<<<<<<<<<<<<
+ * tmpslice.memview = src.memview
+ * for i in range(ndim):
+ */
+ __pyx_v_tmpslice->data = ((char *)__pyx_v_result);
+
+ /* "View.MemoryView":1230
+ *
+ * tmpslice.data = result
+ * tmpslice.memview = src.memview # <<<<<<<<<<<<<<
+ * for i in range(ndim):
+ * tmpslice.shape[i] = src.shape[i]
+ */
+ __pyx_t_4 = __pyx_v_src->memview;
+ __pyx_v_tmpslice->memview = __pyx_t_4;
+
+ /* "View.MemoryView":1231
+ * tmpslice.data = result
+ * tmpslice.memview = src.memview
+ * for i in range(ndim): # <<<<<<<<<<<<<<
+ * tmpslice.shape[i] = src.shape[i]
+ * tmpslice.suboffsets[i] = -1
+ */
+ __pyx_t_3 = __pyx_v_ndim;
+ __pyx_t_5 = __pyx_t_3;
+ for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
+ __pyx_v_i = __pyx_t_6;
+
+ /* "View.MemoryView":1232
+ * tmpslice.memview = src.memview
+ * for i in range(ndim):
+ * tmpslice.shape[i] = src.shape[i] # <<<<<<<<<<<<<<
+ * tmpslice.suboffsets[i] = -1
+ *
+ */
+ (__pyx_v_tmpslice->shape[__pyx_v_i]) = (__pyx_v_src->shape[__pyx_v_i]);
+
+ /* "View.MemoryView":1233
+ * for i in range(ndim):
+ * tmpslice.shape[i] = src.shape[i]
+ * tmpslice.suboffsets[i] = -1 # <<<<<<<<<<<<<<
+ *
+ * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize,
+ */
+ (__pyx_v_tmpslice->suboffsets[__pyx_v_i]) = -1L;
+ }
+
+ /* "View.MemoryView":1235
+ * tmpslice.suboffsets[i] = -1
+ *
+ * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, # <<<<<<<<<<<<<<
+ * ndim, order)
+ *
+ */
+ (void)(__pyx_fill_contig_strides_array((&(__pyx_v_tmpslice->shape[0])), (&(__pyx_v_tmpslice->strides[0])), __pyx_v_itemsize, __pyx_v_ndim, __pyx_v_order));
+
+ /* "View.MemoryView":1239
+ *
+ *
+ * for i in range(ndim): # <<<<<<<<<<<<<<
+ * if tmpslice.shape[i] == 1:
+ * tmpslice.strides[i] = 0
+ */
+ __pyx_t_3 = __pyx_v_ndim;
+ __pyx_t_5 = __pyx_t_3;
+ for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
+ __pyx_v_i = __pyx_t_6;
+
+ /* "View.MemoryView":1240
+ *
+ * for i in range(ndim):
+ * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<<
+ * tmpslice.strides[i] = 0
+ *
+ */
+ __pyx_t_2 = (((__pyx_v_tmpslice->shape[__pyx_v_i]) == 1) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1241
+ * for i in range(ndim):
+ * if tmpslice.shape[i] == 1:
+ * tmpslice.strides[i] = 0 # <<<<<<<<<<<<<<
+ *
+ * if slice_is_contig(src[0], order, ndim):
+ */
+ (__pyx_v_tmpslice->strides[__pyx_v_i]) = 0;
+
+ /* "View.MemoryView":1240
+ *
+ * for i in range(ndim):
+ * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<<
+ * tmpslice.strides[i] = 0
+ *
+ */
+ }
+ }
+
+ /* "View.MemoryView":1243
+ * tmpslice.strides[i] = 0
+ *
+ * if slice_is_contig(src[0], order, ndim): # <<<<<<<<<<<<<<
+ * memcpy(result, src.data, size)
+ * else:
+ */
+ __pyx_t_2 = (__pyx_memviewslice_is_contig((__pyx_v_src[0]), __pyx_v_order, __pyx_v_ndim) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1244
+ *
+ * if slice_is_contig(src[0], order, ndim):
+ * memcpy(result, src.data, size) # <<<<<<<<<<<<<<
+ * else:
+ * copy_strided_to_strided(src, tmpslice, ndim, itemsize)
+ */
+ (void)(memcpy(__pyx_v_result, __pyx_v_src->data, __pyx_v_size));
+
+ /* "View.MemoryView":1243
+ * tmpslice.strides[i] = 0
+ *
+ * if slice_is_contig(src[0], order, ndim): # <<<<<<<<<<<<<<
+ * memcpy(result, src.data, size)
+ * else:
+ */
+ goto __pyx_L9;
+ }
+
+ /* "View.MemoryView":1246
+ * memcpy(result, src.data, size)
+ * else:
+ * copy_strided_to_strided(src, tmpslice, ndim, itemsize) # <<<<<<<<<<<<<<
+ *
+ * return result
+ */
+ /*else*/ {
+ copy_strided_to_strided(__pyx_v_src, __pyx_v_tmpslice, __pyx_v_ndim, __pyx_v_itemsize);
+ }
+ __pyx_L9:;
+
+ /* "View.MemoryView":1248
+ * copy_strided_to_strided(src, tmpslice, ndim, itemsize)
+ *
+ * return result # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_r = __pyx_v_result;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":1210
+ *
+ * @cname('__pyx_memoryview_copy_data_to_temp')
+ * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<<
+ * __Pyx_memviewslice *tmpslice,
+ * char order,
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ {
+ #ifdef WITH_THREAD
+ PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+ #endif
+ __Pyx_AddTraceback("View.MemoryView.copy_data_to_temp", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ #ifdef WITH_THREAD
+ __Pyx_PyGILState_Release(__pyx_gilstate_save);
+ #endif
+ }
+ __pyx_r = NULL;
+ __pyx_L0:;
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1253
+ *
+ * @cname('__pyx_memoryview_err_extents')
+ * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<<
+ * Py_ssize_t extent2) except -1 with gil:
+ * raise ValueError("got differing extents in dimension %d (got %d and %d)" %
+ */
+
+static int __pyx_memoryview_err_extents(int __pyx_v_i, Py_ssize_t __pyx_v_extent1, Py_ssize_t __pyx_v_extent2) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ PyObject *__pyx_t_4 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ #ifdef WITH_THREAD
+ PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+ #endif
+ __Pyx_RefNannySetupContext("_err_extents", 0);
+
+ /* "View.MemoryView":1256
+ * Py_ssize_t extent2) except -1 with gil:
+ * raise ValueError("got differing extents in dimension %d (got %d and %d)" %
+ * (i, extent1, extent2)) # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_memoryview_err_dim')
+ */
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_i); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1256, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_extent1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1256, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_extent2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1256, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1256, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __Pyx_GIVEREF(__pyx_t_1);
+ PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
+ __Pyx_GIVEREF(__pyx_t_2);
+ PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
+ __Pyx_GIVEREF(__pyx_t_3);
+ PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3);
+ __pyx_t_1 = 0;
+ __pyx_t_2 = 0;
+ __pyx_t_3 = 0;
+
+ /* "View.MemoryView":1255
+ * cdef int _err_extents(int i, Py_ssize_t extent1,
+ * Py_ssize_t extent2) except -1 with gil:
+ * raise ValueError("got differing extents in dimension %d (got %d and %d)" % # <<<<<<<<<<<<<<
+ * (i, extent1, extent2))
+ *
+ */
+ __pyx_t_3 = __Pyx_PyString_Format(__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1255, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+ __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1255, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __Pyx_Raise(__pyx_t_4, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+ __PYX_ERR(1, 1255, __pyx_L1_error)
+
+ /* "View.MemoryView":1253
+ *
+ * @cname('__pyx_memoryview_err_extents')
+ * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<<
+ * Py_ssize_t extent2) except -1 with gil:
+ * raise ValueError("got differing extents in dimension %d (got %d and %d)" %
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_XDECREF(__pyx_t_4);
+ __Pyx_AddTraceback("View.MemoryView._err_extents", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __Pyx_RefNannyFinishContext();
+ #ifdef WITH_THREAD
+ __Pyx_PyGILState_Release(__pyx_gilstate_save);
+ #endif
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1259
+ *
+ * @cname('__pyx_memoryview_err_dim')
+ * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: # <<<<<<<<<<<<<<
+ * raise error(msg.decode('ascii') % dim)
+ *
+ */
+
+static int __pyx_memoryview_err_dim(PyObject *__pyx_v_error, char *__pyx_v_msg, int __pyx_v_dim) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ PyObject *__pyx_t_4 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ #ifdef WITH_THREAD
+ PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+ #endif
+ __Pyx_RefNannySetupContext("_err_dim", 0);
+ __Pyx_INCREF(__pyx_v_error);
+
+ /* "View.MemoryView":1260
+ * @cname('__pyx_memoryview_err_dim')
+ * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil:
+ * raise error(msg.decode('ascii') % dim) # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_memoryview_err')
+ */
+ __pyx_t_2 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1260, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_dim); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1260, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_4 = PyUnicode_Format(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1260, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __Pyx_INCREF(__pyx_v_error);
+ __pyx_t_3 = __pyx_v_error; __pyx_t_2 = NULL;
+ if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
+ __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
+ if (likely(__pyx_t_2)) {
+ PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+ __Pyx_INCREF(__pyx_t_2);
+ __Pyx_INCREF(function);
+ __Pyx_DECREF_SET(__pyx_t_3, function);
+ }
+ }
+ __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_2, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4);
+ __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+ if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1260, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __Pyx_Raise(__pyx_t_1, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __PYX_ERR(1, 1260, __pyx_L1_error)
+
+ /* "View.MemoryView":1259
+ *
+ * @cname('__pyx_memoryview_err_dim')
+ * cdef int _err_dim(object error, char *msg, int dim) except -1 with gil: # <<<<<<<<<<<<<<
+ * raise error(msg.decode('ascii') % dim)
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_XDECREF(__pyx_t_4);
+ __Pyx_AddTraceback("View.MemoryView._err_dim", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __Pyx_XDECREF(__pyx_v_error);
+ __Pyx_RefNannyFinishContext();
+ #ifdef WITH_THREAD
+ __Pyx_PyGILState_Release(__pyx_gilstate_save);
+ #endif
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1263
+ *
+ * @cname('__pyx_memoryview_err')
+ * cdef int _err(object error, char *msg) except -1 with gil: # <<<<<<<<<<<<<<
+ * if msg != NULL:
+ * raise error(msg.decode('ascii'))
+ */
+
+static int __pyx_memoryview_err(PyObject *__pyx_v_error, char *__pyx_v_msg) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ PyObject *__pyx_t_4 = NULL;
+ PyObject *__pyx_t_5 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ #ifdef WITH_THREAD
+ PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+ #endif
+ __Pyx_RefNannySetupContext("_err", 0);
+ __Pyx_INCREF(__pyx_v_error);
+
+ /* "View.MemoryView":1264
+ * @cname('__pyx_memoryview_err')
+ * cdef int _err(object error, char *msg) except -1 with gil:
+ * if msg != NULL: # <<<<<<<<<<<<<<
+ * raise error(msg.decode('ascii'))
+ * else:
+ */
+ __pyx_t_1 = ((__pyx_v_msg != NULL) != 0);
+ if (unlikely(__pyx_t_1)) {
+
+ /* "View.MemoryView":1265
+ * cdef int _err(object error, char *msg) except -1 with gil:
+ * if msg != NULL:
+ * raise error(msg.decode('ascii')) # <<<<<<<<<<<<<<
+ * else:
+ * raise error
+ */
+ __pyx_t_3 = __Pyx_decode_c_string(__pyx_v_msg, 0, strlen(__pyx_v_msg), NULL, NULL, PyUnicode_DecodeASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1265, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_INCREF(__pyx_v_error);
+ __pyx_t_4 = __pyx_v_error; __pyx_t_5 = NULL;
+ if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
+ __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
+ if (likely(__pyx_t_5)) {
+ PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
+ __Pyx_INCREF(__pyx_t_5);
+ __Pyx_INCREF(function);
+ __Pyx_DECREF_SET(__pyx_t_4, function);
+ }
+ }
+ __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3);
+ __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1265, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+ __Pyx_Raise(__pyx_t_2, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __PYX_ERR(1, 1265, __pyx_L1_error)
+
+ /* "View.MemoryView":1264
+ * @cname('__pyx_memoryview_err')
+ * cdef int _err(object error, char *msg) except -1 with gil:
+ * if msg != NULL: # <<<<<<<<<<<<<<
+ * raise error(msg.decode('ascii'))
+ * else:
+ */
+ }
+
+ /* "View.MemoryView":1267
+ * raise error(msg.decode('ascii'))
+ * else:
+ * raise error # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_memoryview_copy_contents')
+ */
+ /*else*/ {
+ __Pyx_Raise(__pyx_v_error, 0, 0, 0);
+ __PYX_ERR(1, 1267, __pyx_L1_error)
+ }
+
+ /* "View.MemoryView":1263
+ *
+ * @cname('__pyx_memoryview_err')
+ * cdef int _err(object error, char *msg) except -1 with gil: # <<<<<<<<<<<<<<
+ * if msg != NULL:
+ * raise error(msg.decode('ascii'))
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_XDECREF(__pyx_t_4);
+ __Pyx_XDECREF(__pyx_t_5);
+ __Pyx_AddTraceback("View.MemoryView._err", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __Pyx_XDECREF(__pyx_v_error);
+ __Pyx_RefNannyFinishContext();
+ #ifdef WITH_THREAD
+ __Pyx_PyGILState_Release(__pyx_gilstate_save);
+ #endif
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1270
+ *
+ * @cname('__pyx_memoryview_copy_contents')
+ * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<<
+ * __Pyx_memviewslice dst,
+ * int src_ndim, int dst_ndim,
+ */
+
+static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_memviewslice __pyx_v_dst, int __pyx_v_src_ndim, int __pyx_v_dst_ndim, int __pyx_v_dtype_is_object) {
+ void *__pyx_v_tmpdata;
+ size_t __pyx_v_itemsize;
+ int __pyx_v_i;
+ char __pyx_v_order;
+ int __pyx_v_broadcasting;
+ int __pyx_v_direct_copy;
+ __Pyx_memviewslice __pyx_v_tmp;
+ int __pyx_v_ndim;
+ int __pyx_r;
+ Py_ssize_t __pyx_t_1;
+ int __pyx_t_2;
+ int __pyx_t_3;
+ int __pyx_t_4;
+ int __pyx_t_5;
+ int __pyx_t_6;
+ void *__pyx_t_7;
+ int __pyx_t_8;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+
+ /* "View.MemoryView":1278
+ * Check for overlapping memory and verify the shapes.
+ * """
+ * cdef void *tmpdata = NULL # <<<<<<<<<<<<<<
+ * cdef size_t itemsize = src.memview.view.itemsize
+ * cdef int i
+ */
+ __pyx_v_tmpdata = NULL;
+
+ /* "View.MemoryView":1279
+ * """
+ * cdef void *tmpdata = NULL
+ * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<<
+ * cdef int i
+ * cdef char order = get_best_order(&src, src_ndim)
+ */
+ __pyx_t_1 = __pyx_v_src.memview->view.itemsize;
+ __pyx_v_itemsize = __pyx_t_1;
+
+ /* "View.MemoryView":1281
+ * cdef size_t itemsize = src.memview.view.itemsize
+ * cdef int i
+ * cdef char order = get_best_order(&src, src_ndim) # <<<<<<<<<<<<<<
+ * cdef bint broadcasting = False
+ * cdef bint direct_copy = False
+ */
+ __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_src), __pyx_v_src_ndim);
+
+ /* "View.MemoryView":1282
+ * cdef int i
+ * cdef char order = get_best_order(&src, src_ndim)
+ * cdef bint broadcasting = False # <<<<<<<<<<<<<<
+ * cdef bint direct_copy = False
+ * cdef __Pyx_memviewslice tmp
+ */
+ __pyx_v_broadcasting = 0;
+
+ /* "View.MemoryView":1283
+ * cdef char order = get_best_order(&src, src_ndim)
+ * cdef bint broadcasting = False
+ * cdef bint direct_copy = False # <<<<<<<<<<<<<<
+ * cdef __Pyx_memviewslice tmp
+ *
+ */
+ __pyx_v_direct_copy = 0;
+
+ /* "View.MemoryView":1286
+ * cdef __Pyx_memviewslice tmp
+ *
+ * if src_ndim < dst_ndim: # <<<<<<<<<<<<<<
+ * broadcast_leading(&src, src_ndim, dst_ndim)
+ * elif dst_ndim < src_ndim:
+ */
+ __pyx_t_2 = ((__pyx_v_src_ndim < __pyx_v_dst_ndim) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1287
+ *
+ * if src_ndim < dst_ndim:
+ * broadcast_leading(&src, src_ndim, dst_ndim) # <<<<<<<<<<<<<<
+ * elif dst_ndim < src_ndim:
+ * broadcast_leading(&dst, dst_ndim, src_ndim)
+ */
+ __pyx_memoryview_broadcast_leading((&__pyx_v_src), __pyx_v_src_ndim, __pyx_v_dst_ndim);
+
+ /* "View.MemoryView":1286
+ * cdef __Pyx_memviewslice tmp
+ *
+ * if src_ndim < dst_ndim: # <<<<<<<<<<<<<<
+ * broadcast_leading(&src, src_ndim, dst_ndim)
+ * elif dst_ndim < src_ndim:
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":1288
+ * if src_ndim < dst_ndim:
+ * broadcast_leading(&src, src_ndim, dst_ndim)
+ * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<<
+ * broadcast_leading(&dst, dst_ndim, src_ndim)
+ *
+ */
+ __pyx_t_2 = ((__pyx_v_dst_ndim < __pyx_v_src_ndim) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1289
+ * broadcast_leading(&src, src_ndim, dst_ndim)
+ * elif dst_ndim < src_ndim:
+ * broadcast_leading(&dst, dst_ndim, src_ndim) # <<<<<<<<<<<<<<
+ *
+ * cdef int ndim = max(src_ndim, dst_ndim)
+ */
+ __pyx_memoryview_broadcast_leading((&__pyx_v_dst), __pyx_v_dst_ndim, __pyx_v_src_ndim);
+
+ /* "View.MemoryView":1288
+ * if src_ndim < dst_ndim:
+ * broadcast_leading(&src, src_ndim, dst_ndim)
+ * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<<
+ * broadcast_leading(&dst, dst_ndim, src_ndim)
+ *
+ */
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":1291
+ * broadcast_leading(&dst, dst_ndim, src_ndim)
+ *
+ * cdef int ndim = max(src_ndim, dst_ndim) # <<<<<<<<<<<<<<
+ *
+ * for i in range(ndim):
+ */
+ __pyx_t_3 = __pyx_v_dst_ndim;
+ __pyx_t_4 = __pyx_v_src_ndim;
+ if (((__pyx_t_3 > __pyx_t_4) != 0)) {
+ __pyx_t_5 = __pyx_t_3;
+ } else {
+ __pyx_t_5 = __pyx_t_4;
+ }
+ __pyx_v_ndim = __pyx_t_5;
+
+ /* "View.MemoryView":1293
+ * cdef int ndim = max(src_ndim, dst_ndim)
+ *
+ * for i in range(ndim): # <<<<<<<<<<<<<<
+ * if src.shape[i] != dst.shape[i]:
+ * if src.shape[i] == 1:
+ */
+ __pyx_t_5 = __pyx_v_ndim;
+ __pyx_t_3 = __pyx_t_5;
+ for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+ __pyx_v_i = __pyx_t_4;
+
+ /* "View.MemoryView":1294
+ *
+ * for i in range(ndim):
+ * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<<
+ * if src.shape[i] == 1:
+ * broadcasting = True
+ */
+ __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) != (__pyx_v_dst.shape[__pyx_v_i])) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1295
+ * for i in range(ndim):
+ * if src.shape[i] != dst.shape[i]:
+ * if src.shape[i] == 1: # <<<<<<<<<<<<<<
+ * broadcasting = True
+ * src.strides[i] = 0
+ */
+ __pyx_t_2 = (((__pyx_v_src.shape[__pyx_v_i]) == 1) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1296
+ * if src.shape[i] != dst.shape[i]:
+ * if src.shape[i] == 1:
+ * broadcasting = True # <<<<<<<<<<<<<<
+ * src.strides[i] = 0
+ * else:
+ */
+ __pyx_v_broadcasting = 1;
+
+ /* "View.MemoryView":1297
+ * if src.shape[i] == 1:
+ * broadcasting = True
+ * src.strides[i] = 0 # <<<<<<<<<<<<<<
+ * else:
+ * _err_extents(i, dst.shape[i], src.shape[i])
+ */
+ (__pyx_v_src.strides[__pyx_v_i]) = 0;
+
+ /* "View.MemoryView":1295
+ * for i in range(ndim):
+ * if src.shape[i] != dst.shape[i]:
+ * if src.shape[i] == 1: # <<<<<<<<<<<<<<
+ * broadcasting = True
+ * src.strides[i] = 0
+ */
+ goto __pyx_L7;
+ }
+
+ /* "View.MemoryView":1299
+ * src.strides[i] = 0
+ * else:
+ * _err_extents(i, dst.shape[i], src.shape[i]) # <<<<<<<<<<<<<<
+ *
+ * if src.suboffsets[i] >= 0:
+ */
+ /*else*/ {
+ __pyx_t_6 = __pyx_memoryview_err_extents(__pyx_v_i, (__pyx_v_dst.shape[__pyx_v_i]), (__pyx_v_src.shape[__pyx_v_i])); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1299, __pyx_L1_error)
+ }
+ __pyx_L7:;
+
+ /* "View.MemoryView":1294
+ *
+ * for i in range(ndim):
+ * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<<
+ * if src.shape[i] == 1:
+ * broadcasting = True
+ */
+ }
+
+ /* "View.MemoryView":1301
+ * _err_extents(i, dst.shape[i], src.shape[i])
+ *
+ * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<<
+ * _err_dim(ValueError, "Dimension %d is not direct", i)
+ *
+ */
+ __pyx_t_2 = (((__pyx_v_src.suboffsets[__pyx_v_i]) >= 0) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1302
+ *
+ * if src.suboffsets[i] >= 0:
+ * _err_dim(ValueError, "Dimension %d is not direct", i) # <<<<<<<<<<<<<<
+ *
+ * if slices_overlap(&src, &dst, ndim, itemsize):
+ */
+ __pyx_t_6 = __pyx_memoryview_err_dim(__pyx_builtin_ValueError, ((char *)"Dimension %d is not direct"), __pyx_v_i); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1302, __pyx_L1_error)
+
+ /* "View.MemoryView":1301
+ * _err_extents(i, dst.shape[i], src.shape[i])
+ *
+ * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<<
+ * _err_dim(ValueError, "Dimension %d is not direct", i)
+ *
+ */
+ }
+ }
+
+ /* "View.MemoryView":1304
+ * _err_dim(ValueError, "Dimension %d is not direct", i)
+ *
+ * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<<
+ *
+ * if not slice_is_contig(src, order, ndim):
+ */
+ __pyx_t_2 = (__pyx_slices_overlap((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1306
+ * if slices_overlap(&src, &dst, ndim, itemsize):
+ *
+ * if not slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<<
+ * order = get_best_order(&dst, ndim)
+ *
+ */
+ __pyx_t_2 = ((!(__pyx_memviewslice_is_contig(__pyx_v_src, __pyx_v_order, __pyx_v_ndim) != 0)) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1307
+ *
+ * if not slice_is_contig(src, order, ndim):
+ * order = get_best_order(&dst, ndim) # <<<<<<<<<<<<<<
+ *
+ * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim)
+ */
+ __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim);
+
+ /* "View.MemoryView":1306
+ * if slices_overlap(&src, &dst, ndim, itemsize):
+ *
+ * if not slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<<
+ * order = get_best_order(&dst, ndim)
+ *
+ */
+ }
+
+ /* "View.MemoryView":1309
+ * order = get_best_order(&dst, ndim)
+ *
+ * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) # <<<<<<<<<<<<<<
+ * src = tmp
+ *
+ */
+ __pyx_t_7 = __pyx_memoryview_copy_data_to_temp((&__pyx_v_src), (&__pyx_v_tmp), __pyx_v_order, __pyx_v_ndim); if (unlikely(__pyx_t_7 == ((void *)NULL))) __PYX_ERR(1, 1309, __pyx_L1_error)
+ __pyx_v_tmpdata = __pyx_t_7;
+
+ /* "View.MemoryView":1310
+ *
+ * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim)
+ * src = tmp # <<<<<<<<<<<<<<
+ *
+ * if not broadcasting:
+ */
+ __pyx_v_src = __pyx_v_tmp;
+
+ /* "View.MemoryView":1304
+ * _err_dim(ValueError, "Dimension %d is not direct", i)
+ *
+ * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<<
+ *
+ * if not slice_is_contig(src, order, ndim):
+ */
+ }
+
+ /* "View.MemoryView":1312
+ * src = tmp
+ *
+ * if not broadcasting: # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_t_2 = ((!(__pyx_v_broadcasting != 0)) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1315
+ *
+ *
+ * if slice_is_contig(src, 'C', ndim): # <<<<<<<<<<<<<<
+ * direct_copy = slice_is_contig(dst, 'C', ndim)
+ * elif slice_is_contig(src, 'F', ndim):
+ */
+ __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'C', __pyx_v_ndim) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1316
+ *
+ * if slice_is_contig(src, 'C', ndim):
+ * direct_copy = slice_is_contig(dst, 'C', ndim) # <<<<<<<<<<<<<<
+ * elif slice_is_contig(src, 'F', ndim):
+ * direct_copy = slice_is_contig(dst, 'F', ndim)
+ */
+ __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'C', __pyx_v_ndim);
+
+ /* "View.MemoryView":1315
+ *
+ *
+ * if slice_is_contig(src, 'C', ndim): # <<<<<<<<<<<<<<
+ * direct_copy = slice_is_contig(dst, 'C', ndim)
+ * elif slice_is_contig(src, 'F', ndim):
+ */
+ goto __pyx_L12;
+ }
+
+ /* "View.MemoryView":1317
+ * if slice_is_contig(src, 'C', ndim):
+ * direct_copy = slice_is_contig(dst, 'C', ndim)
+ * elif slice_is_contig(src, 'F', ndim): # <<<<<<<<<<<<<<
+ * direct_copy = slice_is_contig(dst, 'F', ndim)
+ *
+ */
+ __pyx_t_2 = (__pyx_memviewslice_is_contig(__pyx_v_src, 'F', __pyx_v_ndim) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1318
+ * direct_copy = slice_is_contig(dst, 'C', ndim)
+ * elif slice_is_contig(src, 'F', ndim):
+ * direct_copy = slice_is_contig(dst, 'F', ndim) # <<<<<<<<<<<<<<
+ *
+ * if direct_copy:
+ */
+ __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'F', __pyx_v_ndim);
+
+ /* "View.MemoryView":1317
+ * if slice_is_contig(src, 'C', ndim):
+ * direct_copy = slice_is_contig(dst, 'C', ndim)
+ * elif slice_is_contig(src, 'F', ndim): # <<<<<<<<<<<<<<
+ * direct_copy = slice_is_contig(dst, 'F', ndim)
+ *
+ */
+ }
+ __pyx_L12:;
+
+ /* "View.MemoryView":1320
+ * direct_copy = slice_is_contig(dst, 'F', ndim)
+ *
+ * if direct_copy: # <<<<<<<<<<<<<<
+ *
+ * refcount_copying(&dst, dtype_is_object, ndim, False)
+ */
+ __pyx_t_2 = (__pyx_v_direct_copy != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1322
+ * if direct_copy:
+ *
+ * refcount_copying(&dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<<
+ * memcpy(dst.data, src.data, slice_get_size(&src, ndim))
+ * refcount_copying(&dst, dtype_is_object, ndim, True)
+ */
+ __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0);
+
+ /* "View.MemoryView":1323
+ *
+ * refcount_copying(&dst, dtype_is_object, ndim, False)
+ * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) # <<<<<<<<<<<<<<
+ * refcount_copying(&dst, dtype_is_object, ndim, True)
+ * free(tmpdata)
+ */
+ (void)(memcpy(__pyx_v_dst.data, __pyx_v_src.data, __pyx_memoryview_slice_get_size((&__pyx_v_src), __pyx_v_ndim)));
+
+ /* "View.MemoryView":1324
+ * refcount_copying(&dst, dtype_is_object, ndim, False)
+ * memcpy(dst.data, src.data, slice_get_size(&src, ndim))
+ * refcount_copying(&dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<<
+ * free(tmpdata)
+ * return 0
+ */
+ __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1);
+
+ /* "View.MemoryView":1325
+ * memcpy(dst.data, src.data, slice_get_size(&src, ndim))
+ * refcount_copying(&dst, dtype_is_object, ndim, True)
+ * free(tmpdata) # <<<<<<<<<<<<<<
+ * return 0
+ *
+ */
+ free(__pyx_v_tmpdata);
+
+ /* "View.MemoryView":1326
+ * refcount_copying(&dst, dtype_is_object, ndim, True)
+ * free(tmpdata)
+ * return 0 # <<<<<<<<<<<<<<
+ *
+ * if order == 'F' == get_best_order(&dst, ndim):
+ */
+ __pyx_r = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":1320
+ * direct_copy = slice_is_contig(dst, 'F', ndim)
+ *
+ * if direct_copy: # <<<<<<<<<<<<<<
+ *
+ * refcount_copying(&dst, dtype_is_object, ndim, False)
+ */
+ }
+
+ /* "View.MemoryView":1312
+ * src = tmp
+ *
+ * if not broadcasting: # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ }
+
+ /* "View.MemoryView":1328
+ * return 0
+ *
+ * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_t_2 = (__pyx_v_order == 'F');
+ if (__pyx_t_2) {
+ __pyx_t_2 = ('F' == __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim));
+ }
+ __pyx_t_8 = (__pyx_t_2 != 0);
+ if (__pyx_t_8) {
+
+ /* "View.MemoryView":1331
+ *
+ *
+ * transpose_memslice(&src) # <<<<<<<<<<<<<<
+ * transpose_memslice(&dst)
+ *
+ */
+ __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_src)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(1, 1331, __pyx_L1_error)
+
+ /* "View.MemoryView":1332
+ *
+ * transpose_memslice(&src)
+ * transpose_memslice(&dst) # <<<<<<<<<<<<<<
+ *
+ * refcount_copying(&dst, dtype_is_object, ndim, False)
+ */
+ __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_dst)); if (unlikely(__pyx_t_5 == ((int)0))) __PYX_ERR(1, 1332, __pyx_L1_error)
+
+ /* "View.MemoryView":1328
+ * return 0
+ *
+ * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ }
+
+ /* "View.MemoryView":1334
+ * transpose_memslice(&dst)
+ *
+ * refcount_copying(&dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<<
+ * copy_strided_to_strided(&src, &dst, ndim, itemsize)
+ * refcount_copying(&dst, dtype_is_object, ndim, True)
+ */
+ __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0);
+
+ /* "View.MemoryView":1335
+ *
+ * refcount_copying(&dst, dtype_is_object, ndim, False)
+ * copy_strided_to_strided(&src, &dst, ndim, itemsize) # <<<<<<<<<<<<<<
+ * refcount_copying(&dst, dtype_is_object, ndim, True)
+ *
+ */
+ copy_strided_to_strided((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize);
+
+ /* "View.MemoryView":1336
+ * refcount_copying(&dst, dtype_is_object, ndim, False)
+ * copy_strided_to_strided(&src, &dst, ndim, itemsize)
+ * refcount_copying(&dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<<
+ *
+ * free(tmpdata)
+ */
+ __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1);
+
+ /* "View.MemoryView":1338
+ * refcount_copying(&dst, dtype_is_object, ndim, True)
+ *
+ * free(tmpdata) # <<<<<<<<<<<<<<
+ * return 0
+ *
+ */
+ free(__pyx_v_tmpdata);
+
+ /* "View.MemoryView":1339
+ *
+ * free(tmpdata)
+ * return 0 # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_memoryview_broadcast_leading')
+ */
+ __pyx_r = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":1270
+ *
+ * @cname('__pyx_memoryview_copy_contents')
+ * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<<
+ * __Pyx_memviewslice dst,
+ * int src_ndim, int dst_ndim,
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ {
+ #ifdef WITH_THREAD
+ PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+ #endif
+ __Pyx_AddTraceback("View.MemoryView.memoryview_copy_contents", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ #ifdef WITH_THREAD
+ __Pyx_PyGILState_Release(__pyx_gilstate_save);
+ #endif
+ }
+ __pyx_r = -1;
+ __pyx_L0:;
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1342
+ *
+ * @cname('__pyx_memoryview_broadcast_leading')
+ * cdef void broadcast_leading(__Pyx_memviewslice *mslice, # <<<<<<<<<<<<<<
+ * int ndim,
+ * int ndim_other) nogil:
+ */
+
+static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim, int __pyx_v_ndim_other) {
+ int __pyx_v_i;
+ int __pyx_v_offset;
+ int __pyx_t_1;
+ int __pyx_t_2;
+ int __pyx_t_3;
+
+ /* "View.MemoryView":1346
+ * int ndim_other) nogil:
+ * cdef int i
+ * cdef int offset = ndim_other - ndim # <<<<<<<<<<<<<<
+ *
+ * for i in range(ndim - 1, -1, -1):
+ */
+ __pyx_v_offset = (__pyx_v_ndim_other - __pyx_v_ndim);
+
+ /* "View.MemoryView":1348
+ * cdef int offset = ndim_other - ndim
+ *
+ * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<<
+ * mslice.shape[i + offset] = mslice.shape[i]
+ * mslice.strides[i + offset] = mslice.strides[i]
+ */
+ for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) {
+ __pyx_v_i = __pyx_t_1;
+
+ /* "View.MemoryView":1349
+ *
+ * for i in range(ndim - 1, -1, -1):
+ * mslice.shape[i + offset] = mslice.shape[i] # <<<<<<<<<<<<<<
+ * mslice.strides[i + offset] = mslice.strides[i]
+ * mslice.suboffsets[i + offset] = mslice.suboffsets[i]
+ */
+ (__pyx_v_mslice->shape[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->shape[__pyx_v_i]);
+
+ /* "View.MemoryView":1350
+ * for i in range(ndim - 1, -1, -1):
+ * mslice.shape[i + offset] = mslice.shape[i]
+ * mslice.strides[i + offset] = mslice.strides[i] # <<<<<<<<<<<<<<
+ * mslice.suboffsets[i + offset] = mslice.suboffsets[i]
+ *
+ */
+ (__pyx_v_mslice->strides[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->strides[__pyx_v_i]);
+
+ /* "View.MemoryView":1351
+ * mslice.shape[i + offset] = mslice.shape[i]
+ * mslice.strides[i + offset] = mslice.strides[i]
+ * mslice.suboffsets[i + offset] = mslice.suboffsets[i] # <<<<<<<<<<<<<<
+ *
+ * for i in range(offset):
+ */
+ (__pyx_v_mslice->suboffsets[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->suboffsets[__pyx_v_i]);
+ }
+
+ /* "View.MemoryView":1353
+ * mslice.suboffsets[i + offset] = mslice.suboffsets[i]
+ *
+ * for i in range(offset): # <<<<<<<<<<<<<<
+ * mslice.shape[i] = 1
+ * mslice.strides[i] = mslice.strides[0]
+ */
+ __pyx_t_1 = __pyx_v_offset;
+ __pyx_t_2 = __pyx_t_1;
+ for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
+ __pyx_v_i = __pyx_t_3;
+
+ /* "View.MemoryView":1354
+ *
+ * for i in range(offset):
+ * mslice.shape[i] = 1 # <<<<<<<<<<<<<<
+ * mslice.strides[i] = mslice.strides[0]
+ * mslice.suboffsets[i] = -1
+ */
+ (__pyx_v_mslice->shape[__pyx_v_i]) = 1;
+
+ /* "View.MemoryView":1355
+ * for i in range(offset):
+ * mslice.shape[i] = 1
+ * mslice.strides[i] = mslice.strides[0] # <<<<<<<<<<<<<<
+ * mslice.suboffsets[i] = -1
+ *
+ */
+ (__pyx_v_mslice->strides[__pyx_v_i]) = (__pyx_v_mslice->strides[0]);
+
+ /* "View.MemoryView":1356
+ * mslice.shape[i] = 1
+ * mslice.strides[i] = mslice.strides[0]
+ * mslice.suboffsets[i] = -1 # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ (__pyx_v_mslice->suboffsets[__pyx_v_i]) = -1L;
+ }
+
+ /* "View.MemoryView":1342
+ *
+ * @cname('__pyx_memoryview_broadcast_leading')
+ * cdef void broadcast_leading(__Pyx_memviewslice *mslice, # <<<<<<<<<<<<<<
+ * int ndim,
+ * int ndim_other) nogil:
+ */
+
+ /* function exit code */
+}
+
+/* "View.MemoryView":1364
+ *
+ * @cname('__pyx_memoryview_refcount_copying')
+ * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, # <<<<<<<<<<<<<<
+ * int ndim, bint inc) nogil:
+ *
+ */
+
+static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_dtype_is_object, int __pyx_v_ndim, int __pyx_v_inc) {
+ int __pyx_t_1;
+
+ /* "View.MemoryView":1368
+ *
+ *
+ * if dtype_is_object: # <<<<<<<<<<<<<<
+ * refcount_objects_in_slice_with_gil(dst.data, dst.shape,
+ * dst.strides, ndim, inc)
+ */
+ __pyx_t_1 = (__pyx_v_dtype_is_object != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":1369
+ *
+ * if dtype_is_object:
+ * refcount_objects_in_slice_with_gil(dst.data, dst.shape, # <<<<<<<<<<<<<<
+ * dst.strides, ndim, inc)
+ *
+ */
+ __pyx_memoryview_refcount_objects_in_slice_with_gil(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_inc);
+
+ /* "View.MemoryView":1368
+ *
+ *
+ * if dtype_is_object: # <<<<<<<<<<<<<<
+ * refcount_objects_in_slice_with_gil(dst.data, dst.shape,
+ * dst.strides, ndim, inc)
+ */
+ }
+
+ /* "View.MemoryView":1364
+ *
+ * @cname('__pyx_memoryview_refcount_copying')
+ * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, # <<<<<<<<<<<<<<
+ * int ndim, bint inc) nogil:
+ *
+ */
+
+ /* function exit code */
+}
+
+/* "View.MemoryView":1373
+ *
+ * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil')
+ * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<<
+ * Py_ssize_t *strides, int ndim,
+ * bint inc) with gil:
+ */
+
+static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) {
+ __Pyx_RefNannyDeclarations
+ #ifdef WITH_THREAD
+ PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+ #endif
+ __Pyx_RefNannySetupContext("refcount_objects_in_slice_with_gil", 0);
+
+ /* "View.MemoryView":1376
+ * Py_ssize_t *strides, int ndim,
+ * bint inc) with gil:
+ * refcount_objects_in_slice(data, shape, strides, ndim, inc) # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_memoryview_refcount_objects_in_slice')
+ */
+ __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, __pyx_v_shape, __pyx_v_strides, __pyx_v_ndim, __pyx_v_inc);
+
+ /* "View.MemoryView":1373
+ *
+ * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil')
+ * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<<
+ * Py_ssize_t *strides, int ndim,
+ * bint inc) with gil:
+ */
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ #ifdef WITH_THREAD
+ __Pyx_PyGILState_Release(__pyx_gilstate_save);
+ #endif
+}
+
+/* "View.MemoryView":1379
+ *
+ * @cname('__pyx_memoryview_refcount_objects_in_slice')
+ * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<<
+ * Py_ssize_t *strides, int ndim, bint inc):
+ * cdef Py_ssize_t i
+ */
+
+static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) {
+ CYTHON_UNUSED Py_ssize_t __pyx_v_i;
+ __Pyx_RefNannyDeclarations
+ Py_ssize_t __pyx_t_1;
+ Py_ssize_t __pyx_t_2;
+ Py_ssize_t __pyx_t_3;
+ int __pyx_t_4;
+ __Pyx_RefNannySetupContext("refcount_objects_in_slice", 0);
+
+ /* "View.MemoryView":1383
+ * cdef Py_ssize_t i
+ *
+ * for i in range(shape[0]): # <<<<<<<<<<<<<<
+ * if ndim == 1:
+ * if inc:
+ */
+ __pyx_t_1 = (__pyx_v_shape[0]);
+ __pyx_t_2 = __pyx_t_1;
+ for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
+ __pyx_v_i = __pyx_t_3;
+
+ /* "View.MemoryView":1384
+ *
+ * for i in range(shape[0]):
+ * if ndim == 1: # <<<<<<<<<<<<<<
+ * if inc:
+ * Py_INCREF(( data)[0])
+ */
+ __pyx_t_4 = ((__pyx_v_ndim == 1) != 0);
+ if (__pyx_t_4) {
+
+ /* "View.MemoryView":1385
+ * for i in range(shape[0]):
+ * if ndim == 1:
+ * if inc: # <<<<<<<<<<<<<<
+ * Py_INCREF(( data)[0])
+ * else:
+ */
+ __pyx_t_4 = (__pyx_v_inc != 0);
+ if (__pyx_t_4) {
+
+ /* "View.MemoryView":1386
+ * if ndim == 1:
+ * if inc:
+ * Py_INCREF(( data)[0]) # <<<<<<<<<<<<<<
+ * else:
+ * Py_DECREF(( data)[0])
+ */
+ Py_INCREF((((PyObject **)__pyx_v_data)[0]));
+
+ /* "View.MemoryView":1385
+ * for i in range(shape[0]):
+ * if ndim == 1:
+ * if inc: # <<<<<<<<<<<<<<
+ * Py_INCREF(( data)[0])
+ * else:
+ */
+ goto __pyx_L6;
+ }
+
+ /* "View.MemoryView":1388
+ * Py_INCREF(( data)[0])
+ * else:
+ * Py_DECREF(( data)[0]) # <<<<<<<<<<<<<<
+ * else:
+ * refcount_objects_in_slice(data, shape + 1, strides + 1,
+ */
+ /*else*/ {
+ Py_DECREF((((PyObject **)__pyx_v_data)[0]));
+ }
+ __pyx_L6:;
+
+ /* "View.MemoryView":1384
+ *
+ * for i in range(shape[0]):
+ * if ndim == 1: # <<<<<<<<<<<<<<
+ * if inc:
+ * Py_INCREF(( data)[0])
+ */
+ goto __pyx_L5;
+ }
+
+ /* "View.MemoryView":1390
+ * Py_DECREF(( data)[0])
+ * else:
+ * refcount_objects_in_slice(data, shape + 1, strides + 1, # <<<<<<<<<<<<<<
+ * ndim - 1, inc)
+ *
+ */
+ /*else*/ {
+
+ /* "View.MemoryView":1391
+ * else:
+ * refcount_objects_in_slice(data, shape + 1, strides + 1,
+ * ndim - 1, inc) # <<<<<<<<<<<<<<
+ *
+ * data += strides[0]
+ */
+ __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_inc);
+ }
+ __pyx_L5:;
+
+ /* "View.MemoryView":1393
+ * ndim - 1, inc)
+ *
+ * data += strides[0] # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_v_data = (__pyx_v_data + (__pyx_v_strides[0]));
+ }
+
+ /* "View.MemoryView":1379
+ *
+ * @cname('__pyx_memoryview_refcount_objects_in_slice')
+ * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<<
+ * Py_ssize_t *strides, int ndim, bint inc):
+ * cdef Py_ssize_t i
+ */
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+}
+
+/* "View.MemoryView":1399
+ *
+ * @cname('__pyx_memoryview_slice_assign_scalar')
+ * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<<
+ * size_t itemsize, void *item,
+ * bint dtype_is_object) nogil:
+ */
+
+static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item, int __pyx_v_dtype_is_object) {
+
+ /* "View.MemoryView":1402
+ * size_t itemsize, void *item,
+ * bint dtype_is_object) nogil:
+ * refcount_copying(dst, dtype_is_object, ndim, False) # <<<<<<<<<<<<<<
+ * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim,
+ * itemsize, item)
+ */
+ __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 0);
+
+ /* "View.MemoryView":1403
+ * bint dtype_is_object) nogil:
+ * refcount_copying(dst, dtype_is_object, ndim, False)
+ * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, # <<<<<<<<<<<<<<
+ * itemsize, item)
+ * refcount_copying(dst, dtype_is_object, ndim, True)
+ */
+ __pyx_memoryview__slice_assign_scalar(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_itemsize, __pyx_v_item);
+
+ /* "View.MemoryView":1405
+ * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim,
+ * itemsize, item)
+ * refcount_copying(dst, dtype_is_object, ndim, True) # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 1);
+
+ /* "View.MemoryView":1399
+ *
+ * @cname('__pyx_memoryview_slice_assign_scalar')
+ * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<<
+ * size_t itemsize, void *item,
+ * bint dtype_is_object) nogil:
+ */
+
+ /* function exit code */
+}
+
+/* "View.MemoryView":1409
+ *
+ * @cname('__pyx_memoryview__slice_assign_scalar')
+ * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<<
+ * Py_ssize_t *strides, int ndim,
+ * size_t itemsize, void *item) nogil:
+ */
+
+static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item) {
+ CYTHON_UNUSED Py_ssize_t __pyx_v_i;
+ Py_ssize_t __pyx_v_stride;
+ Py_ssize_t __pyx_v_extent;
+ int __pyx_t_1;
+ Py_ssize_t __pyx_t_2;
+ Py_ssize_t __pyx_t_3;
+ Py_ssize_t __pyx_t_4;
+
+ /* "View.MemoryView":1413
+ * size_t itemsize, void *item) nogil:
+ * cdef Py_ssize_t i
+ * cdef Py_ssize_t stride = strides[0] # <<<<<<<<<<<<<<
+ * cdef Py_ssize_t extent = shape[0]
+ *
+ */
+ __pyx_v_stride = (__pyx_v_strides[0]);
+
+ /* "View.MemoryView":1414
+ * cdef Py_ssize_t i
+ * cdef Py_ssize_t stride = strides[0]
+ * cdef Py_ssize_t extent = shape[0] # <<<<<<<<<<<<<<
+ *
+ * if ndim == 1:
+ */
+ __pyx_v_extent = (__pyx_v_shape[0]);
+
+ /* "View.MemoryView":1416
+ * cdef Py_ssize_t extent = shape[0]
+ *
+ * if ndim == 1: # <<<<<<<<<<<<<<
+ * for i in range(extent):
+ * memcpy(data, item, itemsize)
+ */
+ __pyx_t_1 = ((__pyx_v_ndim == 1) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":1417
+ *
+ * if ndim == 1:
+ * for i in range(extent): # <<<<<<<<<<<<<<
+ * memcpy(data, item, itemsize)
+ * data += stride
+ */
+ __pyx_t_2 = __pyx_v_extent;
+ __pyx_t_3 = __pyx_t_2;
+ for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+ __pyx_v_i = __pyx_t_4;
+
+ /* "View.MemoryView":1418
+ * if ndim == 1:
+ * for i in range(extent):
+ * memcpy(data, item, itemsize) # <<<<<<<<<<<<<<
+ * data += stride
+ * else:
+ */
+ (void)(memcpy(__pyx_v_data, __pyx_v_item, __pyx_v_itemsize));
+
+ /* "View.MemoryView":1419
+ * for i in range(extent):
+ * memcpy(data, item, itemsize)
+ * data += stride # <<<<<<<<<<<<<<
+ * else:
+ * for i in range(extent):
+ */
+ __pyx_v_data = (__pyx_v_data + __pyx_v_stride);
+ }
+
+ /* "View.MemoryView":1416
+ * cdef Py_ssize_t extent = shape[0]
+ *
+ * if ndim == 1: # <<<<<<<<<<<<<<
+ * for i in range(extent):
+ * memcpy(data, item, itemsize)
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":1421
+ * data += stride
+ * else:
+ * for i in range(extent): # <<<<<<<<<<<<<<
+ * _slice_assign_scalar(data, shape + 1, strides + 1,
+ * ndim - 1, itemsize, item)
+ */
+ /*else*/ {
+ __pyx_t_2 = __pyx_v_extent;
+ __pyx_t_3 = __pyx_t_2;
+ for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+ __pyx_v_i = __pyx_t_4;
+
+ /* "View.MemoryView":1422
+ * else:
+ * for i in range(extent):
+ * _slice_assign_scalar(data, shape + 1, strides + 1, # <<<<<<<<<<<<<<
+ * ndim - 1, itemsize, item)
+ * data += stride
+ */
+ __pyx_memoryview__slice_assign_scalar(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize, __pyx_v_item);
+
+ /* "View.MemoryView":1424
+ * _slice_assign_scalar(data, shape + 1, strides + 1,
+ * ndim - 1, itemsize, item)
+ * data += stride # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_v_data = (__pyx_v_data + __pyx_v_stride);
+ }
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":1409
+ *
+ * @cname('__pyx_memoryview__slice_assign_scalar')
+ * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<<
+ * Py_ssize_t *strides, int ndim,
+ * size_t itemsize, void *item) nogil:
+ */
+
+ /* function exit code */
+}
+
+/* "(tree fragment)":1
+ * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<<
+ * cdef object __pyx_PickleError
+ * cdef object __pyx_result
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static PyMethodDef __pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum = {"__pyx_unpickle_Enum", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum, METH_VARARGS|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+ PyObject *__pyx_v___pyx_type = 0;
+ long __pyx_v___pyx_checksum;
+ PyObject *__pyx_v___pyx_state = 0;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__pyx_unpickle_Enum (wrapper)", 0);
+ {
+ static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0};
+ PyObject* values[3] = {0,0,0};
+ if (unlikely(__pyx_kwds)) {
+ Py_ssize_t kw_args;
+ const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+ switch (pos_args) {
+ case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+ CYTHON_FALLTHROUGH;
+ case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+ CYTHON_FALLTHROUGH;
+ case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+ CYTHON_FALLTHROUGH;
+ case 0: break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ kw_args = PyDict_Size(__pyx_kwds);
+ switch (pos_args) {
+ case 0:
+ if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--;
+ else goto __pyx_L5_argtuple_error;
+ CYTHON_FALLTHROUGH;
+ case 1:
+ if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--;
+ else {
+ __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error)
+ }
+ CYTHON_FALLTHROUGH;
+ case 2:
+ if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--;
+ else {
+ __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error)
+ }
+ }
+ if (unlikely(kw_args > 0)) {
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_Enum") < 0)) __PYX_ERR(1, 1, __pyx_L3_error)
+ }
+ } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
+ goto __pyx_L5_argtuple_error;
+ } else {
+ values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+ values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+ values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+ }
+ __pyx_v___pyx_type = values[0];
+ __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error)
+ __pyx_v___pyx_state = values[2];
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L5_argtuple_error:;
+ __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(1, 1, __pyx_L3_error)
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return NULL;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
+ PyObject *__pyx_v___pyx_PickleError = 0;
+ PyObject *__pyx_v___pyx_result = 0;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_t_2;
+ int __pyx_t_3;
+ PyObject *__pyx_t_4 = NULL;
+ PyObject *__pyx_t_5 = NULL;
+ PyObject *__pyx_t_6 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__pyx_unpickle_Enum", 0);
+
+ /* "(tree fragment)":4
+ * cdef object __pyx_PickleError
+ * cdef object __pyx_result
+ * if __pyx_checksum not in (0xb068931, 0x82a3537, 0x6ae9995): # <<<<<<<<<<<<<<
+ * from pickle import PickleError as __pyx_PickleError
+ * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xb068931, 0x82a3537, 0x6ae9995) = (name))" % __pyx_checksum)
+ */
+ __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__20, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(1, 4, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __pyx_t_3 = (__pyx_t_2 != 0);
+ if (__pyx_t_3) {
+
+ /* "(tree fragment)":5
+ * cdef object __pyx_result
+ * if __pyx_checksum not in (0xb068931, 0x82a3537, 0x6ae9995):
+ * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<<
+ * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xb068931, 0x82a3537, 0x6ae9995) = (name))" % __pyx_checksum)
+ * __pyx_result = Enum.__new__(__pyx_type)
+ */
+ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_INCREF(__pyx_n_s_PickleError);
+ __Pyx_GIVEREF(__pyx_n_s_PickleError);
+ PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError);
+ __pyx_t_4 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_4, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_INCREF(__pyx_t_1);
+ __pyx_v___pyx_PickleError = __pyx_t_1;
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+ /* "(tree fragment)":6
+ * if __pyx_checksum not in (0xb068931, 0x82a3537, 0x6ae9995):
+ * from pickle import PickleError as __pyx_PickleError
+ * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xb068931, 0x82a3537, 0x6ae9995) = (name))" % __pyx_checksum) # <<<<<<<<<<<<<<
+ * __pyx_result = Enum.__new__(__pyx_type)
+ * if __pyx_state is not None:
+ */
+ __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 6, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __Pyx_INCREF(__pyx_v___pyx_PickleError);
+ __pyx_t_1 = __pyx_v___pyx_PickleError; __pyx_t_6 = NULL;
+ if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_1))) {
+ __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
+ if (likely(__pyx_t_6)) {
+ PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
+ __Pyx_INCREF(__pyx_t_6);
+ __Pyx_INCREF(function);
+ __Pyx_DECREF_SET(__pyx_t_1, function);
+ }
+ }
+ __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5);
+ __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 6, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __Pyx_Raise(__pyx_t_4, 0, 0, 0);
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+ __PYX_ERR(1, 6, __pyx_L1_error)
+
+ /* "(tree fragment)":4
+ * cdef object __pyx_PickleError
+ * cdef object __pyx_result
+ * if __pyx_checksum not in (0xb068931, 0x82a3537, 0x6ae9995): # <<<<<<<<<<<<<<
+ * from pickle import PickleError as __pyx_PickleError
+ * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xb068931, 0x82a3537, 0x6ae9995) = (name))" % __pyx_checksum)
+ */
+ }
+
+ /* "(tree fragment)":7
+ * from pickle import PickleError as __pyx_PickleError
+ * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xb068931, 0x82a3537, 0x6ae9995) = (name))" % __pyx_checksum)
+ * __pyx_result = Enum.__new__(__pyx_type) # <<<<<<<<<<<<<<
+ * if __pyx_state is not None:
+ * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state)
+ */
+ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_MemviewEnum_type), __pyx_n_s_new); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_5 = NULL;
+ if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
+ __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
+ if (likely(__pyx_t_5)) {
+ PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
+ __Pyx_INCREF(__pyx_t_5);
+ __Pyx_INCREF(function);
+ __Pyx_DECREF_SET(__pyx_t_1, function);
+ }
+ }
+ __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_5, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v___pyx_type);
+ __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+ if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __pyx_v___pyx_result = __pyx_t_4;
+ __pyx_t_4 = 0;
+
+ /* "(tree fragment)":8
+ * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xb068931, 0x82a3537, 0x6ae9995) = (name))" % __pyx_checksum)
+ * __pyx_result = Enum.__new__(__pyx_type)
+ * if __pyx_state is not None: # <<<<<<<<<<<<<<
+ * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state)
+ * return __pyx_result
+ */
+ __pyx_t_3 = (__pyx_v___pyx_state != Py_None);
+ __pyx_t_2 = (__pyx_t_3 != 0);
+ if (__pyx_t_2) {
+
+ /* "(tree fragment)":9
+ * __pyx_result = Enum.__new__(__pyx_type)
+ * if __pyx_state is not None:
+ * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<<
+ * return __pyx_result
+ * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state):
+ */
+ if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(1, 9, __pyx_L1_error)
+ __pyx_t_4 = __pyx_unpickle_Enum__set_state(((struct __pyx_MemviewEnum_obj *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 9, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+ /* "(tree fragment)":8
+ * raise __pyx_PickleError("Incompatible checksums (0x%x vs (0xb068931, 0x82a3537, 0x6ae9995) = (name))" % __pyx_checksum)
+ * __pyx_result = Enum.__new__(__pyx_type)
+ * if __pyx_state is not None: # <<<<<<<<<<<<<<
+ * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state)
+ * return __pyx_result
+ */
+ }
+
+ /* "(tree fragment)":10
+ * if __pyx_state is not None:
+ * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state)
+ * return __pyx_result # <<<<<<<<<<<<<<
+ * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state):
+ * __pyx_result.name = __pyx_state[0]
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF(__pyx_v___pyx_result);
+ __pyx_r = __pyx_v___pyx_result;
+ goto __pyx_L0;
+
+ /* "(tree fragment)":1
+ * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<<
+ * cdef object __pyx_PickleError
+ * cdef object __pyx_result
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_4);
+ __Pyx_XDECREF(__pyx_t_5);
+ __Pyx_XDECREF(__pyx_t_6);
+ __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XDECREF(__pyx_v___pyx_PickleError);
+ __Pyx_XDECREF(__pyx_v___pyx_result);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":11
+ * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state)
+ * return __pyx_result
+ * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<<
+ * __pyx_result.name = __pyx_state[0]
+ * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'):
+ */
+
+static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_t_2;
+ Py_ssize_t __pyx_t_3;
+ int __pyx_t_4;
+ int __pyx_t_5;
+ PyObject *__pyx_t_6 = NULL;
+ PyObject *__pyx_t_7 = NULL;
+ PyObject *__pyx_t_8 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__pyx_unpickle_Enum__set_state", 0);
+
+ /* "(tree fragment)":12
+ * return __pyx_result
+ * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state):
+ * __pyx_result.name = __pyx_state[0] # <<<<<<<<<<<<<<
+ * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'):
+ * __pyx_result.__dict__.update(__pyx_state[1])
+ */
+ if (unlikely(__pyx_v___pyx_state == Py_None)) {
+ PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+ __PYX_ERR(1, 12, __pyx_L1_error)
+ }
+ __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_GIVEREF(__pyx_t_1);
+ __Pyx_GOTREF(__pyx_v___pyx_result->name);
+ __Pyx_DECREF(__pyx_v___pyx_result->name);
+ __pyx_v___pyx_result->name = __pyx_t_1;
+ __pyx_t_1 = 0;
+
+ /* "(tree fragment)":13
+ * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state):
+ * __pyx_result.name = __pyx_state[0]
+ * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<<
+ * __pyx_result.__dict__.update(__pyx_state[1])
+ */
+ if (unlikely(__pyx_v___pyx_state == Py_None)) {
+ PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
+ __PYX_ERR(1, 13, __pyx_L1_error)
+ }
+ __pyx_t_3 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error)
+ __pyx_t_4 = ((__pyx_t_3 > 1) != 0);
+ if (__pyx_t_4) {
+ } else {
+ __pyx_t_2 = __pyx_t_4;
+ goto __pyx_L4_bool_binop_done;
+ }
+ __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error)
+ __pyx_t_5 = (__pyx_t_4 != 0);
+ __pyx_t_2 = __pyx_t_5;
+ __pyx_L4_bool_binop_done:;
+ if (__pyx_t_2) {
+
+ /* "(tree fragment)":14
+ * __pyx_result.name = __pyx_state[0]
+ * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'):
+ * __pyx_result.__dict__.update(__pyx_state[1]) # <<<<<<<<<<<<<<
+ */
+ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_6);
+ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_update); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 14, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_7);
+ __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+ if (unlikely(__pyx_v___pyx_state == Py_None)) {
+ PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+ __PYX_ERR(1, 14, __pyx_L1_error)
+ }
+ __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_6);
+ __pyx_t_8 = NULL;
+ if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
+ __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
+ if (likely(__pyx_t_8)) {
+ PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
+ __Pyx_INCREF(__pyx_t_8);
+ __Pyx_INCREF(function);
+ __Pyx_DECREF_SET(__pyx_t_7, function);
+ }
+ }
+ __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_7, __pyx_t_8, __pyx_t_6) : __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6);
+ __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+ __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+ if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+ /* "(tree fragment)":13
+ * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state):
+ * __pyx_result.name = __pyx_state[0]
+ * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<<
+ * __pyx_result.__dict__.update(__pyx_state[1])
+ */
+ }
+
+ /* "(tree fragment)":11
+ * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state)
+ * return __pyx_result
+ * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<<
+ * __pyx_result.name = __pyx_state[0]
+ * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'):
+ */
+
+ /* function exit code */
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_6);
+ __Pyx_XDECREF(__pyx_t_7);
+ __Pyx_XDECREF(__pyx_t_8);
+ __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+static struct __pyx_vtabstruct_array __pyx_vtable_array;
+
+static PyObject *__pyx_tp_new_array(PyTypeObject *t, PyObject *a, PyObject *k) {
+ struct __pyx_array_obj *p;
+ PyObject *o;
+ if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+ o = (*t->tp_alloc)(t, 0);
+ } else {
+ o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+ }
+ if (unlikely(!o)) return 0;
+ p = ((struct __pyx_array_obj *)o);
+ p->__pyx_vtab = __pyx_vtabptr_array;
+ p->mode = ((PyObject*)Py_None); Py_INCREF(Py_None);
+ p->_format = ((PyObject*)Py_None); Py_INCREF(Py_None);
+ if (unlikely(__pyx_array___cinit__(o, a, k) < 0)) goto bad;
+ return o;
+ bad:
+ Py_DECREF(o); o = 0;
+ return NULL;
+}
+
+static void __pyx_tp_dealloc_array(PyObject *o) {
+ struct __pyx_array_obj *p = (struct __pyx_array_obj *)o;
+ #if CYTHON_USE_TP_FINALIZE
+ if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
+ if (PyObject_CallFinalizerFromDealloc(o)) return;
+ }
+ #endif
+ {
+ PyObject *etype, *eval, *etb;
+ PyErr_Fetch(&etype, &eval, &etb);
+ __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
+ __pyx_array___dealloc__(o);
+ __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
+ PyErr_Restore(etype, eval, etb);
+ }
+ Py_CLEAR(p->mode);
+ Py_CLEAR(p->_format);
+ (*Py_TYPE(o)->tp_free)(o);
+}
+static PyObject *__pyx_sq_item_array(PyObject *o, Py_ssize_t i) {
+ PyObject *r;
+ PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0;
+ r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x);
+ Py_DECREF(x);
+ return r;
+}
+
+static int __pyx_mp_ass_subscript_array(PyObject *o, PyObject *i, PyObject *v) {
+ if (v) {
+ return __pyx_array___setitem__(o, i, v);
+ }
+ else {
+ PyErr_Format(PyExc_NotImplementedError,
+ "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name);
+ return -1;
+ }
+}
+
+static PyObject *__pyx_tp_getattro_array(PyObject *o, PyObject *n) {
+ PyObject *v = __Pyx_PyObject_GenericGetAttr(o, n);
+ if (!v && PyErr_ExceptionMatches(PyExc_AttributeError)) {
+ PyErr_Clear();
+ v = __pyx_array___getattr__(o, n);
+ }
+ return v;
+}
+
+static PyObject *__pyx_getprop___pyx_array_memview(PyObject *o, CYTHON_UNUSED void *x) {
+ return __pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_array[] = {
+ {"__getattr__", (PyCFunction)__pyx_array___getattr__, METH_O|METH_COEXIST, 0},
+ {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_array_1__reduce_cython__, METH_NOARGS, 0},
+ {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_array_3__setstate_cython__, METH_O, 0},
+ {0, 0, 0, 0}
+};
+
+static struct PyGetSetDef __pyx_getsets_array[] = {
+ {(char *)"memview", __pyx_getprop___pyx_array_memview, 0, (char *)0, 0},
+ {0, 0, 0, 0, 0}
+};
+
+static PySequenceMethods __pyx_tp_as_sequence_array = {
+ __pyx_array___len__, /*sq_length*/
+ 0, /*sq_concat*/
+ 0, /*sq_repeat*/
+ __pyx_sq_item_array, /*sq_item*/
+ 0, /*sq_slice*/
+ 0, /*sq_ass_item*/
+ 0, /*sq_ass_slice*/
+ 0, /*sq_contains*/
+ 0, /*sq_inplace_concat*/
+ 0, /*sq_inplace_repeat*/
+};
+
+static PyMappingMethods __pyx_tp_as_mapping_array = {
+ __pyx_array___len__, /*mp_length*/
+ __pyx_array___getitem__, /*mp_subscript*/
+ __pyx_mp_ass_subscript_array, /*mp_ass_subscript*/
+};
+
+static PyBufferProcs __pyx_tp_as_buffer_array = {
+ #if PY_MAJOR_VERSION < 3
+ 0, /*bf_getreadbuffer*/
+ #endif
+ #if PY_MAJOR_VERSION < 3
+ 0, /*bf_getwritebuffer*/
+ #endif
+ #if PY_MAJOR_VERSION < 3
+ 0, /*bf_getsegcount*/
+ #endif
+ #if PY_MAJOR_VERSION < 3
+ 0, /*bf_getcharbuffer*/
+ #endif
+ __pyx_array_getbuffer, /*bf_getbuffer*/
+ 0, /*bf_releasebuffer*/
+};
+
+static PyTypeObject __pyx_type___pyx_array = {
+ PyVarObject_HEAD_INIT(0, 0)
+ "monotonic_align.core.array", /*tp_name*/
+ sizeof(struct __pyx_array_obj), /*tp_basicsize*/
+ 0, /*tp_itemsize*/
+ __pyx_tp_dealloc_array, /*tp_dealloc*/
+ #if PY_VERSION_HEX < 0x030800b4
+ 0, /*tp_print*/
+ #endif
+ #if PY_VERSION_HEX >= 0x030800b4
+ 0, /*tp_vectorcall_offset*/
+ #endif
+ 0, /*tp_getattr*/
+ 0, /*tp_setattr*/
+ #if PY_MAJOR_VERSION < 3
+ 0, /*tp_compare*/
+ #endif
+ #if PY_MAJOR_VERSION >= 3
+ 0, /*tp_as_async*/
+ #endif
+ 0, /*tp_repr*/
+ 0, /*tp_as_number*/
+ &__pyx_tp_as_sequence_array, /*tp_as_sequence*/
+ &__pyx_tp_as_mapping_array, /*tp_as_mapping*/
+ 0, /*tp_hash*/
+ 0, /*tp_call*/
+ 0, /*tp_str*/
+ __pyx_tp_getattro_array, /*tp_getattro*/
+ 0, /*tp_setattro*/
+ &__pyx_tp_as_buffer_array, /*tp_as_buffer*/
+ Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE, /*tp_flags*/
+ 0, /*tp_doc*/
+ 0, /*tp_traverse*/
+ 0, /*tp_clear*/
+ 0, /*tp_richcompare*/
+ 0, /*tp_weaklistoffset*/
+ 0, /*tp_iter*/
+ 0, /*tp_iternext*/
+ __pyx_methods_array, /*tp_methods*/
+ 0, /*tp_members*/
+ __pyx_getsets_array, /*tp_getset*/
+ 0, /*tp_base*/
+ 0, /*tp_dict*/
+ 0, /*tp_descr_get*/
+ 0, /*tp_descr_set*/
+ 0, /*tp_dictoffset*/
+ 0, /*tp_init*/
+ 0, /*tp_alloc*/
+ __pyx_tp_new_array, /*tp_new*/
+ 0, /*tp_free*/
+ 0, /*tp_is_gc*/
+ 0, /*tp_bases*/
+ 0, /*tp_mro*/
+ 0, /*tp_cache*/
+ 0, /*tp_subclasses*/
+ 0, /*tp_weaklist*/
+ 0, /*tp_del*/
+ 0, /*tp_version_tag*/
+ #if PY_VERSION_HEX >= 0x030400a1
+ 0, /*tp_finalize*/
+ #endif
+ #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+ 0, /*tp_vectorcall*/
+ #endif
+ #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+ 0, /*tp_print*/
+ #endif
+ #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+ 0, /*tp_pypy_flags*/
+ #endif
+};
+
+static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
+ struct __pyx_MemviewEnum_obj *p;
+ PyObject *o;
+ if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+ o = (*t->tp_alloc)(t, 0);
+ } else {
+ o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+ }
+ if (unlikely(!o)) return 0;
+ p = ((struct __pyx_MemviewEnum_obj *)o);
+ p->name = Py_None; Py_INCREF(Py_None);
+ return o;
+}
+
+static void __pyx_tp_dealloc_Enum(PyObject *o) {
+ struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o;
+ #if CYTHON_USE_TP_FINALIZE
+ if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+ if (PyObject_CallFinalizerFromDealloc(o)) return;
+ }
+ #endif
+ PyObject_GC_UnTrack(o);
+ Py_CLEAR(p->name);
+ (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_Enum(PyObject *o, visitproc v, void *a) {
+ int e;
+ struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o;
+ if (p->name) {
+ e = (*v)(p->name, a); if (e) return e;
+ }
+ return 0;
+}
+
+static int __pyx_tp_clear_Enum(PyObject *o) {
+ PyObject* tmp;
+ struct __pyx_MemviewEnum_obj *p = (struct __pyx_MemviewEnum_obj *)o;
+ tmp = ((PyObject*)p->name);
+ p->name = Py_None; Py_INCREF(Py_None);
+ Py_XDECREF(tmp);
+ return 0;
+}
+
+static PyMethodDef __pyx_methods_Enum[] = {
+ {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_MemviewEnum_1__reduce_cython__, METH_NOARGS, 0},
+ {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_MemviewEnum_3__setstate_cython__, METH_O, 0},
+ {0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type___pyx_MemviewEnum = {
+ PyVarObject_HEAD_INIT(0, 0)
+ "monotonic_align.core.Enum", /*tp_name*/
+ sizeof(struct __pyx_MemviewEnum_obj), /*tp_basicsize*/
+ 0, /*tp_itemsize*/
+ __pyx_tp_dealloc_Enum, /*tp_dealloc*/
+ #if PY_VERSION_HEX < 0x030800b4
+ 0, /*tp_print*/
+ #endif
+ #if PY_VERSION_HEX >= 0x030800b4
+ 0, /*tp_vectorcall_offset*/
+ #endif
+ 0, /*tp_getattr*/
+ 0, /*tp_setattr*/
+ #if PY_MAJOR_VERSION < 3
+ 0, /*tp_compare*/
+ #endif
+ #if PY_MAJOR_VERSION >= 3
+ 0, /*tp_as_async*/
+ #endif
+ __pyx_MemviewEnum___repr__, /*tp_repr*/
+ 0, /*tp_as_number*/
+ 0, /*tp_as_sequence*/
+ 0, /*tp_as_mapping*/
+ 0, /*tp_hash*/
+ 0, /*tp_call*/
+ 0, /*tp_str*/
+ 0, /*tp_getattro*/
+ 0, /*tp_setattro*/
+ 0, /*tp_as_buffer*/
+ Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+ 0, /*tp_doc*/
+ __pyx_tp_traverse_Enum, /*tp_traverse*/
+ __pyx_tp_clear_Enum, /*tp_clear*/
+ 0, /*tp_richcompare*/
+ 0, /*tp_weaklistoffset*/
+ 0, /*tp_iter*/
+ 0, /*tp_iternext*/
+ __pyx_methods_Enum, /*tp_methods*/
+ 0, /*tp_members*/
+ 0, /*tp_getset*/
+ 0, /*tp_base*/
+ 0, /*tp_dict*/
+ 0, /*tp_descr_get*/
+ 0, /*tp_descr_set*/
+ 0, /*tp_dictoffset*/
+ __pyx_MemviewEnum___init__, /*tp_init*/
+ 0, /*tp_alloc*/
+ __pyx_tp_new_Enum, /*tp_new*/
+ 0, /*tp_free*/
+ 0, /*tp_is_gc*/
+ 0, /*tp_bases*/
+ 0, /*tp_mro*/
+ 0, /*tp_cache*/
+ 0, /*tp_subclasses*/
+ 0, /*tp_weaklist*/
+ 0, /*tp_del*/
+ 0, /*tp_version_tag*/
+ #if PY_VERSION_HEX >= 0x030400a1
+ 0, /*tp_finalize*/
+ #endif
+ #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+ 0, /*tp_vectorcall*/
+ #endif
+ #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+ 0, /*tp_print*/
+ #endif
+ #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+ 0, /*tp_pypy_flags*/
+ #endif
+};
+static struct __pyx_vtabstruct_memoryview __pyx_vtable_memoryview;
+
+static PyObject *__pyx_tp_new_memoryview(PyTypeObject *t, PyObject *a, PyObject *k) {
+ struct __pyx_memoryview_obj *p;
+ PyObject *o;
+ if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
+ o = (*t->tp_alloc)(t, 0);
+ } else {
+ o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
+ }
+ if (unlikely(!o)) return 0;
+ p = ((struct __pyx_memoryview_obj *)o);
+ p->__pyx_vtab = __pyx_vtabptr_memoryview;
+ p->obj = Py_None; Py_INCREF(Py_None);
+ p->_size = Py_None; Py_INCREF(Py_None);
+ p->_array_interface = Py_None; Py_INCREF(Py_None);
+ p->view.obj = NULL;
+ if (unlikely(__pyx_memoryview___cinit__(o, a, k) < 0)) goto bad;
+ return o;
+ bad:
+ Py_DECREF(o); o = 0;
+ return NULL;
+}
+
+static void __pyx_tp_dealloc_memoryview(PyObject *o) {
+ struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o;
+ #if CYTHON_USE_TP_FINALIZE
+ if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+ if (PyObject_CallFinalizerFromDealloc(o)) return;
+ }
+ #endif
+ PyObject_GC_UnTrack(o);
+ {
+ PyObject *etype, *eval, *etb;
+ PyErr_Fetch(&etype, &eval, &etb);
+ __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
+ __pyx_memoryview___dealloc__(o);
+ __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
+ PyErr_Restore(etype, eval, etb);
+ }
+ Py_CLEAR(p->obj);
+ Py_CLEAR(p->_size);
+ Py_CLEAR(p->_array_interface);
+ (*Py_TYPE(o)->tp_free)(o);
+}
+
+static int __pyx_tp_traverse_memoryview(PyObject *o, visitproc v, void *a) {
+ int e;
+ struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o;
+ if (p->obj) {
+ e = (*v)(p->obj, a); if (e) return e;
+ }
+ if (p->_size) {
+ e = (*v)(p->_size, a); if (e) return e;
+ }
+ if (p->_array_interface) {
+ e = (*v)(p->_array_interface, a); if (e) return e;
+ }
+ if (p->view.obj) {
+ e = (*v)(p->view.obj, a); if (e) return e;
+ }
+ return 0;
+}
+
+static int __pyx_tp_clear_memoryview(PyObject *o) {
+ PyObject* tmp;
+ struct __pyx_memoryview_obj *p = (struct __pyx_memoryview_obj *)o;
+ tmp = ((PyObject*)p->obj);
+ p->obj = Py_None; Py_INCREF(Py_None);
+ Py_XDECREF(tmp);
+ tmp = ((PyObject*)p->_size);
+ p->_size = Py_None; Py_INCREF(Py_None);
+ Py_XDECREF(tmp);
+ tmp = ((PyObject*)p->_array_interface);
+ p->_array_interface = Py_None; Py_INCREF(Py_None);
+ Py_XDECREF(tmp);
+ Py_CLEAR(p->view.obj);
+ return 0;
+}
+static PyObject *__pyx_sq_item_memoryview(PyObject *o, Py_ssize_t i) {
+ PyObject *r;
+ PyObject *x = PyInt_FromSsize_t(i); if(!x) return 0;
+ r = Py_TYPE(o)->tp_as_mapping->mp_subscript(o, x);
+ Py_DECREF(x);
+ return r;
+}
+
+static int __pyx_mp_ass_subscript_memoryview(PyObject *o, PyObject *i, PyObject *v) {
+ if (v) {
+ return __pyx_memoryview___setitem__(o, i, v);
+ }
+ else {
+ PyErr_Format(PyExc_NotImplementedError,
+ "Subscript deletion not supported by %.200s", Py_TYPE(o)->tp_name);
+ return -1;
+ }
+}
+
+static PyObject *__pyx_getprop___pyx_memoryview_T(PyObject *o, CYTHON_UNUSED void *x) {
+ return __pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(o);
+}
+
+static PyObject *__pyx_getprop___pyx_memoryview_base(PyObject *o, CYTHON_UNUSED void *x) {
+ return __pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(o);
+}
+
+static PyObject *__pyx_getprop___pyx_memoryview_shape(PyObject *o, CYTHON_UNUSED void *x) {
+ return __pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(o);
+}
+
+static PyObject *__pyx_getprop___pyx_memoryview_strides(PyObject *o, CYTHON_UNUSED void *x) {
+ return __pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(o);
+}
+
+static PyObject *__pyx_getprop___pyx_memoryview_suboffsets(PyObject *o, CYTHON_UNUSED void *x) {
+ return __pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(o);
+}
+
+static PyObject *__pyx_getprop___pyx_memoryview_ndim(PyObject *o, CYTHON_UNUSED void *x) {
+ return __pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(o);
+}
+
+static PyObject *__pyx_getprop___pyx_memoryview_itemsize(PyObject *o, CYTHON_UNUSED void *x) {
+ return __pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(o);
+}
+
+static PyObject *__pyx_getprop___pyx_memoryview_nbytes(PyObject *o, CYTHON_UNUSED void *x) {
+ return __pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(o);
+}
+
+static PyObject *__pyx_getprop___pyx_memoryview_size(PyObject *o, CYTHON_UNUSED void *x) {
+ return __pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods_memoryview[] = {
+ {"is_c_contig", (PyCFunction)__pyx_memoryview_is_c_contig, METH_NOARGS, 0},
+ {"is_f_contig", (PyCFunction)__pyx_memoryview_is_f_contig, METH_NOARGS, 0},
+ {"copy", (PyCFunction)__pyx_memoryview_copy, METH_NOARGS, 0},
+ {"copy_fortran", (PyCFunction)__pyx_memoryview_copy_fortran, METH_NOARGS, 0},
+ {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_memoryview_1__reduce_cython__, METH_NOARGS, 0},
+ {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_memoryview_3__setstate_cython__, METH_O, 0},
+ {0, 0, 0, 0}
+};
+
+static struct PyGetSetDef __pyx_getsets_memoryview[] = {
+ {(char *)"T", __pyx_getprop___pyx_memoryview_T, 0, (char *)0, 0},
+ {(char *)"base", __pyx_getprop___pyx_memoryview_base, 0, (char *)0, 0},
+ {(char *)"shape", __pyx_getprop___pyx_memoryview_shape, 0, (char *)0, 0},
+ {(char *)"strides", __pyx_getprop___pyx_memoryview_strides, 0, (char *)0, 0},
+ {(char *)"suboffsets", __pyx_getprop___pyx_memoryview_suboffsets, 0, (char *)0, 0},
+ {(char *)"ndim", __pyx_getprop___pyx_memoryview_ndim, 0, (char *)0, 0},
+ {(char *)"itemsize", __pyx_getprop___pyx_memoryview_itemsize, 0, (char *)0, 0},
+ {(char *)"nbytes", __pyx_getprop___pyx_memoryview_nbytes, 0, (char *)0, 0},
+ {(char *)"size", __pyx_getprop___pyx_memoryview_size, 0, (char *)0, 0},
+ {0, 0, 0, 0, 0}
+};
+
+static PySequenceMethods __pyx_tp_as_sequence_memoryview = {
+ __pyx_memoryview___len__, /*sq_length*/
+ 0, /*sq_concat*/
+ 0, /*sq_repeat*/
+ __pyx_sq_item_memoryview, /*sq_item*/
+ 0, /*sq_slice*/
+ 0, /*sq_ass_item*/
+ 0, /*sq_ass_slice*/
+ 0, /*sq_contains*/
+ 0, /*sq_inplace_concat*/
+ 0, /*sq_inplace_repeat*/
+};
+
+static PyMappingMethods __pyx_tp_as_mapping_memoryview = {
+ __pyx_memoryview___len__, /*mp_length*/
+ __pyx_memoryview___getitem__, /*mp_subscript*/
+ __pyx_mp_ass_subscript_memoryview, /*mp_ass_subscript*/
+};
+
+static PyBufferProcs __pyx_tp_as_buffer_memoryview = {
+ #if PY_MAJOR_VERSION < 3
+ 0, /*bf_getreadbuffer*/
+ #endif
+ #if PY_MAJOR_VERSION < 3
+ 0, /*bf_getwritebuffer*/
+ #endif
+ #if PY_MAJOR_VERSION < 3
+ 0, /*bf_getsegcount*/
+ #endif
+ #if PY_MAJOR_VERSION < 3
+ 0, /*bf_getcharbuffer*/
+ #endif
+ __pyx_memoryview_getbuffer, /*bf_getbuffer*/
+ 0, /*bf_releasebuffer*/
+};
+
+static PyTypeObject __pyx_type___pyx_memoryview = {
+ PyVarObject_HEAD_INIT(0, 0)
+ "monotonic_align.core.memoryview", /*tp_name*/
+ sizeof(struct __pyx_memoryview_obj), /*tp_basicsize*/
+ 0, /*tp_itemsize*/
+ __pyx_tp_dealloc_memoryview, /*tp_dealloc*/
+ #if PY_VERSION_HEX < 0x030800b4
+ 0, /*tp_print*/
+ #endif
+ #if PY_VERSION_HEX >= 0x030800b4
+ 0, /*tp_vectorcall_offset*/
+ #endif
+ 0, /*tp_getattr*/
+ 0, /*tp_setattr*/
+ #if PY_MAJOR_VERSION < 3
+ 0, /*tp_compare*/
+ #endif
+ #if PY_MAJOR_VERSION >= 3
+ 0, /*tp_as_async*/
+ #endif
+ __pyx_memoryview___repr__, /*tp_repr*/
+ 0, /*tp_as_number*/
+ &__pyx_tp_as_sequence_memoryview, /*tp_as_sequence*/
+ &__pyx_tp_as_mapping_memoryview, /*tp_as_mapping*/
+ 0, /*tp_hash*/
+ 0, /*tp_call*/
+ __pyx_memoryview___str__, /*tp_str*/
+ 0, /*tp_getattro*/
+ 0, /*tp_setattro*/
+ &__pyx_tp_as_buffer_memoryview, /*tp_as_buffer*/
+ Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+ 0, /*tp_doc*/
+ __pyx_tp_traverse_memoryview, /*tp_traverse*/
+ __pyx_tp_clear_memoryview, /*tp_clear*/
+ 0, /*tp_richcompare*/
+ 0, /*tp_weaklistoffset*/
+ 0, /*tp_iter*/
+ 0, /*tp_iternext*/
+ __pyx_methods_memoryview, /*tp_methods*/
+ 0, /*tp_members*/
+ __pyx_getsets_memoryview, /*tp_getset*/
+ 0, /*tp_base*/
+ 0, /*tp_dict*/
+ 0, /*tp_descr_get*/
+ 0, /*tp_descr_set*/
+ 0, /*tp_dictoffset*/
+ 0, /*tp_init*/
+ 0, /*tp_alloc*/
+ __pyx_tp_new_memoryview, /*tp_new*/
+ 0, /*tp_free*/
+ 0, /*tp_is_gc*/
+ 0, /*tp_bases*/
+ 0, /*tp_mro*/
+ 0, /*tp_cache*/
+ 0, /*tp_subclasses*/
+ 0, /*tp_weaklist*/
+ 0, /*tp_del*/
+ 0, /*tp_version_tag*/
+ #if PY_VERSION_HEX >= 0x030400a1
+ 0, /*tp_finalize*/
+ #endif
+ #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+ 0, /*tp_vectorcall*/
+ #endif
+ #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+ 0, /*tp_print*/
+ #endif
+ #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+ 0, /*tp_pypy_flags*/
+ #endif
+};
+static struct __pyx_vtabstruct__memoryviewslice __pyx_vtable__memoryviewslice;
+
+static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyObject *k) {
+ struct __pyx_memoryviewslice_obj *p;
+ PyObject *o = __pyx_tp_new_memoryview(t, a, k);
+ if (unlikely(!o)) return 0;
+ p = ((struct __pyx_memoryviewslice_obj *)o);
+ p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_memoryview*)__pyx_vtabptr__memoryviewslice;
+ p->from_object = Py_None; Py_INCREF(Py_None);
+ p->from_slice.memview = NULL;
+ return o;
+}
+
+static void __pyx_tp_dealloc__memoryviewslice(PyObject *o) {
+ struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o;
+ #if CYTHON_USE_TP_FINALIZE
+ if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+ if (PyObject_CallFinalizerFromDealloc(o)) return;
+ }
+ #endif
+ PyObject_GC_UnTrack(o);
+ {
+ PyObject *etype, *eval, *etb;
+ PyErr_Fetch(&etype, &eval, &etb);
+ __Pyx_SET_REFCNT(o, Py_REFCNT(o) + 1);
+ __pyx_memoryviewslice___dealloc__(o);
+ __Pyx_SET_REFCNT(o, Py_REFCNT(o) - 1);
+ PyErr_Restore(etype, eval, etb);
+ }
+ Py_CLEAR(p->from_object);
+ PyObject_GC_Track(o);
+ __pyx_tp_dealloc_memoryview(o);
+}
+
+static int __pyx_tp_traverse__memoryviewslice(PyObject *o, visitproc v, void *a) {
+ int e;
+ struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o;
+ e = __pyx_tp_traverse_memoryview(o, v, a); if (e) return e;
+ if (p->from_object) {
+ e = (*v)(p->from_object, a); if (e) return e;
+ }
+ return 0;
+}
+
+static int __pyx_tp_clear__memoryviewslice(PyObject *o) {
+ PyObject* tmp;
+ struct __pyx_memoryviewslice_obj *p = (struct __pyx_memoryviewslice_obj *)o;
+ __pyx_tp_clear_memoryview(o);
+ tmp = ((PyObject*)p->from_object);
+ p->from_object = Py_None; Py_INCREF(Py_None);
+ Py_XDECREF(tmp);
+ __PYX_XDEC_MEMVIEW(&p->from_slice, 1);
+ return 0;
+}
+
+static PyObject *__pyx_getprop___pyx_memoryviewslice_base(PyObject *o, CYTHON_UNUSED void *x) {
+ return __pyx_pw_15View_dot_MemoryView_16_memoryviewslice_4base_1__get__(o);
+}
+
+static PyMethodDef __pyx_methods__memoryviewslice[] = {
+ {"__reduce_cython__", (PyCFunction)__pyx_pw___pyx_memoryviewslice_1__reduce_cython__, METH_NOARGS, 0},
+ {"__setstate_cython__", (PyCFunction)__pyx_pw___pyx_memoryviewslice_3__setstate_cython__, METH_O, 0},
+ {0, 0, 0, 0}
+};
+
+static struct PyGetSetDef __pyx_getsets__memoryviewslice[] = {
+ {(char *)"base", __pyx_getprop___pyx_memoryviewslice_base, 0, (char *)0, 0},
+ {0, 0, 0, 0, 0}
+};
+
+static PyTypeObject __pyx_type___pyx_memoryviewslice = {
+ PyVarObject_HEAD_INIT(0, 0)
+ "monotonic_align.core._memoryviewslice", /*tp_name*/
+ sizeof(struct __pyx_memoryviewslice_obj), /*tp_basicsize*/
+ 0, /*tp_itemsize*/
+ __pyx_tp_dealloc__memoryviewslice, /*tp_dealloc*/
+ #if PY_VERSION_HEX < 0x030800b4
+ 0, /*tp_print*/
+ #endif
+ #if PY_VERSION_HEX >= 0x030800b4
+ 0, /*tp_vectorcall_offset*/
+ #endif
+ 0, /*tp_getattr*/
+ 0, /*tp_setattr*/
+ #if PY_MAJOR_VERSION < 3
+ 0, /*tp_compare*/
+ #endif
+ #if PY_MAJOR_VERSION >= 3
+ 0, /*tp_as_async*/
+ #endif
+ #if CYTHON_COMPILING_IN_PYPY
+ __pyx_memoryview___repr__, /*tp_repr*/
+ #else
+ 0, /*tp_repr*/
+ #endif
+ 0, /*tp_as_number*/
+ 0, /*tp_as_sequence*/
+ 0, /*tp_as_mapping*/
+ 0, /*tp_hash*/
+ 0, /*tp_call*/
+ #if CYTHON_COMPILING_IN_PYPY
+ __pyx_memoryview___str__, /*tp_str*/
+ #else
+ 0, /*tp_str*/
+ #endif
+ 0, /*tp_getattro*/
+ 0, /*tp_setattro*/
+ 0, /*tp_as_buffer*/
+ Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
+ "Internal class for passing memoryview slices to Python", /*tp_doc*/
+ __pyx_tp_traverse__memoryviewslice, /*tp_traverse*/
+ __pyx_tp_clear__memoryviewslice, /*tp_clear*/
+ 0, /*tp_richcompare*/
+ 0, /*tp_weaklistoffset*/
+ 0, /*tp_iter*/
+ 0, /*tp_iternext*/
+ __pyx_methods__memoryviewslice, /*tp_methods*/
+ 0, /*tp_members*/
+ __pyx_getsets__memoryviewslice, /*tp_getset*/
+ 0, /*tp_base*/
+ 0, /*tp_dict*/
+ 0, /*tp_descr_get*/
+ 0, /*tp_descr_set*/
+ 0, /*tp_dictoffset*/
+ 0, /*tp_init*/
+ 0, /*tp_alloc*/
+ __pyx_tp_new__memoryviewslice, /*tp_new*/
+ 0, /*tp_free*/
+ 0, /*tp_is_gc*/
+ 0, /*tp_bases*/
+ 0, /*tp_mro*/
+ 0, /*tp_cache*/
+ 0, /*tp_subclasses*/
+ 0, /*tp_weaklist*/
+ 0, /*tp_del*/
+ 0, /*tp_version_tag*/
+ #if PY_VERSION_HEX >= 0x030400a1
+ 0, /*tp_finalize*/
+ #endif
+ #if PY_VERSION_HEX >= 0x030800b1 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07030800)
+ 0, /*tp_vectorcall*/
+ #endif
+ #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
+ 0, /*tp_print*/
+ #endif
+ #if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX >= 0x03090000
+ 0, /*tp_pypy_flags*/
+ #endif
+};
+
+static PyMethodDef __pyx_methods[] = {
+ {"maximum_path_c", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_15monotonic_align_4core_1maximum_path_c, METH_VARARGS|METH_KEYWORDS, 0},
+ {0, 0, 0, 0}
+};
+
+#if PY_MAJOR_VERSION >= 3
+#if CYTHON_PEP489_MULTI_PHASE_INIT
+static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/
+static int __pyx_pymod_exec_core(PyObject* module); /*proto*/
+static PyModuleDef_Slot __pyx_moduledef_slots[] = {
+ {Py_mod_create, (void*)__pyx_pymod_create},
+ {Py_mod_exec, (void*)__pyx_pymod_exec_core},
+ {0, NULL}
+};
+#endif
+
+static struct PyModuleDef __pyx_moduledef = {
+ PyModuleDef_HEAD_INIT,
+ "core",
+ 0, /* m_doc */
+ #if CYTHON_PEP489_MULTI_PHASE_INIT
+ 0, /* m_size */
+ #else
+ -1, /* m_size */
+ #endif
+ __pyx_methods /* m_methods */,
+ #if CYTHON_PEP489_MULTI_PHASE_INIT
+ __pyx_moduledef_slots, /* m_slots */
+ #else
+ NULL, /* m_reload */
+ #endif
+ NULL, /* m_traverse */
+ NULL, /* m_clear */
+ NULL /* m_free */
+};
+#endif
+#ifndef CYTHON_SMALL_CODE
+#if defined(__clang__)
+ #define CYTHON_SMALL_CODE
+#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
+ #define CYTHON_SMALL_CODE __attribute__((cold))
+#else
+ #define CYTHON_SMALL_CODE
+#endif
+#endif
+
+static __Pyx_StringTabEntry __pyx_string_tab[] = {
+ {&__pyx_n_s_ASCII, __pyx_k_ASCII, sizeof(__pyx_k_ASCII), 0, 0, 1, 1},
+ {&__pyx_kp_s_Buffer_view_does_not_expose_stri, __pyx_k_Buffer_view_does_not_expose_stri, sizeof(__pyx_k_Buffer_view_does_not_expose_stri), 0, 0, 1, 0},
+ {&__pyx_kp_s_Can_only_create_a_buffer_that_is, __pyx_k_Can_only_create_a_buffer_that_is, sizeof(__pyx_k_Can_only_create_a_buffer_that_is), 0, 0, 1, 0},
+ {&__pyx_kp_s_Cannot_assign_to_read_only_memor, __pyx_k_Cannot_assign_to_read_only_memor, sizeof(__pyx_k_Cannot_assign_to_read_only_memor), 0, 0, 1, 0},
+ {&__pyx_kp_s_Cannot_create_writable_memory_vi, __pyx_k_Cannot_create_writable_memory_vi, sizeof(__pyx_k_Cannot_create_writable_memory_vi), 0, 0, 1, 0},
+ {&__pyx_kp_s_Cannot_index_with_type_s, __pyx_k_Cannot_index_with_type_s, sizeof(__pyx_k_Cannot_index_with_type_s), 0, 0, 1, 0},
+ {&__pyx_n_s_Ellipsis, __pyx_k_Ellipsis, sizeof(__pyx_k_Ellipsis), 0, 0, 1, 1},
+ {&__pyx_kp_s_Empty_shape_tuple_for_cython_arr, __pyx_k_Empty_shape_tuple_for_cython_arr, sizeof(__pyx_k_Empty_shape_tuple_for_cython_arr), 0, 0, 1, 0},
+ {&__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_k_Incompatible_checksums_0x_x_vs_0, sizeof(__pyx_k_Incompatible_checksums_0x_x_vs_0), 0, 0, 1, 0},
+ {&__pyx_n_s_IndexError, __pyx_k_IndexError, sizeof(__pyx_k_IndexError), 0, 0, 1, 1},
+ {&__pyx_kp_s_Indirect_dimensions_not_supporte, __pyx_k_Indirect_dimensions_not_supporte, sizeof(__pyx_k_Indirect_dimensions_not_supporte), 0, 0, 1, 0},
+ {&__pyx_kp_s_Invalid_mode_expected_c_or_fortr, __pyx_k_Invalid_mode_expected_c_or_fortr, sizeof(__pyx_k_Invalid_mode_expected_c_or_fortr), 0, 0, 1, 0},
+ {&__pyx_kp_s_Invalid_shape_in_axis_d_d, __pyx_k_Invalid_shape_in_axis_d_d, sizeof(__pyx_k_Invalid_shape_in_axis_d_d), 0, 0, 1, 0},
+ {&__pyx_n_s_MemoryError, __pyx_k_MemoryError, sizeof(__pyx_k_MemoryError), 0, 0, 1, 1},
+ {&__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_k_MemoryView_of_r_at_0x_x, sizeof(__pyx_k_MemoryView_of_r_at_0x_x), 0, 0, 1, 0},
+ {&__pyx_kp_s_MemoryView_of_r_object, __pyx_k_MemoryView_of_r_object, sizeof(__pyx_k_MemoryView_of_r_object), 0, 0, 1, 0},
+ {&__pyx_n_b_O, __pyx_k_O, sizeof(__pyx_k_O), 0, 0, 0, 1},
+ {&__pyx_kp_s_Out_of_bounds_on_buffer_access_a, __pyx_k_Out_of_bounds_on_buffer_access_a, sizeof(__pyx_k_Out_of_bounds_on_buffer_access_a), 0, 0, 1, 0},
+ {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1},
+ {&__pyx_n_s_TypeError, __pyx_k_TypeError, sizeof(__pyx_k_TypeError), 0, 0, 1, 1},
+ {&__pyx_kp_s_Unable_to_convert_item_to_object, __pyx_k_Unable_to_convert_item_to_object, sizeof(__pyx_k_Unable_to_convert_item_to_object), 0, 0, 1, 0},
+ {&__pyx_n_s_ValueError, __pyx_k_ValueError, sizeof(__pyx_k_ValueError), 0, 0, 1, 1},
+ {&__pyx_n_s_View_MemoryView, __pyx_k_View_MemoryView, sizeof(__pyx_k_View_MemoryView), 0, 0, 1, 1},
+ {&__pyx_n_s_allocate_buffer, __pyx_k_allocate_buffer, sizeof(__pyx_k_allocate_buffer), 0, 0, 1, 1},
+ {&__pyx_n_s_base, __pyx_k_base, sizeof(__pyx_k_base), 0, 0, 1, 1},
+ {&__pyx_n_s_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 0, 1, 1},
+ {&__pyx_n_u_c, __pyx_k_c, sizeof(__pyx_k_c), 0, 1, 0, 1},
+ {&__pyx_n_s_class, __pyx_k_class, sizeof(__pyx_k_class), 0, 0, 1, 1},
+ {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1},
+ {&__pyx_kp_s_contiguous_and_direct, __pyx_k_contiguous_and_direct, sizeof(__pyx_k_contiguous_and_direct), 0, 0, 1, 0},
+ {&__pyx_kp_s_contiguous_and_indirect, __pyx_k_contiguous_and_indirect, sizeof(__pyx_k_contiguous_and_indirect), 0, 0, 1, 0},
+ {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1},
+ {&__pyx_n_s_dtype_is_object, __pyx_k_dtype_is_object, sizeof(__pyx_k_dtype_is_object), 0, 0, 1, 1},
+ {&__pyx_n_s_encode, __pyx_k_encode, sizeof(__pyx_k_encode), 0, 0, 1, 1},
+ {&__pyx_n_s_enumerate, __pyx_k_enumerate, sizeof(__pyx_k_enumerate), 0, 0, 1, 1},
+ {&__pyx_n_s_error, __pyx_k_error, sizeof(__pyx_k_error), 0, 0, 1, 1},
+ {&__pyx_n_s_flags, __pyx_k_flags, sizeof(__pyx_k_flags), 0, 0, 1, 1},
+ {&__pyx_n_s_format, __pyx_k_format, sizeof(__pyx_k_format), 0, 0, 1, 1},
+ {&__pyx_n_s_fortran, __pyx_k_fortran, sizeof(__pyx_k_fortran), 0, 0, 1, 1},
+ {&__pyx_n_u_fortran, __pyx_k_fortran, sizeof(__pyx_k_fortran), 0, 1, 0, 1},
+ {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1},
+ {&__pyx_kp_s_got_differing_extents_in_dimensi, __pyx_k_got_differing_extents_in_dimensi, sizeof(__pyx_k_got_differing_extents_in_dimensi), 0, 0, 1, 0},
+ {&__pyx_n_s_id, __pyx_k_id, sizeof(__pyx_k_id), 0, 0, 1, 1},
+ {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1},
+ {&__pyx_n_s_itemsize, __pyx_k_itemsize, sizeof(__pyx_k_itemsize), 0, 0, 1, 1},
+ {&__pyx_kp_s_itemsize_0_for_cython_array, __pyx_k_itemsize_0_for_cython_array, sizeof(__pyx_k_itemsize_0_for_cython_array), 0, 0, 1, 0},
+ {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1},
+ {&__pyx_n_s_memview, __pyx_k_memview, sizeof(__pyx_k_memview), 0, 0, 1, 1},
+ {&__pyx_n_s_mode, __pyx_k_mode, sizeof(__pyx_k_mode), 0, 0, 1, 1},
+ {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1},
+ {&__pyx_n_s_name_2, __pyx_k_name_2, sizeof(__pyx_k_name_2), 0, 0, 1, 1},
+ {&__pyx_n_s_ndim, __pyx_k_ndim, sizeof(__pyx_k_ndim), 0, 0, 1, 1},
+ {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1},
+ {&__pyx_kp_s_no_default___reduce___due_to_non, __pyx_k_no_default___reduce___due_to_non, sizeof(__pyx_k_no_default___reduce___due_to_non), 0, 0, 1, 0},
+ {&__pyx_n_s_obj, __pyx_k_obj, sizeof(__pyx_k_obj), 0, 0, 1, 1},
+ {&__pyx_n_s_pack, __pyx_k_pack, sizeof(__pyx_k_pack), 0, 0, 1, 1},
+ {&__pyx_n_s_paths, __pyx_k_paths, sizeof(__pyx_k_paths), 0, 0, 1, 1},
+ {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1},
+ {&__pyx_n_s_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1},
+ {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1},
+ {&__pyx_n_s_pyx_getbuffer, __pyx_k_pyx_getbuffer, sizeof(__pyx_k_pyx_getbuffer), 0, 0, 1, 1},
+ {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1},
+ {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1},
+ {&__pyx_n_s_pyx_type, __pyx_k_pyx_type, sizeof(__pyx_k_pyx_type), 0, 0, 1, 1},
+ {&__pyx_n_s_pyx_unpickle_Enum, __pyx_k_pyx_unpickle_Enum, sizeof(__pyx_k_pyx_unpickle_Enum), 0, 0, 1, 1},
+ {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1},
+ {&__pyx_n_s_range, __pyx_k_range, sizeof(__pyx_k_range), 0, 0, 1, 1},
+ {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1},
+ {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1},
+ {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1},
+ {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1},
+ {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1},
+ {&__pyx_n_s_shape, __pyx_k_shape, sizeof(__pyx_k_shape), 0, 0, 1, 1},
+ {&__pyx_n_s_size, __pyx_k_size, sizeof(__pyx_k_size), 0, 0, 1, 1},
+ {&__pyx_n_s_start, __pyx_k_start, sizeof(__pyx_k_start), 0, 0, 1, 1},
+ {&__pyx_n_s_step, __pyx_k_step, sizeof(__pyx_k_step), 0, 0, 1, 1},
+ {&__pyx_n_s_stop, __pyx_k_stop, sizeof(__pyx_k_stop), 0, 0, 1, 1},
+ {&__pyx_kp_s_strided_and_direct, __pyx_k_strided_and_direct, sizeof(__pyx_k_strided_and_direct), 0, 0, 1, 0},
+ {&__pyx_kp_s_strided_and_direct_or_indirect, __pyx_k_strided_and_direct_or_indirect, sizeof(__pyx_k_strided_and_direct_or_indirect), 0, 0, 1, 0},
+ {&__pyx_kp_s_strided_and_indirect, __pyx_k_strided_and_indirect, sizeof(__pyx_k_strided_and_indirect), 0, 0, 1, 0},
+ {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0},
+ {&__pyx_n_s_struct, __pyx_k_struct, sizeof(__pyx_k_struct), 0, 0, 1, 1},
+ {&__pyx_n_s_t_xs, __pyx_k_t_xs, sizeof(__pyx_k_t_xs), 0, 0, 1, 1},
+ {&__pyx_n_s_t_ys, __pyx_k_t_ys, sizeof(__pyx_k_t_ys), 0, 0, 1, 1},
+ {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1},
+ {&__pyx_kp_s_unable_to_allocate_array_data, __pyx_k_unable_to_allocate_array_data, sizeof(__pyx_k_unable_to_allocate_array_data), 0, 0, 1, 0},
+ {&__pyx_kp_s_unable_to_allocate_shape_and_str, __pyx_k_unable_to_allocate_shape_and_str, sizeof(__pyx_k_unable_to_allocate_shape_and_str), 0, 0, 1, 0},
+ {&__pyx_n_s_unpack, __pyx_k_unpack, sizeof(__pyx_k_unpack), 0, 0, 1, 1},
+ {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1},
+ {&__pyx_n_s_values, __pyx_k_values, sizeof(__pyx_k_values), 0, 0, 1, 1},
+ {0, 0, 0, 0, 0, 0, 0}
+};
+static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) {
+ __pyx_builtin_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(0, 15, __pyx_L1_error)
+ __pyx_builtin_ValueError = __Pyx_GetBuiltinName(__pyx_n_s_ValueError); if (!__pyx_builtin_ValueError) __PYX_ERR(1, 134, __pyx_L1_error)
+ __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(1, 149, __pyx_L1_error)
+ __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(1, 152, __pyx_L1_error)
+ __pyx_builtin_TypeError = __Pyx_GetBuiltinName(__pyx_n_s_TypeError); if (!__pyx_builtin_TypeError) __PYX_ERR(1, 2, __pyx_L1_error)
+ __pyx_builtin_Ellipsis = __Pyx_GetBuiltinName(__pyx_n_s_Ellipsis); if (!__pyx_builtin_Ellipsis) __PYX_ERR(1, 406, __pyx_L1_error)
+ __pyx_builtin_id = __Pyx_GetBuiltinName(__pyx_n_s_id); if (!__pyx_builtin_id) __PYX_ERR(1, 615, __pyx_L1_error)
+ __pyx_builtin_IndexError = __Pyx_GetBuiltinName(__pyx_n_s_IndexError); if (!__pyx_builtin_IndexError) __PYX_ERR(1, 834, __pyx_L1_error)
+ return 0;
+ __pyx_L1_error:;
+ return -1;
+}
+
+static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
+
+ /* "View.MemoryView":134
+ *
+ * if not self.ndim:
+ * raise ValueError("Empty shape tuple for cython.array") # <<<<<<<<<<<<<<
+ *
+ * if itemsize <= 0:
+ */
+ __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_s_Empty_shape_tuple_for_cython_arr); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(1, 134, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_tuple__2);
+ __Pyx_GIVEREF(__pyx_tuple__2);
+
+ /* "View.MemoryView":137
+ *
+ * if itemsize <= 0:
+ * raise ValueError("itemsize <= 0 for cython.array") # <<<<<<<<<<<<<<
+ *
+ * if not isinstance(format, bytes):
+ */
+ __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_s_itemsize_0_for_cython_array); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(1, 137, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_tuple__3);
+ __Pyx_GIVEREF(__pyx_tuple__3);
+
+ /* "View.MemoryView":149
+ *
+ * if not self._shape:
+ * raise MemoryError("unable to allocate shape and strides.") # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_unable_to_allocate_shape_and_str); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(1, 149, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_tuple__4);
+ __Pyx_GIVEREF(__pyx_tuple__4);
+
+ /* "View.MemoryView":177
+ * self.data = malloc(self.len)
+ * if not self.data:
+ * raise MemoryError("unable to allocate array data.") # <<<<<<<<<<<<<<
+ *
+ * if self.dtype_is_object:
+ */
+ __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_s_unable_to_allocate_array_data); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(1, 177, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_tuple__5);
+ __Pyx_GIVEREF(__pyx_tuple__5);
+
+ /* "View.MemoryView":193
+ * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ * if not (flags & bufmode):
+ * raise ValueError("Can only create a buffer that is contiguous in memory.") # <<<<<<<<<<<<<<
+ * info.buf = self.data
+ * info.len = self.len
+ */
+ __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_s_Can_only_create_a_buffer_that_is); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(1, 193, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_tuple__6);
+ __Pyx_GIVEREF(__pyx_tuple__6);
+
+ /* "(tree fragment)":2
+ * def __reduce_cython__(self):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<<
+ * def __setstate_cython__(self, __pyx_state):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+ __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(1, 2, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_tuple__7);
+ __Pyx_GIVEREF(__pyx_tuple__7);
+
+ /* "(tree fragment)":4
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<<
+ */
+ __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(1, 4, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_tuple__8);
+ __Pyx_GIVEREF(__pyx_tuple__8);
+
+ /* "View.MemoryView":420
+ * def __setitem__(memoryview self, object index, object value):
+ * if self.view.readonly:
+ * raise TypeError("Cannot assign to read-only memoryview") # <<<<<<<<<<<<<<
+ *
+ * have_slices, index = _unellipsify(index, self.view.ndim)
+ */
+ __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_s_Cannot_assign_to_read_only_memor); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(1, 420, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_tuple__9);
+ __Pyx_GIVEREF(__pyx_tuple__9);
+
+ /* "View.MemoryView":497
+ * result = struct.unpack(self.view.format, bytesitem)
+ * except struct.error:
+ * raise ValueError("Unable to convert item to object") # <<<<<<<<<<<<<<
+ * else:
+ * if len(self.view.format) == 1:
+ */
+ __pyx_tuple__10 = PyTuple_Pack(1, __pyx_kp_s_Unable_to_convert_item_to_object); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(1, 497, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_tuple__10);
+ __Pyx_GIVEREF(__pyx_tuple__10);
+
+ /* "View.MemoryView":522
+ * def __getbuffer__(self, Py_buffer *info, int flags):
+ * if flags & PyBUF_WRITABLE and self.view.readonly:
+ * raise ValueError("Cannot create writable memory view from read-only memoryview") # <<<<<<<<<<<<<<
+ *
+ * if flags & PyBUF_ND:
+ */
+ __pyx_tuple__11 = PyTuple_Pack(1, __pyx_kp_s_Cannot_create_writable_memory_vi); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(1, 522, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_tuple__11);
+ __Pyx_GIVEREF(__pyx_tuple__11);
+
+ /* "View.MemoryView":572
+ * if self.view.strides == NULL:
+ *
+ * raise ValueError("Buffer view does not expose strides") # <<<<<<<<<<<<<<
+ *
+ * return tuple([stride for stride in self.view.strides[:self.view.ndim]])
+ */
+ __pyx_tuple__12 = PyTuple_Pack(1, __pyx_kp_s_Buffer_view_does_not_expose_stri); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(1, 572, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_tuple__12);
+ __Pyx_GIVEREF(__pyx_tuple__12);
+
+ /* "View.MemoryView":579
+ * def suboffsets(self):
+ * if self.view.suboffsets == NULL:
+ * return (-1,) * self.view.ndim # <<<<<<<<<<<<<<
+ *
+ * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]])
+ */
+ __pyx_tuple__13 = PyTuple_New(1); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(1, 579, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_tuple__13);
+ __Pyx_INCREF(__pyx_int_neg_1);
+ __Pyx_GIVEREF(__pyx_int_neg_1);
+ PyTuple_SET_ITEM(__pyx_tuple__13, 0, __pyx_int_neg_1);
+ __Pyx_GIVEREF(__pyx_tuple__13);
+
+ /* "(tree fragment)":2
+ * def __reduce_cython__(self):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<<
+ * def __setstate_cython__(self, __pyx_state):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+ __pyx_tuple__14 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(1, 2, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_tuple__14);
+ __Pyx_GIVEREF(__pyx_tuple__14);
+
+ /* "(tree fragment)":4
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<<
+ */
+ __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(1, 4, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_tuple__15);
+ __Pyx_GIVEREF(__pyx_tuple__15);
+
+ /* "View.MemoryView":684
+ * if item is Ellipsis:
+ * if not seen_ellipsis:
+ * result.extend([slice(None)] * (ndim - len(tup) + 1)) # <<<<<<<<<<<<<<
+ * seen_ellipsis = True
+ * else:
+ */
+ __pyx_slice__16 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__16)) __PYX_ERR(1, 684, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_slice__16);
+ __Pyx_GIVEREF(__pyx_slice__16);
+
+ /* "View.MemoryView":705
+ * for suboffset in suboffsets[:ndim]:
+ * if suboffset >= 0:
+ * raise ValueError("Indirect dimensions not supported") # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_s_Indirect_dimensions_not_supporte); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(1, 705, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_tuple__17);
+ __Pyx_GIVEREF(__pyx_tuple__17);
+
+ /* "(tree fragment)":2
+ * def __reduce_cython__(self):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<<
+ * def __setstate_cython__(self, __pyx_state):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ */
+ __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(1, 2, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_tuple__18);
+ __Pyx_GIVEREF(__pyx_tuple__18);
+
+ /* "(tree fragment)":4
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__")
+ * def __setstate_cython__(self, __pyx_state):
+ * raise TypeError("no default __reduce__ due to non-trivial __cinit__") # <<<<<<<<<<<<<<
+ */
+ __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_s_no_default___reduce___due_to_non); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(1, 4, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_tuple__19);
+ __Pyx_GIVEREF(__pyx_tuple__19);
+ __pyx_tuple__20 = PyTuple_Pack(3, __pyx_int_184977713, __pyx_int_136983863, __pyx_int_112105877); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(1, 4, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_tuple__20);
+ __Pyx_GIVEREF(__pyx_tuple__20);
+
+ /* "View.MemoryView":287
+ * return self.name
+ *
+ * cdef generic = Enum("") # <<<<<<<<<<<<<<
+ * cdef strided = Enum("") # default
+ * cdef indirect = Enum("")
+ */
+ __pyx_tuple__21 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct_or_indirect); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(1, 287, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_tuple__21);
+ __Pyx_GIVEREF(__pyx_tuple__21);
+
+ /* "View.MemoryView":288
+ *
+ * cdef generic = Enum("")
+ * cdef strided = Enum("") # default # <<<<<<<<<<<<<<
+ * cdef indirect = Enum("")
+ *
+ */
+ __pyx_tuple__22 = PyTuple_Pack(1, __pyx_kp_s_strided_and_direct); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(1, 288, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_tuple__22);
+ __Pyx_GIVEREF(__pyx_tuple__22);
+
+ /* "View.MemoryView":289
+ * cdef generic = Enum("")
+ * cdef strided = Enum("") # default
+ * cdef indirect = Enum("") # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_tuple__23 = PyTuple_Pack(1, __pyx_kp_s_strided_and_indirect); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(1, 289, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_tuple__23);
+ __Pyx_GIVEREF(__pyx_tuple__23);
+
+ /* "View.MemoryView":292
+ *
+ *
+ * cdef contiguous = Enum("") # <<<<<<<<<<<<<<
+ * cdef indirect_contiguous = Enum("")
+ *
+ */
+ __pyx_tuple__24 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_direct); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(1, 292, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_tuple__24);
+ __Pyx_GIVEREF(__pyx_tuple__24);
+
+ /* "View.MemoryView":293
+ *
+ * cdef contiguous = Enum("")
+ * cdef indirect_contiguous = Enum("") # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_tuple__25 = PyTuple_Pack(1, __pyx_kp_s_contiguous_and_indirect); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(1, 293, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_tuple__25);
+ __Pyx_GIVEREF(__pyx_tuple__25);
+
+ /* "(tree fragment)":1
+ * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<<
+ * cdef object __pyx_PickleError
+ * cdef object __pyx_result
+ */
+ __pyx_tuple__26 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(1, 1, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_tuple__26);
+ __Pyx_GIVEREF(__pyx_tuple__26);
+ __pyx_codeobj__27 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__26, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_Enum, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__27)) __PYX_ERR(1, 1, __pyx_L1_error)
+ __Pyx_RefNannyFinishContext();
+ return 0;
+ __pyx_L1_error:;
+ __Pyx_RefNannyFinishContext();
+ return -1;
+}
+
+static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) {
+ /* InitThreads.init */
+ #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0
+PyEval_InitThreads();
+#endif
+
+if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 1, __pyx_L1_error)
+
+ if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
+ __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error)
+ __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error)
+ __pyx_int_112105877 = PyInt_FromLong(112105877L); if (unlikely(!__pyx_int_112105877)) __PYX_ERR(0, 1, __pyx_L1_error)
+ __pyx_int_136983863 = PyInt_FromLong(136983863L); if (unlikely(!__pyx_int_136983863)) __PYX_ERR(0, 1, __pyx_L1_error)
+ __pyx_int_184977713 = PyInt_FromLong(184977713L); if (unlikely(!__pyx_int_184977713)) __PYX_ERR(0, 1, __pyx_L1_error)
+ __pyx_int_neg_1 = PyInt_FromLong(-1); if (unlikely(!__pyx_int_neg_1)) __PYX_ERR(0, 1, __pyx_L1_error)
+ return 0;
+ __pyx_L1_error:;
+ return -1;
+}
+
+static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/
+static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/
+static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/
+static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/
+static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/
+static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/
+static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/
+
+static int __Pyx_modinit_global_init_code(void) {
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0);
+ /*--- Global init code ---*/
+ generic = Py_None; Py_INCREF(Py_None);
+ strided = Py_None; Py_INCREF(Py_None);
+ indirect = Py_None; Py_INCREF(Py_None);
+ contiguous = Py_None; Py_INCREF(Py_None);
+ indirect_contiguous = Py_None; Py_INCREF(Py_None);
+ __Pyx_RefNannyFinishContext();
+ return 0;
+}
+
+static int __Pyx_modinit_variable_export_code(void) {
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0);
+ /*--- Variable export code ---*/
+ __Pyx_RefNannyFinishContext();
+ return 0;
+}
+
+static int __Pyx_modinit_function_export_code(void) {
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0);
+ /*--- Function export code ---*/
+ __Pyx_RefNannyFinishContext();
+ return 0;
+}
+
+static int __Pyx_modinit_type_init_code(void) {
+ __Pyx_RefNannyDeclarations
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0);
+ /*--- Type init code ---*/
+ __pyx_vtabptr_array = &__pyx_vtable_array;
+ __pyx_vtable_array.get_memview = (PyObject *(*)(struct __pyx_array_obj *))__pyx_array_get_memview;
+ if (PyType_Ready(&__pyx_type___pyx_array) < 0) __PYX_ERR(1, 106, __pyx_L1_error)
+ #if PY_VERSION_HEX < 0x030800B1
+ __pyx_type___pyx_array.tp_print = 0;
+ #endif
+ if (__Pyx_SetVtable(__pyx_type___pyx_array.tp_dict, __pyx_vtabptr_array) < 0) __PYX_ERR(1, 106, __pyx_L1_error)
+ if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_array) < 0) __PYX_ERR(1, 106, __pyx_L1_error)
+ __pyx_array_type = &__pyx_type___pyx_array;
+ if (PyType_Ready(&__pyx_type___pyx_MemviewEnum) < 0) __PYX_ERR(1, 280, __pyx_L1_error)
+ #if PY_VERSION_HEX < 0x030800B1
+ __pyx_type___pyx_MemviewEnum.tp_print = 0;
+ #endif
+ if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_MemviewEnum.tp_dictoffset && __pyx_type___pyx_MemviewEnum.tp_getattro == PyObject_GenericGetAttr)) {
+ __pyx_type___pyx_MemviewEnum.tp_getattro = __Pyx_PyObject_GenericGetAttr;
+ }
+ if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_MemviewEnum) < 0) __PYX_ERR(1, 280, __pyx_L1_error)
+ __pyx_MemviewEnum_type = &__pyx_type___pyx_MemviewEnum;
+ __pyx_vtabptr_memoryview = &__pyx_vtable_memoryview;
+ __pyx_vtable_memoryview.get_item_pointer = (char *(*)(struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_get_item_pointer;
+ __pyx_vtable_memoryview.is_slice = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_is_slice;
+ __pyx_vtable_memoryview.setitem_slice_assignment = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *, PyObject *))__pyx_memoryview_setitem_slice_assignment;
+ __pyx_vtable_memoryview.setitem_slice_assign_scalar = (PyObject *(*)(struct __pyx_memoryview_obj *, struct __pyx_memoryview_obj *, PyObject *))__pyx_memoryview_setitem_slice_assign_scalar;
+ __pyx_vtable_memoryview.setitem_indexed = (PyObject *(*)(struct __pyx_memoryview_obj *, PyObject *, PyObject *))__pyx_memoryview_setitem_indexed;
+ __pyx_vtable_memoryview.convert_item_to_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *))__pyx_memoryview_convert_item_to_object;
+ __pyx_vtable_memoryview.assign_item_from_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *, PyObject *))__pyx_memoryview_assign_item_from_object;
+ if (PyType_Ready(&__pyx_type___pyx_memoryview) < 0) __PYX_ERR(1, 331, __pyx_L1_error)
+ #if PY_VERSION_HEX < 0x030800B1
+ __pyx_type___pyx_memoryview.tp_print = 0;
+ #endif
+ if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_memoryview.tp_dictoffset && __pyx_type___pyx_memoryview.tp_getattro == PyObject_GenericGetAttr)) {
+ __pyx_type___pyx_memoryview.tp_getattro = __Pyx_PyObject_GenericGetAttr;
+ }
+ if (__Pyx_SetVtable(__pyx_type___pyx_memoryview.tp_dict, __pyx_vtabptr_memoryview) < 0) __PYX_ERR(1, 331, __pyx_L1_error)
+ if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_memoryview) < 0) __PYX_ERR(1, 331, __pyx_L1_error)
+ __pyx_memoryview_type = &__pyx_type___pyx_memoryview;
+ __pyx_vtabptr__memoryviewslice = &__pyx_vtable__memoryviewslice;
+ __pyx_vtable__memoryviewslice.__pyx_base = *__pyx_vtabptr_memoryview;
+ __pyx_vtable__memoryviewslice.__pyx_base.convert_item_to_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *))__pyx_memoryviewslice_convert_item_to_object;
+ __pyx_vtable__memoryviewslice.__pyx_base.assign_item_from_object = (PyObject *(*)(struct __pyx_memoryview_obj *, char *, PyObject *))__pyx_memoryviewslice_assign_item_from_object;
+ __pyx_type___pyx_memoryviewslice.tp_base = __pyx_memoryview_type;
+ if (PyType_Ready(&__pyx_type___pyx_memoryviewslice) < 0) __PYX_ERR(1, 967, __pyx_L1_error)
+ #if PY_VERSION_HEX < 0x030800B1
+ __pyx_type___pyx_memoryviewslice.tp_print = 0;
+ #endif
+ if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type___pyx_memoryviewslice.tp_dictoffset && __pyx_type___pyx_memoryviewslice.tp_getattro == PyObject_GenericGetAttr)) {
+ __pyx_type___pyx_memoryviewslice.tp_getattro = __Pyx_PyObject_GenericGetAttr;
+ }
+ if (__Pyx_SetVtable(__pyx_type___pyx_memoryviewslice.tp_dict, __pyx_vtabptr__memoryviewslice) < 0) __PYX_ERR(1, 967, __pyx_L1_error)
+ if (__Pyx_setup_reduce((PyObject*)&__pyx_type___pyx_memoryviewslice) < 0) __PYX_ERR(1, 967, __pyx_L1_error)
+ __pyx_memoryviewslice_type = &__pyx_type___pyx_memoryviewslice;
+ __Pyx_RefNannyFinishContext();
+ return 0;
+ __pyx_L1_error:;
+ __Pyx_RefNannyFinishContext();
+ return -1;
+}
+
+static int __Pyx_modinit_type_import_code(void) {
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0);
+ /*--- Type import code ---*/
+ __Pyx_RefNannyFinishContext();
+ return 0;
+}
+
+static int __Pyx_modinit_variable_import_code(void) {
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0);
+ /*--- Variable import code ---*/
+ __Pyx_RefNannyFinishContext();
+ return 0;
+}
+
+static int __Pyx_modinit_function_import_code(void) {
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0);
+ /*--- Function import code ---*/
+ __Pyx_RefNannyFinishContext();
+ return 0;
+}
+
+
+#ifndef CYTHON_NO_PYINIT_EXPORT
+#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC
+#elif PY_MAJOR_VERSION < 3
+#ifdef __cplusplus
+#define __Pyx_PyMODINIT_FUNC extern "C" void
+#else
+#define __Pyx_PyMODINIT_FUNC void
+#endif
+#else
+#ifdef __cplusplus
+#define __Pyx_PyMODINIT_FUNC extern "C" PyObject *
+#else
+#define __Pyx_PyMODINIT_FUNC PyObject *
+#endif
+#endif
+
+
+#if PY_MAJOR_VERSION < 3
+__Pyx_PyMODINIT_FUNC initcore(void) CYTHON_SMALL_CODE; /*proto*/
+__Pyx_PyMODINIT_FUNC initcore(void)
+#else
+__Pyx_PyMODINIT_FUNC PyInit_core(void) CYTHON_SMALL_CODE; /*proto*/
+__Pyx_PyMODINIT_FUNC PyInit_core(void)
+#if CYTHON_PEP489_MULTI_PHASE_INIT
+{
+ return PyModuleDef_Init(&__pyx_moduledef);
+}
+static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) {
+ #if PY_VERSION_HEX >= 0x030700A1
+ static PY_INT64_T main_interpreter_id = -1;
+ PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp);
+ if (main_interpreter_id == -1) {
+ main_interpreter_id = current_id;
+ return (unlikely(current_id == -1)) ? -1 : 0;
+ } else if (unlikely(main_interpreter_id != current_id))
+ #else
+ static PyInterpreterState *main_interpreter = NULL;
+ PyInterpreterState *current_interpreter = PyThreadState_Get()->interp;
+ if (!main_interpreter) {
+ main_interpreter = current_interpreter;
+ } else if (unlikely(main_interpreter != current_interpreter))
+ #endif
+ {
+ PyErr_SetString(
+ PyExc_ImportError,
+ "Interpreter change detected - this module can only be loaded into one interpreter per process.");
+ return -1;
+ }
+ return 0;
+}
+static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) {
+ PyObject *value = PyObject_GetAttrString(spec, from_name);
+ int result = 0;
+ if (likely(value)) {
+ if (allow_none || value != Py_None) {
+ result = PyDict_SetItemString(moddict, to_name, value);
+ }
+ Py_DECREF(value);
+ } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
+ PyErr_Clear();
+ } else {
+ result = -1;
+ }
+ return result;
+}
+static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) {
+ PyObject *module = NULL, *moddict, *modname;
+ if (__Pyx_check_single_interpreter())
+ return NULL;
+ if (__pyx_m)
+ return __Pyx_NewRef(__pyx_m);
+ modname = PyObject_GetAttrString(spec, "name");
+ if (unlikely(!modname)) goto bad;
+ module = PyModule_NewObject(modname);
+ Py_DECREF(modname);
+ if (unlikely(!module)) goto bad;
+ moddict = PyModule_GetDict(module);
+ if (unlikely(!moddict)) goto bad;
+ if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad;
+ if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad;
+ if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad;
+ if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad;
+ return module;
+bad:
+ Py_XDECREF(module);
+ return NULL;
+}
+
+
+static CYTHON_SMALL_CODE int __pyx_pymod_exec_core(PyObject *__pyx_pyinit_module)
+#endif
+#endif
+{
+ PyObject *__pyx_t_1 = NULL;
+ static PyThread_type_lock __pyx_t_2[8];
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannyDeclarations
+ #if CYTHON_PEP489_MULTI_PHASE_INIT
+ if (__pyx_m) {
+ if (__pyx_m == __pyx_pyinit_module) return 0;
+ PyErr_SetString(PyExc_RuntimeError, "Module 'core' has already been imported. Re-initialisation is not supported.");
+ return -1;
+ }
+ #elif PY_MAJOR_VERSION >= 3
+ if (__pyx_m) return __Pyx_NewRef(__pyx_m);
+ #endif
+ #if CYTHON_REFNANNY
+__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
+if (!__Pyx_RefNanny) {
+ PyErr_Clear();
+ __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
+ if (!__Pyx_RefNanny)
+ Py_FatalError("failed to import 'refnanny' module");
+}
+#endif
+ __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_core(void)", 0);
+ if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+ #ifdef __Pxy_PyFrame_Initialize_Offsets
+ __Pxy_PyFrame_Initialize_Offsets();
+ #endif
+ __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error)
+ __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error)
+ __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error)
+ #ifdef __Pyx_CyFunction_USED
+ if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+ #endif
+ #ifdef __Pyx_FusedFunction_USED
+ if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+ #endif
+ #ifdef __Pyx_Coroutine_USED
+ if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+ #endif
+ #ifdef __Pyx_Generator_USED
+ if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+ #endif
+ #ifdef __Pyx_AsyncGen_USED
+ if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+ #endif
+ #ifdef __Pyx_StopAsyncIteration_USED
+ if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+ #endif
+ /*--- Library function declarations ---*/
+ /*--- Threads initialization code ---*/
+ #if defined(WITH_THREAD) && PY_VERSION_HEX < 0x030700F0 && defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
+ PyEval_InitThreads();
+ #endif
+ /*--- Module creation code ---*/
+ #if CYTHON_PEP489_MULTI_PHASE_INIT
+ __pyx_m = __pyx_pyinit_module;
+ Py_INCREF(__pyx_m);
+ #else
+ #if PY_MAJOR_VERSION < 3
+ __pyx_m = Py_InitModule4("core", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
+ #else
+ __pyx_m = PyModule_Create(&__pyx_moduledef);
+ #endif
+ if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error)
+ #endif
+ __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error)
+ Py_INCREF(__pyx_d);
+ __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error)
+ Py_INCREF(__pyx_b);
+ __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error)
+ Py_INCREF(__pyx_cython_runtime);
+ if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
+ /*--- Initialize various global constants etc. ---*/
+ if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+ #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
+ if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+ #endif
+ if (__pyx_module_is_main_monotonic_align__core) {
+ if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name_2, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+ }
+ #if PY_MAJOR_VERSION >= 3
+ {
+ PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error)
+ if (!PyDict_GetItemString(modules, "monotonic_align.core")) {
+ if (unlikely(PyDict_SetItemString(modules, "monotonic_align.core", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error)
+ }
+ }
+ #endif
+ /*--- Builtin init code ---*/
+ if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+ /*--- Constants init code ---*/
+ if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+ /*--- Global type/function init code ---*/
+ (void)__Pyx_modinit_global_init_code();
+ (void)__Pyx_modinit_variable_export_code();
+ (void)__Pyx_modinit_function_export_code();
+ if (unlikely(__Pyx_modinit_type_init_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error)
+ (void)__Pyx_modinit_type_import_code();
+ (void)__Pyx_modinit_variable_import_code();
+ (void)__Pyx_modinit_function_import_code();
+ /*--- Execution code ---*/
+ #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED)
+ if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+ #endif
+
+ /* "monotonic_align/core.pyx":7
+ * @cython.boundscheck(False)
+ * @cython.wraparound(False)
+ * cdef void maximum_path_each(int[:,::1] path, float[:,::1] value, int t_y, int t_x, float max_neg_val=-1e9) nogil: # <<<<<<<<<<<<<<
+ * cdef int x
+ * cdef int y
+ */
+ __pyx_k_ = (-1e9);
+
+ /* "monotonic_align/core.pyx":1
+ * cimport cython # <<<<<<<<<<<<<<
+ * from cython.parallel import prange
+ *
+ */
+ __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+ /* "View.MemoryView":210
+ * info.obj = self
+ *
+ * __pyx_getbuffer = capsule( &__pyx_array_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<<
+ *
+ * def __dealloc__(array self):
+ */
+ __pyx_t_1 = __pyx_capsule_create(((void *)(&__pyx_array_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 210, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ if (PyDict_SetItem((PyObject *)__pyx_array_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_1) < 0) __PYX_ERR(1, 210, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ PyType_Modified(__pyx_array_type);
+
+ /* "View.MemoryView":287
+ * return self.name
+ *
+ * cdef generic = Enum("") # <<<<<<<<<<<<<<
+ * cdef strided = Enum("") # default
+ * cdef indirect = Enum("")
+ */
+ __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 287, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_XGOTREF(generic);
+ __Pyx_DECREF_SET(generic, __pyx_t_1);
+ __Pyx_GIVEREF(__pyx_t_1);
+ __pyx_t_1 = 0;
+
+ /* "View.MemoryView":288
+ *
+ * cdef generic = Enum("")
+ * cdef strided = Enum("") # default # <<<<<<<<<<<<<<
+ * cdef indirect = Enum("")
+ *
+ */
+ __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 288, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_XGOTREF(strided);
+ __Pyx_DECREF_SET(strided, __pyx_t_1);
+ __Pyx_GIVEREF(__pyx_t_1);
+ __pyx_t_1 = 0;
+
+ /* "View.MemoryView":289
+ * cdef generic = Enum("")
+ * cdef strided = Enum("") # default
+ * cdef indirect = Enum("") # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 289, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_XGOTREF(indirect);
+ __Pyx_DECREF_SET(indirect, __pyx_t_1);
+ __Pyx_GIVEREF(__pyx_t_1);
+ __pyx_t_1 = 0;
+
+ /* "View.MemoryView":292
+ *
+ *
+ * cdef contiguous = Enum("") # <<<<<<<<<<<<<<
+ * cdef indirect_contiguous = Enum("")
+ *
+ */
+ __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 292, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_XGOTREF(contiguous);
+ __Pyx_DECREF_SET(contiguous, __pyx_t_1);
+ __Pyx_GIVEREF(__pyx_t_1);
+ __pyx_t_1 = 0;
+
+ /* "View.MemoryView":293
+ *
+ * cdef contiguous = Enum("")
+ * cdef indirect_contiguous = Enum("") # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_MemviewEnum_type), __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 293, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_XGOTREF(indirect_contiguous);
+ __Pyx_DECREF_SET(indirect_contiguous, __pyx_t_1);
+ __Pyx_GIVEREF(__pyx_t_1);
+ __pyx_t_1 = 0;
+
+ /* "View.MemoryView":317
+ *
+ * DEF THREAD_LOCKS_PREALLOCATED = 8
+ * cdef int __pyx_memoryview_thread_locks_used = 0 # <<<<<<<<<<<<<<
+ * cdef PyThread_type_lock[THREAD_LOCKS_PREALLOCATED] __pyx_memoryview_thread_locks = [
+ * PyThread_allocate_lock(),
+ */
+ __pyx_memoryview_thread_locks_used = 0;
+
+ /* "View.MemoryView":318
+ * DEF THREAD_LOCKS_PREALLOCATED = 8
+ * cdef int __pyx_memoryview_thread_locks_used = 0
+ * cdef PyThread_type_lock[THREAD_LOCKS_PREALLOCATED] __pyx_memoryview_thread_locks = [ # <<<<<<<<<<<<<<
+ * PyThread_allocate_lock(),
+ * PyThread_allocate_lock(),
+ */
+ __pyx_t_2[0] = PyThread_allocate_lock();
+ __pyx_t_2[1] = PyThread_allocate_lock();
+ __pyx_t_2[2] = PyThread_allocate_lock();
+ __pyx_t_2[3] = PyThread_allocate_lock();
+ __pyx_t_2[4] = PyThread_allocate_lock();
+ __pyx_t_2[5] = PyThread_allocate_lock();
+ __pyx_t_2[6] = PyThread_allocate_lock();
+ __pyx_t_2[7] = PyThread_allocate_lock();
+ memcpy(&(__pyx_memoryview_thread_locks[0]), __pyx_t_2, sizeof(__pyx_memoryview_thread_locks[0]) * (8));
+
+ /* "View.MemoryView":551
+ * info.obj = self
+ *
+ * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_t_1 = __pyx_capsule_create(((void *)(&__pyx_memoryview_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 551, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ if (PyDict_SetItem((PyObject *)__pyx_memoryview_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_1) < 0) __PYX_ERR(1, 551, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ PyType_Modified(__pyx_memoryview_type);
+
+ /* "View.MemoryView":997
+ * return self.from_object
+ *
+ * __pyx_getbuffer = capsule( &__pyx_memoryview_getbuffer, "getbuffer(obj, view, flags)") # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_t_1 = __pyx_capsule_create(((void *)(&__pyx_memoryview_getbuffer)), ((char *)"getbuffer(obj, view, flags)")); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 997, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ if (PyDict_SetItem((PyObject *)__pyx_memoryviewslice_type->tp_dict, __pyx_n_s_pyx_getbuffer, __pyx_t_1) < 0) __PYX_ERR(1, 997, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ PyType_Modified(__pyx_memoryviewslice_type);
+
+ /* "(tree fragment)":1
+ * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<<
+ * cdef object __pyx_PickleError
+ * cdef object __pyx_result
+ */
+ __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum, NULL, __pyx_n_s_View_MemoryView); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_Enum, __pyx_t_1) < 0) __PYX_ERR(1, 1, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+ /* "(tree fragment)":11
+ * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state)
+ * return __pyx_result
+ * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<<
+ * __pyx_result.name = __pyx_state[0]
+ * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'):
+ */
+
+ /*--- Wrapped vars code ---*/
+
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ if (__pyx_m) {
+ if (__pyx_d) {
+ __Pyx_AddTraceback("init monotonic_align.core", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ }
+ Py_CLEAR(__pyx_m);
+ } else if (!PyErr_Occurred()) {
+ PyErr_SetString(PyExc_ImportError, "init monotonic_align.core");
+ }
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ #if CYTHON_PEP489_MULTI_PHASE_INIT
+ return (__pyx_m != NULL) ? 0 : -1;
+ #elif PY_MAJOR_VERSION >= 3
+ return __pyx_m;
+ #else
+ return;
+ #endif
+}
+
+/* --- Runtime support code --- */
+/* Refnanny */
+#if CYTHON_REFNANNY
+static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
+ PyObject *m = NULL, *p = NULL;
+ void *r = NULL;
+ m = PyImport_ImportModule(modname);
+ if (!m) goto end;
+ p = PyObject_GetAttrString(m, "RefNannyAPI");
+ if (!p) goto end;
+ r = PyLong_AsVoidPtr(p);
+end:
+ Py_XDECREF(p);
+ Py_XDECREF(m);
+ return (__Pyx_RefNannyAPIStruct *)r;
+}
+#endif
+
+/* PyObjectGetAttrStr */
+#if CYTHON_USE_TYPE_SLOTS
+static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) {
+ PyTypeObject* tp = Py_TYPE(obj);
+ if (likely(tp->tp_getattro))
+ return tp->tp_getattro(obj, attr_name);
+#if PY_MAJOR_VERSION < 3
+ if (likely(tp->tp_getattr))
+ return tp->tp_getattr(obj, PyString_AS_STRING(attr_name));
+#endif
+ return PyObject_GetAttr(obj, attr_name);
+}
+#endif
+
+/* GetBuiltinName */
+static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
+ PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name);
+ if (unlikely(!result)) {
+ PyErr_Format(PyExc_NameError,
+#if PY_MAJOR_VERSION >= 3
+ "name '%U' is not defined", name);
+#else
+ "name '%.200s' is not defined", PyString_AS_STRING(name));
+#endif
+ }
+ return result;
+}
+
+/* MemviewSliceInit */
+static int
+__Pyx_init_memviewslice(struct __pyx_memoryview_obj *memview,
+ int ndim,
+ __Pyx_memviewslice *memviewslice,
+ int memview_is_new_reference)
+{
+ __Pyx_RefNannyDeclarations
+ int i, retval=-1;
+ Py_buffer *buf = &memview->view;
+ __Pyx_RefNannySetupContext("init_memviewslice", 0);
+ if (unlikely(memviewslice->memview || memviewslice->data)) {
+ PyErr_SetString(PyExc_ValueError,
+ "memviewslice is already initialized!");
+ goto fail;
+ }
+ if (buf->strides) {
+ for (i = 0; i < ndim; i++) {
+ memviewslice->strides[i] = buf->strides[i];
+ }
+ } else {
+ Py_ssize_t stride = buf->itemsize;
+ for (i = ndim - 1; i >= 0; i--) {
+ memviewslice->strides[i] = stride;
+ stride *= buf->shape[i];
+ }
+ }
+ for (i = 0; i < ndim; i++) {
+ memviewslice->shape[i] = buf->shape[i];
+ if (buf->suboffsets) {
+ memviewslice->suboffsets[i] = buf->suboffsets[i];
+ } else {
+ memviewslice->suboffsets[i] = -1;
+ }
+ }
+ memviewslice->memview = memview;
+ memviewslice->data = (char *)buf->buf;
+ if (__pyx_add_acquisition_count(memview) == 0 && !memview_is_new_reference) {
+ Py_INCREF(memview);
+ }
+ retval = 0;
+ goto no_fail;
+fail:
+ memviewslice->memview = 0;
+ memviewslice->data = 0;
+ retval = -1;
+no_fail:
+ __Pyx_RefNannyFinishContext();
+ return retval;
+}
+#ifndef Py_NO_RETURN
+#define Py_NO_RETURN
+#endif
+static void __pyx_fatalerror(const char *fmt, ...) Py_NO_RETURN {
+ va_list vargs;
+ char msg[200];
+#if PY_VERSION_HEX >= 0x030A0000 || defined(HAVE_STDARG_PROTOTYPES)
+ va_start(vargs, fmt);
+#else
+ va_start(vargs);
+#endif
+ vsnprintf(msg, 200, fmt, vargs);
+ va_end(vargs);
+ Py_FatalError(msg);
+}
+static CYTHON_INLINE int
+__pyx_add_acquisition_count_locked(__pyx_atomic_int *acquisition_count,
+ PyThread_type_lock lock)
+{
+ int result;
+ PyThread_acquire_lock(lock, 1);
+ result = (*acquisition_count)++;
+ PyThread_release_lock(lock);
+ return result;
+}
+static CYTHON_INLINE int
+__pyx_sub_acquisition_count_locked(__pyx_atomic_int *acquisition_count,
+ PyThread_type_lock lock)
+{
+ int result;
+ PyThread_acquire_lock(lock, 1);
+ result = (*acquisition_count)--;
+ PyThread_release_lock(lock);
+ return result;
+}
+static CYTHON_INLINE void
+__Pyx_INC_MEMVIEW(__Pyx_memviewslice *memslice, int have_gil, int lineno)
+{
+ int first_time;
+ struct __pyx_memoryview_obj *memview = memslice->memview;
+ if (unlikely(!memview || (PyObject *) memview == Py_None))
+ return;
+ if (unlikely(__pyx_get_slice_count(memview) < 0))
+ __pyx_fatalerror("Acquisition count is %d (line %d)",
+ __pyx_get_slice_count(memview), lineno);
+ first_time = __pyx_add_acquisition_count(memview) == 0;
+ if (unlikely(first_time)) {
+ if (have_gil) {
+ Py_INCREF((PyObject *) memview);
+ } else {
+ PyGILState_STATE _gilstate = PyGILState_Ensure();
+ Py_INCREF((PyObject *) memview);
+ PyGILState_Release(_gilstate);
+ }
+ }
+}
+static CYTHON_INLINE void __Pyx_XDEC_MEMVIEW(__Pyx_memviewslice *memslice,
+ int have_gil, int lineno) {
+ int last_time;
+ struct __pyx_memoryview_obj *memview = memslice->memview;
+ if (unlikely(!memview || (PyObject *) memview == Py_None)) {
+ memslice->memview = NULL;
+ return;
+ }
+ if (unlikely(__pyx_get_slice_count(memview) <= 0))
+ __pyx_fatalerror("Acquisition count is %d (line %d)",
+ __pyx_get_slice_count(memview), lineno);
+ last_time = __pyx_sub_acquisition_count(memview) == 1;
+ memslice->data = NULL;
+ if (unlikely(last_time)) {
+ if (have_gil) {
+ Py_CLEAR(memslice->memview);
+ } else {
+ PyGILState_STATE _gilstate = PyGILState_Ensure();
+ Py_CLEAR(memslice->memview);
+ PyGILState_Release(_gilstate);
+ }
+ } else {
+ memslice->memview = NULL;
+ }
+}
+
+/* RaiseArgTupleInvalid */
+static void __Pyx_RaiseArgtupleInvalid(
+ const char* func_name,
+ int exact,
+ Py_ssize_t num_min,
+ Py_ssize_t num_max,
+ Py_ssize_t num_found)
+{
+ Py_ssize_t num_expected;
+ const char *more_or_less;
+ if (num_found < num_min) {
+ num_expected = num_min;
+ more_or_less = "at least";
+ } else {
+ num_expected = num_max;
+ more_or_less = "at most";
+ }
+ if (exact) {
+ more_or_less = "exactly";
+ }
+ PyErr_Format(PyExc_TypeError,
+ "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)",
+ func_name, more_or_less, num_expected,
+ (num_expected == 1) ? "" : "s", num_found);
+}
+
+/* RaiseDoubleKeywords */
+static void __Pyx_RaiseDoubleKeywordsError(
+ const char* func_name,
+ PyObject* kw_name)
+{
+ PyErr_Format(PyExc_TypeError,
+ #if PY_MAJOR_VERSION >= 3
+ "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
+ #else
+ "%s() got multiple values for keyword argument '%s'", func_name,
+ PyString_AsString(kw_name));
+ #endif
+}
+
+/* ParseKeywords */
+static int __Pyx_ParseOptionalKeywords(
+ PyObject *kwds,
+ PyObject **argnames[],
+ PyObject *kwds2,
+ PyObject *values[],
+ Py_ssize_t num_pos_args,
+ const char* function_name)
+{
+ PyObject *key = 0, *value = 0;
+ Py_ssize_t pos = 0;
+ PyObject*** name;
+ PyObject*** first_kw_arg = argnames + num_pos_args;
+ while (PyDict_Next(kwds, &pos, &key, &value)) {
+ name = first_kw_arg;
+ while (*name && (**name != key)) name++;
+ if (*name) {
+ values[name-argnames] = value;
+ continue;
+ }
+ name = first_kw_arg;
+ #if PY_MAJOR_VERSION < 3
+ if (likely(PyString_Check(key))) {
+ while (*name) {
+ if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
+ && _PyString_Eq(**name, key)) {
+ values[name-argnames] = value;
+ break;
+ }
+ name++;
+ }
+ if (*name) continue;
+ else {
+ PyObject*** argname = argnames;
+ while (argname != first_kw_arg) {
+ if ((**argname == key) || (
+ (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
+ && _PyString_Eq(**argname, key))) {
+ goto arg_passed_twice;
+ }
+ argname++;
+ }
+ }
+ } else
+ #endif
+ if (likely(PyUnicode_Check(key))) {
+ while (*name) {
+ int cmp = (**name == key) ? 0 :
+ #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
+ (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 :
+ #endif
+ PyUnicode_Compare(**name, key);
+ if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
+ if (cmp == 0) {
+ values[name-argnames] = value;
+ break;
+ }
+ name++;
+ }
+ if (*name) continue;
+ else {
+ PyObject*** argname = argnames;
+ while (argname != first_kw_arg) {
+ int cmp = (**argname == key) ? 0 :
+ #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
+ (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 :
+ #endif
+ PyUnicode_Compare(**argname, key);
+ if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
+ if (cmp == 0) goto arg_passed_twice;
+ argname++;
+ }
+ }
+ } else
+ goto invalid_keyword_type;
+ if (kwds2) {
+ if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
+ } else {
+ goto invalid_keyword;
+ }
+ }
+ return 0;
+arg_passed_twice:
+ __Pyx_RaiseDoubleKeywordsError(function_name, key);
+ goto bad;
+invalid_keyword_type:
+ PyErr_Format(PyExc_TypeError,
+ "%.200s() keywords must be strings", function_name);
+ goto bad;
+invalid_keyword:
+ PyErr_Format(PyExc_TypeError,
+ #if PY_MAJOR_VERSION < 3
+ "%.200s() got an unexpected keyword argument '%.200s'",
+ function_name, PyString_AsString(key));
+ #else
+ "%s() got an unexpected keyword argument '%U'",
+ function_name, key);
+ #endif
+bad:
+ return -1;
+}
+
+/* None */
+static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname) {
+ PyErr_Format(PyExc_UnboundLocalError, "local variable '%s' referenced before assignment", varname);
+}
+
+/* ArgTypeTest */
+static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact)
+{
+ if (unlikely(!type)) {
+ PyErr_SetString(PyExc_SystemError, "Missing type object");
+ return 0;
+ }
+ else if (exact) {
+ #if PY_MAJOR_VERSION == 2
+ if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1;
+ #endif
+ }
+ else {
+ if (likely(__Pyx_TypeCheck(obj, type))) return 1;
+ }
+ PyErr_Format(PyExc_TypeError,
+ "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)",
+ name, type->tp_name, Py_TYPE(obj)->tp_name);
+ return 0;
+}
+
+/* PyObjectCall */
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
+ PyObject *result;
+ ternaryfunc call = Py_TYPE(func)->tp_call;
+ if (unlikely(!call))
+ return PyObject_Call(func, arg, kw);
+ if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
+ return NULL;
+ result = (*call)(func, arg, kw);
+ Py_LeaveRecursiveCall();
+ if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
+ PyErr_SetString(
+ PyExc_SystemError,
+ "NULL result without error in PyObject_Call");
+ }
+ return result;
+}
+#endif
+
+/* PyErrFetchRestore */
+#if CYTHON_FAST_THREAD_STATE
+static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
+ PyObject *tmp_type, *tmp_value, *tmp_tb;
+ tmp_type = tstate->curexc_type;
+ tmp_value = tstate->curexc_value;
+ tmp_tb = tstate->curexc_traceback;
+ tstate->curexc_type = type;
+ tstate->curexc_value = value;
+ tstate->curexc_traceback = tb;
+ Py_XDECREF(tmp_type);
+ Py_XDECREF(tmp_value);
+ Py_XDECREF(tmp_tb);
+}
+static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
+ *type = tstate->curexc_type;
+ *value = tstate->curexc_value;
+ *tb = tstate->curexc_traceback;
+ tstate->curexc_type = 0;
+ tstate->curexc_value = 0;
+ tstate->curexc_traceback = 0;
+}
+#endif
+
+/* RaiseException */
+#if PY_MAJOR_VERSION < 3
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
+ CYTHON_UNUSED PyObject *cause) {
+ __Pyx_PyThreadState_declare
+ Py_XINCREF(type);
+ if (!value || value == Py_None)
+ value = NULL;
+ else
+ Py_INCREF(value);
+ if (!tb || tb == Py_None)
+ tb = NULL;
+ else {
+ Py_INCREF(tb);
+ if (!PyTraceBack_Check(tb)) {
+ PyErr_SetString(PyExc_TypeError,
+ "raise: arg 3 must be a traceback or None");
+ goto raise_error;
+ }
+ }
+ if (PyType_Check(type)) {
+#if CYTHON_COMPILING_IN_PYPY
+ if (!value) {
+ Py_INCREF(Py_None);
+ value = Py_None;
+ }
+#endif
+ PyErr_NormalizeException(&type, &value, &tb);
+ } else {
+ if (value) {
+ PyErr_SetString(PyExc_TypeError,
+ "instance exception may not have a separate value");
+ goto raise_error;
+ }
+ value = type;
+ type = (PyObject*) Py_TYPE(type);
+ Py_INCREF(type);
+ if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
+ PyErr_SetString(PyExc_TypeError,
+ "raise: exception class must be a subclass of BaseException");
+ goto raise_error;
+ }
+ }
+ __Pyx_PyThreadState_assign
+ __Pyx_ErrRestore(type, value, tb);
+ return;
+raise_error:
+ Py_XDECREF(value);
+ Py_XDECREF(type);
+ Py_XDECREF(tb);
+ return;
+}
+#else
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
+ PyObject* owned_instance = NULL;
+ if (tb == Py_None) {
+ tb = 0;
+ } else if (tb && !PyTraceBack_Check(tb)) {
+ PyErr_SetString(PyExc_TypeError,
+ "raise: arg 3 must be a traceback or None");
+ goto bad;
+ }
+ if (value == Py_None)
+ value = 0;
+ if (PyExceptionInstance_Check(type)) {
+ if (value) {
+ PyErr_SetString(PyExc_TypeError,
+ "instance exception may not have a separate value");
+ goto bad;
+ }
+ value = type;
+ type = (PyObject*) Py_TYPE(value);
+ } else if (PyExceptionClass_Check(type)) {
+ PyObject *instance_class = NULL;
+ if (value && PyExceptionInstance_Check(value)) {
+ instance_class = (PyObject*) Py_TYPE(value);
+ if (instance_class != type) {
+ int is_subclass = PyObject_IsSubclass(instance_class, type);
+ if (!is_subclass) {
+ instance_class = NULL;
+ } else if (unlikely(is_subclass == -1)) {
+ goto bad;
+ } else {
+ type = instance_class;
+ }
+ }
+ }
+ if (!instance_class) {
+ PyObject *args;
+ if (!value)
+ args = PyTuple_New(0);
+ else if (PyTuple_Check(value)) {
+ Py_INCREF(value);
+ args = value;
+ } else
+ args = PyTuple_Pack(1, value);
+ if (!args)
+ goto bad;
+ owned_instance = PyObject_Call(type, args, NULL);
+ Py_DECREF(args);
+ if (!owned_instance)
+ goto bad;
+ value = owned_instance;
+ if (!PyExceptionInstance_Check(value)) {
+ PyErr_Format(PyExc_TypeError,
+ "calling %R should have returned an instance of "
+ "BaseException, not %R",
+ type, Py_TYPE(value));
+ goto bad;
+ }
+ }
+ } else {
+ PyErr_SetString(PyExc_TypeError,
+ "raise: exception class must be a subclass of BaseException");
+ goto bad;
+ }
+ if (cause) {
+ PyObject *fixed_cause;
+ if (cause == Py_None) {
+ fixed_cause = NULL;
+ } else if (PyExceptionClass_Check(cause)) {
+ fixed_cause = PyObject_CallObject(cause, NULL);
+ if (fixed_cause == NULL)
+ goto bad;
+ } else if (PyExceptionInstance_Check(cause)) {
+ fixed_cause = cause;
+ Py_INCREF(fixed_cause);
+ } else {
+ PyErr_SetString(PyExc_TypeError,
+ "exception causes must derive from "
+ "BaseException");
+ goto bad;
+ }
+ PyException_SetCause(value, fixed_cause);
+ }
+ PyErr_SetObject(type, value);
+ if (tb) {
+#if CYTHON_COMPILING_IN_PYPY
+ PyObject *tmp_type, *tmp_value, *tmp_tb;
+ PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb);
+ Py_INCREF(tb);
+ PyErr_Restore(tmp_type, tmp_value, tb);
+ Py_XDECREF(tmp_tb);
+#else
+ PyThreadState *tstate = __Pyx_PyThreadState_Current;
+ PyObject* tmp_tb = tstate->curexc_traceback;
+ if (tb != tmp_tb) {
+ Py_INCREF(tb);
+ tstate->curexc_traceback = tb;
+ Py_XDECREF(tmp_tb);
+ }
+#endif
+ }
+bad:
+ Py_XDECREF(owned_instance);
+ return;
+}
+#endif
+
+/* PyCFunctionFastCall */
+#if CYTHON_FAST_PYCCALL
+static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) {
+ PyCFunctionObject *func = (PyCFunctionObject*)func_obj;
+ PyCFunction meth = PyCFunction_GET_FUNCTION(func);
+ PyObject *self = PyCFunction_GET_SELF(func);
+ int flags = PyCFunction_GET_FLAGS(func);
+ assert(PyCFunction_Check(func));
+ assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS)));
+ assert(nargs >= 0);
+ assert(nargs == 0 || args != NULL);
+ /* _PyCFunction_FastCallDict() must not be called with an exception set,
+ because it may clear it (directly or indirectly) and so the
+ caller loses its exception */
+ assert(!PyErr_Occurred());
+ if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) {
+ return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL);
+ } else {
+ return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs);
+ }
+}
+#endif
+
+/* PyFunctionFastCall */
+#if CYTHON_FAST_PYCALL
+static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na,
+ PyObject *globals) {
+ PyFrameObject *f;
+ PyThreadState *tstate = __Pyx_PyThreadState_Current;
+ PyObject **fastlocals;
+ Py_ssize_t i;
+ PyObject *result;
+ assert(globals != NULL);
+ /* XXX Perhaps we should create a specialized
+ PyFrame_New() that doesn't take locals, but does
+ take builtins without sanity checking them.
+ */
+ assert(tstate != NULL);
+ f = PyFrame_New(tstate, co, globals, NULL);
+ if (f == NULL) {
+ return NULL;
+ }
+ fastlocals = __Pyx_PyFrame_GetLocalsplus(f);
+ for (i = 0; i < na; i++) {
+ Py_INCREF(*args);
+ fastlocals[i] = *args++;
+ }
+ result = PyEval_EvalFrameEx(f,0);
+ ++tstate->recursion_depth;
+ Py_DECREF(f);
+ --tstate->recursion_depth;
+ return result;
+}
+#if 1 || PY_VERSION_HEX < 0x030600B1
+static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) {
+ PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func);
+ PyObject *globals = PyFunction_GET_GLOBALS(func);
+ PyObject *argdefs = PyFunction_GET_DEFAULTS(func);
+ PyObject *closure;
+#if PY_MAJOR_VERSION >= 3
+ PyObject *kwdefs;
+#endif
+ PyObject *kwtuple, **k;
+ PyObject **d;
+ Py_ssize_t nd;
+ Py_ssize_t nk;
+ PyObject *result;
+ assert(kwargs == NULL || PyDict_Check(kwargs));
+ nk = kwargs ? PyDict_Size(kwargs) : 0;
+ if (Py_EnterRecursiveCall((char*)" while calling a Python object")) {
+ return NULL;
+ }
+ if (
+#if PY_MAJOR_VERSION >= 3
+ co->co_kwonlyargcount == 0 &&
+#endif
+ likely(kwargs == NULL || nk == 0) &&
+ co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) {
+ if (argdefs == NULL && co->co_argcount == nargs) {
+ result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals);
+ goto done;
+ }
+ else if (nargs == 0 && argdefs != NULL
+ && co->co_argcount == Py_SIZE(argdefs)) {
+ /* function called with no arguments, but all parameters have
+ a default value: use default values as arguments .*/
+ args = &PyTuple_GET_ITEM(argdefs, 0);
+ result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals);
+ goto done;
+ }
+ }
+ if (kwargs != NULL) {
+ Py_ssize_t pos, i;
+ kwtuple = PyTuple_New(2 * nk);
+ if (kwtuple == NULL) {
+ result = NULL;
+ goto done;
+ }
+ k = &PyTuple_GET_ITEM(kwtuple, 0);
+ pos = i = 0;
+ while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) {
+ Py_INCREF(k[i]);
+ Py_INCREF(k[i+1]);
+ i += 2;
+ }
+ nk = i / 2;
+ }
+ else {
+ kwtuple = NULL;
+ k = NULL;
+ }
+ closure = PyFunction_GET_CLOSURE(func);
+#if PY_MAJOR_VERSION >= 3
+ kwdefs = PyFunction_GET_KW_DEFAULTS(func);
+#endif
+ if (argdefs != NULL) {
+ d = &PyTuple_GET_ITEM(argdefs, 0);
+ nd = Py_SIZE(argdefs);
+ }
+ else {
+ d = NULL;
+ nd = 0;
+ }
+#if PY_MAJOR_VERSION >= 3
+ result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL,
+ args, (int)nargs,
+ k, (int)nk,
+ d, (int)nd, kwdefs, closure);
+#else
+ result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL,
+ args, (int)nargs,
+ k, (int)nk,
+ d, (int)nd, closure);
+#endif
+ Py_XDECREF(kwtuple);
+done:
+ Py_LeaveRecursiveCall();
+ return result;
+}
+#endif
+#endif
+
+/* PyObjectCall2Args */
+static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) {
+ PyObject *args, *result = NULL;
+ #if CYTHON_FAST_PYCALL
+ if (PyFunction_Check(function)) {
+ PyObject *args[2] = {arg1, arg2};
+ return __Pyx_PyFunction_FastCall(function, args, 2);
+ }
+ #endif
+ #if CYTHON_FAST_PYCCALL
+ if (__Pyx_PyFastCFunction_Check(function)) {
+ PyObject *args[2] = {arg1, arg2};
+ return __Pyx_PyCFunction_FastCall(function, args, 2);
+ }
+ #endif
+ args = PyTuple_New(2);
+ if (unlikely(!args)) goto done;
+ Py_INCREF(arg1);
+ PyTuple_SET_ITEM(args, 0, arg1);
+ Py_INCREF(arg2);
+ PyTuple_SET_ITEM(args, 1, arg2);
+ Py_INCREF(function);
+ result = __Pyx_PyObject_Call(function, args, NULL);
+ Py_DECREF(args);
+ Py_DECREF(function);
+done:
+ return result;
+}
+
+/* PyObjectCallMethO */
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) {
+ PyObject *self, *result;
+ PyCFunction cfunc;
+ cfunc = PyCFunction_GET_FUNCTION(func);
+ self = PyCFunction_GET_SELF(func);
+ if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
+ return NULL;
+ result = cfunc(self, arg);
+ Py_LeaveRecursiveCall();
+ if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
+ PyErr_SetString(
+ PyExc_SystemError,
+ "NULL result without error in PyObject_Call");
+ }
+ return result;
+}
+#endif
+
+/* PyObjectCallOneArg */
+#if CYTHON_COMPILING_IN_CPYTHON
+static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) {
+ PyObject *result;
+ PyObject *args = PyTuple_New(1);
+ if (unlikely(!args)) return NULL;
+ Py_INCREF(arg);
+ PyTuple_SET_ITEM(args, 0, arg);
+ result = __Pyx_PyObject_Call(func, args, NULL);
+ Py_DECREF(args);
+ return result;
+}
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
+#if CYTHON_FAST_PYCALL
+ if (PyFunction_Check(func)) {
+ return __Pyx_PyFunction_FastCall(func, &arg, 1);
+ }
+#endif
+ if (likely(PyCFunction_Check(func))) {
+ if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) {
+ return __Pyx_PyObject_CallMethO(func, arg);
+#if CYTHON_FAST_PYCCALL
+ } else if (__Pyx_PyFastCFunction_Check(func)) {
+ return __Pyx_PyCFunction_FastCall(func, &arg, 1);
+#endif
+ }
+ }
+ return __Pyx__PyObject_CallOneArg(func, arg);
+}
+#else
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
+ PyObject *result;
+ PyObject *args = PyTuple_Pack(1, arg);
+ if (unlikely(!args)) return NULL;
+ result = __Pyx_PyObject_Call(func, args, NULL);
+ Py_DECREF(args);
+ return result;
+}
+#endif
+
+/* BytesEquals */
+static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) {
+#if CYTHON_COMPILING_IN_PYPY
+ return PyObject_RichCompareBool(s1, s2, equals);
+#else
+ if (s1 == s2) {
+ return (equals == Py_EQ);
+ } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) {
+ const char *ps1, *ps2;
+ Py_ssize_t length = PyBytes_GET_SIZE(s1);
+ if (length != PyBytes_GET_SIZE(s2))
+ return (equals == Py_NE);
+ ps1 = PyBytes_AS_STRING(s1);
+ ps2 = PyBytes_AS_STRING(s2);
+ if (ps1[0] != ps2[0]) {
+ return (equals == Py_NE);
+ } else if (length == 1) {
+ return (equals == Py_EQ);
+ } else {
+ int result;
+#if CYTHON_USE_UNICODE_INTERNALS && (PY_VERSION_HEX < 0x030B0000)
+ Py_hash_t hash1, hash2;
+ hash1 = ((PyBytesObject*)s1)->ob_shash;
+ hash2 = ((PyBytesObject*)s2)->ob_shash;
+ if (hash1 != hash2 && hash1 != -1 && hash2 != -1) {
+ return (equals == Py_NE);
+ }
+#endif
+ result = memcmp(ps1, ps2, (size_t)length);
+ return (equals == Py_EQ) ? (result == 0) : (result != 0);
+ }
+ } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) {
+ return (equals == Py_NE);
+ } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) {
+ return (equals == Py_NE);
+ } else {
+ int result;
+ PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
+ if (!py_result)
+ return -1;
+ result = __Pyx_PyObject_IsTrue(py_result);
+ Py_DECREF(py_result);
+ return result;
+ }
+#endif
+}
+
+/* UnicodeEquals */
+static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) {
+#if CYTHON_COMPILING_IN_PYPY
+ return PyObject_RichCompareBool(s1, s2, equals);
+#else
+#if PY_MAJOR_VERSION < 3
+ PyObject* owned_ref = NULL;
+#endif
+ int s1_is_unicode, s2_is_unicode;
+ if (s1 == s2) {
+ goto return_eq;
+ }
+ s1_is_unicode = PyUnicode_CheckExact(s1);
+ s2_is_unicode = PyUnicode_CheckExact(s2);
+#if PY_MAJOR_VERSION < 3
+ if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) {
+ owned_ref = PyUnicode_FromObject(s2);
+ if (unlikely(!owned_ref))
+ return -1;
+ s2 = owned_ref;
+ s2_is_unicode = 1;
+ } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) {
+ owned_ref = PyUnicode_FromObject(s1);
+ if (unlikely(!owned_ref))
+ return -1;
+ s1 = owned_ref;
+ s1_is_unicode = 1;
+ } else if (((!s2_is_unicode) & (!s1_is_unicode))) {
+ return __Pyx_PyBytes_Equals(s1, s2, equals);
+ }
+#endif
+ if (s1_is_unicode & s2_is_unicode) {
+ Py_ssize_t length;
+ int kind;
+ void *data1, *data2;
+ if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0))
+ return -1;
+ length = __Pyx_PyUnicode_GET_LENGTH(s1);
+ if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) {
+ goto return_ne;
+ }
+#if CYTHON_USE_UNICODE_INTERNALS
+ {
+ Py_hash_t hash1, hash2;
+ #if CYTHON_PEP393_ENABLED
+ hash1 = ((PyASCIIObject*)s1)->hash;
+ hash2 = ((PyASCIIObject*)s2)->hash;
+ #else
+ hash1 = ((PyUnicodeObject*)s1)->hash;
+ hash2 = ((PyUnicodeObject*)s2)->hash;
+ #endif
+ if (hash1 != hash2 && hash1 != -1 && hash2 != -1) {
+ goto return_ne;
+ }
+ }
+#endif
+ kind = __Pyx_PyUnicode_KIND(s1);
+ if (kind != __Pyx_PyUnicode_KIND(s2)) {
+ goto return_ne;
+ }
+ data1 = __Pyx_PyUnicode_DATA(s1);
+ data2 = __Pyx_PyUnicode_DATA(s2);
+ if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) {
+ goto return_ne;
+ } else if (length == 1) {
+ goto return_eq;
+ } else {
+ int result = memcmp(data1, data2, (size_t)(length * kind));
+ #if PY_MAJOR_VERSION < 3
+ Py_XDECREF(owned_ref);
+ #endif
+ return (equals == Py_EQ) ? (result == 0) : (result != 0);
+ }
+ } else if ((s1 == Py_None) & s2_is_unicode) {
+ goto return_ne;
+ } else if ((s2 == Py_None) & s1_is_unicode) {
+ goto return_ne;
+ } else {
+ int result;
+ PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
+ #if PY_MAJOR_VERSION < 3
+ Py_XDECREF(owned_ref);
+ #endif
+ if (!py_result)
+ return -1;
+ result = __Pyx_PyObject_IsTrue(py_result);
+ Py_DECREF(py_result);
+ return result;
+ }
+return_eq:
+ #if PY_MAJOR_VERSION < 3
+ Py_XDECREF(owned_ref);
+ #endif
+ return (equals == Py_EQ);
+return_ne:
+ #if PY_MAJOR_VERSION < 3
+ Py_XDECREF(owned_ref);
+ #endif
+ return (equals == Py_NE);
+#endif
+}
+
+/* DivInt[Py_ssize_t] */
+static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t a, Py_ssize_t b) {
+ Py_ssize_t q = a / b;
+ Py_ssize_t r = a - q*b;
+ q -= ((r != 0) & ((r ^ b) < 0));
+ return q;
+}
+
+/* GetAttr */
+static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) {
+#if CYTHON_USE_TYPE_SLOTS
+#if PY_MAJOR_VERSION >= 3
+ if (likely(PyUnicode_Check(n)))
+#else
+ if (likely(PyString_Check(n)))
+#endif
+ return __Pyx_PyObject_GetAttrStr(o, n);
+#endif
+ return PyObject_GetAttr(o, n);
+}
+
+/* GetItemInt */
+static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
+ PyObject *r;
+ if (!j) return NULL;
+ r = PyObject_GetItem(o, j);
+ Py_DECREF(j);
+ return r;
+}
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
+ CYTHON_NCP_UNUSED int wraparound,
+ CYTHON_NCP_UNUSED int boundscheck) {
+#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+ Py_ssize_t wrapped_i = i;
+ if (wraparound & unlikely(i < 0)) {
+ wrapped_i += PyList_GET_SIZE(o);
+ }
+ if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) {
+ PyObject *r = PyList_GET_ITEM(o, wrapped_i);
+ Py_INCREF(r);
+ return r;
+ }
+ return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+#else
+ return PySequence_GetItem(o, i);
+#endif
+}
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
+ CYTHON_NCP_UNUSED int wraparound,
+ CYTHON_NCP_UNUSED int boundscheck) {
+#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+ Py_ssize_t wrapped_i = i;
+ if (wraparound & unlikely(i < 0)) {
+ wrapped_i += PyTuple_GET_SIZE(o);
+ }
+ if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) {
+ PyObject *r = PyTuple_GET_ITEM(o, wrapped_i);
+ Py_INCREF(r);
+ return r;
+ }
+ return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+#else
+ return PySequence_GetItem(o, i);
+#endif
+}
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list,
+ CYTHON_NCP_UNUSED int wraparound,
+ CYTHON_NCP_UNUSED int boundscheck) {
+#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS
+ if (is_list || PyList_CheckExact(o)) {
+ Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
+ if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) {
+ PyObject *r = PyList_GET_ITEM(o, n);
+ Py_INCREF(r);
+ return r;
+ }
+ }
+ else if (PyTuple_CheckExact(o)) {
+ Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o);
+ if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) {
+ PyObject *r = PyTuple_GET_ITEM(o, n);
+ Py_INCREF(r);
+ return r;
+ }
+ } else {
+ PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
+ if (likely(m && m->sq_item)) {
+ if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
+ Py_ssize_t l = m->sq_length(o);
+ if (likely(l >= 0)) {
+ i += l;
+ } else {
+ if (!PyErr_ExceptionMatches(PyExc_OverflowError))
+ return NULL;
+ PyErr_Clear();
+ }
+ }
+ return m->sq_item(o, i);
+ }
+ }
+#else
+ if (is_list || PySequence_Check(o)) {
+ return PySequence_GetItem(o, i);
+ }
+#endif
+ return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
+}
+
+/* ObjectGetItem */
+#if CYTHON_USE_TYPE_SLOTS
+static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) {
+ PyObject *runerr;
+ Py_ssize_t key_value;
+ PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence;
+ if (unlikely(!(m && m->sq_item))) {
+ PyErr_Format(PyExc_TypeError, "'%.200s' object is not subscriptable", Py_TYPE(obj)->tp_name);
+ return NULL;
+ }
+ key_value = __Pyx_PyIndex_AsSsize_t(index);
+ if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) {
+ return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1);
+ }
+ if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) {
+ PyErr_Clear();
+ PyErr_Format(PyExc_IndexError, "cannot fit '%.200s' into an index-sized integer", Py_TYPE(index)->tp_name);
+ }
+ return NULL;
+}
+static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key) {
+ PyMappingMethods *m = Py_TYPE(obj)->tp_as_mapping;
+ if (likely(m && m->mp_subscript)) {
+ return m->mp_subscript(obj, key);
+ }
+ return __Pyx_PyObject_GetIndex(obj, key);
+}
+#endif
+
+/* decode_c_string */
+static CYTHON_INLINE PyObject* __Pyx_decode_c_string(
+ const char* cstring, Py_ssize_t start, Py_ssize_t stop,
+ const char* encoding, const char* errors,
+ PyObject* (*decode_func)(const char *s, Py_ssize_t size, const char *errors)) {
+ Py_ssize_t length;
+ if (unlikely((start < 0) | (stop < 0))) {
+ size_t slen = strlen(cstring);
+ if (unlikely(slen > (size_t) PY_SSIZE_T_MAX)) {
+ PyErr_SetString(PyExc_OverflowError,
+ "c-string too long to convert to Python");
+ return NULL;
+ }
+ length = (Py_ssize_t) slen;
+ if (start < 0) {
+ start += length;
+ if (start < 0)
+ start = 0;
+ }
+ if (stop < 0)
+ stop += length;
+ }
+ if (unlikely(stop <= start))
+ return __Pyx_NewRef(__pyx_empty_unicode);
+ length = stop - start;
+ cstring += start;
+ if (decode_func) {
+ return decode_func(cstring, length, errors);
+ } else {
+ return PyUnicode_Decode(cstring, length, encoding, errors);
+ }
+}
+
+/* PyErrExceptionMatches */
+#if CYTHON_FAST_THREAD_STATE
+static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) {
+ Py_ssize_t i, n;
+ n = PyTuple_GET_SIZE(tuple);
+#if PY_MAJOR_VERSION >= 3
+ for (i=0; icurexc_type;
+ if (exc_type == err) return 1;
+ if (unlikely(!exc_type)) return 0;
+ if (unlikely(PyTuple_Check(err)))
+ return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err);
+ return __Pyx_PyErr_GivenExceptionMatches(exc_type, err);
+}
+#endif
+
+/* GetAttr3 */
+static PyObject *__Pyx_GetAttr3Default(PyObject *d) {
+ __Pyx_PyThreadState_declare
+ __Pyx_PyThreadState_assign
+ if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError)))
+ return NULL;
+ __Pyx_PyErr_Clear();
+ Py_INCREF(d);
+ return d;
+}
+static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) {
+ PyObject *r = __Pyx_GetAttr(o, n);
+ return (likely(r)) ? r : __Pyx_GetAttr3Default(d);
+}
+
+/* PyDictVersioning */
+#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS
+static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) {
+ PyObject *dict = Py_TYPE(obj)->tp_dict;
+ return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0;
+}
+static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) {
+ PyObject **dictptr = NULL;
+ Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset;
+ if (offset) {
+#if CYTHON_COMPILING_IN_CPYTHON
+ dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj);
+#else
+ dictptr = _PyObject_GetDictPtr(obj);
+#endif
+ }
+ return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0;
+}
+static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) {
+ PyObject *dict = Py_TYPE(obj)->tp_dict;
+ if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict)))
+ return 0;
+ return obj_dict_version == __Pyx_get_object_dict_version(obj);
+}
+#endif
+
+/* GetModuleGlobalName */
+#if CYTHON_USE_DICT_VERSIONS
+static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value)
+#else
+static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name)
+#endif
+{
+ PyObject *result;
+#if !CYTHON_AVOID_BORROWED_REFS
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1
+ result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash);
+ __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version)
+ if (likely(result)) {
+ return __Pyx_NewRef(result);
+ } else if (unlikely(PyErr_Occurred())) {
+ return NULL;
+ }
+#else
+ result = PyDict_GetItem(__pyx_d, name);
+ __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version)
+ if (likely(result)) {
+ return __Pyx_NewRef(result);
+ }
+#endif
+#else
+ result = PyObject_GetItem(__pyx_d, name);
+ __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version)
+ if (likely(result)) {
+ return __Pyx_NewRef(result);
+ }
+ PyErr_Clear();
+#endif
+ return __Pyx_GetBuiltinName(name);
+}
+
+/* RaiseTooManyValuesToUnpack */
+static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
+ PyErr_Format(PyExc_ValueError,
+ "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected);
+}
+
+/* RaiseNeedMoreValuesToUnpack */
+static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
+ PyErr_Format(PyExc_ValueError,
+ "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack",
+ index, (index == 1) ? "" : "s");
+}
+
+/* RaiseNoneIterError */
+static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) {
+ PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
+}
+
+/* ExtTypeTest */
+static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
+ if (unlikely(!type)) {
+ PyErr_SetString(PyExc_SystemError, "Missing type object");
+ return 0;
+ }
+ if (likely(__Pyx_TypeCheck(obj, type)))
+ return 1;
+ PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
+ Py_TYPE(obj)->tp_name, type->tp_name);
+ return 0;
+}
+
+/* GetTopmostException */
+#if CYTHON_USE_EXC_INFO_STACK
+static _PyErr_StackItem *
+__Pyx_PyErr_GetTopmostException(PyThreadState *tstate)
+{
+ _PyErr_StackItem *exc_info = tstate->exc_info;
+ while ((exc_info->exc_type == NULL || exc_info->exc_type == Py_None) &&
+ exc_info->previous_item != NULL)
+ {
+ exc_info = exc_info->previous_item;
+ }
+ return exc_info;
+}
+#endif
+
+/* SaveResetException */
+#if CYTHON_FAST_THREAD_STATE
+static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
+ #if CYTHON_USE_EXC_INFO_STACK
+ _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate);
+ *type = exc_info->exc_type;
+ *value = exc_info->exc_value;
+ *tb = exc_info->exc_traceback;
+ #else
+ *type = tstate->exc_type;
+ *value = tstate->exc_value;
+ *tb = tstate->exc_traceback;
+ #endif
+ Py_XINCREF(*type);
+ Py_XINCREF(*value);
+ Py_XINCREF(*tb);
+}
+static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
+ PyObject *tmp_type, *tmp_value, *tmp_tb;
+ #if CYTHON_USE_EXC_INFO_STACK
+ _PyErr_StackItem *exc_info = tstate->exc_info;
+ tmp_type = exc_info->exc_type;
+ tmp_value = exc_info->exc_value;
+ tmp_tb = exc_info->exc_traceback;
+ exc_info->exc_type = type;
+ exc_info->exc_value = value;
+ exc_info->exc_traceback = tb;
+ #else
+ tmp_type = tstate->exc_type;
+ tmp_value = tstate->exc_value;
+ tmp_tb = tstate->exc_traceback;
+ tstate->exc_type = type;
+ tstate->exc_value = value;
+ tstate->exc_traceback = tb;
+ #endif
+ Py_XDECREF(tmp_type);
+ Py_XDECREF(tmp_value);
+ Py_XDECREF(tmp_tb);
+}
+#endif
+
+/* GetException */
+#if CYTHON_FAST_THREAD_STATE
+static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb)
+#else
+static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb)
+#endif
+{
+ PyObject *local_type, *local_value, *local_tb;
+#if CYTHON_FAST_THREAD_STATE
+ PyObject *tmp_type, *tmp_value, *tmp_tb;
+ local_type = tstate->curexc_type;
+ local_value = tstate->curexc_value;
+ local_tb = tstate->curexc_traceback;
+ tstate->curexc_type = 0;
+ tstate->curexc_value = 0;
+ tstate->curexc_traceback = 0;
+#else
+ PyErr_Fetch(&local_type, &local_value, &local_tb);
+#endif
+ PyErr_NormalizeException(&local_type, &local_value, &local_tb);
+#if CYTHON_FAST_THREAD_STATE
+ if (unlikely(tstate->curexc_type))
+#else
+ if (unlikely(PyErr_Occurred()))
+#endif
+ goto bad;
+ #if PY_MAJOR_VERSION >= 3
+ if (local_tb) {
+ if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0))
+ goto bad;
+ }
+ #endif
+ Py_XINCREF(local_tb);
+ Py_XINCREF(local_type);
+ Py_XINCREF(local_value);
+ *type = local_type;
+ *value = local_value;
+ *tb = local_tb;
+#if CYTHON_FAST_THREAD_STATE
+ #if CYTHON_USE_EXC_INFO_STACK
+ {
+ _PyErr_StackItem *exc_info = tstate->exc_info;
+ tmp_type = exc_info->exc_type;
+ tmp_value = exc_info->exc_value;
+ tmp_tb = exc_info->exc_traceback;
+ exc_info->exc_type = local_type;
+ exc_info->exc_value = local_value;
+ exc_info->exc_traceback = local_tb;
+ }
+ #else
+ tmp_type = tstate->exc_type;
+ tmp_value = tstate->exc_value;
+ tmp_tb = tstate->exc_traceback;
+ tstate->exc_type = local_type;
+ tstate->exc_value = local_value;
+ tstate->exc_traceback = local_tb;
+ #endif
+ Py_XDECREF(tmp_type);
+ Py_XDECREF(tmp_value);
+ Py_XDECREF(tmp_tb);
+#else
+ PyErr_SetExcInfo(local_type, local_value, local_tb);
+#endif
+ return 0;
+bad:
+ *type = 0;
+ *value = 0;
+ *tb = 0;
+ Py_XDECREF(local_type);
+ Py_XDECREF(local_value);
+ Py_XDECREF(local_tb);
+ return -1;
+}
+
+/* SwapException */
+#if CYTHON_FAST_THREAD_STATE
+static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
+ PyObject *tmp_type, *tmp_value, *tmp_tb;
+ #if CYTHON_USE_EXC_INFO_STACK
+ _PyErr_StackItem *exc_info = tstate->exc_info;
+ tmp_type = exc_info->exc_type;
+ tmp_value = exc_info->exc_value;
+ tmp_tb = exc_info->exc_traceback;
+ exc_info->exc_type = *type;
+ exc_info->exc_value = *value;
+ exc_info->exc_traceback = *tb;
+ #else
+ tmp_type = tstate->exc_type;
+ tmp_value = tstate->exc_value;
+ tmp_tb = tstate->exc_traceback;
+ tstate->exc_type = *type;
+ tstate->exc_value = *value;
+ tstate->exc_traceback = *tb;
+ #endif
+ *type = tmp_type;
+ *value = tmp_value;
+ *tb = tmp_tb;
+}
+#else
+static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) {
+ PyObject *tmp_type, *tmp_value, *tmp_tb;
+ PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb);
+ PyErr_SetExcInfo(*type, *value, *tb);
+ *type = tmp_type;
+ *value = tmp_value;
+ *tb = tmp_tb;
+}
+#endif
+
+/* Import */
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
+ PyObject *empty_list = 0;
+ PyObject *module = 0;
+ PyObject *global_dict = 0;
+ PyObject *empty_dict = 0;
+ PyObject *list;
+ #if PY_MAJOR_VERSION < 3
+ PyObject *py_import;
+ py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import);
+ if (!py_import)
+ goto bad;
+ #endif
+ if (from_list)
+ list = from_list;
+ else {
+ empty_list = PyList_New(0);
+ if (!empty_list)
+ goto bad;
+ list = empty_list;
+ }
+ global_dict = PyModule_GetDict(__pyx_m);
+ if (!global_dict)
+ goto bad;
+ empty_dict = PyDict_New();
+ if (!empty_dict)
+ goto bad;
+ {
+ #if PY_MAJOR_VERSION >= 3
+ if (level == -1) {
+ if ((1) && (strchr(__Pyx_MODULE_NAME, '.'))) {
+ module = PyImport_ImportModuleLevelObject(
+ name, global_dict, empty_dict, list, 1);
+ if (!module) {
+ if (!PyErr_ExceptionMatches(PyExc_ImportError))
+ goto bad;
+ PyErr_Clear();
+ }
+ }
+ level = 0;
+ }
+ #endif
+ if (!module) {
+ #if PY_MAJOR_VERSION < 3
+ PyObject *py_level = PyInt_FromLong(level);
+ if (!py_level)
+ goto bad;
+ module = PyObject_CallFunctionObjArgs(py_import,
+ name, global_dict, empty_dict, list, py_level, (PyObject *)NULL);
+ Py_DECREF(py_level);
+ #else
+ module = PyImport_ImportModuleLevelObject(
+ name, global_dict, empty_dict, list, level);
+ #endif
+ }
+ }
+bad:
+ #if PY_MAJOR_VERSION < 3
+ Py_XDECREF(py_import);
+ #endif
+ Py_XDECREF(empty_list);
+ Py_XDECREF(empty_dict);
+ return module;
+}
+
+/* FastTypeChecks */
+#if CYTHON_COMPILING_IN_CPYTHON
+static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) {
+ while (a) {
+ a = a->tp_base;
+ if (a == b)
+ return 1;
+ }
+ return b == &PyBaseObject_Type;
+}
+static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) {
+ PyObject *mro;
+ if (a == b) return 1;
+ mro = a->tp_mro;
+ if (likely(mro)) {
+ Py_ssize_t i, n;
+ n = PyTuple_GET_SIZE(mro);
+ for (i = 0; i < n; i++) {
+ if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b)
+ return 1;
+ }
+ return 0;
+ }
+ return __Pyx_InBases(a, b);
+}
+#if PY_MAJOR_VERSION == 2
+static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) {
+ PyObject *exception, *value, *tb;
+ int res;
+ __Pyx_PyThreadState_declare
+ __Pyx_PyThreadState_assign
+ __Pyx_ErrFetch(&exception, &value, &tb);
+ res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0;
+ if (unlikely(res == -1)) {
+ PyErr_WriteUnraisable(err);
+ res = 0;
+ }
+ if (!res) {
+ res = PyObject_IsSubclass(err, exc_type2);
+ if (unlikely(res == -1)) {
+ PyErr_WriteUnraisable(err);
+ res = 0;
+ }
+ }
+ __Pyx_ErrRestore(exception, value, tb);
+ return res;
+}
+#else
+static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) {
+ int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0;
+ if (!res) {
+ res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2);
+ }
+ return res;
+}
+#endif
+static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) {
+ Py_ssize_t i, n;
+ assert(PyExceptionClass_Check(exc_type));
+ n = PyTuple_GET_SIZE(tuple);
+#if PY_MAJOR_VERSION >= 3
+ for (i=0; i= 0 || (x^b) >= 0))
+ return PyInt_FromLong(x);
+ return PyLong_Type.tp_as_number->nb_add(op1, op2);
+ }
+ #endif
+ #if CYTHON_USE_PYLONG_INTERNALS
+ if (likely(PyLong_CheckExact(op1))) {
+ const long b = intval;
+ long a, x;
+#ifdef HAVE_LONG_LONG
+ const PY_LONG_LONG llb = intval;
+ PY_LONG_LONG lla, llx;
+#endif
+ const digit* digits = ((PyLongObject*)op1)->ob_digit;
+ const Py_ssize_t size = Py_SIZE(op1);
+ if (likely(__Pyx_sst_abs(size) <= 1)) {
+ a = likely(size) ? digits[0] : 0;
+ if (size == -1) a = -a;
+ } else {
+ switch (size) {
+ case -2:
+ if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
+ a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+ break;
+#ifdef HAVE_LONG_LONG
+ } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
+ lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
+ goto long_long;
+#endif
+ }
+ CYTHON_FALLTHROUGH;
+ case 2:
+ if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
+ a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+ break;
+#ifdef HAVE_LONG_LONG
+ } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
+ lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
+ goto long_long;
+#endif
+ }
+ CYTHON_FALLTHROUGH;
+ case -3:
+ if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
+ a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+ break;
+#ifdef HAVE_LONG_LONG
+ } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
+ lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
+ goto long_long;
+#endif
+ }
+ CYTHON_FALLTHROUGH;
+ case 3:
+ if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
+ a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+ break;
+#ifdef HAVE_LONG_LONG
+ } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
+ lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
+ goto long_long;
+#endif
+ }
+ CYTHON_FALLTHROUGH;
+ case -4:
+ if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
+ a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+ break;
+#ifdef HAVE_LONG_LONG
+ } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
+ lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
+ goto long_long;
+#endif
+ }
+ CYTHON_FALLTHROUGH;
+ case 4:
+ if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
+ a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
+ break;
+#ifdef HAVE_LONG_LONG
+ } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
+ lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
+ goto long_long;
+#endif
+ }
+ CYTHON_FALLTHROUGH;
+ default: return PyLong_Type.tp_as_number->nb_add(op1, op2);
+ }
+ }
+ x = a + b;
+ return PyLong_FromLong(x);
+#ifdef HAVE_LONG_LONG
+ long_long:
+ llx = lla + llb;
+ return PyLong_FromLongLong(llx);
+#endif
+
+
+ }
+ #endif
+ if (PyFloat_CheckExact(op1)) {
+ const long b = intval;
+ double a = PyFloat_AS_DOUBLE(op1);
+ double result;
+ PyFPE_START_PROTECT("add", return NULL)
+ result = ((double)a) + (double)b;
+ PyFPE_END_PROTECT(result)
+ return PyFloat_FromDouble(result);
+ }
+ return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2);
+}
+#endif
+
+/* DivInt[long] */
+static CYTHON_INLINE long __Pyx_div_long(long a, long b) {
+ long q = a / b;
+ long r = a - q*b;
+ q -= ((r != 0) & ((r ^ b) < 0));
+ return q;
+}
+
+/* ImportFrom */
+static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
+ PyObject* value = __Pyx_PyObject_GetAttrStr(module, name);
+ if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) {
+ PyErr_Format(PyExc_ImportError,
+ #if PY_MAJOR_VERSION < 3
+ "cannot import name %.230s", PyString_AS_STRING(name));
+ #else
+ "cannot import name %S", name);
+ #endif
+ }
+ return value;
+}
+
+/* HasAttr */
+static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
+ PyObject *r;
+ if (unlikely(!__Pyx_PyBaseString_Check(n))) {
+ PyErr_SetString(PyExc_TypeError,
+ "hasattr(): attribute name must be string");
+ return -1;
+ }
+ r = __Pyx_GetAttr(o, n);
+ if (unlikely(!r)) {
+ PyErr_Clear();
+ return 0;
+ } else {
+ Py_DECREF(r);
+ return 1;
+ }
+}
+
+/* PyObject_GenericGetAttrNoDict */
+#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
+static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) {
+ PyErr_Format(PyExc_AttributeError,
+#if PY_MAJOR_VERSION >= 3
+ "'%.50s' object has no attribute '%U'",
+ tp->tp_name, attr_name);
+#else
+ "'%.50s' object has no attribute '%.400s'",
+ tp->tp_name, PyString_AS_STRING(attr_name));
+#endif
+ return NULL;
+}
+static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) {
+ PyObject *descr;
+ PyTypeObject *tp = Py_TYPE(obj);
+ if (unlikely(!PyString_Check(attr_name))) {
+ return PyObject_GenericGetAttr(obj, attr_name);
+ }
+ assert(!tp->tp_dictoffset);
+ descr = _PyType_Lookup(tp, attr_name);
+ if (unlikely(!descr)) {
+ return __Pyx_RaiseGenericGetAttributeError(tp, attr_name);
+ }
+ Py_INCREF(descr);
+ #if PY_MAJOR_VERSION < 3
+ if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS)))
+ #endif
+ {
+ descrgetfunc f = Py_TYPE(descr)->tp_descr_get;
+ if (unlikely(f)) {
+ PyObject *res = f(descr, obj, (PyObject *)tp);
+ Py_DECREF(descr);
+ return res;
+ }
+ }
+ return descr;
+}
+#endif
+
+/* PyObject_GenericGetAttr */
+#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
+static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name) {
+ if (unlikely(Py_TYPE(obj)->tp_dictoffset)) {
+ return PyObject_GenericGetAttr(obj, attr_name);
+ }
+ return __Pyx_PyObject_GenericGetAttrNoDict(obj, attr_name);
+}
+#endif
+
+/* SetVTable */
+static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
+#if PY_VERSION_HEX >= 0x02070000
+ PyObject *ob = PyCapsule_New(vtable, 0, 0);
+#else
+ PyObject *ob = PyCObject_FromVoidPtr(vtable, 0);
+#endif
+ if (!ob)
+ goto bad;
+ if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0)
+ goto bad;
+ Py_DECREF(ob);
+ return 0;
+bad:
+ Py_XDECREF(ob);
+ return -1;
+}
+
+/* PyObjectGetAttrStrNoError */
+static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) {
+ __Pyx_PyThreadState_declare
+ __Pyx_PyThreadState_assign
+ if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError)))
+ __Pyx_PyErr_Clear();
+}
+static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) {
+ PyObject *result;
+#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1
+ PyTypeObject* tp = Py_TYPE(obj);
+ if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) {
+ return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1);
+ }
+#endif
+ result = __Pyx_PyObject_GetAttrStr(obj, attr_name);
+ if (unlikely(!result)) {
+ __Pyx_PyObject_GetAttrStr_ClearAttributeError();
+ }
+ return result;
+}
+
+/* SetupReduce */
+static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) {
+ int ret;
+ PyObject *name_attr;
+ name_attr = __Pyx_PyObject_GetAttrStr(meth, __pyx_n_s_name_2);
+ if (likely(name_attr)) {
+ ret = PyObject_RichCompareBool(name_attr, name, Py_EQ);
+ } else {
+ ret = -1;
+ }
+ if (unlikely(ret < 0)) {
+ PyErr_Clear();
+ ret = 0;
+ }
+ Py_XDECREF(name_attr);
+ return ret;
+}
+static int __Pyx_setup_reduce(PyObject* type_obj) {
+ int ret = 0;
+ PyObject *object_reduce = NULL;
+ PyObject *object_getstate = NULL;
+ PyObject *object_reduce_ex = NULL;
+ PyObject *reduce = NULL;
+ PyObject *reduce_ex = NULL;
+ PyObject *reduce_cython = NULL;
+ PyObject *setstate = NULL;
+ PyObject *setstate_cython = NULL;
+ PyObject *getstate = NULL;
+#if CYTHON_USE_PYTYPE_LOOKUP
+ getstate = _PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate);
+#else
+ getstate = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_getstate);
+ if (!getstate && PyErr_Occurred()) {
+ goto __PYX_BAD;
+ }
+#endif
+ if (getstate) {
+#if CYTHON_USE_PYTYPE_LOOKUP
+ object_getstate = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_getstate);
+#else
+ object_getstate = __Pyx_PyObject_GetAttrStrNoError((PyObject*)&PyBaseObject_Type, __pyx_n_s_getstate);
+ if (!object_getstate && PyErr_Occurred()) {
+ goto __PYX_BAD;
+ }
+#endif
+ if (object_getstate != getstate) {
+ goto __PYX_GOOD;
+ }
+ }
+#if CYTHON_USE_PYTYPE_LOOKUP
+ object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD;
+#else
+ object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD;
+#endif
+ reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto __PYX_BAD;
+ if (reduce_ex == object_reduce_ex) {
+#if CYTHON_USE_PYTYPE_LOOKUP
+ object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD;
+#else
+ object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD;
+#endif
+ reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto __PYX_BAD;
+ if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) {
+ reduce_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_reduce_cython);
+ if (likely(reduce_cython)) {
+ ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
+ ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
+ } else if (reduce == object_reduce || PyErr_Occurred()) {
+ goto __PYX_BAD;
+ }
+ setstate = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate);
+ if (!setstate) PyErr_Clear();
+ if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) {
+ setstate_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_setstate_cython);
+ if (likely(setstate_cython)) {
+ ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
+ ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
+ } else if (!setstate || PyErr_Occurred()) {
+ goto __PYX_BAD;
+ }
+ }
+ PyType_Modified((PyTypeObject*)type_obj);
+ }
+ }
+ goto __PYX_GOOD;
+__PYX_BAD:
+ if (!PyErr_Occurred())
+ PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name);
+ ret = -1;
+__PYX_GOOD:
+#if !CYTHON_USE_PYTYPE_LOOKUP
+ Py_XDECREF(object_reduce);
+ Py_XDECREF(object_reduce_ex);
+ Py_XDECREF(object_getstate);
+ Py_XDECREF(getstate);
+#endif
+ Py_XDECREF(reduce);
+ Py_XDECREF(reduce_ex);
+ Py_XDECREF(reduce_cython);
+ Py_XDECREF(setstate);
+ Py_XDECREF(setstate_cython);
+ return ret;
+}
+
+/* CLineInTraceback */
+#ifndef CYTHON_CLINE_IN_TRACEBACK
+static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) {
+ PyObject *use_cline;
+ PyObject *ptype, *pvalue, *ptraceback;
+#if CYTHON_COMPILING_IN_CPYTHON
+ PyObject **cython_runtime_dict;
+#endif
+ if (unlikely(!__pyx_cython_runtime)) {
+ return c_line;
+ }
+ __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback);
+#if CYTHON_COMPILING_IN_CPYTHON
+ cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime);
+ if (likely(cython_runtime_dict)) {
+ __PYX_PY_DICT_LOOKUP_IF_MODIFIED(
+ use_cline, *cython_runtime_dict,
+ __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback))
+ } else
+#endif
+ {
+ PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback);
+ if (use_cline_obj) {
+ use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True;
+ Py_DECREF(use_cline_obj);
+ } else {
+ PyErr_Clear();
+ use_cline = NULL;
+ }
+ }
+ if (!use_cline) {
+ c_line = 0;
+ (void) PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False);
+ }
+ else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) {
+ c_line = 0;
+ }
+ __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback);
+ return c_line;
+}
+#endif
+
+/* CodeObjectCache */
+static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
+ int start = 0, mid = 0, end = count - 1;
+ if (end >= 0 && code_line > entries[end].code_line) {
+ return count;
+ }
+ while (start < end) {
+ mid = start + (end - start) / 2;
+ if (code_line < entries[mid].code_line) {
+ end = mid;
+ } else if (code_line > entries[mid].code_line) {
+ start = mid + 1;
+ } else {
+ return mid;
+ }
+ }
+ if (code_line <= entries[mid].code_line) {
+ return mid;
+ } else {
+ return mid + 1;
+ }
+}
+static PyCodeObject *__pyx_find_code_object(int code_line) {
+ PyCodeObject* code_object;
+ int pos;
+ if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) {
+ return NULL;
+ }
+ pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
+ if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) {
+ return NULL;
+ }
+ code_object = __pyx_code_cache.entries[pos].code_object;
+ Py_INCREF(code_object);
+ return code_object;
+}
+static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
+ int pos, i;
+ __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
+ if (unlikely(!code_line)) {
+ return;
+ }
+ if (unlikely(!entries)) {
+ entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry));
+ if (likely(entries)) {
+ __pyx_code_cache.entries = entries;
+ __pyx_code_cache.max_count = 64;
+ __pyx_code_cache.count = 1;
+ entries[0].code_line = code_line;
+ entries[0].code_object = code_object;
+ Py_INCREF(code_object);
+ }
+ return;
+ }
+ pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
+ if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) {
+ PyCodeObject* tmp = entries[pos].code_object;
+ entries[pos].code_object = code_object;
+ Py_DECREF(tmp);
+ return;
+ }
+ if (__pyx_code_cache.count == __pyx_code_cache.max_count) {
+ int new_max = __pyx_code_cache.max_count + 64;
+ entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
+ __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry));
+ if (unlikely(!entries)) {
+ return;
+ }
+ __pyx_code_cache.entries = entries;
+ __pyx_code_cache.max_count = new_max;
+ }
+ for (i=__pyx_code_cache.count; i>pos; i--) {
+ entries[i] = entries[i-1];
+ }
+ entries[pos].code_line = code_line;
+ entries[pos].code_object = code_object;
+ __pyx_code_cache.count++;
+ Py_INCREF(code_object);
+}
+
+/* AddTraceback */
+#include "compile.h"
+#include "frameobject.h"
+#include "traceback.h"
+#if PY_VERSION_HEX >= 0x030b00a6
+ #ifndef Py_BUILD_CORE
+ #define Py_BUILD_CORE 1
+ #endif
+ #include "internal/pycore_frame.h"
+#endif
+static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
+ const char *funcname, int c_line,
+ int py_line, const char *filename) {
+ PyCodeObject *py_code = NULL;
+ PyObject *py_funcname = NULL;
+ #if PY_MAJOR_VERSION < 3
+ PyObject *py_srcfile = NULL;
+ py_srcfile = PyString_FromString(filename);
+ if (!py_srcfile) goto bad;
+ #endif
+ if (c_line) {
+ #if PY_MAJOR_VERSION < 3
+ py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
+ if (!py_funcname) goto bad;
+ #else
+ py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
+ if (!py_funcname) goto bad;
+ funcname = PyUnicode_AsUTF8(py_funcname);
+ if (!funcname) goto bad;
+ #endif
+ }
+ else {
+ #if PY_MAJOR_VERSION < 3
+ py_funcname = PyString_FromString(funcname);
+ if (!py_funcname) goto bad;
+ #endif
+ }
+ #if PY_MAJOR_VERSION < 3
+ py_code = __Pyx_PyCode_New(
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ __pyx_empty_bytes, /*PyObject *code,*/
+ __pyx_empty_tuple, /*PyObject *consts,*/
+ __pyx_empty_tuple, /*PyObject *names,*/
+ __pyx_empty_tuple, /*PyObject *varnames,*/
+ __pyx_empty_tuple, /*PyObject *freevars,*/
+ __pyx_empty_tuple, /*PyObject *cellvars,*/
+ py_srcfile, /*PyObject *filename,*/
+ py_funcname, /*PyObject *name,*/
+ py_line,
+ __pyx_empty_bytes /*PyObject *lnotab*/
+ );
+ Py_DECREF(py_srcfile);
+ #else
+ py_code = PyCode_NewEmpty(filename, funcname, py_line);
+ #endif
+ Py_XDECREF(py_funcname); // XDECREF since it's only set on Py3 if cline
+ return py_code;
+bad:
+ Py_XDECREF(py_funcname);
+ #if PY_MAJOR_VERSION < 3
+ Py_XDECREF(py_srcfile);
+ #endif
+ return NULL;
+}
+static void __Pyx_AddTraceback(const char *funcname, int c_line,
+ int py_line, const char *filename) {
+ PyCodeObject *py_code = 0;
+ PyFrameObject *py_frame = 0;
+ PyThreadState *tstate = __Pyx_PyThreadState_Current;
+ PyObject *ptype, *pvalue, *ptraceback;
+ if (c_line) {
+ c_line = __Pyx_CLineForTraceback(tstate, c_line);
+ }
+ py_code = __pyx_find_code_object(c_line ? -c_line : py_line);
+ if (!py_code) {
+ __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback);
+ py_code = __Pyx_CreateCodeObjectForTraceback(
+ funcname, c_line, py_line, filename);
+ if (!py_code) {
+ /* If the code object creation fails, then we should clear the
+ fetched exception references and propagate the new exception */
+ Py_XDECREF(ptype);
+ Py_XDECREF(pvalue);
+ Py_XDECREF(ptraceback);
+ goto bad;
+ }
+ __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback);
+ __pyx_insert_code_object(c_line ? -c_line : py_line, py_code);
+ }
+ py_frame = PyFrame_New(
+ tstate, /*PyThreadState *tstate,*/
+ py_code, /*PyCodeObject *code,*/
+ __pyx_d, /*PyObject *globals,*/
+ 0 /*PyObject *locals*/
+ );
+ if (!py_frame) goto bad;
+ __Pyx_PyFrame_SetLineNumber(py_frame, py_line);
+ PyTraceBack_Here(py_frame);
+bad:
+ Py_XDECREF(py_code);
+ Py_XDECREF(py_frame);
+}
+
+#if PY_MAJOR_VERSION < 3
+static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags) {
+ if (PyObject_CheckBuffer(obj)) return PyObject_GetBuffer(obj, view, flags);
+ if (__Pyx_TypeCheck(obj, __pyx_array_type)) return __pyx_array_getbuffer(obj, view, flags);
+ if (__Pyx_TypeCheck(obj, __pyx_memoryview_type)) return __pyx_memoryview_getbuffer(obj, view, flags);
+ PyErr_Format(PyExc_TypeError, "'%.200s' does not have the buffer interface", Py_TYPE(obj)->tp_name);
+ return -1;
+}
+static void __Pyx_ReleaseBuffer(Py_buffer *view) {
+ PyObject *obj = view->obj;
+ if (!obj) return;
+ if (PyObject_CheckBuffer(obj)) {
+ PyBuffer_Release(view);
+ return;
+ }
+ if ((0)) {}
+ view->obj = NULL;
+ Py_DECREF(obj);
+}
+#endif
+
+
+/* MemviewSliceIsContig */
+static int
+__pyx_memviewslice_is_contig(const __Pyx_memviewslice mvs, char order, int ndim)
+{
+ int i, index, step, start;
+ Py_ssize_t itemsize = mvs.memview->view.itemsize;
+ if (order == 'F') {
+ step = 1;
+ start = 0;
+ } else {
+ step = -1;
+ start = ndim - 1;
+ }
+ for (i = 0; i < ndim; i++) {
+ index = start + step * i;
+ if (mvs.suboffsets[index] >= 0 || mvs.strides[index] != itemsize)
+ return 0;
+ itemsize *= mvs.shape[index];
+ }
+ return 1;
+}
+
+/* OverlappingSlices */
+static void
+__pyx_get_array_memory_extents(__Pyx_memviewslice *slice,
+ void **out_start, void **out_end,
+ int ndim, size_t itemsize)
+{
+ char *start, *end;
+ int i;
+ start = end = slice->data;
+ for (i = 0; i < ndim; i++) {
+ Py_ssize_t stride = slice->strides[i];
+ Py_ssize_t extent = slice->shape[i];
+ if (extent == 0) {
+ *out_start = *out_end = start;
+ return;
+ } else {
+ if (stride > 0)
+ end += stride * (extent - 1);
+ else
+ start += stride * (extent - 1);
+ }
+ }
+ *out_start = start;
+ *out_end = end + itemsize;
+}
+static int
+__pyx_slices_overlap(__Pyx_memviewslice *slice1,
+ __Pyx_memviewslice *slice2,
+ int ndim, size_t itemsize)
+{
+ void *start1, *end1, *start2, *end2;
+ __pyx_get_array_memory_extents(slice1, &start1, &end1, ndim, itemsize);
+ __pyx_get_array_memory_extents(slice2, &start2, &end2, ndim, itemsize);
+ return (start1 < end2) && (start2 < end1);
+}
+
+/* Capsule */
+static CYTHON_INLINE PyObject *
+__pyx_capsule_create(void *p, CYTHON_UNUSED const char *sig)
+{
+ PyObject *cobj;
+#if PY_VERSION_HEX >= 0x02070000
+ cobj = PyCapsule_New(p, sig, NULL);
+#else
+ cobj = PyCObject_FromVoidPtr(p, NULL);
+#endif
+ return cobj;
+}
+
+/* IsLittleEndian */
+static CYTHON_INLINE int __Pyx_Is_Little_Endian(void)
+{
+ union {
+ uint32_t u32;
+ uint8_t u8[4];
+ } S;
+ S.u32 = 0x01020304;
+ return S.u8[0] == 4;
+}
+
+/* BufferFormatCheck */
+static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx,
+ __Pyx_BufFmt_StackElem* stack,
+ __Pyx_TypeInfo* type) {
+ stack[0].field = &ctx->root;
+ stack[0].parent_offset = 0;
+ ctx->root.type = type;
+ ctx->root.name = "buffer dtype";
+ ctx->root.offset = 0;
+ ctx->head = stack;
+ ctx->head->field = &ctx->root;
+ ctx->fmt_offset = 0;
+ ctx->head->parent_offset = 0;
+ ctx->new_packmode = '@';
+ ctx->enc_packmode = '@';
+ ctx->new_count = 1;
+ ctx->enc_count = 0;
+ ctx->enc_type = 0;
+ ctx->is_complex = 0;
+ ctx->is_valid_array = 0;
+ ctx->struct_alignment = 0;
+ while (type->typegroup == 'S') {
+ ++ctx->head;
+ ctx->head->field = type->fields;
+ ctx->head->parent_offset = 0;
+ type = type->fields->type;
+ }
+}
+static int __Pyx_BufFmt_ParseNumber(const char** ts) {
+ int count;
+ const char* t = *ts;
+ if (*t < '0' || *t > '9') {
+ return -1;
+ } else {
+ count = *t++ - '0';
+ while (*t >= '0' && *t <= '9') {
+ count *= 10;
+ count += *t++ - '0';
+ }
+ }
+ *ts = t;
+ return count;
+}
+static int __Pyx_BufFmt_ExpectNumber(const char **ts) {
+ int number = __Pyx_BufFmt_ParseNumber(ts);
+ if (number == -1)
+ PyErr_Format(PyExc_ValueError,\
+ "Does not understand character buffer dtype format string ('%c')", **ts);
+ return number;
+}
+static void __Pyx_BufFmt_RaiseUnexpectedChar(char ch) {
+ PyErr_Format(PyExc_ValueError,
+ "Unexpected format string character: '%c'", ch);
+}
+static const char* __Pyx_BufFmt_DescribeTypeChar(char ch, int is_complex) {
+ switch (ch) {
+ case '?': return "'bool'";
+ case 'c': return "'char'";
+ case 'b': return "'signed char'";
+ case 'B': return "'unsigned char'";
+ case 'h': return "'short'";
+ case 'H': return "'unsigned short'";
+ case 'i': return "'int'";
+ case 'I': return "'unsigned int'";
+ case 'l': return "'long'";
+ case 'L': return "'unsigned long'";
+ case 'q': return "'long long'";
+ case 'Q': return "'unsigned long long'";
+ case 'f': return (is_complex ? "'complex float'" : "'float'");
+ case 'd': return (is_complex ? "'complex double'" : "'double'");
+ case 'g': return (is_complex ? "'complex long double'" : "'long double'");
+ case 'T': return "a struct";
+ case 'O': return "Python object";
+ case 'P': return "a pointer";
+ case 's': case 'p': return "a string";
+ case 0: return "end";
+ default: return "unparseable format string";
+ }
+}
+static size_t __Pyx_BufFmt_TypeCharToStandardSize(char ch, int is_complex) {
+ switch (ch) {
+ case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
+ case 'h': case 'H': return 2;
+ case 'i': case 'I': case 'l': case 'L': return 4;
+ case 'q': case 'Q': return 8;
+ case 'f': return (is_complex ? 8 : 4);
+ case 'd': return (is_complex ? 16 : 8);
+ case 'g': {
+ PyErr_SetString(PyExc_ValueError, "Python does not define a standard format string size for long double ('g')..");
+ return 0;
+ }
+ case 'O': case 'P': return sizeof(void*);
+ default:
+ __Pyx_BufFmt_RaiseUnexpectedChar(ch);
+ return 0;
+ }
+}
+static size_t __Pyx_BufFmt_TypeCharToNativeSize(char ch, int is_complex) {
+ switch (ch) {
+ case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
+ case 'h': case 'H': return sizeof(short);
+ case 'i': case 'I': return sizeof(int);
+ case 'l': case 'L': return sizeof(long);
+ #ifdef HAVE_LONG_LONG
+ case 'q': case 'Q': return sizeof(PY_LONG_LONG);
+ #endif
+ case 'f': return sizeof(float) * (is_complex ? 2 : 1);
+ case 'd': return sizeof(double) * (is_complex ? 2 : 1);
+ case 'g': return sizeof(long double) * (is_complex ? 2 : 1);
+ case 'O': case 'P': return sizeof(void*);
+ default: {
+ __Pyx_BufFmt_RaiseUnexpectedChar(ch);
+ return 0;
+ }
+ }
+}
+typedef struct { char c; short x; } __Pyx_st_short;
+typedef struct { char c; int x; } __Pyx_st_int;
+typedef struct { char c; long x; } __Pyx_st_long;
+typedef struct { char c; float x; } __Pyx_st_float;
+typedef struct { char c; double x; } __Pyx_st_double;
+typedef struct { char c; long double x; } __Pyx_st_longdouble;
+typedef struct { char c; void *x; } __Pyx_st_void_p;
+#ifdef HAVE_LONG_LONG
+typedef struct { char c; PY_LONG_LONG x; } __Pyx_st_longlong;
+#endif
+static size_t __Pyx_BufFmt_TypeCharToAlignment(char ch, CYTHON_UNUSED int is_complex) {
+ switch (ch) {
+ case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
+ case 'h': case 'H': return sizeof(__Pyx_st_short) - sizeof(short);
+ case 'i': case 'I': return sizeof(__Pyx_st_int) - sizeof(int);
+ case 'l': case 'L': return sizeof(__Pyx_st_long) - sizeof(long);
+#ifdef HAVE_LONG_LONG
+ case 'q': case 'Q': return sizeof(__Pyx_st_longlong) - sizeof(PY_LONG_LONG);
+#endif
+ case 'f': return sizeof(__Pyx_st_float) - sizeof(float);
+ case 'd': return sizeof(__Pyx_st_double) - sizeof(double);
+ case 'g': return sizeof(__Pyx_st_longdouble) - sizeof(long double);
+ case 'P': case 'O': return sizeof(__Pyx_st_void_p) - sizeof(void*);
+ default:
+ __Pyx_BufFmt_RaiseUnexpectedChar(ch);
+ return 0;
+ }
+}
+/* These are for computing the padding at the end of the struct to align
+ on the first member of the struct. This will probably the same as above,
+ but we don't have any guarantees.
+ */
+typedef struct { short x; char c; } __Pyx_pad_short;
+typedef struct { int x; char c; } __Pyx_pad_int;
+typedef struct { long x; char c; } __Pyx_pad_long;
+typedef struct { float x; char c; } __Pyx_pad_float;
+typedef struct { double x; char c; } __Pyx_pad_double;
+typedef struct { long double x; char c; } __Pyx_pad_longdouble;
+typedef struct { void *x; char c; } __Pyx_pad_void_p;
+#ifdef HAVE_LONG_LONG
+typedef struct { PY_LONG_LONG x; char c; } __Pyx_pad_longlong;
+#endif
+static size_t __Pyx_BufFmt_TypeCharToPadding(char ch, CYTHON_UNUSED int is_complex) {
+ switch (ch) {
+ case '?': case 'c': case 'b': case 'B': case 's': case 'p': return 1;
+ case 'h': case 'H': return sizeof(__Pyx_pad_short) - sizeof(short);
+ case 'i': case 'I': return sizeof(__Pyx_pad_int) - sizeof(int);
+ case 'l': case 'L': return sizeof(__Pyx_pad_long) - sizeof(long);
+#ifdef HAVE_LONG_LONG
+ case 'q': case 'Q': return sizeof(__Pyx_pad_longlong) - sizeof(PY_LONG_LONG);
+#endif
+ case 'f': return sizeof(__Pyx_pad_float) - sizeof(float);
+ case 'd': return sizeof(__Pyx_pad_double) - sizeof(double);
+ case 'g': return sizeof(__Pyx_pad_longdouble) - sizeof(long double);
+ case 'P': case 'O': return sizeof(__Pyx_pad_void_p) - sizeof(void*);
+ default:
+ __Pyx_BufFmt_RaiseUnexpectedChar(ch);
+ return 0;
+ }
+}
+static char __Pyx_BufFmt_TypeCharToGroup(char ch, int is_complex) {
+ switch (ch) {
+ case 'c':
+ return 'H';
+ case 'b': case 'h': case 'i':
+ case 'l': case 'q': case 's': case 'p':
+ return 'I';
+ case '?': case 'B': case 'H': case 'I': case 'L': case 'Q':
+ return 'U';
+ case 'f': case 'd': case 'g':
+ return (is_complex ? 'C' : 'R');
+ case 'O':
+ return 'O';
+ case 'P':
+ return 'P';
+ default: {
+ __Pyx_BufFmt_RaiseUnexpectedChar(ch);
+ return 0;
+ }
+ }
+}
+static void __Pyx_BufFmt_RaiseExpected(__Pyx_BufFmt_Context* ctx) {
+ if (ctx->head == NULL || ctx->head->field == &ctx->root) {
+ const char* expected;
+ const char* quote;
+ if (ctx->head == NULL) {
+ expected = "end";
+ quote = "";
+ } else {
+ expected = ctx->head->field->type->name;
+ quote = "'";
+ }
+ PyErr_Format(PyExc_ValueError,
+ "Buffer dtype mismatch, expected %s%s%s but got %s",
+ quote, expected, quote,
+ __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex));
+ } else {
+ __Pyx_StructField* field = ctx->head->field;
+ __Pyx_StructField* parent = (ctx->head - 1)->field;
+ PyErr_Format(PyExc_ValueError,
+ "Buffer dtype mismatch, expected '%s' but got %s in '%s.%s'",
+ field->type->name, __Pyx_BufFmt_DescribeTypeChar(ctx->enc_type, ctx->is_complex),
+ parent->type->name, field->name);
+ }
+}
+static int __Pyx_BufFmt_ProcessTypeChunk(__Pyx_BufFmt_Context* ctx) {
+ char group;
+ size_t size, offset, arraysize = 1;
+ if (ctx->enc_type == 0) return 0;
+ if (ctx->head->field->type->arraysize[0]) {
+ int i, ndim = 0;
+ if (ctx->enc_type == 's' || ctx->enc_type == 'p') {
+ ctx->is_valid_array = ctx->head->field->type->ndim == 1;
+ ndim = 1;
+ if (ctx->enc_count != ctx->head->field->type->arraysize[0]) {
+ PyErr_Format(PyExc_ValueError,
+ "Expected a dimension of size %zu, got %zu",
+ ctx->head->field->type->arraysize[0], ctx->enc_count);
+ return -1;
+ }
+ }
+ if (!ctx->is_valid_array) {
+ PyErr_Format(PyExc_ValueError, "Expected %d dimensions, got %d",
+ ctx->head->field->type->ndim, ndim);
+ return -1;
+ }
+ for (i = 0; i < ctx->head->field->type->ndim; i++) {
+ arraysize *= ctx->head->field->type->arraysize[i];
+ }
+ ctx->is_valid_array = 0;
+ ctx->enc_count = 1;
+ }
+ group = __Pyx_BufFmt_TypeCharToGroup(ctx->enc_type, ctx->is_complex);
+ do {
+ __Pyx_StructField* field = ctx->head->field;
+ __Pyx_TypeInfo* type = field->type;
+ if (ctx->enc_packmode == '@' || ctx->enc_packmode == '^') {
+ size = __Pyx_BufFmt_TypeCharToNativeSize(ctx->enc_type, ctx->is_complex);
+ } else {
+ size = __Pyx_BufFmt_TypeCharToStandardSize(ctx->enc_type, ctx->is_complex);
+ }
+ if (ctx->enc_packmode == '@') {
+ size_t align_at = __Pyx_BufFmt_TypeCharToAlignment(ctx->enc_type, ctx->is_complex);
+ size_t align_mod_offset;
+ if (align_at == 0) return -1;
+ align_mod_offset = ctx->fmt_offset % align_at;
+ if (align_mod_offset > 0) ctx->fmt_offset += align_at - align_mod_offset;
+ if (ctx->struct_alignment == 0)
+ ctx->struct_alignment = __Pyx_BufFmt_TypeCharToPadding(ctx->enc_type,
+ ctx->is_complex);
+ }
+ if (type->size != size || type->typegroup != group) {
+ if (type->typegroup == 'C' && type->fields != NULL) {
+ size_t parent_offset = ctx->head->parent_offset + field->offset;
+ ++ctx->head;
+ ctx->head->field = type->fields;
+ ctx->head->parent_offset = parent_offset;
+ continue;
+ }
+ if ((type->typegroup == 'H' || group == 'H') && type->size == size) {
+ } else {
+ __Pyx_BufFmt_RaiseExpected(ctx);
+ return -1;
+ }
+ }
+ offset = ctx->head->parent_offset + field->offset;
+ if (ctx->fmt_offset != offset) {
+ PyErr_Format(PyExc_ValueError,
+ "Buffer dtype mismatch; next field is at offset %" CYTHON_FORMAT_SSIZE_T "d but %" CYTHON_FORMAT_SSIZE_T "d expected",
+ (Py_ssize_t)ctx->fmt_offset, (Py_ssize_t)offset);
+ return -1;
+ }
+ ctx->fmt_offset += size;
+ if (arraysize)
+ ctx->fmt_offset += (arraysize - 1) * size;
+ --ctx->enc_count;
+ while (1) {
+ if (field == &ctx->root) {
+ ctx->head = NULL;
+ if (ctx->enc_count != 0) {
+ __Pyx_BufFmt_RaiseExpected(ctx);
+ return -1;
+ }
+ break;
+ }
+ ctx->head->field = ++field;
+ if (field->type == NULL) {
+ --ctx->head;
+ field = ctx->head->field;
+ continue;
+ } else if (field->type->typegroup == 'S') {
+ size_t parent_offset = ctx->head->parent_offset + field->offset;
+ if (field->type->fields->type == NULL) continue;
+ field = field->type->fields;
+ ++ctx->head;
+ ctx->head->field = field;
+ ctx->head->parent_offset = parent_offset;
+ break;
+ } else {
+ break;
+ }
+ }
+ } while (ctx->enc_count);
+ ctx->enc_type = 0;
+ ctx->is_complex = 0;
+ return 0;
+}
+static PyObject *
+__pyx_buffmt_parse_array(__Pyx_BufFmt_Context* ctx, const char** tsp)
+{
+ const char *ts = *tsp;
+ int i = 0, number, ndim;
+ ++ts;
+ if (ctx->new_count != 1) {
+ PyErr_SetString(PyExc_ValueError,
+ "Cannot handle repeated arrays in format string");
+ return NULL;
+ }
+ if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
+ ndim = ctx->head->field->type->ndim;
+ while (*ts && *ts != ')') {
+ switch (*ts) {
+ case ' ': case '\f': case '\r': case '\n': case '\t': case '\v': continue;
+ default: break;
+ }
+ number = __Pyx_BufFmt_ExpectNumber(&ts);
+ if (number == -1) return NULL;
+ if (i < ndim && (size_t) number != ctx->head->field->type->arraysize[i])
+ return PyErr_Format(PyExc_ValueError,
+ "Expected a dimension of size %zu, got %d",
+ ctx->head->field->type->arraysize[i], number);
+ if (*ts != ',' && *ts != ')')
+ return PyErr_Format(PyExc_ValueError,
+ "Expected a comma in format string, got '%c'", *ts);
+ if (*ts == ',') ts++;
+ i++;
+ }
+ if (i != ndim)
+ return PyErr_Format(PyExc_ValueError, "Expected %d dimension(s), got %d",
+ ctx->head->field->type->ndim, i);
+ if (!*ts) {
+ PyErr_SetString(PyExc_ValueError,
+ "Unexpected end of format string, expected ')'");
+ return NULL;
+ }
+ ctx->is_valid_array = 1;
+ ctx->new_count = 1;
+ *tsp = ++ts;
+ return Py_None;
+}
+static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts) {
+ int got_Z = 0;
+ while (1) {
+ switch(*ts) {
+ case 0:
+ if (ctx->enc_type != 0 && ctx->head == NULL) {
+ __Pyx_BufFmt_RaiseExpected(ctx);
+ return NULL;
+ }
+ if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
+ if (ctx->head != NULL) {
+ __Pyx_BufFmt_RaiseExpected(ctx);
+ return NULL;
+ }
+ return ts;
+ case ' ':
+ case '\r':
+ case '\n':
+ ++ts;
+ break;
+ case '<':
+ if (!__Pyx_Is_Little_Endian()) {
+ PyErr_SetString(PyExc_ValueError, "Little-endian buffer not supported on big-endian compiler");
+ return NULL;
+ }
+ ctx->new_packmode = '=';
+ ++ts;
+ break;
+ case '>':
+ case '!':
+ if (__Pyx_Is_Little_Endian()) {
+ PyErr_SetString(PyExc_ValueError, "Big-endian buffer not supported on little-endian compiler");
+ return NULL;
+ }
+ ctx->new_packmode = '=';
+ ++ts;
+ break;
+ case '=':
+ case '@':
+ case '^':
+ ctx->new_packmode = *ts++;
+ break;
+ case 'T':
+ {
+ const char* ts_after_sub;
+ size_t i, struct_count = ctx->new_count;
+ size_t struct_alignment = ctx->struct_alignment;
+ ctx->new_count = 1;
+ ++ts;
+ if (*ts != '{') {
+ PyErr_SetString(PyExc_ValueError, "Buffer acquisition: Expected '{' after 'T'");
+ return NULL;
+ }
+ if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
+ ctx->enc_type = 0;
+ ctx->enc_count = 0;
+ ctx->struct_alignment = 0;
+ ++ts;
+ ts_after_sub = ts;
+ for (i = 0; i != struct_count; ++i) {
+ ts_after_sub = __Pyx_BufFmt_CheckString(ctx, ts);
+ if (!ts_after_sub) return NULL;
+ }
+ ts = ts_after_sub;
+ if (struct_alignment) ctx->struct_alignment = struct_alignment;
+ }
+ break;
+ case '}':
+ {
+ size_t alignment = ctx->struct_alignment;
+ ++ts;
+ if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
+ ctx->enc_type = 0;
+ if (alignment && ctx->fmt_offset % alignment) {
+ ctx->fmt_offset += alignment - (ctx->fmt_offset % alignment);
+ }
+ }
+ return ts;
+ case 'x':
+ if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
+ ctx->fmt_offset += ctx->new_count;
+ ctx->new_count = 1;
+ ctx->enc_count = 0;
+ ctx->enc_type = 0;
+ ctx->enc_packmode = ctx->new_packmode;
+ ++ts;
+ break;
+ case 'Z':
+ got_Z = 1;
+ ++ts;
+ if (*ts != 'f' && *ts != 'd' && *ts != 'g') {
+ __Pyx_BufFmt_RaiseUnexpectedChar('Z');
+ return NULL;
+ }
+ CYTHON_FALLTHROUGH;
+ case '?': case 'c': case 'b': case 'B': case 'h': case 'H': case 'i': case 'I':
+ case 'l': case 'L': case 'q': case 'Q':
+ case 'f': case 'd': case 'g':
+ case 'O': case 'p':
+ if ((ctx->enc_type == *ts) && (got_Z == ctx->is_complex) &&
+ (ctx->enc_packmode == ctx->new_packmode) && (!ctx->is_valid_array)) {
+ ctx->enc_count += ctx->new_count;
+ ctx->new_count = 1;
+ got_Z = 0;
+ ++ts;
+ break;
+ }
+ CYTHON_FALLTHROUGH;
+ case 's':
+ if (__Pyx_BufFmt_ProcessTypeChunk(ctx) == -1) return NULL;
+ ctx->enc_count = ctx->new_count;
+ ctx->enc_packmode = ctx->new_packmode;
+ ctx->enc_type = *ts;
+ ctx->is_complex = got_Z;
+ ++ts;
+ ctx->new_count = 1;
+ got_Z = 0;
+ break;
+ case ':':
+ ++ts;
+ while(*ts != ':') ++ts;
+ ++ts;
+ break;
+ case '(':
+ if (!__pyx_buffmt_parse_array(ctx, &ts)) return NULL;
+ break;
+ default:
+ {
+ int number = __Pyx_BufFmt_ExpectNumber(&ts);
+ if (number == -1) return NULL;
+ ctx->new_count = (size_t)number;
+ }
+ }
+ }
+}
+
+/* TypeInfoCompare */
+ static int
+__pyx_typeinfo_cmp(__Pyx_TypeInfo *a, __Pyx_TypeInfo *b)
+{
+ int i;
+ if (!a || !b)
+ return 0;
+ if (a == b)
+ return 1;
+ if (a->size != b->size || a->typegroup != b->typegroup ||
+ a->is_unsigned != b->is_unsigned || a->ndim != b->ndim) {
+ if (a->typegroup == 'H' || b->typegroup == 'H') {
+ return a->size == b->size;
+ } else {
+ return 0;
+ }
+ }
+ if (a->ndim) {
+ for (i = 0; i < a->ndim; i++)
+ if (a->arraysize[i] != b->arraysize[i])
+ return 0;
+ }
+ if (a->typegroup == 'S') {
+ if (a->flags != b->flags)
+ return 0;
+ if (a->fields || b->fields) {
+ if (!(a->fields && b->fields))
+ return 0;
+ for (i = 0; a->fields[i].type && b->fields[i].type; i++) {
+ __Pyx_StructField *field_a = a->fields + i;
+ __Pyx_StructField *field_b = b->fields + i;
+ if (field_a->offset != field_b->offset ||
+ !__pyx_typeinfo_cmp(field_a->type, field_b->type))
+ return 0;
+ }
+ return !a->fields[i].type && !b->fields[i].type;
+ }
+ }
+ return 1;
+}
+
+/* MemviewSliceValidateAndInit */
+ static int
+__pyx_check_strides(Py_buffer *buf, int dim, int ndim, int spec)
+{
+ if (buf->shape[dim] <= 1)
+ return 1;
+ if (buf->strides) {
+ if (spec & __Pyx_MEMVIEW_CONTIG) {
+ if (spec & (__Pyx_MEMVIEW_PTR|__Pyx_MEMVIEW_FULL)) {
+ if (unlikely(buf->strides[dim] != sizeof(void *))) {
+ PyErr_Format(PyExc_ValueError,
+ "Buffer is not indirectly contiguous "
+ "in dimension %d.", dim);
+ goto fail;
+ }
+ } else if (unlikely(buf->strides[dim] != buf->itemsize)) {
+ PyErr_SetString(PyExc_ValueError,
+ "Buffer and memoryview are not contiguous "
+ "in the same dimension.");
+ goto fail;
+ }
+ }
+ if (spec & __Pyx_MEMVIEW_FOLLOW) {
+ Py_ssize_t stride = buf->strides[dim];
+ if (stride < 0)
+ stride = -stride;
+ if (unlikely(stride < buf->itemsize)) {
+ PyErr_SetString(PyExc_ValueError,
+ "Buffer and memoryview are not contiguous "
+ "in the same dimension.");
+ goto fail;
+ }
+ }
+ } else {
+ if (unlikely(spec & __Pyx_MEMVIEW_CONTIG && dim != ndim - 1)) {
+ PyErr_Format(PyExc_ValueError,
+ "C-contiguous buffer is not contiguous in "
+ "dimension %d", dim);
+ goto fail;
+ } else if (unlikely(spec & (__Pyx_MEMVIEW_PTR))) {
+ PyErr_Format(PyExc_ValueError,
+ "C-contiguous buffer is not indirect in "
+ "dimension %d", dim);
+ goto fail;
+ } else if (unlikely(buf->suboffsets)) {
+ PyErr_SetString(PyExc_ValueError,
+ "Buffer exposes suboffsets but no strides");
+ goto fail;
+ }
+ }
+ return 1;
+fail:
+ return 0;
+}
+static int
+__pyx_check_suboffsets(Py_buffer *buf, int dim, CYTHON_UNUSED int ndim, int spec)
+{
+ if (spec & __Pyx_MEMVIEW_DIRECT) {
+ if (unlikely(buf->suboffsets && buf->suboffsets[dim] >= 0)) {
+ PyErr_Format(PyExc_ValueError,
+ "Buffer not compatible with direct access "
+ "in dimension %d.", dim);
+ goto fail;
+ }
+ }
+ if (spec & __Pyx_MEMVIEW_PTR) {
+ if (unlikely(!buf->suboffsets || (buf->suboffsets[dim] < 0))) {
+ PyErr_Format(PyExc_ValueError,
+ "Buffer is not indirectly accessible "
+ "in dimension %d.", dim);
+ goto fail;
+ }
+ }
+ return 1;
+fail:
+ return 0;
+}
+static int
+__pyx_verify_contig(Py_buffer *buf, int ndim, int c_or_f_flag)
+{
+ int i;
+ if (c_or_f_flag & __Pyx_IS_F_CONTIG) {
+ Py_ssize_t stride = 1;
+ for (i = 0; i < ndim; i++) {
+ if (unlikely(stride * buf->itemsize != buf->strides[i] && buf->shape[i] > 1)) {
+ PyErr_SetString(PyExc_ValueError,
+ "Buffer not fortran contiguous.");
+ goto fail;
+ }
+ stride = stride * buf->shape[i];
+ }
+ } else if (c_or_f_flag & __Pyx_IS_C_CONTIG) {
+ Py_ssize_t stride = 1;
+ for (i = ndim - 1; i >- 1; i--) {
+ if (unlikely(stride * buf->itemsize != buf->strides[i] && buf->shape[i] > 1)) {
+ PyErr_SetString(PyExc_ValueError,
+ "Buffer not C contiguous.");
+ goto fail;
+ }
+ stride = stride * buf->shape[i];
+ }
+ }
+ return 1;
+fail:
+ return 0;
+}
+static int __Pyx_ValidateAndInit_memviewslice(
+ int *axes_specs,
+ int c_or_f_flag,
+ int buf_flags,
+ int ndim,
+ __Pyx_TypeInfo *dtype,
+ __Pyx_BufFmt_StackElem stack[],
+ __Pyx_memviewslice *memviewslice,
+ PyObject *original_obj)
+{
+ struct __pyx_memoryview_obj *memview, *new_memview;
+ __Pyx_RefNannyDeclarations
+ Py_buffer *buf;
+ int i, spec = 0, retval = -1;
+ __Pyx_BufFmt_Context ctx;
+ int from_memoryview = __pyx_memoryview_check(original_obj);
+ __Pyx_RefNannySetupContext("ValidateAndInit_memviewslice", 0);
+ if (from_memoryview && __pyx_typeinfo_cmp(dtype, ((struct __pyx_memoryview_obj *)
+ original_obj)->typeinfo)) {
+ memview = (struct __pyx_memoryview_obj *) original_obj;
+ new_memview = NULL;
+ } else {
+ memview = (struct __pyx_memoryview_obj *) __pyx_memoryview_new(
+ original_obj, buf_flags, 0, dtype);
+ new_memview = memview;
+ if (unlikely(!memview))
+ goto fail;
+ }
+ buf = &memview->view;
+ if (unlikely(buf->ndim != ndim)) {
+ PyErr_Format(PyExc_ValueError,
+ "Buffer has wrong number of dimensions (expected %d, got %d)",
+ ndim, buf->ndim);
+ goto fail;
+ }
+ if (new_memview) {
+ __Pyx_BufFmt_Init(&ctx, stack, dtype);
+ if (unlikely(!__Pyx_BufFmt_CheckString(&ctx, buf->format))) goto fail;
+ }
+ if (unlikely((unsigned) buf->itemsize != dtype->size)) {
+ PyErr_Format(PyExc_ValueError,
+ "Item size of buffer (%" CYTHON_FORMAT_SSIZE_T "u byte%s) "
+ "does not match size of '%s' (%" CYTHON_FORMAT_SSIZE_T "u byte%s)",
+ buf->itemsize,
+ (buf->itemsize > 1) ? "s" : "",
+ dtype->name,
+ dtype->size,
+ (dtype->size > 1) ? "s" : "");
+ goto fail;
+ }
+ if (buf->len > 0) {
+ for (i = 0; i < ndim; i++) {
+ spec = axes_specs[i];
+ if (unlikely(!__pyx_check_strides(buf, i, ndim, spec)))
+ goto fail;
+ if (unlikely(!__pyx_check_suboffsets(buf, i, ndim, spec)))
+ goto fail;
+ }
+ if (unlikely(buf->strides && !__pyx_verify_contig(buf, ndim, c_or_f_flag)))
+ goto fail;
+ }
+ if (unlikely(__Pyx_init_memviewslice(memview, ndim, memviewslice,
+ new_memview != NULL) == -1)) {
+ goto fail;
+ }
+ retval = 0;
+ goto no_fail;
+fail:
+ Py_XDECREF(new_memview);
+ retval = -1;
+no_fail:
+ __Pyx_RefNannyFinishContext();
+ return retval;
+}
+
+/* ObjectToMemviewSlice */
+ static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_int(PyObject *obj, int writable_flag) {
+ __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } };
+ __Pyx_BufFmt_StackElem stack[1];
+ int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_FOLLOW), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_FOLLOW), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_CONTIG) };
+ int retcode;
+ if (obj == Py_None) {
+ result.memview = (struct __pyx_memoryview_obj *) Py_None;
+ return result;
+ }
+ retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, __Pyx_IS_C_CONTIG,
+ (PyBUF_C_CONTIGUOUS | PyBUF_FORMAT) | writable_flag, 3,
+ &__Pyx_TypeInfo_int, stack,
+ &result, obj);
+ if (unlikely(retcode == -1))
+ goto __pyx_fail;
+ return result;
+__pyx_fail:
+ result.memview = NULL;
+ result.data = NULL;
+ return result;
+}
+
+/* ObjectToMemviewSlice */
+ static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_float(PyObject *obj, int writable_flag) {
+ __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } };
+ __Pyx_BufFmt_StackElem stack[1];
+ int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_FOLLOW), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_FOLLOW), (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_CONTIG) };
+ int retcode;
+ if (obj == Py_None) {
+ result.memview = (struct __pyx_memoryview_obj *) Py_None;
+ return result;
+ }
+ retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, __Pyx_IS_C_CONTIG,
+ (PyBUF_C_CONTIGUOUS | PyBUF_FORMAT) | writable_flag, 3,
+ &__Pyx_TypeInfo_float, stack,
+ &result, obj);
+ if (unlikely(retcode == -1))
+ goto __pyx_fail;
+ return result;
+__pyx_fail:
+ result.memview = NULL;
+ result.data = NULL;
+ return result;
+}
+
+/* ObjectToMemviewSlice */
+ static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dc_int(PyObject *obj, int writable_flag) {
+ __Pyx_memviewslice result = { 0, 0, { 0 }, { 0 }, { 0 } };
+ __Pyx_BufFmt_StackElem stack[1];
+ int axes_specs[] = { (__Pyx_MEMVIEW_DIRECT | __Pyx_MEMVIEW_CONTIG) };
+ int retcode;
+ if (obj == Py_None) {
+ result.memview = (struct __pyx_memoryview_obj *) Py_None;
+ return result;
+ }
+ retcode = __Pyx_ValidateAndInit_memviewslice(axes_specs, __Pyx_IS_C_CONTIG,
+ (PyBUF_C_CONTIGUOUS | PyBUF_FORMAT) | writable_flag, 1,
+ &__Pyx_TypeInfo_int, stack,
+ &result, obj);
+ if (unlikely(retcode == -1))
+ goto __pyx_fail;
+ return result;
+__pyx_fail:
+ result.memview = NULL;
+ result.data = NULL;
+ return result;
+}
+
+/* CIntFromPyVerify */
+ #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\
+ __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0)
+#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\
+ __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1)
+#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\
+ {\
+ func_type value = func_value;\
+ if (sizeof(target_type) < sizeof(func_type)) {\
+ if (unlikely(value != (func_type) (target_type) value)) {\
+ func_type zero = 0;\
+ if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\
+ return (target_type) -1;\
+ if (is_unsigned && unlikely(value < zero))\
+ goto raise_neg_overflow;\
+ else\
+ goto raise_overflow;\
+ }\
+ }\
+ return (target_type) value;\
+ }
+
+/* MemviewSliceCopyTemplate */
+ static __Pyx_memviewslice
+__pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs,
+ const char *mode, int ndim,
+ size_t sizeof_dtype, int contig_flag,
+ int dtype_is_object)
+{
+ __Pyx_RefNannyDeclarations
+ int i;
+ __Pyx_memviewslice new_mvs = { 0, 0, { 0 }, { 0 }, { 0 } };
+ struct __pyx_memoryview_obj *from_memview = from_mvs->memview;
+ Py_buffer *buf = &from_memview->view;
+ PyObject *shape_tuple = NULL;
+ PyObject *temp_int = NULL;
+ struct __pyx_array_obj *array_obj = NULL;
+ struct __pyx_memoryview_obj *memview_obj = NULL;
+ __Pyx_RefNannySetupContext("__pyx_memoryview_copy_new_contig", 0);
+ for (i = 0; i < ndim; i++) {
+ if (unlikely(from_mvs->suboffsets[i] >= 0)) {
+ PyErr_Format(PyExc_ValueError, "Cannot copy memoryview slice with "
+ "indirect dimensions (axis %d)", i);
+ goto fail;
+ }
+ }
+ shape_tuple = PyTuple_New(ndim);
+ if (unlikely(!shape_tuple)) {
+ goto fail;
+ }
+ __Pyx_GOTREF(shape_tuple);
+ for(i = 0; i < ndim; i++) {
+ temp_int = PyInt_FromSsize_t(from_mvs->shape[i]);
+ if(unlikely(!temp_int)) {
+ goto fail;
+ } else {
+ PyTuple_SET_ITEM(shape_tuple, i, temp_int);
+ temp_int = NULL;
+ }
+ }
+ array_obj = __pyx_array_new(shape_tuple, sizeof_dtype, buf->format, (char *) mode, NULL);
+ if (unlikely(!array_obj)) {
+ goto fail;
+ }
+ __Pyx_GOTREF(array_obj);
+ memview_obj = (struct __pyx_memoryview_obj *) __pyx_memoryview_new(
+ (PyObject *) array_obj, contig_flag,
+ dtype_is_object,
+ from_mvs->memview->typeinfo);
+ if (unlikely(!memview_obj))
+ goto fail;
+ if (unlikely(__Pyx_init_memviewslice(memview_obj, ndim, &new_mvs, 1) < 0))
+ goto fail;
+ if (unlikely(__pyx_memoryview_copy_contents(*from_mvs, new_mvs, ndim, ndim,
+ dtype_is_object) < 0))
+ goto fail;
+ goto no_fail;
+fail:
+ __Pyx_XDECREF(new_mvs.memview);
+ new_mvs.memview = NULL;
+ new_mvs.data = NULL;
+no_fail:
+ __Pyx_XDECREF(shape_tuple);
+ __Pyx_XDECREF(temp_int);
+ __Pyx_XDECREF(array_obj);
+ __Pyx_RefNannyFinishContext();
+ return new_mvs;
+}
+
+/* CIntToPy */
+ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+ const int neg_one = (int) -1, const_zero = (int) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
+ const int is_unsigned = neg_one > const_zero;
+ if (is_unsigned) {
+ if (sizeof(int) < sizeof(long)) {
+ return PyInt_FromLong((long) value);
+ } else if (sizeof(int) <= sizeof(unsigned long)) {
+ return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+ } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
+ return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+ }
+ } else {
+ if (sizeof(int) <= sizeof(long)) {
+ return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+ } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
+ return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+ }
+ }
+ {
+ int one = 1; int little = (int)*(unsigned char *)&one;
+ unsigned char *bytes = (unsigned char *)&value;
+ return _PyLong_FromByteArray(bytes, sizeof(int),
+ little, !is_unsigned);
+ }
+}
+
+/* CIntFromPy */
+ static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+ const int neg_one = (int) -1, const_zero = (int) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
+ const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+ if (likely(PyInt_Check(x))) {
+ if (sizeof(int) < sizeof(long)) {
+ __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x))
+ } else {
+ long val = PyInt_AS_LONG(x);
+ if (is_unsigned && unlikely(val < 0)) {
+ goto raise_neg_overflow;
+ }
+ return (int) val;
+ }
+ } else
+#endif
+ if (likely(PyLong_Check(x))) {
+ if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+ const digit* digits = ((PyLongObject*)x)->ob_digit;
+ switch (Py_SIZE(x)) {
+ case 0: return (int) 0;
+ case 1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0])
+ case 2:
+ if (8 * sizeof(int) > 1 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) {
+ return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
+ }
+ }
+ break;
+ case 3:
+ if (8 * sizeof(int) > 2 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) {
+ return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
+ }
+ }
+ break;
+ case 4:
+ if (8 * sizeof(int) > 3 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) {
+ return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
+ }
+ }
+ break;
+ }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+ if (unlikely(Py_SIZE(x) < 0)) {
+ goto raise_neg_overflow;
+ }
+#else
+ {
+ int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+ if (unlikely(result < 0))
+ return (int) -1;
+ if (unlikely(result == 1))
+ goto raise_neg_overflow;
+ }
+#endif
+ if (sizeof(int) <= sizeof(unsigned long)) {
+ __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
+ } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
+ __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
+ }
+ } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+ const digit* digits = ((PyLongObject*)x)->ob_digit;
+ switch (Py_SIZE(x)) {
+ case 0: return (int) 0;
+ case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0]))
+ case 1: __PYX_VERIFY_RETURN_INT(int, digit, +digits[0])
+ case -2:
+ if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {
+ return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
+ }
+ }
+ break;
+ case 2:
+ if (8 * sizeof(int) > 1 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {
+ return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
+ }
+ }
+ break;
+ case -3:
+ if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {
+ return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
+ }
+ }
+ break;
+ case 3:
+ if (8 * sizeof(int) > 2 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {
+ return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
+ }
+ }
+ break;
+ case -4:
+ if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) {
+ return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
+ }
+ }
+ break;
+ case 4:
+ if (8 * sizeof(int) > 3 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) {
+ return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
+ }
+ }
+ break;
+ }
+#endif
+ if (sizeof(int) <= sizeof(long)) {
+ __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
+ } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
+ __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
+ }
+ }
+ {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+ PyErr_SetString(PyExc_RuntimeError,
+ "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+ int val;
+ PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+ if (likely(v) && !PyLong_Check(v)) {
+ PyObject *tmp = v;
+ v = PyNumber_Long(tmp);
+ Py_DECREF(tmp);
+ }
+ #endif
+ if (likely(v)) {
+ int one = 1; int is_little = (int)*(unsigned char *)&one;
+ unsigned char *bytes = (unsigned char *)&val;
+ int ret = _PyLong_AsByteArray((PyLongObject *)v,
+ bytes, sizeof(val),
+ is_little, !is_unsigned);
+ Py_DECREF(v);
+ if (likely(!ret))
+ return val;
+ }
+#endif
+ return (int) -1;
+ }
+ } else {
+ int val;
+ PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+ if (!tmp) return (int) -1;
+ val = __Pyx_PyInt_As_int(tmp);
+ Py_DECREF(tmp);
+ return val;
+ }
+raise_overflow:
+ PyErr_SetString(PyExc_OverflowError,
+ "value too large to convert to int");
+ return (int) -1;
+raise_neg_overflow:
+ PyErr_SetString(PyExc_OverflowError,
+ "can't convert negative value to int");
+ return (int) -1;
+}
+
+/* CIntToPy */
+ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+ const long neg_one = (long) -1, const_zero = (long) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
+ const int is_unsigned = neg_one > const_zero;
+ if (is_unsigned) {
+ if (sizeof(long) < sizeof(long)) {
+ return PyInt_FromLong((long) value);
+ } else if (sizeof(long) <= sizeof(unsigned long)) {
+ return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+ } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
+ return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+ }
+ } else {
+ if (sizeof(long) <= sizeof(long)) {
+ return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+ } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
+ return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+ }
+ }
+ {
+ int one = 1; int little = (int)*(unsigned char *)&one;
+ unsigned char *bytes = (unsigned char *)&value;
+ return _PyLong_FromByteArray(bytes, sizeof(long),
+ little, !is_unsigned);
+ }
+}
+
+/* CIntFromPy */
+ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+ const long neg_one = (long) -1, const_zero = (long) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
+ const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+ if (likely(PyInt_Check(x))) {
+ if (sizeof(long) < sizeof(long)) {
+ __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x))
+ } else {
+ long val = PyInt_AS_LONG(x);
+ if (is_unsigned && unlikely(val < 0)) {
+ goto raise_neg_overflow;
+ }
+ return (long) val;
+ }
+ } else
+#endif
+ if (likely(PyLong_Check(x))) {
+ if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+ const digit* digits = ((PyLongObject*)x)->ob_digit;
+ switch (Py_SIZE(x)) {
+ case 0: return (long) 0;
+ case 1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0])
+ case 2:
+ if (8 * sizeof(long) > 1 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) {
+ return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
+ }
+ }
+ break;
+ case 3:
+ if (8 * sizeof(long) > 2 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) {
+ return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
+ }
+ }
+ break;
+ case 4:
+ if (8 * sizeof(long) > 3 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) {
+ return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
+ }
+ }
+ break;
+ }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+ if (unlikely(Py_SIZE(x) < 0)) {
+ goto raise_neg_overflow;
+ }
+#else
+ {
+ int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+ if (unlikely(result < 0))
+ return (long) -1;
+ if (unlikely(result == 1))
+ goto raise_neg_overflow;
+ }
+#endif
+ if (sizeof(long) <= sizeof(unsigned long)) {
+ __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
+ } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
+ __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
+ }
+ } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+ const digit* digits = ((PyLongObject*)x)->ob_digit;
+ switch (Py_SIZE(x)) {
+ case 0: return (long) 0;
+ case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0]))
+ case 1: __PYX_VERIFY_RETURN_INT(long, digit, +digits[0])
+ case -2:
+ if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
+ return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
+ }
+ }
+ break;
+ case 2:
+ if (8 * sizeof(long) > 1 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
+ return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
+ }
+ }
+ break;
+ case -3:
+ if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
+ return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
+ }
+ }
+ break;
+ case 3:
+ if (8 * sizeof(long) > 2 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
+ return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
+ }
+ }
+ break;
+ case -4:
+ if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
+ return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
+ }
+ }
+ break;
+ case 4:
+ if (8 * sizeof(long) > 3 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
+ return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
+ }
+ }
+ break;
+ }
+#endif
+ if (sizeof(long) <= sizeof(long)) {
+ __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
+ } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
+ __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
+ }
+ }
+ {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+ PyErr_SetString(PyExc_RuntimeError,
+ "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+ long val;
+ PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+ if (likely(v) && !PyLong_Check(v)) {
+ PyObject *tmp = v;
+ v = PyNumber_Long(tmp);
+ Py_DECREF(tmp);
+ }
+ #endif
+ if (likely(v)) {
+ int one = 1; int is_little = (int)*(unsigned char *)&one;
+ unsigned char *bytes = (unsigned char *)&val;
+ int ret = _PyLong_AsByteArray((PyLongObject *)v,
+ bytes, sizeof(val),
+ is_little, !is_unsigned);
+ Py_DECREF(v);
+ if (likely(!ret))
+ return val;
+ }
+#endif
+ return (long) -1;
+ }
+ } else {
+ long val;
+ PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+ if (!tmp) return (long) -1;
+ val = __Pyx_PyInt_As_long(tmp);
+ Py_DECREF(tmp);
+ return val;
+ }
+raise_overflow:
+ PyErr_SetString(PyExc_OverflowError,
+ "value too large to convert to long");
+ return (long) -1;
+raise_neg_overflow:
+ PyErr_SetString(PyExc_OverflowError,
+ "can't convert negative value to long");
+ return (long) -1;
+}
+
+/* CIntFromPy */
+ static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *x) {
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wconversion"
+#endif
+ const char neg_one = (char) -1, const_zero = (char) 0;
+#ifdef __Pyx_HAS_GCC_DIAGNOSTIC
+#pragma GCC diagnostic pop
+#endif
+ const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+ if (likely(PyInt_Check(x))) {
+ if (sizeof(char) < sizeof(long)) {
+ __PYX_VERIFY_RETURN_INT(char, long, PyInt_AS_LONG(x))
+ } else {
+ long val = PyInt_AS_LONG(x);
+ if (is_unsigned && unlikely(val < 0)) {
+ goto raise_neg_overflow;
+ }
+ return (char) val;
+ }
+ } else
+#endif
+ if (likely(PyLong_Check(x))) {
+ if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+ const digit* digits = ((PyLongObject*)x)->ob_digit;
+ switch (Py_SIZE(x)) {
+ case 0: return (char) 0;
+ case 1: __PYX_VERIFY_RETURN_INT(char, digit, digits[0])
+ case 2:
+ if (8 * sizeof(char) > 1 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(char) >= 2 * PyLong_SHIFT) {
+ return (char) (((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
+ }
+ }
+ break;
+ case 3:
+ if (8 * sizeof(char) > 2 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(char) >= 3 * PyLong_SHIFT) {
+ return (char) (((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
+ }
+ }
+ break;
+ case 4:
+ if (8 * sizeof(char) > 3 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(char) >= 4 * PyLong_SHIFT) {
+ return (char) (((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0]));
+ }
+ }
+ break;
+ }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+ if (unlikely(Py_SIZE(x) < 0)) {
+ goto raise_neg_overflow;
+ }
+#else
+ {
+ int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+ if (unlikely(result < 0))
+ return (char) -1;
+ if (unlikely(result == 1))
+ goto raise_neg_overflow;
+ }
+#endif
+ if (sizeof(char) <= sizeof(unsigned long)) {
+ __PYX_VERIFY_RETURN_INT_EXC(char, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
+ } else if (sizeof(char) <= sizeof(unsigned PY_LONG_LONG)) {
+ __PYX_VERIFY_RETURN_INT_EXC(char, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
+ }
+ } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+ const digit* digits = ((PyLongObject*)x)->ob_digit;
+ switch (Py_SIZE(x)) {
+ case 0: return (char) 0;
+ case -1: __PYX_VERIFY_RETURN_INT(char, sdigit, (sdigit) (-(sdigit)digits[0]))
+ case 1: __PYX_VERIFY_RETURN_INT(char, digit, +digits[0])
+ case -2:
+ if (8 * sizeof(char) - 1 > 1 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) {
+ return (char) (((char)-1)*(((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
+ }
+ }
+ break;
+ case 2:
+ if (8 * sizeof(char) > 1 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) {
+ return (char) ((((((char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
+ }
+ }
+ break;
+ case -3:
+ if (8 * sizeof(char) - 1 > 2 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) {
+ return (char) (((char)-1)*(((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
+ }
+ }
+ break;
+ case 3:
+ if (8 * sizeof(char) > 2 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) {
+ return (char) ((((((((char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
+ }
+ }
+ break;
+ case -4:
+ if (8 * sizeof(char) - 1 > 3 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(char, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(char) - 1 > 4 * PyLong_SHIFT) {
+ return (char) (((char)-1)*(((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
+ }
+ }
+ break;
+ case 4:
+ if (8 * sizeof(char) > 3 * PyLong_SHIFT) {
+ if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+ __PYX_VERIFY_RETURN_INT(char, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+ } else if (8 * sizeof(char) - 1 > 4 * PyLong_SHIFT) {
+ return (char) ((((((((((char)digits[3]) << PyLong_SHIFT) | (char)digits[2]) << PyLong_SHIFT) | (char)digits[1]) << PyLong_SHIFT) | (char)digits[0])));
+ }
+ }
+ break;
+ }
+#endif
+ if (sizeof(char) <= sizeof(long)) {
+ __PYX_VERIFY_RETURN_INT_EXC(char, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
+ } else if (sizeof(char) <= sizeof(PY_LONG_LONG)) {
+ __PYX_VERIFY_RETURN_INT_EXC(char, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
+ }
+ }
+ {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+ PyErr_SetString(PyExc_RuntimeError,
+ "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+ char val;
+ PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+ if (likely(v) && !PyLong_Check(v)) {
+ PyObject *tmp = v;
+ v = PyNumber_Long(tmp);
+ Py_DECREF(tmp);
+ }
+ #endif
+ if (likely(v)) {
+ int one = 1; int is_little = (int)*(unsigned char *)&one;
+ unsigned char *bytes = (unsigned char *)&val;
+ int ret = _PyLong_AsByteArray((PyLongObject *)v,
+ bytes, sizeof(val),
+ is_little, !is_unsigned);
+ Py_DECREF(v);
+ if (likely(!ret))
+ return val;
+ }
+#endif
+ return (char) -1;
+ }
+ } else {
+ char val;
+ PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+ if (!tmp) return (char) -1;
+ val = __Pyx_PyInt_As_char(tmp);
+ Py_DECREF(tmp);
+ return val;
+ }
+raise_overflow:
+ PyErr_SetString(PyExc_OverflowError,
+ "value too large to convert to char");
+ return (char) -1;
+raise_neg_overflow:
+ PyErr_SetString(PyExc_OverflowError,
+ "can't convert negative value to char");
+ return (char) -1;
+}
+
+/* CheckBinaryVersion */
+ static int __Pyx_check_binary_version(void) {
+ char ctversion[5];
+ int same=1, i, found_dot;
+ const char* rt_from_call = Py_GetVersion();
+ PyOS_snprintf(ctversion, 5, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
+ found_dot = 0;
+ for (i = 0; i < 4; i++) {
+ if (!ctversion[i]) {
+ same = (rt_from_call[i] < '0' || rt_from_call[i] > '9');
+ break;
+ }
+ if (rt_from_call[i] != ctversion[i]) {
+ same = 0;
+ break;
+ }
+ }
+ if (!same) {
+ char rtversion[5] = {'\0'};
+ char message[200];
+ for (i=0; i<4; ++i) {
+ if (rt_from_call[i] == '.') {
+ if (found_dot) break;
+ found_dot = 1;
+ } else if (rt_from_call[i] < '0' || rt_from_call[i] > '9') {
+ break;
+ }
+ rtversion[i] = rt_from_call[i];
+ }
+ PyOS_snprintf(message, sizeof(message),
+ "compiletime version %s of module '%.100s' "
+ "does not match runtime version %s",
+ ctversion, __Pyx_MODULE_NAME, rtversion);
+ return PyErr_WarnEx(NULL, message, 1);
+ }
+ return 0;
+}
+
+/* InitStrings */
+ static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
+ while (t->p) {
+ #if PY_MAJOR_VERSION < 3
+ if (t->is_unicode) {
+ *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL);
+ } else if (t->intern) {
+ *t->p = PyString_InternFromString(t->s);
+ } else {
+ *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
+ }
+ #else
+ if (t->is_unicode | t->is_str) {
+ if (t->intern) {
+ *t->p = PyUnicode_InternFromString(t->s);
+ } else if (t->encoding) {
+ *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL);
+ } else {
+ *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1);
+ }
+ } else {
+ *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1);
+ }
+ #endif
+ if (!*t->p)
+ return -1;
+ if (PyObject_Hash(*t->p) == -1)
+ return -1;
+ ++t;
+ }
+ return 0;
+}
+
+static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) {
+ return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str));
+}
+static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) {
+ Py_ssize_t ignore;
+ return __Pyx_PyObject_AsStringAndSize(o, &ignore);
+}
+#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
+#if !CYTHON_PEP393_ENABLED
+static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
+ char* defenc_c;
+ PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL);
+ if (!defenc) return NULL;
+ defenc_c = PyBytes_AS_STRING(defenc);
+#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
+ {
+ char* end = defenc_c + PyBytes_GET_SIZE(defenc);
+ char* c;
+ for (c = defenc_c; c < end; c++) {
+ if ((unsigned char) (*c) >= 128) {
+ PyUnicode_AsASCIIString(o);
+ return NULL;
+ }
+ }
+ }
+#endif
+ *length = PyBytes_GET_SIZE(defenc);
+ return defenc_c;
+}
+#else
+static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
+ if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL;
+#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
+ if (likely(PyUnicode_IS_ASCII(o))) {
+ *length = PyUnicode_GET_LENGTH(o);
+ return PyUnicode_AsUTF8(o);
+ } else {
+ PyUnicode_AsASCIIString(o);
+ return NULL;
+ }
+#else
+ return PyUnicode_AsUTF8AndSize(o, length);
+#endif
+}
+#endif
+#endif
+static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
+#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
+ if (
+#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
+ __Pyx_sys_getdefaultencoding_not_ascii &&
+#endif
+ PyUnicode_Check(o)) {
+ return __Pyx_PyUnicode_AsStringAndSize(o, length);
+ } else
+#endif
+#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE))
+ if (PyByteArray_Check(o)) {
+ *length = PyByteArray_GET_SIZE(o);
+ return PyByteArray_AS_STRING(o);
+ } else
+#endif
+ {
+ char* result;
+ int r = PyBytes_AsStringAndSize(o, &result, length);
+ if (unlikely(r < 0)) {
+ return NULL;
+ } else {
+ return result;
+ }
+ }
+}
+static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
+ int is_true = x == Py_True;
+ if (is_true | (x == Py_False) | (x == Py_None)) return is_true;
+ else return PyObject_IsTrue(x);
+}
+static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) {
+ int retval;
+ if (unlikely(!x)) return -1;
+ retval = __Pyx_PyObject_IsTrue(x);
+ Py_DECREF(x);
+ return retval;
+}
+static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) {
+#if PY_MAJOR_VERSION >= 3
+ if (PyLong_Check(result)) {
+ if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
+ "__int__ returned non-int (type %.200s). "
+ "The ability to return an instance of a strict subclass of int "
+ "is deprecated, and may be removed in a future version of Python.",
+ Py_TYPE(result)->tp_name)) {
+ Py_DECREF(result);
+ return NULL;
+ }
+ return result;
+ }
+#endif
+ PyErr_Format(PyExc_TypeError,
+ "__%.4s__ returned non-%.4s (type %.200s)",
+ type_name, type_name, Py_TYPE(result)->tp_name);
+ Py_DECREF(result);
+ return NULL;
+}
+static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) {
+#if CYTHON_USE_TYPE_SLOTS
+ PyNumberMethods *m;
+#endif
+ const char *name = NULL;
+ PyObject *res = NULL;
+#if PY_MAJOR_VERSION < 3
+ if (likely(PyInt_Check(x) || PyLong_Check(x)))
+#else
+ if (likely(PyLong_Check(x)))
+#endif
+ return __Pyx_NewRef(x);
+#if CYTHON_USE_TYPE_SLOTS
+ m = Py_TYPE(x)->tp_as_number;
+ #if PY_MAJOR_VERSION < 3
+ if (m && m->nb_int) {
+ name = "int";
+ res = m->nb_int(x);
+ }
+ else if (m && m->nb_long) {
+ name = "long";
+ res = m->nb_long(x);
+ }
+ #else
+ if (likely(m && m->nb_int)) {
+ name = "int";
+ res = m->nb_int(x);
+ }
+ #endif
+#else
+ if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) {
+ res = PyNumber_Int(x);
+ }
+#endif
+ if (likely(res)) {
+#if PY_MAJOR_VERSION < 3
+ if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) {
+#else
+ if (unlikely(!PyLong_CheckExact(res))) {
+#endif
+ return __Pyx_PyNumber_IntOrLongWrongResultType(res, name);
+ }
+ }
+ else if (!PyErr_Occurred()) {
+ PyErr_SetString(PyExc_TypeError,
+ "an integer is required");
+ }
+ return res;
+}
+static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
+ Py_ssize_t ival;
+ PyObject *x;
+#if PY_MAJOR_VERSION < 3
+ if (likely(PyInt_CheckExact(b))) {
+ if (sizeof(Py_ssize_t) >= sizeof(long))
+ return PyInt_AS_LONG(b);
+ else
+ return PyInt_AsSsize_t(b);
+ }
+#endif
+ if (likely(PyLong_CheckExact(b))) {
+ #if CYTHON_USE_PYLONG_INTERNALS
+ const digit* digits = ((PyLongObject*)b)->ob_digit;
+ const Py_ssize_t size = Py_SIZE(b);
+ if (likely(__Pyx_sst_abs(size) <= 1)) {
+ ival = likely(size) ? digits[0] : 0;
+ if (size == -1) ival = -ival;
+ return ival;
+ } else {
+ switch (size) {
+ case 2:
+ if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) {
+ return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+ }
+ break;
+ case -2:
+ if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) {
+ return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+ }
+ break;
+ case 3:
+ if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) {
+ return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+ }
+ break;
+ case -3:
+ if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) {
+ return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+ }
+ break;
+ case 4:
+ if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) {
+ return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+ }
+ break;
+ case -4:
+ if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) {
+ return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
+ }
+ break;
+ }
+ }
+ #endif
+ return PyLong_AsSsize_t(b);
+ }
+ x = PyNumber_Index(b);
+ if (!x) return -1;
+ ival = PyInt_AsSsize_t(x);
+ Py_DECREF(x);
+ return ival;
+}
+static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject* o) {
+ if (sizeof(Py_hash_t) == sizeof(Py_ssize_t)) {
+ return (Py_hash_t) __Pyx_PyIndex_AsSsize_t(o);
+#if PY_MAJOR_VERSION < 3
+ } else if (likely(PyInt_CheckExact(o))) {
+ return PyInt_AS_LONG(o);
+#endif
+ } else {
+ Py_ssize_t ival;
+ PyObject *x;
+ x = PyNumber_Index(o);
+ if (!x) return -1;
+ ival = PyInt_AsLong(x);
+ Py_DECREF(x);
+ return ival;
+ }
+}
+static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) {
+ return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False);
+}
+static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
+ return PyInt_FromSize_t(ival);
+}
+
+
+#endif /* Py_PYTHON_H */
diff --git a/demo/MMVC_Trainer/monotonic_align/core.pyx b/demo/MMVC_Trainer/monotonic_align/core.pyx
new file mode 100755
index 00000000..bfaabd4d
--- /dev/null
+++ b/demo/MMVC_Trainer/monotonic_align/core.pyx
@@ -0,0 +1,42 @@
+cimport cython
+from cython.parallel import prange
+
+
+@cython.boundscheck(False)
+@cython.wraparound(False)
+cdef void maximum_path_each(int[:,::1] path, float[:,::1] value, int t_y, int t_x, float max_neg_val=-1e9) nogil:
+ cdef int x
+ cdef int y
+ cdef float v_prev
+ cdef float v_cur
+ cdef float tmp
+ cdef int index = t_x - 1
+
+ for y in range(t_y):
+ for x in range(max(0, t_x + y - t_y), min(t_x, y + 1)):
+ if x == y:
+ v_cur = max_neg_val
+ else:
+ v_cur = value[y-1, x]
+ if x == 0:
+ if y == 0:
+ v_prev = 0.
+ else:
+ v_prev = max_neg_val
+ else:
+ v_prev = value[y-1, x-1]
+ value[y, x] += max(v_prev, v_cur)
+
+ for y in range(t_y - 1, -1, -1):
+ path[y, index] = 1
+ if index != 0 and (index == y or value[y-1, index] < value[y-1, index-1]):
+ index = index - 1
+
+
+@cython.boundscheck(False)
+@cython.wraparound(False)
+cpdef void maximum_path_c(int[:,:,::1] paths, float[:,:,::1] values, int[::1] t_ys, int[::1] t_xs) nogil:
+ cdef int b = paths.shape[0]
+ cdef int i
+ for i in prange(b, nogil=True):
+ maximum_path_each(paths[i], values[i], t_ys[i], t_xs[i])
diff --git a/demo/MMVC_Trainer/monotonic_align/monotonic_align/core.cpython-37m-x86_64-linux-gnu.so b/demo/MMVC_Trainer/monotonic_align/monotonic_align/core.cpython-37m-x86_64-linux-gnu.so
new file mode 100755
index 00000000..0ea56ee9
Binary files /dev/null and b/demo/MMVC_Trainer/monotonic_align/monotonic_align/core.cpython-37m-x86_64-linux-gnu.so differ
diff --git a/demo/MMVC_Trainer/monotonic_align/monotonic_align/core.cpython-39-x86_64-linux-gnu.so b/demo/MMVC_Trainer/monotonic_align/monotonic_align/core.cpython-39-x86_64-linux-gnu.so
new file mode 100755
index 00000000..d1b1fd7b
Binary files /dev/null and b/demo/MMVC_Trainer/monotonic_align/monotonic_align/core.cpython-39-x86_64-linux-gnu.so differ
diff --git a/demo/MMVC_Trainer/monotonic_align/setup.py b/demo/MMVC_Trainer/monotonic_align/setup.py
new file mode 100755
index 00000000..30c22480
--- /dev/null
+++ b/demo/MMVC_Trainer/monotonic_align/setup.py
@@ -0,0 +1,9 @@
+from distutils.core import setup
+from Cython.Build import cythonize
+import numpy
+
+setup(
+ name = 'monotonic_align',
+ ext_modules = cythonize("core.pyx"),
+ include_dirs=[numpy.get_include()]
+)
diff --git a/demo/MMVC_Trainer/most_likely_voice.py b/demo/MMVC_Trainer/most_likely_voice.py
new file mode 100755
index 00000000..43bccbd2
--- /dev/null
+++ b/demo/MMVC_Trainer/most_likely_voice.py
@@ -0,0 +1,100 @@
+import numpy as np
+import torch
+from torch.nn import functional as F
+from torch.utils.data import DataLoader
+from tqdm import tqdm
+import glob
+import sys
+import argparse
+
+import utils
+from data_utils import (
+ TextAudioSpeakerLoader,
+ TextAudioSpeakerCollate
+)
+from models import (
+ SynthesizerTrn
+)
+from mel_processing import mel_spectrogram_torch, spec_to_mel_torch
+from text.symbols import symbols
+
+def mel_loss(spec, audio, hps):
+ # 学習と同じやり方でmel spectrogramの誤差を算出
+ y_mel = spec_to_mel_torch(
+ spec,
+ hps.data.filter_length,
+ hps.data.n_mel_channels,
+ hps.data.sampling_rate,
+ hps.data.mel_fmin,
+ hps.data.mel_fmax)
+
+ y_hat = audio.unsqueeze(0).unsqueeze(0)
+ y_hat = y_hat.float()
+ y_hat_mel = mel_spectrogram_torch(
+ y_hat.squeeze(1),
+ hps.data.filter_length,
+ hps.data.n_mel_channels,
+ hps.data.sampling_rate,
+ hps.data.hop_length,
+ hps.data.win_length,
+ hps.data.mel_fmin,
+ hps.data.mel_fmax)
+
+ loss_mel = F.l1_loss(y_mel, y_hat_mel) * hps.train.c_mel
+ return loss_mel
+
+def run_most_likely_voice():
+ #parser
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-f', '--fine_model_path')
+ parser.add_argument('-v', '--myvoice_path', default='./dataset/textful/00_myvoice/wav')
+ parser.add_argument('-c', '--config_path', default='./configs/baseconfig.json')
+ parser.add_argument('-n', '--sample_voice_num', default= 5)
+ args = parser.parse_args()
+
+ #load config
+ hps = utils.get_hparams_from_file(args.config_path)
+
+ net_g = SynthesizerTrn(
+ len(symbols),
+ hps.data.filter_length // 2 + 1,
+ hps.train.segment_size // hps.data.hop_length,
+ n_speakers=hps.data.n_speakers,
+ **hps.model)
+ #_ = net_g.eval()
+ _ = utils.load_checkpoint(args.fine_model_path, net_g, None)
+
+ dummy_source_speaker_id = 109
+ #モデルに入れるための加工を行うためにTextAudioSpeakerLoaderを呼び出す
+ eval_dataset = TextAudioSpeakerLoader(hps.data.validation_files, hps.data, augmentation=False, no_use_textfile = True)
+ wav_files = sorted(glob.glob(f"{args.myvoice_path}/*.wav"))
+ wav_files = wav_files[:args.sample_voice_num]
+ all_data = list()
+ for wav_file in tqdm(wav_files):
+ data = eval_dataset.get_audio_text_speaker_pair([wav_file, dummy_source_speaker_id, "a"])
+ data = TextAudioSpeakerCollate()([data])
+ all_data.append(data)
+
+ speaker_num = 100
+ loss_mels = np.zeros(speaker_num)
+
+ for target_id in tqdm(range(0, speaker_num)):
+ sid_target = torch.LongTensor([target_id]).cuda()
+ print(f"target id: {target_id} / loss mel: ", end="")
+ for data in tqdm(all_data):
+ x, x_lengths, spec, spec_lengths, y, y_lengths, sid_src = [x.cuda() for x in data]
+ result = net_g.cuda().voice_conversion(spec, spec_lengths, sid_src=sid_target, sid_tgt=sid_target)
+ audio = result[0][0,0]
+ loss_mel = mel_loss(spec, audio, hps).data.cpu().float().numpy()
+ loss_mels[target_id] += loss_mel
+ print(f"{loss_mel:.3f} ", end="")
+ loss_mels[target_id] /= len(all_data)
+ print(f"/ ave: {loss_mels[target_id]:.3f}")
+
+ print("--- Most likely voice ---")
+ top_losses = np.argsort(loss_mels)[:3]
+ for target_id in top_losses:
+ print(f"target id: {target_id} / ave: {loss_mels[target_id]:.3f}")
+
+if __name__ == "__main__":
+ run_most_likely_voice()
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/notebook/00_Rec_Voice.ipynb b/demo/MMVC_Trainer/notebook/00_Rec_Voice.ipynb
new file mode 100755
index 00000000..722b20c9
--- /dev/null
+++ b/demo/MMVC_Trainer/notebook/00_Rec_Voice.ipynb
@@ -0,0 +1 @@
+{"cells":[{"cell_type":"markdown","metadata":{"id":"Q3egrWHAzs7H"},"source":["# MMVC学習用の音声データの録音\n","\n","ver.2022/06/19\n","\n"]},{"cell_type":"markdown","metadata":{"id":"V61VE7vxLaY3"},"source":["## 1 概要\n","MMVC学習用の自身の音声データを録音します。"]},{"cell_type":"markdown","metadata":{"id":"kN0-Tj3TL-T2"},"source":["## 2 Google Drive をマウント\n","**Google Drive にアップロードした MMVC_Trainer を参照できるように、設定します。**\n","\n","「このノートブックに Google ドライブのファイルへのアクセスを許可しますか?」\n","\n","といったポップアップが表示されるので、「Google ドライブに接続」を押下し、google アカウントを選択して、「許可」を選択してください。\n","\n","成功すれば、下記メッセージが出ます。\n","```\n","Mounted at /content/drive/\n","```\n"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"hdfce8bPkpMB"},"outputs":[],"source":["from google.colab import drive\n","drive.mount('/content/drive')"]},{"cell_type":"markdown","metadata":{"id":"AXCsRWVLNn0c"},"source":["cdコマンドを実行して、マウントしたGoogle Drive のMMVC_Trainerディレクトリに移動します。\n","\n","%cd 「MMVC_Trainerをgoogle driveにパップロードしたパス」\n","\n","としてください。\n","\n","正しいパスが指定されていれば\n","\n","-rw------- 1 root root 11780 Mar 4 16:53 attentions.py\n","\n","-rw------- 1 root root 4778 Mar 4 16:53 commons.py\n","\n","drwx------ 2 root root 4096 Mar 5 15:20 configs\n","\n","...といった感じに表示されるはずです。"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"cLxKrVTGkvsq"},"outputs":[],"source":["%cd /content/drive/MyDrive/\n","!ls -la"]},{"cell_type":"markdown","metadata":{"id":"Kj6t5IEkI21q"},"source":["## 3 学習用音声を録音する\n","\n","ITAコーパスを利用して音声を録音します。 \n","次の録音用のプログラムを読み込みます。"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"1Txer2hJJvii"},"outputs":[],"source":["# from https://gist.github.com/korakot/c21c3476c024ad6d56d5f48b0bca92be\n","# from https://colab.research.google.com/github/espnet/notebook/blob/master/espnet2_asr_realtime_demo.ipynb\n","\n","from IPython.display import Javascript\n","from google.colab import output\n","from base64 import b64decode\n","\n","RECORD = \"\"\"\n","const sleep = time => new Promise(resolve => setTimeout(resolve, time))\n","const b2text = blob => new Promise(resolve => {\n"," const reader = new FileReader()\n"," reader.onloadend = e => resolve(e.srcElement.result)\n"," reader.readAsDataURL(blob)\n","})\n","var record = time => new Promise(async resolve => {\n"," stream = await navigator.mediaDevices.getUserMedia({ audio: true })\n"," recorder = new MediaRecorder(stream)\n"," chunks = []\n"," recorder.ondataavailable = e => chunks.push(e.data)\n"," recorder.start()\n"," await sleep(time)\n"," recorder.onstop = async ()=>{\n"," blob = new Blob(chunks)\n"," text = await b2text(blob)\n"," resolve(text)\n"," }\n"," recorder.stop()\n","})\n","\"\"\"\n","\n","def record(sec, filename='audio.wav'):\n"," display(Javascript(RECORD))\n"," s = output.eval_js('record(%d)' % (sec * 1000))\n"," b = b64decode(s.split(',')[1])\n"," with open(filename, 'wb+') as f:\n"," f.write(b)\n","\n","import librosa\n","import librosa.display\n","import matplotlib.pyplot as plt\n","import pysndfile\n","from IPython.display import display, Audio\n","import warnings\n","warnings.filterwarnings('ignore')\n","\n","def rec(sec, filename, text, hira):\n"," myvoice_dir = \"./dataset/textful/00_myvoice/wav/\"\n"," sampling_rate = 24000\n"," if sec > 15 :\n"," print(\"15秒以上の音声は学習できません。\\n録音秒数を15秒以下に指定してください。\")\n"," return\n"," print(f\"{text}\\n{hira}\")\n"," record(sec, \"temp.wav\")\n"," print(\"---終了---\")\n"," speech, rate = librosa.load(\"temp.wav\", sr=sampling_rate)\n"," speecht, index = librosa.effects.trim(speech, top_db=30)\n"," pysndfile.sndio.write(myvoice_dir + filename, speecht, rate=rate, format='wav', enc='pcm16')\n"," librosa.display.waveplot(speecht, sr=rate)\n"," plt.show()\n"," display(Audio(speecht, rate=rate))\n"]},{"cell_type":"markdown","metadata":{"id":"dggDbFFULniA"},"source":["以下の100件の学習データを録音します。 \n","実行したら話す内容が表示されるので「---終了---」と表示されるまでに録音してください。 \n","録音した波形が表示されるので、再生してみて良ければ次の録音をします。 \n","うまく録音できていなかったら再度実行して録音しなおしてください。 \n","時々録音状態が終了しない時があり、その際は左の■で止めて、ページ自体をスーパーリロード(shiftキーを押しながら再読み込み)してから再度実行してください。 \n","録音時間が短い場合、先頭「rec(5, …」などの「5」の部分が録音秒数になっているので、修正してください。ただしMMVCの最大学習時間が15秒となっているのでそれ以下に指定してください。 \n","学習データは MMVC_Trainer/dataset/textful/00_myvoice/wav/ 以下に保存されます。"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"F81g6k7R1MDQ"},"outputs":[],"source":["rec(3, \"emotion001.wav\", \"えっ嘘でしょ。\", \"えっうそでしょ。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"tCkGwuzRsvIM"},"outputs":[],"source":["rec(5, \"emotion002.wav\", \"シュヴァイツァーは見習うべき人間です。\", \"しゅゔぁいつぁーわみならうべきにんげんです。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"0kWCPXNQ0PM3"},"outputs":[],"source":["rec(5, \"emotion003.wav\", \"デーヴィスさんはとても疲れているように見える。\", \"でーゔぃすさんわとてもつかれているよーにみえる。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"9vHfPV6F0vGe"},"outputs":[],"source":["rec(5, \"emotion004.wav\", \"スティーヴはジェーンから手紙をもらった。\", \"すてぃーゔわじぇーんからてがみをもらった。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"Gb5IN8IX04UD"},"outputs":[],"source":["rec(10, \"emotion005.wav\", \"彼女はモーツァルトやベートーヴェンといった、古典派の作曲家が好きだ。\", \"かのじょわもーつぁるとやべーとーゔぇんといった、こてんはのさっきょくかがすきだ。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"isMIFlOW1URa"},"outputs":[],"source":["rec(15, \"emotion006.wav\", \"ストラットフォード・オン・エイヴォンは、シェイクスピアの生まれたところですが、毎年多くの観光客が訪れます。\", \"すとらっとふぉーどおんえいゔぉんわ、しぇいくすぴあのうまれたところですが、まいとしおおくのかんこーきゃくがおとずれます。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"3ERPiLuG1xHu"},"outputs":[],"source":["rec(5, \"emotion007.wav\", \"彼はピューマを慣らすのに、大いに骨を折った。\", \"かれわぴゅーまをならすのに、おおいにほねをおった。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"aF8oY3Do18g7"},"outputs":[],"source":["rec(5, \"emotion008.wav\", \"彼が解雇されるとは妙な話だ。\", \"かれがかいこされるとわみょーなはなしだ。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"peoeGB8X2DNW"},"outputs":[],"source":["rec(5, \"emotion009.wav\", \"クリスはヴァンパイア・ナイトを倒した。\", \"くりすわゔぁんぱいあないとをたおした。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"MJ2NcLYS2M-_"},"outputs":[],"source":["rec(5, \"emotion010.wav\", \"彼のあだ名は言い得て妙だよね。\", \"かれのあだなわいいえてみょーだよね。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"6KEr2M4z2Y6t"},"outputs":[],"source":["rec(15, \"emotion011.wav\", \"イタリア旅行で彼は、いくつか景勝の地として有名な都市、例えば、ナポリやフィレンツェを訪れた。\", \"いたりありょこーでかれわ、いくつかけーしょーのちとしてゆうめーなとし、たとえば、なぽりやふぃれんつぇをおとずれた。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"cJL5wQuD2z6-"},"outputs":[],"source":["rec(10, \"emotion012.wav\", \"ゼロという概念は、ヒンドゥー文化に由来している。\", \"ぜろとゆうがいねんわ、ひんどぅーぶんかにゆらいしている。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"JECJsALx3GJR"},"outputs":[],"source":["rec(5, \"emotion013.wav\", \"そのいたずら娘は何食わぬ顔をした。\", \"そのいたずらむすめわなにくわぬかおをした。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"_7YFft3O3Oly"},"outputs":[],"source":["rec(10, \"emotion014.wav\", \"スミスさん、ピエール・デュボワをご紹介しますわ。私の親友なの。\", \"すみすさん、ぴえーるでゅぼわをごしょーかいしますわ。わたしのしんゆうなの。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"bqLEBE0EC9ks"},"outputs":[],"source":["rec(10, \"emotion015.wav\", \"どーすんの、このお店。完ッ全に閑古鳥が鳴いちゃってるじゃない。\", \"どーすんの、このおみせ。かんっぜんにかんこどりがないちゃってるじゃない。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"GI2J-W-UDLnU"},"outputs":[],"source":["rec(5, \"emotion016.wav\", \"頂上に着くと皆でヤッホーと叫んだ。\", \"ちょーじょーにつくとみんなでやっほーとさけんだ。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"pwEGKbT6Diwn"},"outputs":[],"source":["rec(5, \"emotion017.wav\", \"あっベルが鳴ってる。\", \"あっべるがなってる。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"Z06lHnMwDlMN"},"outputs":[],"source":["rec(5, \"emotion018.wav\", \"彼女は彼にぴょこんとおじぎをした。\", \"かのじょわかれにぴょこんとおじぎをした。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"HIokRXNWDoAh"},"outputs":[],"source":["rec(5, \"emotion019.wav\", \"男子生徒のめいめいが、帽子に学校のバッジをつけています。\", \"だんしせーとのめーめーが、ぼーしにがっこーのばっじをつけています。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"hVvNfSoWDrum"},"outputs":[],"source":["rec(3, \"emotion020.wav\", \"ヒューズが飛んだ。\", \"ひゅーずがとんだ。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"AvmvFZp-Du64"},"outputs":[],"source":["rec(5, \"emotion021.wav\", \"私はポピュラー音楽を聞きたい。\", \"わたしわぽぴゅらーおんがくをききたい。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"I6E7mCtRDzQj"},"outputs":[],"source":["rec(5, \"emotion022.wav\", \"猫はにゃーにゃーと鳴く。\", \"ねこわにゃーにゃーとなく。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"BEkVDrE0D2Dv"},"outputs":[],"source":["rec(10, \"emotion023.wav\", \"私の一番上の兄が父の名代としてその会合に出席した。\", \"わたしのいちばんうえのあにがちちのみょーだいとしてそのかいごーにしゅっせきした。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"bj7hujanD5UD"},"outputs":[],"source":["rec(5, \"emotion024.wav\", \"彼は首相にインタビューした。\", \"かれわしゅしょーにいんたびゅーした。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"qvnm3MYVD7-k"},"outputs":[],"source":["rec(10, \"emotion025.wav\", \"その会社の急速な成長は、その独特な戦略によるものだった。\", \"そのかいしゃのきゅうそくなせーちょーわ、そのどくとくなせんりゃくによるものだった。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"xhpatXsiD-ZJ"},"outputs":[],"source":["rec(5, \"emotion026.wav\", \"私はいつもミネラルウォーターを持ち歩いています。\", \"わたしわいつもみねらるうぉーたーをもちあるいています。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"Orqc5F_vEBP0"},"outputs":[],"source":["rec(10, \"emotion027.wav\", \"彼女はハンドバッグを開けて家の鍵を探してみたが、見つからなかった。\", \"かのじょわはんどばっぐをあけていえのかぎをさがしてみたが、みつからなかった。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"XwiI_5IFEDom"},"outputs":[],"source":["rec(7, \"emotion028.wav\", \"彼女はスタッフをまとめていけると思いますか?\", \"かのじょわすたっふをまとめていけるとおもいますか?\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"XK5ydxImEHh6"},"outputs":[],"source":["rec(10, \"emotion029.wav\", \"牛乳はあなたの体に良いだろう、毎日飲んだほうがいい。\", \"ぎゅうにゅうわあなたのからだによいだろー、まいにちのんだほーがいい。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"KrMAF6aNEKsA"},"outputs":[],"source":["rec(10, \"emotion030.wav\", \"あなたは流感になりかけているか、もっと重い病気かもしれません。\", \"あなたわりゅうかんになりかけているか、もっとおもいびょーきかもしれません。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"8KmVB9UQEMtd"},"outputs":[],"source":["rec(10, \"emotion031.wav\", \"彼女はその事件を、生き生きとした筆致で描写した。\", \"かのじょわそのじけんを、いきいきとしたひっちでびょーしゃした。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"9OICEzZ_EO-K"},"outputs":[],"source":["rec(10, \"emotion032.wav\", \"彼は自らの生涯を、インドでの病人の治療に捧げるつもりだ。\", \"かれわみずからのしょーがいを、いんどでのびょーにんのちりょーにささげるつもりだ。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"ePRIx9G0ERia"},"outputs":[],"source":["rec(10, \"emotion033.wav\", \"奇妙な男で、彼は人から話し掛けられないと口をきかない。\", \"きみょーなおとこで、かれわひとからはなしかけられないとくちをきかない。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"MbVslcnIETrq"},"outputs":[],"source":["rec(7, \"emotion034.wav\", \"我々はその山脈で土着のガイドを雇った。\", \"われわれわそのさんみゃくでどちゃくのがいどをやとった。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"jzLjyVXUEWFj"},"outputs":[],"source":["rec(5, \"emotion035.wav\", \"彼女は息子に家で行儀よくするように言った。\", \"かのじょわむすこにいえでぎょーぎよくするよーにいった。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"x2NcPri6EZEF"},"outputs":[],"source":["rec(7, \"emotion036.wav\", \"彼はライフルを拾い上げ、それで標的をねらった。\", \"かれわらいふるをひろいあげ、それでひょーてきをねらった。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"z-kSXO-wEbK6"},"outputs":[],"source":["rec(5, \"emotion037.wav\", \"私はこの本に八百円を払った。\", \"わたしわこのほんにはっぴゃくえんをはらった。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"HHZ0FgrNEdzI"},"outputs":[],"source":["rec(10, \"emotion038.wav\", \"気分が悪くて入院したが、結果的にはたいしたことはなかった。\", \"きぶんがわるくてにゅういんしたが、けっかてきにわたいしたことわなかった。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"Y5Wh4c0tEs5e"},"outputs":[],"source":["rec(15, \"emotion039.wav\", \"アフィ狙いの釣り記事ですね。英語関係のコミュのあちこちにマルチポストしています。\", \"あふぃねらいのつりきじですね。えーごかんけーのこみゅのあちこちにまるちぽすとしています。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"-BBIcbt9EvuF"},"outputs":[],"source":["rec(10, \"emotion040.wav\", \"トラベラーズチェックを現金に替えてくれるのはこの窓口ですか?\", \"とらべらーずちぇっくをげんきんにかえてくれるのわこのまどぐちですか?\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"AXw0nzV-Ez_n"},"outputs":[],"source":["rec(7, \"emotion041.wav\", \"本日の映画は、サウンド・オブ・ミュージックでございます。\", \"ほんじつのえーがわ、さうんどおぶみゅーじっくでございます。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"rBjKTsJYE2ve"},"outputs":[],"source":["rec(10, \"emotion042.wav\", \"概してわれわれ日本人は、外国語を話すのに少し臆病すぎる。\", \"がいしてわれわれにほんじんわ、がいこくごをはなすのにすこしおくびょーすぎる。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"HMeZxIlPE50t"},"outputs":[],"source":["rec(15, \"emotion043.wav\", \"店の人は私のことを知るようになり、私はいつも同じウェイトレスに応対してもらっていた。\", \"みせのひとわわたしのことをしるよーになり、わたしわいつもおなじうぇいとれすにおーたいしてもらっていた。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"n_Qu7VCpE8Tz"},"outputs":[],"source":["rec(5, \"emotion044.wav\", \"この丘からは何百万という星が見える。\", \"このおかからわなんびゃくまんとゆうほしがみえる。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"CalH9w-NE-e0"},"outputs":[],"source":["rec(10, \"emotion045.wav\", \"彼女は大学に入学したら、親から経済的に独立しようと思っていた。\", \"かのじょわだいがくににゅうがくしたら、おやからけーざいてきにどくりつしよーとおもっていた。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"2IW9zgk5FBIh"},"outputs":[],"source":["rec(7, \"emotion046.wav\", \"サブマリンのペリスコープが、水中からにょっきり突き出ていた。\", \"さぶまりんのぺりすこーぷが、すいちゅうからにょっきりつきでていた。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"PFlUEsUNFE7l"},"outputs":[],"source":["rec(5, \"emotion047.wav\", \"別にブルマに特別な関心があるわけじゃない。\", \"べつにぶるまにとくべつなかんしんがあるわけじゃない。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"FOKK6dDXFHT_"},"outputs":[],"source":["rec(5, \"emotion048.wav\", \"そういうフェティシズムはないと思う。\", \"そーゆうふぇてぃしずむわないとおもう。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"M6kkjIt2FJxE"},"outputs":[],"source":["rec(15, \"emotion049.wav\", \"ウッド夫人が作ってくれるおいしい田舎風の料理を食べたし、ミルクをたくさん飲みました。\", \"うっどふじんがつくってくれるおいしいいなかふうのりょーりをたべたし、みるくをたくさんのみました。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"6eQKqflHFMfn"},"outputs":[],"source":["rec(15, \"emotion050.wav\", \"私の妻が瓶をわってしまったので、台所の床は牛乳だらけになっている。\", \"わたしのつまがびんをわってしまったので、だいどころのゆかわぎゅうにゅうだらけになっている。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"20fhJ4SfFRqo"},"outputs":[],"source":["rec(10, \"emotion051.wav\", \"喧嘩をしていた二人の子供は、お互いにしかめっ面をして座っていた。\", \"けんかをしていたふたりのこどもわ、おたがいにしかめっつらをしてすわっていた。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"Iq_ehMKRFj33"},"outputs":[],"source":["rec(15, \"emotion052.wav\", \"事業を継続しながら、事業が依拠している不動産を、切り売りしていくことなど非現実的なのだ。\", \"じぎょーをけーぞくしながら、じぎょーがいきょしているふどーさんを、きりうりしていくことなどひげんじつてきなのだ。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"EbvuHOKrFssc"},"outputs":[],"source":["rec(15, \"emotion053.wav\", \"しかしペパーバーグは、そのオウムを研究することによって、動物に対する考え方が変わったと言っている。\", \"しかしぺぱーばーぐわ、そのおーむをけんきゅうすることによって、どーぶつにたいするかんがえかたがかわったといっている。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"_WUVxqJhFu4O"},"outputs":[],"source":["rec(10, \"emotion054.wav\", \"パックマンがある条件を満たすと、追ってくるモンスターを逆襲して食べることができる。\", \"ぱっくまんがあるじょーけんをみたすと、おってくるもんすたーをぎゃくしゅうしてたべることができる。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"tA9WjtFmFyPl"},"outputs":[],"source":["rec(15, \"emotion055.wav\", \"その数百年後に、フォークが西洋のテーブルに現れることになるが、ただちに受け入れられたわけではなかった。\", \"そのすうひゃくねんごに、ふぉーくがせーよーのてーぶるにあらわれることになるが、ただちにうけいれられたわけでわなかった。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"dXG6p6sHF0U1"},"outputs":[],"source":["rec(10, \"emotion056.wav\", \"トップのリーダーは犬の行動学ではアルファと呼ばれ、以下ベータ、ガンマと続きます。\", \"とっぷのりーだーわいぬのこーどーがくでわあるふぁとよばれ、いかべーた、がんまとつづきます。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"bFrP4NpOF2aG"},"outputs":[],"source":["rec(7, \"emotion057.wav\", \"ウィーンまでは歩くとどのくらいかかりますか?\", \"うぃーんまでわあるくとどのくらいかかりますか?\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"fucGfVkoGAeT"},"outputs":[],"source":["rec(5, \"emotion058.wav\", \"すみません、この辺に詳しくないんです。\", \"すみません、このへんにくわしくないんです。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"WcgQL4fDGB7Q"},"outputs":[],"source":["rec(15, \"emotion059.wav\", \"目標は授業設計をするときの、学生の思考を触発するメディア教材の選択および、活用方法について理解することである。\", \"もくひょーわじゅぎょーせっけーをするときの、がくせーのしこーをしょくはつするめでぃあきょーざいのせんたくおよび、かつよーほーほーについてりかいすることである。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"52LryWYlGEDH"},"outputs":[],"source":["rec(10, \"emotion060.wav\", \"とりあえず店の前、掃除しといてくれ。打ち水も頼む。\", \"とりあえずみせのまえ、そーじしといてくれ。うちみずもたのむ。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"bfFMIcq5GGH_"},"outputs":[],"source":["rec(10, \"emotion061.wav\", \"人々はトーナメントが始まる何ヶ月も前に、これらの入場券を買う。\", \"ひとびとわとーなめんとがはじまるなんかげつもまえに、これらのにゅうじょーけんをかう。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"VOowNpITGIJq"},"outputs":[],"source":["rec(10, \"emotion062.wav\", \"彼女の魅力は言葉では表現できない、とその芸術家は叫んだ。\", \"かのじょのみりょくわことばでわひょーげんできない、とそのげーじゅつかわさけんだ。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"e0iii-vUGKYG"},"outputs":[],"source":["rec(15, \"emotion063.wav\", \"事象として簡単なことを、いかにも難しそうに表現する人は、あまり頭がよさそうではない。\", \"じしょーとしてかんたんなことを、いかにもむずかしそーにひょーげんするひとわ、あまりあたまがよさそーでわない。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"BmzuHrrjGMpC"},"outputs":[],"source":["rec(15, \"emotion064.wav\", \"デザインも、アーチ型のロゴデザインにより、現代的で登場感、躍動感あるものに仕上げました。\", \"でざいんも、あーちがたのろごでざいんにより、げんだいてきでとーじょーかん、やくどーかんあるものにしあげました。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"Z1Kg041RGO_c"},"outputs":[],"source":["rec(7, \"emotion065.wav\", \"そんなに慌てて運転して、一体どこへ行こうってんだよ。\", \"そんなにあわててうんてんして、いったいどこえいこーってんだよ。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"xJAXkiK4GTA3"},"outputs":[],"source":["rec(7, \"emotion066.wav\", \"時間はあるんだから、安全運転してくれよ。\", \"じかんわあるんだから、あんぜんうんてんしてくれよ。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"X1hjiok8GUGv"},"outputs":[],"source":["rec(15, \"emotion067.wav\", \"ディスプレイはモニタともいい、コンピュータなどの機器から出力される静止画、または動画の映像信号を表示する機器である。\", \"でぃすぷれいわもにたともいい、こんぴゅーたなどのききからしゅつりょくされるせーしが、またわどーがのえーぞーしんごーをひょーじするききである。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"GiY8lSbxGYSU"},"outputs":[],"source":["rec(15, \"emotion068.wav\", \"撃ち合いが少し静まったとき、パパが走ってフラットに行って、私たちにサンドイッチを持ってきてくれたわ。\", \"うちあいがすこししずまったとき、ぱぱがはしってふらっとにいって、わたしたちにさんどいっちをもってきてくれたわ。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"E0E7MWMOGd5c"},"outputs":[],"source":["rec(15, \"emotion069.wav\", \"ギリシャのフットボールの試合では、一方のチームの選手は、相手チームの陣地のラインの向こう側にボールを持ち込もうとしたのです。\", \"ぎりしゃのふっとぼーるのしあいでわ、いっぽーのちーむのせんしゅわ、あいてちーむのじんちのらいんのむこーがわにぼーるをもちこもーとしたのです。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"EjiAIw0GGgqu"},"outputs":[],"source":["rec(15, \"emotion070.wav\", \"泳者のシンディー・ニコラスは、へとへとになって泳ぎ切った後、ドーバーでかろうじて陸に上がってきたが、海峡水泳協会のスポークスマンは、彼女がとても元気であると発表した。\", \"えーしゃのしんでぃーにこらすわ、へとへとになっておよぎきったあと、どーばーでかろーじてりくにあがってきたが、かいきょーすいえーきょーかいのすぽーくすまんわ、かのじょがとてもげんきであるとはっぴょーした。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"nsKf9t-IGjPu"},"outputs":[],"source":["rec(10, \"emotion071.wav\", \"若い男女が人里離れた洋館で恐怖の一夜を過ごすという、ホラーの定番スタイルだ。\", \"わかいだんじょがひとざとはなれたよーかんできょーふのいちやをすごすとゆう、ほらーのてーばんすたいるだ。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"ceDSiN8dGlxh"},"outputs":[],"source":["rec(15, \"emotion072.wav\", \"一つには、西洋人ではない人々が自分たち独自の文化に誇りを持ち始めてきたためと、また一つには、フォークを使わないそれらの地域は最も高い出生率の地域を抱えているという理由から、このことは当たっている。\", \"ひとつにわ、せーよーじんでわないひとびとがじぶんたちどくじのぶんかにほこりをもちはじめてきたためと、またひとつにわ、ふぉーくをつかわないそれらのちいきわもっともたかいしゅっしょーりつのちいきをかかえているとゆうりゆうから、このことわあたっている。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"znefurFEGoOX"},"outputs":[],"source":["rec(7, \"emotion073.wav\", \"私たちは恐怖の中で生きていて、苦しんでいるの。\", \"わたしたちわきょーふのなかでいきていて、くるしんでいるの。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"QyfNhO4PGqXo"},"outputs":[],"source":["rec(10, \"emotion074.wav\", \"太陽も花も楽しめないし、私たちの子供時代も楽しめないのよ。\", \"たいよーもはなもたのしめないし、わたしたちのこどもじだいもたのしめないのよ。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"1n7LHM9QGtSj"},"outputs":[],"source":["rec(15, \"emotion075.wav\", \"弊社のエンジニアが日本国内で販売されている同様の製品と仕様を比較した結果、非常に競合力があると判断いたしました。\", \"へーしゃのえんじにあがにほんこくないではんばいされているどーよーのせーひんとしよーをひかくしたけっか、ひじょーにきょーごーりょくがあるとはんだんいたしました。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"wCruidCIGvjs"},"outputs":[],"source":["rec(15, \"emotion076.wav\", \"ノースウエスタン大学の研究者、アイリーン・ペパーバーグは、オウムは人の口まねをするだけでなく言葉の意味を学ぶことができることを発見しつつある。\", \"のーすうえすたんだいがくのけんきゅうしゃ、あいりーんぺぱーばーぐわ、おーむわひとのくちまねをするだけでなくことばのいみをまなぶことができることをはっけんしつつある。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"30auyKBKGxy0"},"outputs":[],"source":["rec(5, \"emotion077.wav\", \"名前をテョといいます。\", \"なまえをてょといいます。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"c2td-2ZSG0N-"},"outputs":[],"source":["rec(5, \"emotion078.wav\", \"ぴゅうぴゅう風が吹きこんでくる。\", \"ぴゅうぴゅうかぜがふきこんでくる。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"xKC_aseyG3rB"},"outputs":[],"source":["rec(5, \"emotion079.wav\", \"キェー。ギェー。イェーイ。\", \"きぇー。ぎぇー。いぇーい。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"949v0SkLG6UP"},"outputs":[],"source":["rec(5, \"emotion080.wav\", \"ひぇーん。びぇーん。ぴぇーん。\", \"ひぇーん。びぇーん。ぴぇーん。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"Ux-CDkDNG8kV"},"outputs":[],"source":["rec(5, \"emotion081.wav\", \"プリミェー。ミェルン。ニェン。\", \"ぷりみぇー。みぇるん。にぇん。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"5yVXL9gVG-sy"},"outputs":[],"source":["rec(5, \"emotion082.wav\", \"ステューデント。ダブルデュアル。\", \"すてゅーでんと。だぶるでゅある。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"wCjw4K60HAyU"},"outputs":[],"source":["rec(5, \"emotion083.wav\", \"エテュード。エデュケーショナル。サブスティテューション。\", \"えてゅーど。えでゅけーしょなる。さぶすてぃてゅーしょん。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"CmVKqC7fHC-U"},"outputs":[],"source":["rec(3, \"emotion084.wav\", \"ジャデャクシュ。\", \"じゃでゃくしゅ。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"UERqGA3dHFIR"},"outputs":[],"source":["rec(3, \"emotion085.wav\", \"ブレンドデョート。\", \"ぶれんどでょーと。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"MBpybgjsHG7B"},"outputs":[],"source":["rec(3, \"emotion086.wav\", \"イデュスルファーゼ。\", \"いでゅするふぁーぜ。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"ptQCvMsyHI0U"},"outputs":[],"source":["rec(3, \"emotion087.wav\", \"あっあの。\", \"あっあの。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"BCwt2dkTHLAC"},"outputs":[],"source":["rec(3, \"emotion088.wav\", \"いっいえ。\", \"いっいえ。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"V9OSQt8WHM_e"},"outputs":[],"source":["rec(3, \"emotion089.wav\", \"えっえぇ。\", \"えっえぇ。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"2Ne3QbLSHPhD"},"outputs":[],"source":["rec(3, \"emotion090.wav\", \"おっおい。\", \"おっおい。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"X8O1TuO8HSDU"},"outputs":[],"source":["rec(3, \"emotion091.wav\", \"んーとね。\", \"んーとね。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"2GZHy6SRHUi5"},"outputs":[],"source":["rec(3, \"emotion092.wav\", \"アンツィオ。\", \"あんつぃお。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"ieMCAp3ZHXFT"},"outputs":[],"source":["rec(3, \"emotion093.wav\", \"エンツォ。\", \"えんつぉ。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"9-Zhw74YHcjh"},"outputs":[],"source":["rec(3, \"emotion094.wav\", \"カートゥーン。\", \"かーとぅーん。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"e2us8Kh5Hf3W"},"outputs":[],"source":["rec(3, \"emotion095.wav\", \"スィーディー。\", \"すぃーでぃー。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"B7joZGHeHg1P"},"outputs":[],"source":["rec(3, \"emotion096.wav\", \"ズィーブラ。\", \"ずぃーぶら。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"jAKVCnScHiut"},"outputs":[],"source":["rec(3, \"emotion097.wav\", \"デピュティーガバナー。\", \"でぴゅてぃーがばなー。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"vrlkmANgHlNC"},"outputs":[],"source":["rec(3, \"emotion098.wav\", \"エリュシオン。\", \"えりゅしおん。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"b525XIbWHn8J"},"outputs":[],"source":["rec(3, \"emotion099.wav\", \"ガリェント。\", \"がりぇんと。\")"]},{"cell_type":"code","execution_count":null,"metadata":{"id":"j01kcKCfHp7y"},"outputs":[],"source":["rec(3, \"emotion100.wav\", \"ラーテャン。\", \"らーてゃん。\")"]}],"metadata":{"colab":{"collapsed_sections":[],"name":"00_Rec_Voice.ipynb","provenance":[]},"kernelspec":{"display_name":"Python 3","name":"python3"},"language_info":{"name":"python"}},"nbformat":4,"nbformat_minor":0}
diff --git a/demo/MMVC_Trainer/notebook/01_Create_Configfile.ipynb b/demo/MMVC_Trainer/notebook/01_Create_Configfile.ipynb
new file mode 100755
index 00000000..9720a97e
--- /dev/null
+++ b/demo/MMVC_Trainer/notebook/01_Create_Configfile.ipynb
@@ -0,0 +1,255 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Q3egrWHAzs7H"
+ },
+ "source": [
+ "# MMVCの学習に必要なconfig系Fileを作成する\n",
+ "\n",
+ "ver.2022/08/10\n",
+ "\n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "V61VE7vxLaY3"
+ },
+ "source": [
+ "## 1 概要\n",
+ "「Google Colaboratory」を利用した、MMVCの学習を実行するために必要なファイルを生成します。"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "kN0-Tj3TL-T2"
+ },
+ "source": [
+ "## 2 Google Drive をマウント\n",
+ "**Google Drive にアップロードした MMVC_Trainer を参照できるように、設定します。**\n",
+ "\n",
+ "「このノートブックに Google ドライブのファイルへのアクセスを許可しますか?」\n",
+ "\n",
+ "といったポップアップが表示されるので、「Google ドライブに接続」を押下し、google アカウントを選択して、「許可」を選択してください。\n",
+ "\n",
+ "成功すれば、下記メッセージが出ます。\n",
+ "```\n",
+ "Mounted at /content/drive/\n",
+ "```\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "hdfce8bPkpMB"
+ },
+ "outputs": [],
+ "source": [
+ "from google.colab import drive\n",
+ "drive.mount('/content/drive')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "AXCsRWVLNn0c"
+ },
+ "source": [
+ "cdコマンドを実行して、マウントしたGoogle Drive のMMVC_Trainerディレクトリに移動します。\n",
+ "\n",
+ "%cd 「MMVC_Trainerをgoogle driveにパップロードしたパス」\n",
+ "\n",
+ "としてください。\n",
+ "\n",
+ "正しいパスが指定されていれば\n",
+ "\n",
+ "-rw------- 1 root root 11780 Mar 4 16:53 attentions.py\n",
+ "\n",
+ "-rw------- 1 root root 4778 Mar 4 16:53 commons.py\n",
+ "\n",
+ "drwx------ 2 root root 4096 Mar 5 15:20 configs\n",
+ "\n",
+ "...といった感じに表示されるはずです。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "cLxKrVTGkvsq"
+ },
+ "outputs": [],
+ "source": [
+ "%cd /content/drive/MyDrive/\n",
+ "!ls -la"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "source": [
+ "## 3 事前学習済みモデルのダウンロード\n",
+ "\n",
+ "fine_model 以下に、事前学習済みモデルをダウンロードします。"
+ ],
+ "metadata": {
+ "id": "fzAFp785nH_R"
+ }
+ },
+ {
+ "cell_type": "code",
+ "source": [
+ "!fileid=\"1MRmB-9EL2-xhxIIraVx20qWqyX-8ZMPw\"; filename=\"fine_model/G_180000.pth\"; html=`curl -c ./cookie -s -L \"https://drive.google.com/uc?export=download&id=${fileid}\"`; curl -Lb ./cookie \"https://drive.google.com/uc?export=download&`echo ${html}|grep -Po '(confirm=[a-zA-Z0-9\\-_]+)'`&id=${fileid}\" -o ${filename}\n",
+ "!fileid=\"1oPbMM7cGz-z0fLgj7DW_wPGRCwvgD2jZ\"; filename=\"fine_model/D_180000.pth\"; html=`curl -c ./cookie -s -L \"https://drive.google.com/uc?export=download&id=${fileid}\"`; curl -Lb ./cookie \"https://drive.google.com/uc?export=download&`echo ${html}|grep -Po '(confirm=[a-zA-Z0-9\\-_]+)'`&id=${fileid}\" -o ${filename}"
+ ],
+ "metadata": {
+ "id": "oLtpgNckjreW"
+ },
+ "execution_count": null,
+ "outputs": []
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "FS1ttfpyPckq"
+ },
+ "source": [
+ "## 4 必要なライブラリのインストール\n",
+ "\n",
+ "何も考えず実行してください。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "XDLDiK1Sk3uZ"
+ },
+ "outputs": [],
+ "source": [
+ "!pip install pyopenjtalk"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "jX2VRWu4Pvqy"
+ },
+ "source": [
+ "## 5 MMVCの学習に必要なconfig系Fileを作成する\n",
+ "\n",
+ "学習に必要なファイルを実行します。 \n",
+ "オプションは-f -s -tがあります。普通に使う際には-cは不要です。 \n",
+ "-f 作成するconfig系Fileの名前です。よくわからない人は変更不要です。 \n",
+ "-s サンプリングレートです。datasetの音声のサンプリングレートに合わせて指定ください。よくわからない人は変更不要です。 \n",
+ "-t 既にモデルに学習されているデータの場合利用します。ずんだもんの場合は「100」 それ以外のサポートキャラは「101~103」 非サポートキャラは「108」を指定します。\n",
+ "\n",
+ "\n",
+ "実行時に \n",
+ "**「WARNING: JPCommonLabel_insert_pause() in jpcommon_label.c: First mora should not be short pause.」** \n",
+ "と表示されますが、無視して大丈夫です。 \n",
+ "\n",
+ "「filelists」ディレクトリに \n",
+ "「指定したconfig系Fileの名前_textful.txt」 \n",
+ "「指定したconfig系Fileの名前_textful_val.txt」 \n",
+ "「指定したconfig系Fileの名前_textless.txt」 \n",
+ "「指定したconfig系Fileの名前_val_textless.txt」 \n",
+ "「指定したconfig系Fileの名前_Correspondence.txt」 \n",
+ "上記5ファイル\n",
+ "\n",
+ "「configs」ディレクトリに \n",
+ "「指定したconfig系Fileの名前.json」 \n",
+ "上記1ファイルが生成されていれば、成功です。 \n"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 5.1 チュートリアル:ずんだもんになる\n",
+ "下記セルを実行してください。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "qbh1TvLRk5pu"
+ },
+ "outputs": [],
+ "source": [
+ "!python create_dataset_jtalk.py -f train_config_zundamon -s 24000 -t 100"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "j0vi8pdVggbY"
+ },
+ "source": [
+ "### 5.2 ずんだもん以外の話者の学習を行う\n",
+ "ずんだもん以外の話者の学習を行う場合、下記セルを実行してください。 \n",
+ "**九州そらの学習を行いたい場合、「108」を「101」に \n",
+ "四国めたんの学習を行いたい場合、「108」を「102」に \n",
+ "春日部つむぎの学習を行いたい場合、「108」を「103」に** \n",
+ "設定するとクオリティがあがる**かも**しれません。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "HkN9EC7aggbZ"
+ },
+ "outputs": [],
+ "source": [
+ "!python create_dataset_jtalk.py -f train_config -s 24000 -t 108"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {},
+ "source": [
+ "### 5.3 応用編 同時に複数話者の学習を行う\n",
+ "複数の話者を同時に学習したい場合、下記セルを実行してください。 \n",
+ "multi_speaker_correspondence.txt を下記フォーマットに任意に書き換えて、実行してください。 \n",
+ "textful配下のディレクトリ名|0~109の番号 "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {},
+ "outputs": [],
+ "source": [
+ "!python create_dataset_jtalk.py -f train_config_test -s 24000 -m dataset/multi_speaker_correspondence.txt"
+ ]
+ }
+ ],
+ "metadata": {
+ "colab": {
+ "collapsed_sections": [],
+ "name": "01_Create_Configfile.ipynb",
+ "provenance": []
+ },
+ "kernelspec": {
+ "display_name": "Python 3.9.6 64-bit",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "name": "python",
+ "version": "3.9.6"
+ },
+ "vscode": {
+ "interpreter": {
+ "hash": "d3394867249fd41ee68869925f4586b97ae8a94f3c93a4c25403e9e75f272611"
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/demo/MMVC_Trainer/notebook/02_Train_MMVC.ipynb b/demo/MMVC_Trainer/notebook/02_Train_MMVC.ipynb
new file mode 100755
index 00000000..3064423b
--- /dev/null
+++ b/demo/MMVC_Trainer/notebook/02_Train_MMVC.ipynb
@@ -0,0 +1,298 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "qjxnLNp4TAqD"
+ },
+ "source": [
+ "# MMVC Trainer\n",
+ "ver.2022/08/10"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "N0DqCHlOTVEm"
+ },
+ "source": [
+ "## 1 概要\n",
+ "「Google Colaboratory」を利用してMMVCで利用するVITSの学習を行います。"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "GE7TpicbUPdz"
+ },
+ "source": [
+ "## 2 Google Drive をマウント\n",
+ "**Google Drive にアップロードした MMVC_Trainer を参照できるように、設定します。**\n",
+ "\n",
+ "「このノートブックに Google ドライブのファイルへのアクセスを許可しますか?」 \n",
+ "といったポップアップが表示されるので、「Google ドライブに接続」を押下し、google アカウントを選択して、「許可」を選択してください。 \n",
+ "成功すれば、下記メッセージが出ます。 \n",
+ "```\n",
+ "Mounted at /content/drive/\n",
+ "```\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "Dg93D-60nqYK"
+ },
+ "outputs": [],
+ "source": [
+ "from google.colab import drive\n",
+ "drive.mount('/content/drive')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "4G4TAHzvUZY6"
+ },
+ "source": [
+ "cdコマンドを実行して、マウントしたGoogle Drive のMMVC_Trainerディレクトリに移動します。 \n",
+ "%cd 「MMVC_Trainerをgoogle driveにパップロードしたパス」 \n",
+ "としてください。 \n",
+ "\n",
+ "正しいパスが指定されていれば\n",
+ "```\n",
+ "-rw------- 1 root root 11780 Mar 4 16:53 attentions.py\n",
+ "-rw------- 1 root root 4778 Mar 4 16:53 commons.py\n",
+ "drwx------ 2 root root 4096 Mar 5 15:20 configs\n",
+ "```\n",
+ "\n",
+ "...といった感じに表示されるはずです。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "kwRuNkLEn5QH"
+ },
+ "outputs": [],
+ "source": [
+ "%cd /content/drive/MyDrive/\n",
+ "!ls -la"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "5FTEcWtXUdKH"
+ },
+ "source": [
+ "## 3 GPUの確認\n",
+ "GPUの確認を行います。 \n",
+ "割り当てられたGPUのメモリーを確認し、それに合わせてconfigファイルの\"batch_size\"を指定してください。 "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "uSMdNq2rn4_G"
+ },
+ "outputs": [],
+ "source": [
+ "!nvidia-smi "
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "Cn0fxtiQUifh"
+ },
+ "source": [
+ "## 4 必要なライブラリのインストール\n",
+ "\n",
+ "何も考えず実行してください。\n",
+ "\n",
+ "結構時間かかります。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "LWceuYPPn7UN"
+ },
+ "outputs": [],
+ "source": [
+ "!apt-get install espeak\n",
+ "!pip install Cython==0.29.21\n",
+ "!pip install librosa==0.8.0\n",
+ "!pip install matplotlib==3.3.1\n",
+ "!pip install numpy\n",
+ "!pip install phonemizer==2.2.1\n",
+ "!pip install scipy==1.5.2\n",
+ "!pip install tensorboard==2.3.0\n",
+ "!pip install torch==1.10.0+cu113 torchvision==0.11.3+cu113 torchaudio===0.10.0 -f https://download.pytorch.org/whl/cu113/torch_stable.html\n",
+ "!pip install Unidecode==1.1.1\n",
+ "!pip install retry\n",
+ "!pip install tqdm\n",
+ "!pip install resampy==0.2.2"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "uO1cMVm2UuaZ"
+ },
+ "source": [
+ "## 5 tensorboardの起動\n",
+ "とりあえず実行しておいてください。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "4k3EKZNPn82i"
+ },
+ "outputs": [],
+ "source": [
+ "# Load the TensorBoard notebook extension\n",
+ "%load_ext tensorboard"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "0VAw8j3ln-iq"
+ },
+ "outputs": [],
+ "source": [
+ "%tensorboard --logdir logs --port 5000"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "burdlftQVFOA"
+ },
+ "source": [
+ "## 6 学習を実行します\n",
+ "-c configファイルのパス \n",
+ "Create_Configfile.ipynb 等で作成したconfigファイル(json)を指定してください。 \n",
+ "`configs/****.json`\n",
+ "のような値になります。 \n",
+ "\n",
+ "-m modelの保存先ディレクトリ \n",
+ "**ディレクトリ名を直接指名してください。** \n",
+ "\n",
+ "-fg にFine tuningのベースとなるG_xxxx.pth のpathを指定してください。 \n",
+ "-fd にFine tuningのベースとなるD_xxxx.pth のpathを指定してください。 \n",
+ "**よくわからないよって人は** \n",
+ "-fg fine_model/G_180000.pth -fd fine_model/D_180000.pth \n",
+ "のままにしておいてください。\n",
+ "\n",
+ "2回目以降の実行の場合は自動的に-mで指定したディレクトリの最新のモデルから学習を再開します。 \n",
+ "**必ず学習を再開するときは-fgと-fdのオプションを削除してください**\n",
+ "\n",
+ "Ex)!python train_ms.py -c configs/jsontest.json -m 20220306_24000"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "cf1XrJG2n_7N"
+ },
+ "outputs": [],
+ "source": [
+ "!python train_ms.py -c configs/train_config_zundamon.json -m 20220306_24000 -fg fine_model/G_180000.pth -fd fine_model/D_180000.pth"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "oY0o1KKI0P5r"
+ },
+ "source": [
+ "学習を再開するときのコード例です。 "
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "S3eHzCwI0NsB"
+ },
+ "outputs": [],
+ "source": [
+ "!python train_ms.py -c configs/train_config_zundamon.json -m 20220306_24000"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "C3NsBidtNni1"
+ },
+ "source": [
+ "### ずんだもん以外の話者の学習を行う場合、下記セルを実行して、初回の学習を開始してください。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "G0UbcymeNni1"
+ },
+ "outputs": [],
+ "source": [
+ "!python train_ms.py -c configs/train_config.json -m 20220306_24000 -fg fine_model/G_180000.pth -fd fine_model/D_180000.pth"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "jZdypzvVNni2"
+ },
+ "source": [
+ "ずんだもん以外の話者の学習を再開するときのコード例です。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "qoNP1eX1Nni2"
+ },
+ "outputs": [],
+ "source": [
+ "!python train_ms.py -c configs/train_config.json -m 20220306_24000"
+ ]
+ }
+ ],
+ "metadata": {
+ "accelerator": "GPU",
+ "colab": {
+ "collapsed_sections": [],
+ "name": "Train_MMVC.ipynb",
+ "provenance": []
+ },
+ "kernelspec": {
+ "display_name": "Python 3.9.6 64-bit",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "name": "python",
+ "version": "3.9.6"
+ },
+ "vscode": {
+ "interpreter": {
+ "hash": "d3394867249fd41ee68869925f4586b97ae8a94f3c93a4c25403e9e75f272611"
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/demo/MMVC_Trainer/notebook/03_MMVC_Interface.ipynb b/demo/MMVC_Trainer/notebook/03_MMVC_Interface.ipynb
new file mode 100755
index 00000000..1f5d86eb
--- /dev/null
+++ b/demo/MMVC_Trainer/notebook/03_MMVC_Interface.ipynb
@@ -0,0 +1,330 @@
+{
+ "cells": [
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "U7-O9IRzogIx"
+ },
+ "source": [
+ "# モデルの精度を確認するためのインターフェース\n",
+ "\n",
+ "ver.2022/08/10"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "dK2UHlpmoyLW"
+ },
+ "source": [
+ "## 1 概要\n",
+ "「Train_MMVC.ipynb」で学習したモデルでTTSと非リアルタイムのVCを行い、モデルの精度を検証します。"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "uRK7k2o7pL5f"
+ },
+ "source": [
+ "## 2 Google Drive をマウント\n",
+ "**Google Drive にアップロードした MMVC_Trainer を参照できるように、設定します。**\n",
+ "\n",
+ "「このノートブックに Google ドライブのファイルへのアクセスを許可しますか?」\n",
+ "\n",
+ "といったポップアップが表示されるので、「Google ドライブに接続」を押下し、google アカウントを選択して、「許可」を選択してください。\n",
+ "\n",
+ "成功すれば、下記メッセージが出ます。\n",
+ "```\n",
+ "Mounted at /content/drive/\n",
+ "```\n"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "8s8Ozg6regVi"
+ },
+ "outputs": [],
+ "source": [
+ "from google.colab import drive\n",
+ "drive.mount('/content/drive')"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "6mD03f7LpR97"
+ },
+ "source": [
+ "cdコマンドを実行して、マウントしたGoogle Drive のMMVC_Trainerディレクトリに移動します。\n",
+ "\n",
+ "%cd 「MMVC_Trainerをgoogle driveにパップロードしたパス」\n",
+ "\n",
+ "としてください。\n",
+ "\n",
+ "正しいパスが指定されていれば\n",
+ "\n",
+ "-rw------- 1 root root 11780 Mar 4 16:53 attentions.py\n",
+ "\n",
+ "-rw------- 1 root root 4778 Mar 4 16:53 commons.py\n",
+ "\n",
+ "drwx------ 2 root root 4096 Mar 5 15:20 configs\n",
+ "\n",
+ "...といった感じに表示されるはずです。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "yaNipgu-enJo"
+ },
+ "outputs": [],
+ "source": [
+ "%cd /content/drive/MyDrive/\n",
+ "!ls -la"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "2CP8NcKZpZNA"
+ },
+ "source": [
+ "## 3 必要なライブラリのインストール\n",
+ "\n",
+ "何も考えず実行してください。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "oOWo15aRewCk"
+ },
+ "outputs": [],
+ "source": [
+ "!apt-get install espeak\n",
+ "!pip install Cython==0.29.21\n",
+ "!pip install librosa==0.8.0\n",
+ "!pip install matplotlib==3.3.1\n",
+ "!pip install numpy==1.18.5\n",
+ "!pip install phonemizer==2.2.1\n",
+ "!pip install scipy==1.5.2\n",
+ "!pip install tensorboard==2.3.0\n",
+ "!pip install torch==1.8.0\n",
+ "!pip install torchvision==0.9.0\n",
+ "!pip install torchaudio==0.8.0\n",
+ "!pip install Unidecode==1.1.1\n",
+ "!pip install retry\n",
+ "!pip install resampy==0.2.2"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "P3QYLvY4e38A"
+ },
+ "outputs": [],
+ "source": [
+ "%matplotlib inline\n",
+ "import matplotlib.pyplot as plt\n",
+ "import IPython.display as ipd\n",
+ "\n",
+ "import os\n",
+ "import json\n",
+ "import math\n",
+ "import torch\n",
+ "from torch import nn\n",
+ "from torch.nn import functional as F\n",
+ "from torch.utils.data import DataLoader\n",
+ "\n",
+ "import commons\n",
+ "import utils\n",
+ "from data_utils import TextAudioLoader, TextAudioCollate, TextAudioSpeakerLoader, TextAudioSpeakerCollate\n",
+ "from models import SynthesizerTrn\n",
+ "from text.symbols import symbols\n",
+ "from text import text_to_sequence\n",
+ "\n",
+ "from scipy.io.wavfile import write\n",
+ "\n",
+ "\n",
+ "def get_text(text, hps):\n",
+ " text_norm = text_to_sequence(text, hps.data.text_cleaners)\n",
+ " if hps.data.add_blank:\n",
+ " text_norm = commons.intersperse(text_norm, 0)\n",
+ " text_norm = torch.LongTensor(text_norm)\n",
+ " return text_norm"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "eAdIexFDoeym"
+ },
+ "source": [
+ "## 4 学習したモデルを読み込む"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "faOeDsFXpql9"
+ },
+ "source": [
+ "CONFIG_PATH に学習に利用したjsonファイルを`「./configs/****.json」`のように指定し、 \n",
+ "NET_PATHに学習したモデルを`「./configs/xxxx/G_*****.pth」`のように指定してください。\n",
+ "\n",
+ "\n",
+ "CONFIG_PATH = \"./configs/train_config_zundamon.json\" \n",
+ "CONFIG_PATH = \"./configs/train_config.json\"\n",
+ "\n",
+ "\n",
+ "\n",
+ "特に設定をいじっていない場合、CONFIG_PATHはどちらかになると思います。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "Rm-3oWmarsZt"
+ },
+ "outputs": [],
+ "source": [
+ "CONFIG_PATH = \"./configs/train_config_zundamon.json\"\n",
+ "NET_PATH = \"./logs/20220306_24000/G_xxxxx.pth\""
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "9EAsizUNsGAw"
+ },
+ "source": [
+ "指定したファイルをもとにモデルの読み込みを行います。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "ecUDV8_ee8OP"
+ },
+ "outputs": [],
+ "source": [
+ "hps = utils.get_hparams_from_file(CONFIG_PATH)"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "UYrcO66SfCqD"
+ },
+ "outputs": [],
+ "source": [
+ "net_g = SynthesizerTrn(\n",
+ " len(symbols),\n",
+ " hps.data.filter_length // 2 + 1,\n",
+ " hps.train.segment_size // hps.data.hop_length,\n",
+ " n_speakers=hps.data.n_speakers,\n",
+ " **hps.model)\n",
+ "_ = net_g.eval()\n",
+ "\n",
+ "_ = utils.load_checkpoint(NET_PATH, net_g, None)"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "m-ho5133vpFi"
+ },
+ "source": [
+ "## 5 学習したモデルで非リアルタイムVCを行う"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "uRtrz7GIwyGq"
+ },
+ "source": [
+ "非リアルタイムのVCを行います。\n",
+ "\n",
+ "ソース話者のIDとその話者の音声ファイルのパス、変換ターゲットの話者のIDを指定してください。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "uEqm8yA6v9xz"
+ },
+ "outputs": [],
+ "source": [
+ "SOURCE_WAVFILE = \"dataset/textful/00_myvoice/wav/VOICEACTRESS100_001.wav\"\n",
+ "SOURCE_SPEAKER_ID = 107\n",
+ "TARGET_ID = 100"
+ ]
+ },
+ {
+ "cell_type": "markdown",
+ "metadata": {
+ "id": "NHy-FQAYxLOR"
+ },
+ "source": [
+ "実際にVCを行います。\n",
+ "\n",
+ "ここでの性能が悪い場合、学習不足か他に問題があります。"
+ ]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "metadata": {
+ "id": "2vkotLtNY_s4"
+ },
+ "outputs": [],
+ "source": [
+ "with torch.no_grad():\n",
+ " dataset = TextAudioSpeakerLoader(hps.data.validation_files_notext, hps.data)\n",
+ " data = dataset.get_audio_text_speaker_pair([SOURCE_WAVFILE, SOURCE_SPEAKER_ID, \"a\"])\n",
+ " data = TextAudioSpeakerCollate()([data])\n",
+ " x, x_lengths, spec, spec_lengths, y, y_lengths, sid_src = [x for x in data]\n",
+ " sid_tgt1 = torch.LongTensor([TARGET_ID])\n",
+ " audio1 = net_g.voice_conversion(spec, spec_lengths, sid_src=sid_src, sid_tgt=sid_tgt1)[0][0,0].data.cpu().float().numpy()\n",
+ "print(\"Original SID: %d\" % sid_src.item())\n",
+ "ipd.display(ipd.Audio(y[0].cpu().numpy(), rate=hps.data.sampling_rate))\n",
+ "print(\"Converted SID: %d\" % sid_tgt1.item())\n",
+ "ipd.display(ipd.Audio(audio1, rate=hps.data.sampling_rate))"
+ ]
+ }
+ ],
+ "metadata": {
+ "colab": {
+ "collapsed_sections": [],
+ "name": "03_MMVC_Interface.ipynb",
+ "provenance": []
+ },
+ "kernelspec": {
+ "display_name": "Python 3.9.6 64-bit",
+ "language": "python",
+ "name": "python3"
+ },
+ "language_info": {
+ "name": "python",
+ "version": "3.9.6"
+ },
+ "vscode": {
+ "interpreter": {
+ "hash": "d3394867249fd41ee68869925f4586b97ae8a94f3c93a4c25403e9e75f272611"
+ }
+ }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/demo/MMVC_Trainer/preprocess.py b/demo/MMVC_Trainer/preprocess.py
new file mode 100755
index 00000000..aaedbf07
--- /dev/null
+++ b/demo/MMVC_Trainer/preprocess.py
@@ -0,0 +1,25 @@
+import argparse
+import text
+from utils import load_filepaths_and_text
+
+if __name__ == '__main__':
+ parser = argparse.ArgumentParser()
+ parser.add_argument("--out_extension", default="cleaned")
+ parser.add_argument("--text_index", default=1, type=int)
+ parser.add_argument("--filelists", nargs="+", default=["filelists/ljs_audio_text_val_filelist.txt", "filelists/ljs_audio_text_test_filelist.txt"])
+ parser.add_argument("--text_cleaners", nargs="+", default=["english_cleaners2"])
+
+ args = parser.parse_args()
+
+
+ for filelist in args.filelists:
+ print("START:", filelist)
+ filepaths_and_text = load_filepaths_and_text(filelist)
+ for i in range(len(filepaths_and_text)):
+ original_text = filepaths_and_text[i][args.text_index]
+ cleaned_text = text._clean_text(original_text, args.text_cleaners)
+ filepaths_and_text[i][args.text_index] = cleaned_text
+
+ new_filelist = filelist + "." + args.out_extension
+ with open(new_filelist, "w", encoding="utf-8") as f:
+ f.writelines(["|".join(x) + "\n" for x in filepaths_and_text])
diff --git a/demo/MMVC_Trainer/text/LICENSE b/demo/MMVC_Trainer/text/LICENSE
new file mode 100755
index 00000000..4ad4ed1d
--- /dev/null
+++ b/demo/MMVC_Trainer/text/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2017 Keith Ito
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/demo/MMVC_Trainer/text/__init__.py b/demo/MMVC_Trainer/text/__init__.py
new file mode 100755
index 00000000..4ac41f90
--- /dev/null
+++ b/demo/MMVC_Trainer/text/__init__.py
@@ -0,0 +1,54 @@
+""" from https://github.com/keithito/tacotron """
+from text import cleaners
+from text.symbols import symbols
+
+
+# Mappings from symbol to numeric ID and vice versa:
+_symbol_to_id = {s: i for i, s in enumerate(symbols)}
+_id_to_symbol = {i: s for i, s in enumerate(symbols)}
+
+
+def text_to_sequence(text, cleaner_names):
+ '''Converts a string of text to a sequence of IDs corresponding to the symbols in the text.
+ Args:
+ text: string to convert to a sequence
+ cleaner_names: names of the cleaner functions to run the text through
+ Returns:
+ List of integers corresponding to the symbols in the text
+ '''
+ sequence = []
+
+ clean_text = _clean_text(text, cleaner_names)
+ for symbol in clean_text:
+ symbol_id = _symbol_to_id[symbol]
+ sequence += [symbol_id]
+ return sequence
+
+
+def cleaned_text_to_sequence(cleaned_text):
+ '''Converts a string of text to a sequence of IDs corresponding to the symbols in the text.
+ Args:
+ text: string to convert to a sequence
+ Returns:
+ List of integers corresponding to the symbols in the text
+ '''
+ sequence = [_symbol_to_id[symbol] for symbol in cleaned_text]
+ return sequence
+
+
+def sequence_to_text(sequence):
+ '''Converts a sequence of IDs back to a string'''
+ result = ''
+ for symbol_id in sequence:
+ s = _id_to_symbol[symbol_id]
+ result += s
+ return result
+
+
+def _clean_text(text, cleaner_names):
+ for name in cleaner_names:
+ cleaner = getattr(cleaners, name)
+ if not cleaner:
+ raise Exception('Unknown cleaner: %s' % name)
+ text = cleaner(text)
+ return text
diff --git a/demo/MMVC_Trainer/text/cleaners.py b/demo/MMVC_Trainer/text/cleaners.py
new file mode 100755
index 00000000..32afd52c
--- /dev/null
+++ b/demo/MMVC_Trainer/text/cleaners.py
@@ -0,0 +1,105 @@
+""" The following information was added with reference to https://github.com/jaywalnut310/vits/tree/1eef52ed50743f77fca9ff6773ba673497f6bf9d. """
+""" from https://github.com/keithito/tacotron """
+
+'''
+Cleaners are transformations that run over the input text at both training and eval time.
+
+Cleaners can be selected by passing a comma-delimited list of cleaner names as the "cleaners"
+hyperparameter. Some cleaners are English-specific. You'll typically want to use:
+ 1. "english_cleaners" for English text
+ 2. "transliteration_cleaners" for non-English text that can be transliterated to ASCII using
+ the Unidecode library (https://pypi.python.org/pypi/Unidecode)
+ 3. "basic_cleaners" if you do not want to transliterate (in this case, you should also update
+ the symbols in symbols.py to match your data).
+'''
+
+import re
+from unidecode import unidecode
+from phonemizer import phonemize
+
+
+# Regular expression matching whitespace:
+_whitespace_re = re.compile(r'\s+')
+
+# List of (regular expression, replacement) pairs for abbreviations:
+_abbreviations = [(re.compile('\\b%s\\.' % x[0], re.IGNORECASE), x[1]) for x in [
+ ('mrs', 'misess'),
+ ('mr', 'mister'),
+ ('dr', 'doctor'),
+ ('st', 'saint'),
+ ('co', 'company'),
+ ('jr', 'junior'),
+ ('maj', 'major'),
+ ('gen', 'general'),
+ ('drs', 'doctors'),
+ ('rev', 'reverend'),
+ ('lt', 'lieutenant'),
+ ('hon', 'honorable'),
+ ('sgt', 'sergeant'),
+ ('capt', 'captain'),
+ ('esq', 'esquire'),
+ ('ltd', 'limited'),
+ ('col', 'colonel'),
+ ('ft', 'fort'),
+]]
+
+
+def expand_abbreviations(text):
+ for regex, replacement in _abbreviations:
+ text = re.sub(regex, replacement, text)
+ return text
+
+
+def expand_numbers(text):
+ return normalize_numbers(text)
+
+
+def lowercase(text):
+ return text.lower()
+
+
+def collapse_whitespace(text):
+ return re.sub(_whitespace_re, ' ', text)
+
+
+def convert_to_ascii(text):
+ return unidecode(text)
+
+
+def basic_cleaners(text):
+ '''Basic pipeline that lowercases and collapses whitespace without transliteration.'''
+ text = lowercase(text)
+ text = collapse_whitespace(text)
+ return text
+
+
+def transliteration_cleaners(text):
+ '''Pipeline for non-English text that transliterates to ASCII.'''
+ text = convert_to_ascii(text)
+ text = lowercase(text)
+ text = collapse_whitespace(text)
+ return text
+
+
+def english_cleaners(text):
+ '''Pipeline for English text, including abbreviation expansion.'''
+ text = convert_to_ascii(text)
+ text = lowercase(text)
+ text = expand_abbreviations(text)
+ phonemes = phonemize(text, language='en-us', backend='espeak', strip=True)
+ phonemes = collapse_whitespace(phonemes)
+ return phonemes
+
+
+def english_cleaners2(text):
+ '''Pipeline for English text, including abbreviation expansion. + punctuation + stress'''
+ text = convert_to_ascii(text)
+ text = lowercase(text)
+ text = expand_abbreviations(text)
+ phonemes = phonemize(text, language='en-us', backend='espeak', strip=True, preserve_punctuation=True, with_stress=True)
+ phonemes = collapse_whitespace(phonemes)
+ return phonemes
+
+def japanese_cleaners(text):
+ phonemes = text.split('-')
+ return phonemes
\ No newline at end of file
diff --git a/demo/MMVC_Trainer/text/symbols.py b/demo/MMVC_Trainer/text/symbols.py
new file mode 100755
index 00000000..2a46c1fa
--- /dev/null
+++ b/demo/MMVC_Trainer/text/symbols.py
@@ -0,0 +1,64 @@
+""" The following information was added with reference to https://github.com/jaywalnut310/vits/tree/1eef52ed50743f77fca9ff6773ba673497f6bf9d """
+""" from https://github.com/keithito/tacotron """
+
+'''
+Defines the set of symbols used in text input to the model.
+'''
+_pad = '_'
+_punctuation = ';:,.!?¡¿—…"«»“” '
+_letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
+_letters_ipa = "ɑɐɒæɓʙβɔɕçɗɖðʤəɘɚɛɜɝɞɟʄɡɠɢʛɦɧħɥʜɨɪʝɭɬɫɮʟɱɯɰŋɳɲɴøɵɸθœɶʘɹɺɾɻʀʁɽʂʃʈʧʉʊʋⱱʌɣɤʍχʎʏʑʐʒʔʡʕʢǀǁǂǃˈˌːˑʼʴʰʱʲʷˠˤ˞↓↑→↗↘'̩'ᵻ"
+
+
+# Export all symbols:
+symbols = [_pad] + list(_punctuation) + list(_letters) + list(_letters_ipa)
+
+# Special symbol ids
+SPACE_ID = symbols.index(" ")
+
+symbols = [
+ "A",
+ "E",
+ "I",
+ "N",
+ "O",
+ "U",
+ "a",
+ "b",
+ "by",
+ "ch",
+ "cl",
+ "d",
+ "dy",
+ "e",
+ "f",
+ "g",
+ "gy",
+ "h",
+ "hy",
+ "i",
+ "j",
+ "k",
+ "ky",
+ "m",
+ "my",
+ "n",
+ "ny",
+ "o",
+ "p",
+ "py",
+ "r",
+ "ry",
+ "s",
+ "sh",
+ "t",
+ "ts",
+ "ty",
+ "u",
+ "v",
+ "w",
+ "y",
+ "z",
+ "pau",
+ "sil"
+]
diff --git a/demo/MMVC_Trainer/train.py b/demo/MMVC_Trainer/train.py
new file mode 100755
index 00000000..703d30cf
--- /dev/null
+++ b/demo/MMVC_Trainer/train.py
@@ -0,0 +1,290 @@
+import os
+import json
+import argparse
+import itertools
+import math
+import torch
+from torch import nn, optim
+from torch.nn import functional as F
+from torch.utils.data import DataLoader
+from torch.utils.tensorboard import SummaryWriter
+import torch.multiprocessing as mp
+import torch.distributed as dist
+from torch.nn.parallel import DistributedDataParallel as DDP
+from torch.cuda.amp import autocast, GradScaler
+
+import commons
+import utils
+from data_utils import (
+ TextAudioLoader,
+ TextAudioCollate,
+ DistributedBucketSampler
+)
+from models import (
+ SynthesizerTrn,
+ MultiPeriodDiscriminator,
+)
+from losses import (
+ generator_loss,
+ discriminator_loss,
+ feature_loss,
+ kl_loss
+)
+from mel_processing import mel_spectrogram_torch, spec_to_mel_torch
+from text.symbols import symbols
+
+
+torch.backends.cudnn.benchmark = True
+global_step = 0
+
+
+def main():
+ """Assume Single Node Multi GPUs Training Only"""
+ assert torch.cuda.is_available(), "CPU training is not allowed."
+
+ n_gpus = torch.cuda.device_count()
+ os.environ['MASTER_ADDR'] = 'localhost'
+ os.environ['MASTER_PORT'] = '80000'
+
+ hps = utils.get_hparams()
+ mp.spawn(run, nprocs=n_gpus, args=(n_gpus, hps,))
+
+
+def run(rank, n_gpus, hps):
+ global global_step
+ if rank == 0:
+ logger = utils.get_logger(hps.model_dir)
+ logger.info(hps)
+ utils.check_git_hash(hps.model_dir)
+ writer = SummaryWriter(log_dir=hps.model_dir)
+ writer_eval = SummaryWriter(log_dir=os.path.join(hps.model_dir, "eval"))
+
+ dist.init_process_group(backend='nccl', init_method='env://', world_size=n_gpus, rank=rank)
+ torch.manual_seed(hps.train.seed)
+ torch.cuda.set_device(rank)
+
+ train_dataset = TextAudioLoader(hps.data.training_files, hps.data)
+ train_sampler = DistributedBucketSampler(
+ train_dataset,
+ hps.train.batch_size,
+ [32,300,400,500,600,700,800,900,1000],
+ num_replicas=n_gpus,
+ rank=rank,
+ shuffle=True)
+ collate_fn = TextAudioCollate()
+ train_loader = DataLoader(train_dataset, num_workers=8, shuffle=False, pin_memory=True,
+ collate_fn=collate_fn, batch_sampler=train_sampler)
+ if rank == 0:
+ eval_dataset = TextAudioLoader(hps.data.validation_files, hps.data)
+ eval_loader = DataLoader(eval_dataset, num_workers=8, shuffle=False,
+ batch_size=hps.train.batch_size, pin_memory=True,
+ drop_last=False, collate_fn=collate_fn)
+
+ net_g = SynthesizerTrn(
+ len(symbols),
+ hps.data.filter_length // 2 + 1,
+ hps.train.segment_size // hps.data.hop_length,
+ **hps.model).cuda(rank)
+ net_d = MultiPeriodDiscriminator(hps.model.use_spectral_norm).cuda(rank)
+ optim_g = torch.optim.AdamW(
+ net_g.parameters(),
+ hps.train.learning_rate,
+ betas=hps.train.betas,
+ eps=hps.train.eps)
+ optim_d = torch.optim.AdamW(
+ net_d.parameters(),
+ hps.train.learning_rate,
+ betas=hps.train.betas,
+ eps=hps.train.eps)
+ net_g = DDP(net_g, device_ids=[rank])
+ net_d = DDP(net_d, device_ids=[rank])
+
+ try:
+ _, _, _, epoch_str = utils.load_checkpoint(utils.latest_checkpoint_path(hps.model_dir, "G_*.pth"), net_g, optim_g)
+ _, _, _, epoch_str = utils.load_checkpoint(utils.latest_checkpoint_path(hps.model_dir, "D_*.pth"), net_d, optim_d)
+ global_step = (epoch_str - 1) * len(train_loader)
+ except:
+ epoch_str = 1
+ global_step = 0
+
+ scheduler_g = torch.optim.lr_scheduler.ExponentialLR(optim_g, gamma=hps.train.lr_decay, last_epoch=epoch_str-2)
+ scheduler_d = torch.optim.lr_scheduler.ExponentialLR(optim_d, gamma=hps.train.lr_decay, last_epoch=epoch_str-2)
+
+ scaler = GradScaler(enabled=hps.train.fp16_run)
+
+ for epoch in range(epoch_str, hps.train.epochs + 1):
+ if rank==0:
+ train_and_evaluate(rank, epoch, hps, [net_g, net_d], [optim_g, optim_d], [scheduler_g, scheduler_d], scaler, [train_loader, eval_loader], logger, [writer, writer_eval])
+ else:
+ train_and_evaluate(rank, epoch, hps, [net_g, net_d], [optim_g, optim_d], [scheduler_g, scheduler_d], scaler, [train_loader, None], None, None)
+ scheduler_g.step()
+ scheduler_d.step()
+
+
+def train_and_evaluate(rank, epoch, hps, nets, optims, schedulers, scaler, loaders, logger, writers):
+ net_g, net_d = nets
+ optim_g, optim_d = optims
+ scheduler_g, scheduler_d = schedulers
+ train_loader, eval_loader = loaders
+ if writers is not None:
+ writer, writer_eval = writers
+
+ train_loader.batch_sampler.set_epoch(epoch)
+ global global_step
+
+ net_g.train()
+ net_d.train()
+ for batch_idx, (x, x_lengths, spec, spec_lengths, y, y_lengths) in enumerate(train_loader):
+ x, x_lengths = x.cuda(rank, non_blocking=True), x_lengths.cuda(rank, non_blocking=True)
+ spec, spec_lengths = spec.cuda(rank, non_blocking=True), spec_lengths.cuda(rank, non_blocking=True)
+ y, y_lengths = y.cuda(rank, non_blocking=True), y_lengths.cuda(rank, non_blocking=True)
+
+ with autocast(enabled=hps.train.fp16_run):
+ y_hat, l_length, attn, ids_slice, x_mask, z_mask,\
+ (z, z_p, m_p, logs_p, m_q, logs_q) = net_g(x, x_lengths, spec, spec_lengths)
+
+ mel = spec_to_mel_torch(
+ spec,
+ hps.data.filter_length,
+ hps.data.n_mel_channels,
+ hps.data.sampling_rate,
+ hps.data.mel_fmin,
+ hps.data.mel_fmax)
+ y_mel = commons.slice_segments(mel, ids_slice, hps.train.segment_size // hps.data.hop_length)
+ y_hat_mel = mel_spectrogram_torch(
+ y_hat.squeeze(1),
+ hps.data.filter_length,
+ hps.data.n_mel_channels,
+ hps.data.sampling_rate,
+ hps.data.hop_length,
+ hps.data.win_length,
+ hps.data.mel_fmin,
+ hps.data.mel_fmax
+ )
+
+ y = commons.slice_segments(y, ids_slice * hps.data.hop_length, hps.train.segment_size) # slice
+
+ # Discriminator
+ y_d_hat_r, y_d_hat_g, _, _ = net_d(y, y_hat.detach())
+ with autocast(enabled=False):
+ loss_disc, losses_disc_r, losses_disc_g = discriminator_loss(y_d_hat_r, y_d_hat_g)
+ loss_disc_all = loss_disc
+ optim_d.zero_grad()
+ scaler.scale(loss_disc_all).backward()
+ scaler.unscale_(optim_d)
+ grad_norm_d = commons.clip_grad_value_(net_d.parameters(), None)
+ scaler.step(optim_d)
+
+ with autocast(enabled=hps.train.fp16_run):
+ # Generator
+ y_d_hat_r, y_d_hat_g, fmap_r, fmap_g = net_d(y, y_hat)
+ with autocast(enabled=False):
+ loss_dur = torch.sum(l_length.float())
+ loss_mel = F.l1_loss(y_mel, y_hat_mel) * hps.train.c_mel
+ loss_kl = kl_loss(z_p, logs_q, m_p, logs_p, z_mask) * hps.train.c_kl
+
+ loss_fm = feature_loss(fmap_r, fmap_g)
+ loss_gen, losses_gen = generator_loss(y_d_hat_g)
+ loss_gen_all = loss_gen + loss_fm + loss_mel + loss_dur + loss_kl
+ optim_g.zero_grad()
+ scaler.scale(loss_gen_all).backward()
+ scaler.unscale_(optim_g)
+ grad_norm_g = commons.clip_grad_value_(net_g.parameters(), None)
+ scaler.step(optim_g)
+ scaler.update()
+
+ if rank==0:
+ if global_step % hps.train.log_interval == 0:
+ lr = optim_g.param_groups[0]['lr']
+ losses = [loss_disc, loss_gen, loss_fm, loss_mel, loss_dur, loss_kl]
+ logger.info('Train Epoch: {} [{:.0f}%]'.format(
+ epoch,
+ 100. * batch_idx / len(train_loader)))
+ logger.info([x.item() for x in losses] + [global_step, lr])
+
+ scalar_dict = {"loss/g/total": loss_gen_all, "loss/d/total": loss_disc_all, "learning_rate": lr, "grad_norm_d": grad_norm_d, "grad_norm_g": grad_norm_g}
+ scalar_dict.update({"loss/g/fm": loss_fm, "loss/g/mel": loss_mel, "loss/g/dur": loss_dur, "loss/g/kl": loss_kl})
+
+ scalar_dict.update({"loss/g/{}".format(i): v for i, v in enumerate(losses_gen)})
+ scalar_dict.update({"loss/d_r/{}".format(i): v for i, v in enumerate(losses_disc_r)})
+ scalar_dict.update({"loss/d_g/{}".format(i): v for i, v in enumerate(losses_disc_g)})
+ image_dict = {
+ "slice/mel_org": utils.plot_spectrogram_to_numpy(y_mel[0].data.cpu().numpy()),
+ "slice/mel_gen": utils.plot_spectrogram_to_numpy(y_hat_mel[0].data.cpu().numpy()),
+ "all/mel": utils.plot_spectrogram_to_numpy(mel[0].data.cpu().numpy()),
+ "all/attn": utils.plot_alignment_to_numpy(attn[0,0].data.cpu().numpy())
+ }
+ utils.summarize(
+ writer=writer,
+ global_step=global_step,
+ images=image_dict,
+ scalars=scalar_dict)
+
+ if global_step % hps.train.eval_interval == 0:
+ evaluate(hps, net_g, eval_loader, writer_eval)
+ utils.save_checkpoint(net_g, optim_g, hps.train.learning_rate, epoch, os.path.join(hps.model_dir, "G_{}.pth".format(global_step)))
+ utils.save_checkpoint(net_d, optim_d, hps.train.learning_rate, epoch, os.path.join(hps.model_dir, "D_{}.pth".format(global_step)))
+ global_step += 1
+
+ if rank == 0:
+ logger.info('====> Epoch: {}'.format(epoch))
+
+
+def evaluate(hps, generator, eval_loader, writer_eval):
+ generator.eval()
+ with torch.no_grad():
+ for batch_idx, (x, x_lengths, spec, spec_lengths, y, y_lengths) in enumerate(eval_loader):
+ x, x_lengths = x.cuda(0), x_lengths.cuda(0)
+ spec, spec_lengths = spec.cuda(0), spec_lengths.cuda(0)
+ y, y_lengths = y.cuda(0), y_lengths.cuda(0)
+
+ # remove else
+ x = x[:1]
+ x_lengths = x_lengths[:1]
+ spec = spec[:1]
+ spec_lengths = spec_lengths[:1]
+ y = y[:1]
+ y_lengths = y_lengths[:1]
+ break
+ y_hat, attn, mask, *_ = generator.module.infer(x, x_lengths, max_len=1000)
+ y_hat_lengths = mask.sum([1,2]).long() * hps.data.hop_length
+
+ mel = spec_to_mel_torch(
+ spec,
+ hps.data.filter_length,
+ hps.data.n_mel_channels,
+ hps.data.sampling_rate,
+ hps.data.mel_fmin,
+ hps.data.mel_fmax)
+ y_hat_mel = mel_spectrogram_torch(
+ y_hat.squeeze(1).float(),
+ hps.data.filter_length,
+ hps.data.n_mel_channels,
+ hps.data.sampling_rate,
+ hps.data.hop_length,
+ hps.data.win_length,
+ hps.data.mel_fmin,
+ hps.data.mel_fmax
+ )
+ image_dict = {
+ "gen/mel": utils.plot_spectrogram_to_numpy(y_hat_mel[0].cpu().numpy())
+ }
+ audio_dict = {
+ "gen/audio": y_hat[0,:,:y_hat_lengths[0]]
+ }
+ if global_step == 0:
+ image_dict.update({"gt/mel": utils.plot_spectrogram_to_numpy(mel[0].cpu().numpy())})
+ audio_dict.update({"gt/audio": y[0,:,:y_lengths[0]]})
+
+ utils.summarize(
+ writer=writer_eval,
+ global_step=global_step,
+ images=image_dict,
+ audios=audio_dict,
+ audio_sampling_rate=hps.data.sampling_rate
+ )
+ generator.train()
+
+
+if __name__ == "__main__":
+ main()
diff --git a/demo/MMVC_Trainer/train_ms.py b/demo/MMVC_Trainer/train_ms.py
new file mode 100755
index 00000000..2d83be2a
--- /dev/null
+++ b/demo/MMVC_Trainer/train_ms.py
@@ -0,0 +1,333 @@
+import os
+import json
+import argparse
+import itertools
+import math
+from psutil import cpu_count
+import torch
+from torch import nn, optim
+from torch.nn import functional as F
+from torch.utils.data import DataLoader
+from torch.utils.tensorboard import SummaryWriter
+import torch.multiprocessing as mp
+import torch.distributed as dist
+from torch.nn.parallel import DistributedDataParallel as DDP
+from torch.nn.parallel import DataParallel as DP
+from torch.cuda.amp import autocast, GradScaler
+import datetime
+import pytz
+import time
+from tqdm import tqdm
+#import warnings
+
+
+import commons
+import utils
+from data_utils import (
+ TextAudioSpeakerLoader,
+ TextAudioSpeakerCollate,
+ DistributedBucketSampler
+)
+from models import (
+ SynthesizerTrn,
+ MultiPeriodDiscriminator,
+)
+from losses import (
+ generator_loss,
+ discriminator_loss,
+ feature_loss,
+ kl_loss
+)
+from mel_processing import mel_spectrogram_torch, spec_to_mel_torch
+from text.symbols import symbols
+
+#stftの警告対策
+#warnings.resetwarnings()
+#warnings.simplefilter('ignore', UserWarning)
+#warnings.simplefilter('ignore', DeprecationWarning)
+
+torch.backends.cudnn.benchmark = True
+global_step = 0
+
+
+def main():
+ """Assume Single Node Multi GPUs Training Only"""
+ assert torch.cuda.is_available(), "CPU training is not allowed."
+
+ n_gpus = torch.cuda.device_count()
+ os.environ['MASTER_ADDR'] = 'localhost'
+ os.environ['MASTER_PORT'] = '8000'
+
+ hps = utils.get_hparams()
+
+ mp.spawn(run, nprocs=n_gpus, args=(n_gpus, hps,))
+
+
+def run(rank, n_gpus, hps):
+ global global_step
+
+ if hps.others.os_type == "windows":
+ backend_type = "gloo"
+ parallel = DP
+ else: # Colab
+ backend_type = "nccl"
+ parallel = DDP
+
+ if rank == 0:
+ logger = utils.get_logger(hps.model_dir)
+ logger.info(hps)
+ utils.check_git_hash(hps.model_dir)
+ writer = SummaryWriter(log_dir=hps.model_dir)
+ writer_eval = SummaryWriter(log_dir=os.path.join(hps.model_dir, "eval"))
+
+ cpu_count = os.cpu_count()
+ if cpu_count > 8:
+ cpu_count = 8
+
+ dist.init_process_group(backend=backend_type, init_method='env://', world_size=n_gpus, rank=rank)
+ torch.manual_seed(hps.train.seed)
+ torch.cuda.set_device(rank)
+ train_dataset = TextAudioSpeakerLoader(hps.data.training_files, hps.data, augmentation=hps.augmentation.enable, augmentation_params=hps.augmentation)
+ train_sampler = DistributedBucketSampler(
+ train_dataset,
+ hps.train.batch_size,
+ [96,375,750,1125,1500,1875,2250,2625,3000],
+ num_replicas=n_gpus,
+ rank=rank,
+ shuffle=True)
+ collate_fn = TextAudioSpeakerCollate()
+ train_loader = DataLoader(train_dataset, num_workers=cpu_count, shuffle=False, pin_memory=True,
+ collate_fn=collate_fn, batch_sampler=train_sampler)
+ if rank == 0:
+ eval_dataset = TextAudioSpeakerLoader(hps.data.validation_files, hps.data, augmentation=False)
+ eval_sampler = DistributedBucketSampler(
+ eval_dataset,
+ hps.train.batch_size,
+ [96,375,750,1125,1500,1875,2250,2625,3000],
+ num_replicas=n_gpus,
+ rank=rank,
+ shuffle=True)
+ eval_loader = DataLoader(eval_dataset, num_workers=cpu_count, shuffle=False, pin_memory=True,
+ collate_fn=collate_fn, batch_sampler=eval_sampler)
+ net_g = SynthesizerTrn(
+ len(symbols),
+ hps.data.filter_length // 2 + 1,
+ hps.train.segment_size // hps.data.hop_length,
+ n_speakers=hps.data.n_speakers,
+ **hps.model).cuda(rank)
+ net_d = MultiPeriodDiscriminator(hps.model.use_spectral_norm).cuda(rank)
+ optim_g = torch.optim.AdamW(
+ net_g.parameters(),
+ hps.train.learning_rate,
+ betas=hps.train.betas,
+ eps=hps.train.eps)
+ optim_d = torch.optim.AdamW(
+ net_d.parameters(),
+ hps.train.learning_rate,
+ betas=hps.train.betas,
+ eps=hps.train.eps)
+ net_g = parallel(net_g, device_ids=[rank])
+ net_d = parallel(net_d, device_ids=[rank])
+
+ logger.info('FineTuning : '+str(hps.fine_flag))
+ if hps.fine_flag:
+ logger.info('Load model : '+str(hps.fine_model_g))
+ logger.info('Load model : '+str(hps.fine_model_d))
+ _, _, _, epoch_str = utils.load_checkpoint(hps.fine_model_g, net_g, optim_g)
+ _, _, _, epoch_str = utils.load_checkpoint(hps.fine_model_d, net_d, optim_d)
+ epoch_str = 1
+ global_step = 0
+
+ else:
+ try:
+ _, _, _, epoch_str = utils.load_checkpoint(utils.latest_checkpoint_path(hps.model_dir, "G_*.pth"), net_g, optim_g)
+ _, _, _, epoch_str = utils.load_checkpoint(utils.latest_checkpoint_path(hps.model_dir, "D_*.pth"), net_d, optim_d)
+ global_step = (epoch_str - 1) * len(train_loader)
+ except:
+ epoch_str = 1
+ global_step = 0
+
+ scheduler_g = torch.optim.lr_scheduler.ExponentialLR(optim_g, gamma=hps.train.lr_decay, last_epoch=epoch_str-2)
+ scheduler_d = torch.optim.lr_scheduler.ExponentialLR(optim_d, gamma=hps.train.lr_decay, last_epoch=epoch_str-2)
+
+ scaler = GradScaler(enabled=hps.train.fp16_run)
+
+ for epoch in range(epoch_str, hps.train.epochs + 1):
+ if rank==0:
+ train_and_evaluate(rank, epoch, hps, [net_g, net_d], [optim_g, optim_d], [scheduler_g, scheduler_d], scaler, [train_loader, eval_loader], logger, [writer, writer_eval])
+ else:
+ train_and_evaluate(rank, epoch, hps, [net_g, net_d], [optim_g, optim_d], [scheduler_g, scheduler_d], scaler, [train_loader, None], None, None)
+ scheduler_g.step()
+ scheduler_d.step()
+
+
+def train_and_evaluate(rank, epoch, hps, nets, optims, schedulers, scaler, loaders, logger, writers):
+ net_g, net_d = nets
+ optim_g, optim_d = optims
+ scheduler_g, scheduler_d = schedulers
+ train_loader, eval_loader = loaders
+ if writers is not None:
+ writer, writer_eval = writers
+
+ train_loader.batch_sampler.set_epoch(epoch)
+ global global_step
+
+ net_g.train()
+ net_d.train()
+ for batch_idx, (x, x_lengths, spec, spec_lengths, y, y_lengths, speakers) in enumerate(tqdm(train_loader, desc="Epoch {}".format(epoch))):
+ x, x_lengths = x.cuda(rank, non_blocking=True), x_lengths.cuda(rank, non_blocking=True)
+ spec, spec_lengths = spec.cuda(rank, non_blocking=True), spec_lengths.cuda(rank, non_blocking=True)
+ y, y_lengths = y.cuda(rank, non_blocking=True), y_lengths.cuda(rank, non_blocking=True)
+ speakers = speakers.cuda(rank, non_blocking=True)
+
+ with autocast(enabled=hps.train.fp16_run):
+ y_hat, attn, ids_slice, x_mask, z_mask,\
+ (z, z_p, m_p, logs_p, m_q, logs_q) = net_g(x, x_lengths, spec, spec_lengths, speakers)
+ mel = spec_to_mel_torch(
+ spec,
+ hps.data.filter_length,
+ hps.data.n_mel_channels,
+ hps.data.sampling_rate,
+ hps.data.mel_fmin,
+ hps.data.mel_fmax)
+ y_mel = commons.slice_segments(mel, ids_slice, hps.train.segment_size // hps.data.hop_length)
+ y_hat = y_hat.float()
+ y_hat_mel = mel_spectrogram_torch(
+ y_hat.squeeze(1),
+ hps.data.filter_length,
+ hps.data.n_mel_channels,
+ hps.data.sampling_rate,
+ hps.data.hop_length,
+ hps.data.win_length,
+ hps.data.mel_fmin,
+ hps.data.mel_fmax
+ )
+ y = commons.slice_segments(y, ids_slice * hps.data.hop_length, hps.train.segment_size) # slice
+
+ # Discriminator
+ y_d_hat_r, y_d_hat_g, _, _ = net_d(y, y_hat.detach())
+ with autocast(enabled=False):
+ loss_disc, losses_disc_r, losses_disc_g = discriminator_loss(y_d_hat_r, y_d_hat_g)
+ loss_disc_all = loss_disc
+ optim_d.zero_grad()
+ scaler.scale(loss_disc_all).backward()
+ scaler.unscale_(optim_d)
+ grad_norm_d = commons.clip_grad_value_(net_d.parameters(), None)
+ scaler.step(optim_d)
+
+ with autocast(enabled=hps.train.fp16_run):
+ # Generator
+ y_d_hat_r, y_d_hat_g, fmap_r, fmap_g = net_d(y, y_hat)
+ with autocast(enabled=False):
+ loss_mel = F.l1_loss(y_mel, y_hat_mel) * hps.train.c_mel
+ loss_kl = kl_loss(z_p, logs_q, m_p, logs_p, z_mask) * hps.train.c_kl
+
+ loss_fm = feature_loss(fmap_r, fmap_g)
+ loss_gen, losses_gen = generator_loss(y_d_hat_g)
+ loss_gen_all = loss_gen + loss_fm + loss_mel + loss_kl
+ optim_g.zero_grad()
+ scaler.scale(loss_gen_all).backward()
+ scaler.unscale_(optim_g)
+ grad_norm_g = commons.clip_grad_value_(net_g.parameters(), None)
+ scaler.step(optim_g)
+ scaler.update()
+
+ if rank==0:
+ if global_step % hps.train.log_interval == 0:
+ lr = optim_g.param_groups[0]['lr']
+ losses = [loss_disc, loss_gen, loss_fm, loss_mel, loss_kl]
+ logger.info('Train Epoch: {} [{:.0f}%]'.format(
+ epoch,
+ 100. * batch_idx / len(train_loader)))
+ logger.info(datetime.datetime.now(pytz.timezone('Asia/Tokyo')))
+ logger.info([x.item() for x in losses] + [global_step, lr])
+
+ scalar_dict = {"loss/g/total": loss_gen_all, "loss/d/total": loss_disc_all, "learning_rate": lr, "grad_norm_d": grad_norm_d, "grad_norm_g": grad_norm_g}
+ scalar_dict.update({"loss/g/fm": loss_fm, "loss/g/mel": loss_mel, "loss/g/kl": loss_kl})
+
+ scalar_dict.update({"loss/g/{}".format(i): v for i, v in enumerate(losses_gen)})
+ scalar_dict.update({"loss/d_r/{}".format(i): v for i, v in enumerate(losses_disc_r)})
+ scalar_dict.update({"loss/d_g/{}".format(i): v for i, v in enumerate(losses_disc_g)})
+ image_dict = {
+ "slice/mel_org": utils.plot_spectrogram_to_numpy(y_mel[0].data.cpu().numpy()),
+ "slice/mel_gen": utils.plot_spectrogram_to_numpy(y_hat_mel[0].data.cpu().numpy()),
+ "all/mel": utils.plot_spectrogram_to_numpy(mel[0].data.cpu().numpy()),
+ "all/attn": utils.plot_alignment_to_numpy(attn[0,0].data.cpu().numpy())
+ }
+ utils.summarize(
+ writer=writer,
+ global_step=global_step,
+ images=image_dict,
+ scalars=scalar_dict)
+ utils.save_checkpoint(net_g, optim_g, hps.train.learning_rate, epoch, os.path.join(hps.model_dir, "G_latest_99999999.pth"))
+ utils.save_checkpoint(net_d, optim_d, hps.train.learning_rate, epoch, os.path.join(hps.model_dir, "D_latest_99999999.pth"))
+
+ if global_step % hps.train.eval_interval == 0 and global_step != 0:
+ evaluate(hps, net_g, eval_loader, writer_eval, logger)
+ utils.save_checkpoint(net_g, optim_g, hps.train.learning_rate, epoch, os.path.join(hps.model_dir, "G_{}.pth".format(global_step)))
+ utils.save_checkpoint(net_d, optim_d, hps.train.learning_rate, epoch, os.path.join(hps.model_dir, "D_{}.pth".format(global_step)))
+ utils.save_checkpoint(net_g, optim_g, hps.train.learning_rate, epoch, os.path.join(hps.model_dir, "G_latest_99999999.pth"))
+ utils.save_checkpoint(net_d, optim_d, hps.train.learning_rate, epoch, os.path.join(hps.model_dir, "D_latest_99999999.pth"))
+ global_step += 1
+
+
+def evaluate(hps, generator, eval_loader, writer_eval, logger):
+ scalar_dict = {}
+ scalar_dict.update({"loss/g/mel": 0.0, "loss/g/kl": 0.0})
+ with torch.no_grad():
+ #evalのデータセットを一周する
+ for batch_idx, (x, x_lengths, spec, spec_lengths, y, y_lengths, speakers) in enumerate(tqdm(eval_loader, desc="Epoch {}".format("eval"))):
+ x, x_lengths = x.cuda(0), x_lengths.cuda(0)
+ spec, spec_lengths = spec.cuda(0), spec_lengths.cuda(0)
+ y, y_lengths = y.cuda(0), y_lengths.cuda(0)
+ speakers = speakers.cuda(0)
+ #autocastはfp16のおまじない
+ with autocast(enabled=hps.train.fp16_run):
+ #Generator
+ y_hat, attn, ids_slice, x_mask, z_mask,\
+ (z, z_p, m_p, logs_p, m_q, logs_q) = generator(x, x_lengths, spec, spec_lengths, speakers)
+
+ mel = spec_to_mel_torch(
+ spec,
+ hps.data.filter_length,
+ hps.data.n_mel_channels,
+ hps.data.sampling_rate,
+ hps.data.mel_fmin,
+ hps.data.mel_fmax)
+ y_mel = commons.slice_segments(mel, ids_slice, hps.train.segment_size // hps.data.hop_length)
+ y_hat = y_hat.float()
+ y_hat_mel = mel_spectrogram_torch(
+ y_hat.squeeze(1),
+ hps.data.filter_length,
+ hps.data.n_mel_channels,
+ hps.data.sampling_rate,
+ hps.data.hop_length,
+ hps.data.win_length,
+ hps.data.mel_fmin,
+ hps.data.mel_fmax
+ )
+ batch_num = batch_idx
+
+ y = commons.slice_segments(y, ids_slice * hps.data.hop_length, hps.train.segment_size) # slice
+
+ with autocast(enabled=hps.train.fp16_run):
+ with autocast(enabled=False):
+ loss_mel = F.l1_loss(y_mel, y_hat_mel) * hps.train.c_mel
+ loss_kl = kl_loss(z_p, logs_q, m_p, logs_p, z_mask) * hps.train.c_kl
+
+ scalar_dict["loss/g/mel"] = scalar_dict["loss/g/mel"] + loss_mel
+ scalar_dict["loss/g/kl"] = scalar_dict["loss/g/kl"] + loss_kl
+
+ #lossをepoch1周の結果をiter単位の平均値に
+ scalar_dict["loss/g/mel"] = scalar_dict["loss/g/mel"] / (batch_num+1)
+ scalar_dict["loss/g/kl"] = scalar_dict["loss/g/kl"] / (batch_num+1)
+ logger.info("loss/g/mel : {} lloss/g/kl : {}".format(str(scalar_dict["loss/g/mel"]), str(scalar_dict["loss/g/kl"])))
+
+ utils.summarize(
+ writer=writer_eval,
+ global_step=global_step,
+ scalars=scalar_dict,
+ )
+
+if __name__ == "__main__":
+ main()
diff --git a/demo/MMVC_Trainer/transforms.py b/demo/MMVC_Trainer/transforms.py
new file mode 100755
index 00000000..4793d67c
--- /dev/null
+++ b/demo/MMVC_Trainer/transforms.py
@@ -0,0 +1,193 @@
+import torch
+from torch.nn import functional as F
+
+import numpy as np
+
+
+DEFAULT_MIN_BIN_WIDTH = 1e-3
+DEFAULT_MIN_BIN_HEIGHT = 1e-3
+DEFAULT_MIN_DERIVATIVE = 1e-3
+
+
+def piecewise_rational_quadratic_transform(inputs,
+ unnormalized_widths,
+ unnormalized_heights,
+ unnormalized_derivatives,
+ inverse=False,
+ tails=None,
+ tail_bound=1.,
+ min_bin_width=DEFAULT_MIN_BIN_WIDTH,
+ min_bin_height=DEFAULT_MIN_BIN_HEIGHT,
+ min_derivative=DEFAULT_MIN_DERIVATIVE):
+
+ if tails is None:
+ spline_fn = rational_quadratic_spline
+ spline_kwargs = {}
+ else:
+ spline_fn = unconstrained_rational_quadratic_spline
+ spline_kwargs = {
+ 'tails': tails,
+ 'tail_bound': tail_bound
+ }
+
+ outputs, logabsdet = spline_fn(
+ inputs=inputs,
+ unnormalized_widths=unnormalized_widths,
+ unnormalized_heights=unnormalized_heights,
+ unnormalized_derivatives=unnormalized_derivatives,
+ inverse=inverse,
+ min_bin_width=min_bin_width,
+ min_bin_height=min_bin_height,
+ min_derivative=min_derivative,
+ **spline_kwargs
+ )
+ return outputs, logabsdet
+
+
+def searchsorted(bin_locations, inputs, eps=1e-6):
+ bin_locations[..., -1] += eps
+ return torch.sum(
+ inputs[..., None] >= bin_locations,
+ dim=-1
+ ) - 1
+
+
+def unconstrained_rational_quadratic_spline(inputs,
+ unnormalized_widths,
+ unnormalized_heights,
+ unnormalized_derivatives,
+ inverse=False,
+ tails='linear',
+ tail_bound=1.,
+ min_bin_width=DEFAULT_MIN_BIN_WIDTH,
+ min_bin_height=DEFAULT_MIN_BIN_HEIGHT,
+ min_derivative=DEFAULT_MIN_DERIVATIVE):
+ inside_interval_mask = (inputs >= -tail_bound) & (inputs <= tail_bound)
+ outside_interval_mask = ~inside_interval_mask
+
+ outputs = torch.zeros_like(inputs)
+ logabsdet = torch.zeros_like(inputs)
+
+ if tails == 'linear':
+ unnormalized_derivatives = F.pad(unnormalized_derivatives, pad=(1, 1))
+ constant = np.log(np.exp(1 - min_derivative) - 1)
+ unnormalized_derivatives[..., 0] = constant
+ unnormalized_derivatives[..., -1] = constant
+
+ outputs[outside_interval_mask] = inputs[outside_interval_mask]
+ logabsdet[outside_interval_mask] = 0
+ else:
+ raise RuntimeError('{} tails are not implemented.'.format(tails))
+
+ outputs[inside_interval_mask], logabsdet[inside_interval_mask] = rational_quadratic_spline(
+ inputs=inputs[inside_interval_mask],
+ unnormalized_widths=unnormalized_widths[inside_interval_mask, :],
+ unnormalized_heights=unnormalized_heights[inside_interval_mask, :],
+ unnormalized_derivatives=unnormalized_derivatives[inside_interval_mask, :],
+ inverse=inverse,
+ left=-tail_bound, right=tail_bound, bottom=-tail_bound, top=tail_bound,
+ min_bin_width=min_bin_width,
+ min_bin_height=min_bin_height,
+ min_derivative=min_derivative
+ )
+
+ return outputs, logabsdet
+
+def rational_quadratic_spline(inputs,
+ unnormalized_widths,
+ unnormalized_heights,
+ unnormalized_derivatives,
+ inverse=False,
+ left=0., right=1., bottom=0., top=1.,
+ min_bin_width=DEFAULT_MIN_BIN_WIDTH,
+ min_bin_height=DEFAULT_MIN_BIN_HEIGHT,
+ min_derivative=DEFAULT_MIN_DERIVATIVE):
+ if torch.min(inputs) < left or torch.max(inputs) > right:
+ raise ValueError('Input to a transform is not within its domain')
+
+ num_bins = unnormalized_widths.shape[-1]
+
+ if min_bin_width * num_bins > 1.0:
+ raise ValueError('Minimal bin width too large for the number of bins')
+ if min_bin_height * num_bins > 1.0:
+ raise ValueError('Minimal bin height too large for the number of bins')
+
+ widths = F.softmax(unnormalized_widths, dim=-1)
+ widths = min_bin_width + (1 - min_bin_width * num_bins) * widths
+ cumwidths = torch.cumsum(widths, dim=-1)
+ cumwidths = F.pad(cumwidths, pad=(1, 0), mode='constant', value=0.0)
+ cumwidths = (right - left) * cumwidths + left
+ cumwidths[..., 0] = left
+ cumwidths[..., -1] = right
+ widths = cumwidths[..., 1:] - cumwidths[..., :-1]
+
+ derivatives = min_derivative + F.softplus(unnormalized_derivatives)
+
+ heights = F.softmax(unnormalized_heights, dim=-1)
+ heights = min_bin_height + (1 - min_bin_height * num_bins) * heights
+ cumheights = torch.cumsum(heights, dim=-1)
+ cumheights = F.pad(cumheights, pad=(1, 0), mode='constant', value=0.0)
+ cumheights = (top - bottom) * cumheights + bottom
+ cumheights[..., 0] = bottom
+ cumheights[..., -1] = top
+ heights = cumheights[..., 1:] - cumheights[..., :-1]
+
+ if inverse:
+ bin_idx = searchsorted(cumheights, inputs)[..., None]
+ else:
+ bin_idx = searchsorted(cumwidths, inputs)[..., None]
+
+ input_cumwidths = cumwidths.gather(-1, bin_idx)[..., 0]
+ input_bin_widths = widths.gather(-1, bin_idx)[..., 0]
+
+ input_cumheights = cumheights.gather(-1, bin_idx)[..., 0]
+ delta = heights / widths
+ input_delta = delta.gather(-1, bin_idx)[..., 0]
+
+ input_derivatives = derivatives.gather(-1, bin_idx)[..., 0]
+ input_derivatives_plus_one = derivatives[..., 1:].gather(-1, bin_idx)[..., 0]
+
+ input_heights = heights.gather(-1, bin_idx)[..., 0]
+
+ if inverse:
+ a = (((inputs - input_cumheights) * (input_derivatives
+ + input_derivatives_plus_one
+ - 2 * input_delta)
+ + input_heights * (input_delta - input_derivatives)))
+ b = (input_heights * input_derivatives
+ - (inputs - input_cumheights) * (input_derivatives
+ + input_derivatives_plus_one
+ - 2 * input_delta))
+ c = - input_delta * (inputs - input_cumheights)
+
+ discriminant = b.pow(2) - 4 * a * c
+ assert (discriminant >= 0).all()
+
+ root = (2 * c) / (-b - torch.sqrt(discriminant))
+ outputs = root * input_bin_widths + input_cumwidths
+
+ theta_one_minus_theta = root * (1 - root)
+ denominator = input_delta + ((input_derivatives + input_derivatives_plus_one - 2 * input_delta)
+ * theta_one_minus_theta)
+ derivative_numerator = input_delta.pow(2) * (input_derivatives_plus_one * root.pow(2)
+ + 2 * input_delta * theta_one_minus_theta
+ + input_derivatives * (1 - root).pow(2))
+ logabsdet = torch.log(derivative_numerator) - 2 * torch.log(denominator)
+
+ return outputs, -logabsdet
+ else:
+ theta = (inputs - input_cumwidths) / input_bin_widths
+ theta_one_minus_theta = theta * (1 - theta)
+
+ numerator = input_heights * (input_delta * theta.pow(2)
+ + input_derivatives * theta_one_minus_theta)
+ denominator = input_delta + ((input_derivatives + input_derivatives_plus_one - 2 * input_delta)
+ * theta_one_minus_theta)
+ outputs = input_cumheights + numerator / denominator
+
+ derivative_numerator = input_delta.pow(2) * (input_derivatives_plus_one * theta.pow(2)
+ + 2 * input_delta * theta_one_minus_theta
+ + input_derivatives * (1 - theta).pow(2))
+ logabsdet = torch.log(derivative_numerator) - 2 * torch.log(denominator)
+
+ return outputs, logabsdet
diff --git a/demo/MMVC_Trainer/utils.py b/demo/MMVC_Trainer/utils.py
new file mode 100755
index 00000000..b939d786
--- /dev/null
+++ b/demo/MMVC_Trainer/utils.py
@@ -0,0 +1,270 @@
+import os
+import glob
+import sys
+import argparse
+import logging
+import json
+import subprocess
+import numpy as np
+from scipy.io.wavfile import read
+import torch
+
+MATPLOTLIB_FLAG = False
+
+logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
+logger = logging
+
+
+def load_checkpoint(checkpoint_path, model, optimizer=None):
+ assert os.path.isfile(checkpoint_path), f"No such file or directory: {checkpoint_path}"
+ checkpoint_dict = torch.load(checkpoint_path, map_location='cpu')
+ iteration = checkpoint_dict['iteration']
+ learning_rate = checkpoint_dict['learning_rate']
+ if optimizer is not None:
+ optimizer.load_state_dict(checkpoint_dict['optimizer'])
+ saved_state_dict = checkpoint_dict['model']
+ if hasattr(model, 'module'):
+ state_dict = model.module.state_dict()
+ else:
+ state_dict = model.state_dict()
+ new_state_dict= {}
+ for k, v in state_dict.items():
+ try:
+ new_state_dict[k] = saved_state_dict[k]
+ except:
+ logger.info("%s is not in the checkpoint" % k)
+ new_state_dict[k] = v
+ if hasattr(model, 'module'):
+ model.module.load_state_dict(new_state_dict)
+ else:
+ model.load_state_dict(new_state_dict)
+ logger.info("Loaded checkpoint '{}' (iteration {})" .format(
+ checkpoint_path, iteration))
+ return model, optimizer, learning_rate, iteration
+
+
+def save_checkpoint(model, optimizer, learning_rate, iteration, checkpoint_path):
+ logger.info("Saving model and optimizer state at iteration {} to {}".format(
+ iteration, checkpoint_path))
+ if hasattr(model, 'module'):
+ state_dict = model.module.state_dict()
+ else:
+ state_dict = model.state_dict()
+ torch.save({'model': state_dict,
+ 'iteration': iteration,
+ 'optimizer': optimizer.state_dict(),
+ 'learning_rate': learning_rate}, checkpoint_path)
+
+
+def summarize(writer, global_step, scalars={}, histograms={}, images={}, audios={}, audio_sampling_rate=22050):
+ for k, v in scalars.items():
+ writer.add_scalar(k, v, global_step)
+ for k, v in histograms.items():
+ writer.add_histogram(k, v, global_step)
+ for k, v in images.items():
+ writer.add_image(k, v, global_step, dataformats='HWC')
+ for k, v in audios.items():
+ writer.add_audio(k, v, global_step, audio_sampling_rate)
+
+
+def latest_checkpoint_path(dir_path, regex="G_*.pth"):
+ f_list = glob.glob(os.path.join(dir_path, regex))
+ f_list.sort(key=lambda f: int("".join(filter(str.isdigit, f))))
+ x = f_list[-1]
+ print(x)
+ return x
+
+
+def plot_spectrogram_to_numpy(spectrogram):
+ global MATPLOTLIB_FLAG
+ if not MATPLOTLIB_FLAG:
+ import matplotlib
+ matplotlib.use("Agg")
+ MATPLOTLIB_FLAG = True
+ mpl_logger = logging.getLogger('matplotlib')
+ mpl_logger.setLevel(logging.WARNING)
+ import matplotlib.pylab as plt
+ import numpy as np
+
+ fig, ax = plt.subplots(figsize=(10,2))
+ im = ax.imshow(spectrogram, aspect="auto", origin="lower",
+ interpolation='none')
+ plt.colorbar(im, ax=ax)
+ plt.xlabel("Frames")
+ plt.ylabel("Channels")
+ plt.tight_layout()
+
+ fig.canvas.draw()
+ data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='')
+ data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,))
+ plt.close()
+ return data
+
+
+def plot_alignment_to_numpy(alignment, info=None):
+ global MATPLOTLIB_FLAG
+ if not MATPLOTLIB_FLAG:
+ import matplotlib
+ matplotlib.use("Agg")
+ MATPLOTLIB_FLAG = True
+ mpl_logger = logging.getLogger('matplotlib')
+ mpl_logger.setLevel(logging.WARNING)
+ import matplotlib.pylab as plt
+ import numpy as np
+
+ fig, ax = plt.subplots(figsize=(6, 4))
+ im = ax.imshow(alignment.transpose(), aspect='auto', origin='lower',
+ interpolation='none')
+ fig.colorbar(im, ax=ax)
+ xlabel = 'Decoder timestep'
+ if info is not None:
+ xlabel += '\n\n' + info
+ plt.xlabel(xlabel)
+ plt.ylabel('Encoder timestep')
+ plt.tight_layout()
+
+ fig.canvas.draw()
+ data = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='')
+ data = data.reshape(fig.canvas.get_width_height()[::-1] + (3,))
+ plt.close()
+ return data
+
+
+def load_wav_to_torch(full_path):
+ sampling_rate, data = read(full_path)
+ return torch.FloatTensor(data.astype(np.float32)), sampling_rate
+
+
+def load_filepaths_and_text(filename, split="|"):
+ with open(filename, encoding='utf-8') as f:
+ filepaths_and_text = [line.strip().split(split) for line in f]
+ return filepaths_and_text
+
+
+def get_hparams(init=True):
+ parser = argparse.ArgumentParser()
+ parser.add_argument('-c', '--config', type=str, default="./configs/base.json",
+ help='JSON file for configuration')
+ parser.add_argument('-m', '--model', type=str, required=True,
+ help='Model name')
+ parser.add_argument('-fg', '--fine_tuning_g', type=str, default=None,
+ help='If fine tuning, please specify model(G)')
+ parser.add_argument('-fd', '--fine_tuning_d', type=str, default=None,
+ help='If fine tuning, please specify model(D)')
+
+ args = parser.parse_args()
+ model_dir = os.path.join("./logs", args.model)
+
+ if not os.path.exists(model_dir):
+ os.makedirs(model_dir)
+
+ config_path = args.config
+ config_save_path = os.path.join(model_dir, "config.json")
+ if init:
+ with open(config_path, "r") as f:
+ data = f.read()
+ with open(config_save_path, "w") as f:
+ f.write(data)
+ else:
+ with open(config_save_path, "r") as f:
+ data = f.read()
+ config = json.loads(data)
+
+ #Added about fine tuning
+ if args.fine_tuning_g != None and args.fine_tuning_d != None:
+ config['fine_flag'] = True
+ config['fine_model_g'] = args.fine_tuning_g
+ config['fine_model_d'] = args.fine_tuning_d
+ else:
+ config['fine_flag'] = False
+
+ hparams = HParams(**config)
+ hparams.model_dir = model_dir
+ return hparams
+
+
+def get_hparams_from_dir(model_dir):
+ config_save_path = os.path.join(model_dir, "config.json")
+ with open(config_save_path, "r") as f:
+ data = f.read()
+ config = json.loads(data)
+
+ hparams =HParams(**config)
+ hparams.model_dir = model_dir
+ return hparams
+
+
+def get_hparams_from_file(config_path):
+ with open(config_path, "r") as f:
+ data = f.read()
+ config = json.loads(data)
+
+ hparams =HParams(**config)
+ return hparams
+
+
+def check_git_hash(model_dir):
+ source_dir = os.path.dirname(os.path.realpath(__file__))
+ if not os.path.exists(os.path.join(source_dir, ".git")):
+ logger.warn("{} is not a git repository, therefore hash value comparison will be ignored.".format(
+ source_dir
+ ))
+ return
+
+ cur_hash = subprocess.getoutput("git rev-parse HEAD")
+
+ path = os.path.join(model_dir, "githash")
+ if os.path.exists(path):
+ saved_hash = open(path).read()
+ if saved_hash != cur_hash:
+ logger.warn("git hash values are different. {}(saved) != {}(current)".format(
+ saved_hash[:8], cur_hash[:8]))
+ else:
+ open(path, "w").write(cur_hash)
+
+
+def get_logger(model_dir, filename="train.log"):
+ global logger
+ logger = logging.getLogger(os.path.basename(model_dir))
+ logger.setLevel(logging.DEBUG)
+
+ formatter = logging.Formatter("%(asctime)s\t%(name)s\t%(levelname)s\t%(message)s")
+ if not os.path.exists(model_dir):
+ os.makedirs(model_dir)
+ h = logging.FileHandler(os.path.join(model_dir, filename))
+ h.setLevel(logging.DEBUG)
+ h.setFormatter(formatter)
+ logger.addHandler(h)
+ return logger
+
+
+class HParams():
+ def __init__(self, **kwargs):
+ for k, v in kwargs.items():
+ if type(v) == dict:
+ v = HParams(**v)
+ self[k] = v
+
+ def keys(self):
+ return self.__dict__.keys()
+
+ def items(self):
+ return self.__dict__.items()
+
+ def values(self):
+ return self.__dict__.values()
+
+ def __len__(self):
+ return len(self.__dict__)
+
+ def __getitem__(self, key):
+ return getattr(self, key)
+
+ def __setitem__(self, key, value):
+ return setattr(self, key, value)
+
+ def __contains__(self, key):
+ return key in self.__dict__
+
+ def __repr__(self):
+ return self.__dict__.__repr__()
diff --git a/demo/MMVC_Trainer/version.txt b/demo/MMVC_Trainer/version.txt
new file mode 100755
index 00000000..a1f61a45
--- /dev/null
+++ b/demo/MMVC_Trainer/version.txt
@@ -0,0 +1 @@
+v1.3.1.3