gen java_genJava.go

// Copyright 2020 - 2021 The xgen Authors. All rights reserved. Use of this

// source code is governed by a BSD-style license that can be found in the

// LICENSE file.

//

// Package xgen written in pure Go providing a set of functions that allow you

// to parse XSD (XML schema files). This library needs Go version 1.10 or

// later.

package xgen

import (

"fmt"

"os"

"reflect"

"strings"

)

var javaBuildInType = map[string]bool{

"Boolean": true,

"Byte": true,

"Character": true,

"List": true,

"List": true,

"Float": true,

"Integer": true,

"Short": true,

"String": true,

"QName": true,

"Long": true,

}

// GenJava generate Java programming language source code for XML schema

// definition files.

func (gen *CodeGenerator) GenJava() error {

for _, ele := range gen.ProtoTree {

if ele == nil {

continue

}

funcName := fmt.Sprintf("Java%s", reflect.TypeOf(ele).String()[6:])

callFuncByName(gen, funcName, []reflect.Value{reflect.ValueOf(ele)})

}

f, err := os.Create(gen.File + ".java")

if err != nil {

return err

}

defer f.Close()

packageName := gen.Package

if packageName == "" {

packageName = "schema"

}

var importPackage = `import java.util.ArrayList;

import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;

import javax.xml.bind.annotation.XmlAccessorType;

import javax.xml.bind.annotation.XmlAttribute;

import javax.xml.bind.annotation.XmlElement;

import javax.xml.bind.annotation.XmlSchemaType;

import javax.xml.bind.annotation.XmlType;`

f.Write([]byte(fmt.Sprintf("%s\n\npackage %s;\n\n%s\n%s", copyright, packageName, importPackage, gen.Field)))

return err

}

func genJavaFieldName(name string) (fieldName string) {

for _, str := range strings.Split(name, ":") {

fieldName += MakeFirstUpperCase(str)

}

var tmp string

for _, str := range strings.Split(fieldName, ".") {

tmp += MakeFirstUpperCase(str)

}

fieldName = tmp

fieldName = strings.Replace(fieldName, "-", "", -1)

return

}

func genJavaFieldType(name string) string {

if _, ok := javaBuildInType[name]; ok {

return name

}

var fieldType string

for _, str := range strings.Split(name, ".") {

fieldType += MakeFirstUpperCase(str)

}

fieldType = MakeFirstUpperCase(strings.Replace(fieldType, "-", "", -1))

if fieldType != "" {

return fieldType

}

return "void"

}

// JavaSimpleType generates code for simple type XML schema in Java language

// syntax.

func (gen *CodeGenerator) JavaSimpleType(v *SimpleType) {

if v.List {

if _, ok := gen.StructAST[v.Name]; !ok {

fieldType := genJavaFieldType(getBasefromSimpleType(trimNSPrefix(v.Base), gen.ProtoTree))

content := fmt.Sprintf("\tprotected List %s;\n", fieldType, genJavaFieldName(v.Name))

gen.StructAST[v.Name] = content

gen.Field += fmt.Sprintf("\n@XmlAccessorType(XmlAccessType.FIELD)\n@XmlAttribute(required = true, name = \"%s\")\npublic class %s {\n%s}\n", v.Name, genJavaFieldName(v.Name), gen.StructAST[v.Name])

return

}

}

if v.Union && len(v.MemberTypes) > 0 {

if _, ok := gen.StructAST[v.Name]; !ok {

content := " {\n"

for memberName, memberType := range v.MemberTypes {

if memberType == "" { // fix order issue

memberType = getBasefromSimpleType(memberName, gen.ProtoTree)

}

fieldType := genJavaFieldType(memberType)

content += fmt.Sprintf("\t@XmlElement(required = true)\n\tprotected %s %s;\n", fieldType, genJavaFieldName(memberName))

}

content += "}\n"

gen.StructAST[v.Name] = content

gen.Field += fmt.Sprintf("\npublic class %s%s", genJavaFieldName(v.Name), gen.StructAST[v.Name])

}

return

}

if _, ok := gen.StructAST[v.Name]; !ok {

fieldType := genJavaFieldType(getBasefromSimpleType(trimNSPrefix(v.Base), gen.ProtoTree))

content := fmt.Sprintf("\tprotected %s %s;\n", fieldType, genJavaFieldName(v.Name))

gen.StructAST[v.Name] = content

gen.Field += fmt.Sprintf("\n@XmlAccessorType(XmlAccessType.FIELD)\n@XmlAttribute(required = true, name = \"%s\")\npublic class %s {\n%s}\n", v.Name, genJavaFieldName(v.Name), gen.StructAST[v.Name])

}

return

}

// JavaComplexType generates code for complex type XML schema in Java language

// syntax.

func (gen *CodeGenerator) JavaComplexType(v *ComplexType) {

if _, ok := gen.StructAST[v.Name]; !ok {

content := " {\n"

for _, attrGroup := range v.AttributeGroup {

fieldType := getBasefromSimpleType(trimNSPrefix(attrGroup.Ref), gen.ProtoTree)

content += fmt.Sprintf("\t@XmlElement(required = true)\n\tprotected %s %s;\n", genJavaFieldType(fieldType), genJavaFieldName(attrGroup.Name))

}

for _, attribute := range v.Attributes {

var required = ", required = true"

if attribute.Optional {

required = ""

}

fieldType := genJavaFieldType(getBasefromSimpleType(trimNSPrefix(attribute.Type), gen.ProtoTree))

content += fmt.Sprintf("\t@XmlAttribute(name = \"%s\"%s)\n\tprotected %sAttr %s;\n", attribute.Name, required, fieldType, genJavaFieldName(attribute.Name))

}

for _, group := range v.Groups {

var fieldType = genJavaFieldType(getBasefromSimpleType(trimNSPrefix(group.Ref), gen.ProtoTree))

if group.Plural {

fieldType = fmt.Sprintf("List", fieldType)

}

content += fmt.Sprintf("\tprotected %s %s;\n", fieldType, genJavaFieldName(group.Name))

}

for _, element := range v.Elements {

fieldType := genJavaFieldType(getBasefromSimpleType(trimNSPrefix(element.Type), gen.ProtoTree))

if element.Plural {

fieldType = fmt.Sprintf("List", fieldType)

}

content += fmt.Sprintf("\t@XmlElement(required = true, name = \"%s\")\n\tprotected %s %s;\n", element.Name, fieldType, genJavaFieldName(element.Name))

}

content += "}\n"

gen.StructAST[v.Name] = content

gen.Field += fmt.Sprintf("\npublic class %s%s", genJavaFieldName(v.Name), gen.StructAST[v.Name])

}

return

}

// JavaGroup generates code for group XML schema in Java language syntax.

func (gen *CodeGenerator) JavaGroup(v *Group) {

if _, ok := gen.StructAST[v.Name]; !ok {

content := " {\n"

for _, element := range v.Elements {

var fieldType = genJavaFieldType(getBasefromSimpleType(trimNSPrefix(element.Type), gen.ProtoTree))

if element.Plural {

fieldType = fmt.Sprintf("List", fieldType)

}

content += fmt.Sprintf("\t@XmlElement(required = true, name = \"%s\")\n\tprotected %s %s;\n", element.Name, fieldType, genJavaFieldName(element.Name))

}

for _, group := range v.Groups {

var fieldType = genJavaFieldType(getBasefromSimpleType(trimNSPrefix(group.Ref), gen.ProtoTree))

if group.Plural {

fieldType = fmt.Sprintf("List", fieldType)

}

content += fmt.Sprintf("\tprotected %s %s;\n", fieldType, genJavaFieldName(group.Name))

}

content += "}\n"

gen.StructAST[v.Name] = content

gen.Field += fmt.Sprintf("\npublic class %s%s", genJavaFieldName(v.Name), gen.StructAST[v.Name])

}

return

}

// JavaAttributeGroup generates code for attribute group XML schema in Java language

// syntax.

func (gen *CodeGenerator) JavaAttributeGroup(v *AttributeGroup) {

if _, ok := gen.StructAST[v.Name]; !ok {

content := " {\n"

for _, attribute := range v.Attributes {

var required = ", required = true"

if attribute.Optional {

required = ""

}

fieldType := genJavaFieldType(getBasefromSimpleType(trimNSPrefix(attribute.Type), gen.ProtoTree))

content += fmt.Sprintf("\t@XmlAttribute(name = \"%s\"%s)\n\tprotected %sAttr %s;\n", attribute.Name, required, fieldType, genJavaFieldName(attribute.Name))

}

content += "}\n"

gen.StructAST[v.Name] = content

gen.Field += fmt.Sprintf("\npublic class %s%s", genJavaFieldName(v.Name), gen.StructAST[v.Name])

}

return

}

// JavaElement generates code for element XML schema in Java language syntax.

func (gen *CodeGenerator) JavaElement(v *Element) {

if _, ok := gen.StructAST[v.Name]; !ok {

var fieldType = genJavaFieldType(getBasefromSimpleType(trimNSPrefix(v.Type), gen.ProtoTree))

if v.Plural {

fieldType = fmt.Sprintf("List", fieldType)

}

content := fmt.Sprintf("\tprotected %s %s;\n", fieldType, genJavaFieldName(v.Name))

gen.StructAST[v.Name] = content

gen.Field += fmt.Sprintf("\n@XmlAccessorType(XmlAccessType.FIELD)\n@XmlElement(required = true, name = \"%s\")\npublic class %s {\n%s}\n", v.Name, genJavaFieldName(v.Name), gen.StructAST[v.Name])

}

return

}

// JavaAttribute generates code for attribute XML schema in Java language syntax.

func (gen *CodeGenerator) JavaAttribute(v *Attribute) {

if _, ok := gen.StructAST[v.Name]; !ok {

var fieldType = genJavaFieldType(getBasefromSimpleType(trimNSPrefix(v.Type), gen.ProtoTree))

if v.Plural {

fieldType = fmt.Sprintf("List", fieldType)

}

content := fmt.Sprintf("\tprotected %s %s;\n", fieldType, genJavaFieldName(v.Name))

gen.StructAST[v.Name] = content

gen.Field += fmt.Sprintf("\n@XmlAccessorType(XmlAccessType.FIELD)\n@XmlAttribute(required = true, name = \"%s\")\npublic class %s {\n%s}\n", v.Name, genJavaFieldName(v.Name), gen.StructAST[v.Name])

}

return

}

一键复制

编辑

Web IDE

原始数据

按行查看

历史

def train_step(real_ecg, dim): noise = tf.random.normal(dim) for i in range(disc_steps): with tf.GradientTape() as disc_tape: generated_ecg = generator(noise, training=True) real_output = discriminator(real_ecg, training=True) fake_output = discriminator(generated_ecg, training=True) disc_loss = discriminator_loss(real_output, fake_output) gradients_of_discriminator = disc_tape.gradient(disc_loss, discriminator.trainable_variables) discriminator_optimizer.apply_gradients(zip(gradients_of_discriminator, discriminator.trainable_variables)) ### for tensorboard ### disc_losses.update_state(disc_loss) fake_disc_accuracy.update_state(tf.zeros_like(fake_output), fake_output) real_disc_accuracy.update_state(tf.ones_like(real_output), real_output) ####################### with tf.GradientTape() as gen_tape: generated_ecg = generator(noise, training=True) fake_output = discriminator(generated_ecg, training=True) gen_loss = generator_loss(fake_output) gradients_of_generator = gen_tape.gradient(gen_loss, generator.trainable_variables) generator_optimizer.apply_gradients(zip(gradients_of_generator, generator.trainable_variables)) ### for tensorboard ### gen_losses.update_state(gen_loss) ####################### def train(dataset, epochs, dim): for epoch in tqdm(range(epochs)): for batch in dataset: train_step(batch, dim) disc_losses_list.append(disc_losses.result().numpy()) gen_losses_list.append(gen_losses.result().numpy()) fake_disc_accuracy_list.append(fake_disc_accuracy.result().numpy()) real_disc_accuracy_list.append(real_disc_accuracy.result().numpy()) ### for tensorboard ### # with disc_summary_writer.as_default(): # tf.summary.scalar('loss', disc_losses.result(), step=epoch) # tf.summary.scalar('fake_accuracy', fake_disc_accuracy.result(), step=epoch) # tf.summary.scalar('real_accuracy', real_disc_accuracy.result(), step=epoch) # with gen_summary_writer.as_default(): # tf.summary.scalar('loss', gen_losses.result(), step=epoch) disc_losses.reset_states() gen_losses.reset_states() fake_disc_accuracy.reset_states() real_disc_accuracy.reset_states() ####################### # Save the model every 5 epochs # if (epoch + 1) % 5 == 0: # generate_and_save_ecg(generator, epochs, seed, False) # checkpoint.save(file_prefix = checkpoint_prefix) # Generate after the final epoch display.clear_output(wait=True) generate_and_save_ecg(generator, epochs, seed, False)
06-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值