tag:blogger.com,1999:blog-89954551672056560822024-03-14T04:47:57.263-07:00MareArts Computer Vision Study.Computer Vision & Machine Learning Research LaboratoryUnknownnoreply@blogger.comBlogger909125tag:blogger.com,1999:blog-8995455167205656082.post-21467943954857616262024-03-13T08:24:00.000-07:002024-03-13T08:24:30.927-07:00Run multi comfyUI<p> make different port number</p><p><br /></p><p>Window</p><p>><span style="background-color: white; color: #131313; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", sans-serif; font-size: 14px;">.\python_embeded\python.exe -s ComfyUI\</span><a class="relative pointer-events-auto" href="https://main.py/" rel="noopener nofollow ugc" style="font-family: -apple-system, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", sans-serif; font-size: 14px; margin-bottom: 0px; margin-top: 0px; pointer-events: auto; position: relative; text-decoration-line: none;" target="_blank">main.py</a><span style="background-color: white; color: #131313; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", sans-serif; font-size: 14px;"> </span><span style="background-color: white; color: #131313; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", sans-serif; font-size: 14px;">--port 8189 --windows-standalone-build</span></p><div><br /></div><div>Linux or Mac</div><div>> python ./main.py <span style="background-color: white; color: #131313; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", sans-serif; font-size: 14px;">--port 8189 --windows-standalone-build</span></div><div><span style="background-color: white; color: #131313; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", sans-serif; font-size: 14px;"><br /></span></div><div><span style="background-color: white; color: #131313; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", sans-serif; font-size: 14px;">Thank you.</span></div><div><span style="background-color: white; color: #131313; font-family: -apple-system, "system-ui", "Segoe UI", Roboto, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", sans-serif; font-size: 14px;">🙇🏻♂️</span></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8995455167205656082.post-29342534197432599262024-03-12T13:32:00.000-07:002024-03-12T13:32:32.494-07:00Search process by port number on ubuntu and kill it.<p> </p><p>>sudo lsof -i :8188</p><p>python 231134 mare 45u IPv4 2074469 0t0 TCP localhost:8188->localhost:42132 (CLOSE_WAIT)</p><p>python 231134 mare 46u IPv4 2105633 0t0 TCP localhost:8188->localhost:57870 (CLOSE_WAIT)</p><p>python 231134 mare 47u IPv4 2074473 0t0 TCP localhost:8188->localhost:42160 (CLOSE_WAIT)</p><p>python 231134 mare 48u IPv4 2103693 0t0 TCP localhost:8188->localhost:57886 (CLOSE_WAIT)</p><p><br /></p><p>> kill -9 231134</p><p><br /></p><p>🙇🏻♂️</p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8995455167205656082.post-714074690539646202024-03-07T04:43:00.000-08:002024-03-07T04:43:56.874-08:00Retrieve my ssh keys and generate <p> </p><p><strong style="border: 0px solid rgb(227, 227, 227); box-sizing: border-box; caret-color: rgb(13, 13, 13); color: #0d0d0d; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; white-space: pre-wrap;">Navigate to your SSH directory</strong></p><p>cd ~/.ssh</p><div><p style="border: 0px solid rgb(227, 227, 227); box-sizing: border-box; margin: 0px;"><strong style="--tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-ring-color: rgba(69,89,164,0.5); --tw-ring-offset-color: #fff; --tw-ring-offset-shadow: 0 0 transparent; --tw-ring-offset-width: 0px; --tw-ring-shadow: 0 0 transparent; --tw-rotate: 0; --tw-scale-x: 1; --tw-scale-y: 1; --tw-scroll-snap-strictness: proximity; --tw-shadow-colored: 0 0 transparent; --tw-shadow: 0 0 transparent; --tw-skew-x: 0; --tw-skew-y: 0; --tw-translate-x: 0; --tw-translate-y: 0; border: 0px solid rgb(227, 227, 227); box-sizing: border-box;">List the RSA public key files</strong>:</p></div><div><div>ls -l *.pub</div></div><div><br /></div><div><strong style="border: 0px solid rgb(227, 227, 227); box-sizing: border-box; caret-color: rgb(13, 13, 13); color: #0d0d0d; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; white-space: pre-wrap;">View the Contents of Your RSA Public Key</strong><br class="Apple-interchange-newline" /></div>cat id_rsa.pub<div><strong style="border: 0px solid rgb(227, 227, 227); box-sizing: border-box; caret-color: rgb(13, 13, 13); color: #0d0d0d; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; white-space: pre-wrap;"><br /></strong></div><div><span style="background-color: white; caret-color: rgb(13, 13, 13); color: #0d0d0d; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, "Segoe UI", Roboto, Ubuntu, Cantarell, "Noto Sans", sans-serif, "Helvetica Neue", Arial, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; font-size: 16px; white-space: pre-wrap;"><b>To generate a new SSH RSA key pair, you can use the following command</b></span></div><div>ssh-keygen -t rsa -b 4096
</div><div><br /></div><div><br /></div><div>Thank you. marearts.com</div><div>🙇🏻♂️</div><div><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8995455167205656082.post-17845412807076873432024-03-07T01:02:00.000-08:002024-03-07T01:02:46.209-08:00Create New swap file<p> </p><p><br /></p><p><b>Create a New Swap File</b></p><p>sudo fallocate -l 2G /swapfile2</p><p>sudo chmod 600 /swapfile2</p><p>sudo mkswap /swapfile2</p><p>sudo swapon /swapfile2</p><p><br /></p><p><b>Make the swap file permanent</b></p><div><div>echo '/swapfile2 none swap sw 0 0' | sudo tee -a /etc/fstab</div></div><div><br /></div><p><b>Check Current swap status</b></p><p>sudo swapon --show</p><div><br /></div><div>Thank you </div><div>🙇🏻♂️</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8995455167205656082.post-63507747789504525512024-03-06T01:36:00.000-08:002024-03-06T01:36:53.561-08:00How to stop docker under Linux<p> I can stop docker after put two commend. </p><p><b>> sudo systemctl stop docker</b></p><p>[sudo] password for mare: </p><p>Warning: Stopping docker.service, but it can still be activated by:</p><p> docker.socket</p><p><b>> sudo systemctl stop docker.socket</b></p><p><br /></p><p>I hope it's helpful to you.</p><p>Thank you.</p><p>🙇🏻♂️</p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8995455167205656082.post-3790774691574351322024-02-26T06:05:00.000-08:002024-02-26T11:44:18.707-08:00Dominant frequency extraction. <p> </p><p><br /><br />Let's say we have channel x Length signal data ex)EEG (electroencephalogram) or time series data.</p><p>We might wonder what dominant Hz is there.</p><p>The code analysis this question and return 5 top dominant frequency. <br /><br />.</p><div style="background-color: #1e202b; color: #dbd9d9; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div><span style="color: #1bae1b; font-weight: bold;">import</span> numpy <span style="color: #1bae1b; font-weight: bold;">as</span> np</div><div><span style="color: #1bae1b; font-weight: bold;">from</span> collections <span style="color: #1bae1b; font-weight: bold;">import</span> Counter</div><div style="line-height: 18px;"><div><span style="color: #1bae1b; font-weight: bold;">from</span> scipy<span style="color: #dfd5d5;">.</span>signal <span style="color: #1bae1b; font-weight: bold;">import</span> welch</div><div><span style="color: #1bae1b; font-weight: bold;"></span></div></div><div style="line-height: 18px;"><div><span style="color: #1bae1b; font-weight: bold;"><br /></span></div><div><span style="color: #1bae1b; font-weight: bold;">def</span> <span style="color: #41adec;">identify_dominant_frequencies</span><span style="color: #dfd5d5;">(</span><span style="color: #72b6fb;">signal</span><span style="color: #dfd5d5;">,</span> <span style="color: #72b6fb;">fs</span><span style="color: #dfd5d5;">,</span> <span style="color: #72b6fb;">top_n</span><span style="color: #ad3efe; font-weight: bold;">=</span><span style="color: #ab6526;">5</span><span style="color: #dfd5d5;">):</span></div><div> freqs<span style="color: #dfd5d5;">,</span> psd <span style="color: #ad3efe; font-weight: bold;">=</span> welch<span style="color: #dfd5d5;">(</span>signal<span style="color: #dfd5d5;">,</span> fs<span style="color: #dfd5d5;">)</span></div><div> peak_indices <span style="color: #ad3efe; font-weight: bold;">=</span> np<span style="color: #dfd5d5;">.</span>argsort<span style="color: #dfd5d5;">(</span>psd<span style="color: #dfd5d5;">)[</span><span style="color: #ad3efe; font-weight: bold;">-</span>top_n<span style="color: #dfd5d5;">:]</span></div><div> dominant_freqs <span style="color: #ad3efe; font-weight: bold;">=</span> freqs<span style="color: #dfd5d5;">[</span>peak_indices<span style="color: #dfd5d5;">]</span></div><div> <span style="color: #1bae1b; font-weight: bold;">return</span> dominant_freqs</div><div><br /></div><div>..</div><div><div style="line-height: 18px;"><div>dominant_freqs <span style="color: #ad3efe; font-weight: bold;">=</span> identify_dominant_frequencies<span style="color: #dfd5d5;">(</span>signal<span style="color: #dfd5d5;">,</span> fs<span style="color: #dfd5d5;">,</span> top_n<span style="color: #dfd5d5;">)</span></div><div>dominant_freqs_summary<span style="color: #dfd5d5;">[</span>channel<span style="color: #dfd5d5;">].</span>extend<span style="color: #dfd5d5;">(</span>dominant_freqs<span style="color: #dfd5d5;">)</span> <span style="color: #6a8b93; font-style: italic;"># Append the frequencies</span></div></div></div><div>..</div><div><div style="line-height: 18px;"><div>median_dominant_freqs <span style="color: #ad3efe; font-weight: bold;">=</span> <span style="color: #dfd5d5;">{</span>channel<span style="color: #dfd5d5;">:</span> np<span style="color: #dfd5d5;">.</span>median<span style="color: #dfd5d5;">(</span>freqs<span style="color: #dfd5d5;">)</span> <span style="color: #1bae1b; font-weight: bold;">if</span> freqs <span style="color: #1bae1b; font-weight: bold;">else</span> <span style="color: #0aa361; font-weight: bold;">None</span> <span style="color: #1bae1b; font-weight: bold;">for</span> channel<span style="color: #dfd5d5;">,</span> freqs <span style="color: #1bae1b; font-weight: bold;">in</span> dominant_freqs_summary<span style="color: #dfd5d5;">.</span>items<span style="color: #dfd5d5;">()}</span></div></div></div><div style="line-height: 18px;">..</div><div><br /></div></div><div><span style="color: #1bae1b; font-weight: bold;">def</span> <span style="color: #41adec;">get_top_n_frequencies</span><span style="color: #dfd5d5;">(</span><span style="color: #72b6fb;">freq_list</span><span style="color: #dfd5d5;">,</span> <span style="color: #72b6fb;">top_n</span><span style="color: #ad3efe; font-weight: bold;">=</span><span style="color: #ab6526;">5</span><span style="color: #dfd5d5;">,</span> <span style="color: #72b6fb;">bin_width</span><span style="color: #ad3efe; font-weight: bold;">=</span><span style="color: #ab6526;">1.0</span><span style="color: #dfd5d5;">):</span></div><div> <span style="color: #6a8b93; font-style: italic;"># Bin frequencies into discrete intervals</span></div><div> binned_freqs <span style="color: #ad3efe; font-weight: bold;">=</span> np<span style="color: #dfd5d5;">.</span>round<span style="color: #dfd5d5;">(</span>np<span style="color: #dfd5d5;">.</span>array<span style="color: #dfd5d5;">(</span>freq_list<span style="color: #dfd5d5;">)</span> <span style="color: #ad3efe; font-weight: bold;">/</span> bin_width<span style="color: #dfd5d5;">)</span> <span style="color: #ad3efe; font-weight: bold;">*</span> bin_width</div><div> </div><div> <span style="color: #6a8b93; font-style: italic;"># Count the frequency of each binned frequency</span></div><div> freq_counter <span style="color: #ad3efe; font-weight: bold;">=</span> Counter<span style="color: #dfd5d5;">(</span>binned_freqs<span style="color: #dfd5d5;">)</span></div><div> </div><div> <span style="color: #6a8b93; font-style: italic;"># Find the top N most common binned frequencies</span></div><div> top_freqs <span style="color: #ad3efe; font-weight: bold;">=</span> freq_counter<span style="color: #dfd5d5;">.</span>most_common<span style="color: #dfd5d5;">(</span>top_n<span style="color: #dfd5d5;">)</span></div><div> </div><div> <span style="color: #6a8b93; font-style: italic;"># Extract just the frequencies from the top N tuples (freq, count)</span></div><div> top_freqs <span style="color: #ad3efe; font-weight: bold;">=</span> <span style="color: #dfd5d5;">[</span>freq <span style="color: #1bae1b; font-weight: bold;">for</span> freq<span style="color: #dfd5d5;">,</span> count <span style="color: #1bae1b; font-weight: bold;">in</span> top_freqs<span style="color: #dfd5d5;">]</span></div><div> </div><div> <span style="color: #1bae1b; font-weight: bold;">return</span> top_freqs</div><br /><div><span style="color: #6a8b93; font-style: italic;"># Initialize a dictionary to store the top 5 frequencies for each channel</span></div><div>top_5_freqs_all_channels <span style="color: #ad3efe; font-weight: bold;">=</span> <span style="color: #dfd5d5;">{}</span></div><div>bin_width <span style="color: #ad3efe; font-weight: bold;">=</span> <span style="color: #ab6526;">1.0</span></div><br /><div><span style="color: #6a8b93; font-style: italic;"># Calculate the top 5 frequencies for each channel</span></div><div><span style="color: #1bae1b; font-weight: bold;">for</span> channel<span style="color: #dfd5d5;">,</span> freqs <span style="color: #1bae1b; font-weight: bold;">in</span> dominant_freqs_summary<span style="color: #dfd5d5;">.</span>items<span style="color: #dfd5d5;">():</span></div><div> top_5_freqs <span style="color: #ad3efe; font-weight: bold;">=</span> get_top_n_frequencies<span style="color: #dfd5d5;">(</span>freqs<span style="color: #dfd5d5;">,</span> <span style="color: #72b6fb;">top_n</span><span style="color: #ad3efe; font-weight: bold;">=</span><span style="color: #ab6526;">5</span><span style="color: #dfd5d5;">,</span> <span style="color: #72b6fb;">bin_width</span><span style="color: #ad3efe; font-weight: bold;">=</span>bin_width<span style="color: #dfd5d5;">)</span></div><div> top_5_freqs_all_channels<span style="color: #dfd5d5;">[</span>channel<span style="color: #dfd5d5;">]</span> <span style="color: #ad3efe; font-weight: bold;">=</span> top_5_freqs</div><div> <span style="color: #41adec;">print</span><span style="color: #dfd5d5;">(</span><span style="color: #1bae1b; font-weight: bold;">f</span><span style="color: #c44445;">"</span><span style="color: #ab6526;">{</span>channel<span style="color: #ab6526;">}</span><span style="color: #c44445;">: Top 5 Frequencies = </span><span style="color: #ab6526;">{</span>top_5_freqs<span style="color: #ab6526;">}</span><span style="color: #c44445;">"</span><span style="color: #dfd5d5;">)</span></div></div><p>..</p><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8995455167205656082.post-9172396836259102292024-02-18T07:57:00.000-08:002024-02-18T07:57:34.005-08:00GroupShuffleSplit, sklearn<p> </p><p><span style="color: #0d0d0d; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, Helvetica Neue, Arial, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;"><span style="background-color: white;">There are same eeg_id in data, but we can split it based on same id to train, val using GroupShuffleSplit.</span></span></p><p><span style="color: #0d0d0d; font-family: Söhne, ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif, Helvetica Neue, Arial, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;"><span style="background-color: white;">Refer to code:</span></span></p><p>.</p><div style="background-color: #1e202b; color: #dbd9d9; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><br /><br /><div><span style="color: #1bae1b; font-weight: bold;">import</span> pandas <span style="color: #1bae1b; font-weight: bold;">as</span> pd</div><div><span style="color: #1bae1b; font-weight: bold;">from</span> sklearn<span style="color: #dfd5d5;">.</span>model_selection <span style="color: #1bae1b; font-weight: bold;">import</span> GroupShuffleSplit</div><br /><div><span style="color: #6a8b93; font-style: italic;"># Load your dataset</span></div><div>train <span style="color: #ad3efe; font-weight: bold;">=</span> pd<span style="color: #dfd5d5;">.</span>read_csv<span style="color: #dfd5d5;">(</span><span style="color: #c44445;">'./train.csv'</span><span style="color: #dfd5d5;">)</span></div><br /><div><span style="color: #6a8b93; font-style: italic;"># Display the shape of the dataset</span></div><div><span style="color: #41adec;">print</span><span style="color: #dfd5d5;">(</span><span style="color: #c44445;">"Dataset shape:"</span><span style="color: #dfd5d5;">,</span> train<span style="color: #dfd5d5;">.</span>shape<span style="color: #dfd5d5;">)</span></div><br /><div><span style="color: #6a8b93; font-style: italic;"># Count unique eeg_id values</span></div><div>unique_eeg_id_count <span style="color: #ad3efe; font-weight: bold;">=</span> train<span style="color: #dfd5d5;">[</span><span style="color: #c44445;">'eeg_id'</span><span style="color: #dfd5d5;">].</span>nunique<span style="color: #dfd5d5;">()</span></div><div><span style="color: #41adec;">print</span><span style="color: #dfd5d5;">(</span><span style="color: #c44445;">"Unique eeg_id count:"</span><span style="color: #dfd5d5;">,</span> unique_eeg_id_count<span style="color: #dfd5d5;">)</span></div><br /><div><span style="color: #6a8b93; font-style: italic;"># Initialize the GroupShuffleSplit</span></div><div>gss <span style="color: #ad3efe; font-weight: bold;">=</span> GroupShuffleSplit<span style="color: #dfd5d5;">(</span><span style="color: #72b6fb;">n_splits</span><span style="color: #ad3efe; font-weight: bold;">=</span><span style="color: #ab6526;">1</span><span style="color: #dfd5d5;">,</span> <span style="color: #72b6fb;">test_size</span><span style="color: #ad3efe; font-weight: bold;">=</span><span style="color: #ab6526;">0.2</span><span style="color: #dfd5d5;">,</span> <span style="color: #72b6fb;">random_state</span><span style="color: #ad3efe; font-weight: bold;">=</span><span style="color: #ab6526;">42</span><span style="color: #dfd5d5;">)</span></div><br /><div><span style="color: #6a8b93; font-style: italic;"># Split the dataset based on the 'eeg_id' to ensure group cohesion</span></div><div><span style="color: #1bae1b; font-weight: bold;">for</span> train_idx<span style="color: #dfd5d5;">,</span> val_idx <span style="color: #1bae1b; font-weight: bold;">in</span> gss<span style="color: #dfd5d5;">.</span>split<span style="color: #dfd5d5;">(</span>train<span style="color: #dfd5d5;">,</span> <span style="color: #72b6fb;">groups</span><span style="color: #ad3efe; font-weight: bold;">=</span>train<span style="color: #dfd5d5;">[</span><span style="color: #c44445;">'eeg_id'</span><span style="color: #dfd5d5;">]):</span></div><div> train_set <span style="color: #ad3efe; font-weight: bold;">=</span> train<span style="color: #dfd5d5;">.</span>iloc<span style="color: #dfd5d5;">[</span>train_idx<span style="color: #dfd5d5;">]</span></div><div> val_set <span style="color: #ad3efe; font-weight: bold;">=</span> train<span style="color: #dfd5d5;">.</span>iloc<span style="color: #dfd5d5;">[</span>val_idx<span style="color: #dfd5d5;">]</span></div><br /><div><span style="color: #6a8b93; font-style: italic;"># Now, train_set and val_set are split according to unique eeg_ids,</span></div><div><span style="color: #6a8b93; font-style: italic;"># ensuring that all records of a single eeg_id are in the same subset</span></div><div><span style="color: #41adec;">print</span><span style="color: #dfd5d5;">(</span><span style="color: #c44445;">"Training set shape:"</span><span style="color: #dfd5d5;">,</span> train_set<span style="color: #dfd5d5;">.</span>shape<span style="color: #dfd5d5;">)</span></div><div><span style="color: #41adec;">print</span><span style="color: #dfd5d5;">(</span><span style="color: #c44445;">"Validation set shape:"</span><span style="color: #dfd5d5;">,</span> val_set<span style="color: #dfd5d5;">.</span>shape<span style="color: #dfd5d5;">)</span></div><br /></div><p>..</p><p>Thank you.</p><p>🙇🏻♂️</p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8995455167205656082.post-46858387626815518922024-02-15T08:33:00.000-08:002024-02-15T08:34:55.902-08:00interpolation 1d data list, ex) [1, 2, 3, 4] -> [1. , 1.5, 2. , 2.5, 3. , 3.5, 4. ]<p> </p><p>expand and interpolation n by m data to n x (m+l) </p><p>.</p><div style="background-color: #1e202b; color: #dbd9d9; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div><span> </span>data <span style="color: #ad3efe; font-weight: bold;">=</span> np<span style="color: #dfd5d5;">.</span>array<span style="color: #dfd5d5;">(</span> <span style="color: #dfd5d5;">[[</span><span style="color: #ab6526;">1</span><span style="color: #dfd5d5;">,</span> <span style="color: #ab6526;">2</span><span style="color: #dfd5d5;">,</span> <span style="color: #ab6526;">3</span><span style="color: #dfd5d5;">,</span> <span style="color: #ab6526;">4</span><span style="color: #dfd5d5;">],</span> <span style="color: #dfd5d5;">[</span><span style="color: #ab6526;">4</span><span style="color: #dfd5d5;">,</span> <span style="color: #ab6526;">3</span><span style="color: #dfd5d5;">,</span> <span style="color: #ab6526;">2</span><span style="color: #dfd5d5;">,</span> <span style="color: #ab6526;">1</span><span style="color: #dfd5d5;">]]</span> <span style="color: #dfd5d5;">)</span></div><div> data_len <span style="color: #ad3efe; font-weight: bold;">=</span> <span style="color: #ab6526;">7</span></div><div> x <span style="color: #ad3efe; font-weight: bold;">=</span> np<span style="color: #dfd5d5;">.</span>linspace<span style="color: #dfd5d5;">(</span><span style="color: #ab6526;">0</span><span style="color: #dfd5d5;">,</span> <span style="color: #ab6526;">1</span><span style="color: #dfd5d5;">,</span> data<span style="color: #dfd5d5;">.</span>shape<span style="color: #dfd5d5;">[</span><span style="color: #ad3efe; font-weight: bold;">-</span><span style="color: #ab6526;">1</span><span style="color: #dfd5d5;">])</span></div><div> x2 <span style="color: #ad3efe; font-weight: bold;">=</span> np<span style="color: #dfd5d5;">.</span>linspace<span style="color: #dfd5d5;">(</span><span style="color: #ab6526;">0</span><span style="color: #dfd5d5;">,</span> <span style="color: #ab6526;">1</span><span style="color: #dfd5d5;">,</span> data_len<span style="color: #dfd5d5;">)</span></div><div> f <span style="color: #ad3efe; font-weight: bold;">=</span> interp1d<span style="color: #dfd5d5;">(</span>x<span style="color: #dfd5d5;">,</span> data<span style="color: #dfd5d5;">)</span></div><div> data <span style="color: #ad3efe; font-weight: bold;">=</span> f<span style="color: #dfd5d5;">(</span>x2<span style="color: #dfd5d5;">)</span></div></div><p>..</p><p>import below lib.</p><p>Thank you!!</p><div style="background-color: #1e202b; color: #dbd9d9; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div><span style="color: #1bae1b; font-weight: bold;">from</span> scipy<span style="color: #dfd5d5;">.</span>interpolate <span style="color: #1bae1b; font-weight: bold;">import</span> interp1d</div><div><span style="color: #1bae1b; font-weight: bold;"></span></div></div>
.<div>this is output:<br /><br /><div><div>array([[1. , 1.5, 2. , 2.5, 3. , 3.5, 4. ],</div><div> [4. , 3.5, 3. , 2.5, 2. , 1.5, 1. ]])</div></div></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8995455167205656082.post-3570651880815985972024-02-10T02:56:00.000-08:002024-02-10T02:56:22.536-08:00pytorch lightning, save pth with ckpt for top k <p> </p><p><br /></p><p>it's custom checkpoint function</p><p>.</p><div style="background-color: #1e202b; color: #dbd9d9; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div><span style="color: #1bae1b; font-weight: bold;">class</span> <span style="color: #6868f3;">CustomModelCheckpoint</span><span style="color: #dfd5d5;">(</span><span style="color: #6868f3;">ModelCheckpoint</span><span style="color: #dfd5d5;">):</span></div><div> <span style="color: #1bae1b; font-weight: bold;">def</span> <span style="color: #41adec;">__init__</span><span style="color: #dfd5d5;">(</span><span style="color: #72b6fb;">self</span><span style="color: #dfd5d5;">,</span> <span style="color: #72b6fb;">save_top_k_pth</span><span style="color: #ad3efe; font-weight: bold;">=</span><span style="color: #ab6526;">0</span><span style="color: #dfd5d5;">,</span> <span style="color: #ad3efe; font-weight: bold;">*</span><span style="color: #72b6fb;">args</span><span style="color: #dfd5d5;">,</span> <span style="color: #ad3efe; font-weight: bold;">**</span><span style="color: #72b6fb;">kwargs</span><span style="color: #dfd5d5;">):</span></div><div> <span style="color: #008100;">super</span><span style="color: #dfd5d5;">(</span>CustomModelCheckpoint<span style="color: #dfd5d5;">,</span> <span style="color: #ab6526;">self</span><span style="color: #dfd5d5;">).</span><span style="color: #41adec;">__init__</span><span style="color: #dfd5d5;">(</span><span style="color: #ad3efe; font-weight: bold;">*</span>args<span style="color: #dfd5d5;">,</span> <span style="color: #ad3efe; font-weight: bold;">**</span>kwargs<span style="color: #dfd5d5;">)</span></div><div> <span style="color: #ab6526;">self</span><span style="color: #dfd5d5;">.</span>save_top_k_pth <span style="color: #ad3efe; font-weight: bold;">=</span> save_top_k_pth</div><div> <span style="color: #6a8b93; font-style: italic;"># Keep track of saved .pth files to manage the top K</span></div><div> <span style="color: #ab6526;">self</span><span style="color: #dfd5d5;">.</span>saved_pth_files <span style="color: #ad3efe; font-weight: bold;">=</span> <span style="color: #dfd5d5;">[]</span></div><br /><div> <span style="color: #1bae1b; font-weight: bold;">def</span> <span style="color: #41adec;">on_save_checkpoint</span><span style="color: #dfd5d5;">(</span><span style="color: #72b6fb;">self</span><span style="color: #dfd5d5;">,</span> <span style="color: #72b6fb;">trainer</span><span style="color: #dfd5d5;">,</span> <span style="color: #72b6fb;">pl_module</span><span style="color: #dfd5d5;">,</span> <span style="color: #72b6fb;">checkpoint</span><span style="color: #dfd5d5;">):</span></div><div> <span style="color: #6a8b93; font-style: italic;"># Construct checkpoint path manually (simplified example)</span></div><div> epoch <span style="color: #ad3efe; font-weight: bold;">=</span> trainer<span style="color: #dfd5d5;">.</span>current_epoch</div><div> metric_score <span style="color: #ad3efe; font-weight: bold;">=</span> <span style="color: #c44445;">"</span><span style="color: #ab6526;">{</span><span style="color: #1bae1b; font-weight: bold;">:.2f</span><span style="color: #ab6526;">}</span><span style="color: #c44445;">"</span><span style="color: #dfd5d5;">.</span>format<span style="color: #dfd5d5;">(</span>trainer<span style="color: #dfd5d5;">.</span>callback_metrics<span style="color: #dfd5d5;">[</span><span style="color: #c44445;">'val_loss'</span><span style="color: #dfd5d5;">].</span>item<span style="color: #dfd5d5;">())</span></div><div> filename <span style="color: #ad3efe; font-weight: bold;">=</span> <span style="color: #1bae1b; font-weight: bold;">f</span><span style="color: #c44445;">"model-epoch=</span><span style="color: #ab6526;">{</span>epoch<span style="color: #ab6526;">}</span><span style="color: #c44445;">-val_loss=</span><span style="color: #ab6526;">{</span>metric_score<span style="color: #ab6526;">}</span><span style="color: #c44445;">.pth"</span></div><div> dirpath <span style="color: #ad3efe; font-weight: bold;">=</span> <span style="color: #ab6526;">self</span><span style="color: #dfd5d5;">.</span>dirpath <span style="color: #1bae1b; font-weight: bold;">if</span> <span style="color: #ab6526;">self</span><span style="color: #dfd5d5;">.</span>dirpath <span style="color: #1bae1b; font-weight: bold;">else</span> trainer<span style="color: #dfd5d5;">.</span>default_root_dir</div><div> pth_path <span style="color: #ad3efe; font-weight: bold;">=</span> os<span style="color: #dfd5d5;">.</span>path<span style="color: #dfd5d5;">.</span>join<span style="color: #dfd5d5;">(</span>dirpath<span style="color: #dfd5d5;">,</span> filename<span style="color: #dfd5d5;">)</span></div><br /><div> torch<span style="color: #dfd5d5;">.</span>save<span style="color: #dfd5d5;">(</span>pl_module<span style="color: #dfd5d5;">.</span>state_dict<span style="color: #dfd5d5;">(),</span> pth_path<span style="color: #dfd5d5;">)</span></div><div> <span style="color: #ab6526;">self</span><span style="color: #dfd5d5;">.</span>saved_pth_files<span style="color: #dfd5d5;">.</span>append<span style="color: #dfd5d5;">(</span>pth_path<span style="color: #dfd5d5;">)</span></div><div> </div><div> <span style="color: #6a8b93; font-style: italic;"># Manage the top K saved .pth files</span></div><div> <span style="color: #1bae1b; font-weight: bold;">while</span> <span style="color: #41adec;">len</span><span style="color: #dfd5d5;">(</span><span style="color: #ab6526;">self</span><span style="color: #dfd5d5;">.</span>saved_pth_files<span style="color: #dfd5d5;">)</span> <span style="color: #ad3efe; font-weight: bold;">></span> <span style="color: #ab6526;">self</span><span style="color: #dfd5d5;">.</span>save_top_k_pth<span style="color: #dfd5d5;">:</span></div><div> oldest_pth <span style="color: #ad3efe; font-weight: bold;">=</span> <span style="color: #ab6526;">self</span><span style="color: #dfd5d5;">.</span>saved_pth_files<span style="color: #dfd5d5;">.</span>pop<span style="color: #dfd5d5;">(</span><span style="color: #ab6526;">0</span><span style="color: #dfd5d5;">)</span></div><div> <span style="color: #1bae1b; font-weight: bold;">if</span> os<span style="color: #dfd5d5;">.</span>path<span style="color: #dfd5d5;">.</span>exists<span style="color: #dfd5d5;">(</span>oldest_pth<span style="color: #dfd5d5;">):</span></div><div> os<span style="color: #dfd5d5;">.</span>remove<span style="color: #dfd5d5;">(</span>oldest_pth<span style="color: #dfd5d5;">)</span></div><br /><div> <span style="color: #6a8b93; font-style: italic;"># Ensure to call the superclass method</span></div><div> <span style="color: #1bae1b; font-weight: bold;">return</span> <span style="color: #008100;">super</span><span style="color: #dfd5d5;">().</span>on_save_checkpoint<span style="color: #dfd5d5;">(</span>trainer<span style="color: #dfd5d5;">,</span> pl_module<span style="color: #dfd5d5;">,</span> checkpoint<span style="color: #dfd5d5;">)</span></div></div><p>..</p><p><br /></p><p>call it on training process</p><p>.</p><div style="background-color: #1e202b; color: #dbd9d9; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div>logger <span style="color: #ad3efe; font-weight: bold;">=</span> loggers<span style="color: #dfd5d5;">.</span>TensorBoardLogger<span style="color: #dfd5d5;">(</span><span style="color: #72b6fb;">save_dir</span><span style="color: #ad3efe; font-weight: bold;">=</span><span style="color: #c44445;">"lightning_logs"</span><span style="color: #dfd5d5;">,</span> <span style="color: #72b6fb;">name</span><span style="color: #ad3efe; font-weight: bold;">=</span>config<span style="color: #dfd5d5;">.</span>model_version<span style="color: #dfd5d5;">)</span></div><br /><div> <span style="color: #6a8b93; font-style: italic;"># Define the checkpoint callback</span></div><div> checkpoint_callback <span style="color: #ad3efe; font-weight: bold;">=</span> CustomModelCheckpoint<span style="color: #dfd5d5;">(</span></div><div> <span style="color: #72b6fb;">monitor</span><span style="color: #ad3efe; font-weight: bold;">=</span><span style="color: #c44445;">'val_loss'</span><span style="color: #dfd5d5;">,</span></div><div> <span style="color: #72b6fb;">dirpath</span><span style="color: #ad3efe; font-weight: bold;">=</span><span style="color: #1bae1b; font-weight: bold;">f</span><span style="color: #c44445;">"</span><span style="color: #ab6526;">{</span>logger<span style="color: #dfd5d5;">.</span>save_dir<span style="color: #ab6526;">}</span><span style="color: #c44445;">/</span><span style="color: #ab6526;">{</span>logger<span style="color: #dfd5d5;">.</span>name<span style="color: #ab6526;">}</span><span style="color: #c44445;">/version_</span><span style="color: #ab6526;">{</span>logger<span style="color: #dfd5d5;">.</span>version<span style="color: #ab6526;">}</span><span style="color: #c44445;">"</span><span style="color: #dfd5d5;">,</span></div><div> <span style="color: #72b6fb;">filename</span><span style="color: #ad3efe; font-weight: bold;">=</span><span style="color: #c44445;">'model-</span><span style="color: #ab6526;">{epoch</span><span style="color: #1bae1b; font-weight: bold;">:02d</span><span style="color: #ab6526;">}</span><span style="color: #c44445;">-</span><span style="color: #ab6526;">{val_loss</span><span style="color: #1bae1b; font-weight: bold;">:.2f</span><span style="color: #ab6526;">}</span><span style="color: #c44445;">'</span><span style="color: #dfd5d5;">,</span></div><div> <span style="color: #72b6fb;">save_top_k</span><span style="color: #ad3efe; font-weight: bold;">=</span><span style="color: #ab6526;">2</span><span style="color: #dfd5d5;">,</span> <span style="color: #6a8b93; font-style: italic;"># Top 2 checkpoints</span></div><div> <span style="color: #72b6fb;">save_top_k_pth</span><span style="color: #ad3efe; font-weight: bold;">=</span><span style="color: #ab6526;">2</span><span style="color: #dfd5d5;">,</span> <span style="color: #6a8b93; font-style: italic;"># Also save top 2 .pth files</span></div><div> <span style="color: #72b6fb;">mode</span><span style="color: #ad3efe; font-weight: bold;">=</span><span style="color: #c44445;">'min'</span></div><div> <span style="color: #dfd5d5;">)</span></div><br /><div> trainer <span style="color: #ad3efe; font-weight: bold;">=</span> Trainer<span style="color: #dfd5d5;">(</span><span style="color: #72b6fb;">max_epochs</span><span style="color: #ad3efe; font-weight: bold;">=</span>config<span style="color: #dfd5d5;">.</span>num_epochs<span style="color: #dfd5d5;">,</span> <span style="color: #72b6fb;">accelerator</span><span style="color: #ad3efe; font-weight: bold;">=</span><span style="color: #c44445;">'gpu'</span><span style="color: #dfd5d5;">,</span> </div><div> <span style="color: #72b6fb;">devices</span><span style="color: #ad3efe; font-weight: bold;">=</span><span style="color: #ab6526;">1</span><span style="color: #dfd5d5;">,</span> <span style="color: #72b6fb;">callbacks</span><span style="color: #ad3efe; font-weight: bold;">=</span><span style="color: #dfd5d5;">[</span>checkpoint_callback<span style="color: #dfd5d5;">],</span> </div><div> <span style="color: #72b6fb;">logger</span><span style="color: #ad3efe; font-weight: bold;">=</span>logger<span style="color: #dfd5d5;">,</span> <span style="color: #72b6fb;">log_every_n_steps</span><span style="color: #ad3efe; font-weight: bold;">=</span><span style="color: #ab6526;">10</span><span style="color: #dfd5d5;">)</span></div><br /></div><p>..</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHRzoIP8tfvQCZp9swBz6ohz5WNeTpqobvxLtSufvEsHGVRWzfX56B1v7D8PpjP7cy-hSZkgOMHJ3-6Szn1kIJy-RUgvsszFo_uCktjbe7XxtpnmhjINavmN6JGS_LOT3eObM1R_ssG2vZz8ehq25Y1zepkFyVgkhjcCaYDSQUIm6bbHN31ClwpeOwmbk/s870/Screenshot%202024-02-10%20at%2012.54.53.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="376" data-original-width="870" height="138" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHRzoIP8tfvQCZp9swBz6ohz5WNeTpqobvxLtSufvEsHGVRWzfX56B1v7D8PpjP7cy-hSZkgOMHJ3-6Szn1kIJy-RUgvsszFo_uCktjbe7XxtpnmhjINavmN6JGS_LOT3eObM1R_ssG2vZz8ehq25Y1zepkFyVgkhjcCaYDSQUIm6bbHN31ClwpeOwmbk/s320/Screenshot%202024-02-10%20at%2012.54.53.png" width="320" /></a></div><br /><p>saved top k files (ckpt, pth) file showing up on folder.</p><p>Thank you.</p><p>🙇🏻♂️</p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8995455167205656082.post-88953540584105794862024-02-08T23:40:00.000-08:002024-02-08T23:40:44.565-08:00git find large big file which committed.<p> Find large file in GitHub repository</p><p>.</p><div style="background-color: #1e202b; color: #dbd9d9; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div>git rev<span style="color: #ad3efe; font-weight: bold;">-</span><span style="color: #008100;">list</span> <span style="color: #660000;">--</span>objects <span style="color: #660000;">--</span><span style="color: #41adec;">all</span> <span style="color: #ad3efe; font-weight: bold;">|</span> <span style="color: #dfd5d5;">\</span></div><div>git cat<span style="color: #ad3efe; font-weight: bold;">-</span><span style="color: #da2bdd;">file</span> <span style="color: #660000;">--</span>batch<span style="color: #ad3efe; font-weight: bold;">-</span>check<span style="color: #ad3efe; font-weight: bold;">=</span><span style="color: #c44445;">'</span><span style="color: #ab6526;">%(objecttype) %</span><span style="color: #c44445;">(objectname) </span><span style="color: #ab6526;">%(objectsize) %</span><span style="color: #c44445;">(rest)'</span> <span style="color: #ad3efe; font-weight: bold;">|</span> <span style="color: #dfd5d5;">\</span></div><div>awk <span style="color: #c44445;">'$3 > 100*1024*1024'</span> <span style="color: #ad3efe; font-weight: bold;">|</span> sort <span style="color: #ad3efe; font-weight: bold;">-</span>k3nr</div><br /><br /></div><p>..</p><ul><li><strong><code>git rev-list --objects --all</code></strong> lists all objects in the repository.</li><li><strong><code>git cat-file --batch-check='...'</code></strong> checks the type, size, and other details of these objects.</li><li><strong><code>awk '$3 > 100*1024*1024'</code></strong> filters objects larger than 100 MB (note: 1024*1024 bytes = 1MB).</li><li><strong><code>sort -k3nr</code></strong> sorts these objects by size in descending order.</li></ul><div><br /></div><div>🙇🏻♂️</div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8995455167205656082.post-696382630662179092024-02-06T00:19:00.000-08:002024-02-06T00:19:27.773-08:00iOS swift dictionary example code<p> .</p><p style="background-color: white; color: rgba(0, 0, 0, 0.85); font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px; min-height: 14px;"><br /></p><p style="background-color: white; color: #5d6c79; font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;">// Existing dictionary of ages</p><p style="background-color: white; color: rgba(0, 0, 0, 0.85); font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;"><span style="color: #9b2393;"><b>var</b></span> <span style="color: #0f68a0;">ages</span>: [<span style="color: #3900a0;">String</span>: <span style="color: #3900a0;">Int</span>] = [<span style="color: #c41a16;">"John"</span>: <span style="color: #1c00cf;">30</span>, <span style="color: #c41a16;">"Emma"</span>: <span style="color: #1c00cf;">25</span>]</p><p style="background-color: white; color: rgba(0, 0, 0, 0.85); font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px; min-height: 14px;"><br /></p><p style="background-color: white; color: #5d6c79; font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;">// Adding a new dictionary with String keys and String values</p><p style="background-color: white; color: #c41a16; font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;"><span style="color: #9b2393;"><b>var</b></span><span style="color: rgba(0, 0, 0, 0.85);"> </span><span style="color: #0f68a0;">occupations</span><span style="color: rgba(0, 0, 0, 0.85);">: [</span><span style="color: #3900a0;">String</span><span style="color: rgba(0, 0, 0, 0.85);">: </span><span style="color: #3900a0;">String</span><span style="color: rgba(0, 0, 0, 0.85);">] = [</span>"John"<span style="color: rgba(0, 0, 0, 0.85);">: </span>"Engineer"<span style="color: rgba(0, 0, 0, 0.85);">, </span>"Emma"<span style="color: rgba(0, 0, 0, 0.85);">: </span>"Doctor"<span style="color: rgba(0, 0, 0, 0.85);">]</span></p><p style="background-color: white; color: rgba(0, 0, 0, 0.85); font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px; min-height: 14px;"><br /></p><p style="background-color: white; color: #5d6c79; font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;">// Adding a new key-value pair to the occupations dictionary</p><p style="background-color: white; color: #c41a16; font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;"><span style="color: #326d74;">occupations</span><span style="color: rgba(0, 0, 0, 0.85);">[</span>"Mike"<span style="color: rgba(0, 0, 0, 0.85);">] = </span>"Teacher"</p><p style="background-color: white; color: rgba(0, 0, 0, 0.85); font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px; min-height: 14px;"><br /></p><p style="background-color: white; color: #5d6c79; font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;">// Updating a value for a key in the occupations dictionary</p><p style="background-color: white; color: #5d6c79; font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;"><span style="color: #326d74;">occupations</span><span style="color: rgba(0, 0, 0, 0.85);">[</span><span style="color: #c41a16;">"Emma"</span><span style="color: rgba(0, 0, 0, 0.85);">] = </span><span style="color: #c41a16;">"Senior Doctor"</span><span style="color: rgba(0, 0, 0, 0.85);"> </span>// Emma got a promotion!</p><p style="background-color: white; color: rgba(0, 0, 0, 0.85); font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px; min-height: 14px;"><br /></p><p style="background-color: white; color: #5d6c79; font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;">// Accessing a value for a given key in the occupations dictionary</p><p style="background-color: white; color: rgba(0, 0, 0, 0.85); font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;"><span style="color: #9b2393;"><b>if</b></span> <span style="color: #9b2393;"><b>let</b></span> occupation = <span style="color: #326d74;">occupations</span>[<span style="color: #c41a16;">"John"</span>] {</p><p style="background-color: white; color: #c41a16; font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;"><span style="color: rgba(0, 0, 0, 0.85);"> </span><span style="color: #6c36a9;">print</span><span style="color: rgba(0, 0, 0, 0.85);">(</span>"John's occupation is <span style="color: rgba(0, 0, 0, 0.85);">\(</span><span style="color: #326d74;">occupation</span><span style="color: rgba(0, 0, 0, 0.85);">)</span>."<span style="color: rgba(0, 0, 0, 0.85);">)</span></p><p style="background-color: white; color: rgba(0, 0, 0, 0.85); font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;">} <span style="color: #9b2393;"><b>else</b></span> {</p><p style="background-color: white; color: #c41a16; font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;"><span style="color: rgba(0, 0, 0, 0.85);"> </span><span style="color: #6c36a9;">print</span><span style="color: rgba(0, 0, 0, 0.85);">(</span>"John's occupation is not available."<span style="color: rgba(0, 0, 0, 0.85);">)</span></p><p style="background-color: white; color: rgba(0, 0, 0, 0.85); font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;">}</p><p style="background-color: white; color: rgba(0, 0, 0, 0.85); font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px; min-height: 14px;"><br /></p><p style="background-color: white; color: #5d6c79; font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;">// Merging the ages and occupations dictionaries</p><p style="background-color: white; color: #5d6c79; font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;">// Assuming you want to create a summary for each person</p><p style="background-color: white; color: rgba(0, 0, 0, 0.85); font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;"><span style="color: #9b2393;"><b>for</b></span> (name, age) <span style="color: #9b2393;"><b>in</b></span> <span style="color: #326d74;">ages</span> {</p><p style="background-color: white; color: rgba(0, 0, 0, 0.85); font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;"> <span style="color: #9b2393;"><b>if</b></span> <span style="color: #9b2393;"><b>let</b></span> occupation = <span style="color: #326d74;">occupations</span>[<span style="color: #326d74;">name</span>] {</p><p style="background-color: white; color: #c41a16; font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;"><span style="color: rgba(0, 0, 0, 0.85);"> </span><span style="color: #6c36a9;">print</span><span style="color: rgba(0, 0, 0, 0.85);">(</span>"<span style="color: rgba(0, 0, 0, 0.85);">\(</span><span style="color: #326d74;">name</span><span style="color: rgba(0, 0, 0, 0.85);">)</span> is <span style="color: rgba(0, 0, 0, 0.85);">\(</span><span style="color: #326d74;">age</span><span style="color: rgba(0, 0, 0, 0.85);">)</span> years old and works as a <span style="color: rgba(0, 0, 0, 0.85);">\(occupation)</span>."<span style="color: rgba(0, 0, 0, 0.85);">)</span></p><p style="background-color: white; color: rgba(0, 0, 0, 0.85); font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;"> } <span style="color: #9b2393;"><b>else</b></span> {</p><p style="background-color: white; color: #c41a16; font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;"><span style="color: rgba(0, 0, 0, 0.85);"> </span><span style="color: #6c36a9;">print</span><span style="color: rgba(0, 0, 0, 0.85);">(</span>"<span style="color: rgba(0, 0, 0, 0.85);">\(</span><span style="color: #326d74;">name</span><span style="color: rgba(0, 0, 0, 0.85);">)</span> is <span style="color: rgba(0, 0, 0, 0.85);">\(</span><span style="color: #326d74;">age</span><span style="color: rgba(0, 0, 0, 0.85);">)</span> years old."<span style="color: rgba(0, 0, 0, 0.85);">)</span></p><p style="background-color: white; color: rgba(0, 0, 0, 0.85); font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;"> }</p><p style="background-color: white; color: rgba(0, 0, 0, 0.85); font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;">}</p><p style="background-color: white; color: rgba(0, 0, 0, 0.85); font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px; min-height: 14px;"><br /></p><p style="background-color: white; color: #5d6c79; font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;">// Removing a key-value pair from the occupations dictionary</p><p style="background-color: white; color: #5d6c79; font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;"><span style="color: #326d74;">occupations</span><span style="color: rgba(0, 0, 0, 0.85);">[</span><span style="color: #c41a16;">"Mike"</span><span style="color: rgba(0, 0, 0, 0.85);">] = </span><span style="color: #9b2393;"><b>nil</b></span><span style="color: rgba(0, 0, 0, 0.85);"> </span>// Mike's occupation is removed</p><p style="background-color: white; color: rgba(0, 0, 0, 0.85); font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px; min-height: 14px;"><br /></p><p style="background-color: white; color: #5d6c79; font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;">// Iterating over all key-value pairs in the occupations dictionary</p><p style="background-color: white; color: rgba(0, 0, 0, 0.85); font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;"><span style="color: #9b2393;"><b>for</b></span> (name, occupation) <span style="color: #9b2393;"><b>in</b></span> <span style="color: #326d74;">occupations</span> {</p><p style="background-color: white; color: #c41a16; font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;"><span style="color: rgba(0, 0, 0, 0.85);"> </span><span style="color: #6c36a9;">print</span><span style="color: rgba(0, 0, 0, 0.85);">(</span>"<span style="color: rgba(0, 0, 0, 0.85);">\(</span><span style="color: #326d74;">name</span><span style="color: rgba(0, 0, 0, 0.85);">)</span> works as a <span style="color: rgba(0, 0, 0, 0.85);">\(</span><span style="color: #326d74;">occupation</span><span style="color: rgba(0, 0, 0, 0.85);">)</span>."<span style="color: rgba(0, 0, 0, 0.85);">)</span></p><p style="background-color: white; color: rgba(0, 0, 0, 0.85); font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;">}</p><p style="background-color: white; color: rgba(0, 0, 0, 0.85); font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px; min-height: 14px;"><br /></p><p style="background-color: white; color: #5d6c79; font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;">// Checking the count of elements in both dictionaries</p><p style="background-color: white; color: #c41a16; font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;"><span style="color: #6c36a9;">print</span><span style="color: rgba(0, 0, 0, 0.85);">(</span>"There are <span style="color: rgba(0, 0, 0, 0.85);">\(</span><span style="color: #326d74;">ages</span><span style="color: rgba(0, 0, 0, 0.85);">.</span><span style="color: #6c36a9;">count</span><span style="color: rgba(0, 0, 0, 0.85);">)</span> people in the ages dictionary."<span style="color: rgba(0, 0, 0, 0.85);">)</span></p><p style="background-color: white; color: #c41a16; font-family: Menlo; font-feature-settings: normal; font-kerning: auto; font-optical-sizing: auto; font-size-adjust: none; font-size: 12px; font-stretch: normal; font-style: normal; font-variant-alternates: normal; font-variant-caps: normal; font-variant-east-asian: normal; font-variant-emoji: normal; font-variant-ligatures: normal; font-variant-numeric: normal; font-variant-position: normal; font-variation-settings: normal; line-height: normal; margin: 0px;"><span style="color: #6c36a9;">print</span><span style="color: rgba(0, 0, 0, 0.85);">(</span>"There are <span style="color: rgba(0, 0, 0, 0.85);">\(</span><span style="color: #326d74;">occupations</span><span style="color: rgba(0, 0, 0, 0.85);">.</span><span style="color: #6c36a9;">count</span><span style="color: rgba(0, 0, 0, 0.85);">)</span> occupations listed."<span style="color: rgba(0, 0, 0, 0.85);">)</span></p><p>..</p><p><br /></p><p>refer to code, hope to get some useful idea.</p><p>Thank you.</p><p>🙇🏻♂️</p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8995455167205656082.post-89186505125129681632024-02-05T23:04:00.000-08:002024-02-05T23:05:01.340-08:00Download all YouTube videos in playlist (python)<p>pip install pytube</p><p>replace playlist url in string</p><p>.</p><div style="background-color: #1f1f1f; color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div><span style="color: #c586c0;">from</span> pytube <span style="color: #c586c0;">import</span> Playlist, YouTube</div><br /><div><span style="color: #569cd6;">def</span> <span style="color: #dcdcaa;">download_video</span>(<span style="color: #9cdcfe;">url</span>, <span style="color: #9cdcfe;">max_attempts</span><span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">3</span>):</div><div> <span style="color: #c586c0;">for</span> <span style="color: #9cdcfe;">attempt</span> <span style="color: #c586c0;">in</span> <span style="color: #4ec9b0;">range</span>(<span style="color: #b5cea8;">1</span>, <span style="color: #9cdcfe;">max_attempts</span> <span style="color: #d4d4d4;">+</span> <span style="color: #b5cea8;">1</span>):</div><div> <span style="color: #c586c0;">try</span>:</div><div> <span style="color: #9cdcfe;">yt</span> <span style="color: #d4d4d4;">=</span> YouTube(<span style="color: #9cdcfe;">url</span>)</div><div> <span style="color: #9cdcfe;">video</span> <span style="color: #d4d4d4;">=</span> <span style="color: #9cdcfe;">yt</span>.streams.get_highest_resolution()</div><div> <span style="color: #9cdcfe;">video</span>.download()</div><div> <span style="color: #dcdcaa;">print</span>(<span style="color: #569cd6;">f</span><span style="color: #ce9178;">"Downloaded: </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">yt</span>.title<span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>)</div><div> <span style="color: #c586c0;">break</span></div><div> <span style="color: #c586c0;">except</span> <span style="color: #4ec9b0;">Exception</span> <span style="color: #c586c0;">as</span> <span style="color: #9cdcfe;">e</span>:</div><div> <span style="color: #dcdcaa;">print</span>(<span style="color: #569cd6;">f</span><span style="color: #ce9178;">"Error downloading video (attempt </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">attempt</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">): </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">url</span><span style="color: #569cd6;">}</span><span style="color: #d7ba7d;">\n</span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">e</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>)</div><div> <span style="color: #c586c0;">if</span> <span style="color: #9cdcfe;">attempt</span> <span style="color: #d4d4d4;">==</span> <span style="color: #9cdcfe;">max_attempts</span>:</div><div> <span style="color: #dcdcaa;">print</span>(<span style="color: #569cd6;">f</span><span style="color: #ce9178;">"Failed to download video after </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">max_attempts</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> attempts: </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">url</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>)</div><br /><div><span style="color: #6a9955;"># Replace with your playlist URL</span></div><div><span style="color: #9cdcfe;">playlist_url</span> <span style="color: #d4d4d4;">=</span> <span style="color: #ce9178;">'https://www.youtube.com/playlist?list=xxx'</span></div><br /><div><span style="color: #9cdcfe;">playlist</span> <span style="color: #d4d4d4;">=</span> Playlist(<span style="color: #9cdcfe;">playlist_url</span>)</div><br /><div><span style="color: #6a9955;"># Fetch video URLs</span></div><div><span style="color: #9cdcfe;">video_urls</span> <span style="color: #d4d4d4;">=</span> <span style="color: #9cdcfe;">playlist</span>.video_urls</div><br /><div><span style="color: #6a9955;"># Download each video</span></div><div><span style="color: #c586c0;">for</span> <span style="color: #9cdcfe;">url</span> <span style="color: #c586c0;">in</span> <span style="color: #9cdcfe;">video_urls</span>:</div><div> <span style="color: #dcdcaa;">download_video</span>(<span style="color: #9cdcfe;">url</span>)</div><br /></div><p>..</p><p><br /></p><p>Thank you.</p><p>🙇🏻♂️</p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8995455167205656082.post-92222551736120775072024-02-05T01:23:00.000-08:002024-02-05T01:23:42.160-08:00SWIFT Examples of Initializing and Forcefully Unwrapping Optionals<p> String</p><div style="background-color: #1f1f1f; color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div>var <span style="color: #9cdcfe;">nonOptionalString</span>: String <span style="color: #d4d4d4;">=</span> <span style="color: #ce9178;">"Hello"</span></div><div><span style="color: #dcdcaa;">print</span>(<span style="color: #9cdcfe;">nonOptionalString</span>) <span style="color: #d4d4d4;">//</span> Directly prints <span style="color: #ce9178;">"Hello"</span></div><br /><div>var <span style="color: #9cdcfe;">optionalString</span>: String<span style="color: #f44747;">?</span> <span style="color: #d4d4d4;">=</span> <span style="color: #ce9178;">"Hello"</span></div><div><span style="color: #dcdcaa;">print</span>(<span style="color: #9cdcfe;">optionalString</span>!) <span style="color: #d4d4d4;">//</span> Forcefully unwraps <span style="color: #569cd6;">and</span> prints <span style="color: #ce9178;">"Hello"</span></div></div><p>.</p><p>String optional</p><div style="background-color: #1f1f1f; color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div>var optionalString: String<span style="color: #f44747;">?</span> <span style="color: #d4d4d4;">=</span> <span style="color: #ce9178;">"Hello"</span></div><div><span style="color: #c586c0;">if</span> let unwrappedString <span style="color: #d4d4d4;">=</span> optionalString {</div><div> <span style="color: #dcdcaa;">print</span>(unwrappedString) <span style="color: #d4d4d4;">//</span> Prints <span style="color: #ce9178;">"Hello"</span></div><div>} <span style="color: #c586c0;">else</span> {</div><div> <span style="color: #dcdcaa;">print</span>(<span style="color: #ce9178;">"optionalString was nil"</span>)</div><div>}</div><br /><div>optionalString <span style="color: #d4d4d4;">=</span> nil</div><div><span style="color: #c586c0;">if</span> let unwrappedString <span style="color: #d4d4d4;">=</span> optionalString {</div><div> <span style="color: #dcdcaa;">print</span>(unwrappedString)</div><div>} <span style="color: #c586c0;">else</span> {</div><div> <span style="color: #dcdcaa;">print</span>(<span style="color: #ce9178;">"optionalString was nil"</span>) <span style="color: #d4d4d4;">//</span> Prints <span style="color: #ce9178;">"optionalString was nil"</span> because it<span style="color: #ce9178;">'s now nil</span></div><div>}</div></div><p>.</p><p><br /></p><p>Int</p><div style="background-color: #1f1f1f; color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div>var nonOptionalInt: Int <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">4</span></div><div><span style="color: #dcdcaa;">print</span>(nonOptionalInt) <span style="color: #d4d4d4;">//</span> Directly prints <span style="color: #b5cea8;">4</span></div><br /><div>var optionalInt: Int<span style="color: #f44747;">?</span> <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">4</span></div><div><span style="color: #dcdcaa;">print</span>(optionalInt!) <span style="color: #d4d4d4;">//</span> Forcefully unwraps <span style="color: #569cd6;">and</span> prints <span style="color: #b5cea8;">4</span></div></div><p>.</p><p><br /></p><p>Int optional</p><div style="background-color: #1f1f1f; color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div>var optionalInt: Int<span style="color: #f44747;">?</span> <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">4</span></div><div><span style="color: #c586c0;">if</span> let unwrappedInt <span style="color: #d4d4d4;">=</span> optionalInt {</div><div> <span style="color: #dcdcaa;">print</span>(unwrappedInt) <span style="color: #d4d4d4;">//</span> Prints <span style="color: #b5cea8;">4</span></div><div>} <span style="color: #c586c0;">else</span> {</div><div> <span style="color: #dcdcaa;">print</span>(<span style="color: #ce9178;">"optionalInt was nil"</span>)</div><div>}</div><br /><div>optionalInt <span style="color: #d4d4d4;">=</span> nil</div><div><span style="color: #c586c0;">if</span> let unwrappedInt <span style="color: #d4d4d4;">=</span> optionalInt {</div><div> <span style="color: #dcdcaa;">print</span>(unwrappedInt)</div><div>} <span style="color: #c586c0;">else</span> {</div><div> <span style="color: #dcdcaa;">print</span>(<span style="color: #ce9178;">"optionalInt was nil"</span>) <span style="color: #d4d4d4;">//</span> Prints <span style="color: #ce9178;">"optionalInt was nil"</span> because it<span style="color: #ce9178;">'s now nil</span></div><div>}</div></div><p>.</p><p><br /></p><p>Float</p><div style="background-color: #1f1f1f; color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div>var nonOptionalFloat: Float <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">3.14</span></div><div><span style="color: #dcdcaa;">print</span>(nonOptionalFloat) <span style="color: #d4d4d4;">//</span> Directly prints <span style="color: #b5cea8;">3.14</span></div><br /><div>var optionalFloat: Float<span style="color: #f44747;">?</span> <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">3.14</span></div><div><span style="color: #dcdcaa;">print</span>(optionalFloat!) <span style="color: #d4d4d4;">//</span> Forcefully unwraps <span style="color: #569cd6;">and</span> prints <span style="color: #b5cea8;">3.14</span></div></div><p>.</p><p><br /></p><p>Double</p><div style="background-color: #1f1f1f; color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div>var nonOptionalDouble: Double <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">3.14159</span></div><div><span style="color: #dcdcaa;">print</span>(nonOptionalDouble) <span style="color: #d4d4d4;">//</span> Directly prints <span style="color: #b5cea8;">3.14159</span></div><br /><div>var optionalDouble: Double<span style="color: #f44747;">?</span> <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">3.14159</span></div><div><span style="color: #dcdcaa;">print</span>(optionalDouble!) <span style="color: #d4d4d4;">//</span> Forcefully unwraps <span style="color: #569cd6;">and</span> prints <span style="color: #b5cea8;">3.14159</span></div></div><p>.</p><p><br /></p><p>Bool</p><div style="background-color: #1f1f1f; color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div>var nonOptionalBool: Bool <span style="color: #d4d4d4;">=</span> true</div><div><span style="color: #dcdcaa;">print</span>(nonOptionalBool) <span style="color: #d4d4d4;">//</span> Directly prints true</div><br /><div>var optionalBool: Bool<span style="color: #f44747;">?</span> <span style="color: #d4d4d4;">=</span> true</div><div><span style="color: #dcdcaa;">print</span>(optionalBool!) <span style="color: #d4d4d4;">//</span> Forcefully unwraps <span style="color: #569cd6;">and</span> prints true</div></div><p>.</p><p><br /></p><p>optional type is added '?' in the end of type.</p><p>so that the value can be have "nil". "nil" is also classified false in if logic.</p><p>The reason why exist such a type is swift is UI based language and value from ui button or action might have any value, so to prevent error, optional type would be needed. </p><p><br /></p><p>🙇🏻♂️</p><p><br /></p><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8995455167205656082.post-43886954801556505922024-02-01T07:55:00.000-08:002024-02-01T07:55:15.495-08:00get list of torch from conda installation<p> input > conda list | grep torch<br /></p><div style="background-color: #1f1f1f; color: #cccccc; font-family: "Droid Sans Mono", "monospace", monospace; font-size: 14px; line-height: 19px; white-space: pre;"><div>> conda <span style="color: #4ec9b0;">list</span> <span style="color: #d4d4d4;">|</span> grep <span style="color: #4ec9b0;">torch</span></div><div>ffmpeg <span style="color: #b5cea8;">4.3</span> hf484d3e_0 pytorch</div><div>libjpeg<span style="color: #d4d4d4;">-</span>turbo <span style="color: #b5cea8;">2.0</span>.0 h9bf148f_0 pytorch</div><div>pytorch <span style="color: #b5cea8;">2.2</span>.0 py3.8_cpu_0 pytorch</div><div>pytorch<span style="color: #d4d4d4;">-</span>mutex <span style="color: #b5cea8;">1.0</span> cpu pytorch</div><div>torchaudio <span style="color: #b5cea8;">2.2</span>.0 py38_cpu pytorch</div><div>torchvision <span style="color: #b5cea8;">0.17</span>.0 py38_cpu pytorch</div></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8995455167205656082.post-61373326567882749742024-01-30T07:38:00.000-08:002024-01-30T07:38:36.207-08:00checking torch + cuda installed correctly<p> </p><p> </p><p>Run this script </p><p>.</p><p> </p><div style="background-color: #1f1f1f; color: #cccccc; font-family: 'Droid Sans Mono', 'monospace', monospace; font-size: 14px; font-weight: normal; line-height: 19px; white-space: pre;"><div><span style="color: #c586c0;">import</span><span style="color: #cccccc;"> </span><span style="color: #4ec9b0;">torch</span></div><div><span style="color: #c586c0;">from</span><span style="color: #cccccc;"> </span><span style="color: #4ec9b0;">torch</span><span style="color: #cccccc;">.</span><span style="color: #4ec9b0;">utils</span><span style="color: #cccccc;">.</span><span style="color: #4ec9b0;">cpp_extension</span><span style="color: #cccccc;"> </span><span style="color: #c586c0;">import</span><span style="color: #cccccc;"> </span><span style="color: #dcdcaa;">CUDAExtension</span><span style="color: #cccccc;">, </span><span style="color: #4ec9b0;">BuildExtension</span></div><br /><div><span style="color: #569cd6;">def</span><span style="color: #cccccc;"> </span><span style="color: #dcdcaa;">check_cuda_setup</span><span style="color: #cccccc;">():</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">cuda_available</span><span style="color: #cccccc;"> </span><span style="color: #d4d4d4;">=</span><span style="color: #cccccc;"> </span><span style="color: #4ec9b0;">torch</span><span style="color: #cccccc;">.</span><span style="color: #4ec9b0;">cuda</span><span style="color: #cccccc;">.</span><span style="color: #dcdcaa;">is_available</span><span style="color: #cccccc;">()</span></div><div><span style="color: #cccccc;"> </span><span style="color: #dcdcaa;">print</span><span style="color: #cccccc;">(</span><span style="color: #569cd6;">f</span><span style="color: #ce9178;">"CUDA available: </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">cuda_available</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span><span style="color: #cccccc;">)</span></div><br /><div><span style="color: #cccccc;"> </span><span style="color: #c586c0;">if</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">cuda_available</span><span style="color: #cccccc;">:</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">cuda_version</span><span style="color: #cccccc;"> </span><span style="color: #d4d4d4;">=</span><span style="color: #cccccc;"> </span><span style="color: #4ec9b0;">torch</span><span style="color: #cccccc;">.version.cuda</span></div><div><span style="color: #cccccc;"> </span><span style="color: #dcdcaa;">print</span><span style="color: #cccccc;">(</span><span style="color: #569cd6;">f</span><span style="color: #ce9178;">"CUDA version (PyTorch): </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">cuda_version</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span><span style="color: #cccccc;">)</span></div><br /><div><span style="color: #cccccc;"> </span><span style="color: #c586c0;">try</span><span style="color: #cccccc;">:</span></div><div><span style="color: #cccccc;"> </span><span style="color: #6a9955;"># Attempt to create a CUDA extension</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">ext</span><span style="color: #cccccc;"> </span><span style="color: #d4d4d4;">=</span><span style="color: #cccccc;"> </span><span style="color: #dcdcaa;">CUDAExtension</span><span style="color: #cccccc;">(</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">name</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">'test_ext'</span><span style="color: #cccccc;">,</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">sources</span><span style="color: #d4d4d4;">=</span><span style="color: #cccccc;">[]</span></div><div><span style="color: #cccccc;"> )</span></div><div><span style="color: #cccccc;"> </span><span style="color: #dcdcaa;">print</span><span style="color: #cccccc;">(</span><span style="color: #ce9178;">"CUDAExtension can be created successfully."</span><span style="color: #cccccc;">)</span></div><div><span style="color: #cccccc;"> </span><span style="color: #c586c0;">except</span><span style="color: #cccccc;"> </span><span style="color: #4ec9b0;">Exception</span><span style="color: #cccccc;"> </span><span style="color: #c586c0;">as</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">e</span><span style="color: #cccccc;">:</span></div><div><span style="color: #cccccc;"> </span><span style="color: #dcdcaa;">print</span><span style="color: #cccccc;">(</span><span style="color: #569cd6;">f</span><span style="color: #ce9178;">"Error creating CUDAExtension: </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">e</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span><span style="color: #cccccc;">)</span></div><br /><div><span style="color: #cccccc;"> </span><span style="color: #c586c0;">try</span><span style="color: #cccccc;">:</span></div><div><span style="color: #cccccc;"> </span><span style="color: #6a9955;"># Attempt to create a BuildExtension object</span></div><div><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">build_ext</span><span style="color: #cccccc;"> </span><span style="color: #d4d4d4;">=</span><span style="color: #cccccc;"> </span><span style="color: #4ec9b0;">BuildExtension</span><span style="color: #cccccc;">()</span></div><div><span style="color: #cccccc;"> </span><span style="color: #dcdcaa;">print</span><span style="color: #cccccc;">(</span><span style="color: #ce9178;">"BuildExtension can be created successfully."</span><span style="color: #cccccc;">)</span></div><div><span style="color: #cccccc;"> </span><span style="color: #c586c0;">except</span><span style="color: #cccccc;"> </span><span style="color: #4ec9b0;">Exception</span><span style="color: #cccccc;"> </span><span style="color: #c586c0;">as</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">e</span><span style="color: #cccccc;">:</span></div><div><span style="color: #cccccc;"> </span><span style="color: #dcdcaa;">print</span><span style="color: #cccccc;">(</span><span style="color: #569cd6;">f</span><span style="color: #ce9178;">"Error creating BuildExtension: </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">e</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span><span style="color: #cccccc;">)</span></div><br /><div><span style="color: #c586c0;">if</span><span style="color: #cccccc;"> </span><span style="color: #9cdcfe;">__name__</span><span style="color: #cccccc;"> </span><span style="color: #d4d4d4;">==</span><span style="color: #cccccc;"> </span><span style="color: #ce9178;">"__main__"</span><span style="color: #cccccc;">:</span></div><div><span style="color: #cccccc;"> </span><span style="color: #dcdcaa;">check_cuda_setup</span><span style="color: #cccccc;">()</span></div><br /><br /></div><p>.. </p><p>If return 'False' then you need to fix your system.</p><p>Thank you.</p><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8995455167205656082.post-59067594965384551122024-01-17T00:35:00.000-08:002024-01-17T00:35:36.870-08:00Very useful iOS tutorial site: https://www.appbrewery.co/p/ios-course-resources/<p><br /></p><p><a href="https://www.appbrewery.co/p/ios-course-resources/"> https://www.appbrewery.co/p/ios-course-resources/</a></p><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8995455167205656082.post-23754252600889262232024-01-16T01:45:00.000-08:002024-01-16T01:45:03.898-08:00 from pytorch3d.renderer import ( ModuleNotFoundError: No module named 'pytorch3d' (gw_text3d_py39...<p>1. requirements</p><p>conda create -n pytorch3d python=3.9<br />conda activate pytorch3d<br />conda install pytorch=1.13.0 torchvision pytorch-cuda=11.6 -c pytorch -c nvidia<br />conda install -c fvcore -c iopath -c conda-forge fvcore iopath</p><p> </p><p>conda install -c bottler nvidiacub</p><p> * otherwise</p><p>curl -LO https://github.com/NVIDIA/cub/archive/1.10.0.tar.gz<br />tar xzf 1.10.0.tar.gz<br />export CUB_HOME=$PWD/cub-1.10.0</p><p><br /></p><p> .</p><p> </p><p> 2.Installing prebuilt binaries for PyTorch3D</p><p># Anaconda Cloud<br />conda install pytorch3d -c pytorch3d</p><p> </p><p>or </p><p># Anaconda Cloud<br />conda install pytorch3d -c pytorch3d-nightly</p><p><br /></p><p>or install from whell</p><p>pip install --no-index --no-cache-dir pytorch3d -f https://dl.fbaipublicfiles.com/pytorch3d/packaging/wheels/py38_cu113_pyt1110/download.html</p><p><br /></p><p><br /></p><p>refer to this page: https://github.com/facebookresearch/pytorch3d/blob/main/INSTALL.md</p><p><br /></p><p>Thank you!</p><p><br /></p><p><br /></p><p> </p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8995455167205656082.post-27353838643441603802024-01-15T00:57:00.000-08:002024-01-15T00:57:58.500-08:00unreal engine, create asset by python widget and copy asset to game env<p> refer to code:</p><p>.</p><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #c586c0;">import</span> <span style="color: #4ec9b0;">unreal</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #c586c0;">import</span> <span style="color: #4ec9b0;">os</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #569cd6;"><br /></span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #569cd6;">def</span> <span style="color: #dcdcaa;">main_process</span>(<span style="color: #9cdcfe;">input_args</span>):</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Use a directory within your user's documents or another location you have write access to</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">local_directory</span> <span style="color: #d4d4d4;">=</span> <span style="color: #ce9178;">"/Users/user/Documents/Unreal Projects/prj_name/Content/prj_name/Scripts"</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> </div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> </div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Example usage</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">filename</span> <span style="color: #d4d4d4;">=</span> <span style="color: #ce9178;">"chamfered_cube.obj"</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">file_path</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">create_chamfered_cube_obj_file</span>(<span style="color: #9cdcfe;">filename</span>, <span style="color: #9cdcfe;">local_directory</span>, <span style="color: #b5cea8;">100.0</span>, <span style="color: #b5cea8;">0.1</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">imported_asset_path</span> <span style="color: #d4d4d4;">=</span> <span style="color: #dcdcaa;">import_obj_to_unreal</span>(<span style="color: #9cdcfe;">file_path</span>, <span style="color: #ce9178;">"/Game/prj_name"</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #dcdcaa;">place_static_mesh_in_world</span>(<span style="color: #ce9178;">'/Game/prj_name/chamfered_cube'</span>, (<span style="color: #b5cea8;">1000</span>, <span style="color: #b5cea8;">1000</span>, <span style="color: #b5cea8;">100</span>))</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #569cd6;"><br /></span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #569cd6;">def</span> <span style="color: #dcdcaa;">place_static_mesh_in_world</span>(<span style="color: #9cdcfe;">mesh_asset_path</span>, <span style="color: #9cdcfe;">location</span>, <span style="color: #9cdcfe;">rotation</span><span style="color: #d4d4d4;">=</span>(<span style="color: #b5cea8;">0</span>, <span style="color: #b5cea8;">0</span>, <span style="color: #b5cea8;">0</span>), <span style="color: #9cdcfe;">scale</span><span style="color: #d4d4d4;">=</span>(<span style="color: #b5cea8;">1</span>, <span style="color: #b5cea8;">1</span>, <span style="color: #b5cea8;">1</span>)):</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Load the Static Mesh asset</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">static_mesh</span> <span style="color: #d4d4d4;">=</span> <span style="color: #4ec9b0;">unreal</span>.load_asset(<span style="color: #9cdcfe;">mesh_asset_path</span>, <span style="color: #4ec9b0;">unreal</span>.StaticMesh)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> </div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Get the current editor world</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">editor_world</span> <span style="color: #d4d4d4;">=</span> <span style="color: #4ec9b0;">unreal</span>.EditorLevelLibrary.get_editor_world()</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> </div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Spawn a new StaticMeshActor in the world</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">static_mesh_actor</span> <span style="color: #d4d4d4;">=</span> <span style="color: #4ec9b0;">unreal</span>.EditorLevelLibrary.spawn_actor_from_class(</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #4ec9b0;">unreal</span>.StaticMeshActor, <span style="color: #9cdcfe;">location</span>, <span style="color: #9cdcfe;">rotation</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> )</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> </div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">if</span> <span style="color: #9cdcfe;">static_mesh_actor</span>:</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Access the StaticMeshComponent property and set the static mesh</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">static_mesh_component</span> <span style="color: #d4d4d4;">=</span> <span style="color: #9cdcfe;">static_mesh_actor</span>.get_component_by_class(<span style="color: #4ec9b0;">unreal</span>.StaticMeshComponent)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">if</span> <span style="color: #9cdcfe;">static_mesh_component</span>:</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">static_mesh_component</span>.set_static_mesh(<span style="color: #9cdcfe;">static_mesh</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Set the scale if necessary</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">static_mesh_actor</span>.set_actor_scale3d(<span style="color: #4ec9b0;">unreal</span>.Vector(<span style="color: #d4d4d4;">*</span><span style="color: #9cdcfe;">scale</span>))</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> </div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #dcdcaa;">print</span>(<span style="color: #569cd6;">f</span><span style="color: #ce9178;">"Placed Static Mesh at location: </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">location</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">return</span> <span style="color: #9cdcfe;">static_mesh_actor</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">else</span>:</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #dcdcaa;">print</span>(<span style="color: #ce9178;">"Failed to access StaticMeshComponent."</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">return</span> <span style="color: #569cd6;">None</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">else</span>:</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #dcdcaa;">print</span>(<span style="color: #ce9178;">"Failed to place Static Mesh in the world."</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">return</span> <span style="color: #569cd6;">None</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #569cd6;"><br /></span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #569cd6;">def</span> <span style="color: #dcdcaa;">import_obj_to_unreal</span>(<span style="color: #9cdcfe;">obj_file_path</span>, <span style="color: #9cdcfe;">unreal_asset_path</span>):</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Set up the import task</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">import_task</span> <span style="color: #d4d4d4;">=</span> <span style="color: #4ec9b0;">unreal</span>.AssetImportTask()</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">import_task</span>.filename <span style="color: #d4d4d4;">=</span> <span style="color: #9cdcfe;">obj_file_path</span> <span style="color: #6a9955;"># The full path to the OBJ file on disk</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">import_task</span>.destination_path <span style="color: #d4d4d4;">=</span> <span style="color: #9cdcfe;">unreal_asset_path</span> <span style="color: #6a9955;"># The path in Unreal where to import the asset</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">import_task</span>.automated <span style="color: #d4d4d4;">=</span> <span style="color: #569cd6;">True</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">import_task</span>.save <span style="color: #d4d4d4;">=</span> <span style="color: #569cd6;">True</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><br /></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Set up the import options for Static Mesh</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">options</span> <span style="color: #d4d4d4;">=</span> <span style="color: #4ec9b0;">unreal</span>.FbxImportUI()</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Set various options on the options object here...</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><br /></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">import_task</span>.options <span style="color: #d4d4d4;">=</span> <span style="color: #9cdcfe;">options</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><br /></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Execute the import task</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #4ec9b0;">unreal</span>.AssetToolsHelpers.get_asset_tools().import_asset_tasks([<span style="color: #9cdcfe;">import_task</span>])</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><br /></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Return the imported asset path if successful, None otherwise</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">return</span> <span style="color: #9cdcfe;">import_task</span>.imported_object_paths[<span style="color: #b5cea8;">0</span>] <span style="color: #c586c0;">if</span> <span style="color: #9cdcfe;">import_task</span>.imported_object_paths <span style="color: #c586c0;">else</span> <span style="color: #569cd6;">None</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #c586c0;"><br /></span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #c586c0;">import</span> <span style="color: #4ec9b0;">os</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #569cd6;"><br /></span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #569cd6;">def</span> <span style="color: #dcdcaa;">create_chamfered_cube_obj_file</span>(<span style="color: #9cdcfe;">filename</span>, <span style="color: #9cdcfe;">directory</span>, <span style="color: #9cdcfe;">scale</span><span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">1.0</span>, <span style="color: #9cdcfe;">chamfer_ratio</span><span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">0.1</span>):</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Calculate the chamfer size</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">chamfer_size</span> <span style="color: #d4d4d4;">=</span> <span style="color: #9cdcfe;">scale</span> <span style="color: #d4d4d4;">*</span> <span style="color: #9cdcfe;">chamfer_ratio</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">half_scale</span> <span style="color: #d4d4d4;">=</span> <span style="color: #9cdcfe;">scale</span> <span style="color: #d4d4d4;">/</span> <span style="color: #b5cea8;">2</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">inner_size</span> <span style="color: #d4d4d4;">=</span> <span style="color: #9cdcfe;">half_scale</span> <span style="color: #d4d4d4;">-</span> <span style="color: #9cdcfe;">chamfer_size</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><br /></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Define the vertices for a chamfered cube</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">vertices</span> <span style="color: #d4d4d4;">=</span> [</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Bottom vertices (4 corners)</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #569cd6;">f</span><span style="color: #ce9178;">"v </span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">-</span><span style="color: #9cdcfe;">inner_size</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">-</span><span style="color: #9cdcfe;">inner_size</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">-</span><span style="color: #9cdcfe;">half_scale</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>, <span style="color: #569cd6;">f</span><span style="color: #ce9178;">"v </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">inner_size</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">-</span><span style="color: #9cdcfe;">inner_size</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">-</span><span style="color: #9cdcfe;">half_scale</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #569cd6;">f</span><span style="color: #ce9178;">"v </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">inner_size</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">inner_size</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">-</span><span style="color: #9cdcfe;">half_scale</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>, <span style="color: #569cd6;">f</span><span style="color: #ce9178;">"v </span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">-</span><span style="color: #9cdcfe;">inner_size</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">inner_size</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">-</span><span style="color: #9cdcfe;">half_scale</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Top vertices (4 corners)</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #569cd6;">f</span><span style="color: #ce9178;">"v </span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">-</span><span style="color: #9cdcfe;">inner_size</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">-</span><span style="color: #9cdcfe;">inner_size</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">half_scale</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>, <span style="color: #569cd6;">f</span><span style="color: #ce9178;">"v </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">inner_size</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">-</span><span style="color: #9cdcfe;">inner_size</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">half_scale</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #569cd6;">f</span><span style="color: #ce9178;">"v </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">inner_size</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">inner_size</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">half_scale</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>, <span style="color: #569cd6;">f</span><span style="color: #ce9178;">"v </span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">-</span><span style="color: #9cdcfe;">inner_size</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">inner_size</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">half_scale</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Chamfer vertices on the bottom (4)</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #569cd6;">f</span><span style="color: #ce9178;">"v </span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">-</span><span style="color: #9cdcfe;">half_scale</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">-</span><span style="color: #9cdcfe;">half_scale</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">-</span><span style="color: #9cdcfe;">inner_size</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>, <span style="color: #569cd6;">f</span><span style="color: #ce9178;">"v </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">half_scale</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">-</span><span style="color: #9cdcfe;">half_scale</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">-</span><span style="color: #9cdcfe;">inner_size</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #569cd6;">f</span><span style="color: #ce9178;">"v </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">half_scale</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">half_scale</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">-</span><span style="color: #9cdcfe;">inner_size</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>, <span style="color: #569cd6;">f</span><span style="color: #ce9178;">"v </span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">-</span><span style="color: #9cdcfe;">half_scale</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">half_scale</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">-</span><span style="color: #9cdcfe;">inner_size</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Chamfer vertices on the top (4)</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #569cd6;">f</span><span style="color: #ce9178;">"v </span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">-</span><span style="color: #9cdcfe;">half_scale</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">-</span><span style="color: #9cdcfe;">half_scale</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">inner_size</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>, <span style="color: #569cd6;">f</span><span style="color: #ce9178;">"v </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">half_scale</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">-</span><span style="color: #9cdcfe;">half_scale</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">inner_size</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #569cd6;">f</span><span style="color: #ce9178;">"v </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">half_scale</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">half_scale</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">inner_size</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>, <span style="color: #569cd6;">f</span><span style="color: #ce9178;">"v </span><span style="color: #569cd6;">{</span><span style="color: #d4d4d4;">-</span><span style="color: #9cdcfe;">half_scale</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">half_scale</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;"> </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">inner_size</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> ]</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><br /></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Define the faces for a chamfered cube (using the vertex indices)</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">faces</span> <span style="color: #d4d4d4;">=</span> [</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Bottom square</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #ce9178;">"f 1 2 3 4"</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Top square</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #ce9178;">"f 5 6 7 8"</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Side squares (4 sides)</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #ce9178;">"f 1 2 6 5"</span>, <span style="color: #ce9178;">"f 2 3 7 6"</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #ce9178;">"f 3 4 8 7"</span>, <span style="color: #ce9178;">"f 4 1 5 8"</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Chamfer triangles (8 triangles)</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #ce9178;">"f 1 9 2"</span>, <span style="color: #ce9178;">"f 2 10 3"</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #ce9178;">"f 3 11 4"</span>, <span style="color: #ce9178;">"f 4 12 1"</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #ce9178;">"f 5 13 6"</span>, <span style="color: #ce9178;">"f 6 14 7"</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #ce9178;">"f 7 15 8"</span>, <span style="color: #ce9178;">"f 8 16 5"</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Chamfer squares (connecting the triangles - 4 squares)</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #ce9178;">"f 9 10 14 13"</span>, <span style="color: #ce9178;">"f 10 11 15 14"</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #ce9178;">"f 11 12 16 15"</span>, <span style="color: #ce9178;">"f 12 9 13 16"</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> ]</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Ensure the directory exists</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">if</span> <span style="color: #569cd6;">not</span> <span style="color: #4ec9b0;">os</span>.<span style="color: #9cdcfe;">path</span>.<span style="color: #dcdcaa;">exists</span>(<span style="color: #9cdcfe;">directory</span>):</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #4ec9b0;">os</span>.<span style="color: #dcdcaa;">makedirs</span>(<span style="color: #9cdcfe;">directory</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> </div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Create a full system file path</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">file_path</span> <span style="color: #d4d4d4;">=</span> <span style="color: #4ec9b0;">os</span>.<span style="color: #9cdcfe;">path</span>.<span style="color: #dcdcaa;">join</span>(<span style="color: #9cdcfe;">directory</span>, <span style="color: #9cdcfe;">filename</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Writing vertices and faces to the OBJ file</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">with</span> <span style="color: #dcdcaa;">open</span>(<span style="color: #9cdcfe;">file_path</span>, <span style="color: #ce9178;">'w'</span>) <span style="color: #c586c0;">as</span> <span style="color: #9cdcfe;">file</span>:</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">for</span> <span style="color: #9cdcfe;">v</span> <span style="color: #c586c0;">in</span> <span style="color: #9cdcfe;">vertices</span>:</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">file</span>.<span style="color: #dcdcaa;">write</span>(<span style="color: #569cd6;">f</span><span style="color: #ce9178;">"</span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">v</span><span style="color: #569cd6;">}</span><span style="color: #d7ba7d;">\n</span><span style="color: #ce9178;">"</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">for</span> <span style="color: #9cdcfe;">f</span> <span style="color: #c586c0;">in</span> <span style="color: #9cdcfe;">faces</span>:</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">file</span>.<span style="color: #dcdcaa;">write</span>(<span style="color: #569cd6;">f</span><span style="color: #ce9178;">"</span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">f</span><span style="color: #569cd6;">}</span><span style="color: #d7ba7d;">\n</span><span style="color: #ce9178;">"</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #dcdcaa;">print</span>(<span style="color: #569cd6;">f</span><span style="color: #ce9178;">"Chamfered Cube OBJ file created at </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">file_path</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">return</span> <span style="color: #9cdcfe;">file_path</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;"><br /></span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #569cd6;">def</span> <span style="color: #dcdcaa;">create_cube_obj_file</span>(<span style="color: #9cdcfe;">filename</span>, <span style="color: #9cdcfe;">directory</span>):</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Create a full system file path</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">file_path</span> <span style="color: #d4d4d4;">=</span> <span style="color: #4ec9b0;">os</span>.<span style="color: #9cdcfe;">path</span>.<span style="color: #dcdcaa;">join</span>(<span style="color: #9cdcfe;">directory</span>, <span style="color: #9cdcfe;">filename</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Cube vertices and faces</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">vertices</span> <span style="color: #d4d4d4;">=</span> [</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #ce9178;">"v -0.5 -0.5 -0.5"</span>, <span style="color: #ce9178;">"v -0.5 -0.5 0.5"</span>, <span style="color: #ce9178;">"v -0.5 0.5 -0.5"</span>, <span style="color: #ce9178;">"v -0.5 0.5 0.5"</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #ce9178;">"v 0.5 -0.5 -0.5"</span>, <span style="color: #ce9178;">"v 0.5 -0.5 0.5"</span>, <span style="color: #ce9178;">"v 0.5 0.5 -0.5"</span>, <span style="color: #ce9178;">"v 0.5 0.5 0.5"</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> ]</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">faces</span> <span style="color: #d4d4d4;">=</span> [</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #ce9178;">"f 1 3 4 2"</span>, <span style="color: #ce9178;">"f 5 7 8 6"</span>, <span style="color: #ce9178;">"f 1 5 6 2"</span>, <span style="color: #ce9178;">"f 3 7 8 4"</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #ce9178;">"f 1 5 7 3"</span>, <span style="color: #ce9178;">"f 2 6 8 4"</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> ]</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Ensure the directory exists</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">if</span> <span style="color: #569cd6;">not</span> <span style="color: #4ec9b0;">os</span>.<span style="color: #9cdcfe;">path</span>.<span style="color: #dcdcaa;">exists</span>(<span style="color: #9cdcfe;">directory</span>):</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #4ec9b0;">os</span>.<span style="color: #dcdcaa;">makedirs</span>(<span style="color: #9cdcfe;">directory</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #6a9955;"># Writing vertices and faces to the OBJ file</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">with</span> <span style="color: #dcdcaa;">open</span>(<span style="color: #9cdcfe;">file_path</span>, <span style="color: #ce9178;">'w'</span>) <span style="color: #c586c0;">as</span> <span style="color: #9cdcfe;">file</span>:</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">for</span> <span style="color: #9cdcfe;">v</span> <span style="color: #c586c0;">in</span> <span style="color: #9cdcfe;">vertices</span>:</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">file</span>.<span style="color: #dcdcaa;">write</span>(<span style="color: #569cd6;">f</span><span style="color: #ce9178;">"</span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">v</span><span style="color: #569cd6;">}</span><span style="color: #d7ba7d;">\n</span><span style="color: #ce9178;">"</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">for</span> <span style="color: #9cdcfe;">f</span> <span style="color: #c586c0;">in</span> <span style="color: #9cdcfe;">faces</span>:</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">file</span>.<span style="color: #dcdcaa;">write</span>(<span style="color: #569cd6;">f</span><span style="color: #ce9178;">"</span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">f</span><span style="color: #569cd6;">}</span><span style="color: #d7ba7d;">\n</span><span style="color: #ce9178;">"</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #dcdcaa;">print</span>(<span style="color: #569cd6;">f</span><span style="color: #ce9178;">"Cube OBJ file created at </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">file_path</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">return</span> <span style="color: #9cdcfe;">file_path</span></div><p><br style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;" /></p><p>..</p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8995455167205656082.post-27558446112107914852024-01-10T02:04:00.000-08:002024-01-10T02:05:10.219-08:00set python env for unreal engine <p>go to project settings</p><p>find python in plugins category</p><p>and put your "site-packages" path on addtional paths -> index[0] input box</p><p><br /></p><p>refer to blew screen capture.<br /></p><p></p><p></p><p></p><p></p><p></p><p></p><p><img alt="" height="288" src="data:image/png;base64,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CAsLgyAIsNvtsFqtsNls7OJBRERERERERERENAr5fD54PB44HA4A3d09dDod9Ho9tFqt1L3Z6XTC6XTC7XbzIT4w6EFEREREY5hMJoNKpYJGo4FarYZSqYTD4UBbWxtsNttIl0dEREREREREREREA+D3+2G1WmG1WqHT6RAVFQWNRgO5XA65XA6ZTAaXy3XNP9zHoAcRERERjUmBkIdWq4VGo4EgCGhtbUVraysT3URERERERERERERjnM1mg91uh9FoRGRkJLRaLQRBAIBrPuzBoAcRERERjTmCIEghD61WC7/fD4vFAqvV2uvycrkcqampmDp1KtLT02E0GqHRaOB0OtHS0oIzZ87g6NGjqK2thdvtvspHQ0RERERERERERES9EUURLS0tcLvdMJlM0Gq10jyn0zliD/0lJibi8ccfl97/6U9/wsGDB6/a/hn0ICIiIqIxJywsDBqNBhqNBn6/H01NTX0O1ZKUlITbb78deUFHkyYAACAASURBVHl50Gq1UCgUEAQBgiBAFEUkJSVh8uTJWLRoEY4dO4Zt27ahurr6Kh8REREREREREREREfXFarXC7/cjJiYGGo0GoijC7/fD5XKNSD2BOgJiY2Ov6v4Z9CAiIiKiMUWpVEKtVkOtVgMAmpubew15KJVK3Hjjjbj55psxbtw4KJVKKdzR0tICm82G8PBwGAwGqFQqhIWFYfbs2UhKSsKOHTuwe/duOJ3Oq3141wSTyYTs7GyIooh9+/aNdDlEREREREREREQ0BthsNjQ3N8NsNkOtVsPn88Hv98Pj8QzbPlUqVa9hEpPJFPTebDb3ur5cLgcA+Hy+kNbFoAeNqFtuuQUrVqyAxWLB/fffL02Pi4vD5s2bAQBr165FbW3tSJVIREREo4hMJkNYWBjUajWUSiVaWlp6Ha5FqVRi1apVKCwsRGRkJORyOaqrq7F//36UlJSgvb0dfr8fMpkMkZGRyM3NxZw5c5CamoqUlBTccccdSExMxJYtW/rsFBJKgiAgNjYWMTExCA8Ph1wuh9frhdVqRWNjIywWy7DXQERERERERERERDTaWa1WKJVKREdHQ61Ww+v1SoGPUCssLMQdd9yBLVu24Pjx40HzYmJiLvseAIxGI1auXImOjg689NJLIQ17MOjRi40bNyIzMxPvvfceXn311aB5W7dulf77//2//4czZ85c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fn6+OBwJEiIiIiIaXkqlstfpI/XB9moSBAFqtRparRZarRZ+vx/Nzc0Y7k51Go0Gc+bMQWJiIk6ePBnydntERERERERERERE1JNer4fJZIJMJoPdbofdbofT6Qz5kC39FRUVhaVLl8JkMqG5uRl79uxBVVXVVds/gx5EREREY9S1HPQAAJlMBpVKBa1WC41GA0EQ0N7ejtbW1hH7cE9EREREREREREREoSMIAoxGIyIjIyGKIhwOB+x2O1wu11d6GPMrUYx0AUREREREg+H3++FyuQAAoihCrVbDaDRCo9Ggra0NNptthCskIiIiIiIiIiIiosHS6XSIioqCRqORhvR2OBzXfMgDYNCDiIiIiMYwv98Pp9MJv98Pn88HtVoNlUqF+Ph42O12WK1W2Gy2a/5DPxEREREREREREdFYIJPJoNPpoNfrodVqIYoinE6n9HK73ezoDAY9iIiIiGiME0URLpcLPp8PHo8HKpUKKpUKGo0GWq0WXq9X+iPA5XLB6/XC7/fzjwEiIiIiIiIiIiKiESQIAmQyGRQKBVQqFdRqNdRqNRQKBURRhNvthsvlgsvlgtvthtfrHemSRw0GPYiIiIjoK8Hr9cLn88Hr9cLtdiMsLAxKpRIKd8hk4wAAIABJREFUhQLh4eHQ6/UQRZHdPYiIiIiIiIiIiIhGEZlMBkEQIIqi9OCex+OB2+2Gx+OBx+Phg3uXYNCDiIiIiL4yAinvwB8BCoUCCoUCcrlcegmCIL2IiIiIiIiIiIiIaGSIoii9fD6f9PJ6vdKLAY/eMehBRERERF85oihKSW8iIiIiIiIiIiIioq8S2UgXQERERERERERERERERERERET9w6AHERERERERERERERERERER0RjBoAcRERERERERERERERERERHRGMGgBxEREREREREREREREREREdEYwaAHERERERERERERERERERER0RjBoAcRERERERERERERERERERHRGMGgBxEREREREREREREREREREdEYwaAHERERERERERERERERERER0RjBoAcRERERERERERERERERERHRGMGgBxEREREREREREREREREREdEYoRjpAoiIiIjo2qVUKke6BCIiIiIiIiIiIiKiEeXxeAa0PDt6EBEREREREREREREREREREY0RDHoQERERERERERERERERERERjREMehARERERERERERERERERERGNEQx6EBEREREREREREREREREREY0RDHrQsIqLi8PWrVuxdetWJCUljXQ5YwbPGxERERERERERERERERER9UYx0gWMRhs3bkRmZibee+89vPrqqyNdzpjm8XhQU1MDAHC5XCNbDICVK1di0aJFA1rHarXi7rvvHqaKQmfr1q29ThdFETabDefOncP+/fuxa9cu+Hy+q1wdERERERERERERERERERGFAoMeV8nChQtxzz33oLW1FT/4wQ9GupyQutyxtbS0YN26dSNUWU8tLS1S8ORiycnJAICmpibY7fageTab7SpUFjqXHoNcLkdsbCxycnKQk5OD6667Do899tioCN6Ewlf5d4uIiIiIiIiIiIiIiIiI6FIMetA1Zdu2bdi2bVvQNLlcjv/7v/8DALz44ov4/PPPR6K0kOntGARBwNy5c7Fq1SpkZWVh5cqVeO6550aoQiIiIiIiIiIiIiIiIiIiGizZSBdAoaVUKke6BBqFRFHE3r178dZbbwEA5s2bB41Gc9l1eC0REREREREREREREREREY0+7OgxADNmzMDatWtRXl6ORx55BAsWLMDChQuRkJAAp9OJkpISvPHGG2hsbJTWueWWW7BixQrpvdFoxNatWwEAv/nNb4I6L2i1WixfvhwzZsxAdHQ07HY7Tp8+jXfffRcVFRW91lJVVYVf//rXuOuuuzBt2jR4PJ6g4SvMZjOWLVuGKVOmwGg0wu12o7q6Gv/4xz9w4MCBXo8zMjISy5cvx9SpUxEdHQ2n04nTp0/jnXfewdmzZwd0bHFxcdi8eTMAYO3ataitrUV+fj4eeeQR+P1+fP/734fVau1Rw9NPP42EhAS8+eab+Otf/zqoczQcdDodli5diuLiYpjNZrjdbtTU1GDnzp3Yv39/yNcLtU8//RR33XUX5HI5xo8fjzNnzvT7WhrMuZ88eTIWL16M9PR0aDQatLe348SJE3j77bfR1NTU6zr93c9AfrcGUwcRERERERERERERERER0WjEoMcgRERE4J577sHXv/51WCwWdHV1ISoqCrNmzUJeXh7WrVuHlpYWAEBnZydqamoQEREBo9EIn8+Huro6AIDdbpe2aTab8eijjyI2NhaiKKKpqQlGoxHFxcUoLCzEE088gaNHj/aoJT4+Hhs2bEBsbCwaGxtRXl4uzcvIyMAj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7XO5UJ+jgWpsbMS6deuwZMkSFBcXw2w2w+v1oqysDDt37sS+fft6DakMdr3RZKDnXhRFPPXUUzhy5AhuvPFGJCcnIz4+Hl1dXSgpKcH27dvxxRdfDHk/wOWvv8HWQURENFJWrFghDe0GAAcPHsTmzZtHsKLhdy0eM41+zz//PMLDw6X3Tz75ZI/OhkRERERERERERCNFyM/PF+vr60e6DiIiIiIaoL6ClR6P5ypXMngDCYdeC67F0MO1eMw0+jHoQUREREREREREV9NAv9dnRw8iIiIioj7MnDkTDzzwQL+XF0URDocDXV1dqK+vR3l5OQ4fPoyGhoZhrJIotHjdExERERERERERjW4MehARERERhYggCNBqtdBqtYiJicGUKVNwxx134MiRI3j11VfR0tIy0iUShRyveyIiIiIiIiIioquLQQ8iIiIiomEkCAKKioqQlZWFP/zhDzh16tRIlzSqvPzyy3j55ZdHugwKsdFy3cfExGDu3LnSe6/Xi7/97W8jUgsREREREREREVGoMOhBRERERNRPXV1deOmll/qcH+hsEBcXh4KCAsTHx0vzwsPD8ZOf/AQbNmzAuXPnrka5RCExlq/7mJgY3HbbbdJ7l8vFoAcREREREREREY15spEuYDRpamriv/yX/17j/xIREV2O2+3GwYMH+3wdOHAAO3fuxOuvv46HH34YL7zwArxer7S+Wq3G6tWrIZPxYziNHbzuiYiIiIiIiIiIRhchPz9frK+vH+k6iIiIiGiAlEplr9M9Hs9VrmTw+jqG0WLmzJl44IEHpPetra1YvXr1kLYBAM899xz27t3bY9kVK1bgpptukt4fPHgQmzdvHmDVRENzta/74ZSbm4v//M//lN67XC6sXLnyius9//zzCA8Pl94/+eSTOHLkyLDUSERERERERERENNDv9flIFRERERHRMDp48CBOnjwZNG3WrFkjVA3R1cHrnoiIiIiIiIiIaPgw6EFERERENMx2794d9D4rK4vDWNBXHq97IiIiIiIiIiKi4aEY6QKIiIiIiL7qqqurg94rlUpERESgvb19UNuTy+V47bXXgqb94he/QEVFxRXXnTZtGn7yk59I77u6urBq1ap+7TcqKgpz587FtGnTYDKZoNPp0NHRgcbGRhw6dAgHDhyAw+EAACxevBjf/va3pXUv/u+LDWS4mouH02hr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FRWFoKAgcV1wcDCCg4PN7l9SUoL3338fmzZtGvA5vv76awQEBGDGjBniOicnJ6SmpiI1NdVkf0EQkJWVhVmzZlnwSkaOzMxMeHh44M477xTXSaVSzJgxw+gamFNWVoa3334bgiAMdZhXvYMHD5okepw+fRpNTU0WH+vHH3/EihUrxGUnJyfceuut4vLJkydRVFRkfbCDcPr0afz1r3/FE088IbZekslkiI+PR3x8fJ/jtFot3n77bZw+fXq4QiUiIiIiIiIiohGEiR5mbNmyBQDw6quvIjc3187RDD+JRILZs2cjLS0NoaGhcHFxgVqtxrlz55CRkYHDhw/bO0QaAMM8vpJNmzbhwIEDVp9Hq9WitLQUANgbnIiIaJh1dnbihRdewBNPPIHo6Oh+9z106BA+/PBDdHV1QRCEAVfe6O7uxptvvol77rkHc+fO7Xdca2srPv30UzQ0NIzaRA+gp6VGWVkZ7r///j7b1FxOr9dj7969+Prrr9HZ2TkMEV79srKycPfddxtVsDh06JBVx9q/fz8iIiKQlpZmdvvEiRPtlugBALm5uVi/fj2WL1+OyZMnX3H/4uJifPrppzh//vwwREdERERERERERCMREz3IiKEP+dSpUwH0lK+ura2Ft7e3+CvGI0eO4K9//atRT3gauWpra/st59zW1jao49fX12Pt2rVmt82bNw8PPvggGhoa8NBDDw3qPERERGReW1sbXnnlFcTGxiI1NRVTpkyBu7s7BEFAfX09iouLsX//fhQXF4tj1Go13NzcBnwOrVaLzz77DBkZGbjuuuswffp0eHp6QqFQoLW1FdXV1cjNzcVPP/2EtrY2TJkyxWj8aKxwceLECaxevRpxcXGIi4vDpEmT4OHhAYVCge7ubrS1teHixYs4c+YMsrKy0NDQYO+QryptbW1Qq9VQqVQAehKKjx49atWxBEHAe++9h+PHj2POnDkICwuDo6MjGhoacO7cOeTn59sydKucP38e69evx7Rp05CQkIDIyEiMGzcOrq6uUKvVaGpqwpkzZ3Ds2DH8+uuvo/I9RUREREREREREtiOJjY0VKisr7R3HiHK1VPSwpqXG448/jrS0NLS2tuKdd97BL7/8AqCnXHV6ejruu+8+ODk54YcffsCnn346lOHTINl6HvfVuqU/TPQgIhpahjL/vWm12mGOxHp9vQYa3aZP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0aOSqns5a9++fY35tU2THNtetpi/GZ2enm5pu1lwcHCDPtP9kruPDWfa9N1336msrEzR0dF1dl/vSBvN+3vgwIFq3bp1jfnueAnrKj4+PnrsscckSSdPntTBgwct81x5PJg5so/NL9q8vb1rTYi47rrr7I6jKa8XdXH0WuJqjbGvm5uioiKlp6erdevWGjJkiCRp9+7dlvnff/+9TCaTunXrps6dOys/P19nzpxp1Jj27NkjqfqLKLVd95988km9+OKLlpf4TcmV9ytH2tkY531DNPW54My1KCUlRZIUFRVl2XYNHbbFzN3nRV3td+Yzgaenpzp16lRj+tChQ2UwGGQymZSWllZvfFfDtREAAABNh7enDbBz504VFRWpd+/elpf5HTt2VI8ePVRUVKTU1NQ6y5vHXywoKLC5jLmXAvM3Gy7/v73jNl8+3mNQUFCNfxUVFW4b77Epxgtmf9nH0fY6Wq4ub7zxhpYuXapTp06pT58+uv/++zV//nwtX75cY8eOlbc3o00BAGCP1NRUZWVlycvLS9OmTbN6eezj46OEhAQ9//zz8vLyskw3vzyJi4vTzTffbHlQbjAYdN9998nDw0OVlZU6ceKEU/XY0pT1m3sUa9u2reUFz+Xf8q1vvit99913KigokIeHhyZNmqS2bdta5g0ePFjjx4+vtZwj28sW8zek+/XrZ7UNY2JiNG/ePEtCgj3bwN3HhjNtKi0t1e7du+Xj46MBAwbowoULOnTokEvauG3bNpWWlsrX11ePP/645bO1h4eHhg8frttuu63e7dHceHh4qFevXnr++ed1/fXXq7S0VMuWLbNK8Hfl8WDmyD4+e/asZejJ+++/3/IFBS8vL40aNUp33HGH3e1vyutFXRy9lrhaY+zrxvb4449r1apVSkpKanAZc08EkZGROnfunH766SfLvMLCQqWlpal79+4yGAzav3+/y2P+JfN29/b21pQpU+Tv7y+p+ti+77771LVrVxmNxhpDUDUFV96vHGlnY5z3DdHU54Iz16Ls7GylpaWpTZs2CgwMVGFhoUPHrTvPi7ra7+znnKefftoqIahLly769a9/LUnau3dvg3opbonXRgAAADRfvDVtAKPRqM2bN+vuu+/WrbfeqpUrV1p6h9i8eXO93fyZe7e4/AHLLwUGBkqSSkpKLNMcHVvX3KXixo0b9d5779lV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p/zhD3+wq9+6deuIjY3F19eXBQsWkJGRQZs2bXB3d+fnn38mNzeX4OBgWrdubelTVFTEggULeOGFF+jZsyf//d//zfnz53F3d8fT05O0tDQ6duzYIHM1xvptMW3atGoDVgA2bNhAfHw8ly5d4n/+53944oknGDRoEP3797eswcPDgx07djBo0CC75j569Cg5OTl4enoyb948CgsLee211yxZS+bNm8err75Kt27dWLhwIenp6bRu3Rpvb28Atm3bxurVq+2aU0RERFoWR0dHXnjhBYKCgjh48CA7d+6kVatW9OvXjwcffJBbbrmFpUuXWvW56667uHLlChs2bGjw9TTm2Laoy/2or5SUFFJSUuo1RnPfNxERkebm7u7Oyy+/jKenJ9999x1ZWVn07NmT8ePHc9NNN/Hxxx/bPFavXr0smV/79evH1q1bG2vZ0gi0L2p+cXFxlvcXd+3aVWOQh9FoJDY2lsTExGpLaW/YsIHAwECioqLw9vYmLi6OdevWNfi68/LyWL9+PXFxcY0STFJUVMSmTZvIy8tr8LFFREREbjQK9Kgjc/mW0NBQm/ukpaXxwgsvMGXKFLp27Yqfnx8ZGRmsWbOG1atX88gjjxAcHMzNN99s1e/777/nlVdeYcKECdx66620a9eOtLQ0Vq5cycWLF3n22WcbbK7GWH9tqis/Y3Z1lPiWLVvIzs5m7Nix3HLLLbRt25azZ8/y8ccfs2vXLvr372/X3AUFBbz99ts8+OCDBAUFceXKFZycnCzn09PTee655xg9ejSRkZH4+flRWlrK0aNH2bhxI1u3blUaQRERkRtcdHQ0QUFBbNiwgeXLl1uOr127lqeffpqYmBh2797dqOmRDQZDtW/qNrWmuh/X23WLiIi0dHfddRe+vr589NFH7Nq1C6j4cPixxx5j4MCBbNmyhZ9++smmsaKjo7l06RIFBQUMGjTIpkCPml7b9bovvyYODg6MGDECgOLiYlasWFFj+wcffJBBgwYREBDAJ598Um27FStWEB4ejrOzMyNGjCA+Pp6ysrIGXTvAypUrWblyZYOPKyIiIiL2MYSGhppSU1Obex1SR0OHDmXGjBkUFhYyderU5l6OiIiINKGrgxOvVlJS0sQrqbury9JdryZOnMjw4cP54IMPOHjwoNW53r1789vf/pb4+HgSEhIsba/2888/8/bbbwPg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yzHzz8/X15fZs2dbjp85c4bPPvvMaozy8nIuX76Mj4+PzVl66uPqAA0HBwdat25NYWFhrf1atWplFVymQA8RERER+ynQowVITU3ln//8J6GhoXTs2JH27dtTWFhIUlISW7ZsITEx0aYPF0RERESk7g4ePMjBgwfx8PCgb9++DBkyhAceeIC+ffvywQcfVHqTtiqBgYHExMTQoUMH3N3dMRqN+Pj4ABVv6jYn84cQfn5+NrW35X64urri6urKyZMnK+1XDxw4UOOHME1xHWvWrCEgIIDx48czYsQIjh8/zo8//siePXsoKipq8LWJiIi0dIMGDQIqHjoy713279/P2LFjGThwYJWBHnVhy55p165djB8/3hLo0blzZ7y9vdmxY0eNr+Pm/YnJZOLvf/+71TknJyegomRKVYEe9elrlp+fD0BBQYHVcfP3zs7ODTaXOZjW1mwt0jTc3NwALJlbrhYXF0dMTEyV/ZycnAgMDLR8HxgYSGpqKhs2bLBql5ubi4+Pj2WexpSXl2f1vaurq02BHteu7dpxRERERKR2CvS4SkZGBu3atbvuviYnJ9OuXTsWL15c6fyrr77a7OvTV/u+ioiISMuWm5vLli1b2Lp1K9OnTycqKoqBAwdaPWlZldjYWO677z7S09PZtGkT2dnZmEwm7r77boKCgppm8TUoKyujrKzM8sGBrep6PxqLPddRUFDAu+++S1BQEH369CEkJIT777+fsWPHsnDhQn766acmWLGIiEjTKC8vx2AwVDpuPlZWVlZjf6PRyMCBAwF49dVXK52PjIzkiy++oLS0tF7rtHXPdOXKFQ4dOkRERAS+vr5EREQAtZdtMQefXrx4kS+++KLKNunp6Q3e11bmn0dTzCXNIy8vDw8PjypLnSQkJODv72+V0cPf3x8nJydKSkpITU21HD9z5gwJCQmVxjCP2xTBE9fO4ebmZpWlsDrXXrsCPURERETsp0CPq5g/hNdXfW3MryIiItKyvPjiixiNRubMmWN13GQysXPnTqKioggKCqo1sGH06NEUFRUxd+5cq9TE1T2xZw/zU6vm0n514ePjg4ODAzk5OTW2s+d+5OfnU1BQQLt27TAYDFZZPdq1a4enpyfJycm1frDUGNcBFW+al5SUkJKSQkpKCqtXryYwMJCXXnqJ+++/3yo1toiISEuXk5ND27ZtMRqNVpnI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x7Jly0hMTGzStQPMmjWLHj161Ln/0aNHmT9/fgOuSERERK53+fn5+t2nCjk5OXa1V0YPEREREREREREREZFmkJiYyPnz55k2bRre3t44OzsTGxtLbGwsAJmZmZYPQ/z8/Cr1z87OZsmSJU2eycMsNTW1XoEeeghVREREpG4cOnTo8Gpubm5zr0NERERE7OTg4FDlcXOd55agdevWzb0EERERkWZnzshWXcY2EbmxZWVl8d1331FYWEjnzp2t/l/g5uaGl5cXbm5uVn0KCgpYvXo1H330Eenp6U29ZIv09HTCwsLq9FRuVlYW//znPy1ZjUREROTXoaSkRL/7VKGoqMiu9irdIiIiItJCqXSLiIiIyI1BpVtExMxoNNKzZ0969uxJt27dMBgMBAQEcObMGUwmEydOnODIkSMcOXLkugnyN6/RXuZrEhERkV8XlW6pmkq3iIiIiIiIiIiIiIi0QOXl5fz444/8+OOPzb0Um5lMJk6fPt3cyxARERH5VTE29wJERERERERERERERERERERExDYK9BARERERERERERERERERERFpIRToISIiIiIiIiIiIiIiIiIiItJCKNBDREREREREREREREREREREpIVQoIeIiIiIiIiIiIiIiIiIiIhIC6FADxEREREREREREREREREREZEWQoEeIiIiIiIiIiIiIiIiIiIiIi2EAj1EREREREREREREREREREREWggFeoiIiIiIiIiIiIiIiIiIiIi0EI7NvQARERER+fXKz89v7iWIiIiIXDe0NxIRERERkV8D/e5Tf8roISIiIiIiIiIiIiIiIiIiItJCKKNHFb766qsqj5tMJvLy8jh9+jTbtm0jMTGRsrKyJl5d83Fzc+Pee+8lMjKSdu3aYTKZSEtLY+vWraxZs6bKe1HVvSwrKyM3N5eUlBT27t1LYmIiJSUlTXEJIiIicp1xdXVt7iWIiIiINDvz02zaG4mIiIiIyI0uPz9fv/tUIScnx672CvSoQUZGhlXaGAcHB9q3b09ISAghISEMGTKEt956i6KiomZcZdPw8/Pjtddew8/PD4CLFy/i4OBAUFAQQUFBhIWFMWfOHEpLS6vsf/W9dHBwwMfHh7CwMMLCwhg9ejR/+ctfSElJaarLERERERERERERERERERERaZEU6FGDJUuWsH//fqtjBoOBmJgYHn30UXr0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asy56rsnkvo5d+4cUFGmp2vXrg06dteuXS3lf8zzNKaqMnrYQqVbREREROpPGT1EREREpMUpKysjMTGRO++8E29vb8vx7OxsEhMTKSsra5B5XF1dCQsLIzk5maysrErnL1y4QHJyMr1798bd3Z0rV67w9ddfc+utt/L73/+ezZs3c+HCBUJCQujSpUul/va0rc4vv/xC9+7dmTp1KseOHWPv3r1Vtvv3v/9Nr169+O1vf0tQUBBpaWnceuuthIWFcfToUbZv3277jblKUlISERERPPLII5w8eZKOHTsyYMAACgoKaN26daPXhLdnflvvVXXWr1/P+PHjeemll9i5cyelpaWEh4fj7u7O2rVrG/rSRERErht12RPVlT2v7eXl5ezcuZORI0cCsGPHDpvmWLVqFSEhITz00EN06dKFc+fO4eHhQVRUFIWFhbz22muN0tdejTVXffdEUj+HDh0iLi4OgPDwcI4fP95gY4eHh1vN09iu/bdeVTmaqlzbThk9REREROynjB4iIiIi0iIVFxeTkJBAbm4uALm5uSQkJFBcXNxgc0RGRuLk5FTjm9979+7FwcGBAQMGAJCcnMxf//pXzp49y9ChQ7n33nvJzc3lnXfeqdTXnrbVWbZsGSkpKQwaNMjqjd1rXblyhblz57J9+3ZCQ0MZP348nTp1Ys2aNbz//vtWKaPt8dlnn7Fjxw569OhhGXPhwoUcPnwYoNFL09gzv633qjrffvstCxcuJC8vjzvvvJPRo0fj7OzMp59+yqpVqxrsmkRERK43ddkT1ZW9ewtzcEdKSgppaWk2zXHp0iXeeusttm/fTlhYGJMnT+b222/n9OnTLFmypNH62qux5qrvnkjq5/jx45YMFjExMXh5edXYPjk52eprdby8vCwljvLy8ho0gKQ6yughIiIi0nwMoaGhptTU1OZeh4iIiIjYqbp0yyUlJU28kroz14+uDycnJ9q0acPly5db1LWLiIiImOXn5wO2Pw0v/yciIoIZM2awbNkyEhISmns5IjYZOXIk48aNA2DXrl189NFH1bY1Go0MHTqUTZs21Ric/fDDD1vK/KxcuZJ169Y17KKr4OjoyKJFiyzfr1u3jpUrV9bab9y4cZZMPACPPfYYpaWljbJGERERuf7k5+frd58q5OTk2NVeGT1EREREpEUrKSnhwoULCvIQERER+ZUxGAyMGjWK4uJidu/e3dzLEbFZQkIC2dnZAERFRVlKuVSlvLycjRs31hjkERcXZwnyyM7ObrKgp9LSUoqKiizf2/qBzdUZPYqKihTkISIiIlIHCvQQERERERERERGRFmXkyJE89dRTdOrUifj4eK5cudLcSxKxWXFxMUuWLLEEb0yaNIlhw4bVaaxhw4YxadIkoCIoZMmSJQ1azrI2V5ddsbV0y9UBIfq3KyIiIlI3js29ABERERERERERERFbGQwGRowYgclkIj4+ntWrVzf3kkTsdvToUZYvX86UKVMwGo1MnjyZ4OBgvvrqK0u2j5p4e3szYcIEIiMjLce++OILjh492pjLriQvLw8fHx8A/P39GTJkSK19/P39rfqLiIiIiP0U6CEiIiIiIiIiIiIthslk4qmnnmruZYjUW0JCAuXl5ZZgj8jISMLCwti+fTsHDx4kKSmpUp+QkBDCwsKIjo7G2dkZqMjksWzZMhITE5v6Eqwycvj7+3P//ffb1V+BHiIiIiJ1o0APEREREREREREREZFmkJiYyPnz55k2bRre3t44OzsTGxtLbGwsAJmZmeTn5+Pq6oqfn1+l/tnZ2SxZsqTJM3mYpaam0qNHj3r1FxERERH7OXTo0OHV3Nzc5l6HiIiIiNjJwcGhyuPmOs8tQevWrZt7CSIiIiLNrqSkBAAnJ6dmXomINIesrCy+++47CgsL6dy5s9X/C9zc3PDy8sLNzc2qT0FBAatXr+ajjz4iPT29qZdskZ6eTlhYGK6urnb3zcrK4p///Cf5+fmNsDIRERG5XpWUlOh3nyoUFRXZ1d4QGhpqUtSsiIiISMtT3WbY/EFBS+Dp6dncSxARERFpduYPOevyQamI3FiMRiM9e/akZ8+edOvWDYPBQEBAAGfOnMFkMnHixAmOHDnCkSNHrpsgf/Ma7WW+JhEREfl1MWcrE2s5OTl2tVfpFhERERERERERERGR60B5eTk//vgjP/74Y3MvxWYmk4nTp0839zJEREREflWMzb0AEREREREREREREREREREREbGNAj1EREREREREREREREREREREWggFeoiIiIiIiIiIiIiIiIiIiIi0EAr0EBEREREREREREREREREREWkhFOghIiIiIiIiIiIiIiIiIiIi0kIo0ENERERERERERERERERERET+P3t3Hh5Flf5//92dPSEL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xDuMguAo8up3pcgvErf04/gkbcKYthdDSa6rwxMRERGpViwe/pjrd6CkaU8KQtph8vADwGgqxuPCWRdHJyJyUY1P9Ni2bRujR48mJyfH4XWnpaWRmJhYqWMOHTrEuXPnCA0NpVOnTmRmZuLv709xcTE7duxweIwVKZt5IzAw8IplgoKCACgoKLghMYmIiIiIiIiIiGsUBjS/OJOHXySeSVvw2DkNSh3/LE1ERESkNjAAbln7cUtYRknseIqa9sCtbj7uRRlK9BCRasPo6gCux/fff899993nlCSPqrJYLNaZO2JiYujSpQsAO3futCZgONvp06eB/y3hcrnAwED8/f0BSElJuSExiYiIiIiIiIiIaxTXaUqR/8WZPJTkISIiImKn0hw8dk7DLf04Rf6RFNdp6uqIRESsamyix/z583n00UcpKipydSjlrF+/HoB27drRuXNn4MrLtpjNZgCMRsedip07dwIQHR1NWFhYuf133XUXAPn5+TZL04iIiIiIiIiISO1T7BNOqZsfHsmbleQhIiIiUhmlOXgkb6bUzY9in3BXRyMiYlUjEz2mTZvGiy++iMlkcnUoFUpNTeW3334jICCAunXrkpOTw759+yose/78eeDiLBtNmjQBwGAwXFf7O3bsIDExEYPBwLPPPktISIh1X6dOnRgyZAgAS5curZaJMiIiIiIiIiIi4jhmD38MpYUY0/a7OhQRERGRGseYth9DaSFmD39XhyIiYuXu6gAqw2w2M2HCBD799FNXh3JNGzZsoHXr1gBs2bLlikkphw8fJjs7m8DAQKZPn05hYSGvv/46x48fr3LbZrOZ6dOnM3nyZFq2bMns2bNJTU3F29ubunXrArB582a+/fbbKrchIiIiIiIiIiI1g8XohsFshtICV4ciIiIiUvOUFmAwm7EY3VwdiYiIVbWf0ePEiRMAFBcX89hjj9WIJA/43/IpcOVlWwAuXLjA1KlTOXLkCMXFxeTl5eHh4XHd7aempjJ+/HiWLVvG2bNnqVevHt7e3hw+fJj333+fmTNnYrFYrrsdERERERERERGR+fPnk5WVRcuWLV0dikiVPf7442RlZTFmzBhXhyJOMnnyZLKyshgwYMBVt9XU17SaGrerVXQN1Hbz5s3TtSIiUsNV+xk9/vznPxMXF8f69ev59ddfb0ibI0aMuO46OnToAMCZM2eIj4+/atn4+HheeeWVctu3b99+1Vh+/vnnq+7Py8tj4cKFLFy40K6Yr9Xeli1b2LJli111iYiIiIhcTc+ePa1LFxYWFvL11187pZ1hw4bh4+MDwKlTp9i4caNT2hEREfm9efjhh/nXv/5Fp06drvnsq6aqbX2sbf2pjiIiIvjb3/7GnXfeSWBgIKdPn2b16tVMnz6d9PT0Kx5XG85Nde2DPXF9++23JCQkcODAgRvWpiOMGzeOgoIC/v3vfzutjaqq6r1QpkOHDrz22mt07doVg8HAvn37mDVrFitWrLjqcVUd+ytdA9V5jEVERKp9osepU6eYNWuWq8OoFIPBwNChQ4Grz+YhIiIiIuJKrVq1olOnTuzYscNlD2MPHTpEXl6e0+rft28fderUoV27dk5rQ0RE5PdozJgxbNu2rVp9oOtota2Pta0/1U2TJk1Yt24dQUFBfPbZZxw5coTY2FiefPJJevfuTa9evSguLq7w2NpwbqprH+yJ65dffuGXX365oW06wrhx40hPT692SQjXcy8AdO7cmW+//RaTycTs2bMpKiri/vvvZ8GCBbz88svMnj37isdWdeyvdA1U1zEWERGBGpDoUdMYjUaGDBlCREQERUVF/PDDD64OSURERERquNDQUO666y6OHTvGzz//7OpwHCohIYGcnJyrlgkMDCQuLo727dvj4+NDeno6W7ZsYc2aNddcjvD48eP4+/sr0UNERMSBbrnlFm699VaeeOIJV4fiNNWtjwaDATc3N0pLS6t0fHXrT200fvx4QkNDeeKJJ/jiiy8AmDNnDhaLheHDh9OnTx9WrVpV7rjacG6qax9cEVd1HYsbqar3Qpm3334bb29v4uLirDMyfvjhh+zatYvXXnuNL774goyMjHLHaexFROT3xujqAGqTv/zlL3z++eeMGjUKgAULFlzzobWIiIiIiFxZnTp1mDBhAp07d2bXrl0sXbqUc+fOMWzYMB5++GFXhyciIvK7NGbMGHJzc1m+fHm5fYGBgbz33nskJCSQmJjIkiVLuOmmm8qVq1+/PjNmzODIkSOkpaXxyy+/MHHiRDw9PW3KzZ8/n/T0dCIiIpg7dy5JSUmcOnWK+fPnExISQlhYGP/5z384efIkycnJzJkzB39//3LthYaG8v777xMfH09qaipbt261PsOzt4+OiqVx48bMnj2bgwcPcubM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PV9JRWPsjPvTnmvD0a+vl1u0aBF33nknw4cP56WXXuLtt9+uVLvTp09n0KBBzJgxgw4dOhAfH0+XLl1sEk7K2DuG13v+qoMWLVrg7e1NYGAghYWF5OTkkJ6eTlZWFiEhIQQHBxMYGIjRaLTOtJOeno6vry8hISEEBgZSp04dsrOzyc7O5vz583YtkXOjZGVl8c0332AymejUqRP169dn1KhRALi7u1NcXMyuXbtYvnw52dnZLo5WpPbRjB4iIiIiIrWYxWIhNTUVPz8/GjZsaLMvJCSkXNmTJ0/i6elJs2bNbPa5ubnZfIvG3d2drl27UlxczI4dOzh48CChoaG0atXKofEfPHgQd3d3OnfubLO9W7du1v0iIiLiXKGhofTv358FCxY4JKEzPT2dfv36sXDhQu6++25ef/11brnlFqZPn87IkSOtS9E5ytmzZ+nduzeLFi3i7rvv5q233uKRRx5h79691m9NO7qPV/LCCy+waNEibr/9dqZMmUK7du0YPXq0dXkCe5YTcVR/HBFLVes8c+YMfREjZqoAACAASURBVPv25dtvv2XEiBG89tpreHl5MWbMGN555x1rfc66Vnbt2sWwYcM4cOAAf/7zn5k4cSLnz59n4MCBVe7Tr7/+SpcuXVi4cCH9+vVj8uTJdOjQgQ8++IA+ffpYZ8az59zYc46r6ptvvuHChQv89NNPNsszlJk5cyYPPfQQWVlZPPPMM/ztb3/D29ubp59+mjfeeMOuPpQtsXL48GE++eQTAIqKivh//+//4ePjw6xZszAYDA4v5+j7+NixYwwZMoTGjRszadIk4uLiWL16Nffccw/nz5+3aywu9fTTT3PLLbcwadIk+vXrx/fff88999xDZmZmubJlyR179uzhyJEjFdY3YcIE9uzZw6hRoxg8eHCl++es+8veewEuzvIxc+ZMOnbsaN3m6+vLqVOnGDNmDG+99RYPPvggW7ZsoX///ixfvtxazp6xt+d6vpqKxtgZ96c914ajX18r8vzzz5OUlMT48eO57bbbKtVufHw8AwcOZOvWrYwePZpXXnkFNzc3Xn311XLt2DuG13v+qoPo6Gh69OjB4MGD6devHx07diQ8PByj0UhERASxsbEMGDCAgQMH0qVLFyIjI/H09CQkJISoqCh69+7N0KFD6dWrF23atCEwMNDVXSonOzubZcuWsX37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JiJipUQPERERERERERGR2sxiwSv/JEZTER6F6RTlJVLiE47Jwx+L0c3V0YmIiIhUKwazCbeSXDwunMUrNxGv3AQ8CtPAYnF1aCIiVkr0EBERERERERERqe0sFjwupOJxIZU6adtcHY2IiIiIiIhcB6OrAxARERERERERERERERERERER+yjRo5YaOHAgX375JbNnz3Z1KCIiIiIiIiIiIiIiIiIiIuIgWrqlAl9++WWF24uKikhPT+fQoUOsXLmS06dP3+DIqq+KxsxkMpGbm0tiYiI7d+5k/fr1lJSUuCA6ERERERERERERERERERGR2kGJHleRlpZGQUGB9ffAwEAaNGhAw4YN6d27N++//z5bt251YYTVz6Vj5ubmRnBwMB06dKBDhw7ExcUxbdo0EhMTXRukiIiIiIiIiIiIiIiIiIhIDaVEj6uYN28eu3fvttkWGhrK2LFjiY6O5qmnnuLXX38lKyvLRRFWP5ePmcFgoE2bNjz88MNERkYyZcoUJk6cSEpKigujFBERERERERERERERERERqZmMrg6gpjl37hzvvfcehYWFeHl50blzZ1eH5DIeHh7XLGOxWPj111959dVXSUhIwMfHh2efffYGRCciIiIiIiIiIiIiIiIiIlL7aEaPKsjPzyc5OZmWLVsSFhZWbr+vry/Dhg2ja9euhISEUFBQwG+//cbSpUuJj4+3Kdu1a1fGjRvHkSNHeOWVV+jbty8DBgygYcOGFBYWcuDAAT7//HNSU1MrjKV58+bcd999tG7dGg8PD5KSkvjuu++u2YeqxJiQkMDf//53Ro8eTadOnSgpKWHs2LF2jVlRURH//ve/mTZtGjfddBNRUVHs37/fpoyfnx9Dhgyhc+fOhIaGUlxcTGJiImvXrmXz5s1XrDsoKIhhw4Zx6623EhISQmFhIb/99hvffPMNx44dsys+ERERERERERERERERERGRmkCJHlXk4+MDQEFBgc320NBQJk2aRFhYGBaLhbS0NIKDg+ncuTMxMTH885//5JdffilXX0BAAI8++ij9+/fn3Llz5OXlUbduXbp370779u0ZP3486enpNse0bduWV155BXd3d0wmE6mpqTRo0IDnn3+e06dPXzH2qsbYoEEDXn/9dcLCwkhNTeXIkSOVGrPExEQSEhJo3rw5HTt2tEn0CAsLY/LkydSrVw+z2Uxqaiq+vr60bduWtm3b0rFjRz744AMsFotNnU2aNGHSpEkEBARQWlpKWloaISEhdOrUiY4dO/L++++zZcuWSsUpIiIiN87lf0s5m8FgICcn54a2KSIiImIv/Z0iIiIiIiK/Bzf6uXBtpESPKoiMjKRRo0YANgkRRqORF198kbCwMBISEvjnP/9Jeno6Hh4ePP7449xxxx089dRTPPXUUxQXF9vUGR4eTn5+Ps8884x19o6WLVvy6quv4u/vz5AhQ5g7d661vIeHB08//TTu7u4cPXqU6dOnk5mZidFopG/fvjzyyCMVxn49Mfr4+JCens6rr75Kfn5+lcYuMTGR5s2bEx4ebhPTuHHjqFevHsePH2f69OmcP38egC5duvDcc8/Rq1cvEhMTWbFihfU4d3d3XnjhBQICAjhw4ADvvfceubm5uLu786c//Ym77rqLJ598koMHD5KdnV2leEVERERERERERERERERERKoTJXpcRUhIiDWhAy4ud9KiRQuGDh2K0Wjk66+/5sSJE9b9Xbt2pXnz5phMJt577z3rDBwlJSV88sknxMTEEBgYSGxsbIWzTPzjH/8gKyvL+vvRo0dZt24dAwcOpH379jZlO3fuTL169bBYLLz//vtkZmYCYDab+eGHHwgPD2fQoEHl2rieGC0WCx988EGVkzzgf9lZfn5+Nn2JjIzEYrEwY8YMa5IHwI4dO1i+fDnDhw9n6NChrF692pqA0r17dxo1aoTJZGLmzJnk5uYCUFpayrx584iOjiYsLIyYmBh+/PHHKscsIiIizuPr6+vqEERERERcrux5if42EhERERGR2q6goEDvfSpQ2YkLlOhxFX/+858r3G6xWPjwww9Zu3atzfbY2FgAjhw5wtmzZ232FRUVkZCQQHR0NC1atKgwieLSJI8yp06dAqBu3bo226OjowE4fPhwubaAcsu8OCrG650Zo2zpFYPBUC6mAwcOcObMmXLHrF69muHDh+Pv70/r1q2tS77ExMQAsGfPnnJjZzKZ+Prrr2nWrJlN4oiIiIiIiIiIiIiIiIiIiEhNpkSPq9i3b59NwoS3tzc333wzoaGhPPzwwxQUFLB161br/rLZP5o0acK0adPK1RcaGgpAQECA3TFcuHABuLhUy6UaNmwIQHJyst11OSvGyihL8ChL+ACIiIgArtyXrKwscnNz8ff3JyIiwpro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eXt7q0OHDurQoYPCw8M1d+5cSefKfiYlJcnT01O+vr6yWq06efKkJMlsNl/2Xv1edna2rFarTCaTIiIilJycXKFNaWmp7r//fhkMBpWUlDjcq0kcERERmjx5spycnGS1WpWenq6mTZtqwoQJ2r17d5X2tDpquleenp4aM2aMbrnlFvs74OPjo169eqlTp06aOHGiMjMzHfq0bNlSU6dOlaenp0pLS5WRkSE/Pz9169ZNXbp00fvvv6+NGzfWSny1pbLnERISomeeeabS9+FCqvruBgUF6aWXXpK/v7/KysqUnp4uNzc3RUREKCIiQl26dNEHH3wgm81WYY6QkBBNmzZNQUFBSk9P16FDhy5/AwAAAAAAqCKr1UrSBQAAAABcI0j0qAVGo1HPPfecgoKClJiYqJkzZyozM1POzs565JFH1K9fP40bN07jxo2rkGzg7++v1NRUPfroo8rJyZHRaNTo0aN16623qnPnzpo6daoOHz6st99+W2azWZ6enpo0aZLatGmjv/71r3ruuecqxBMWFqZjx47pySeftFdu6NOnj5544gmFhoZq5MiRmjdv3iXXZTAYNH78eLm6umrbtm364IMPVFBQIJPJpDvvvFPDhg3Tn//8Z8XHx+vEiRNav3691q9fr1tvvVVjxoxRTk6OJk6cWGt79Xtms1nr1q1T//799cADD6isrEzx8fEV/qNFcXFxrTwzZ2dnPfHEE3JyctJvv/2mN998U9nZ2TIajRo4cKAeeuihS+5pdVzOXgUHB6ugoEDjx4+3vwNt2rTRlClT5OHhodtvv12ffvqpvb2Tk5OeffZZeXp6au/evXr77beVl5cnJycnjR49WjfffLPGjh2rX3/9VTk5OZcdX2241PN48MEHqzxWVd/dCRMmyN/fX0ePHtWbb76pM2fOSJJ69Oihp556Sn379lVSUpK+//77CnO4uroqMzNTU6ZMUUFBweUtHgAAAAAAAAAAAMB1y9jQAVwLYmNjFRYWJqvVqrffftteKcFiseiTTz5RXl6evLy81L179wp9bTab3nnnHfuH52VlZZo/f77y8/MlSS4uLnrvvffsVQVyc3M1f/58AlM4nQAAIABJREFUSVKrVq3k6+tb6Zivv/66w/EcGzZs0IoVKyRJAwcOVKNGjS65Ljc3N2VkZGjPnj36/PPP7R9OW61WLViwwB5zp06dqrZRury9qsynn36q7du3y9nZWY8++qg+/vhjPfTQQ4qOjpazs3OtxhETEyN/f3/ZbDa9//77ys7OlnTuma1cuVI///xzlfehKi53r37/Dvz2229as2aNpIrPrFevXmrWrJmsVqvee+895eXlSTpXEWXOnDlKT0+Xi4uLunbtWmvxXcjw4cP1/PPPV/onPDzc3u5Sz+PHH3+s1ryXEhMTo9atW8tms+ndd9+1J3lI0pYtW/Tdd99JkoYNG1bpz5fNZrMnSwEAAAAAAAAAAABATZHoUQvKP8g+dOiQ0tLSHO4VFxcrMTFRknTDDTdU6Guz2ZSbm+twraSkxH5sxKFDh+wfupdLSkqyfx0cHFzpmL8/lkOSVq5cKelcZYHzPzC/kIKCAk2fPl3Tp093SBgonyMjI0OS5OHhccmxyl3OXlWmuLhYM2bM0Ntvv63ExER5e3vrlltu0d/+9jf9+9//1r333itXV9daiSMyMlKSdODAgQp9JMcjPmrD5b5XZ8+erXD91KlTkiQfHx+H6+UJHDt37qzQz2q1avHixfrxxx8dkhtq+1mWa9Omjbp3717pn/PjvtTzqOxn4HKUr3fv3r1KTU2tcL88kcrDw0Pt2rWrcN9ms9mTowAAAAAAAAAAAACgpji6pRY0a9ZMktSyZUu98cYbFe4HBARIkjw9Pas8ZnnyR3llj/MVFRXZv27cuHGVx0xOTlZxcbFcXFzUrFkz7du3r0r9nJ2d1blzZ7Vq1Uru7u4ymUyS/m9dBoOhyjHUxV5J0qZNm7Rp0yYFBwerS5cuiomJUUREhIYOHarY2NgKySo1iaNp06aSpBMnTlQrtpqqi70qLCyUpArVTsrXlpycXGm/+Pj4eolPkmbNmqW9e/dWeu/8pKj6fh7Nmze/6Hxnz55VXl6ePDw81Lx5c+3Zs6de4gIAAAAAAAAAAABwfSHRoxaUV4xwdnauUClBOnf8RU5OjoqLi6s8ps1mq1K76iRZSFJWVpZCQkLk5uZWpfZ9+vTRgw8+WK2qHRdTF3t1vrS0NC1fvlzLly9XaGionn32WYWEhOi5557T888/b9/XmsRRvmflR4TUtbreq/O5uLhIUoXqMg0RX15eXpWqcTTU87hYVY6zZ8/Kw8Ojyj9fAAAAAAAAAAAAAFBdJHrUgvIKG2vWrNFnn33WwNFcXHkFEKvVesm2HTt21JNPPimDwaBffvlFixYtUnJysiwWiyTp1VdfrdIRMOerzb0yGAwyGo0qKyurNDEmKSlJb7/9tmbOnKnQ0FC1adNGhw4dqnEc5XtWnhRRVVVN2vm9+nyvypMxqlN9o6Hf+/Ln8fvqJHWlvBqKl5fXBdt4e3tLqv1jfAAAAAAAAAAAAACgHIketSA1NVWhoaEKDg5u6FAuqnHjxvYPorOysi7ZfsCAATIYDEpMTNRbb72lsrKyy46hNvdq7Nix6t+/v9auXatZs2ZV2ubYsWP242qCgoLsiR41iSMrK0uhoaEKDAysVpzlCRGNGjWSwWCocuJHfb5XKSkpCg0NtR+H8nvBwcHy9PTUmTNn7O9OQ7/3NX0eNZWcnKywsDD7ES6/5+XlZa98k5KSUi8xAcC1gOQ4AACA/8O/jQAAAABcD/jd5/IZGzqAa8H27dslSZGRkfL392/gaM5VumjSpEmF6+WJGzabTQcPHrzkOOXVHY4ePVohycPPz++CH3iXtzUaK75etblXSUlJkqSuXbte8GiZZs2a2StwnH/ER03iOHDggCSpe/fule7vhY7rSE1NlSQ5OTlVmhTRokWLSvvV53tVPleXLl0qrerxzDPP6JVXXlGPHj0aJL7KnP88yo9VOZ+fn1+1x7zYu7t161ZJ59YbFBRU4f7NN98sSSooKLDHBgAAAAAAAAAAAAC1jYoetWDTpk0aPny4mjZtqqeeekrvvPOOMjMzJZ075iMuLk5xcXF6+eWXq3RkyuUyGAx67rnn9N5779mTGzp37qyRI0dKOveBdXl8F5OcnKzOnTsrOjpavr6+9koOkZGRevTRRyv9cF2Szpw5I+lchYOWLVvqxIkT9gST2tyrtWvXasiQIfLz89PLL7+s+fPna+fOnfaKGW3atNHYsWMlSenp6dq/f7+9b03iWLt2rUaMGKHGjRtr3Lhx+vDDD1VQUCCDwaABAwaob9++lcZ58uRJnT59WgEBAbr77rv13nvvyWKxyGQy6aabbtJtt91Wab/6fK82bdqkESNGqGnTpho/frzee+895eXlyWQyaeTIkQoLC5PFYtG2bdsaJL7KlD8PV1dXPfbYY/r4449VWFgog8GgP/7xjxo0aFC1x7zYu7tlyxYlJSUpNDRUTz75pP71r3/Z19utWzfdfvvtkqQlS5bYj8IBAFzahRIlq8toNMpqtcpms9mPdbvQn8oSNgEAAAAAAAAAaCg5OTnVak+iRy2wWCx68803NWXKFLVr104fffSR0tLSJEkBAQFycnJScXGxmjdvruPHj9d5PDabTb6+vvroo4+UkZEhFxcX+fr6SpIyMzM1Z86cKo2zfPly9e/fX35+fpo1a5YyMjLk6ekpd3d3HTlyRHl5eQoLC1Pjxo0d+h04cEA5OTny8vLSm2++qaKiIk2bNk1Hjx6t1b0ym82aNm2aJk6cqBYtWuhvf/ubiouLlZmZaY9TOnfEx8yZMx2SDWoSx9mzZ/Xvf/9bTzzxhGJiYtSlSxf7nnh4eCgrK8u+z79/HnPnztWECRMUGxurLl26KDMzUz4+PnJxcdF3332nYcOGVehXn+9VaWmp3nrrLb300kuKiorS7NmzlZ6eLl9fX7m6uspqtWrWrFk6ffp0ncf34IMP6q677rrg/VWrVmnlypUOz6NXr17q3r27w/PYtGmTevXqVa19uNi7W1ZWpjfffFMvvfSS2rRpow8//FDp6elq3LixfHx8JEkbNmzQ0qVLqzUnAAAAAAAAAAAAAFQHiR615OTJk3ruuec0dOhQde3aVYGBgSorK1N6erp27dqlZcuWOXxIXpdsNpsmT56skSNHqnv37vLy8lJ2dra2b9+uL7/8UmfPnq3SOKmpqZo0aZJGjRql8PBwBQQEKCMjQ8uWLdPSpUv18MMPKywsrMLRI4WFhZoxY4YeeOABhYaGKj8/X87Ozvb7tblXqampmjhxovr27as+ffqodevWCgoKUnFxsX777Tdt27ZN//vf/1RYWFihb03iWLdunbKzszV8+HD94Q9/UEBAgE6cOKHZs2erffv2F6wisWXLFr3yyiv2fj4+Pjpy5Ii++uor5eXlVZroUdt7dSknTpzQhAkTNHz4cHXt2lVBQUEqLCxUQkKCFi9ebD8qp67jCwwMvOh9b29v+9e/fx7+/v46efKkPv30UyUkJKh79+7VmvtS7256eromTpyooUOHKiYmRgEBASotLdWBAwe0evVqrV+/3l5RBgAAAAAAAAAAAADqgiEyMtKWkpLS0HGgFsTGxmrChAkqKyvTnXfe2dDhXHdGjx6tQYMGaf/+/Zo6dWpDhwMA15Vu3brJ09Oz2v1yc3MdjqW62pyfjHY+i8VSz5HUnJeXV62Mw9EtAAAAAAAAAICrVXWPbjHWURwAAAAAAAAAAAAAAACoZSR6AAAAAAAAAAAAAAAAXCVI9AAAAAAAAAAAAAAAALhKkOgBAAAAAAAAAAAAAABwlSDR4zwZGRlX9d9Lly7VHXfcof79+18R8Vxvf7/++uu64447NHbs2CsiHv6+Ov4GAAAAAAAAAAAAgOowREZG2lJSUho6DgAAgBrr1q2bPD09q90vNzdX27Ztq4OI6oezs3Ol1y0WSz1HUnNeXl61Mo7RaJTVapXNZlNZWZlsNtsF/zRp0qRW5gQAAAAAAAAAoDbk5ORUqz0VPQAAAAAAAAAAAAAAAK4SJHoAAAAAAAAAAAAAAABcJUj0AAAAAAAAAAAAAAAAuEqQ6AEAAAAAAAAAAAAAAHCVINEDAAAAuAR3d3dFRETIx8enoUMBAAAAAAAAAFznSPQAAAAALiEuLk5du3bVoEGD1LJly4YOBwAAAAAAAABwHSPRAwAAALgEDw8PSZLJZFLfvn0VHh7ewBFVzU033aT//Oc/6tevX0OHUq+u13UDAAAAAAAAuD6Q6AEAAABUg9FoVM+ePdW5c+d6mc9kMmnWrFn67LPP5ObmVi9zAgAAAAAAAACuXCR6AAAAADUQFRWl2NhYGQyGOp2nc+fO8vLykrOzs2JiYup0LgAAAAAAAADAlY9EDwAAAKCG2rRpo759+8porLt/Vvft21fZ2dlKSUlRXFxcnc0DAAAAAAAAALg6ODV0AAAAAMDVrFWrVnJxcVF8fLwsFkutju3u7q4uXbpo1apVMpvNGj58uAICAnT69OkKbUNDQ3X33XfrhhtuUElJibZt26YzZ844tOnfv7/GjBmjhQsX6ocffnC49/LLL6tly5Z64oknlJ+fL0ny9/fX8OHDFRERIQ8PD50+fVpr167VypUrZbVaJUlPPfWUunbtqrFjx+quu+5S9+7dJUlHjhzRf/7zH6WlpTnM4+fnp5EjR6pTp05ycXFRSkqKfvzxR23evNmhnaenp0aOHKno6Gi5uroqLS1NP/74o9avX1/tdQMAAAAAAADAtYSKHgAAAMBlCg4O1i233CJXV9daHbdnz55ycnLS5s2blZCQIIPBoD59+lRoFxQUpBdffFHh4eFatWqVvvnmG/n6+mrYsGEO7RISElRSUqIePXo4XPfz81NYWJh27dplT/Lw8/PTP//5T8XExGjTpk366quvlJubq3vuuUejR4926G80GjVp0iRZrVYtXrxY27ZtU2RkpCZPniwXFxd7O29vb02bNk09evTQli1b9PXXX6usrEyPP/64brvtNns7d3d3vfTSS4qLi9PmzZvt7R599FH169ev2usGAAAAAAAAgGsJFT0AAACAWuDr66tbbrlFP/zwg0pLS2tlzL59+yo9PV2JiYmSpBMnTqhPnz5asmSJQ7vbb79drq6umj17ttatWydJWrlypR577DGHxJDCwkJt27ZNvXr1UmBgoDIyMiRJMTExkuRQLSM6OlpWq1Vz5861V9tYtWqV3nzzTcXFxWnevHkqKSmxt1++fHmFqhz9+vVT586dtXXrVknSHXfcIW9vb82aNcvedvXq1ZoxY4aGDh2qH3/8UVarVSNHjlRgYKA++eQTrV27VpK0Zs0a/etf/9KIESP0888/y2azVXndAAAAAAAAAHAtoaIHAAAAUEs8PT3l5+dXK2M1a9ZMrVu3dkieSEhIUFBQkMLDwx3aRkVFyWw2V0i0OHr0aIVxyxMizq/qERMTo7y8PO3atct+bdWqVXr88ccdxrRarUpOTpbJZJKHh4fDuMePH690bn9/f0mSwWBQ9+7dlZubq4SEBHs7i8WihQsXasWKFTKZTDIYDOrRo4eKioocEk+Kiop04MAB+fj4KDAwsNrrBgAAAAAAAIBrBRU9AAAAgFqSm5urzMzMWhmrb9++kqRffvlFJpPJ/vXIkSPVp08fHT58WJLk6uoqDw8PJSUlyWKxXHLcffv2KTMzUz169ND3338vHx8f3XDDDVq1apWsVqtD29DQUPXr109NmzaVh4eHDAaDPXHDaLx4znh5tQ8np3O/cjRp0kRubm46fPiwbDabQ9utW7faq364u7urSZMmstls+uijjxzaNWrUyN4mNze3WusGAAAAAAAAgGsFiR4AAABALcjKytKaNWtq5dgWo9Go3r17S5JeffXVCvdjY2M1f/58lZaW2hMpiouLqzS2zWbTxo0bNWTIEAUFBalz584yGAwO1TMk6aabbtL999+vtLQ0rVq1SpmZmfbjUlq3bn2ZK7x4fJKUmZmp+fPnV9omLS2t2usGAAAAAAAAgGsFiR4AAADAZUpPT1d8fLy9isXl6tSpk7y9vbVz506dOHHC4V6LFi0UHR2tLl26aOvWrTKbzbJYLPZKG1Wxbt06DRkyRD169FCnTp2UkpKiY8eOObQZPny4iouLNW3aNOXl5dmv9+/fv0ZrKigokNlsVlBQkAwGg0NVj6CgIHl7e+vIkSMym80ym81ydXXVjh07KlT/KGcymaq9bgAAAAAAAAC4Fly83jIAAACAizpx4oRWr15da0ke0v8d2zJv3jwtWrTI4c+8efMkSXFxcZIkq9WqgwcPys/PT507d3YY5w9/+EOl46elpenw4cPq2bOn2rZtW6GahyQ5OzsrPz/fIcmjadOmateuXY3WZLPZtG3bNnl6eiomJsZ+3Wg0avz48Zo0aZKMRqO9XZMmTexVTc6PKSgoqMbrBgAAAAAAAIBrARU9AAAAgBr67bfftGXLlgtWnagJNzc3RUdH6+jRozp9+nSF+2fOnNGRI0cUGRkpDw8P5eXl6euvv1b79u319NNPa/Xq1Tpz5ow6d+6s8PDwC86zbt06jRkzRjabTRs2bKhwf8+ePYqJidG4ceN0+PBhNWvWTL169VJhYaEaN24sk8lU7bUtWrRIkZGReuyxx9SmTRudPn1a3bt3V2hoqL766itZLBZ7u06dOunhhx9WmzZtdPLkSXl6eqp3794qLCzUiy++KEk1WjcAAAAAAAAAXO2o6AEAAADUwO7du5WQkFCrSR6S1LNnTzk7O2vz5s0XbJOQkCCTyaSePXtKko4eParXX39dx48f10033aThw4crNzdXr7zyykXHKCkp0b59+5SdnV3h/meffab169crIiJCo0aNUosWLfTOO+9o586dklSjI1Oys7P10ksvaevWrerVq5dGjhwpZ2dnvfvuu1q6dKlDu3/84x9av369oqOjde+992rAgAE6duz/t3fvQVpX9/3A38uywqKA3BERdZWbKEu8IDJiVEjTGqvRTtKajoOaMaN4q6OOnVGbRpo09VIztdbGeEnGNo5hrJ201ghFDFHGC2oF5aJkRSILuwgC6wLLsjy/P/jtxpVFd7ktT3i9Zphlz/d8zvdznvWv5e057+ehhx5qmbc7+wYAAAAAKHYllZWVherq6s7uAwBgt5166qnp1atXh+s2btyY+fPn74OO9o+ysrI2x5tPRSgGvXv33ivrdOnSJU1NTSkUCtm+fXsKhcIu/xx66KEdXv+b3/xmunfvnmTHFSSvvPJK3n333b3SOwAAAAAAB7cNGzZ0aL6rWwAA4AvU1dWle/fuaWpqyosvvpgPPvigs1sCAAAAAOAgJegBAABf4De/+U2OPvroVFdXt3nNCQAAAAAA7C9dOrsBKGaDBw/OjBkzMmPGjAwbNqyz2wEA9pFPPvkk77zzjpAHAAAAAACdzokenzFu3LjcdtttSZJvfetbn3vH/d/8zd/kpJNOyq9+9as88sgjLeMzZszYaW5TU1Pq6uqyfPnyvPbaa5kzZ84u126rPtlxH3x9fX0++OCDvPjii5kzZ06amprata9Pr3nbbbe16075UaNGZfr06UmS6urq3HDDDe1618GksbExy5cvT5I0NDR0bjMAAAAAAAAA/MET9NiHamtrs2nTpiRJaWlp+vbtm3HjxmXcuHG58MILc/fdd7eEBL6ovnmNQYMGZcyYMRkzZkzOOuusfP/73+9wwGDKlCntCnpMnjy5Q+sejNauXZtbbrmls9sAAAAAAAAA4CAh6LEPPfroo3n99ddbvi8pKcno0aNz2WWX5dhjj82dd96Zv/7rv051dXW76pvXmDRpUr7zne9k9OjRufzyy/Ov//qvHepr4sSJeeyxx7J58+ZdzikvL88ZZ5zRoXUBAAAAAAAAgH2rS2c3cDApFApZtGhR7rjjjlRVVaW8vDzXX399h9eYO3dufvGLXyRJzj777JSXl3eovlu3bjnzzDM/d96kSZPSrVu3DvUGAAAAAAAAAOxbTvToBA0NDXnwwQdz991357jjjsvYsWOzYMGCDq3xyiuv5NJLL01paWmOOuqodl3FkiSvvvpqTj/99EyePDmzZs3a5bwpU6YkSWpqajJo0KBdzuvRo0cuvvjiTJgwIf369cumTZuyZMmSPP3001m2bFmbNWPHjs3555+f4cOHp7y8POvXr89bb72Vp556KrW1tXutZsCAAbnooosybty49O3bN1u3bs3777+f5557LvPmzWuzZvDgwbnkkkty0kknpVu3bqmurs6zzz6b559/Po8++mh69uyZb3zjG63m33///UmSm266KStWrEiSTJgwITfddFOWLl2a22+/PVOmTMkf//EfZ8iQIdmyZUsWLlyYn//856mpqdkrfQAAAAAAAABwcBD06CTLly9PVVVVKioq8qUvfanDQY+GhoaWv3ft2v4f40svvZQTTzwxxx13XI455pgsX758pzkVFRU59thjs3nz5rz44ov5sz/7szbXGjBgQL773e9m0KBBKRQKqa2tTd++fTN+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jtjb/e1ra9euzS233NLZbQAAAAAAAADAPifo8Snvv/9+Nm/enPLy8owYMWKnoMfYsWNb/t6/f/8MGTIk1dXVreYMHz48SbJo0aJdvmfixIl57LHHdjox5NPKy8tzxhlntKvvRx99NK+//nq75rbH3u4PAAAAAAAAANg7unR2AweS7du3Z+nSpUmSkSNH7vS8srIyye+vB2n+vln37t1z1FFHJfn96SCfVSgU0q1bt5x55pmf28ukSZPSrVu3jm1gLzjQ+wMAAAAAAACAg5kTPT5j8eLFGTduXIYPH56SkpIUCoUkSbdu3VquZXn99dczceLEVFZW5tlnn22pPf7449Oly47szK5O9Hj11Vdz+umnZ/LkyZk1a9Yu+5gyZUqSpKamJoMGDdore2uPvd1fjx49cvHFF2fChAnp169fNm3alCVLluTpp5/OsmXL2qypqKjIN7/5zYwaNSplZWX54IMP8t///d+7fMfgwYNz//33J0luuummrFixotXzAQMG5KKLLsq4cePSt2/fbN26Ne+//36ee+65zJs3b5frAgAAAAAAAMCBxoken9Ec0Dj00EMzZMiQlvExY8aka9eu2bJlS37zm9+0GmvWfG3Lxx9/nNWrV7e5/ksvvZT6+vocd9xxOeaYY9qcU1FRkWOPPTabN2/Oiy++uDe21W57s78BAwbkrrvuyoUXXpiBAwdm7dq1KS8vz/jx4/N3f/d3Ofnkk3eqGTNmTL7//e/nlFNOSffu3fPRRx/liCOOyI033pivfOUrHd7PiBEjcu+99+YrX/lKDj/88NTW1iZJTjjhhNx4442ZOnVqh9cEAAAAAAAAgM4i6PEZy5YtS2NjY5LW17c0X9OyYMGCvPXWW2loaEj37t1bzWk+8WNX17YkydatWzN37twkyeTJk9uc0zz+61//Olu2bNmD3XTc3uqvS5cuufnmmzNo0KBUVVXl6quvzrXXXpupU6fmhRdeSGlpaaZNm5ZDDjmkpaasrCzXXnttunbtmnfffTdXX311brjhhnz729/OT37ykwwePLhDeykpKcl1112X8vLyzJ8/P1deeWWuv/76XH755Xn66aeTJOeff36GDRvWoXUBAAAAAAAAoLMIenzGtm3b8t577yX5fXAj+X3Q44033khjY2PeeeedVuPJ70/02NW1Lc1mzpyZJJk0aVKroEOy44qYSZMm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" width="677" /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8995455167205656082.post-91900124470143266552024-01-08T01:52:00.000-08:002024-01-08T01:52:39.300-08:00print path for python site-packages<br /><div><br /></div><div>put python -c .. cmd on terminal</div><div><br /></div><div>.</div><div><div style="background-color: #1f1f1f; color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div>python <span style="color: #d4d4d4;">-</span>c <span style="color: #ce9178;">"import site; print(site.getsitepackages())"</span></div><div>[<span style="color: #ce9178;">'/Users/user_name/anaconda3/envs/env_name/lib/python3.9/site-packages'</span>]</div></div></div><div>..</div><div><br /></div><div>Thank you!</div><div><br /></div><div><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8995455167205656082.post-80907835230918982922023-10-24T18:57:00.003-07:002023-10-24T18:59:01.672-07:00hugging face onnx exporting model quantisation method<p> refer to example code</p><p><br /></p><p>.</p><p><br /></p><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #c586c0;">from</span> <span style="color: #4ec9b0;">functools</span> <span style="color: #c586c0;">import</span> <span style="color: #4ec9b0;">partial</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #c586c0;">from</span> transformers <span style="color: #c586c0;">import</span> AutoTokenizer</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #c586c0;">from</span> optimum.onnxruntime <span style="color: #c586c0;">import</span> ORTQuantizer, ORTModelForSequenceClassification</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #c586c0;">from</span> optimum.onnxruntime.configuration <span style="color: #c586c0;">import</span> AutoQuantizationConfig, AutoCalibrationConfig</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;"><br /></span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;">model_id</span> <span style="color: #d4d4d4;">=</span> <span style="color: #ce9178;">"distilbert-base-uncased-finetuned-sst-2-english"</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;"><br /></span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;">onnx_model</span> <span style="color: #d4d4d4;">=</span> ORTModelForSequenceClassification.from_pretrained(<span style="color: #9cdcfe;">model_id</span>, <span style="color: #9cdcfe;">export</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">True</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;">tokenizer</span> <span style="color: #d4d4d4;">=</span> AutoTokenizer.from_pretrained(<span style="color: #9cdcfe;">model_id</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;">quantizer</span> <span style="color: #d4d4d4;">=</span> ORTQuantizer.from_pretrained(<span style="color: #9cdcfe;">onnx_model</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;">qconfig</span> <span style="color: #d4d4d4;">=</span> AutoQuantizationConfig.arm64(<span style="color: #9cdcfe;">is_static</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">True</span>, <span style="color: #9cdcfe;">per_channel</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">False</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #569cd6;"><br /></span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #569cd6;">def</span> <span style="color: #dcdcaa;">preprocess_fn</span>(<span style="color: #9cdcfe;">ex</span>, <span style="color: #9cdcfe;">tokenizer</span>):</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #c586c0;">return</span> <span style="color: #9cdcfe;">tokenizer</span>(<span style="color: #9cdcfe;">ex</span>[<span style="color: #ce9178;">"sentence"</span>])</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;"><br /></span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;">calibration_dataset</span> <span style="color: #d4d4d4;">=</span> <span style="color: #9cdcfe;">quantizer</span>.get_calibration_dataset(</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #ce9178;">"glue"</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">dataset_config_name</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"sst2"</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">preprocess_function</span><span style="color: #d4d4d4;">=</span><span style="color: #4ec9b0;">partial</span>(<span style="color: #dcdcaa;">preprocess_fn</span>, <span style="color: #9cdcfe;">tokenizer</span><span style="color: #d4d4d4;">=</span><span style="color: #9cdcfe;">tokenizer</span>),</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">num_samples</span><span style="color: #d4d4d4;">=</span><span style="color: #b5cea8;">50</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">dataset_split</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"train"</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;"><br /></span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;">calibration_config</span> <span style="color: #d4d4d4;">=</span> AutoCalibrationConfig.minmax(<span style="color: #9cdcfe;">calibration_dataset</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;"><br /></span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;">ranges</span> <span style="color: #d4d4d4;">=</span> <span style="color: #9cdcfe;">quantizer</span>.fit(</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">dataset</span><span style="color: #d4d4d4;">=</span><span style="color: #9cdcfe;">calibration_dataset</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">calibration_config</span><span style="color: #d4d4d4;">=</span><span style="color: #9cdcfe;">calibration_config</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">operators_to_quantize</span><span style="color: #d4d4d4;">=</span><span style="color: #9cdcfe;">qconfig</span>.operators_to_quantize,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;"><br /></span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;">model_quantized_path</span> <span style="color: #d4d4d4;">=</span> <span style="color: #9cdcfe;">quantizer</span>.quantize(</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">save_dir</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"path/to/output/model"</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">calibration_tensors_range</span><span style="color: #d4d4d4;">=</span><span style="color: #9cdcfe;">ranges</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">quantization_config</span><span style="color: #d4d4d4;">=</span><span style="color: #9cdcfe;">qconfig</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">)</div><p>..</p><p>options for several instructions</p><p>.</p><div style="background-color: #1f1f1f; color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><br /><br /><div>optimum<span style="color: #d4d4d4;">-</span>cli onnxruntime quantize <span style="color: #f44747;">--</span><span style="color: #dcdcaa;">help</span></div><div><span style="color: #9cdcfe;">usage</span>: optimum<span style="color: #d4d4d4;">-</span>cli <span style="color: #d4d4d4;"><</span>command<span style="color: #d4d4d4;">></span> [<span style="color: #d4d4d4;"><</span>args<span style="color: #d4d4d4;">></span>] onnxruntime quantize [<span style="color: #d4d4d4;">-</span>h] <span style="color: #f44747;">--</span>onnx_model ONNX_MODEL <span style="color: #d4d4d4;">-</span>o OUTPUT [<span style="color: #f44747;">--</span>per_channel] (<span style="color: #f44747;">--</span>arm64 <span style="color: #d4d4d4;">|</span> <span style="color: #f44747;">--</span>avx2 <span style="color: #d4d4d4;">|</span> <span style="color: #f44747;">--</span>avx512 <span style="color: #d4d4d4;">|</span> <span style="color: #f44747;">--</span>avx512_vnni <span style="color: #d4d4d4;">|</span> <span style="color: #f44747;">--</span>tensorrt <span style="color: #d4d4d4;">|</span> <span style="color: #d4d4d4;">-</span>c CONFIG)</div><br /><div><span style="color: #9cdcfe;">options</span>:</div><div> <span style="color: #d4d4d4;">-</span>h, <span style="color: #f44747;">--</span><span style="color: #dcdcaa;">help</span> show this <span style="color: #dcdcaa;">help</span> message <span style="color: #569cd6;">and</span> <span style="color: #dcdcaa;">exit</span></div><div> <span style="color: #f44747;">--</span>arm64 Quantization <span style="color: #c586c0;">for</span> <span style="color: #9cdcfe;">the</span> ARM64 architecture.</div><div> <span style="color: #f44747;">--</span>avx2 Quantization <span style="color: #c586c0;">with</span> AVX<span style="color: #d4d4d4;">-</span><span style="color: #b5cea8;">2</span> instructions.</div><div> <span style="color: #f44747;">--</span>avx512 Quantization <span style="color: #c586c0;">with</span> AVX<span style="color: #d4d4d4;">-</span><span style="color: #b5cea8;">512</span> instructions.</div><div> <span style="color: #f44747;">--</span>avx512_vnni Quantization <span style="color: #c586c0;">with</span> AVX<span style="color: #d4d4d4;">-</span><span style="color: #b5cea8;">512</span> <span style="color: #569cd6;">and</span> VNNI instructions.</div><div> <span style="color: #f44747;">--</span>tensorrt Quantization <span style="color: #c586c0;">for</span> <span style="color: #4fc1ff;">NVIDIA</span> TensorRT optimizer.</div><div> <span style="color: #d4d4d4;">-</span>c CONFIG, <span style="color: #f44747;">--</span>config CONFIG</div><div> <span style="color: #f44747;">`ORTConfig`</span> <span style="color: #d4d4d4;">file</span> to use to optimize <span style="color: #9cdcfe;">the</span> model.</div><br /><div>Required arguments:</div><div> <span style="color: #f44747;">--</span>onnx_model ONNX_MODEL</div><div> Path to <span style="color: #9cdcfe;">the</span> repository where <span style="color: #9cdcfe;">the</span> ONNX models to quantize are located.</div><div> <span style="color: #d4d4d4;">-</span>o OUTPUT, <span style="color: #f44747;">--</span>output OUTPUT</div><div> Path to <span style="color: #9cdcfe;">the</span> directory where to store generated ONNX model.</div><br /><div>Optional arguments:</div><div> <span style="color: #f44747;">--</span>per_channel Compute <span style="color: #9cdcfe;">the</span> quantization parameters on a per<span style="color: #d4d4d4;">-</span>channel basis.</div><br /></div><p>..</p><p><br /></p><p>refer to this page for details:</p><p><a href="https://huggingface.co/docs/optimum/onnxruntime/usage_guides/quantization#quantize-seq2seq-models">https://huggingface.co/docs/optimum/onnxruntime/usage_guides/quantization#quantize-seq2seq-models</a></p><p><br /></p><p><br /></p><p>refer to this code as well</p><p>.</p><p>you may be able to get idea. </p><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #6a9955;"># Export to ONNX</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;">model</span> <span style="color: #d4d4d4;">=</span> ORTModelForSeq2SeqLM.from_pretrained(model_path, <span style="color: #9cdcfe;">from_transformers</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">True</span>, <span style="color: #9cdcfe;">export</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">True</span>, <span style="color: #9cdcfe;">provider</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">'CUDAExecutionProvider'</span>).to(device)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;">model</span>.save_pretrained(onnx_path)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #6a9955;"><br /></span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #6a9955;"># quantization code</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;">encoder_quantizer</span> <span style="color: #d4d4d4;">=</span> ORTQuantizer.from_pretrained(onnx_path, <span style="color: #9cdcfe;">file_name</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">'encoder_model.onnx'</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;">decoder_quantizer</span> <span style="color: #d4d4d4;">=</span> ORTQuantizer.from_pretrained(onnx_path, <span style="color: #9cdcfe;">file_name</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">'decoder_model.onnx'</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;">decoder_wp_quantizer</span> <span style="color: #d4d4d4;">=</span> ORTQuantizer.from_pretrained(onnx_path, <span style="color: #9cdcfe;">file_name</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">'decoder_with_past_model.onnx'</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;">quantizer</span> <span style="color: #d4d4d4;">=</span> [<span style="color: #9cdcfe;">encoder_quantizer</span>, <span style="color: #9cdcfe;">decoder_quantizer</span>, <span style="color: #9cdcfe;">decoder_wp_quantizer</span>]</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;">dqconfig</span> <span style="color: #d4d4d4;">=</span> AutoQuantizationConfig.avx512_vnni(<span style="color: #9cdcfe;">is_static</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">False</span>, <span style="color: #9cdcfe;">per_channel</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">False</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #c586c0;">for</span> <span style="color: #9cdcfe;">q</span> <span style="color: #c586c0;">in</span> <span style="color: #9cdcfe;">quantizer</span>:</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">q</span>.quantize(<span style="color: #9cdcfe;">save_dir</span><span style="color: #d4d4d4;">=</span>output_path, <span style="color: #9cdcfe;">quantization_config</span><span style="color: #d4d4d4;">=</span><span style="color: #9cdcfe;">dqconfig</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><br /></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><br /></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #6a9955;">#inference code</span></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;">model</span> <span style="color: #d4d4d4;">=</span> ORTModelForSeq2SeqLM.from_pretrained(</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">model_id</span><span style="color: #d4d4d4;">=</span>model_path,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">encoder_file_name</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">'encoder_model_quantized.onnx'</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">decoder_file_name</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">'decoder_model_quantized.onnx'</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">decoder_with_past_file_name</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">'decoder_with_past_model_quantized.onnx'</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">provider</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">'CUDAExecutionProvider'</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">use_io_binding</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">True</span>,</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">).to(<span style="color: #569cd6;">self</span>.device)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;">tokenizer</span> <span style="color: #d4d4d4;">=</span> AutoTokenizer.from_pretrained(<span style="color: #ce9178;">'google/flan-t5-large'</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><br /></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;">...</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><br /></div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;">dataset</span> <span style="color: #d4d4d4;">=</span> <span style="color: #569cd6;">self</span>.dataset(input_dict)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;">dataset</span>.set_format(<span style="color: #9cdcfe;">type</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">'torch'</span>, <span style="color: #9cdcfe;">device</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">self</span>.device, <span style="color: #9cdcfe;">columns</span><span style="color: #d4d4d4;">=</span>[<span style="color: #ce9178;">'input_ids'</span>, <span style="color: #ce9178;">'attention_mask'</span>])</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;">data_loader</span> <span style="color: #d4d4d4;">=</span> DataLoader(<span style="color: #9cdcfe;">dataset</span>, <span style="color: #9cdcfe;">batch_size</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">self</span>.batch_size, <span style="color: #9cdcfe;">collate_fn</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">self</span>.data_collator)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #9cdcfe;">generated_outputs</span>: List[OUTPUT_TYPE] <span style="color: #d4d4d4;">=</span> []</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"><span style="color: #c586c0;">for</span> <span style="color: #9cdcfe;">i</span>, <span style="color: #9cdcfe;">batch</span> <span style="color: #c586c0;">in</span> <span style="color: #4ec9b0;">enumerate</span>(<span style="color: #9cdcfe;">data_loader</span>):</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">_batch</span> <span style="color: #d4d4d4;">=</span> {<span style="color: #9cdcfe;">key</span>: <span style="color: #9cdcfe;">val</span>.to(<span style="color: #569cd6;">self</span>.device) <span style="color: #c586c0;">for</span> <span style="color: #9cdcfe;">key</span>, <span style="color: #9cdcfe;">val</span> <span style="color: #c586c0;">in</span> <span style="color: #9cdcfe;">batch</span>.items()}</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">outputs</span> <span style="color: #d4d4d4;">=</span> <span style="color: #569cd6;">self</span>.model.generate(<span style="color: #d4d4d4;">**</span><span style="color: #9cdcfe;">_batch</span>, <span style="color: #9cdcfe;">generation_config</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">self</span>.generation_config)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> <span style="color: #9cdcfe;">decoded_outputs</span> <span style="color: #d4d4d4;">=</span> <span style="color: #569cd6;">self</span>.tokenizer.batch_decode(<span style="color: #9cdcfe;">outputs</span>.cpu().tolist(), <span style="color: #9cdcfe;">skip_special_tokens</span><span style="color: #d4d4d4;">=</span><span style="color: #569cd6;">True</span>)</div><div style="background-color: #1f1f1f; caret-color: rgb(204, 204, 204); color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; white-space: pre;"> </div><p>.</p><p>Thank you.</p><p>note! quantisation and optimise is different. </p><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8995455167205656082.post-70176923971587432162023-10-23T08:20:00.003-07:002023-10-23T08:20:18.299-07:00comparing custom custom_vit_image_processor vs vit_image_processor of tranformers<p> check custom image process is same with origin inner processing function in transformers.</p><p>.</p><div style="background-color: #1f1f1f; color: #cccccc; font-family: "Droid Sans Mono", "monospace", monospace; font-size: 14px; line-height: 19px; white-space: pre;"><div><span style="color: #9cdcfe;">pixel_values1</span> <span style="color: #d4d4d4;">=</span> <span style="color: #9cdcfe;">self</span>.<span style="color: #9cdcfe;">feature_extractor</span>(<span style="color: #9cdcfe;">images</span><span style="color: #d4d4d4;">=</span><span style="color: #9cdcfe;">image</span>, <span style="color: #9cdcfe;">return_tensors</span><span style="color: #d4d4d4;">=</span><span style="color: #ce9178;">"pt"</span>).pixel_values</div><br /><div> <span style="color: #6a9955;"># Convert numpy array to PyTorch tensor</span></div><div> <span style="color: #9cdcfe;">pixel_values2</span> <span style="color: #d4d4d4;">=</span> <span style="color: #9cdcfe;">self</span>.<span style="color: #dcdcaa;">custom_vit_image_processor</span>(<span style="color: #9cdcfe;">image</span>)</div><div> <span style="color: #9cdcfe;">pixel_values2</span> <span style="color: #d4d4d4;">=</span> <span style="color: #4ec9b0;">torch</span>.tensor(<span style="color: #9cdcfe;">pixel_values2</span>, <span style="color: #9cdcfe;">dtype</span><span style="color: #d4d4d4;">=</span><span style="color: #4ec9b0;">torch</span>.float32).unsqueeze(<span style="color: #b5cea8;">0</span>) <span style="color: #6a9955;"># Add batch dimension and ensure float32 type</span></div><br /><div> <span style="color: #6a9955;"># 1. Shape Check</span></div><div> <span style="color: #c586c0;">assert</span> <span style="color: #9cdcfe;">pixel_values1</span>.shape <span style="color: #d4d4d4;">==</span> <span style="color: #9cdcfe;">pixel_values2</span>.shape, <span style="color: #ce9178;">"The tensors have different shapes</span></div><div> <span style="color: #6a9955;"># 2. Absolute Difference</span></div><div> <span style="color: #9cdcfe;">diff</span> <span style="color: #d4d4d4;">=</span> <span style="color: #4ec9b0;">torch</span>.abs(<span style="color: #9cdcfe;">pixel_values1</span> <span style="color: #d4d4d4;">-</span> <span style="color: #9cdcfe;">pixel_values2</span>)</div><br /><div> <span style="color: #6a9955;"># 3. Summarize Discrepancies www.marearts.com</span></div><div> <span style="color: #9cdcfe;">mean_diff</span> <span style="color: #d4d4d4;">=</span> <span style="color: #4ec9b0;">torch</span>.mean(<span style="color: #9cdcfe;">diff</span>).item()</div><div> <span style="color: #9cdcfe;">max_diff</span> <span style="color: #d4d4d4;">=</span> <span style="color: #4ec9b0;">torch</span>.max(<span style="color: #9cdcfe;">diff</span>).item()</div><div> <span style="color: #9cdcfe;">min_diff</span> <span style="color: #d4d4d4;">=</span> <span style="color: #4ec9b0;">torch</span>.min(<span style="color: #9cdcfe;">diff</span>).item()</div><div> <span style="color: #dcdcaa;">print</span>(<span style="color: #569cd6;">f</span><span style="color: #ce9178;">"Mean Absolute Difference: </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">mean_diff</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>)</div><div> <span style="color: #dcdcaa;">print</span>(<span style="color: #569cd6;">f</span><span style="color: #ce9178;">"Maximum Absolute Difference: </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">max_diff</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>)</div><div> <span style="color: #dcdcaa;">print</span>(<span style="color: #569cd6;">f</span><span style="color: #ce9178;">"Minimum Absolute Difference: </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">min_diff</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>)</div><br /><br /><div> <span style="color: #6a9955;"># Additionally, if you want to see where the maximum difference occurs:</span></div><div> <span style="color: #9cdcfe;">max_diff_position</span> <span style="color: #d4d4d4;">=</span> <span style="color: #4ec9b0;">torch</span>.where(<span style="color: #9cdcfe;">diff</span> <span style="color: #d4d4d4;">==</span> <span style="color: #9cdcfe;">max_diff</span>)</div><div> <span style="color: #dcdcaa;">print</span>(<span style="color: #569cd6;">f</span><span style="color: #ce9178;">"Position of Maximum Difference: </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">max_diff_position</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>)</div></div><p>..</p><p><br /></p><p>Thank you.</p><p>Hope to helpful.</p><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8995455167205656082.post-25756399379381802752023-10-17T09:48:00.006-07:002023-10-18T06:56:31.797-07:00nerf studio installation error
error:<div><br /></div><div><br /></div>
.
<code>
VanillaPipeline.get_train_loss_dict: 12.6875
Traceback (most recent call last):
File "/home/mare/anaconda3/envs/nerfstudio/bin/ns-train", line 8, in <module>
sys.exit(entrypoint())
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/nerfstudio/scripts/train.py", line 262, in entrypoint
main(
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/nerfstudio/scripts/train.py", line 247, in main
launch(
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/nerfstudio/scripts/train.py", line 189, in launch
main_func(local_rank=0, world_size=world_size, config=config)
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/nerfstudio/scripts/train.py", line 100, in train_loop
trainer.train()
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/nerfstudio/engine/trainer.py", line 259, in train
loss, loss_dict, metrics_dict = self.train_iteration(step)
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/nerfstudio/utils/profiler.py", line 127, in inner
out = func(*args, **kwargs)
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/nerfstudio/engine/trainer.py", line 479, in train_iteration
_, loss_dict, metrics_dict = self.pipeline.get_train_loss_dict(step=step)
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/nerfstudio/utils/profiler.py", line 127, in inner
out = func(*args, **kwargs)
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/nerfstudio/pipelines/base_pipeline.py", line 298, in get_train_loss_dict
ray_bundle, batch = self.datamanager.next_train(step)
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/nerfstudio/data/datamanagers/base_datamanager.py", line 542, in next_train
ray_bundle = self.train_ray_generator(ray_indices)
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1518, in _wrapped_call_impl
return self._call_impl(*args, **kwargs)
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/torch/nn/modules/module.py", line 1527, in _call_impl
return forward_call(*args, **kwargs)
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/nerfstudio/model_components/ray_generators.py", line 56, in forward
ray_bundle = self.cameras.generate_rays(
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/nerfstudio/cameras/cameras.py", line 463, in generate_rays
raybundle = cameras._generate_rays_from_coords(
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/nerfstudio/cameras/cameras.py", line 646, in _generate_rays_from_coords
coord_stack[coord_mask, :] = camera_utils.radial_and_tangential_undistort(
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/torch/_dynamo/eval_frame.py", line 328, in _fn
return fn(*args, **kwargs)
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/torch/_dynamo/eval_frame.py", line 490, in catch_errors
return callback(frame, cache_entry, hooks, frame_state)
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/torch/_dynamo/convert_frame.py", line 641, in _convert_frame
result = inner_convert(frame, cache_size, hooks, frame_state)
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/torch/_dynamo/convert_frame.py", line 133, in _fn
return fn(*args, **kwargs)
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/torch/_dynamo/convert_frame.py", line 389, in _convert_frame_assert
return _compile(
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/torch/_dynamo/convert_frame.py", line 569, in _compile
guarded_code = compile_inner(code, one_graph, hooks, transform)
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/torch/_dynamo/utils.py", line 189, in time_wrapper
r = func(*args, **kwargs)
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/torch/_dynamo/convert_frame.py", line 491, in compile_inner
out_code = transform_code_object(code, transform)
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/torch/_dynamo/bytecode_transformation.py", line 1028, in transform_code_object
transformations(instructions, code_options)
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/torch/_dynamo/convert_frame.py", line 458, in transform
tracer.run()
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/torch/_dynamo/symbolic_convert.py", line 2074, in run
super().run()
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/torch/_dynamo/symbolic_convert.py", line 724, in run
and self.step()
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/torch/_dynamo/symbolic_convert.py", line 688, in step
getattr(self, inst.opname)(inst)
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/torch/_dynamo/symbolic_convert.py", line 2162, in RETURN_VALUE
self.output.compile_subgraph(
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/torch/_dynamo/output_graph.py", line 833, in compile_subgraph
self.compile_and_call_fx_graph(tx, list(reversed(stack_values)), root)
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/contextlib.py", line 75, in inner
return func(*args, **kwds)
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/torch/_dynamo/output_graph.py", line 957, in compile_and_call_fx_graph
compiled_fn = self.call_user_compiler(gm)
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/torch/_dynamo/utils.py", line 189, in time_wrapper
r = func(*args, **kwargs)
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/torch/_dynamo/output_graph.py", line 1024, in call_user_compiler
raise BackendCompilerFailed(self.compiler_fn, e).with_traceback(
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/torch/_dynamo/output_graph.py", line 1009, in call_user_compiler
compiled_fn = compiler_fn(gm, self.example_inputs())
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/torch/_dynamo/repro/after_dynamo.py", line 117, in debug_wrapper
compiled_gm = compiler_fn(gm, example_inputs)
File "/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/torch/__init__.py", line 1607, in __call__
return self.compiler_fn(model_, inputs_, **self.kwargs)
torch._dynamo.exc.BackendCompilerFailed: backend='eager' raised:
TypeError: eager() got an unexpected keyword argument 'mode'
Set TORCH_LOGS="+dynamo" and TORCHDYNAMO_VERBOSE=1 for more information
You can suppress this exception and fall back to eager by setting:
import torch._dynamo
torch._dynamo.config.suppress_errors = True
</module></code>
..<div><br /></div><div>Solution</div><div><br /></div><div>* find where train.py is installed<br /><div>(nerfstudio) mare@mare>NerfStudio$ find /home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/ -name 'train.py'</div><div><br /></div><div>in my case it installed in here:</div><div>/home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/nerfstudio/scripts/train.py</div><div>(nerfstudio) </div><div><br /></div><div><br /></div><div>* edit train.py code </div><div><div>nano /home/mare/anaconda3/envs/nerfstudio/lib/python3.8/site-packages/nerfstudio/scripts/train.py</div></div><div><br /></div><div>add this two line on top of code</div><div><div>import torch._dynamo</div><div>torch._dynamo.config.suppress_errors = True</div></div><div><br /></div><div>ok it's my solution.</div><div><br /></div><div><br /></div><div>Thank you.</div><div>www.marearts.com</div><div><br /></div><div><br /></div><div><br /></div></div><div><br /></div>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8995455167205656082.post-19942888772014639782023-10-08T23:59:00.002-07:002023-10-08T23:59:24.674-07:00round to first significant decimal<p>The code extract first found and convert to 1</p><p>ex)</p><div style="background-color: #1f1f1f; color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div><span style="color: #9cdcfe;">Input</span>: <span style="color: #b5cea8;">0.02323</span>, Output: <span style="color: #b5cea8;">0.01</span></div><div><span style="color: #9cdcfe;">Input</span>: <span style="color: #b5cea8;">0.0023</span>, Output: <span style="color: #b5cea8;">0.001</span></div><div><span style="color: #9cdcfe;">Input</span>: <span style="color: #b5cea8;">23</span>, Output: <span style="color: #b5cea8;">1</span></div><div><span style="color: #9cdcfe;">Input</span>: <span style="color: #b5cea8;">0.0042323</span>, Output: <span style="color: #b5cea8;">0.001</span></div></div><p>..</p><p> refer to this code:</p><div style="background-color: #1f1f1f; color: #cccccc; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div><span style="color: #569cd6;">def</span> <span style="color: #dcdcaa;">custom_marearts_round</span>(<span style="color: #9cdcfe;">number</span>):</div><div> <span style="color: #6a9955;"># Ensure number is a float</span></div><div> <span style="color: #9cdcfe;">float_number</span> <span style="color: #d4d4d4;">=</span> <span style="color: #4ec9b0;">float</span>(<span style="color: #9cdcfe;">number</span>)</div><br /><div> <span style="color: #6a9955;"># If number is zero, return it as is</span></div><div> <span style="color: #c586c0;">if</span> <span style="color: #9cdcfe;">number</span> <span style="color: #d4d4d4;">==</span> <span style="color: #b5cea8;">0</span>:</div><div> <span style="color: #c586c0;">return</span> <span style="color: #b5cea8;">0</span></div><div> <span style="color: #6a9955;"># If the number is an integer, return 1</span></div><div> <span style="color: #c586c0;">elif</span> <span style="color: #9cdcfe;">float_number</span>.<span style="color: #dcdcaa;">is_integer</span>():</div><div> <span style="color: #c586c0;">return</span> <span style="color: #b5cea8;">1</span></div><div> </div><div> <span style="color: #6a9955;"># Convert the number to exponential notation</span></div><div> <span style="color: #9cdcfe;">exponential_notation</span> <span style="color: #d4d4d4;">=</span> <span style="color: #569cd6;">f</span><span style="color: #ce9178;">'</span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">float_number</span><span style="color: #569cd6;">:.1e}</span><span style="color: #ce9178;">'</span></div><div> </div><div> <span style="color: #6a9955;"># Extract the exponent part and convert to int</span></div><div> <span style="color: #9cdcfe;">exponent</span> <span style="color: #d4d4d4;">=</span> <span style="color: #4ec9b0;">int</span>(<span style="color: #9cdcfe;">exponential_notation</span>.<span style="color: #dcdcaa;">split</span>(<span style="color: #ce9178;">'e'</span>)[<span style="color: #d4d4d4;">-</span><span style="color: #b5cea8;">1</span>])</div><div> </div><div> <span style="color: #6a9955;"># Convert to desired output format</span></div><div> <span style="color: #9cdcfe;">result</span> <span style="color: #d4d4d4;">=</span> <span style="color: #4ec9b0;">float</span>(<span style="color: #569cd6;">f</span><span style="color: #ce9178;">'1e</span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">exponent</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">'</span>)</div><div> </div><div> <span style="color: #c586c0;">return</span> <span style="color: #9cdcfe;">result</span></div><br /><div><span style="color: #6a9955;"># Examples:</span></div><div><span style="color: #9cdcfe;">input1</span> <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">0.02323</span></div><div><span style="color: #9cdcfe;">output1</span> <span style="color: #d4d4d4;">=</span> <span style="caret-color: rgb(220, 220, 170); color: #dcdcaa;">custom_marearts_round</span>(<span style="color: #9cdcfe;">input1</span>)</div><div><span style="color: #dcdcaa;">print</span>(<span style="color: #569cd6;">f</span><span style="color: #ce9178;">"Input: </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">input1</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">, Output: </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">output1</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>)</div><br /><div><span style="color: #9cdcfe;">input2</span> <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">0.0023</span></div><div><span style="color: #9cdcfe;">output2</span> <span style="color: #d4d4d4;">=</span> <span style="caret-color: rgb(220, 220, 170); color: #dcdcaa;">custom_marearts_round</span>(<span style="color: #9cdcfe;">input2</span>)</div><div><span style="color: #dcdcaa;">print</span>(<span style="color: #569cd6;">f</span><span style="color: #ce9178;">"Input: </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">input2</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">, Output: </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">output2</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>)</div><br /><div><span style="color: #9cdcfe;">input3</span> <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">23</span></div><div><span style="color: #9cdcfe;">output3</span> <span style="color: #d4d4d4;">=</span> <span style="caret-color: rgb(220, 220, 170); color: #dcdcaa;">custom_marearts_round</span>(<span style="color: #9cdcfe;">input3</span>)</div><div><span style="color: #dcdcaa;">print</span>(<span style="color: #569cd6;">f</span><span style="color: #ce9178;">"Input: </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">input3</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">, Output: </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">output3</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>)</div><br /><div><span style="color: #9cdcfe;">input4</span> <span style="color: #d4d4d4;">=</span> <span style="color: #b5cea8;">0.0042323</span></div><div><span style="color: #9cdcfe;">output4</span> <span style="color: #d4d4d4;">=</span> <span style="caret-color: rgb(220, 220, 170); color: #dcdcaa;">custom_marearts_round</span>(<span style="color: #9cdcfe;">input4</span>)</div><div><span style="color: #dcdcaa;">print</span>(<span style="color: #569cd6;">f</span><span style="color: #ce9178;">"Input: </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">input4</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">, Output: </span><span style="color: #569cd6;">{</span><span style="color: #9cdcfe;">output4</span><span style="color: #569cd6;">}</span><span style="color: #ce9178;">"</span>)</div><br /><br /><br /></div><p>..</p><p><br /></p><p><br /></p><p>🙇🏻♂️ Thank you</p><p>www.marearts.com</p><p><br /></p>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-8995455167205656082.post-32192225012335578632023-09-27T02:37:00.003-07:002023-09-27T02:37:30.873-07:00Free font download site (fonts.google.com)<p> go to >> fonts.google.com</p><p><br /></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWw4y5QNHRw5zXb0oPVps9AB5AFW7soSy0nyoOiqs2WVoX-b6_Iz5jBnZSSnYXzZq9u-oSNCR0AmYifCmZ7a347VB_YHNM_mJk5V3RvY0BLcd0hDnQqMz6_KrfcLh-mXJVURwE2s6CkZj9q3j6Z2ev3SJuR8paw6JLSTRqGKqNhyqdULpt0JsLJt0uErM/s2818/Screenshot%202023-09-27%20at%2012.35.39.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1700" data-original-width="2818" height="386" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWw4y5QNHRw5zXb0oPVps9AB5AFW7soSy0nyoOiqs2WVoX-b6_Iz5jBnZSSnYXzZq9u-oSNCR0AmYifCmZ7a347VB_YHNM_mJk5V3RvY0BLcd0hDnQqMz6_KrfcLh-mXJVURwE2s6CkZj9q3j6Z2ev3SJuR8paw6JLSTRqGKqNhyqdULpt0JsLJt0uErM/w640-h386/Screenshot%202023-09-27%20at%2012.35.39.png" width="640" /></a></div><br /><p><br /></p><p>🙇🏻♂️</p>Unknownnoreply@blogger.com0