Files
stable-diffusion-webui-forge/modules_forge/google_blockly/additional_samplers.py
2024-09-07 02:07:11 -07:00

61 lines
22 KiB
Python

"""
This file is created by an inference implementation for Google Blockly.
Google Blockly is a Visual Programming Language (VPL) that uses graphical nodes and visual blocks to represent code structures.
For more information, refer to the official Google Blockly documentation and examples:
- Google Blockly repository: https://github.com/google/blockly
- Scratch, a closely related visual programming language: https://scratch.mit.edu/
- Scratch examples: https://www.google.com/search?tbm=isch&q=Scratch
- Scratch overview: https://en.wikipedia.org/wiki/Scratch_(programming_language)
**IMPORTANT:**
- This code contains an `exec` call. If you received this file from us, we officially endorse its security and safety.
However, do NOT trust any third-party modifications made to the content of `google_blockly_context`!
**CONTENT:**
The `google_blockly_context` file is compressed using GZIP to reduce repository size (usually making files 10x smaller).
When decompressed, the `google_blockly_context` consists of two components:
1. **Google Blockly Visual Programming Graph (`google_blockly_GB_graph`):**
- The graph `google_blockly_GB_graph` is the preferred and only form of the work for making modifications. This graph is the
source of the program. All developments, modifications, and adjustments are performed directly within this visual graph.
- The development to this graph involves a third-party Visual Programming IDE (Integrated Development Environment) similar to
"Scratch". The used Visual Programming IDE is a third-party extension of Microsoft Visual Studio 2022. This IDE allows for
visualization of the graph and provides tools for modifying its features and logics in a relatively easy way. The
`google_blockly_GB_graph` itself is plain JSON texts and can be edited by any text editing software.
2. **Python Runtime for Google Blockly Visual Programming Graph (`GoogleBlocklyRuntime`):**
- This runtime is projected directly from the Google Blockly standards and specifications.
- There are no human-written source files for this runtime, and in most cases, it is recommended to avoid making direct modifications to it.
**LICENSE:**
The decompressed content of `google_blockly_context` is protected by the AGPL V3 license.
If you modify the `google_blockly_context` content, all changes must be governed by the AGPL V3 license:
- AGPL V3 License: https://www.gnu.org/licenses/agpl-3.0.en.html
Unless required by applicable law or agreed to in writing, software distributed under this license is provided "AS IS,"
without warranties or conditions of any kind, either express or implied. Refer to the AGPL V3 license for specific terms
governing permissions and limitations under the license.
"""
import base64
import gzip
from io import BytesIO
google_blockly_context = r'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'
with gzip.GzipFile(fileobj=BytesIO(base64.b64decode(google_blockly_context)), mode='rb') as gzip_file:
google_blockly_context = gzip_file.read().decode('utf-8')
exec(google_blockly_context, globals())
del google_blockly_context